//  11.5.7   Copyright 2011 - alfalabs.net
var alfaGeo=new function(){var Me=this;Me.name="alfaGeo";this.geo={};this.geo.ip=null;this.geo.country=null;this.geo.countryName=null;this.geo.region=null;this.geo.city=null;this.geo.zipCode=null;this.geo.latitude=null;this.geo.longitude=null;this.geo.Gmtoffset=null;this.error=null;this.hit={};this.visitID=null;this.lastVisitID=null;var _debug=false,_counterUrl="http://www.alfalabs.net/hitcounter/hit.aspx",_providerTimeout=2e3,_providerResponseTime=0,_providerTry=0,_providerFailed=true,_provider={};_provider.name=null;_provider.statusCode=null;_provider.statusMessage=null;_provider.url=null;var _isInitialized=false,_fnCallback;this.set=function(){if(window.location.search.indexOf("noalfahit")>-1)return false;var args=arguments;Me.hit.siteID=args[0];Me.hit.pageID=args[1];_fnCallback=args[2]&&typeof args[2]=="function"?args[2]:null;_counterUrl=args[3]&&typeof args[3]=="string"?args[3]:_counterUrl;Me.hit.referrer=document.referrer;_isInitialized=true;if(checkSession()){afterGeoDataLoaded("fromCookie");return}_provider.name="IPinfoDB";_providerTry=1;var callbackFnName=Me.name+".fromIPinfo";_provider.url="http://api.ipinfodb.com/v3/ip-city/?format=json&key=c875fca4aa25ae4dd0081e64e7a48226695fdbf34b6fb7cb2f81a533571fbd74&callback="+callbackFnName;requestGeoData(_provider.url);setTimeout(checkProviderResponse,_providerTimeout)};this.initialize=this.set;function checkSession(){Me.visitID=getCookie("visitid");if(!Me.visitID){Me.visitID=makeVisitID();setCookie("visitid",Me.visitID)}Me.lastVisitID=getCookie("lvid");!Me.lastVisitID&&setCookie("lvid",Me.visitID,7200);var cookieStr=getCookie("geodata");if(cookieStr){Me.geo=JSON.parse(cookieStr);_providerFailed=false;return true}else return false}function requestGeoData(url){var script=document.createElement("script");if(url)script.src=url;_providerResponseTime=(new Date).getTime();document.body.appendChild(script)}this.fromIPinfo=function(geodata){_providerResponseTime=Math.ceil((new Date).getTime()-_providerResponseTime);_provider.statusCode=geodata.statusCode;if(geodata.statusCode=="OK"){_providerFailed=false;Me.geo.ip=geodata.ipAddress;Me.geo.country=geodata.countryCode;Me.geo.countryName=toNormalCase(geodata.countryName);Me.geo.region=toNormalCase(geodata.regionName);Me.geo.city=toNormalCase(geodata.cityName);Me.geo.zipCode=geodata.zipCode;Me.geo.latitude=geodata.Latitude;Me.geo.longitude=geodata.Longitude;Me.geo.Gmtoffset=geodata.timeZone;cookieStr=JSON.stringify(Me.geo);setCookie("geodata",cookieStr);if(Me.error)Me.error+="1t";afterGeoDataLoaded("fromProvider")}else{_provider.statusMessage=geodata.statusMessage;_providerFailed=true;Me.error="1a";afterGeoDataLoadfailed()}};function afterGeoDataLoaded(){postHit();_fnCallback&&_fnCallback(Me.geo,_provider);_debug&&Me.showProperties("spOutput")}function afterGeoDataLoadfailed(){if(_providerTry>1){postHit();_fnCallback&&_fnCallback(null,_provider)}else secondProvider()}function secondProvider(){_providerTry=2;_provider={};_provider.name="secondProvider";_providerFailed=true;Me.error+="2c";afterGeoDataLoadfailed();return false}function checkProviderResponse(){if(_providerFailed){Me.error=Me.error==null?_providerTry.toString()+"b":Me.error+_providerTry.toString()+"b";afterGeoDataLoadfailed()}_debug&&Me.checkProvider()}this.checkProvider=function(){!_isInitialized&&alert("checkProviderResponse( )\n\n"+Me.name+" is not initialized.\ncall "+Me.name+".set( )");var txt="checkProviderResponse\n\nProvider: "+_provider.name+"\nStatusCode: "+_provider.statusCode+"\nProviderStatusMessage: "+_provider.statusMessage+"\nProviderTry: "+_providerTry+"\nProviderTimeout: "+_providerTimeout+"\n\nProviderFailed: "+_providerFailed+"\n\nerror: "+Me.error;if(_debug)txt+="\n_debug: "+_debug;alert(txt)};this.showProperties=function(){alert("showProperties( )\n\nThis function is available for debugging.\nUncomment it for use.")};function toNormalCase(str){return str&&str.length>1?str.substr(0,1)+str.substring(1).toLowerCase():str}function makeVisitID(){for(var charset="ABCDEFGHIJKLMNOPQRSTUVWXTZ",string_length=6,randomstring="",i=0;i<string_length;i++){var rnum=Math.floor(Math.random()*charset.length);randomstring+=charset.substring(rnum,rnum+1)}return String((new Date).getTime()).replace(/\D/gi,"")+randomstring}function setCookie(c_name,value,expInDays){var exdate=new Date;exdate.setDate(exdate.getDate()+expInDays);document.cookie=c_name+"="+escape(value)+(expInDays==null?"":";expires="+exdate.toGMTString())}function getCookie(c_name){if(document.cookie.length>0){c_start=document.cookie.indexOf(c_name+"=");if(c_start!=-1){c_start=c_start+c_name.length+1;c_end=document.cookie.indexOf(";",c_start);if(c_end==-1)c_end=document.cookie.length;return unescape(document.cookie.substring(c_start,c_end))}}return""}function postHit(){var siteID,pageID;if(Me.hit&&Me.hit.siteID)siteID=Me.hit.siteID;else{Me.hit.errorMsg="missing siteID";Me.error=Me.error==null?"9s":Me.error+"9s";return false}if(Me.hit&&Me.hit.pageID)pageID=Me.hit.pageID;else{Me.hit.errorMsg="missing pageID";Me.error=Me.error==null?"9p":Me.error+"9p";return false}checkLastHit(siteID,pageID,Me.visitID);Me.hit.lastHit=JSON.stringify({siteID:siteID,pageID:pageID,visitID:Me.visitID,providerFailed:_providerFailed});Me.hit.type=false;Me.postHitI(siteID,pageID)}function checkLastHit(siteID,pageID,visitID){if(Me.hit.lastHit){var lh=JSON.parse(Me.hit.lastHit);if(siteID==lh.siteID&&pageID==lh.pageID&&lh.visitID==visitID&&lh.providerFailed==true)Me.error=Me.error==null?"9x":Me.error+"9x"}}this.postHitA=function(siteID,pageID){if(!_isInitialized){alert("initialise "+Me.name+" before calling postHitA( )");return}if(typeof $=="undefined"){alert("postHitA( )\nJQuery not installed");return}$.ajax({type:"POST",url:getUrlArgs(siteID,pageID),error:function(XMLHttpRequest,textStatus,errorThrown){Me.postHitI(siteID,pageID);_debug&&alert("postHitA("+this.url+")\n"+textStatus+"\n"+errorThrown)}});Me.hit.type="ajax";Me.hit.siteID=siteID;Me.hit.pageID=pageID};this.postHitI=function(siteID,pageID){if(!_isInitialized){alert("initialise "+Me.name+"  before calling postHitI( )");return}var img=document.createElement("img");img.src=getUrlArgs(siteID,pageID);img.width=0;img.height=0;img.style.border="none";document.body.appendChild(img);Me.hit.type="img";Me.hit.siteID=siteID;Me.hit.pageID=pageID};function getUrlArgs(siteID,pageID){var url=_counterUrl;url+=siteID?"?sid="+siteID:"?sid=";url+=pageID?"&pid="+pageID:"&pid=";url+=Me.error?"&err="+Me.error:"";url+=Me.visitID?"&vid="+Me.visitID:"";url+=Me.lastVisitID?"&lvid="+Me.lastVisitID:"";url+=Me.hit.referrer?"&ref="+escape(Me.hit.referrer):"";url+=_providerResponseTime<3.6e6?"&prt="+_providerResponseTime:"";if(!_providerFailed)url+="&co="+Me.geo.country+"&ci="+escape(Me.geo.city);return url}};
