function browserIs() {												// Detect browser.
    var agent	= navigator.userAgent.toLowerCase();
    this.major	= parseInt(navigator.appVersion);
    this.minor	= parseFloat(navigator.appVersion);
    this.ns		= ((agent.indexOf('mozilla') != -1) && ((agent.indexOf('spoofer') == -1) && (agent.indexOf('compatible') == -1)));
	this.ns4	= (!!document.layers);
    this.ns6	= (this.ns && (this.major >= 5));
    this.ie		= (agent.indexOf("msie") != -1);
    this.ie3	= (this.ie && (this.major  < 4));
    this.ie4	= (this.ie && (this.major == 4) && (agent.indexOf("msie 5.0") == -1));
    this.ie5	= (this.ie && (this.major == 4) && (agent.indexOf("msie 5.0") != -1));
    this.ie55	= (this.ie && (this.major == 4) && (agent.indexOf("msie 5.5") != -1));
    this.ie6	= (this.ie && (agent.indexOf("msie 6.0")!=-1) );
	this.ff		= (agent.indexOf("firefox") != -1);
	return this;
}

var browser = browserIs();

function getElementHeight(elem) {
	var height;
	if (browser.op5) { 
		height = elem.style.pixelHeight;
	} else {
		height = elem.offsetHeight;
	}
	return height;
}

function getElementWidth(elem) {
	var width;
	if (browser.op5) {
		width = elem.style.pixelWidth;
	} else {
		width = elem.offsetWidth;
	}
	return width;
}

function getElementLeft(elem) {
	var x = 0;
	var tempParent = elem.offsetParent;
	if ((browser.ff == true) ) {
		x = elem.offsetLeft;
	}
	else if ((browser.ie6 == true) ) {
		x = elem.offsetLeft + 12;
	} else {
		var x = elem.offsetLeft;
		while (tempParent != null) {
			x += tempParent.offsetLeft;
			tempParent = tempParent.offsetParent;
		}
	}
	return x;
}

function getElementTop(elem) {
	var y = elem.offsetTop;
	var tempParent = elem.offsetParent;
	while (tempParent != null) {
		y += tempParent.offsetTop;
		tempParent = tempParent.offsetParent;
	}
	return y;
	
}

function getElementRect(elem) {
	var rect = new Object();
	rect.top = getElementTop(elem);
	rect.left = getElementLeft(elem);
	rect.width = getElementWidth(elem);
	rect.height = getElementHeight(elem);
	rect.bottom = rect.top + rect.height;
	rect.right = rect.left + rect.width;
	return rect;
}


function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			//window.status += obj.id +":"+ obj.offsetLeft + " | ";
			//window.status += obj.id +":"+ obj.offsetParent.id + " | ";
			obj = obj.offsetParent;
		}
	} 
	else if (obj.x) {
		curleft += obj.x;
	}
	return curleft;
}

function getElemMouseX(e,elem){
	var x=-1;
	e = e || window.event;
	if(e.offsetX){
		x = e.offsetX;
	} else {
		if(e.layerX){
			var xx = findPosX(elem);
			x = e.layerX - xx;
		}
	}
	return x;
}




// return object from query string
function getQueryParams(queryString) {
	 var queryObject = new Object();
	queryString = queryString.replace(/^.*\?(.+)$/,'$1');
	while ((pair = queryString.match(/([^=]+)=\'?([^\&\']*)\'?\&?/)) && pair[0].length) {
		queryString = queryString.substring( pair[0].length );
		if (/^\-?\d+$/.test(pair[2])) pair[2] = parseInt(pair[2]);
		queryObject[pair[1]] = pair[2];
	}
	return queryObject;
}

var Q = getQueryParams(location.search);


/** XHConn - Simple XMLHTTP Interface - brad@xkr.us - 2005-01-24             **
 ** Code licensed under Creative Commons Attribution-ShareAlike License      **
 ** http://creativecommons.org/licenses/by-sa/2.0/                           **/
function XHConn()
{
  var xmlhttp;
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}
  if (!xmlhttp) return null;
  this.connect = function(sURL, sMethod, sVars, fnDone)
  {
    if (!xmlhttp) return false;
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        sVars = "";
      }
      else
      {
        xmlhttp.open(sMethod, sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type",
          "application/x-www-form-urlencoded");
      }
      xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4) {
        fnDone(xmlhttp); }};
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}


function dollarize(amount,showCents) {
	amount += '';
	var x = amount.split('.');
	var dollars = x[0];
	var cents = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(dollars)) {
		dollars = dollars.replace(rgx, '$1' + ',' + '$2');
	}
	var dollarized = '$' + dollars;
	if (showCents==true) {
		dollarized += cents;
	}
	return dollarized;
}


function getCookie(name){
	var dc=document.cookie;
	var prefix=name+"=";
	var begin=dc.indexOf("; "+prefix);
	if(begin==-1){
		begin=dc.indexOf(prefix);
		if(begin !=0)return null;
	}else begin+=2;var end=document.cookie.indexOf(";",begin);
	if(end==-1)end=dc.length;
	return unescape(dc.substring(begin+prefix.length,end));
}