
var reflst = new Array();  //referrer list
var reflog;                //Whole Cookie
var ppclog;                //Whole Cookie


  var keyStr = "ABCDEFGHIJKLMNOP" + 
               "QRSTUVWXYZabcdef" + 
               "ghijklmnopqrstuv" + 
               "wxyz0123456789-/" + 
               "_"; 


  function decode64(input) { 
     var output = ""; 
     var chr1, chr2, chr3 = ""; 
     var enc1, enc2, enc3, enc4 = ""; 
     var i = 0; 
  
     // remove all characters that are not A-Z, a-z, 0-9, +, /, or _ 
     var base64test = /[^A-Za-z0-9\-\/\_]/g; 
     if (base64test.exec(input)) { 
        alert("There were invalid base64 characters in the input text.\n" + 
              "Valid base64 characters are A-Z, a-z, 0-9, '-', '/',and '_'\n" + 
              "Expect errors in decoding."); 
     } 
     input = input.replace(/[^A-Za-z0-9\-\/\_]/g, ""); 
  
     do { 
        enc1 = keyStr.indexOf(input.charAt(i++)); 
        enc2 = keyStr.indexOf(input.charAt(i++)); 
        enc3 = keyStr.indexOf(input.charAt(i++)); 
        enc4 = keyStr.indexOf(input.charAt(i++)); 
  
        chr1 = (enc1 << 2) | (enc2 >> 4); 
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 
        chr3 = ((enc3 & 3) << 6) | enc4; 
  
        output = output + String.fromCharCode(chr1); 
  
        if (enc3 != 64) { 
           output = output + String.fromCharCode(chr2); 
        } 
        if (enc4 != 64) { 
           output = output + String.fromCharCode(chr3); 
        } 
  
        chr1 = chr2 = chr3 = ""; 
        enc1 = enc2 = enc3 = enc4 = ""; 
  
     } while (i < input.length); 
  
     return Base64_utf8_decode(output); 
  } 

  function Base64_utf8_decode(utftext) { 
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }

  function encode64(input) { 
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
 
		//input = Base64._utf8_encode(input);
		input = Base64_utf8_encode(input);
 
		while (i < input.length) {
 
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
 
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
 
			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}
 
			output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
 
		}

		return output;
  }

  function Base64_utf8_encode(string) { 
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	}


function decryptXOR(CodeKey, DataIn)
{
	var strDataOut = "";
	var codechar = "";
	for(ii=0;ii<DataIn.length;ii++)
	{
		//codechar = CodeKey.charCodeAt((ii%CodeKey.length));
		codechar = CodeKey.charCodeAt(((ii+1)%CodeKey.length));
		strDataOut+=String.fromCharCode(codechar^DataIn.charCodeAt(ii));
	}
        return strDataOut;
}


function html_entity_decode(str)
{
    //jd-tech.net
    var  tarea=document.createElement('textarea');
    tarea.innerHTML = str; return tarea.value;
    tarea.parentNode.removeChild(tarea);
}

////////////////////////////////////////////////////////////////////////

//var d = new Date();
//print(ISODateString(d));

function ISODateString(d) {
    function pad(n){
        return n<10 ? '0'+n : n
    }
    return d.getUTCFullYear()+'-'
    + pad(d.getUTCMonth()+1)+'-'
    + pad(d.getUTCDate())+' '
    + pad(d.getUTCHours())+':'
    + pad(d.getUTCMinutes())+':'
    + pad(d.getUTCSeconds())+''
}



////////////////////////////////////////////////////////////////////////

function htmlentities (hestr, quote_style) {
    // Convert all applicable characters to HTML entities
    tmp_str = "";

    for (var hei=0;hei<hestr.length;hei++)
    {
	hech = hestr.substr(hei, 1);
        //hecv = hestr.charCodeAt(hei);
        hecv = hech.charCodeAt(0);
	if (  (hecv < 48) || ((hecv > 57) && (hecv < 65)) || (hecv > 122)  )
	{
		tmp_str = tmp_str + '&#' + hecv.toString(10) + ';';
	}else{
		tmp_str = tmp_str + hech;
	}
    }
    //alert(tmp_str + ' == ' + tmp_str.length );
    return tmp_str;
}

