
var GridsumWebDissector={version:"0.5.0.0",globalTrackers:{},isTrackerExist:function(serviceID){return this.globalTrackers[serviceID]!==undefined;},createTracker:function(serviceID){return this.getTracker(serviceID);},getTracker:function(serviceID){var tracker=this.globalTrackers[serviceID]||new GridsumWebDissector.Tracker(serviceID);this.globalTrackers[serviceID]=tracker;return tracker;},extend:function(destination,source,override){var prop;override=(override!==false);for(prop in source){if(source.hasOwnProperty(prop)){destination[prop]=(override||destination[prop]===undefined)?source[prop]:destination[prop];}}
return destination;}};GridsumWebDissector.Tracker=function(serviceID){var that=this;that.serviceID=serviceID;that.initialized=false;that.isLocal=false;that.config=new GridsumWebDissector.Config(serviceID);that.extSrc={};};GridsumWebDissector.extend(GridsumWebDissector.Tracker.prototype,{init:function(){var that=this,ns=GridsumWebDissector,config=that.config;if(that.initialized){return;}
that.isLocal=that.shouldIgnoreTraffic();that.browserAnalyzer=new ns.BrowserAnalyzer(config);that.refererAnalyzer=new ns.RefererAnalyzer(config);that.urlAnalyzer=new ns.URLAnalyzer(config);that.userTracker=new ns.UserTracker(config);that.ecom=new ns.ECommerce(config);that.dataSender=new ns.DataTransmitter(config);that.behaviorAnalyzer=new ns.BehaviorAnalyzer(config);if(that.isLocal){that.browserInfo=that.urlInfo=that.refererInfo={};}else{that.browserInfo=that.browserAnalyzer.analyze();that.refererInfo=that.refererAnalyzer.analyze();that.urlInfo=that.urlAnalyzer.analyze();}
if(that.isHeatmapModeOn()){that.showHeatmap();}
that.initialized=true;},showHeatmap:function(){var heatmapUrl=this.config.heatmapUrl;_gsUtility.domReady(function(){var script=document.createElement("script");script.src=heatmapUrl;document.getElementsByTagName("head")[0].appendChild(script);});},addOrder:function(orderID,totalPrice,userID){this.ecom.addOrder(orderID,Number(totalPrice),userID);},addProduct:function(orderID,productName,sku,unitPrice,quantity,category){this.ecom.addProduct(orderID,productName,sku,Number(unitPrice),Number(quantity),category);},trackECom:function(){var that=this;that.init();if(that.isLocal){return;}
var lastErrorHandler=window.onerror;window.onerror=function(message,url,line){that.reportError("FunctionCallFailed_trackECom",{message:message,url:url,line:line});window.onerror=lastErrorHandler;return true;};try{var allOrders=that.ecom.getOrders(),allOrderIDs=[],data=that.getCommon("ecom"),allProducts,order,product,products=[];var ck=new GridsumWebDissector.CookieSerializer(that.config);var orders=ck.restore({'name':"_gsecomorderid"});if(orders[0].value){allOrderIDs=orders[0].value.split(",");}
for(var i=0;i<allOrders.length;i++){order=allOrders[i];var orderID=_gsUtility.encode(order.gsorderid);if(_gsUtility.indexOf(allOrderIDs,orderID)>-1){continue;}
allOrderIDs.push(orderID);data.gsorderid=order.gsorderid;data.gstotal=order.gstotal;data.gsquan=order.gsquan;data.gsuserid=order.gsuserid;allProducts=order.gsproducts;for(var j=0;j<allProducts.length;j++){product=allProducts[j];product=_gsUtility.serialize(product,"::",",,",true,true);products.push(product);}
data.gsproducts=products.join("||");that.dataSender.send(data,true);}
orders[0].value=allOrderIDs.join(",");ck.save(orders);that.ecom.clearOrders();}
catch(e){if("\v"=="v"){throw e;}
else{that.reportError("FunctionCallFailed_trackECom",e);}}
window.onerror=lastErrorHandler;},getCommon:function(cmd){var that=this,userInfo=that.userTracker.getUserInfo(),data={"gsver":GridsumWebDissector.version,"gscmd":cmd,"gssrvid":that.serviceID,"gsuid":userInfo.userID,"gssid":userInfo.sessionID,"gsltime":_gsUtility.getLocalTime(),"gstmzone":_gsUtility.getTimezone(),"gsrd":_gsUtility.getRandomID()};return data;},setSessionTimeout:function(seconds){if(seconds<1||seconds>3600){return;}
this.config.sessionTimeout=seconds;},setCampaignNameKey:function(nameKey){this.config.campNameKey=nameKey.toLowerCase();this.config.ignoreParams.push(this.config.campNameKey);},setCampaignMediumKey:function(mediumKey){this.config.campMediumKey=mediumKey.toLowerCase();this.config.ignoreParams.push(this.config.campMediumKey);},setCampaignContentKey:function(contentKey){this.config.campContentKey=contentKey.toLowerCase();this.config.ignoreParams.push(this.config.campContentKey);},setCampaignSourceKey:function(sourceKey){this.config.campSourceKey=sourceKey.toLowerCase();this.config.ignoreParams.push(this.config.campSourceKey);},setCampaignTermKey:function(termKey){this.config.campTermKey=termKey.toLowerCase();this.config.ignoreParams.push(this.config.campTermKey);},setCampaignGroupKey:function(groupKey){this.config.campGroupKey=groupKey.toLowerCase();this.config.ignoreParams.push(this.config.campGroupKey);},setSEMNameKey:function(name){this.config.campNameKey=name;},setSEMMediumKey:function(medium){this.setCampaignMediumKey(medium);},setSEMContentKey:function(content){this.setCampaignContentKey(content);},setSEMGroupKey:function(group){this.setCampaignGroupKey(group);},setSEMSourceKey:function(source){this.setCampaignSourceKey(source);},setSEMTermKey:function(term){this.setCampaignTermKey(term);},addIgnoreKeyword:function(keyword){this.config.ignoreKeywords.push(keyword);},setChannel:function(value,key,fromReferrer){var param,that=this;if(key!=undefined){if(fromReferrer){param=_gsUtility.getUrlParam(document.referrer,key);}else{param=_gsUtility.getUrlParam(location.href,key);}
if(param!=null){value=param;}}
if(_gsUtility.isString(value)&&value.length!==0){that.extSrc.ad=that.extSrc.ad||{};that.extSrc.ad.channel=value;that.extSrc.channelName=value;}},setIgnoreUrlParam:function(paramKey){this.config.ignoreParams.push(paramKey);},getUserInfo:function(){return this.userTracker.getUserInfo();},getWDCookieString:function(domainHashOff){this.init();return this.userTracker.getRawCookieString(domainHashOff);},setIgnoreTrafficKeyword:function(keyword){this.config.ignoreTrafficKeyword=keyword;},shouldIgnoreTraffic:function(){var kwd=this.config.ignoreTrafficKeyword;return!this.serviceID||location.protocol==="file:"||location.hostname==="localhost"||location.hostname==="127.0.0.1"||this.isHeatmapModeOn()||(kwd&&_gsUtility.getUA().indexOf(kwd.toLowerCase())>-1);},isHeatmapModeOn:function(){var config=this.config;return config.clickEventGathering&&location.hash.toLowerCase().indexOf(config.heatmapKeyword)>-1;},reportError:function(errorCode,errObj){errObj=errObj||{};var time=new Date().getTime();var rand=Math.round(Math.random()*2147483647);var hostPage=_gsUtility.encode(_gsUtility.encode([location.protocol,"//",location.host,location.pathname,location.search].join("")));var referrer=_gsUtility.encode(_gsUtility.encode(document.referrer));var ua=_gsUtility.encode(_gsUtility.encode(_gsUtility.getUA()));var ver=_gsUtility.encode(GridsumWebDissector.version);var url=_gsUtility.format(this.config.errorUrl,this.serviceID,errorCode,_gsUtility.encode(_gsUtility.serialize(errObj,"::"," || ",true,true)),hostPage,rand,time,Math.random(),referrer,ver,ua);var img=new Image(1,1);img.onload=function(){_gsUtility.emptyFunction();};img.src=url;},addOrganicSearch:function(name,domain,keywordKey,encodingKey,defEncoding,pageStartKey,pageNumKey,pagingType){this.config.searchEngines.push(new GridsumWebDissector.SearchEngine(name,domain,keywordKey,encodingKey,defEncoding,pageStartKey,pageNumKey,pagingType));},setCustomProperty:function(propertyName,defaultValue,type,key){var value,that=this,params,url,tmp,customProperties=that.extSrc.customProperties||{};defaultValue=(defaultValue===undefined)?null:defaultValue;value=defaultValue;if(type==="cookie"){tmp=_gsUtility.getCookie(key,defaultValue);if(tmp!==null){value=tmp;}}
else
if(type==="query"){tmp=_gsUtility.getUrlParam(location.href,key);if(tmp!==null){value=tmp;}}
if(value!=null){customProperties[propertyName]=value;that.extSrc.customProperties=customProperties;}},setHeatmapScriptUrl:function(url){this.config.heatmapUrl=url;},setPageName:function(pageName){this.extSrc.pageName=pageName;},setSamplingRate:function(newRate){this.config.samplingRate=newRate;},setServiceUrl:function(url){this.config.serviceUrl=url;},track:function(page,outerLink){var data,urlObj,customProperties,ad,userTracker,userInfo,browserInfo,refererInfo,urlInfo,ourlInfo,that=this,config=that.config,pageVer=that.extSrc.pageVer,lastErrorHandler=window.onerror;window.onerror=function(message,url,line){that.reportError("FunctionCallFailed_track",{message:message,url:url,line:line});window.onerror=lastErrorHandler;return true;};try{that.init();if(that.isLocal){window.onerror=lastErrorHandler;return;}
userTracker=that.userTracker;browserInfo=that.browserInfo;refererInfo=that.refererInfo;if(page){page=page.toLowerCase();if(page.substring(0,4)!=="http"){page=[location.protocol,"//",location.host,page].join("");}
ourlInfo=that.urlInfo;urlInfo=that.urlAnalyzer.analyze(page);}
else{urlInfo=that.urlInfo;}
outerLink=(outerLink===true);if(!userTracker.isSampled()){return;}
if(!outerLink){userTracker.updateCounter(refererInfo.type);}
else{userTracker.updateCounter("referral");}
userInfo=userTracker.getUserInfo();data=that.getCommon("pv");data.gsiscnew=userInfo.isFirstVisit?1:0;data.gsissnew=(userInfo.sessionPV===1)?1:0;data.gsissecpv=(userInfo.sessionPV===2)?1:0;data.gsdcnt=userInfo.directCount;data.gsrcnt=userInfo.referralCount;data.gsocnt=userInfo.organicCount;data.gsbrname=browserInfo.browserName;data.gstl=that.extSrc.pageName||browserInfo.title;data.gsflver=browserInfo.flashVer;data.gsalexaver=browserInfo.alexaVer;data.gsdotnetver=browserInfo.dotnetVer;data.gssil=browserInfo.silverlightVer;data.gsbrlang=browserInfo.browserLang;data.gsscr=browserInfo.resolution;data.gsclr=browserInfo.colorDepth;data.gsoslang=browserInfo.osLang;data.gsosname=browserInfo.osName;data.gsje=browserInfo.javaEnabled;data.gsce=browserInfo.cookieEnabled;data.gspro=urlInfo.protocol;data.gsdm=urlInfo.host;data.gspa=urlInfo.path;customProperties=that.extSrc.customProperties;if(customProperties){data.gscp=_gsUtility.serialize(customProperties,"::","||",false,true);}
data.gschan=that.extSrc.channelName||(refererInfo.searchEngineName||refererInfo.domain);data.gsorurl=urlInfo.pureUrl;if(!outerLink){if(pageVer){data.gspver=pageVer;}
data.gsreftype=refererInfo.type||'';data.gsrefdm=refererInfo.domain;data.gsrefpa=refererInfo.path||'';data.gssename=refererInfo.searchEngineName||'';data.gskwd=refererInfo.keyword;data.gsenc=refererInfo.encoding;data.gssepage=refererInfo.pageIndex;ad=urlInfo.ad;if(ad){data.gsispaid=1;data.gscamp=ad.campName;data.gsgroup=ad.campGroup;data.gscampsrc=ad.campSource;data.gsmedium=ad.campMedium;data.gscampkwd=ad.campKeyword;data.gscampcontent=ad.campContent;if(that.refererInfo.isSearchEngine){data.gsreftype="paid search";}
if(ad.channel){data.gschan=ad.channel;}
var searchNetworks=that.config.searchNetworks,contentNetworkKey=that.config.contentNetworkKey,searchNetworkKey=that.config.searchNetworkKey,isHandled=false;if(!document.referrer){data.gsrefdm="(lost)";data.gsrefpa="(lost)";data.gsreftype="referral";}
if(ad.campMedium){if(ad.campMedium.indexOf(contentNetworkKey)>-1){data.gsreftype="content network";data.gssename="";data.gsenc="";data.gskwd="";data.gssepage="";isHandled=true;}
else
if(ad.campMedium.indexOf(searchNetworkKey)>-1){data.gsreftype="paid search";isHandled=true;}}
if(!isHandled){if(ad.campSource){var sn;for(var i=0,len=searchNetworks.length;i<len;i++){if(searchNetworks[i].name===ad.campSource){sn=searchNetworks[i];break;}}
if(sn){if(document.referrer){var match=sn.match(document.referrer);if(match.status){data.gskwd=match.keyword;data.gsrefdm=match.domain;data.gsreftype="paid search";data.gssename=sn.name;data.gsenc=match.encoding;data.gssepage=match.pageIndex;isHandled=true;}}
if(!isHandled){data.gsreftype="content network";}}}}}}
else{data.gsreftype="referral";data.gsrefdm=ourlInfo.host;data.gsrefpa=ourlInfo.path||'';}
that.dataSender.send(data,true);}
catch(e){if("\v"=="v"){throw e;}
else{that.reportError("FunctionCallFailed_track",e);window.onerror=lastErrorHandler;}}
window.onerror=lastErrorHandler;},trackEvent:function(el,eventName,handler){return _gsUtility.observe(el,eventName,handler);},trackLink:function(page,el,tagName,attrs,bubbleSearch){var that=this;attrs=attrs||{};bubbleSearch=(bubbleSearch!==false);var binding=that.trackEvent(el,"click",function(e){var p,flag,target=e.target;if(!tagName){that.track(page,true);}
else
if(target){while(bubbleSearch&&target&&target!=binding.parentNode){flag=true;if(target.tagName===tagName.toUpperCase()){flag=false;for(p in attrs){if(attrs.hasOwnProperty(p)&&!target[p]||target[p].toString().toUpperCase().indexOf(attrs[p].toUpperCase())<0){flag=true;break;}}}
if(flag){target=target.parentNode;}
else{that.track(page,true);return;}}}});if(!binding&&el){this.reportError("ElementBindingFailed",{element:el.id||el,path:page});}
return binding;},jump:function(target){this.init();var targetUrl,ck=this.userTracker.getRawCookieString();targetUrl=_gsUtility.isString(target)?target:target.action;location.href=targetUrl+"#"+ck;},setCookieProperties:function(domain,path,isSecure){if(domain&&domain.charAt(0)==="."){domain=domain.substring(1);}
this.config.domain=domain||this.config.domain;this.config.cookiePath=path||this.config.cookiePath;this.config.cookieSecure=!!isSecure;},addAdNetwork:function(name,domain,keywordKey,encodingKey,defEncoding,pageStartKey,pageNumKey,pagingType){this.config.searchNetworks.push(new GridsumWebDissector.SearchEngine(name,domain,keywordKey,encodingKey,defEncoding,pageStartKey,pageNumKey,pagingType));},clearAdNetworks:function(){this.config.searchNetworks=[];},setCampaign:function(campaign){if(_gsUtility.isString(campaign)&&campaign.length!==0){this.extSrc.ad=this.extSrc.ad||{};this.extSrc.ad.campName=campaign;}},setGroup:function(group){if(_gsUtility.isString(group)&&group.length!==0){this.extSrc.ad=this.extSrc.ad||{};this.extSrc.ad.campGroup=group;}},setAdGroup:function(group){this.setGroup(group);},setContent:function(content){if(_gsUtility.isString(content)&&content.length!==0){this.extSrc.ad=this.extSrc.ad||{};this.extSrc.ad.campContent=content;}},setKeyword:function(keyword){if(_gsUtility.isString(keyword)&&keyword.length!==0){this.extSrc.ad=this.extSrc.ad||{};this.extSrc.ad.campKeyword=keyword;}},setMedium:function(medium){if(_gsUtility.isString(medium)&&medium.length!==0){this.extSrc.ad=this.extSrc.ad||{};this.extSrc.ad.campMedium=medium;}},setSource:function(source){if(_gsUtility.isString(source)&&source.length!==0){this.extSrc.ad=this.extSrc.ad||{};this.extSrc.ad.campSource=source;}},setCampaignKey:function(nameKey){this.config.campNameKey=nameKey.toLowerCase();this.config.ignoreParams.push(this.config.campNameKey);},setMediumKey:function(mediumKey){this.config.campMediumKey=mediumKey.toLowerCase();this.config.ignoreParams.push(this.config.campMediumKey);},setContentKey:function(contentKey){this.config.campContentKey=contentKey.toLowerCase();this.config.ignoreParams.push(this.config.campContentKey);},setSourceKey:function(sourceKey){this.config.campSourceKey=sourceKey.toLowerCase();this.config.ignoreParams.push(this.config.campSourceKey);},setKeywordKey:function(keywordKey){this.config.campTermKey=keywordKey.toLowerCase();this.config.ignoreParams.push(this.config.campTermKey);},setGroupKey:function(groupKey){this.config.campGroupKey=groupKey.toLowerCase();this.config.ignoreParams.push(this.config.campGroupKey);},setChannelKey:function(channelKey){this.config.channelKey=channelKey.toLowerCase();this.config.ignoreParams.push(this.config.channelKey);},setContentNetworkPrefix:function(prefix){this.config.contentNetworkKey=prefix;},setSearchNetworkPrefix:function(prefix){this.config.searchNetworkKey=prefix;},addFrames:function(){for(var i=0,len=arguments.length;i<len;i++){var frameEl=_gsUtility.getEl(arguments[i]);try{frameEl=frameEl.frameElement||frameEl;if(frameEl.contentDocument){this.config.iframes.push(frameEl);}}
catch(e){}}},addIgnoreParams:function(){this.config.ignoreParams=this.config.ignoreParams.concat(Array.prototype.slice.apply(arguments));},addToBlackList:function(){for(var i=0,len=arguments.length;i<len;i++){this.config.mcBlackList.push(arguments[i]);}},addToWhiteList:function(){for(var i=0,len=arguments.length;i<len;i++){this.config.mcWhiteList.push(arguments[i]);}},clearBlackList:function(){this.config.mcBlackList=[];},enableLazyClickTrace:function(enable){this.config.lazyClickTrace=(enable!==false);},enableHeatmap:function(enable){this.config.clickEventGathering=(enable!==false);},enableCrossDomain:function(enable){this.config.isCrossDomainEnabled=(enable!==false);},enableAnchor:function(enable){this.config.allowAnchor=(enable!==false);},setClickSamplingRate:function(newRate){this.config.mcSamplingRate=newRate;},setClickZone:function(width,height){this.config.clickZoneWidth=width||this.config.clickZoneWidth;this.config.clickZoneHeight=height||this.config.clickZoneHeight;},setDocWidth:function(width){this.config.documentWidth=Number(width);},setOriginalUrl:function(url){this.extSrc.pureUrl=url;},setOriginElement:function(element){this.config.coordinateElement=_gsUtility.getEl(element);},setPageVersion:function(ver){this.extSrc.pageVer=ver;}});GridsumWebDissector.Utility=function(){this.ignoreCase=true;this.getBrowserName();this.funcList=[];};GridsumWebDissector.extend(GridsumWebDissector.Utility.prototype,{isIE:function(){return"\v"=="v";},getHashCode:function(str,caseSensitive){var hash=1315423911,i,ch;if(!caseSensitive){str=str.toLowerCase();}
for(i=str.length-1;i>=0;i--){ch=str.charCodeAt(i);hash^=((hash<<5)+ch+(hash>>2));}
return(hash&0x7FFFFFFF);},getRandomString:function(randLength,unique){var lastIndex=-1,randIndex=-1,randMatrix="abcdefghijklmnopqrstuvwxyz0123456789",randomString=[],max=randMatrix.length-1;unique=(unique!==false);for(var i=0;i<randLength;i++){do{randIndex=Math.round(Math.random()*max);}while(unique&&lastIndex===randIndex);lastIndex=randIndex;randomString.push(randMatrix.charAt(randIndex));}
return randomString.join("");},getRandomID:function(){var date=new Date().getTime().toString();var hash=""+Math.abs(this.getHashCode(location.href+document.referrer+this.getUA()));var len=hash.length>2?2:hash.length;hash=hash.substr(0,len);return date.substr(2,date.length-3)+this.getRandomString(6)+hash;},getUrlParam:function(url,key,ignoreCase){var value,that=this;ignoreCase=(ignoreCase!==false);value=that.find(url,"&"+key+"=","&",ignoreCase);if(value===null){value=that.find(url,"?"+key+"=","&",ignoreCase);if(value===null){value=that.find(url,key+"=","&",ignoreCase);}}
if(value!=null){value=value.toLowerCase();}
return that.decode(value);},find:function(str,prefix,suffix,ignoreCase,trimBlank,start,end){var left,right,middle,search,pLen,sLen,search,value=null;ignoreCase=(ignoreCase!==false);trimBlank=(trimBlank!==false);end=end||str.length;search=str=str.substring(start,end);prefix=prefix||"";if(ignoreCase){search=str.toLowerCase();prefix=prefix.toLowerCase();suffix=suffix&&suffix.toLowerCase();}
left=search.indexOf(prefix);if(left>-1){middle=left+prefix.length;if(!suffix){value=str.substring(middle);}
else{right=search.indexOf(suffix,middle);value=right>-1?str.substring(middle,right):str.substring(middle);}}
if(value&&trimBlank){value=this.trim(value);}
return value;},findArray:function(str,prefix,suffix,ignoreCase,trimBlank){var left,right,middle,search,value,values=[],start=0;ignoreCase=(ignoreCase!==false);trimBlank=(trimBlank!==false);if(ignoreCase){str=str.toLowerCase();prefix=prefix.toLowerCase();suffix=suffix&&suffix.toLowerCase();}
while(start>-1){left=str.indexOf(prefix,start);if(left<0){break;}
else{middle=left+prefix.length;if(!suffix||(right=str.indexOf(suffix,middle))<0){value=str.substring(middle);start=-1;}
else{value=str.substring(middle,right);start=right+suffix.length;}
if(trimBlank){value=this.trim(value);}
values.push(value);}}
return values;},indexOf:function(source,target,startIndex){var len=source.length;startIndex=startIndex||0;if(len===0){return-1;}
while(startIndex<0){startIndex+=len;}
if(this.isArray(source)){for(;startIndex<len;startIndex++){if(source[startIndex]===target){return startIndex;}}}
else{if(this.isString(source)){return source.indexOf(target,startIndex);}}
return-1;},getTimezone:function(){return Math.round(new Date().getTimezoneOffset()/-60).toString();},getLocalTime:function(){var utcTime=new Date().getTime();var timezone=this.getTimezone();return utcTime+timezone*3600*1000;},isArray:function(o){return!!(o&&o.constructor==Array);},isString:function(s){return typeof s=='string';},isNumber:function(n){var type=typeof n;if(type=='number'){return true;}else if(type=="string"){var regex=/^([\+\-]?\d+\.?\d*)$/;return regex.test(n);}
return false;},isNumberValid:function(n,start,end){end=end||Number.MAX_VALUE;return n>=start&&n<=end;},isFunction:function(f){return typeof f=='function';},getCookie:function(key,defValue){var cookies={},value,that=this;if(!key){return null;}
cookies=that.toDict(document.cookie,"=",";",true);key=key.toLowerCase();for(var p in cookies){if(cookies.hasOwnProperty(p)&&p.toLowerCase()===key){return unescape(cookies[p]);}}
return defValue!==undefined?defValue:null;},setCookie:function(key,value,expires,path,domain,secure){if(!key){return;}
key=key.toLowerCase();key=key+'='+escape(value)+";";expires=expires?("expires="+this.getExpireDate(expires).toGMTString())+";":"";path=!!path?"path="+path+";":"path=/;";domain=domain?("domain="+domain)+";":"";secure=secure?"secure=true;":"";document.cookie=[key,expires,path,domain,secure].join("");},delCookie:function(key,path,domain){key=key.toLowerCase();this.setCookie(key,"",-1000,path,domain);},getExpireDate:function(seconds){return new Date(new Date().getTime()+seconds*1000);},getDate:function(millSec){return new Date(millSec-this.getTimezone()*3600*1000);},trim:function(str){return str&&str.replace(/^\s*(.*?)\s*$/,'$1');},isBlank:function(str){return this.trim(str).length===0;},toJSON:function(str,assignment,delim,ifTrimBoth){return this.toDict(str,assignment,delim,ifTrimBoth);},toDict:function(str,assignment,delim,trimBoth){var i,pair,params,len,trimFunc,retnObj={},that=this;assignment=assignment||"=";delim=delim||'&';trimBoth=(trimBoth===true);params=str.split(delim);if(trimBoth){trimFunc=that.trim;}else{trimFunc=that.emptyFunction;}
for(i=0,len=params.length;i<len;i++){var before=_gsUtility.find(params[i],null,assignment);var after=_gsUtility.find(params[i],assignment,null);retnObj[trimFunc(before)]=(after===undefined?null:trimFunc(after));}
return retnObj;},resolveURL:function(url){var re=/(\w+):\/\/([^\/#?]*)(\/[^?#&]*)?\??([^#]*)#?(.*)/,retn={path:'',fullPath:'',query:'',anchor:'',params:{}};var match=url.match(re);if(match){retn.protocol=match[1];retn.isLocal=(match[1]==="file");retn.host=match[2]||'';retn.path=match[3]||"/";retn.fullPath=match[3]||"/";retn.query=match[4]||'';retn.anchor=match[5]||'';if(match[4]){retn.fullPath+="?"+match[4];retn.params=_gsUtility.toDict(retn.query);}}
else{retn.isLocal=true;retn.protocol="file";retn.fullPath=retn.path="/"+url.replace(/\\/g,"/");}
var q=retn.query;if(q){q="?"+q;}
retn.url=[retn.protocol,"://",retn.host,retn.fullPath,q].join("");return retn;},encode:function(str,isComponent){var that=this,value=str,encodeFunc=that.emptyFunction;isComponent=isComponent||true;if(that.isString(str)){if(isComponent){encodeFunc=encodeURIComponent||escape;}else{encodeFunc=encodeURI||escape;}
value=encodeFunc(str);}
return value;},decode:function(str,isComponent){var that=this,value=str,decodeFunc=this.emptyFunction;isComponent=isComponent||true;if(that.isString(str)){str=str.replace(/\+/ig,"%20");if(isComponent){decodeFunc=decodeURIComponent||unescape;}else{decodeFunc=decodeURI||unescape;}
try{value=decodeFunc(str);}catch(e){}}
return value;},getAlexaVer:function(){return this.getUA().indexOf("alexa")>-1?1:0;},getSilverlightVer:function(){var i,len,plugins,silverObj,ver=null;try{if(window.ActiveXObject){silverObj=new ActiveXObject("AgControl.AgControl");for(i=10;i>0;i--){if(silverObj.IsVersionSupported(""+i+".0")){ver=""+i+".0";break;}}}
else{plugins=navigator.plugins;for(i=0,len=plugins.length;i<len;i++){if(plugins[i].name&&plugins[i].name.toLowerCase().indexOf("silverlight")>-1){ver=plugins[i].description;return ver.toLowerCase();}}}}
catch(e){}
return ver;},getOsLang:function(){return"zh-cn";},getDotNetVer:function(){var i,maxVer,ua=this.getUA(),vers=this.findArray(ua,".net clr",";",true,true),len=vers.length;if(len!==0){maxVer=vers[0];for(i=1;i<len;i++){if(vers[i]>maxVer){maxVer=vers[i];}}
i=maxVer.indexOf(")");if(i>-1){maxVer=maxVer.substring(0,i);}}
return maxVer;},getBrowserName:function(){var browserList={"opera":"Opera","msie 8":"IE8","msie 7":"IE7","msie 6":"IE6","msie":"IE","chrome":"Chrome","safari":"Safari","mozilla":"Firefox"};var ieInside={"maxthon":"Maxthon","360se":"360","theworld":"TheWorld","se":"Sogou","avant":"Avant","tencenttraveler":"Tencent","greenbrowser":"GreenBrowser"};var ua=this.getUA();var brName=navigator.appName&&navigator.appName.toLowerCase();for(var browser in browserList){if(ua.indexOf(browser)>-1){brName=browserList[browser];break;}}
if(brName==="IE7"&&document.documentMode){brName="IE8 CompatMode";}
if(brName==="microsoft internet explorer"){brName="IE";}
if(brName.toLowerCase().indexOf("ie")>-1){for(var browser in ieInside){if(ua.indexOf(browser)>-1){brName=ieInside[browser]+" / "+brName;break;}}}
return brName;},getFlashVer:function(){var f="",n=navigator,ii;if(n.plugins&&n.plugins.length){for(ii=0;ii<n.plugins.length;ii++){if(n.plugins[ii].name.indexOf('Shockwave Flash')!=-1){f=n.plugins[ii].description.split('Shockwave Flash ')[1];break;}}}
else
if(window.ActiveXObject){for(ii=10;ii>=2;ii--){try{var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");if(fl){f=ii+'.0';break;}}
catch(e){}}}
if(f){f=f.replace("  "," ");}
return f;},getOSName:function(){var platform=navigator.platform,osList={"windows nt 6.1":"windows 7","windows nt 6.0":"windows vista/2008","windows nt 5.2":"windows 2003","windows nt 5.1":"windows xp","windows nt 5.01":"windows 2000 sp1","windows nt 5.0":"windows 2000","linux":"linux","macintosh":"mac","mac os x":"mac","windows 4.0":"windows 95","windows 98":"windows 98","windows ce":"windows ce","windows nt 4.0":"windows nt 4.0"},ua=this.getUA();for(var os in osList){if(ua.indexOf(os)>-1){platform=osList[os];}}
return platform&&platform.toLowerCase();},isInvalid:function(obj){return obj===undefined||obj===null||obj==="";},serialize:function(obj,assignment,delim,ignoreEmpty,encodeURIComponent){var buf=[],encode,that=this;assignment=assignment||"=";delim=delim||"&";if(encodeURIComponent===false){encode=that.emptyFunction;}else{encode=that.encode;}
for(var prop in obj){if(obj.hasOwnProperty(prop)){if(ignoreEmpty&&that.isInvalid(obj[prop])){continue;}
var pair=prop+assignment+encode.call(that,obj[prop],true);buf.push(pair);}}
return buf.join(delim);},getEl:function(el){return this.isString(el)?document.getElementById(el):el;},waitFor:function(id,func,checkInterval,retryCount){checkInterval=checkInterval==undefined?1000:checkInterval;retryCount=retryCount==undefined?30:retryCount;var timer=setInterval(function(){if(_gsUtility.getEl(id)){clearInterval(timer);func();}else{if(retryCount>0){retryCount-=1;}
else{clearInterval(timer);}}},checkInterval);},getUA:function(){return navigator.userAgent.toLowerCase();},getElementPos:function(el){var scrollTop,scrollLeft,box,parent=null,pos=[],that=this,ua=that.getUA(),isIE=that.isIE(),point={};if(el.parentNode===null||el.style.display=='none'){return false;}
if(el.getBoundingClientRect){box=el.getBoundingClientRect();scrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);scrollLeft=Math.max(document.documentElement.scrollLeft,document.body.scrollLeft);point={x:box.left+scrollLeft,y:box.top+scrollTop};return point;}else if(document.getBoxObjectFor){box=document.getBoxObjectFor(el);var borderLeft=(el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth,10):0;var borderTop=(el.style.borderTopWidth)?parseInt(el.style.borderTopWidth,10):0;pos=[box.x-borderLeft,box.y-borderTop];}else{pos=[el.offsetLeft,el.offsetTop];parent=el.offsetParent;if(parent!=el){while(parent){pos[0]+=parent.offsetLeft;pos[1]+=parent.offsetTop;parent=parent.offsetParent;}}
if(ua.indexOf('opera')!=-1||(ua.indexOf('safari')!=-1&&el.style.position=='absolute')){pos[0]-=document.body.offsetLeft;pos[1]-=document.body.offsetTop;}}
if(el.parentNode){parent=el.parentNode;}else{parent=null;}
while(parent&&parent.tagName!='BODY'&&parent.tagName!='HTML'){pos[0]-=parent.scrollLeft;pos[1]-=parent.scrollTop;if(parent.parentNode){parent=parent.parentNode;}else{parent=null;}}
point={x:pos[0],y:pos[1]};return point;},getViewportHeight:function(){return window.innerHeight||(document.documentElement&&document.documentElement.clientHeight)||(document.body&&document.body.clientHeight)||0;},getViewportWidth:function(){return window.innerWidth||(document.documentElement&&document.documentElement.clientWidth)||(document.body&&document.body.clientWidth)||0;},getDocWidth:function(){return(document.documentElement&&document.documentElement.scrollWidth)||(document.body&&document.body.scrollWidth)||0;},getDocHeight:function(){return(document.documentElement&&document.documentElement.scrollHeight)||(document.body&&document.body.scrollHeight)||0;},getHScroll:function(){return window.pageXOffset||(document.documentElement&&document.documentElement.scrollLeft)||(document.body&&document.body.scrollLeft)||0;},getVScroll:function(){return window.pageYOffset||(document.documentElement&&document.documentElement.scrollTop)||(document.body&&document.body.scrollTop)||0;},observe:function(element,eventName,handler){element=this.getEl(element);if(!element){return null;}
function wrapper(e){if(!e){e=window.event;e.currentTarget=this;}
if(!e.target&&e.srcElement){e.target=e.srcElement;}
if(e.target&&e.target.nodeType===3){e.target=e.target.parentNode;}
handler(e||{});}
if(element.addEventListener){element.addEventListener(eventName,wrapper,false);}else{element.attachEvent("on"+eventName,wrapper);}
return element;},prepareDomReadyEvent:function(){var that=this;if(that.prepared){return;}
that.prepared=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);that.domLoaded();},false);}
else
if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);that.domLoaded();}});var isLoaded=false;if(document.documentElement.doScroll&&window==window.top)
(function(){if(isLoaded)
return;try{document.documentElement.doScroll("left");}
catch(error){setTimeout(arguments.callee,0);return;}
that.domLoaded();})();}
that.observe(document,"load",that.domLoaded);},domReady:function(fn){this.prepareDomReadyEvent();if(this.domLoaded){fn.call(window);}else{this.funcList.push(fn);}},domLoaded:function(){if(!this.domLoaded){this.domLoaded=true;if(this.isArray(this.funcList)){for(var i=0,len=this.funcList.length;i<len;i++){this.funcList[i].call(window);}}}},format:function(formatString){if(!arguments.length===1){return formatString;}else{var argNum=arguments.length;for(var i=1;i<argNum;i++){formatString=formatString.replace(new RegExp("\\{"+(i-1)+"\\}","g"),arguments[i]);}
return formatString;}},onError:function(){},emptyFunction:function(o){return o;}});var _gsUtility=new GridsumWebDissector.Utility();if(!window._Utility){var _Utility=_gsUtility;}
GridsumWebDissector.BrowserAnalyzer=function(config){this.config=config;};GridsumWebDissector.extend(GridsumWebDissector.BrowserAnalyzer.prototype,{analyze:function(){var browser={},ua=_gsUtility.getUA(),brLang=_gsUtility.isIE()?navigator.browserLanguage:navigator.language;var pageName=GridsumWebDissector.getTracker(this.config.serviceID).extSrc.pageName;browser.flashVer=_gsUtility.getFlashVer();browser.silverlightVer=_gsUtility.getSilverlightVer();browser.alexaVer=_gsUtility.getAlexaVer();browser.resolution=screen.width+"*"+screen.height;browser.colorDepth=screen.colorDepth||32;browser.osLang=navigator.systemLanguage&&navigator.systemLanguage.toLowerCase();browser.javaEnabled=navigator.javaEnabled()?1:0;browser.dotnetVer=_gsUtility.getDotNetVer();browser.title=pageName||document.title;browser.browserName=_gsUtility.getBrowserName();browser.osName=_gsUtility.getOSName();browser.browserLang=brLang?brLang.toLowerCase():null;var ckSupport=new GridsumWebDissector.CookieSerializer(this.config).getCookieSupportDegree();browser.cookieEnabled=(ckSupport>0)?1:0;return browser;}});GridsumWebDissector.SourceRecognizer=function(name,type,domain,essentialParams,optParams){var that=this;that.name=name;that.type=type;that.domainPattern=domain;that.essentialParams=essentialParams||[];that.optParams=optParams||[];};GridsumWebDissector.extend(GridsumWebDissector.SourceRecognizer.prototype,{testDomain:function(domain){var pattern=this.domainPattern;if(_gsUtility.isString(pattern)){return domain.indexOf(pattern)>-1;}else{return pattern.test(domain);}},match:function(url){var i,len,domain,queryString,regEx,key,value,queryObj,splits,paramsLen=0,that=this,data={},urlObj=_gsUtility.resolveURL(url.toLowerCase()),flag=true,params={},essentialParams=that.essentialParams,optParams=that.optParams;if(urlObj.isLocal){flag=false;}else{domain=urlObj.host;flag=that.testDomain(domain);if(flag){queryObj=urlObj.params;for(i=0,len=essentialParams.length;i<len;i++){splits=essentialParams[i].split("=");key=splits[0];if(!queryObj[key]||(splits[1]!==undefined&&queryObj[key]!=splits[1])){flag=false;break;}else{params[key]=queryObj[key];paramsLen++;}}
if(flag){for(i=0,len=optParams.length;i<len;i++){splits=optParams[i].split("=");key=splits[0];if(queryObj[key]){params[key]=queryObj[key];paramsLen++;}}}}}
data.status=flag;data.domain=domain;data.type=that.type;params.length=paramsLen;data.params=params;return data;}});GridsumWebDissector.RefererAnalyzer=function(config){this.config=config;};GridsumWebDissector.extend(GridsumWebDissector.RefererAnalyzer.prototype,{analyze:function(referrer){var match,i,len,se,urlObj,that=this,config=that.config,tracker=GridsumWebDissector.getTracker(config.serviceID),refObj={},isHandled=false,searchEngines=config.searchEngines;referrer=referrer||document.referrer;if(!referrer){try{if(window.opener){referrer=window.opener.location.href;if(!referrer){isHandled=true;}}
else{isHandled=true;}}
catch(e){isHandled=true;}}
if(isHandled){refObj.isDirect=true;refObj.type="direct";}else{urlObj=_gsUtility.resolveURL(referrer.toLowerCase());refObj.original=referrer;refObj.domain=urlObj.host;refObj.path=urlObj.fullPath;if(!urlObj.isLocal){for(i=0,len=searchEngines.length;i<len;i++){match=searchEngines[i].match(referrer);if(match.status){refObj.keyword=match.keyword;refObj.domain=match.domain;refObj.type="organic search";refObj.isSearchEngine=true;refObj.searchEngineName=searchEngines[i].name;refObj.encoding=match.encoding;refObj.pageIndex=match.pageIndex;isHandled=true;break;}}}
if(!isHandled){if(refObj.path){refObj.type="referral";refObj.isReferral=true;}else{refObj.isDirect=true;refObj.type="direct";tracker.reportError("UnRecognizableReferrer",{refer:referrer});}}}
if(!refObj.type){tracker.reportError("UnRecognizableReferrer",{refer:referrer});}
return refObj;}});GridsumWebDissector.SearchEngine=function(name,domain,termKey,encodingKey,defEncoding,start,num,pagingType){var that=this;that.name=name;that.domain=domain;that.termKey=termKey;that.start=start||"";that.num=num||"";that.pagingType=pagingType||'item';that.encodingKey=encodingKey||'ie';that.defEncoding=defEncoding||'utf-8';that.sourceRecognizer=new GridsumWebDissector.SourceRecognizer(name,"organic search",domain,[that.termKey],[that.start,that.num,that.encodingKey]);};GridsumWebDissector.SearchEngine.prototype.match=function(url){var num,page,start,that=this,obj=that.sourceRecognizer.match(url),retn={status:obj.status,name:that.name,domain:obj.domain},params=obj.params;if(obj.status){start=Number(params[that.start]);num=Number(params[that.num]);start=(isNaN(start)?1:start);num=(isNaN(num)?10:num);if(that.pagingType==="item"){page=Math.round(start/num)+1;}else{page=start;}
retn.pageIndex=page;retn.keyword=params[that.termKey]||'';retn.encoding=params[that.encodingKey]||that.defEncoding;if(retn.encoding==="utf8"){retn.encoding="utf-8";}}
return retn;};GridsumWebDissector.URLAnalyzer=function(config){this.config=config;};GridsumWebDissector.extend(GridsumWebDissector.URLAnalyzer.prototype,{analyze:function(url){var i,q,urlInfo,urlObj,sourceRecognizer,match,params,ad,tempUrl,config=this.config,allowAnchor=config.allowAnchor,ignoreParams=config.ignoreParams,campNameKey=config.campNameKey.toLowerCase(),campTermKey=config.campTermKey.toLowerCase(),campSourceKey=config.campSourceKey.toLowerCase(),campMediumKey=config.campMediumKey.toLowerCase(),campContentKey=config.campContentKey.toLowerCase(),campGroupKey=config.campGroupKey.toLowerCase(),channelKey=config.channelKey.toLowerCase(),tracker=GridsumWebDissector.getTracker(config.serviceID),adSettings=tracker.extSrc.ad,pureUrl=tracker.extSrc.pureUrl;url=url||window.location.href;urlObj=_gsUtility.resolveURL(url);urlInfo={"protocol":urlObj.protocol,"isLocal":urlObj.isLocal,"host":urlObj.host,"path":urlObj.fullPath,"anchor":urlObj.anchor,"params":urlObj.params,"pureUrl":[urlObj.protocol,"://",urlObj.host,urlObj.fullPath].join("")};if(!urlInfo.isLocal){if(pureUrl){urlInfo.pureUrl=pureUrl;}else if(ignoreParams.length!==0&&urlObj.params){for(i=0;i<ignoreParams.length;i++){delete urlObj.params[ignoreParams[i]];}
q=_gsUtility.serialize(urlObj.params,"=","&",false,false);if(q){q="?"+q;}
urlInfo.pureUrl=[urlObj.protocol,"://",urlObj.host,urlObj.path,q].join("");}
sourceRecognizer=new GridsumWebDissector.SourceRecognizer("current url","referral",urlObj.host,[],[campNameKey,campTermKey,campSourceKey,campMediumKey,campContentKey,campGroupKey,channelKey]);tempUrl=url.toLowerCase();tempUrl=allowAnchor?tempUrl.replace(/#/g,"&"):tempUrl;tempUrl=tempUrl.replace(/\?/g,"&");match=sourceRecognizer.match(tempUrl);if(match.status){params=match.params;if(params.length!==0){ad={campName:params[campNameKey],campGroup:params[campGroupKey],campSource:params[campSourceKey],campMedium:params[campMediumKey],campKeyword:params[campTermKey],campContent:params[campContentKey],channel:params[channelKey]};}}
if(adSettings){ad=ad||{};ad.campName=adSettings.campName||ad.campName;ad.campGroup=adSettings.campGroup||ad.campGroup;ad.campMedium=adSettings.campMedium||ad.campMedium;ad.campSource=adSettings.campSource||ad.campSource;ad.campKeyword=adSettings.campKeyword||ad.campKeyword;ad.campContent=adSettings.campContent||ad.campContent;ad.channel=adSettings.channel||ad.channel;}
if(ad){ad.campName=_gsUtility.decode(ad.campName);ad.campGroup=_gsUtility.decode(ad.campGroup);ad.campMedium=_gsUtility.decode(ad.campMedium);ad.campSource=_gsUtility.decode(ad.campSource);ad.campKeyword=_gsUtility.decode(ad.campKeyword);ad.campContent=_gsUtility.decode(ad.campContent);ad.channel=_gsUtility.decode(ad.channel);}
urlInfo.ad=ad;}
return urlInfo;}});GridsumWebDissector.UserTracker=function(config){this.config=config;this.cookieSerializer=new GridsumWebDissector.CookieSerializer(config);this.userInfo={};this.init();};GridsumWebDissector.extend(GridsumWebDissector.UserTracker.prototype,{init:function(){var curURL,urlObj,gscu,gscs,gscbrs,ckSupport,ver,verSplits,anchor,that=this,hankie=false,config=that.config,tracker=GridsumWebDissector.getTracker(config.serviceID),isCrossDomainEnabled=config.isCrossDomainEnabled,cookieSerializer=that.cookieSerializer,splits=[],firstSessionFlag=true,firstVisitFlag=true,cookieEntities=[{'name':'_gscu'},{'name':'_gscs'},{'name':'_gscbrs'}];if(tracker.isLocal){return;}
try{if(isCrossDomainEnabled){curURL=document.location.href.toLowerCase();urlObj=_gsUtility.resolveURL(curURL);anchor=urlObj.anchor.replace("#","&");cookieEntities=cookieSerializer.restoreFrom(anchor,cookieEntities,'&');gscu=cookieEntities[0];hankie=!!gscu.value;}
if(!hankie){cookieEntities=that.cookieSerializer.restore(cookieEntities);}
gscu=cookieEntities[0].value;gscs=cookieEntities[1].value;gscbrs=cookieEntities[2].value;if(gscu){splits=gscu.split("|");if(splits.length===7){ver=splits[0];hankie=true;if(ver!==GridsumWebDissector.version){verSplits=GridsumWebDissector.version.split(".");if(!(ver.indexOf(verSplits[0])===0||Number(verSplits[0])%2===0)){hankie=false;}}
if(hankie){that.userInfo.userID=splits[1];that.userInfo.firstVisitTime=splits[2];that.userInfo.timezone=splits[3];that.userInfo.directCount=Number(splits[4]);that.userInfo.referralCount=Number(splits[5]);that.userInfo.organicCount=Number(splits[6]);firstVisitFlag=false;if(gscs&&gscbrs){splits=gscs.split("|");if(splits.length===3){that.userInfo.sessionID=splits[0];that.userInfo.sessionPV=Number(splits[1]);that.userInfo.sessionBeginTime=Number(splits[2]);firstSessionFlag=false;}}}}}}catch(e){firstVisitFlag=true;tracker.reportError("UserInfoFailed",e);}
if(firstVisitFlag){that.setFirstVisit();}else{if(firstSessionFlag){that.setSessionBegin();}else{that.update();}}},updateCounter:function(type){var flag=true,userInfo=this.userInfo;if(userInfo.sessionPV===0){switch(type){case"direct":userInfo.directCount++;break;case"referral":userInfo.referralCount++;break;case"organic search":userInfo.organicCount++;break;case"paid search":break;default:flag=false;break;}}
if(flag){userInfo.sessionPV+=1;this.update();}},setFirstVisit:function(){var that=this,curTime=_gsUtility.getLocalTime(),userInfo=that.userInfo;userInfo.userID=_gsUtility.getRandomID();userInfo.sessionID=_gsUtility.getRandomID();userInfo.sessionBeginTime=curTime;userInfo.firstVisitTime=curTime;userInfo.timezone=_gsUtility.getTimezone();userInfo.sessionPV=0;userInfo.directCount=0;userInfo.referralCount=0;userInfo.organicCount=0;userInfo.isFirstVisit=true;that.update();},setSessionBegin:function(){var that=this,curTime=_gsUtility.getLocalTime(),userInfo=that.userInfo;userInfo.sessionID=_gsUtility.getRandomID();userInfo.sessionPV=0;userInfo.sessionBeginTime=curTime;that.update();},update:function(){var cookieEntities=this.getCookieEntities();this.cookieSerializer.save(cookieEntities);},getUserInfo:function(){return this.userInfo;},getCookieEntities:function(){var that=this,config=that.config,ver=config.version,userInfo=that.userInfo,ckSupport=that.cookieSerializer.getCookieSupportDegree(),sessionTimeout=(ckSupport===2?config.sessionTimeout:undefined),globalTimeout=(ckSupport===2?config.globalTimeout:undefined),cookieEntities=[];if(ckSupport>0){cookieEntities=[{'name':"_gscu",'value':[ver,userInfo.userID,userInfo.firstVisitTime,userInfo.timezone,userInfo.directCount,userInfo.referralCount,userInfo.organicCount].join("|"),'expires':globalTimeout},{'name':"_gscs",'value':[userInfo.sessionID,userInfo.sessionPV,userInfo.sessionBeginTime].join("|"),'expires':sessionTimeout},{'name':"_gscbrs",'value':1}];}
return cookieEntities;},getRawCookieString:function(domainHashOff){var cookieEntities=this.getCookieEntities();domainHashOff=(domainHashOff!==false);return this.cookieSerializer.getRawCookieString(cookieEntities,'&',false,domainHashOff);},isSampled:function(){var samplingRate=this.config.samplingRate,visitCode=_gsUtility.getHashCode(this.userInfo.userID);return visitCode%10000<samplingRate*100;}});GridsumWebDissector.CookieSerializer=function(config){this.config=config;this.serviceID=config?config.serviceID:"";this.cookiePath=config?config.cookiePath:"/";this.domain=config.domain||location.hostname;};GridsumWebDissector.extend(GridsumWebDissector.CookieSerializer.prototype,{getCookieSupportDegree:function(){var that=this,ckSupport=that.ckSupport,testCookies=[{"name":"testsession_aaaa","value":'yes'},{"name":"testlong_aaaa","value":'yes',"expires":30}];if(!ckSupport){that.save(testCookies);that.restore(testCookies);that.delCookie("testsession_aaaa");that.delCookie("testlong_aaaa");if(testCookies[1].value){ckSupport=2;}else{if(testCookies[0].value){ckSupport=1;}else{ckSupport=0;}}
that.ckSupport=ckSupport;}
return ckSupport;},save:function(cookies){if(!_gsUtility.isArray(cookies)){cookies=[cookies];}
for(var i=0;i<cookies.length;i++){var cookie=cookies[i];this.setCookie(cookie.name,cookie.value,cookie.expires,cookie.path,cookie.domain,cookie.secure);}},restore:function(cookies,override){override=(override!==false);if(!_gsUtility.isArray(cookies)){cookies=[cookies];}
for(var i=0;i<cookies.length;i++){var value=this.getCookie(cookies[i].name);cookies[i].value=(override||value)?value:cookies[i].value;}
return cookies;},restoreFrom:function(source,cookies,delim,domainHashOff){var i,len,name,value,suffix,that=this;domainHashOff=(domainHashOff!==false);suffix=domainHashOff?that.config.serviceID:undefined;if(!_gsUtility.isArray(cookies)){cookies=[cookies];}
for(i=0,len=cookies.length;i<len;i++){name=that.encodeCookieName(cookies[i].name,suffix);value=_gsUtility.find(source,name+"=",delim,false);cookies[i].value=value===null?null:unescape(value);}
return cookies;},getRawCookieString:function(cookies,delim,removeEmpty,domainHashOff){var config=this.config,suffix=domainHashOff?config.serviceID:null;if(!_gsUtility.isArray(cookies)){cookies=[cookies];}
var ar=[];cookies=this.restore(cookies);for(var i=0,len=cookies.length;i<len;i++){ar.push(this.encodeCookieName(cookies[i].name,suffix)+"="+escape(cookies[i].value));}
return ar.join(delim);},toRawCookieString:function(cookies,delim,removeEmpty){if(!_gsUtility.isArray(cookies)){cookies=[cookies];}
var ar=[];for(var i=0,len=cookies.length;i<len;i++){if(removeEmpty&&!cookies[i].value){continue;}
ar.push(this.encodeCookieName(cookies[i].name)+"="+escape(cookies[i].value));}
return ar.join(delim);},setCookie:function(name,value,expires,path,domain,secure){var internalName=this.encodeCookieName(name);domain=domain||this.domain;_gsUtility.setCookie(internalName,value,expires,path,domain,secure);},getCookie:function(name,defValue){var internalName=this.encodeCookieName(name);return _gsUtility.getCookie(internalName,defValue);},delCookie:function(name){this.setCookie(name,"0",-1000);},encodeCookieName:function(name,suffix){var config=this.config,domain;if(suffix){suffix=this.getCookieSuffix(suffix);}else{suffix=this.getCookieSuffix(config.serviceID,config.domain);}
return[name,"_",suffix].join("");},getCookieSuffix:function(){var suffix=Array.prototype.join.apply(arguments,["_"]);return _gsUtility.getHashCode(suffix);}});GridsumWebDissector.DataTransmitter=function(config){this.config=config||{};};GridsumWebDissector.extend(GridsumWebDissector.DataTransmitter.prototype,{send:function(obj,shouldEncode){if(!obj){return;}
var data,that=this,config=that.config,tracker=GridsumWebDissector.getTracker(config.serviceID);shouldEncode=(shouldEncode!==false);obj.gsrd=_gsUtility.getRandomID();data=_gsUtility.serialize(obj,"=",'&',true,shouldEncode);var url=[config.serviceURL,"?",data].join("");var img=new Image(1,1);img.onerror=function(){tracker.reportError("DataSendingFailed",{url:url});setTimeout(function(){var newImg=new Image(1,1);newImg.onload=function(){tracker.reportError("ReSendingSuccessfully",{url:url});};newImg.onerror=function(){return true;};newImg.src=url;},2000);return true;};img.onload=function(){};img.src=url;that.img=img;}});GridsumWebDissector.Config=function(serviceID){var that=this;that.originalUrl=that.ignoreTrafficKeyword=that.pageVersion=that.pageName=null;that.heatmapKeyword="#gwdheatmap&";that.errorUrl="http://www.google-analytics.com/__utm.gif?utmwv=4.3&utmn=1258739316&utmhn=www.gridsum.com&utmhid=1819935857&utmr=-&gsrd={6}&utmp=/WebDissectorErrorInfo/ProfileID:{0}/ErrorCode:{1}/{2}/HostPage:{3}/Referrer:{7}/ScriptVer:{8}/UserAgent:{9}&utmac=UA-1916223-1&utmcc=__utma%3D94480714.{4}.{5}.{5}.{5}.1%3B%2B__utmz%3D94480714.{5}.1.1.utmcsr%3D(direct)%7Cutmccn%3D(direct)%7Cutmcmd%3D(none)%3B";that.serviceID=serviceID;that.version=GridsumWebDissector.version;that.protocol='http';that.serviceURL="//www.webdissector.com/recv/gs.gif";that.heatmapUrl="//www.webdissector.com/js/heatmap.js";that.campNameKey="utm_campaign";that.campMediumKey="utm_medium";that.campSourceKey="utm_source";that.campGroupKey="utm_adgroup";that.campTermKey="utm_term";that.campContentKey="utm_content";that.channelKey="utm_channel";that.allowAnchor=false;function se(name,domain,keywordKey,encodingKey,defEncoding,pageStartKey,pageNumKey,pagingType){return new GridsumWebDissector.SearchEngine(name,domain,keywordKey,encodingKey,defEncoding,pageStartKey,pageNumKey,pagingType);}
that.searchEngines=[se("google",/(\w+\.)*google\.(\w+|com\.\w+)/,"q","ie","utf-8","start","num"),se("baidu",/(\w+\.)*baidu\.(com|cn|com\.cn)/,"wd","ie","gb2312","pn","rn"),se("baidu",/(\w+\.)*baidu\.(com|cn|com\.cn)/,"word","ie","gb2312","pn","rn"),se("yahoo",/(\w+\.)*yahoo\.\w+/,"p","ei","utf-8","b"),se("live",/(\w+\.)*live\.\w+/,"q",null,"utf-8","first"),se("youdao.com",/(\w+\.)*youdao\.com/,"q","ue","utf-8","start"),se("soso",/(\w+\.)*soso\.com/,"w",null,"gb2312","pg",null,"page"),se("gougou",/(\w+\.)*gougou\.com/,"search",null,"utf-8","page",null,"page"),se("sogou",/(\w+\.)*sogou\.com/,"query",null,"gb2312","page",null,"page"),se("bing",/\bbing\.(\w+)/,"q",null,"utf-8","first"),se("118114",/\b118114\.cn/,"kw",null,"gb2312","start"),se("msn","msn","q"),se("aol","aol","query"),se("aol","aol","encquery"),se("lycos","lycos","query"),se("ask","ask","q"),se("altavista","altavista","q"),se("netscape","netscape","query"),se("cnn","cnn","query"),se("gigablast","gigablast","q"),se("aol","aol","q"),se("search","search","q"),se("pchome","pchome","q")];that.contentNetworkKey="content_";that.searchNetworkKey="search_";that.searchNetworks=[se("google",/.*/,"q","ie","utf-8","start","num"),se("baidu",/.*/,"wd","ie","gb2312","pn","rn"),se("baidu",/.*/,"word","ie","gb2312","pn","rn"),se("yahoo",/.*/,"p","ei","utf-8","b"),se("sogou",/.*/,"query",null,"gb2312","page",null,"page"),se("youdao.com",/.*/,"q","ue","utf-8","start")];that.ignoreKeywords=[];that.ignoreSearchEngines=[];that.ignoreRef=[];that.domain=location.hostname;if(that.domain.substring(0,4)=="www."){that.domain=that.domain.substring(4);}
that.cookiePath="/";that.cookieSecure=false;that.sessionTimeout=30*60;that.globalTimeout=2*365*24*3600;that.campaignTimeout=6*30*24*3600;that.isCrossDomainEnabled=false;that.samplingRate=100;that.lazyClickTrace=false;that.clickEventGathering=false;that.coordinateElement=document.body;that.mcSamplingRate=100;that.mcWhiteList=[];that.mcBlackList=["body","html"];that.documentWidth=false;that.clickZoneWidth=false;that.clickZoneHeight=false;that.iframes=[];that.snapshotVar="GridsumSnapshotID";that.ignoreParams=["gclid","bdclkid",that.campNameKey,that.campMediumKey,that.campSourceKey,that.campGroupKey,that.campTermKey,that.campContentKey,that.channelKey];};GridsumWebDissector.BehaviorAnalyzer=function(config){var that=this;that.config=config||{};if(config.lazyClickTrace){_gsUtility.observe(window,"load",function(){that.init();});}
else{that.init();}};GridsumWebDissector.extend(GridsumWebDissector.BehaviorAnalyzer.prototype,{init:function(){var i,len,that=this,config=that.config,enabled=config.clickEventGathering,snapshotVar=config.snapshotVar,tracker=GridsumWebDissector.getTracker(config.serviceID),mcSamplingRate=config.mcSamplingRate,bList=config.mcBlackList,wList=config.mcWhiteList,origin=config.coordinateElement;if(!enabled||tracker.isLocal){return;}
function isSampled(){var sampled=tracker.userTracker.isSampled();if(!sampled){return false;}
else{var visitCode=_gsUtility.getHashCode(tracker.userTracker.getUserInfo().userID);return visitCode%10000<mcSamplingRate*100;}}
if(!isSampled()){return;}
var offsetX,offsetY,hScroll,vScroll;function updateCoordinate(){offsetX=0;offsetY=0,hScroll=_gsUtility.getHScroll();vScroll=_gsUtility.getVScroll();if(config.documentWidth){var clientWidth=_gsUtility.getDocWidth();offsetX=(clientWidth-config.documentWidth)/2;}
else
if(origin){var originPos=_gsUtility.getElementPos(origin);offsetX=originPos.x;offsetY=originPos.y;}}
function getPos(targetX,targetY){updateCoordinate();return{x:targetX+hScroll-offsetX,y:targetY+vScroll-offsetY};}
function sendData(x,y){var snapshotID=Number(window[snapshotVar]||0);if(!(snapshotID>-1&&snapshotID<256)){snapshotID=0;}
var data=tracker.getCommon("mc");data.gspver=tracker.extSrc.pageVer;data.gsmcoffsetx=x;data.gsmcoffsety=y;data.gsmcurl=[tracker.urlInfo.protocol,"://",tracker.urlInfo.host,tracker.urlInfo.path].join("");data.gstl=tracker.extSrc.pageName||tracker.browserInfo.title;data.gssn=snapshotID;data.gsorurl=tracker.urlInfo.pureUrl;tracker.dataSender.send(data);}
function iframeClickHandler(iframe,e){var iframePos,targetX,targetY,target=e.target;if(!target){return true;}
iframePos=_gsUtility.getElementPos(iframe);targetX=(e.clientX||e.pageX);targetY=(e.clientY||e.pageY);updateCoordinate();targetX+=iframePos.x-offsetX;targetY+=iframePos.y-offsetY;targetX=Math.round(targetX/10)*10;targetY=Math.round(targetY/10)*10;sendData(targetX,targetY);}
_gsUtility.observe(document,"mouseup",function(e){var i,targetX,targetY,tagName,target=e.target;if(!target){return;}
tagName=target.tagName;var targetId='#'+target.id.toUpperCase();for(i=0;i<bList.length;i++){var b=bList[i].toUpperCase();if(b===targetId||b===tagName){return;}}
var sendFlag=true;if(wList.length!==0){sendFlag=false;for(i=0;i<wList.length;i++){var w=wList[i].toUpperCase();if(w===targetId||w===tagName){sendFlag=true;break;}}}
if(sendFlag){targetX=e.clientX||e.pageX;targetY=e.clientY||e.pageY;var pos=getPos(targetX,targetY);targetX=Math.round(pos.x/10)*10;targetY=Math.round(pos.y/10)*10;if(config.clickZoneWidth&&(targetX<0||targetX>config.clickZoneWidth)){return;}
if(config.clickZoneHeight&&(targetY<0||targetY>config.clickZoneHeight)){return;}
sendData(targetX,targetY);}});if(config.iframes.length===0){for(i=0,len=frames.length;i<len;i++){try{var frameEl=frames[i].frameElement||frames[i];if(frameEl.contentDocument){config.iframes.push(frameEl);}}
catch(e){}}}
for(i=0,len=config.iframes.length;i<len;i++){var frame=_gsUtility.getEl(config.iframes[i]);if(frame){try{frame=frame.frameElement||frame;var doc=frame.contentDocument;_gsUtility.observe(doc,"mouseup",(function(frame){return function(ev){iframeClickHandler(frame,ev);};})(frame));}
catch(e){}}}}});GridsumWebDissector.ECommerce=function(config){if(config){this.config=config;}
this.orders=[];};GridsumWebDissector.extend(GridsumWebDissector.ECommerce.prototype,{addOrder:function(orderID,totalPrice,userID){var recal=!_gsUtility.isNumber(totalPrice);totalPrice=recal?0:Number(totalPrice);this.orders.push({gsorderid:orderID.toString(),gstotal:totalPrice,gsquan:0,gsuserid:userID,gsproducts:[],recal:recal});},addProduct:function(orderID,productName,sku,unitPrice,quantity,category){var curOrder,recal,price,allOrders=this.orders,product={};orderID=orderID.toString();unitPrice=_gsUtility.isNumber(unitPrice)?Number(unitPrice):0;quantity=_gsUtility.isNumber(quantity)?Number(quantity):0;for(var i=0;i<allOrders.length;i++){if(allOrders[i].gsorderid===orderID){curOrder=allOrders[i];break;}}
if(!curOrder){curOrder={gsorderid:orderID,gstotal:0,gsquan:0,gsproducts:[],recal:true};this.orders.push(curOrder);}
recal=curOrder.recal;price=Number((unitPrice*quantity).toFixed(2));product={orderid:orderID,name:productName,sku:sku,quantity:quantity,unitprice:unitPrice,price:price,category:category};curOrder.gsquan+=product.quantity;curOrder.gsproducts.push(product);if(recal){curOrder.gstotal+=price;}},getOrders:function(){return this.orders;},clearOrders:function(){this.orders=[];}});