oHead=0;
onPageLoaded=0;
var continueLoading=false;
var tooltipMoving=false;

function cC(oE, sC){ //cC = checkClass
	oE=fO(oE);
	if(!oE) return 0;
	sC = sC.replace(/\-/g, "\\-");
	var oRegEx = new RegExp("(^|\\s)" + sC + "(\\s|$)");
	return oRegEx.test(oE.className);
}

function rC(oE, sC){ //rC = removeClass
	oE=fO(oE);
	if(!oE) return false;
	var rep=oE.className.match(' '+sC)?' '+sC:sC;
	oE.className=oE.className.replace(rep,'');
	oE.className.replace(/^\s./,'');
}

function aC(oE, sC){ //aC = addClass
	oE=fO(oE);
	if(!oE) return false;
	if(!cC(oE, sC)){
		oE.className+=oE.className?' '+sC:sC;
	}
}

function tC(oE,sC){ //tC = toggleClass
	if(cC(oE,sC)){
		return rC(oE,sC);
	}else{
		return aC(oE,sC);
	}
}

function popup(title,text){
  fO('popupTitle').innerHTML=title;
  fO('popupMsg').innerHTML=text;
  sO('darken');
  sO('popup');
}

function popupClose(){
  hO('popup');
  hO('darken');
  if(typeof(_popupClose)=='function') _popupClose();
}

function tooltip(t,r,oX,oY){
	var o=fO('tooltip');
	oX=(typeof oX!='undefined')?oX:0;
	oY=(typeof oY!='undefined')?oY:oX;
	if(typeof t!='string') return hO(o);
	sO(o);
	o.innerHTML=t;
	r=fO(r);
	p=fP(r);
	o.style.left=(p.x+oX)+'px';
	o.style.top=(p.y+oY)+'px';
	r.onmouseout=tooltip;
}

function fO(oE){ //fO = fetchObject, returns object if string specified.
	if(typeof(oE)=='string'){
		if(document.getElementById){
			if(oE=document.getElementById(oE)) return oE;
		}else if(document.all){
			if(oE=document.all[oE]) return oE;
		}
	}else if(typeof(oE)=='object'){
		return oE;
	}
	return false;
}

function hO(oE){ //hO = hideObject
	oE=fO(oE);
	if(!oE) return false;
	oE.style.display='none';
	oE.style.visibility='hidden';
}

function sO(oE,sDT){ //sO = showObject
	oE=fO(oE);
	if(sDT==null) sDT='block';
	if(!oE) return false;
	oE.style.display=sDT;
	oE.style.visibility='visible';
}

function cOV(oE,sDT){ //cOV = checkObjectVisibility
	oE=fO(oE);
	if(sDT==null) sDT='block';
	if(!oE) return 0;
	return (oE.style.display==sDT);
}

function tOV(oE,sDT){ //tO=toggleObjectVisibility
	oE=fO(oE);
	if(!oE) return false;
	if(sDT==null) sDT='block';
	if(cOV(oE,sDT)){
		hO(oE);
	}else{
		sO(oE);
	}
}

function sOV(oE,bV,sDT){ //sOV = setObjectVisibility
  if(sDT==null) sDT='block';
  if(bV){
    sO(oE,sDT);
  }else{
    hO(oE);
  }
}


function execJS(sUrl){
	oJS=document.createElement('script');
	oJS.type = 'text/javascript';
	sUrl+=parseInt(Math.random()*99999999)+'/';
	oJS.src=sUrl;
	document.getElementsByTagName('head')[0].appendChild(oJS);
}

