
adnet = window.adnet || {};

(function(){

	function createCookie(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	}
	adnet.fn_createCookie = createCookie;

	function readCookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}
	adnet.fn_readCookie = readCookie;
	

	function randomString(string_length) {
		var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
		var randomstring = '';
		for (var i=0; i<string_length; i++) {
			var rnum = Math.floor(Math.random() * chars.length);
			randomstring += chars.substring(rnum,rnum+1);
		}
		return randomstring;
	}
	
	function qhash(str)
	{
		var codes = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];
		var ncodes = codes.length-1;
		
		var regs = [0,0,0,0,0,0,0,0];
		var nregs = regs.length;
		
		var j = 0;
		for(var i=str.length-1;i>=0;i--)
		{
			var c = str.charCodeAt(i);
			
			regs[j]+=c;
			j++;
			if (j>=nregs) j=0;
		}
		
		var ret = '';
		var j = str.length & 7;
		for(var i=0;i<nregs;i++)
		{
			var c = regs[j++] & 255;//0xff;
			ret += codes[c & ncodes];
			ret += codes[(c >> 4) & ncodes];
			if (j>=nregs) j=0;
		}
		
		return ret;
	}
	
	function normaliseUrl(url)
	{
		if (url.indexOf('?')==-1) return url;
			
		var parts = url.split('?');
		url = parts[0];
		var qs = parts[1];
		qs = parse_qs(qs);
		
		delete(qs['gclid']);
		delete(qs['utm_source']);
		delete(qs['utm_medium']);
		delete(qs['utm_term']);
		delete(qs['utm_content']);
		delete(qs['utm_campaign']);
		delete(qs['session']);
		delete(qs['session_id']);
		delete(qs['sessionId']);
		delete(qs['adnet_admin']);
		delete(qs['adnet_new_ads']);
		
		url = url+form_qs(qs);
		
		return url;
	}
	
	function form_qs(obj)
	{
		var qs = [];
		
		for(key in obj)
		{
			qs.push(key+'='+encodeURIComponent(obj[key]));
		}

		return (qs.length) ? '?'+qs.sort().join('&') : '';
	}
	
	function parse_qs(qs)
	{
		var parts = qs.split('&');
		var obj = {};
		
		for(var i=0;i<parts.length;i++)
		{
			var tparts = parts[i].split('=');
			var key = tparts[0];
			var value = tparts[1] || '';
			obj[key] = decodeURIComponent(value);
		}
		
		return obj;
	}
	
	var domain = 'adnet-media.net';
	if (window.location.host == 'adnetmedia.local') domain = 'adnetmedia.local';
		
	// Session
	var sess_id = readCookie('adnet_sess_id');
	if (sess_id == null) 
	{
		sess_id = randomString(16);
		createCookie('adnet_sess_id', sess_id,  7);
	}
	
	// Correlator
	if (!adnet.correlator) {
		adnet.correlator = sess_id+randomString(16);
	}
	
	// Unit index
	if (!adnet.unit_index) adnet.unit_index=0;
	adnet.unit_index++;
	
	// Geo location
	if (!adnet.geo) adnet.geo = readCookie('adnet_geo');
	if (!adnet.geo) {
		// Load geo
		adnet.geo = 'XX';
		var script_tag = 'script';
		document.write('<'+script_tag+' src="http://'+domain+'/ads/geo/?sess='+sess_id+'" type="text/javascript"></'+script_tag+'>');
	}
	
	// Url and page hash
	if (!adnet.page_url)
	{
		adnet.page_url = normaliseUrl(window.location.protocol+'//'+window.location.hostname+window.location.pathname+window.location.search);
		adnet.page_hash = qhash(adnet.page_url);
	}
	
	// Ad unit id
	if (typeof adnet_placement_id == 'undefined') adnet_placement_id = '';
	
	
	//
	// 	Admin script
	//
	var admin_mode = readCookie('adnet_admin_mode');
	adnet.console_loaded = adnet.console_loaded || false;
	if (admin_mode || window.location.href.indexOf('adnet_admin')!=-1) 
	{
		if (!adnet.console_loaded)
		{ 
			var script_tag = 'script';
			document.write('<'+script_tag+' src="http://'+domain+'/publisher/console/?hash='+adnet.page_hash+'" type="text/javascript"></'+script_tag+'>');
		}
		createCookie('adnet_admin_mode', admin_mode || 1);
		adnet.console_loaded = true;
	}
	//
	//
	//
	
	
	//
	// Ad query parameters
	//
	if (typeof adnet_page_no_crawl=='undefined') adnet_format='300x310';
	
	var params = {};
	params.pg = adnet.page_hash;
	params.url = adnet.page_url;
	params.cor = adnet.correlator;
	params.ui = adnet.unit_index;
	params.geo = adnet.geo;
	params.pi = adnet_placement_id;
	params.pub=adnet_publisher_id;
	if (typeof adnet_channel_id != 'undefined') params.ch = adnet_channel_id;
	if ((typeof adnet_keywords == 'undefined') || (adnet_keywords == '')) adnet_keywords = document.title;
	params.keywords = adnet_keywords;
	if (typeof adnet_page_no_crawl!='undefined') params.no_crawl=1;
	if (typeof adnet_tab != 'undefined') params.tab = adnet_tab;
	if (typeof adnet_tabbox_more_url != 'undefined') params.more_url = adnet_tabbox_more_url;
	if (typeof adnet_tabbox_tabs != 'undefined') params.tabs = adnet_tabbox_tabs;
	
	// Size
	if ((typeof adnet_width != 'undefined') && (typeof adnet_height != 'undefined')){
		adnet_size = adnet_width+'x'+adnet_height;
	} else {
		adnet_size = adnet_format;
		var parts = adnet_format.split("x");
		adnet_width = parts[0];
		adnet_height = parts[1];
	}
	params.size = adnet_size;
	params.rand = Math.floor(Math.random() * 10);
	
	var iframe_src = 'http://'+domain+'/ads/render/tabbox/'+form_qs(params);
	document.write('<iframe src="'+iframe_src+'" style="width: '+adnet_width+'px; height: '+adnet_height+'px; border: 0px; overflow-x: hidden;overflow-y: hidden;overflow:hidden;" frameborder="0" framescrolling="0" scrolling="no"></iframe>');
	
	// Dispose of one time config params
	window.adnet_width=undefined;
	window.adnet_height=undefined;
	window.adnet_size=undefined;
	window.adnet_format=undefined;
	window.adnet_channel_id=undefined;
})();