(function($){
	var rootUrl = 'widgets.anobii.com'; 
	var anobiiUrl = 'www.anobii.com'; 

	if (typeof BPs=='object') return; else BPs = {};	//if more than one widgets installed, stop loading immediately
	
	//this is for live case, normal case live will have a false value
	if (typeof live=="undefined"){
		var headID = document.getElementsByTagName("head")[0];         
		var cssNode = document.createElement('link');
		cssNode.type = 'text/css';
		cssNode.rel = 'stylesheet';
		cssNode.href = 'http://static.anobii.com/anobi/live/css/blogbadge.css?100002';
		headID.appendChild(cssNode);
	}
	else
		seq = Math.floor(Math.random()*100000);

	var pre_id = '#anobii_blogbadge_';

	jsShells = {
		'html': {
			'wooden': '<div class="wooden_original"><div class="shelf_badge""><div class="shelf_top"><a href="http://www.anobii.com" class="logo"><span>aNobii</span></a></div><table class="badge"></table><div class="shelf_bottom"><a href="#shelfUrl#" target="_blank">Visit my shelf</a></div></div></div>',
			'plain': '<div class="classic"><div class="shelf_badge"><div class="shelf_top"><a href="http://www.anobii.com" class="logo"><span>aNobii</span></a></div><table class="badge"></table><div class="shelf_bottom"><a href="#shelfUrl#" target="_blank">Visit my shelf</a><div class="link_to_anobii"><a href="http://www.anobii.com/">www.anobii.com</a></div></div></div>'
		},
		'javascript': {
			'wooden': '<div class="wooden_original"><div class="shelf_badge"><div class="shelf_top"><a href="http://www.anobii.com" class="logo"><span>aNobii</span></a></div><ul class="badge clearfix"></ul><div class="shelf_bottom"><a class="previous" href="#">Previous</a><a class="next" href="#">Next</a><a target="_blank" href="#shelfUrl#">Visit my shelf</a></div></div></div>',
			'plain': '<div class="classic"><div class="shelf_badge"><div class="shelf_top"><a href="http://www.anobii.com" class="logo"><span>aNobii</span></a></div><table class="badge"></table><div class="shelf_bottom"><a class="previous" style="width: 20px;" href="#">Previous</a><a class="next" style="width: 20px;" href="#">Next</a><a href="#shelfUrl#" target="_blank">Visit my shelf</a><div class="link_to_anobii"><a href="http://www.anobii.com/">www.anobii.com</a></div></div></div>',
			'list': '<div class="shelf_badge"><div class="shelf_top"><a href="http://www.anobii.com" class="logo"><span>aNobii</span></a></div><ul class="badge clearfix"></ul><div class="shelf_bottom"><a class="previous" href="#">Previous</a><a class="next" href="#">Next</a><a target="_blank" href="#shelfUrl#">See all</a></div></div>'
		}
	};

	$(document).ready(function(){
		if (typeof live=="undefined"){
			$('.anobii_blogbadge').each(function(i, el){
				var id = el.id.split('_')[2];
				if (!id) return;
				$.getScript('http://'+rootUrl+'/badge_result?settingId='+id,	function(){
					var data = {
						id: pre_id+id,
						data: BPs[id],
						page: 0
					};
					renderPreview(data.id, data.data);
				});
			});
		} else{
		//	fetchData();
		}
	});

	var renderPreview = function(previewId, previewData){
		var id = typeof previewId == 'undefined'? this.id:previewId;
		var data = typeof previewData == 'undefined'? this.data:previewData;		
		var page = typeof this.page == 'undefined'? 0: this.page;
		if (id.indexOf('#') == 0) id = id.slice(1);
		if (id.indexOf('anobii_blogbadge')<0 && id != 'badge_preview')
			id = 'anobii_blogbadge_' + id;

		if ($('#' + id).length){
			var wrapper = null;
//			if (data.host == 'blogger' || data.host == 'vox' || data.host == 'xanga' || data.host == 'typepad' || data.host == 'javascript')
//				data.type = 'javascript';
			
			wrapper = $(jsShells[data.type][data.mode].replace('#shelfUrl#', data.shelfUrl));
			$('#' + id).html(wrapper);

			thisData = {id:id, data:data, page:page};
			
			var container = wrapper.find('ul').length? wrapper.find('ul') : wrapper.find('table');
			if (data.width == '100%'){
				var tempWidth = data.width;
				data.width = container.width();
			}
			if (data.type == 'javascript'){
				container.html(genBooks(thisData));
				if (page==0) wrapper.find('.previous').css('visibility', 'hidden'); else wrapper.find('.previous').css('visibility', 'visible');
				if (page>=Math.ceil(data.items.length/data.itemsPerPage)-1) wrapper.find('.next').css('visibility', 'hidden'); else wrapper.find('.next').css('visibility', 'visible');
				wrapper.data('data', thisData);
				//assgin pagination events
				wrapper.click(function(e){
					var obj = $(e.target);
					if (obj.is('.next')){
						wrapper.data('data').page++;
						renderPreview.call(wrapper.data('data'));
						return false;
					} else if (obj.is('.previous')){
						wrapper.data('data').page--;
						renderPreview.call(wrapper.data('data'));
						return false;
					}
				});
			} else if (data.type == 'html'){
				wrapper.find('table').html(genBooks(thisData));
			}

			if (typeof tempWidth != 'undefined')
				data.width = tempWidth;
			
			if (data.width.toString().indexOf('%')<0)
				wrapper.find('.shelf_badge').width(parseInt(data.width) - 14);
			calPadding(id, data.itemsPerPage);
		}
		if (this.id && this.data) return this;
	}

	genBooks = function(info){
		var JS_baseCodeShelf = '<li><div class="ratio_#ratio#"><a class="cover_image" href="#url#"><img src="#image#" title="#title#" /></a></div></li>';
		var JS_baseCodeShelfEmpty = '<li><div class="ratio_3"></div></li>';

		var JS_baseCodePlain = '<td valign="bottom" align="center"><a href="#url#" class="cover_image"><img src="#image#" alt="#title#" /></a><span class="title"><a href="#url#">#titleBig#</a><span class="subtitle"><a href="#url#">#subtitle#</a></span><span class="author"><a href="#url#">#author#</a><span></span></td>';
		var JS_baseCodePlainEmpty = '<td valign="bottom" align="center"></td>';
		
		

		var HTML_baseCodeShelf = '<td valign="bottom" align="center"><a href="http://'+anobiiUrl+'/badge_product?badgeId=#badgeId#&pos=#pos#" class="cover_image"><img src="http://'+rootUrl+'/badge_image?badgeId=#badgeId#&pos=#pos#&seq=#seq#"/></a></td>';
		var HTML_baseCodeShelfEmpty = '<td valign="bottom" align="center"></td>';

		var colums = Math.max(1, Math.floor((info.data.width-14) / 105));

		if (info.data.type == 'javascript'){
			
			var code='';
			var curItem = info.page * info.data.itemsPerPage;

			for (var i=curItem; i<curItem+info.data.itemsPerPage; ){
				if (info.data.mode == 'plain')
					code+='<tr>';
				for (var col=0; col < colums; col++){
					if (info.data.mode == 'wooden'){
						var baseCode = JS_baseCodeShelf;
						var baseCodeEmpty = JS_baseCodeShelfEmpty;
					} else if (info.data.mode == 'plain'){
						var baseCode = JS_baseCodePlain;
						var baseCodeEmpty = JS_baseCodePlainEmpty;
					}
					if (i<info.data.items.length && i-curItem<info.data.itemsPerPage){
						for (var j=0; j<info.data.details.length; j++) {
	                           if (!info.data.items[i]) {
                                               continue;
								//break;
							}						
           
switch (info.data.details[j]) {
								case 'title':
									baseCode = baseCode.replace('#titleBig#', info.data.items[i].title?info.data.items[i].title:''); break;
								case 'subtitle':
									baseCode = baseCode.replace('#subtitle#', info.data.items[i].subtitle?info.data.items[i].subtitle:''); break;
								case 'author':
									baseCode = baseCode.replace('#author#', info.data.items[i].author?info.data.items[i].author:''); break;
								case 'cover':
									baseCode = baseCode.replace('#ratio#', info.data.items[i].ratio?info.data.items[i].ratio:'')
														.replace(/#url#/g,info.data.items[i].link?info.data.items[i].link:'')
														.replace('#title#', info.data.items[i].title?info.data.items[i].title:'')
														.replace('#image#',info.data.items[i].image?info.data.items[i].image:''); break;
							}
						}
						baseCode = baseCode.replace(/\#.*?\#/g,'');
						code+=baseCode;
					}
					else
						code+=baseCodeEmpty;					
					i++;
				}
				if (info.data.mode == 'plain')
					code+='</tr>';
			}
		} else if (info.data.type == 'html'){
			var baseCode = HTML_baseCodeShelf;
			var baseCodeEmpty = HTML_baseCodeShelfEmpty;

			var code='';
			var total_items = 0;
			while (total_items<info.data.itemsPerPage){
				code+='<tr>';
				for (var i=0; i<colums; i++){
					total_items++;
					if (total_items<=info.data.items.length)
						code += baseCode.replace(/\#badgeId\#/g, info.id.match(/anobii_blogbadge/) ? info.id.split('_')[2] : info.id)
										.replace(/\#pos\#/g, total_items)
										.replace(/\#seq\#/g, typeof seq == 'undefined' ? 1 : seq);
					else
						code+=baseCodeEmpty;
				}
				code+='</tr>';
			}
		}
		
		return code;
	}

	var calPadding = function(id, itemsPerPage){
		var outerW = $('#' + id).find('ul.badge').width();
		var innerW = $('#' + id).find('ul.badge li').width();
		$('ul.badge').css('padding-left', Math.max(0,(outerW - Math.max(1, Math.floor(outerW/innerW)) * innerW) / 2));
	}
})(jQuery);
