﻿// Copyright (c) Admeta AB 2008-2009
// Version 1.17

var Admeta;

if (!Admeta) Admeta={
    version: "1.17",
	textVersion: "1.0",
    base: "http://atemda.com/",
	textAdsJS: "http://s.atemda.com/script/TextAds.js?{sv}",
    singleImpression: "JSAdservingSP.ashx?wId={wId}&pId={pId}&rank={rank}&clk={clk}&di=1&exm={exm}&jsv={jsv}&tsv={tsv}&cb={cb}",
    pageImpression: "JSAdservingMP.ashx?pc={pc}&clk={clk}&exm={exm}&jsv={jsv}&tsv={tsv}&cb={cb}",
    pageRepeatParam: "&pId{o}={pId}&rank{o}={rank}&gid{o}={gid}"
}
else if (typeof Admeta!="object")
  throw new Error("Admeta already defined");

Admeta.init = function (vtUrl)
{
    if(Admeta.initialized) return;

	Admeta.SIV.init(vtUrl);

    Admeta.initialized=true;
};

if (!Admeta.SIV) Admeta.SIV = {
    eventHandlersInitialized: false,
	matArray: [],
	busy: false,
	evInit: false,
	init: function(vtUrl)
	{
		Admeta.SIV.vtUrl=vtUrl;
	},
	setupEventHandlers: function ()
	{
		if (this.eventHandlersInitialized) return;

		this.eventHandlersInitialized=true;

		Admeta.SIV.parentOnLoad=(window.onload)?window.onload:function () {};
		Admeta.SIV.parentOnScroll=(window.onscroll)?window.onscroll:function () {};
		Admeta.SIV.parentOnResize=(window.onresize)?window.onresize:function () {};

		if (window.addEventListener) {
			window.addEventListener("load", this.evHandler, false);
			window.addEventListener("scroll", this.evHandler, false);
			window.addEventListener("resize", this.evHandler, false);
		}
		else if (window.attachEvent) {
			document.attachEvent("onreadystatechange", function(){
				if (document.readyState=="complete") {
					document.detachEvent( "onreadystatechange", arguments.callee );

					Admeta.SIV.evInit=true;
					Admeta.SIV.evHandler();
				}
			});

			if (document.documentElement.doScroll && typeof window.frameElement==="undefined" ) (function(){
				if (Admeta.SIV.evInit) return;

				try {
					document.documentElement.doScroll("left");
				} catch (error) {
					setTimeout (arguments.callee, 0);
					return;
				}

				Admeta.SIV.evInit=true;
				Admeta.SIV.evHandler();
			})();

			window.attachEvent("onscroll", Admeta.SIV.evHandler);
			window.attachEvent("onresize", Admeta.SIV.evHandler);
		}
		else
		{
			window.onload = function () {
				Admeta.SIV.parentOnLoad();
				Admeta.SIV.evHandler();
			};

			window.onscroll = function () {
				Admeta.SIV.parentOnScroll();
				Admeta.SIV.evHandler();
			};

			window.onresize = function () {
				Admeta.SIV.parentOnResize();
				Admeta.SIV.evHandler();
			};
		}
	},
	setup: function (pid, o, adId, SIV)
	{
		if (!SIV) return null;

		this.setupEventHandlers();

		return this.addMaterial(pid, o, adId);
	},
	addMaterial: function (pid,o,adid)
	{
		mat=this.Mat(pid,o,adid);
		this.matArray[this.matArray.length]=mat;
		return mat;
	},
	evHandler: function (ev)
	{
		if (Admeta.SIV.busy) return;
		Admeta.SIV.busy=true;

		vList=[];

		for (var i=0;i<Admeta.SIV.matArray.length;i++) {
			var mat=Admeta.SIV.matArray[i];
			if (!mat.ElemVisible)
			{
				if (Admeta.SIV.checkElemVisible(mat))
				{
					mat.ElemVisible=true;
					vList[vList.length]=mat;
				}
			}
		}

		if (vList.length>0)
		{
			var matList="?mc="+vList.length+"&";
			var el;
			var m=0;

			for (var i=0;i<vList.length;i++)
			{
				var mat=vList[i];
				el=document.getElementById(mat.InnerDivId);

                var ids = (""+mat.adId).split(",");
                
                for(var n=0;n<ids.length;n++)
				    matList+="pId"+i+"="+mat.pId+"&mId"+i+"="+ids[n]+"&";
			}

			img=document.createElement("img");
			img.setAttribute("id", "AmImg"+vList[0].adId );
			img.setAttribute("width", "1px" );
			img.setAttribute("height", "1px" );
			el.rows[0].cells[0].appendChild(img);
			img.setAttribute("src", Admeta.SIV.vtUrl+matList+"rnd="+new Date().getTime() );
		}

		Admeta.SIV.busy=false;
	},
	getPos: function (obj) {
		var curtop=0;
		var curleft=0;

		if (obj.offsetParent) {
			do {
				curtop+=obj.offsetTop;
				curleft+=obj.offsetLeft;
			} while (obj=obj.offsetParent);
		}
		return [curtop,curleft];
	},
	checkElemVisible: function (mat)
	{
		var isOpera=navigator.userAgent.indexOf('Opera')!=-1;
		var isStandard=document.compatMode=='CSS1Compat';
		var vpH=isOpera?self.innerHeight:isStandard?document.documentElement.clientHeight:document.body.clientHeight;
		var top=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;
		var vpW=isOpera?self.innerWidth:isStandard?document.documentElement.clientWidth:document.body.clientWidth;
		var left=document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft;
		var el=document.getElementById(mat.InnerDivId);

		var pos=this.getPos(el);
		var width=el.offsetWidth;
		var height=el.offsetHeight;

		if (pos[1]+width>vpW+left) width-=pos[1]+width-vpW-left;
		if (pos[1]<left) width-=left-pos[1];
		if (pos[0]+height> vpH+top) height-=pos[0]+height-vpH-top;
		if (pos[0]<top) height-=top-pos[0];

		if(width<0 ) width=0; if( height<0 ) height=0;
		var coverage=(width*height)/(el.offsetWidth*el.offsetHeight);

		return coverage>0.8;
	},
	generateId: function ()
	{
		return (((1+Math.random())*0x1000000)|0).toString(16).substring(1);
	},
	Mat: function (_pId,_o,_adId)
	{
		return {pId:_pId, o:_o, adId:_adId, elemVisible:false, InnerDivId: "AM"+_pId+"_"+_o+"_"+Admeta.SIV.generateId()};
	}
};

