// JavaScript Document
var application = function(conf){
	var debug = 0;
	var ajax = function(conf){
		var request;
		var resultFunction;
		var state = 0;
		var self;
		var timeout = 5000;
		this.checkState = function(){
			if(state != 2){
				//alert('Timed out');
			}
		}
		this.get = function(url,callBack){
			var xmlHttp;
			try{// Firefox, Opera 8.0+, Safari
				 xmlHttp=new XMLHttpRequest();
			}
			catch (e){// Internet Explorer
				try{
					xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch (e){
					try{
						xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
					}
					catch (e){
						alert("Your browser does not support AJAX!");
						return false;
					}
				}
			}
			xmlHttp.onreadystatechange=function(){
				if(xmlHttp.readyState==4){
					callBack(xmlHttp.responseText);
					state = 2;
				}
			}
			xmlHttp.open("GET",url,true);
			xmlHttp.send(null);
			
			request = url;
			resultFunction = callBack;
			state = 1;
			//var timer = setTimeout(function(){self.checkState()},timeout);
		}
		this.post = function(url,params,callBack){
			var xmlHttp;
			try{// Firefox, Opera 8.0+, Safari
				 xmlHttp=new XMLHttpRequest();
			}
			catch (e){// Internet Explorer
				try{
					xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch (e){
					try{
						xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
					}
					catch (e){
						alert("Your browser does not support AJAX!");
						return false;
					}
				}
			}
			xmlHttp.onreadystatechange=function(){
				if(xmlHttp.readyState==4){
					callBack(xmlHttp.responseText);
					state = 2;
				}
			}
			xmlHttp.open("POST",url,true);
			//Send the proper header information along with the request
			xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			xmlHttp.setRequestHeader("Content-length", params.length);
			xmlHttp.setRequestHeader("Connection", "close");
			xmlHttp.send(params);
			
			request = url;
			resultFunction = callBack;
			state = 1;
			//var timer = setTimeout(function(){self.checkState()},timeout);
		}
		self = this;
		if(conf && conf.timout){
			timeout = conf.timout
		}
	}
	this.raiseError = function(source,err){
		if(debug == 1){/*alert(err+" in '"+source+"'")*/}
	}
	this.ajaxGet = function(url,callBack){
		var ajx = new ajax();
		ajx.get(url,callBack);
	}
	this.ajaxPost = function(url,params,callBack){
		var ajx = new ajax();
		ajx.post(url,params,callBack);
	}
	this.msg = function(msg){
		alert(msg);
	}
	this.readCookie = function(cookieName){
		var theCookie=""+document.cookie;
		var ind=theCookie.indexOf(cookieName);
		if (ind==-1 || cookieName=="") return ""; 
		var ind1=theCookie.indexOf(';',ind);
		if (ind1==-1) ind1=theCookie.length; 
		return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
	}
	if(conf && conf.debug){
		debug = conf.debug;
	}
}

var app = new application({debug:1});

var readCookie = function(cookieName)
{
	var theCookie=""+document.cookie;
	var ind=theCookie.indexOf(cookieName);
	if (ind==-1 || cookieName=="") return ""; 
	var ind1=theCookie.indexOf(';',ind);
	if (ind1==-1) ind1=theCookie.length; 
	return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}

var CheckSession = function(data){
	var val = readCookie('EVENT');
	if(val == 'eval'){
		try{
			eval(data);
			return false;
		}catch(err) {app.raiseError('CheckSession',err); }
		return true;
	}	
}
var key = "";
var Timer = 0;

prevOnload = window.onload;

var addScript = function(script, callBack) 
{
	try {
		var ga = document.createElement('script'); 
		ga.type = 'text/javascript'; ga.async = true;
		ga.src = "../../script/"+script;	
		if(callBack) {
			ga.onreadystatechange = function(){if(this.readyState == 'loaded' || this.readyState == 'complete'){callBack();}};  //For IE		
			ga.onload = callBack;   //For Other Browsers		
		}
		
		if(document.getElementsByTagName('script')[0]) {
			var s = document.getElementsByTagName('script')[0];
			s.parentNode.insertBefore(ga, s);	
		}
		else {
			var s = document.getElementsByTagName('head')[0];
			s.appendChild(ga);
		}	
	}catch(err){app.raiseError('addScript',err);}
}

var hintOnLoad = function(){
	try {
		$('.hint').hint();
	}catch(err){app.raiseError('hintOnLoad',err);};
}

var feedOnLoad = function(){
	try {
		if(typeof fb == "undefined"){fb = new Feedback({});}
	}catch(err){app.raiseError('feedOnLoad',err);};
}

var BrowserDetect = {
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]
};


window.onload = function(){
	try {
		var delay = 100;
		/*
		var mdOnLoad = function(){
			var result=function(response) 
			{                     
				try {
					//alert(response);
				}
				catch(err) {app.raiseError('mdOnLoad',err); }
			}
			try {	
				var sid = readCookie('PROHIVETOKEN');
				var now = new Date();
				keyValue = sid+now;
				key =  hexMD5(keyValue);
				
				var scrWid = screen.height;
				var scrHei = screen.width;
				var Wnd = getWindowSize();				
				widWid = Wnd.width;
				widHei = Wnd.height;
				OS = BrowserDetect.searchString(BrowserDetect.dataOS) || "an unknown OS";
				var request = "/a/visitsLog";
				var params = "option=in&key="+key+"&winWidth="+widWid+"&winHeight="+widHei+"&scrWidth="+scrWid+"&scrHeight="+scrHei+"&os="+OS;
				app.ajaxPost(request,params,result);
			}catch(err) { app.raiseError('mdOnLoad',err); }	
		}*/
		
		addScript('jquery.hint.js', hintOnLoad);
		//addScript('md5.js', mdOnLoad);
		addScript('general.js');
		var domain = document.domain;	
		var re = new RegExp("^www\.prohive\.com");
		if (domain.match(re)) {
			addScript('feedback.js', feedOnLoad);				
		} 	
		
		/*
		var onUnload = function()
		{
			var result=function(response) 
			{                     
				try {
					//alert("response :"+response);
				}catch(err) { app.raiseError('onunload',err); }
			}
			try {		
				var request = "/a/visitsLog";
				var params = "option=out&key="+key;
				app.ajaxPost(request,params,result);
				Timer = window.setTimeout(function(){onUnload();},delay);
			}catch(err) { app.raiseError('onbeforeunload',err); }	
		}
		
		history.navigationMode=3;
		browser = BrowserDetect.searchString(BrowserDetect.dataBrowser) || "An unknown browser";
		if(browser == "Microsoft Internet Explorer" || browser == "Firefox" || browser == "Chrome") {
			window.onunload=onUnload;
			window.onbeforeunload=onUnload;
		}
		else {
			Timer = window.setTimeout(function(){onUnload();},delay);	
		}	*/	
	}catch(err) { app.raiseError('onload',err); }
}

var getWindowSize = function() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
	//Non-IE
	myWidth = window.innerWidth;
	myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
	//IE 6+ in 'standards compliant mode'
	myWidth = document.documentElement.clientWidth;
	myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
	//IE 4 compatible
	myWidth = document.body.clientWidth;
	myHeight = document.body.clientHeight;
  }
  return {width:myWidth,height:myHeight};
}

/*
$(document).ready(function() {    
     $(':input',document.myForm).bind("change", function() { setConfirmUnload(true); }); // Prevent accidental navigation away
});*/