////////////////////////////////////////////////////////////////////////
//borrowed from http://isohunt.com/js/functions.js
////////////////////////////////////////////////////////////////////////
var smooth_timer;

function getBrowser(){
var BrowserDetect = {
  init: function () {
    this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
    this.version = this.searchVersion(navigator.userAgent)
            || this.searchVersion(navigator.appVersion)
            || "an unknown version";
    this.OS = this.searchString(this.dataOS) || "an unknown OS";
  },
  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;
    }
  },
  searchVersion: function (dataString) {
    var index = dataString.indexOf(this.versionSearchString);
    if (index == -1) return;
    return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
  },
  dataBrowser: [
          {       string: navigator.userAgent,
                  subString: "OmniWeb",
                  versionSearch: "OmniWeb/",
                  identity: "OmniWeb"
          },
          {
                  string: navigator.vendor,
                  subString: "Apple",
                  identity: "Safari"
          },
          {
                  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.platform,
                  subString: "Linux",
                  identity: "Linux"
          }
  ]
};
  BrowserDetect.init();
  //return BrowserDetect.browser;
  return BrowserDetect;
}






////////////////////////////////////////////////////////////////////////
//	http://isohunt.com/js/functions.js
function servOC(spid, href, nColor, triangleI) {

  var trObj = (document.getElementById) ? document.getElementById('ihtr_' + spid) : eval("document.all['ihtr_" + spid + "']");
  var nameObj = (document.getElementById) ? document.getElementById('name_' + spid) : eval("document.all['name_" + spid + "']");
  //--var ifObj = (document.getElementById) ? document.getElementById('ihif_' + spid) : eval("document.all['ihif_" + spid + "']");

  var browserobj = getBrowser(); 
  var browser = browserobj.browser; 
 
 if (browser == "Firefox" || browser == "Mozilla" || browser == "Netscape" || browser == "Gecko" || browser == "Seamonkey"){
    //ageID.addEventListener("click", stopEvent, false);
    trObj.addEventListener("click", stopEvent, false);
    nameObj.addEventListener("click", stopEvent, false);
    nameObj.addEventListener("click", stopEvent, false);
  }
  else {
    window.event.cancelBubble = true;
  }; 

  //alert(trObj.id + nameObj.id + ifObj.id);
 
 if (trObj != null) {
    if (trObj.style.display=="none") {
      //--ifObj.style.height = "0px";
      trObj.style.display="";

      //nameObj.style.background="#ECECD9";
      nameObj.style.background="#000099";

      if (browser == "Safari" || browser == "Konquerors")
      {
         setTimeout("toggleDownUp('triangle_"+spid+"','down');",1);
      }   else {
        toggleDownUp('triangle_'+spid,'down');
      }
      //--if (!ifObj.src) {
	//--if (href.length > 1)
	//--{ ifObj.src = href; }
      //--}
      //--smoothHeight('ihif_' + spid, 0, 240, 60, 'o');
      smoothHeight('ihtr_' + spid, 0, 240, 60, 'o');

    }
    else {     
      nameObj.style.background=nColor;
      //--smoothHeight('ihif_' + spid, 240, 0, 60, 'ihtr_' + spid);
      smoothHeight('ihtr_' + spid, 240, 0, 60, 'ihtr_' + spid);
      if (browser == "Safari" || browser == "Konquerors")
      {
	setTimeout("toggleDownUp('triangle_"+spid+"','up');",1);
      } else {
        toggleDownUp('triangle_'+spid,'up');
      }
     /* triangleID.setAttribute('src', '/img/serp-toggle-up.gif');*/
    }
  }
}


