
(function($){
	var GATEWAY='/lg.php?u=';
	var LOOMIA_KEY = '6209221612';
	var LOOMIA_BASE = 'http://a.loomia.com/pub/';
	var LOOMIA_URL_MAP = {
		'related':"http://nbc-recs.loomia.com/pub/",
		'click':"http://nbc-clicks.loomia.com/pub/",
		'metrics':"http://nbc-metrics.loomia.com/pub/"
	};
	var DISPLAY_PERCENTAGE = 0;
	var DISPLAY_LIMIT = 4;
	var COOKIE_DAYS_EXPIRE=180;
	var LOOMIA_COOKIE_NAME='display_lrecs1';
	var self;
	var uid;
	var settings;
	var sent_loomia_tag=false;
	$.fn.loomia = function(options){
		settings = $.extend({}, $.fn.loomia.defaults, options);
		self=this;
		uid=$.fn.loomia.get_cookie(settings.uidCookieName);
		if(uid===undefined){
			uid=$.fn.loomia.generateuid();
			$.fn.loomia.set_cookie(settings.uidCookieName,uid)
		}
		$.fn.loomia.refresh(settings.itemGUID);
	};
	$.fn.loomia.refresh = function(itemGUID){
		$.fn.loomia.click();
		if($.fn.loomia.can_display()){
			$(self).html('');
			settings.itemGUID=itemGUID;
			if(settings.unhideSelector){
				$(settings.unhideSelector).html('');
			}
			
			$.fn.loomia.get_related();
		}
		if(settings.unhideSelector){
			$(settings.unhideSelector).css({display:'block'});
		}

	};
	
	$.fn.loomia.can_display = function(){
		var c=$.fn.loomia.get_cookie(settings.cookieName);
		
		if(c===undefined){
			
			var rnd=Math.floor(Math.random()*100);

			if(Math.floor(Math.random()*100) < parseInt(settings.displayPercentage)){
				$.fn.loomia.set_cookie(settings.cookieName,1);
				return true;
			}
			else{
				$.fn.loomia.set_cookie(settings.cookieName,0);
				return false;
			}
		}
		else{
			if(parseInt(c)==1){
				return true;
			}
			return false;
		}
	};
	$.fn.loomia.generateuid = function(){
		var rnd=Math.floor(Math.random()*10000000);
		var d = new Date();
		rnd=rnd+d.getTime().toString();
		return rnd;
	};
	$.fn.loomia.click = function(){
		var params={puid:uid};
		if(!sent_loomia_tag && document.location.search.match(/[?&]loomia_ow=/)){
			var q=document.location.search.split(/[?&]/);
			for(i=0;i<q.length;i++){
				if(q[i].match(/loomia_ow/)){
					params.loomia_tag=q[i];
					sent_loomia_tag=true;
					break;
				}
			}
		}
		$.fn.loomia.call_loomia('click',params);
	};
	$.fn.loomia.get_related = function(){
		$.fn.loomia.call_loomia('related',null,function(ret){
			$.fn.loomia.metrics(ret.metrics);
			if(ret.recs.length){
				var t='';
				var limit=ret.recs.length<settings.displayLimit?ret.recs.length:settings.displayLimit;
				for(var i=0;i<limit;i++){
					var replacements={
						LINK:ret.recs[i].link,
						IMAGE:ret.recs[i].img,
						DESC:ret.recs[i].summary,
						TITLE:ret.recs[i].title
					};
					t+=$.fn.loomia.template_replace(settings.recItemTemplate,replacements);
				}
				if(t.length){
					var replacements={
						ITEMS:t
					};
					$(self).html($.fn.loomia.template_replace(settings.recModuleTemplate,replacements));
				}

			}

		});
	};
	$.fn.loomia.template_replace = function(template,replacements){
		if(template){
			for(var r in replacements){
				var replace=replacements[r];
				if(settings.templateLengths[r]!==undefined){
					var l=settings.templateLengths[r];
					var chopped=false;
					if(l.count!==undefined){
						if(replace.length>l.count){
							chopped=true;
							replace=replace.replace(new RegExp("^(.{0," + l.count + "}).*"), "$1");
						}
					}
					if(chopped && l.endwith!==undefined){
						replace+=l.endwith;
					}
				}
				var reg= new RegExp('\\[\\$\\$'+r+'\\]','g');
				template=template.replace(reg,replace);
			}		
		}
		return template;

	};
	
	// $.fn.loomia.template_replace = function(template,replacements){
	// 	if(template){
	// 		for(var r in replacements){
	// 			var reg= new RegExp('\\[\\$\\$'+r+'\\]','g');
	// 			template=template.replace(reg,replacements[r])
	// 		}		
	// 	}
	// 	return template;
	// 
	// };
	$.fn.loomia.metrics = function(metricsData){
		$.fn.loomia.call_loomia('metrics',{metricslist:metricsData});
	};
	$.fn.loomia.call_loomia = function(callType,params){
		var base=settings.baseURL;
		if(settings.urlMap[callType]!==undefined){
			base=settings.urlMap[callType];
		}
		var url=base+settings.apiKey+'/item/'+settings.itemGUID+'/'+callType;
		var ajax_settings={
			url: url,
			data: params,
			dataType:'jsonp',
			type:'GET'
		};
		if(settings.localGateway){
			ajax_settings.url=settings.localGateway+escape(url);
			ajax_settings.dataType='json';
		}

		if(typeof(arguments[2])==='function'){
			ajax_settings.success=arguments[2];
		}

		
		
		if(settings.itemGUID){
			$.ajax(ajax_settings);
		}
		
	};
	$.fn.loomia.set_cookie = function(name,value,expire_days){
		var e=new Date();
		var expires=(60*60*24*settings.cookieExpire*1000);
		e.setTime((e.getTime()+expires));
		document.cookie=name+'='+escape(value)+ ";expires="+e.toGMTString()+';path=/';
	}
	$.fn.loomia.get_cookie = function(name){
		var start = document.cookie.indexOf( name + "=" );
		var len = start + name.length + 1;
		if ((!start) && (name!= document.cookie.substring( 0, name.length ))){
			return undefined;
		}
		if (start==-1){
			return undefined;
		}
		var end = document.cookie.indexOf( ";", len );
		if (end==-1){end = document.cookie.length;}
		return unescape(document.cookie.substring(len,end));
	};
	$.fn.loomia.defaults = {
		apiKey: LOOMIA_KEY,
		baseURL: LOOMIA_BASE,
		urlMap: LOOMIA_URL_MAP,
		recItemTemplate: '<li class="image_item "><a href="[$$LINK]" class="image_item_image"><img height="45" width="80" src="[$$IMAGE]" alt="[$$TITLE]"/></a><span class="image_item_text"><h3><a class="play_link" href="[$$LINK]">[$$TITLE]</a></h3><span class="image_item_desc">[$$DESC]</span> <span class="image_item_subtitle"/> <span class="image_item_footer"/> </span></li>',
		recModuleTemplate:'<ul class="image_items">[$$ITEMS]</ul>',
		templateLengths: {TITLE:{count:23},DESC:{count:50,endwith:' ...'}},
		localGateway: GATEWAY,
		displayPercentage: DISPLAY_PERCENTAGE,
		displayLimit: DISPLAY_LIMIT,
		cookieName: LOOMIA_COOKIE_NAME,
		uidCookieName: 'lmiauid',
		unhideSelector:false,
		cookieExpire:COOKIE_DAYS_EXPIRE,
		itemGUID: 0
	};
})(jQuery);