Admeta.Text = {
    AdGroup: [],
	init: function ()
	{
	    this.AdGroup.push({initArgs:arguments,Ads:[],xRenderF:undefined});
	},
	create: function ()
	{
		this.AdGroup[this.AdGroup.length-1].Ads.push(arguments);
	},
	insert: function ()
	{
		this.process(0,arguments);
	},
	write: function ()
	{
		this.process(1,arguments);
	},
	process: function(op,args)
	{
		var p=this.AdGroup.length-1;
		this.AdGroup[p].Operation=op;
		this.AdGroup[p].placementDetails=args;
		this.AdGroup[p].xRenderF=Admeta.Text.getRenderer(op,args.length>=5?args[4]:undefined);
		
		if (Admeta.Text.ProcessTextAds===undefined) {
		    if(!Admeta.Text.ScriptLoading) {
		        Admeta.Text.ScriptLoading=true;
			    Admeta.loadScript(Admeta.versionFile(Admeta.textAdsJS,Admeta.textVersion));
			}
	    }
		else
			Admeta.Text.ProcessTextAds();
	},
	getRenderer: function(op,gid)
	{
		var xf=Admeta.xRenderF;
		if(xf===undefined) return xf;
		if(op==1&&typeof(xf)=="function")
		{
			Admeta.xRenderF=undefined;
			return xf;
		}
		return xf[gid];
	}
};

