﻿AIIBT = {
	afterTrack:null,
	cookiePrefix : 'ibt',
	cookieLength : 2028,
	cookieOptions : {path:'/',expires:10},
	trackerStore : {},
	getSessionIdUrl : function(){return __siteroot+'/psweb/server/generateuniqueid.rhtml';},
	getCurrentDomain : function(){
		return location.protocol+"//"+document.domain+((location.host.split(":")[1])?":"+location.host.split(":")[1]:"");
	},
	getCurrentURL : function(){
		return location.href.substring(this.getCurrentDomain().length);
	},
	getReferrerURL : function(){
		return document.referrer.substring(this.getCurrentDomain().length);
	},
	addTrackerData : function(key, callback){
		var o = this.getTrackerData();
		var _t = this;
		if(key){
			if(_t.util.isEmpty(o))o={};if(_t.util.isEmpty(o.url))o.url=[];
			o.url.push({'k':key,'v':o.vst,'t':new Date()});
			_t.setTrackerData(o);
			return;
		}
		var cu=_t.getCurrentURL();var ru=_t.getReferrerURL();
		this.ajax.get(this.getSessionIdUrl(), function(res){
			var _uid=res.split(',')[0]; var _sid=res.split(',')[1];
			if(!_t.util.isEmpty(o)&&!_t.util.isEmpty(o.uid)&&!_t.util.isEmpty(o.sid)){
				if(o.sid!=_sid){
					o.vst=(_t.util.isEmpty(o.vst))?1:(o.vst+1);
					o.sid=_sid;
				}
				if(_t.util.isEmpty(o.url))o.url=[];
			}
			else{o={};o.uid=_uid;o.sid=_sid;o.vst=1;o.url=[];}
			o.url.push({'c':cu,'r':ru,'v':o.vst,'t':new Date()});
			// check landing page
			var cp=(cu.indexOf('?')>=0&&cu.indexOf('#')>=0)?((cu.indexOf('?')<cu.indexOf('#'))?cu.substring(0,cu.indexOf('?')):cu.substring(0,cu.indexOf('#'))):(cu.indexOf('?')>=0)?(cu.substring(0, cu.indexOf('?'))):((cu.indexOf('#')>=0)?(cu.substring(0,cu.indexOf('#'))):cu);
			var lpName;
			_t.util.each(_t._landingPages, function(i,lp){if(lp.toLowerCase()==cp.toLowerCase())lpName=lp;});
			if(!_t.util.isEmpty(lpName)){
				if(_t.util.isEmpty(o.lp))o.lp=[];
				var li;
				_t.util.each(o.lp, function(i,l){if(l.u==lpName)li=i;});
				if(li>=0) o.lp[li].v=(!_t.util.isEmpty(o.lp[li].v)&&_t.isNumber(o.lp[li].v))?(o.lp[li].v+1):1;
				else o.lp.push({'u':cp,'v':1});
			}
			_t.setTrackerData(o);
			// call an callback
			if(typeof callback=='function')callback(o);
			if(typeof _t.afterTrack=='function')_t.afterTrack(o);
		});
	},
	// เมื่อมีการ set data ให้กับ cookie ต้องผ่าน method นี้เท่านั้น
	setTrackerData:function(v){
		// check value before add to cookie
		v=this.checkIBTValueLength(v);
		v=this.serializeData(v);
		this.cookie(this.cookiePrefix, v, this.cookieOptions);
	},
	// เมื่อมีการ get data จาก cookie ต้องผ่าน method นี้เท่านั้น
	getTrackerData:function(){
		var v=this.cookie(this.cookiePrefix);
		if(v) return this.deSerializeData(v);
		// ป้องกันในกรณีที่มีการค่าของ cookie เป็น '' ให้ set ค่าใหม่เข้าไป
		else{
			var newVal={};
			//this.addTrackerData(undefined, function(val){ return val; });
			return newVal;
		}
	},
	// Method for user
	_trackPageview:function(key){this.addTrackerData(key);},
	// Global property for set landing page example(['/','/index.html','/home/','/home/a.html','/home/b.html'])
	_landingPages:[],
	serializeData:function(v){
		//v=this.packer.getPackedArray(this.encode(v));
		v=this.encode(v);
		return v;
	},
	deSerializeData:function(v){
		//v=this.packer.getUnpackedArray(this.decode(v));
		o={};
		try{
			o=this.decode(v);
		}catch(e){o={};}
		return o;
	},
	checkIBTValueLength:function(v){
		var l=encodeURIComponent(this.serializeData(v)).length;
		if(l>this.cookieLength){
			if(this.isArray(v.url)&&v.url.length>0){
				v.url.reverse();v.url.pop();v.url.reverse();
			}
			var lresult=encodeURIComponent(this.serializeData(v)).length;
			if(l>this.cookieLength){ this.checkIBTValueLength(v); }
		}
		return v;
	},
	setMeta:function(key, data){
		var m=this.getTrackerData();
		if(this.util.isEmpty(m))return;
		var v;var ki;var cm=this.getCurrentURL();
		if(this.util.isEmpty(m))m={};
		if(!this.util.isEmpty(m.meta)&&this.isArray(m.meta)&&m.meta.length>0){
			var f=false;
			for(var k in m.meta){var o=m.meta[k];if(o.k==key&&o.u==cm){ki=k;f=true;break;}}
			if(f){m.meta[ki].d=data;}
			else m.meta.push({'k':key,'u':cm,'d':data});
		}
		else{m.meta=[];m.meta.push({'k':key,'u':cm,'d':data});}
		this.setTrackerData(m);
	},
	getMeta:function(key){
		var m=this.getTrackerData();var cm=this.getCurrentURL();
		if(!this.util.isEmpty(m)&&!this.util.isEmpty(m.meta)&&this.isArray(m.meta)&&m.meta.length>0){
			for(var k in m.meta){var o=m.meta[k];if(o.k==key&&o.u==cm&&!this.util.isEmpty(o.d)){return o.d;}}
		}
		return null;
	},
	setGlobalMeta:function(key, data){
		var m=this.getTrackerData();
		if(this.util.isEmpty(m))return;
		if(!this.util.isEmpty(m.gmeta)&&this.isArray(m.gmeta)&&m.gmeta.length>0){
			var f=false;
			for(var k in m.gmeta){var o=m.gmeta[k];if(o.k==key){ki=k;f=true;break;}}
			if(f){m.gmeta[ki].d=data;}
			else m.gmeta.push({'k':key,'d':data});
		}
		else{m.gmeta=[];m.gmeta.push({'k':key,'d':data});}
		this.setTrackerData(m);
	},
	getGlobalMeta:function(key){
		var m=this.getTrackerData();
		if(!this.util.isEmpty(m)&&!this.util.isEmpty(m.gmeta)&&this.isArray(m.gmeta)&&m.gmeta.length>0){
			for(var k in m.gmeta){var o=m.gmeta[k];if(o.k==key&&!this.util.isEmpty(o.d)){return o.d;}}
		}
		return null;
	},
	util:{
		isEmpty:function(o){return!(o&&o!==undefined&&o!==undefined);},
		// args is for internal usage only
		each:function(obj,fn,args) {
			if (obj.length==undefined) for(var i in obj)fn.apply(obj[i],args||[i,obj[i]]); else for(var i=0,ol=obj.length;i<ol;i++)if(fn.apply(obj[i],args||[i,obj[i]])===false)break;
			return obj;
		}
	},
	encode:function(o){
		var useHasOwn=!!{}.hasOwnProperty;
		if(typeof o=="undefined"||o===null){return"null";}
		else if(this.isArray(o)){return this.encodeArray(o);}
		else if(this.isDate(o)){return this.encodeDate(o);}
		else if(typeof o=="string"){return this.encodeString(o);}
		else if(typeof o=="number"){return isFinite(o)?String(o):"null";}
		else if(typeof o=="boolean"){return String(o);}
		else{var a=["{"],b,i,v;for(i in o){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(',');}a.push(this.encode(i),":",v===null?"null":this.encode(v));b=true;}}}a.push("}");return a.join("");}
	},
	pad:function(n){return n<10?"0"+n:n;},
	encodeString:function(s){var m={"\b":'\\b',"\t":'\\t',"\n":'\\n',"\f":'\\f',"\r":'\\r','"':'\\"',"\\":'\\\\'};if(/["\\\x00-\x1f]/.test(s)){return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c}c=b.charCodeAt();return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)})+'"'}return'"'+s+'"'},
	encodeArray:function(o){var a=["["],b,i,l=o.length,v;for(i=0;i<l;i+=1){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(",")}a.push(v===null?"null":this.encode(v));b=true}}a.push("]");return a.join("");},
	encodeDate:function(o){return'"'+o.getFullYear()+"-"+this.pad(o.getMonth()+1)+"-"+this.pad(o.getDate())+"T"+this.pad(o.getHours())+":"+this.pad(o.getMinutes())+":"+this.pad(o.getSeconds())+'"';},
	isArray:function(v){return v&&typeof v.length=="number"&&typeof v.splice=="function"},
	isDate:function(v){return v&&typeof v.getFullYear=="function"},
	isNumber:function(o){return (typeof o=="number");},
	decode:function(j){return eval("("+j+')');},
	ajax:{get:function(url,callback){$.get(url,callback);}},
	cookie:function(n,v,opt){
		if(typeof v!='undefined'){
			opt=opt||{};
			if(v===null){v='';opt.expires=-1;}
			var expires='';
			if(opt.expires&&(typeof opt.expires=='number'||opt.expires.toUTCString)) {
				var date;
				if(typeof opt.expires=='number'){
					date=new Date();
					date.setTime(date.getTime()+(opt.expires*24*60*60*1000));
				}else{date=opt.expires;}
				expires='; expires='+date.toUTCString();
			}
			var path=opt.path?'; path='+(opt.path):'';var domain=opt.domain?'; domain='+(opt.domain):'';var secure=opt.secure?'; secure':'';
			document.cookie=[n,'=',encodeURIComponent(v),expires,path,domain,secure].join('');
		}else{
			var cookieValue=null;
			if(document.cookie&&document.cookie!=''){
				var cookies=document.cookie.split(';');
				for(var i=0;i<cookies.length;i++){
					var cookie=jQuery.trim(cookies[i]);
					if(cookie.substring(0,n.length+1)==(n+'=')){
						cookieValue=decodeURIComponent(cookie.substring(n.length+1));
						break;
					}
				}
			}
			return cookieValue;
		}
	}

};
$(function(){
	AIIBT._trackPageview();
});