({
	name:"Cookie",
	set:function(n,v,c,dm){var d,e,domain="";if(dm){domain="domain="+dm;}if(c){d=new Date();d.setTime(d.getTime()+c*24*60*60*1000);e="; expires="+d.toGMTString()}document.cookie=escape(n)+"="+v+e+"; path=/;"+domain},
	get:function(n){var e,b,p,c=document.cookie;p=n+"=";b=c.indexOf(";"+" "+p);if(b==-1){b=c.indexOf(p);if(b!=0)return ""}else b+=2;e=c.indexOf(";",b);if(e==-1)e=c.length;return unescape(c.substring(b+p.length,e))},
	unset:function(n){return this.set(n,"",1,"")},
	init:function(){window[this.name]=this}
}).init();
function _onunload() {
	Cookie.unset("eniro_cat_sent");
};
window.attachEvent ? window.attachEvent("onbeforeunload", _onunload) : window.addEventListener("unload", _onunload, false);

var cat_replace_table = [];
cat_replace_table[0]={original_value:"e_travel",replace_list:"e_travel,travel,apollo,åre,båt*,biljett*,biluthyr*,camping*,finnair,fisketur*,flyres*,fritidsresor,funäsdalen,göteborg,guid*,helsingborg,hotel*,jönköping,karlstad,konferens*,kursgård*,london,malmö,malmö aviation,norrköping,norwegian,paris,pensionat*,resedagboken,resia,resor,rum*,ryan air,ryanair,sälen,sas,scandic,siljaline,sj,skånetrafiken,skistar,sl,solresor,stockholm,stug*,swebus*,tåg*,taxi*,thailand,ticket,turist*,vandrarhem*,västtrafik,viking line,vikingline,ving*"};
cat_replace_table[1]={original_value:"e_health",replace_list:"e_health,health,*pedagog*,*sjuk*,*terapeut*,*vård*,akademiska sjukhuset,ambulans*,apotek*,blodgiv*,bmi,danderyds sjukhus,diet*,distrikssköt*,doktor,fass,folktandvård*,företagshälsovård*,försäkringskassa*,friskis,glasögon,gravid*,gym*,hälsa*,hälsokost*,huddinge sjukhus,hygien*,kosmetik*,läkar*,läkemedel*,landstinget,massage,massör*,medicin*,meditation*,mödravård*,motion*,naprapat*,naturläkemedel,optik*,parfym*,qigong*,recept*,sahlgrenska,skönhet*,smittskyddsinstitutet,socialstyrelsen,södersjukhuset,svininfluensa*,synsam,tand*,yoga"};
cat_replace_table[2]={original_value:"e_motor",replace_list:"e_motor,motor,855,audi,automat,båt*,bensin*,bil,bil*!bilj;bill*;mobil*,bmw,bmx,buss*,cross,däck,diesel,entreprenad*,fälg*,ford,fyrhjuling,garage*,golf,honda,husbil,husvagn,jordbruk*,kombi,kvarndammen,lastbil*,mazda,mc,mekonomen,mercedes,moped*,okq8,olja,oljo*,opel,p1800,passat,peugeot,porsche,racer,renault,saab,skoda,släp*,snöskot*,statoil,suzuki,toyota,traktor*,transportfordon*,transportstyrelsen,v70,vägverket,veteran,veteranmotor*,vinterdäck,volvo,vw,xc70,yamaha"};
cat_replace_table[3]={original_value:"e_finance",replace_list:"e_finance,finance,advokat*,aktier*,avanza,bank,bokföring*,bostad*,bostadsrätt*,bovision,di,domstol*,ekonomi,faktur*,fastighet*,fastighetsbyrån,finans*,folksam,forex,försäkring*,fritidshus*,gård*,handelsbanken,hemnet,inkasso*,juridik,jurist*,kredit*,kronofogd*,lån,låna,länsförsäkringar,mäklare,mötesplatsen,nordea,nordnet,pant*,pension*,ppm,ratsit,redovisning*,revisor*,rolex,seb,skandia,skatte*,sms lån,swedbank,tomt*,trygg hansa,trygghansa,upphandling*,värdepapper*,värdering*,vattenfall,villa*,villor*"};
cat_replace_table[4]={original_value:"e_fashion",replace_list:"e_fashion,fashion,hm,*kläder*,*klänning,accessoar*,balett*,barn*,dans*,garderob,gardin*,garn*,gina tricot,guld*,handdarbet*,hemtex,jeans,juvel*,klock*,köpcentrum*,lindex,mama,matt*,outlet*,plånb*,postorder,second hand*,silver*,skinn*,sko*,skrädd*,slips*,smycke*,solar*,stormarknad*,strump*,sy*,textil*,tyg*,varuhus*,väsk*,väv*"};
cat_replace_table[5]={original_value:"e_telecom",replace_list:"e_telecom,telecom,*fax*,antenn*,apple,batteri*,boxer,bredband*,canon,cd,clas ohlson,clas ohlsson,com hem,comhem,comviq,data*,dator*,dell,digital*,discshop,dvd,elfa,ericson,ericsson,film*,foto*,hårdvar*,hifi*,internet,ip,iphone,ipod,it,kabel-tv,kamer*,kanal 5,kanal5,komplett,lagring,mac,media markt,microsoft,minne*,mjukvar*,mobil*,mp3,multimedia*,musik*,n95,net on net,netonnet,nikon,nintendo,nokia,objektiv*,playstation ,program*,projektor,ps2,ps3,radio,samsung,satellit*,siemens,skrivar*,sony,sps,tele*,telia,tptest,tre,tv,tv4,video*,webhallen,wii,windows 7,xbox,xbox 360"};