Admeta.Flash = {
	get: function (mUrl, w, h, gf, ct, urldct)
	{
		var bannerContent="";

		var cv=5;
		var plugin=(navigator.mimeTypes && navigator.mimeTypes['application/x-shockwave-flash'])?
		                                     navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin:0;
		var MM_FlashCanPlay=false;

		if (plugin)
		{
			var words=navigator.plugins['Shockwave Flash'].description.split(" ");
			var MM_PluginVersion=0;

			for (i=0;i<words.length;++i)
			{
				if (isNaN(parseInt(words[i])))
					continue;
				MM_PluginVersion=words[i];
			}
			MM_FlashCanPlay=MM_PluginVersion >= cv;
		}
		else if (navigator.userAgent && navigator.userAgent.indexOf('MSIE')>=0 && (navigator.appVersion.indexOf('Win')!=-1))
		{
			var flashVersion=0;
			for (i=10;i>0;i--)
			{
				try
				{
					var flash=new ActiveXObject('ShockwaveFlash.ShockwaveFlash.'+i);
					flashVersion=i;
					break;
				}
				catch(e)
				{}
			}
			if (flashVersion>0 )
				MM_FlashCanPlay=true;
		}
		if (MM_FlashCanPlay)
		{

			bannerContent='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" id="vfmov" width="'+w+'" height="'+h+'" align="middle">\n';
			bannerContent+='   <param name="allowScriptAccess" value="always">\n';
			bannerContent+='   <param name="movie" value="'+mUrl+'?'+ct+'='+urldct+'">\n';
			bannerContent+='   <param name="quality" value="high">\n';
			bannerContent+='   <param name="wmode" value="opaque">\n';
			bannerContent+='   <embed src="'+mUrl+'?'+ct+'='+urldct+'" width="'+w+'" height="'+h+'" quality=high name="vfmov" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="opaque" outline="none"></embed>\n';
			bannerContent+='</object>';
		}
		else
		{
			bannerContent='<a href="'+urldct+'" target="_blank"><img src="'+gf+'" width="'+w+'" height="'+h+'" border="0"></a>';
		}

		return bannerContent;
	},
	insert: function (pid, o, adId, mUrl, w, h, gf, ct, urldct, SIV, gid)
	{
		Admeta.storeMaterial(adId);
		
		mat=Admeta.SIV.setup(pid, o, adId, SIV);

		var bannerContent=this.get(mUrl, w, h, gf, ct, urldct);

		Admeta.getContainer(pid,o,gid).innerHTML=Admeta.embedMaterial(mat, w, h, bannerContent);
	},
	write: function (pid, o, adId, mUrl, w, h, gf, ct, urldct, SIV)
	{
		Admeta.storeMaterial(adId);

		mat=Admeta.SIV.setup(pid, o, adId, SIV);

		document.write(Admeta.embedMaterial(mat, w, h, this.get(mUrl, w, h, gf, ct, urldct)));
	}
};

Admeta.Image = {
	get: function (mUrl, w, h, urldct, pid, o)
	{
		return '<a href="'+urldct+'" target="_blank"><img id="AM'+pid+"_"+o+'" src="'+mUrl+'" width="'+w+'" height="'+h+'" border="0"></a>';
	},
	insert: function (pid, o, adId, mUrl, w, h, urldct, SIV, gid)
	{
		Admeta.storeMaterial(adId);

		mat=Admeta.SIV.setup(pid, o, adId, SIV);

		Admeta.getContainer(pid,o,gid).innerHTML=
			Admeta.embedMaterial(mat, w, h, this.get(mUrl,w,h,urldct, pid, o));
	},
	write: function (pid, o, adId, mUrl, w, h, urldct, SIV)
	{
		Admeta.storeMaterial(adId);

		mat=Admeta.SIV.setup(pid, o, adId, SIV);

		document.write(Admeta.embedMaterial(mat, w, h, this.get(mUrl,w,h,urldct, pid, o)));
	}
};

