/**
 * © Keyade, 2008-2009
 */
var ___kCk = {
	set : function( n, v, d, dmn ) {
		var exp = '';
		if ( d != undefined && d != -1 ) {
			var dt = new Date();
			dt.setTime( dt.getTime() + ( 86400000 * parseFloat( d ) ) );
			exp = '; expires=' + dt.toGMTString();
		}
		if ( dmn == undefined ) {
			dmn = document.location.hostname.replace( /^www\./i, '.' );
		}
		return ( document.cookie = escape( n ) + '=' + escape( v || '' ) + exp + '; domain=' + dmn + '; path=/' );
	},
	get : function( n ) {
		var c = document.cookie.match( new RegExp( '(^|;)\\s*' + escape( n ) + '=([^;\\s]*)' ) );
		return ( c ? unescape( c[2] ) : null );
	},
	erase : function( n ) {
		var c = ___kCk.get( n ) || true;
		___kCk.set( n, '', -1 );
		return c;
	},
	accept : function() {
		if ( typeof navigator.cookieEnabled == 'boolean' ) {
			return navigator.cookieEnabled;
		}
		___kCk.set( '_test', '1' );
		return ( ___kCk.erase( '_test' ) ===  '1' );
	}
};

// query string parser
var ___kPQs = function() {
	var a = this;
	a.params = {};
	a.qs = '';
		
	a.get = function( key, default_ ) {
		var value = a.params[key];
		return ( value != null ) ? value : default_ ;
	};
	
	a.contains = function( key ) {
		var value = a.params[key];
		return ( value != null );
	};
	
	a.qs = location.search.substring( 1, location.search.length ).replace( /\?/g, '&' );
	
	if ( a.qs.length == 0 ) return;

	a.qs = a.qs.replace(/\+/g, ' ');
	
	var args = a.qs.split( '&' ); 
	
	for (var i = 0; i < args.length; i++) {
		var pair = args[i].split( '=' );
		var name = decodeURIComponent( pair[0] );
		
		var value = ( pair.length == 2 )
			? decodeURIComponent( pair[1] )
			: name;
		
		a.params[name] = value;
	}
};

