var WebthitethJs = function() {};;
;
;
WebthitethJs.__uniqueCounter__ = 0;;
WebthitethJs.makeTmpId = function () {
 return ("WEBTHITETHJSID" || "")  + ("" + WebthitethJs.__uniqueCounter__++ || "") ;
};
;
;
WebthitethJs.$ = function (id) {
 return function() {
var retn = document.getElementById (id);
 return function() {if ((retn === WebthitethJs.getNull ()) !== false) {
 return false;;
}  else if (true !== false) {
 return retn;;
}  else { return false; }}();}();
};
;
WebthitethJs.buildNode = function (n) {
 return function() {if (WebthitethJs.definedP (n.childNodes) !== false) {
 return n;;
}  else if (true !== false) {
 return document.createTextNode (n);;
}  else { return false; }}();
};
;
WebthitethJs.handleStyleIntValue = function (val) {
 return function() {if ((val && typeof(val) == "number") !== false) {
 return val  + "px" ;;
}  else if (true !== false) {
 return val;;
}  else { return false; }}();
};
;
WebthitethJs.clearChildren = function (elem) {
 return function(){ while (true) {
if (((elem.childNodes || []).length === 0) !== false) {
return;;
}
elem.removeChild (function(lst){return lst && lst.length > 0 && lst[0];}(elem.childNodes));
}}()
;
};
;
WebthitethJs.replaceChildren = function (elem,newChildren) {
WebthitethJs.clearChildren (elem);

 return WebthitethJs.appendChild (elem,newChildren);
};
;
WebthitethJs.buildStackTrace = function() { 
var callstack = [];
   var isCallstackPopulated = false;
   try {
     i.dont.exist+=0; //doesn't exist- that's the point
   } catch(e) {
     if (e.stack) { //Firefox
       return e.stack;
       var lines = e.stack.split('n');
       for (var i=0, len=lines.length; i < len; i++) {
         if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
           callstack.push(lines[i]);
         }
       }
       //Remove call to printStackTrace()
       callstack.shift();
       isCallstackPopulated = true;
     }
   }
   return callstack;}