Admeta.JS = {
	getIframe: function (w, h, id)
	{
		return '<iframe id="'+id+'" scrolling="no" frameborder="0" hidefocus="true" style="border-style:none;margin:0px;width:'+w+'px;height:'+h+'px"></iframe>';
	},
	generateIfrId: function (pid, o, adId)
	{
		return "AMIfr_"+pid+"_"+o+"_"+adId;
	},
	updateIfrSrc: function (id, ifrUrl, adId)
	{
		document.getElementById(id).src=ifrUrl;
	},
	insert: function (pid, o, adId, ifrUrl, w, h, SIV, gid)
	{
		Admeta.storeMaterial(adId);

		mat=Admeta.SIV.setup(pid, o, adId, SIV);

		var ifrId=this.generateIfrId(pid, o, adId);

		Admeta.getContainer(pid,o,gid).innerHTML=
			Admeta.embedMaterial(mat, w, h, this.getIframe(w,h,ifrId));

		this.updateIfrSrc(ifrId, ifrUrl);
	},
	write: function (pid, o, adId, ifrUrl, w, h, SIV)
	{
		Admeta.storeMaterial(adId);

		mat=Admeta.SIV.setup(pid, o, adId, SIV);

		var ifrId=this.generateIfrId(pid, o, adId);

		document.write(Admeta.embedMaterial(mat, w, h, this.getIframe(w,h,ifrId)));

		this.updateIfrSrc(ifrId, ifrUrl);
	}
};

Admeta.embedMaterial = function (mat, w, h, bannerContent)
{
    return mat===null?bannerContent :
           '<table id="'+mat.InnerDivId+'" style="border-collapse:collapse;" border="0" cellspacing="0" cellpadding="0">'+
	       '<tr><td>'+
           bannerContent+
		   '</td></tr></table>';
};

Admeta.insertFlash = function (pid, o, adId, mUrl, w, h, gf, ct, urldct, SIV, gid)
{
	Admeta.Flash.insert(pid, o, adId, mUrl, w, h, gf, ct, urldct, SIV, gid);
};

Admeta.writeFlash = function (pid, o, adId, mUrl, w, h, gf, ct, urldct, SIV)
{
	Admeta.Flash.write(pid, o, adId, mUrl, w, h, gf, ct, urldct, SIV);
};

Admeta.insertImage = function (pid, o, adId, mUrl, w, h, urldct, SIV, gid)
{
	Admeta.Image.insert(pid, o, adId, mUrl, w, h, urldct, SIV, gid);
};

Admeta.writeImage = function (pid, o, adId, mUrl, w, h, urldct, SIV)
{
	Admeta.Image.write(pid, o, adId, mUrl, w, h, urldct, SIV);
};

Admeta.insertJS = function (pid, o, adId, ifrUrl, w, h, SIV, gid)
{
	Admeta.JS.insert(pid, o, adId, ifrUrl, w, h, SIV, gid);
};

Admeta.writeJS = function (pid, o, adId, ifrUrl, w, h, SIV)
{
	Admeta.JS.write(pid, o, adId, ifrUrl, w, h, SIV);
};

Admeta.getContainer = function (pid, o, gId)
{
    if (gId!==undefined)
    {
        var elem=document.getElementById(gId);
        if (elem) return elem;
    }
    return document.getElementById('Admeta'+pid+'_'+o);
};

Admeta.storeMaterial = function (mId)
{
	if (Admeta.adsServed===undefined)
		Admeta.adsServed=[];

    var ids = (""+mId).split(",");
    
    for(var n=0;n<ids.length;n++)
    	Admeta.adsServed.push(ids[n]);
};

Admeta.setParam = function (str,param,value)
{
	var pattern=new RegExp("{"+param+"}","g");
	return str.replace(pattern,value);
};

Admeta.versionFile = function(f,v)
{
	return Admeta.setParam(f,"sv",v);
}

Admeta.loadScript = function (url)
{
	document.write("<"+"script"+" charset='utf-8' type='text/javascript' src='"+url+"'></"+"script"+">");
};