function toggleDownUp(ele,pos)
{
	var ele = document.getElementById(ele);
	if (ele)
	{
		ele.setAttribute('src', '/grafx/serp-toggle-'+pos+'.gif');
	}
}


function smoothHeight(id, curH, targetH, stepH, mode)
{
  diff = targetH - curH;
  if (diff != 0)
  {
    newH = (diff > 0) ? curH + stepH : curH - stepH;
    ((document.getElementById) ? document.getElementById(id) : eval("document.all['" + id + "']")).style.height = newH + "px";
    if (smooth_timer) window.clearTimeout(smooth_timer);
    smooth_timer = window.setTimeout( "smoothHeight('" + id + "'," + newH + "," + targetH + "," + stepH + ",'" + mode + "')", 16 );
  }
  else if (mode != "o") ((document.getElementById) ? document.getElementById(mode) : eval("document.all['" + mode + "']")).style.display="none";
}


function stopEvent(ev) {
  // this ought to keep t-daddy from getting the click.
  ev.stopPropagation();
//return false;
// alert("event propagation halted.");
//  ev.cancelBubble = true;
}


//------------------------------------Not Used------------------------------
function servOCorig(i, href, nColor, triangleID) {
  var trObj = (document.getElementById) ? document.getElementById('ihtr' + i) : eval("document.all['ihtr" + i + "']");
  var nameObj = (document.getElementById) ? document.getElementById('name' + i) : eval("document.all['name" + i + "']");
  var ifObj = (document.getElementById) ? document.getElementById('ihif' + i) : eval("document.all['ihif" + i + "']");

  var ageID = document.getElementById('row_6_' + i);
  var browserobj = getBrowser(); 
  var browser = browserobj.browser; 

  if (browser == "Firefox" || browser == "Mozilla" || browser == "Netscape" || browser == "Gecko" || browser == "Seamonkey"){
    ageID.addEventListener("click", stopEvent, false);
    trObj.addEventListener("click", stopEvent, false);
    nameObj.addEventListener("click", stopEvent, false);
    nameObj.addEventListener("click", stopEvent, false);
  }
  else {
    window.event.cancelBubble = true;
  }; 
 if (trObj != null) {
    if (trObj.style.display=="none") {
      ifObj.style.height = "0px";
      trObj.style.display="";
      nameObj.style.background="#ECECD9";
      if (browser == "Safari" || browser == "Konquerors"){
         setTimeout("toggleDownUp('triangle_"+i+"','down');",1);
      }   else {
        toggleDownUp('triangle_'+i,'down');
      }
      if (!ifObj.src) ifObj.src = href;
      smoothHeight('ihif' + i, 0, 210, 42, 'o');

    }
    else {     
      nameObj.style.background=nColor;
      smoothHeight('ihif' + i, 210, 0, 42, 'ihtr' + i);
      if (browser == "Safari" || browser == "Konquerors"){
      setTimeout("toggleDownUp('triangle_"+i+"','up');",1);
      } else {
        toggleDownUp('triangle_'+i,'up');
      }
     /* triangleID.setAttribute('src', '/img/serp-toggle-up.gif');*/
    }
  }
}



////////////////////// C is 4 cookie /////////////////
function createCookie(name,value,days) {
	try
	{

		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	}
	catch (e)
	{
		idontcare = true;
	}
}

function readCookie(name) {
	try
	{
		var nameEQ = name + "=";
		//alert(document.cookie);
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}
	catch (e)
	{
		idontcare = true;
		return null;
	}
}

function eraseCookie(name) {
	createCookie(name,"",-1);

}