var host_categories = [];
host_categories[0]={name:"www.eniro.se", category:"e_ss"};
host_categories[1]={name:"gulasidorna.eniro.se", category:"e_gs"};
host_categories[2]={name:"personer.eniro.se", category:"e_wp"};
host_categories[3]={name:"kopochsalj.eniro.se", category:"e_kos"};

eniroAdaptMA = new function()
{
	//	config values
	var _aid = 'eniro';
	var _catMeta = "keywords";

	//	Members
	function getCookie(_cid)
	{ 
		if (document.cookie.length > 0)
		{ 
			var begin = document.cookie.indexOf(_cid+"=");
			if (begin != -1)
			{ 
				begin += _cid.length+1;
				var end = document.cookie.indexOf(";", begin);
				if (end == -1) end = document.cookie.length;
				return unescape(document.cookie.substring(begin, end));
			}
		}
		return "no_cookie";
	};
	
	function trim(q) {
		return q.replace(" ,",",").replace(", ",",").replace(/^\s+/, "").replace(/\s+$/, "");
	}
	
	function extractHostCategory(){
		for(var i=0;i<host_categories.length;i++){
			if(document.location.href.indexOf(host_categories[i].name)>-1 ||
				(document.referrer && document.referrer.indexOf(host_categories[i].name)>-1) ){
				return host_categories[i].category+",";
			}
		}
		return "";
	}
	
	//Category extraction algorithm where cutegories are extracted form meta tag, page content and URL and then filtered through mapping table
	//Result is list of unique, comma separated categories list 
	function extractCategory(){
		/*var result = filterCategory(getMetaData(_catMeta));

		var urlCategory = getURLCategory("search_word");
		if(!urlCategory)
			urlCategory = getURLCategory("category_name");
			
		if(!checkCategoryExists(result, urlCategory))
			result+=(result?",":"")+urlCategory;
			
		var contentCat = extractContentCategory();
		if(contentCat && !checkCategoryExists(result, contentCat))
			result+=(result?",":"")+contentCat;
		
		return result;*/
		var urlCategory = getURLCategory("search_word", document.location.href);
		if(urlCategory)
			return urlCategory; 
		urlCategory = getURLCategory("category_name", document.location.href);
		if(urlCategory)
			return urlCategory;
		if(document.referrer)
		{	
			urlCategory = getURLCategory("search_word", document.referrer);
			if(urlCategory)
				return urlCategory;
			urlCategory = getURLCategory("category_name", document.referrer);
			if(urlCategory)
				return urlCategory;
		}
		var result = filterCategory(getMetaData(_catMeta));
		if(result)
			return result;
		var contentCat = extractContentCategory();
		if(contentCat)
			return contentCat;
		return "";
	}
	
	function extractContentCategory(){
		var filterDiv = document.getElementById("filter");
		if(filterDiv && filterDiv.innerHTML.indexOf("Relaterade rubriker")>-1){
			var anchors = filterDiv.getElementsByTagName("A");
			for(var i=0;i<anchors.length && i < 3;i++){
				var content = trim(anchors[i].innerHTML);
				var result = filterCategory(content);
				if(result)
					return result;
			}
		}
		return null;
	}
	
	function checkCategoryExists(categoriesList, targetCategory){
		if(targetCategory && (categoriesList+",").indexOf(targetCategory+",")>-1)
			return true;
		if(targetCategory)
			return false;
		return true;
	}
	
	function getURLCategory(catParamName, source){
		var catEndChar = "&";
		var urlCatIndex = source.indexOf(catParamName+"=");
		if(urlCatIndex==-1){
			urlCatIndex = source.indexOf(catParamName+"/");
			catEndChar = "/";
		}
		if(urlCatIndex>-1){
			var queryStartIndex = urlCatIndex + catParamName.length + 1;
			var queryEndIndex = source.indexOf(catEndChar, queryStartIndex);
			if(queryEndIndex==-1)
				queryEndIndex = source.length;
			var result = unescape(source.substring(queryStartIndex, queryEndIndex));
			return filterCategory(result.replace("+",","));
		}
		return null;
	}
	
	function filterCategory(tokens){
		var tokensArr = trim(tokens).split(",");
		var result="";
		for(var i=0;i < tokensArr.length; i++){
			var curCat = tokensArr[i].toLowerCase();
			for(var j=0;j < cat_replace_table.length; j++){
				var replaceCatArr = cat_replace_table[j].replace_list.split(",");
				for(var y=0;y < replaceCatArr.length; y++){
					var mappingNode = replaceCatArr[y];
					var negativeSeparatorIndex = replaceCatArr[y].indexOf("!");
					var curMappingCat = negativeSeparatorIndex>-1 ? mappingNode.substring(0,negativeSeparatorIndex) : mappingNode;
					var curNegativeMappingCats = negativeSeparatorIndex>-1 ? mappingNode.substring(negativeSeparatorIndex+1, mappingNode.length).split(";") : [];
					
					var categoryMatched = tryMatchCategory(curCat, curMappingCat);
					if(categoryMatched){
						//checking negative categories - if one of them present then skip current category
						if(curNegativeMappingCats.length>0) {
							for(var z=0;z<curNegativeMappingCats.length;z++){
								if(tryMatchCategory(curCat, curNegativeMappingCats[z]) ){
									categoryMatched = false;
									break;
								}
							}
						}
					}
					if(categoryMatched){
						var originalCat = cat_replace_table[j].original_value;
						if(result.indexOf(originalCat)<0){
							//it will replace all special chars by encoded values i.e. & by %26 etc.
							result+=escape(originalCat)+",";
							break;
						}
					}
				}
			}
		}
		if(result.charAt(result.length-1)==",")result = result.substring(0,result.length-1);
		return result;
	}
	
	function tryMatchCategory(curCat, curMappingCat){
		var categoryMatched = false;
		var starts=0,ends=0;
		//check starts with case
		if(curMappingCat.indexOf("*")==0){
			starts=1;
		}
		//check ends with case
		if(curMappingCat.indexOf("*",1)==(curMappingCat.length-1)){
			ends=1;
		}
		//token 'contains' case
		if(starts && ends) {
			var containsToken = curMappingCat.substring(1,curMappingCat.length-1);
			categoryMatched = curCat.indexOf(containsToken)>-1;
		} else if(starts) {
			var startWithToken = curMappingCat.substring(1,curMappingCat.length);
			categoryMatched=startsWith(curCat, startWithToken);
		} else if(ends) {
			var endWithToken = curMappingCat.substring(0,curMappingCat.length-1);
			categoryMatched=startsWith(curCat, endWithToken);
		}
		//check equals case
		else if(curMappingCat==curCat){
			categoryMatched=true;
		}
		return categoryMatched;
	}
	
	function startsWith(source, str)
	{return (source.match("^"+str)==str)}
	
	function endsWith(source, str)
	{return (source.match(str+"$")==str)}
	
	function getMetaData(tag)
	{
		if(!document.getElementsByTagName) return;
		
		var metaColl = document.getElementsByTagName('meta');
		var content = '';
		for (var i=0; i < metaColl.length; i++)
		{
			var attr_name = metaColl[i].getAttribute('name');
			if(!attr_name) continue;
			if(attr_name.toLowerCase() == tag.toLowerCase())
			{ 
				content = metaColl[i].getAttribute('content');
				break;
			}
		}
		return content;
	};
	
	// 	Generates Guid - Global Unique Identifier
	function newGuid()
	{
	    var g = "";
	    for(var i = 0; i < 32; i++)
	    	g += Math.floor(Math.random() * 0xF).toString(0xF) + (i == 8 || i == 12 || i == 16 || i == 20 ? "-" : "");
	    return g;
	};
	
	function sendRequest(url)
	{
		var bearer = new Image();
		bearer.src = url;
		setTimeout( function() {
				if (!bearer.complete) {
					bearer = null;
					return;
				}
			}
			, 5000);
	};
	
	this.start = function()
	{
		var cookieEnabled = (navigator.cookieEnabled) ? true : false;
		if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled) {
			document.cookie = "testcookie";
			cookieEnabled = (document.cookie.indexOf("testcookie") != -1) ? true : false;
		}
		if (!cookieEnabled) return;
	
		//	server-load control
		var _peload = 100;
		var _maloadprob=Math.floor(Math.random()*101);
		if (_maloadprob > _peload) return;
	
		if (Cookie.get("eniro_cat_sent")) {		
			return;
		}else{
			Cookie.set("eniro_cat_sent", "is_set", 1);
		}
		//	metadata retrieval
		var meta = extractCategory();
		if(meta) {
			meta = extractHostCategory()+meta;
			var url  = 'http://pec3.adaptlogic.com/Adapt-0.1/adapt/markAction?user=server_cookie&customer=' + _aid + '&category=' + meta;
			sendRequest(url);
		}
	}
}
//	This is entry-point
eniroAdaptMA.start();