Admeta.encodeClickTag = function(clk)
{
    return (clk.indexOf("&")!=-1 || clk.indexOf("?")!=-1)?escape(clk):clk;
};

Admeta.setCommonParams = function(frontCall)
{
	frontCall=Admeta.setParam(frontCall, "clk", ADM_PL.clk!==undefined?Admeta.encodeClickTag(ADM_PL.clk):escape("[]"));
	frontCall=Admeta.setParam(frontCall, "exm", Admeta.adsServed!==undefined?Admeta.adsServed.join(","):"");
	frontCall=Admeta.setParam(frontCall, "jsv", Admeta.version);
	frontCall=Admeta.setParam(frontCall, "tsv", Admeta.textVersion);
	frontCall=Admeta.setParam(frontCall, "cb", new Date().getTime());
	
	return frontCall;
}

Admeta.callSingleImpression = function ()
{
	Admeta.xRenderF=ADM_PL.ADM_RENDERF;

	var frontCall=Admeta.base+Admeta.singleImpression;

	frontCall=Admeta.setParam(frontCall, "wId", ADM_PL.wId);
	frontCall=Admeta.setParam(frontCall, "pId", ADM_PL.pId);
	frontCall=Admeta.setParam(frontCall, "rank", ADM_PL.rank);
	frontCall=Admeta.setCommonParams(frontCall);

	Admeta.loadScript(frontCall);
};

Admeta.pushPlacement = function ()
{
	var AdmetaId=ADM_PL.pId+':'+ADM_PL.rank+':'+(((1+Math.random())*0x1000000)|0).toString(16).substring(1);
	document.write('<di'+'v id="'+AdmetaId+'"></di'+'v>');

	if (Admeta.pushedAds===undefined) Admeta.pushedAds=[];

	if (ADM_PL.renderF!==undefined) {
		if (Admeta.xRenderF===undefined) Admeta.xRenderF={};
		Admeta.xRenderF[AdmetaId]=ADM_PL.renderF;
	}
	Admeta.pushedAds.push({wId:ADM_PL.wId,pId:ADM_PL.pId,rank:ADM_PL.rank,AmId:AdmetaId});
};

Admeta.processFullPage = function (clickTrack)
{
	var pas=Admeta.pushedAds;
	if(pas===undefined||pas.length==0) return;

	var up=[];

	for (i=0;i<pas.length;i++)
		if(document.getElementById(pas[i].AmId)) up.push(i);

	if(up.length>0)
	{
		var frontCall=Admeta.base+Admeta.pageImpression;
		frontCall=Admeta.setParam(frontCall, "pc", up.length);
		frontCall=Admeta.setCommonParams(frontCall);

		for (i=0;i<up.length;i++)
		{
			var pa = pas[up[i]];
			var item=Admeta.setParam(Admeta.pageRepeatParam, "o", i);
			item=Admeta.setParam(item, "pId", pa.pId);
			item=Admeta.setParam(item, "rank", pa.rank);
			frontCall+=Admeta.setParam(item, "gid", pa.AmId);
		}

		Admeta.loadScript(frontCall);
		
		Admeta.pushedAds=[];
		Admeta.xRenderF=undefined;
	}
};

Admeta.handleClientInvoke = function ()
{
    switch (ADM_PL.tp)
    {
        case "sp" :
    		Admeta.callSingleImpression();
    		break;
        case "fp" :
    		Admeta.pushPlacement();
    		break;
        case "fpc" :
		    Admeta.processFullPage();
    		break;
    }

	ADM_PL=undefined;
};

Admeta.processImpressions = function()
{
	if (Admeta.loadList)
	{
		l=Admeta.loadList.length;
		for (i=0;i<l;i++) Admeta.loadList.pop()();
		Admeta.loadList=[];
	}
	else
	if (Admeta.ll)
	{
		l=Admeta.ll.length;
		for (i=0;i<l;i++) Admeta.ll.pop()();
		Admeta.ll=[];
	}
	else
	if (typeof(ADM_PL)!="undefined")
		Admeta.handleClientInvoke();
};

Admeta.processImpressions();