function cookNav(cnlevel, cnlink, cntext, cncode) {

	var maxlev = 6;
	var myLevels=new Array();
	var cntarget = "navspace";
	var cnoutput = "";

	if (document.domain.indexOf("store.") >= 1) return;
	if (document.domain.indexOf("secure.") >= 1) return;


	if ( cncode === undefined ) {
		cncode = 'XXXX';
	}


	//make Home Page level 0...
	if (cnlink == "/")
	{
		cnlevel = 0;
	}

	//Erase cookies below
	for(var i=cnlevel;i <= maxlev;i++)
	{
		cntmp = "level" + i;
		eraseCookie(cntmp);
		myLevels[i] = "";
	}
	//Read cookies above
	for(var i=cnlevel;i >= 0;i--)
	{
		cntmp = "level" + i;
		myLevels[i] = readCookie(cntmp);
	}

	//Set Current
	cnlevel += "";		//Explicit conversion to string.
	cntmp = "level" + cnlevel;
	cnlevel =  parseInt(cnlevel);		//Explicit conversion to numeric.
	//myLevels[cnlevel] = cntext + "||" + cnlink;
	myLevels[cnlevel] = "b64x" + encode64(cntext + "||" + cnlink + "||" + cncode);
	createCookie(cntmp, myLevels[cnlevel],2);


	//Draw nav HTML
	if (cnlevel >= 0)
	{
		navcnt = 0;
		for(var i=0;i <= maxlev;i++)
		{

			if (  (myLevels[i]) && (myLevels[i].length > 2) )
			{
				if (cnoutput.length > 1)
				{ 
					cnoutput += " &raquo; ";
				}
				cntemp = myLevels[i];
				if ((cntemp.length > 4) && (cntemp.substring(0,4) == "b64x"))
				{
					cntemp = decode64( cntemp.substring(4) );
				}
				cnparts = cntemp.split("||"); 


				cnoutput += " <a href='" + cnparts[1] + "'>" + cnparts[0] + "</a> ";
				navcnt++;
			}
		}
		if (navcnt > 1)
		{
			var ele = document.getElementById(cntarget);
			if (ele)
			{
				ele.innerHTML = cnoutput;
			}else{
				//alert(" ?!@#*! ");
			}
		}
	}

	//return true;
}

function cookRef() {
         //var reflst = new Array();
         var d = new Date();
         //var reflog = readCookie("reflog");
         reflog = readCookie("reflog");
         ppclog = readCookie("ppclog");

         var reflin = '';
         var refurl = '';
         var thsurl = '';
	 var seplst = '___';
	 var sepitm = '@@@';



         if (document.referrer) refurl = escape(document.referrer);

	 if ( (reflog) && (reflog.length) && (reflog.length >= 10) )
         {
              reflst = reflog.split(seplst, 15);
         }


         //print();
         if ( (refurl) && (refurl.length) && (refurl.length >= 10) && (document.domain) && (refurl.substr(0,55).indexOf(document.domain) <= 1) )
         {
		if (window.location.href) thsurl = escape(window.location.href); 

		reflin = ISODateString(d) + sepitm + refurl + sepitm + thsurl ;
		reflog = reflin;


                var ppc_param = gup('ppc');
         	if (ppc_param.length <= 1) ppc_param = gup('gclid');	//google does this automatically

         	if (ppc_param.length >= 1)
	 	{
			
			if ( (ppclog) && (ppclog.length) && (ppclog.length >= 10) )
			{
				ppclog = seplst + ppclog;
			}else{
				ppclog = "";
			}

			//Create separate PPC cookie
			ppclog = reflin + ppclog ;
			createCookie("ppclog", ppclog, 420);
	 	}



		for (cri=0;cri<reflst.length;cri++)
		{
			//2011-12-14
			if (cri >= 3) break; 
			if ((reflog) && (reflog.length > 720)) break;  

			if ( (reflst[cri]) && (reflst[cri].length > 1) )
			{
				reflin = reflst[cri];
				reflog = reflog + seplst + reflin;
			}
		}

	 	createCookie("reflog", reflog, 190);

        	//recalc reflst for access by rest of page.
		if ( (reflog) && (reflog.length) && (reflog.length >= 10) )
         	{
             	 reflst = reflog.split(seplst, 15);
         	}
	 }




}


function gup( name )
{
  //parse URL paramters
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}



//////////////////////////////////////////////////////