;
WebthitethJs.appendChild = function (e,child) {
if ((! (WebthitethJs.definedP (e.appendChild) !== false)) !== false) {
WebthitethLoggingJs.logError (("Element does not have append-child: " || "")  + (e || "") );
;
} ;

 return function() {if ((! (WebthitethJs.definedP (child) !== false)) !== false) {
 return function() {
 return WebthitethLoggingJs.logError (("Child was undefined when adding to " || "")  + (e || "") );}();;
}  else if (true !== false) {
 return function() {if ((child !== false && WebthitethJs.definedP (child) !== false) !== false) {
 return function() {if (function(lst){ return lst && (typeof(lst) == 'object') && lst.constructor !== undefined && lst.constructor.toString().match(/ Array *()/) !== null}(child) !== false) {
 return function() {var __WEBTHITETH_SAFE__G15519 = new Array();
var __WEBTHITETH_SAFE__G15518 = function (it) {
 return WebthitethJs.appendChild (e,it);
};
var __WEBTHITETH_SAFE__G15520 = child;
for (var __WEBTHITETH_SAFE__G15521 = 0 ; __WEBTHITETH_SAFE__G15521 < __WEBTHITETH_SAFE__G15520.length  ; __WEBTHITETH_SAFE__G15521++ ) {
 __WEBTHITETH_SAFE__G15519[__WEBTHITETH_SAFE__G15521] = __WEBTHITETH_SAFE__G15518(__WEBTHITETH_SAFE__G15520[__WEBTHITETH_SAFE__G15521]);
}
return __WEBTHITETH_SAFE__G15519;}();;
}  else if (true !== false) {
 return e.appendChild (WebthitethJs.buildNode (child));;
}  else { return false; }}();;
}  else { return false; }}();;
}  else { return false; }}();
};
;
WebthitethJs.removeFromParent = function (e) {
 return e.parentNode.removeChild (e);
};
;
WebthitethJs.regexMatch = function (str,regex) {
 return (! ((WebthitethJs.getNull () === str.match (regex)) !== false));
};
;
WebthitethJs.getNull = function() { 
return null;}
;
WebthitethJs.getDocument = function() { 
return document;}
;
WebthitethJs.getWindow = function() { 
return window;}
;
WebthitethJs.definedP = function() {var x = arguments[0];;
 
return (x !== undefined);}
;
;
WebthitethJs.__document__ = WebthitethJs.getDocument ();;
WebthitethJs.__window__ = WebthitethJs.getWindow ();;
WebthitethJs.handleKeyPress = function (func) {
 return function (e) {
 return function() {if (WebthitethJs.definedP (window.event) !== false) {
 return func (e.keyCode);;
}  else if (true !== false) {
 return func (e.which);;
}  else { return false; }}();
};
};
;
WebthitethJs.addEvent = function (elem,type,func) {
 return function() {if (WebthitethJs.definedP (elem.addEventListener) !== false) {
 return elem.addEventListener (type,func,false);;
}  else if (WebthitethJs.definedP (elem.attachEvent) !== false) {
 return elem.attachEvent ("on"  + type ,func);;
}  else if (true !== false) {
 return window.alert ("Error, You'll be seeing a lot of these.  Generally means I don't support your browsers");;
}  else { return false; }}();
};
;
WebthitethJs.stopProp = function () {
var e = arguments[0];
var preventDefault = false;
if (arguments[1] !== undefined)
{preventDefault = arguments[1];
} else {
preventDefault = true;
}

if (WebthitethJs.definedP (e.stopPropagation) !== false) {
e.stopPropagation ();
if (preventDefault !== false) {
e.preventDefault ();
;
} ;
;
} ;

 return function() {if ((WebthitethJs.definedP (window.event) !== false && WebthitethJs.definedP (window.event.cancelBubble) !== false) !== false) {
 return window.event.cancelBubble = true;;
}  else { return false; }}();
};
;
WebthitethJs.removeEvent = function (elem,type,func) {
 return function() {if ((WebthitethJs.definedP (func) !== false && func !== false) !== false) {
 return function() {if (WebthitethJs.definedP (elem.removeEventListener) !== false) {
 return elem.removeEventListener (type,func,false);;
}  else if (WebthitethJs.definedP (elem.detachEvent) !== false) {
 return elem.detachEvent ("on"  + type ,func);;
}  else if (true !== false) {
 return window.alert ("Error, You'll be seeing a lot of these.  Generally means I don't support your browsers");;
}  else { return false; }}();;
}  else { return false; }}();
};
;
WebthitethJs.convertToPx = function (px) {
 return function() {if ((px === 0) !== false) {
 return "0px";;
}  else if (true !== false) {
 return (px || "")  + ("px" || "") ;;
}  else { return false; }}();
};
;
WebthitethJs.show = function (e) {
 return e.style.display = "";
};
;
WebthitethJs.hide = function (e) {
 return e.style.display = "none";
};
;
WebthitethJs.getWindowWidth = function () {
 return function() {if ((! ((WebthitethJs.undefined === WebthitethJs.getWindow ().innerWidth) !== false)) !== false) {
 return WebthitethJs.getWindow ().innerWidth;;
}  else if ((WebthitethJs.__document__.documentElement !== false && WebthitethJs.__document__.documentElement.clientWidth !== false) !== false) {
 return WebthitethJs.__document__.documentElement.clientWidth;;
}  else if (true !== false) {
 return window.alert ("Your browser is not supported :(");;
}  else { return false; }}();
};
;
WebthitethJs.getWindowHeight = function () {
 return function() {if ((! ((WebthitethJs.undefined === WebthitethJs.getWindow ().innerHeight) !== false)) !== false) {
 return WebthitethJs.getWindow ().innerHeight;;
}  else if ((WebthitethJs.__document__.documentElement !== false && WebthitethJs.__document__.documentElement.clientHeight !== false) !== false) {
 return WebthitethJs.__document__.documentElement.clientHeight;;
}  else if (true !== false) {
 return window.alert ("Your browser is not supported :(");;
}  else { return false; }}();
};
;
WebthitethJs.currentlySelectedOption = function (select) {
 return function(lst, n){return lst && lst.length > n && lst[n];}(select.options, select.selectedIndex);
};
;
WebthitethJs.__rootDir__ = false;;
;
WebthitethJs.handleString = function() {var str = arguments[0];;
 
str = str.replace(/%/g, '%25');
   str = str.replace(/\$/g, '%24');
   str = str.replace(/&/g, '%26');
   str = str.replace(/\+/g, '%2B');
   str = str.replace(/,/g, '%2C');
   str = str.replace(/:/g, '%3A');
   str = str.replace(/;/g, '%3B');
   str = str.replace(/\?/g, '%3F');
   str = str.replace(/@/g, '%40');
   str = str.replace(/=/g, '%3D');
  return str;}