var ___kTpv = function( cId, tckDomain, ckeDomain ) {
	var a = this;
	a.cIdTag = 'cId';
	a.eIdTag = 'eId';
	a.tckIdTag = 'trackingId';
	a.urlTag = 'url';
	a.eVal1Tag = 'kaEvVal1';
	a.eVal2Tag = 'kaEvVal2';
	a.eVal3Tag = 'kaEvVal3';
	
	a.inSession = -1;
	
	a.cId = ( cId !== undefined && cId != 'undefined' ) ? cId : 0;
	a.eId = 0;
	a.tckId = null;
	a.eVal1 = 0;
	a.eVal2 = 0;
	a.eVal3 = 0;
	
	a.tckDomain = ( tckDomain !== undefined && tckDomain != 'undefined' ) ? tckDomain : '';
	a.loc = document.location;
	a.host = a.loc.hostname.replace( /^www\./ig, '' );
	a.ckeDomain = ( ckeDomain !== undefined && tckDomain != 'undefined' ) ? ckeDomain.replace( /^www\./i, '.' ) : '.' + a.host;
	
	a.url = '';

	a.imgPath = '/kpv/0/';
	
	a.prevCalls = new Array();
	
	a.foo = function() {
		return;
	};
	
	a.setEventId = function( id ) {
		a.eId = id;
	};
	
	a.setClientId = function( id ) {
		a.cId = id;
	};

	a.setTckId = function( id ) {
		a.tckId = id;
	};
	
	a.setEvals = function( val1, val2, val3 ) {
		a.eVal1 = val1;
		if ( val2 !== undefined && val2 != 'undefined' ) {
			a.eVal2 = val2;
		}
		if ( val3 !== undefined && val3 != 'undefined' ) {
			a.eVal3 = val3;
		}		
	};
	
	a.setDomain = function( ckeDomain ) {
		ckeDomain = ckeDomain.replace( /^www\./i, '.' );
		if ( ckeDomain.indexOf( '.' ) == 0 ) {
			a.ckeDomain = ckeDomain;
		}
		else {
			a.ckeDomain = '.' + ckeDomain;
		}
	};
	
	a.setTckDomain = function( tckDomain ) {
		a.tckDomain = tckDomain;
	};
	
	a.addTckIdToLink = function( anc ) {
		a.checkSession();
		if ( a.tckId !== null ) {
			anc.href += ( ( anc.href.indexOf( '?' ) > -1 ) ? '&' : '?' ) + 'kTckId=' + encodeURIComponent( a.tckId );
		}
	};
	
	a.trackPageView = function( eId, lEid ) {	
		a.checkSession();
		
		if ( a.inSession == 0 ) {
			if ( lEid !== undefined && a.tckId != null ){
				eId = lEid;
			}
			else {
				return true;
			}
		}
		
		if (  a.loc.protocol == 'https:' ) {
			return true;
		}

		var qs = '';
		
		if ( eId === undefined && eId != 'undefined' ) {
			eId = a.eId;
		}
		
		var currentCall = a.cId + eId;
		for( call in a.prevCalls ) {
			if ( a.prevCalls[call] == currentCall ) {
				return true;
			}
		}
		a.prevCalls.push( currentCall );
		
		qs += '?' + a.cIdTag + '=' + encodeURIComponent( a.cId );
		qs += '&' + a.eIdTag + '=' + encodeURIComponent( eId );
		qs += '&' + a.tckIdTag + '=' + encodeURIComponent( a.tckId );
		if ( a.eVal1 != 0 ) {
			qs += '&' + a.eVal1Tag + '=' + encodeURIComponent( a.eVal1 );
		}
		if ( a.eVal2 != 0 ) {
			qs += '&' + a.eVal2Tag + '=' + encodeURIComponent( a.eVal2 );
		}
		if ( a.eVal3 != 0 ) {
			qs += '&' + a.eVal3Tag + '=' + encodeURIComponent( a.eVal3 );
		}
		qs += '&' + a.urlTag + '=' + encodeURIComponent(
			a.loc.toString().replace( /https?:\/\//g, '' )
					.replace( /^www\./g, '' ).replace( /&?(trackingId|kTckId|slid)=[0-9]+/gi, '' )
					.replace( /&?(xtor|xts|xtdt|gclid)=[^&]+/gi, '' )
					.replace( /\?&/g, '?' )
					.replace( /#\s*$/g, '' )
					.replace( /\?\s*$/g, '' )
					.replace( /\/\s*$/g, '' )
		);
		
		a.url = '';
		if ( a.tckDomain == '' ) {
			a.url = 'imp.keyade.com';
		}
		else if ( a.tckDomain != '' ) {
			a.url = a.tckDomain;
		}
		
		a.url = a.loc.protocol + '//' + a.url + a.imgPath + qs;
	
		var img = new Image( 1, 1 );
		img.src = a.url;
		img.onload = function() { a.foo() };
		return true;
	}
	
	a.checkSession = function() {
		if ( a.inSession == -1 ) {
			if ( !_kTck.idCatched ) {
				var qs = new ___kPQs();
				if ( qs.contains( 'trackingId' ) ) {
					a.tckId = qs.get( 'trackingId' );
				}
				else if ( qs.contains( 'kTckId' ) ) {
					a.tckId = qs.get( 'kTckId' );
				}
				else if ( qs.contains( 'slid' ) ) {
					a.tckId = qs.get( 'slid' );
				}
			
				_kTck.idCatched = true;
			}
		
			if ( a.tckId == null ) {
				var tck1 = ___kCk.get( 'K_' + a.cId );
				var tck2 = ___kCk.get( 'K_lm_' + a.cId );
				var tck3 = ___kCk.get( 'K_sess_' + a.cId );
					
				if ( tck1 == null || tck2 == null || tck3 == null ) {
					if ( tck1 != null ) {
						a.tckId = tck1;
						_kTck.tckId = tck1;
					}
					else {
						_kTck.tckId = null;
					}
					a.inSession = 0;
				}
				else if ( tck1 == tck2 && tck2 == tck3 ) {
					a.tckId = tck1; 
					_kTck.tckId = tck1;
					a.inSession = 1;
					___kCk.set( 'K_lm_' + a.cId, a.tckId, 1 / 24 / 2, a.ckeDomain );
				}
				else {
					a.inSession = 0;
				}
			}
			else {
				_kTck.tckId = a.tckId;
				___kCk.set( 'K_' + a.cId, a.tckId, 30, a.ckeDomain );
				___kCk.set( 'K_lm_' + a.cId, a.tckId, 1 / 24 / 2, a.ckeDomain );
				___kCk.set( 'K_sess_' + a.cId, a.tckId, -1, a.ckeDomain );
				a.inSession = 1;
			}
		}
	}
}



var ___kTev = function( cId, tckDomain, ckeDomain ) {
	var a = this;
	a.cIdTag = 'cId';
	a.eIdTag = 'eId';
	a.mtEIdTag = 'tId';
	a.eValTag = 'tVal';
	a.eCurTag = 'tCur';
	a.tckIdTag = 'trackingId';
	
	a.cId = ( cId !== undefined && cId != 'undefined' ) ? cId : 0;
	a.eId = 0;
	a.mtEId = '';
	a.eVal = 0;
	a.eCur = '';
	a.tckId = null;

	a.tckDomain = ( tckDomain !== undefined && tckDomain != 'undefined' ) ? tckDomain : '';

	a.loc = document.location;
	a.host = a.loc.hostname.replace( /^www\./ig, '' );
	a.ckeDomain = ( ckeDomain !== undefined && ckeDomain != 'undefined'  ) ? ckeDomain : '.' + a.host;

	a.inSession = -1;
	
	a.imgPath = '/kev/0/';
	
	a.prevCalls = new Array();

	a.links = null;
	a.iframes = null;
	
	a.currentIFrame = {
		eId: null,
		id: null,
		value: null,
		curr: null
	};
	a.overIFrame = false;
	
	a.uldAttached = false;
	
	a.foo = function() { return; };
	
	a.sleep = function( delta ) {
		var start = (new Date()).getTime();
		while( (new Date()).getTime() - start < delta );
	}
	
	a.setEventId = function( id ) {
		a.eId = id;
	}
	
	a.setClientId = function( id ) {
		a.cId = id;
	}

	a.setTckId = function( id ) {
		a.tckId = id;
	}
	
	a.setMerchantEventId = function ( id ) {
		a.mtEId = id;
	}
	
	a.setCurrency = function( curr ) {
		a.eCur = curr;
	};
	
	a.setOrderValue = function( value ) {
		a.eVal = value;
	};
	
	a.addTckIdToLink = function( anc ) {
		a.checkSession();
		if ( a.tckId !== null ) {
			anc.href += ( ( anc.href.indexOf( '?' ) > -1 ) ? '&' : '?' ) + 'kTckId=' + encodeURIComponent( a.tckId );
		}
	};
	
	a.setDomain = function( ckeDomain ) {
		ckeDomain = ckeDomain.replace( /^www\./i, '.' );
		if ( ckeDomain.indexOf( '.' ) == 0 ) {
			a.ckeDomain = ckeDomain;
		}
		else {
			a.ckeDomain = '.' + ckeDomain;
		}
	};
	
	a.setTckDomain = function( tckDomain ) {
		a.tckDomain = tckDomain;
	};
	
	// add event listener to an obj
	a.addEventCallback = function( obj, eventName, callback ) {
		if( obj.addEventListener ) { 
			obj.addEventListener( eventName, callback, false );
		}
		else if( obj.attachEvent ) {
			obj.attachEvent( 'on' + eventName, callback );
		}
		return;
	}
	
	a.trackEvent = function( eId, id, value, curr ) {
		a.checkSession();
		
		var qs = '';
		
		if ( eId === undefined || eId == 'undefined' ) {
			eId = a.eId;
		}
		
		if ( id === undefined || id == 'undefined' ) {
			id = a.mtEId;
		}
		
		if ( value === undefined || value == 'undefined' ) {
			value = a.eVal;
		}
		
		if ( curr === undefined || curr == 'undefined' ) {
			curr = a.eCur;
		}
		
		var currentCall = a.cId + eId + id + value + curr;
		for( call in a.prevCalls ) {
			if ( a.prevCalls[call] == currentCall ) {
				return true;
			}
		}
		a.prevCalls.push( currentCall );
		
		// mandatory values
		qs += '?' + a.cIdTag + '=' + encodeURIComponent( a.cId );
		qs += '&' + a.eIdTag + '=' + encodeURIComponent( eId );
		
		if ( id != '' ) {
			qs += '&' + a.mtEIdTag + '=' + encodeURIComponent( id );
		}
		
		if ( value != 0 ) {
			qs += '&' + a.eValTag + '=' + encodeURIComponent( value );
		}
		
		if ( curr != '' ) {
			qs += '&' + a.eCurTag + '=' + encodeURIComponent( curr );
		}
		
		if ( a.tckId == null ) {
			a.tckId = ___kCk.get( 'K_' + a.cId );
			if ( a.tckId !== null ) {
				qs += '&' + a.tckIdTag + '=' + encodeURIComponent( a.tckId );
			}
		}
		else {
			qs += '&' + a.tckIdTag + '=' + encodeURIComponent( a.tckId );
		}	

		a.url = '';
		if ( a.loc.protocol == 'https:' || a.tckDomain == '' ) {
			a.url = 'k.keyade.com'
		}
		else if ( a.tckDomain != '' ) {
			a.url = a.tckDomain;
		}
		
		a.url = a.loc.protocol + '//' + a.url + a.imgPath + qs;	
		var img = new Image( 1, 1 );
		img.src = a.url;
		img.onload = function() { a.foo() };
		
		return true;
	}
	
	a.createWrapper = function( obj, method ) {
		return function(){
	    	return method.apply( obj, arguments );
	    };
	}
	
	a.attachToLinks = function( p, eId, id, value, curr ) {
		if ( typeof p != 'object' ) {
			var t = new Array();
			t.push( p );
			p = t;
		}
		
		if ( a.links == null ) {
			if( document.links ) {
				a.links = document.links;
			}
			else if( document.getElementsByTagName ) {
				a.links = document.body.getElementsByTagName( 'a' );
			}
			else if ( document.body.all ) {
				a.links = document.body.all.tags( 'a' );
			}
			else {
				a.links = new Array();
			}
		}
		var func = null;
		for( var i = 0, n = a.links.length; i < n; i++ ) {
			for( var j = 0, m = p.length; j < m; j++ ) {
				if ( a.links[i].href.indexOf( p[j] ) > -1 && a.links[i].href.indexOf( 'javascript:' ) == -1 ) {
					func = ( typeof a.links[i].onmousedown === 'function' ) ? a.createWrapper( a.links[i], a.links[i].onmousedown ) : a.foo;
					a.links[i].onmousedown = a.trackExternalEvent( func, eId, id, value, curr );
				}
			}
		}
	} 
	
	a.attachToIFrames = function( p, eId, id, value, curr ) {
		if ( typeof p != 'object' ) {
			var t = new Array();
			t.push( p );
			p = t;
		}
		
		if ( a.iframes == null ) {
			if( document.getElementsByTagName ) {
				a.iframes = document.body.getElementsByTagName( 'iframe' );
			}
			else if ( document.body.all ) {
				a.iframes = document.body.all.tags( 'iframe' );
			}
			else {
				a.iframes = new Array();
			}
		}
		
		if ( _kTck.getNav() != 'ie' ) {
			var c = 0;
			var func = null;
			
			for( var i = 0, n = a.iframes.length; i < n; i++ ) {
				for( var j = 0, m = p.length; j < m; j++ ) {
					if ( a.iframes[i].src.indexOf( p[j] ) > -1 ) {
						func = ( typeof a.iframes[i].onmouseover === 'function' ) ? a.createWrapper( a.iframes[i], a.iframes[i].onmouseover ) : a.foo;
						a.iframes[i].onmouseover = a.activateIFrameTracking( func, eId, id, value, curr );
						
						func = ( typeof a.iframes[i].onmouseout === 'function' ) ? a.createWrapper( a.iframes[i], a.iframes[i].onmouseout ) : a.foo;
						a.iframes[i].onmouseout = a.deactivateIFrameTracking( func );
						
						c++; 
					}
				}
			}
			
			if ( c > 0 && !a.uldAttached ) {
				a.uldAttached = true;
				func = ( typeof window.onbeforeunload === 'function' ) ? a.createWrapper( window, window.onbeforeunload ) : a.foo;
				window.onbeforeunload = a.trackIFrameEvent( func );
			}
		}
		else {
			var func = null;
			for( var i = 0, n = a.iframes.length; i < n; i++ ) {
				for( var j = 0, m = p.length; j < m; j++ ) {
					if ( a.iframes[i].src.indexOf( p[j] ) > -1 ) {
						func = ( typeof a.iframes[i].onfocus === 'function' ) ? a.createWrapper( a.iframes[i], a.iframes[i].onfocus ) : a.foo;
						a.iframes[i].onfocus = a.trackExternalEvent( func, eId, id, value, curr );
					}
				}
			}	
		}
	}
	
	a.activateIFrameTracking = function( func, eId, id, value, curr ) {
		return function() {
			a.overIFrame = true;
			a.currentIFrame.eId = eId;
			a.currentIFrame.id = id;
			a.currentIFrame.value = value;
			a.currentIFrame.curr = curr;
			func();
		}
	}
	
	a.deactivateIFrameTracking = function( func ) {
		return function() {
			a.overIFrame = false;
			func();
		}
	}
	
	a.trackIFrameEvent = function( func ) {
		return function() {
			if ( a.overIFrame ) {
				a.trackEvent( a.currentIFrame.eId, a.currentIFrame.id, a.currentIFrame.value, a.currentIFrame.curr );
				func();
			}
		}
	}
	
	a.attachToAdSense = function( eId, id, value, curr ) {
		var adSense = [ 'pagead2.googlesyndication.com', 'googleads.g.doubleclick.net' ];
		a.attachToLinks( adSense, eId, id, value, curr );
		a.attachToIFrames( adSense, eId, id, value, curr );
	}
	
	a.trackExternalEvent = function( func, eId, id, value, curr ) {
		return function() {
			a.trackEvent( eId, id, value, curr );
			func();
		}
	}
	
	a.checkSession = function() {
		if ( a.inSession == -1 ) {
			_kTck.catchId( a.cId, 30, a.ckeDomain );
			if ( _kTck.tckId != null ) {
				a.tckId = _kTck.tckId;
				a.inSession = 1;
			}
			else {
				a.inSession = 0;
			}
		}
	}
}


var _kTck = {
	tckId: null,
	nav : '',
	getNav : function() {
		if ( _kTck.nav == '' ) {
			if ( navigator.userAgent ) {
				if ( navigator.userAgent.indexOf( 'MSIE' ) != -1 ) {
					_kTck.nav = 'ie';
				}
				else if ( navigator.userAgent.indexOf( 'AppleWebKit' ) != -1
						|| navigator.userAgent.indexOf( 'Safari' ) != -1
						|| navigator.userAgent.indexOf( 'KHTML' ) != -1
						|| navigator.userAgent.indexOf( 'Chrome' ) != -1
						|| navigator.userAgent.indexOf( 'OmniWeb' ) != -1
						|| navigator.userAgent.indexOf( 'iCab' ) != -1 ) {
					_kTck.nav = 'sf'
				}
				else if ( navigator.userAgent.indexOf( 'Firefox' ) != -1
						|| navigator.userAgent.indexOf( 'Camino' ) != -1
						|| navigator.userAgent.indexOf( 'Netscape' ) != -1 
						|| navigator.userAgent.indexOf( 'Gecko' ) != -1 ) {
					_kTck.nav = 'ns';
				}
				else {
					_kTck.nav = 'ot';
				}
			}
			else {
				_kTck.nav = 'ot';
			}
		}
		return _kTck.nav;
	},
	idCatched : false,
	addEventCallback : function( obj, eventName, callback ) {
		if( obj.addEventListener ) { 
			obj.addEventListener( eventName, callback, false );
		}
		else if( obj.attachEvent ) {
			obj.attachEvent( 'on' + eventName, callback );
		}
		return;
	},
	getTracker : function( cId, tckDomain, ckeDomain ) {
		return new ___kTev( cId, tckDomain, ckeDomain  );
	},
	getViewTracker : function( cId, tckDomain, ckeDomain ) {
		return new ___kTpv( cId, tckDomain, ckeDomain );	
	},
	catchId : function( cId, lifeTime, ckeDomain ) {
		if ( _kTck.idCatched ) {
			return _kTck.tckId;
		}
		
		if ( lifeTime === undefined || lifeTime == 'undefined' ) {
			lifeTime = 30;
		}
		if ( ckeDomain === undefined || ckeDomain == 'undefined' ) {
			ckeDomain = document.location.hostname.replace( /^www\./ig, '.' );
		}
		else if ( ckeDomain.indexOf( '.' ) != 0 ) {
			ckeDomain = '.' + ckeDomain;
		}
	
		var qs = new ___kPQs();
		
		if ( qs.contains( 'trackingId' ) ) {
			_kTck.tckId = qs.get( 'trackingId' );
		}
		else if ( qs.contains( 'kTckId' ) ) {
			_kTck.tckId = qs.get( 'kTckId' );
		}
		else if ( qs.contains( 'slid' ) ) {
			_kTck.tckId = qs.get( 'slid' );
		}
	
		if ( _kTck.tckId != null ) {
			___kCk.set( 'K_' + cId, _kTck.tckId, lifeTime, ckeDomain );
		}
		else {
			_kTck.tckId = ___kCk.get( 'K_' + cId );
		}
		_kTck.idCatched = true;
		return _kTck.tckId;
	}
};


