var IE = "IE";
var MOZILLA = "MOZILLA";
var OPERA = "OPERA";
var SAFARI = "SAFARI";
var UNKNOWN = null;
var BROWSER = UNKNOWN;
if (navigator.appVersion.indexOf("MSIE")!=-1){
	BROWSER = IE;
} else if(navigator.userAgent.indexOf("Safari")!=-1) {
	BROWSER = SAFARI;
} else if(navigator.userAgent.indexOf("Opera")!=-1) {
	BROWSER = OPERA;
} else if(navigator.appName=="Netscape") {
	BROWSER = MOZILLA;
}

if (BROWSER != IE) document.captureEvents(Event.MOUSEMOVE);

function recursiveNodeRemove(node) {
	var fc;
	while(fc = node.firstChild) {
		recursiveNodeRemove(fc);
	}
	node.parentNode.removeChild(node);
}

function clearNode(node) {
	while(node.firstChild)
		recursiveNodeRemove(node.firstChild);
}

function insertAfter(objToIns, objAfter) {
	var obj = objAfter.nextSibling;
	if(obj == null) {
		objAfter.parentNode.appendChild(objToIns);
	} else {
		objAfter.parentNode.insertBefore(objToIns, obj);
	}
}

function showLoadingBar(node, clear) {
	if(clear)  clearNode(node);
	var img = document.createElement("img");
	img.src = "/lib/images/loading-bar.gif";
	img.alt = "loading...";
	node.appendChild(img);
};

function XMLTransferHelper() {

	this.createDocument = function() {
		if (document.implementation && document.implementation.createDocument) { 
			return document.implementation.createDocument("", "", null); 
		} else if (window.ActiveXObject) { 
			return new ActiveXObject("Microsoft.XMLDOM"); 
		}
		throw "Unsupported Browser";
	}
	
	this.sendDocument = function(url, doc, callback, method) {
		if(!method) method = "POST";
		me.callback = callback;
		if (window.XMLHttpRequest) { // Mozilla etc. 
			xmlhttp=new XMLHttpRequest(); 
		} else if (window.ActiveXObject) { // IE 
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
		}
		if (!xmlhttp) throw "unsupported browser";
		xmlhttp.onreadystatechange=me.updated; 
		xmlhttp.open(method,url,true); 
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		xmlhttp.send(doc); 
	}
	
	this.updated = function() {
		if(xmlhttp.readyState < 4) return;
		try {
			if(xmlhttp.status != 200) return;
		} catch (e) {
			window.status = e;
			return;
		}
		if(!BROWSER == IE) {
			try {
				var doc = xmlhttp.responseXML;
				if((!doc || !doc.documentElement) && window.ActiveXObject) {
						doc = new ActiveXObject("Microsoft.XMLDOM");
						doc.async=false;
						doc.loadXML(xmlhttp.responseText);
						if(!doc.firstChild) { //ie try again stripping extended chars.
							var txt = xmlhttp.responseText;
							displayError(
								"Error Code: " + doc.parseError.errorCode + "\r\n" + 
								"Reason: " + doc.parseError.reason + "\r\n" + 
								"Line: " + doc.parseError.line + "\r\n" + 
								"Source: " +  doc.parseError.srcText + "\r\n" + 
								"URL: " +  doc.parseError.url + "\r\n"  
	//							"Document: " + txt
							);
							doc.loadXML(cleanText(txt));
						}
				}
				if(!doc || !doc.documentElement) {
					me.callback(null, me);
				} else {
					me.callback(doc, me);
				}
			} catch (ex) {
				displayError("Exception caught could not run callback: " + me.callback);
				displayError(ex);
			}
		} else {
			var doc = xmlhttp.responseXML;
			if((!doc || !doc.documentElement) && window.ActiveXObject) {
					doc = new ActiveXObject("Microsoft.XMLDOM");
					doc.async=false;
					doc.loadXML(xmlhttp.responseText);
					if(!doc.firstChild) { //ie try again stripping extended chars.
						var txt = xmlhttp.responseText;
						displayError(
							"Error Code: " + doc.parseError.errorCode + "\r\n" + 
							"Reason: " + doc.parseError.reason + "\r\n" + 
							"Line: " + doc.parseError.line + "\r\n" + 
							"Source: " +  doc.parseError.srcText + "\r\n" + 
							"URL: " +  doc.parseError.url + "\r\n"  
//							"Document: " + txt
						);
						doc.loadXML(cleanText(txt));
					}
			}
			if(!doc || !doc.documentElement) {
				me.callback(null, me);
			} else {
				me.callback(doc, me);
			}
		}
	}
	
	this.lastResponse = function() {
		return xmlhttp.responseText;
	}
	
	this.lastXMLHTTP = null;
	this.callback = null;
	var xmlhttp = null;
	var me = this;
};

function displayError(err) {
	if(window.location.hostname == "my8020.com") return;
	if(err == null)
		err = "Error occurred but no error message to display";
	var msg = "";
	if(err.message) {
		if(BROWSER != IE) {
			for(var name in err) {
				try {
					msg += name + ": " + err[name] + "\n";
				} catch (ex) {}
			}
		} else {
			msg = err.message + "\r\n" + err.stack;
		}
	} else {
		msg = err;
	}
	window.status = msg;
	if(!window.errorDisplayDiv) {
		window.errorDisplayDiv = document.createElement("div")
		window.errorDisplayDiv.style.backgroundColor="#ff0000";
		window.errorDisplayDiv.style.fontWeight="bold";
		window.errorDisplayDiv.style.color="#ffffff";
		window.errorDisplayDiv.style.position="absolute";
		window.errorDisplayDiv.style.top="5px";
		window.errorDisplayDiv.style.zIndex="100";
		window.errorDisplayDiv.style.whiteSpace = "pre";
		window.errorDisplayDiv.style.visibility = "visible";
		window.errorDisplayDiv.style.right = "5px";
		window.errorDisplayDiv.style.border="1px double red";
	} 
	var div = window.errorDisplayDiv;
	div.appendChild(document.createTextNode(msg));
	div.appendChild(document.createElement("br"));
	document.body.appendChild(div);
};

function cleanText(str) {
	var ns = "";
	var length = str.length;
	for(var i = 0; i < length; i++) {
		var mychar = str.charCodeAt(i);
		if((mychar < 32 && mychar != 9 && mychar != 10 && mychar != 13) || mychar > 127) continue;
		ns += str.charAt(i); 
	}
	return ns;
};

function isInt(x) {
   var y=parseInt(x);
   if (isNaN(y)) return false;
   return x==y && x.toString()==y.toString();
};
 
function isEmail(s) {
	return new RegExp('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$').test(s);
} 

function IsNumeric(sText)

{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
}

function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
	}