;
WebthitethJs.breakListDown = function() {var lst = arguments[0];;
 
var accum = "";
   for (var i = 0 ; i < lst.length ; i++) {
     accum = accum + WebthitethJs.handleString(WebthitethJs.handleArg(lst[i]));
     if(i != lst.length - 1) {
       accum = accum + ",";
     }
   }
   return accum;}
;
WebthitethJs.handleArg = function() {var arg = arguments[0];;
 
if (arg === true) {
     return "t";
   } else if (arg === false) {
     return "NIL";
   } else if (typeof(arg) == "string") {
     return WebthitethJs.handleString(arg);
   } else if (typeof(arg) == "object" && arg.length) {
     return WebthitethJs.breakListDown (arg);
   } else {
     return "" + arg;
   }}
;
;
WebthitethJs.makeStreamingServerCallInner = function() {var func = arguments[0];;
var callback = arguments[1];;
var key = arguments[2];;
 

   var xmlHttp;
   try { xmlHttp=new XMLHttpRequest(); } catch (e) {
     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;
       }
     }
   }
   var lastMsgTime = new Date();
   var connectionError = false;
   xmlHttp.multipart = true;
   xmlHttp.onreadystatechange = function() {
     if(xmlHttp.readyState == 4 && callback) {
       if(xmlHttp.status != 200) {
         WebthitethLoggingJs.logError("This call failed " + xmlHttp.status);
         WebthitethLoggingJs.logError("I wonder if this will work: " + this.responseText);
         connectionError = true;
       } else {
         arglist = eval(this.responseText);
         if("heartbeat" == arglist) {
           lastMsgTime = new Date();
         } else {
           for(var i = 0 ; i < arglist.length ; i++) {
             callback.apply(window, arglist[i]);
           }
         }
       }
     }
   }
   var serverget = WebthitethJs.__rootDir__ + "/streamingservercall?";
   var params = "func=" + func + "&key=" + key;
   xmlHttp.open("POST",serverget,true);
   xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   xmlHttp.setRequestHeader("Content-length", params.length);
   xmlHttp.setRequestHeader("Connection", "close");
   xmlHttp.send(params);
 
   var checkHeartbeat = function() {
     if(!connectionError) {
       if(new Date().getTime() - lastMsgTime.getTime() > 25000) {
         WebthitethLoggingJs.logDebug('We\'ve lost the heartbeat, rebooting the stream');
         WebthitethJs.makeStreamingServerCallInner(callback, key);
       } else {
         window.setTimeout(checkHeartbeat, 5000);
       }
     }
   }
   window.setTimeout(checkHeartbeat, 5000);
   }
;
;
WebthitethJs.makeServerCall = function() {var callback = arguments[0];;
var errorCallback = arguments[1];;
var serverFunc = arguments[2];;
var serverArgs = arguments[3];;
 

   WebthitethLoggingJs.logDebug("into sever call " + new Date().getTime());
   var xmlHttp;
   try { xmlHttp=new XMLHttpRequest(); } catch (e) {
     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) {
       if(xmlHttp.status != 200) {
         if(errorCallback) {
           errorCallback();
         } else {
           WebthitethLoggingJs.logError("This call failed: " + xmlHttp.status);
         }
      } else {
         WebthitethLoggingJs.logDebug("got server respose " + new Date().getTime());
         WebthitethLoggingJs.logDebug("got server respose " + xmlHttp.responseText);
         var arglist = eval(xmlHttp.responseText);
         WebthitethLoggingJs.logDebug("decomposed server response " + new Date().getTime());
         callback.apply(window, arglist);
       }
     }
   }
   var serverget = WebthitethJs.__rootDir__ + "/servercall?";

   var params = "func=" + serverFunc;
   ; for ( var i = 0 ; i < serverArgs.length ; i++ ) {
     serverArg = WebthitethJs.handleArg(serverArgs[i]);
     params = params +  "&" + "arg" + "=" + serverArg;
   }
 
   ;WebthitethLoggingJs.logDebug("making server call " + new Date().getTime());
   ;xmlHttp.open("POST",serverget,true);
   ;xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   ;xmlHttp.setRequestHeader("Content-length", params.length);
   ;xmlHttp.setRequestHeader("Connection", "close");
   xmlHttp.send(params);}
;