function esc(sUrl){
		sUrl=escape(sUrl);
		return sUrl.replace(/\//g,'%2F');
}

function newWindow(sUrl){
	return window.open(sUrl,'','toolbar=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes');
}

function popupWin(sURL,iW,iH){
	var iX=Math.floor(screen.width/2-iW/2);
	var iY=Math.floor(screen.height/2-iH/2);
	return window.open(sURL,'popup','height='+iH+',width='+iW+',left='+iX+',top='+iY+',dependent=yes,alwaysRaised=yes,menubar=no,status=yes,resizeable=no,toolbar=no,titlebar=no');
}

function loadCSS(sSrc){
	var oLink = document.createElement('link');
    oLink.setAttribute('rel','stylesheet');
    oLink.setAttribute('type','text/css');
    oLink.setAttribute('href',sSrc);
    oHead.appendChild(oLink);
}


function initiateDocument(){
	oHead=document.getElementsByTagName('head')[0];
	if(!continueLoading) setTimeout("loading(false);",500);
	if(typeof(onPageLoaded)=='function') onPageLoaded();
	//if(document.getElementsByTagName&&document.getElementsByTagName('iframe')[0]) hO(document.getElementsByTagName('iframe')[0]);
}

function loading(sText){
  if(sText==false){
    sO('contents');
    hO('loading');
  }else{
    hO('contents');
    sO('loading');
    fO('loadingText').innerHTML=sText;
  }
}

function fP(oE) { //fP=findPosition
	var iX=0;
	var iY=0;
	oE=fO(oE);
	if(oE.offsetParent) {
		do {
			iX+=oE.offsetLeft;
			iY+=oE.offsetTop;
		} while(oE=oE.offsetParent);
	}
	return {"x":iX,"y":iY};
}


var toJsonString
(function () {
  toJsonString = function(o) {
    var UNDEFINED
    switch (typeof o) {
      case 'string': return '\'' + encodeJS(o) + '\''
      case 'number': return String(o)
      case 'object': 
        if (o) {
          var a = []
          if (o.constructor == Array) {
            for (var i = 0; i < o.length; i++) {
              var json = toJsonString(o[i])
              if (json != UNDEFINED) a[a.length] = json
            }
            return '[' + a.join(',') + ']'
          } else if (o.constructor == Date) {
            return 'new Date(' + o.getTime() + ')'
          } else {
            for (var p in o) {
              var json = toJsonString(o[p])
              if (json != UNDEFINED) a[a.length] = (/^[A-Za-z_]\w*$/.test(p) ? (p + ':') : ('\'' + encodeJS(p) + '\':')) + json
            }
            return '{' + a.join(',') + '}'
          }
        }
        return 'null'
      case 'boolean'  : return String(o)
      case 'function' : return
      case 'undefined': return 'null'
    }
  }
  
  function encodeJS(s) {
    return (!/[\x00-\x19\'\\]/.test(s)) ? s : s.replace(/([\\'])/g, '\\$1').replace(/\r/g, '\\r').replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/[\x00-\x19]/g, '')
  }
})()


function jsonCall(sFunction,oData,sListener) {
	var oXMLHttp=new XMLHttpRequest();
	var sUrl=CFG_BASE_URL+'/'+sFunction+'.php';
	oXMLHttp.onreadystatechange=function(){
		if(oXMLHttp.readyState==4){
			var oResponse=eval('('+oXMLHttp.responseText+')');
			sListener(oResponse);
		}
	};
	
	oXMLHttp.open("POST",sUrl,true);
	if(typeof oData=='object'){
		oXMLHttp.send(toJsonString(oData));
	}else{
		oXMLHttp.send(oData);
	}
	return oXMLHttp;
	
}


if( !window.XMLHttpRequest ) XMLHttpRequest = function(){
        try{ return new ActiveXObject("MSXML3.XMLHTTP") }catch(e){}
        try{ return new ActiveXObject("MSXML2.XMLHTTP.3.0") }catch(e){}
        try{ return new ActiveXObject("Msxml2.XMLHTTP") }catch(e){}
        try{ return new ActiveXObject("Microsoft.XMLHTTP") }catch(e){}
        throw new Error("Could not find an XMLHttpRequest alternative.")
};

window.onload=initiateDocument;