var _isIE = false, _isIE6 = false, _isNS4 = false, _isNS6 = false, _isIE8 = false, _isIE9 = false;
var MOUSE_BUTTON_LEFT, MOUSE_BUTTON_RIGHT;

if(navigator.appName.indexOf("Microsoft Internet Explorer")!= -1) {
	_isIE = true;
	MOUSE_BUTTON_LEFT = 1;
	MOUSE_BUTTON_RIGHT = 2;
	var __appver = navigator.appVersion.toLowerCase();
	var __iepos = __appver.indexOf("msie");

	if (__iepos != -1) { 
		var is_minor = parseFloat(__appver.substring(__iepos + 5, __appver.indexOf(';', __iepos)));
		_isIE6 = (parseInt(is_minor) <= 6);
		_isIE8 = (parseInt(is_minor) == 8);
		_isIE9 = (parseInt(is_minor) >= 9);
		if(_isIE9) {
			//this may relies on the DOCTYPE of the document
			MOUSE_BUTTON_LEFT = 0;
			MOUSE_BUTTON_RIGHT = 2;
		}
	}
} else if(navigator.appName.indexOf("Netscape") != -1) {
	_isNS6 = true;
	MOUSE_BUTTON_LEFT = 0;
	MOUSE_BUTTON_RIGHT = 2;
} else {
	_isNS4 = true;
	MOUSE_BUTTON_LEFT = 0;
	MOUSE_BUTTON_RIGHT = 2;
}

/* *** *** *** *** *** *** *** *** ***
 * this code is taken from http://webfx.eae.net/dhtml/xmlextras/xmlextras.html 
 * *** *** *** *** *** *** *** *** ***
 */
// used to find the Automation server name
function getDomDocumentPrefix() {
	if (getDomDocumentPrefix.prefix)
		return getDomDocumentPrefix.prefix;
	
	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
	var o;
	for (var i = 0; i < prefixes.length; i++) {
		try {
			// try to create the objects
			o = new ActiveXObject(prefixes[i] + ".DomDocument");
			return getDomDocumentPrefix.prefix = prefixes[i];
		}
		catch (ex) {};
	}
	
	throw new Error("Could not find an installed XML parser");
}

function getXmlHttpPrefix() {
	if (getXmlHttpPrefix.prefix)
		return getXmlHttpPrefix.prefix;
	
	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
	var o;
	for (var i = 0; i < prefixes.length; i++) {
		try {
			// try to create the objects
			o = new ActiveXObject(prefixes[i] + ".XmlHttp");
			return getXmlHttpPrefix.prefix = prefixes[i];
		}
		catch (ex) {};
	}
	
	throw new Error("Could not find an installed XML parser");
}

//////////////////////////
// Start the Real stuff //
//////////////////////////


// XmlHttp factory
function XmlHttp() {}

XmlHttp.create = function () {
	try {
		if (window.XMLHttpRequest) {
			var req = new XMLHttpRequest();
			
			// some versions of Moz do not support the readyState property
			// and the onreadystate event so we patch it!
			if (req.readyState == null) {
				req.readyState = 1;
				req.addEventListener("load", function () {
					req.readyState = 4;
					if (typeof req.onreadystatechange == "function")
						req.onreadystatechange();
				}, false);
			}
			
			return req;
		}
		if (window.ActiveXObject) {
			return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
		}
	}
	catch (ex) {}
	// fell through
	throw new Error("Your browser does not support XmlHttp objects");
};

// XmlDocument factory
function XmlDocument() {}

XmlDocument.create = function () {
	try {
		// DOM2
		if (document.implementation && document.implementation.createDocument) {
			var doc = document.implementation.createDocument("", "", null);
			
			// some versions of Moz do not support the readyState property
			// and the onreadystate event so we patch it!
			if (doc.readyState == null) {
				doc.readyState = 1;
				doc.addEventListener("load", function () {
					doc.readyState = 4;
					if (typeof doc.onreadystatechange == "function")
						doc.onreadystatechange();
				}, false);
			}
			
			return doc;
		}
		if (window.ActiveXObject)
			return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
	}
	catch (ex) {}
	throw new Error("Your browser does not support XmlDocument objects");
};

// Create the loadXML method 
if (window.DOMParser) {

	// XMLDocument did not extend the Document interface in some versions
	// of Mozilla. Extend both!
	//XMLDocument.prototype.loadXML = 
	Document.prototype.loadXML = function (s) {
		
		// parse the string to a new doc	
		var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
		
		// remove all initial children
		while (this.hasChildNodes())
			this.removeChild(this.lastChild);
			
		// insert and import nodes
		for (var i = 0; i < doc2.childNodes.length; i++) {
			this.appendChild(this.importNode(doc2.childNodes[i], true));
		}
	};
}

// Create xml getter for Mozilla
/* IMPORTANT NOTE
 * Usage of this .xml getter method is deprecated 
 */
if (window.XMLSerializer /*&&
		window.Node && Node.prototype && Node.prototype.__defineGetter__*/) {
	
	/*
	 * xml getter
	 *
	 * This serializes the DOM tree to an XML String
	 *
	 * Usage: var sXml = oNode.xml
	 *
	 */
	// XMLDocument did not extend the Document interface in some versions
	// of Mozilla. Extend both!
 	XMLDocument.prototype.__defineGetter__("xml", function () {
 		return (new XMLSerializer()).serializeToString(this);
 	});
	Document.prototype.__defineGetter__("xml", function () {
		return (new XMLSerializer()).serializeToString(this);
	});

	/* doesn't work correctly in mozi */
 	Node.prototype.__defineGetter__("xml", function () {
 		return (new XMLSerializer()).serializeToString(this);
 	});
}

function syncRequest(url, callback) {
	var req = XmlHttp.create();

	req.open("GET", url, false);
	req.send(null);

	if (req.readyState == 4)
	{
		if(callback) {
			var resp = req.responseText;
			callback(resp, req);
		}
	}
}

function asyncRequest(url, callback) {
	var req = XmlHttp.create();
	req.open("GET", url, true);

	req.onreadystatechange = function()
	{

		if (req.readyState == 4)
		{
			if(callback) {
				var resp = req.responseText;
				callback(resp, req);
			}
		}
	}

	req.send(null);
}

function setInnerHTML(element, str) {
	/*
	if(navigator.appName.indexOf("Microsoft Internet Explorer") ==  -1) {
		var r = element.ownerDocument.createRange();
		r.selectNodeContents(element);
		r.deleteContents();
		var df = r.createContextualFragment(str);
		element.appendChild(df);
		
		return str;	
	} else {
		element.innerHTML = str;
		return str;
	}
	*/
	element.innerHTML = str;
	return str;
}

function escapeXML(str) {
	if(str == null || str == "")
		return null;

	return str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
}

function addEvent(obj, eventName, fn, useCapture) {   
	if(obj.addEventListener) {   
		obj.addEventListener(eventName, fn, useCapture == undefined ? true: useCapture);
		return true;
	} else if(obj.attachEvent) {   
		return obj.attachEvent("on" + eventName, fn);
	} else {
		obj["on" + eventName] = fn; 
	}
}

function removeEvent(obj, eventName, fn, useCapture) {   
	if(obj.addEventListener) {   
		obj.removeEventListener(eventName, fn, useCapture == undefined ? true: useCapture);
		return true;
	} else if(obj.detachEvent) {   
		return obj.detachEvent("on" + eventName, fn);
	} else {
		obj["on" + eventName] = null;
	}
}

function preventDefault(evt) {
	var e = evt || window.event;
	if(e.preventDefault) e.preventDefault();
	else e.returnValue = false;
}

function getCoords(e){
	var left = 0;
	var top  = 0;
	var ww = e.offsetWidth || e.clientWidth;
	var hh = e.offsetHeight || e.clientHeight;
	
	while (e.offsetParent){
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;
	
	return {x:left, y:top, width:ww, height:hh};
}

function $(name, owner){
	var obj = null;
	if(owner) {
		var elements;
		if(owner.tagName == "FORM") {
			var formElements = document.forms[0].elements;
			if(formElements) {
				elements = new Array();
				for(var i = 0; i < formElements.length; i++) {
					if(formElements[i].name == name) {
						elements[elements.length] = formElements[i];
					}
				}

				if(elements.length == 1) {
					obj = elements[0];
				} else if(elements.length > 0) {
					obj = elements;
				}
			}
		}
	}

	//try id if fails
	if(!obj) obj = document.getElementById(name);
	return obj;
}

function createElement(tagName, name, type) {
   var element = null;
   // Try the IE way; this fails on standards-compliant browsers
   try {
	  element = document.createElement("<" + tagName + (name ? " id=\"" + name + "\" name=\"" + name + "\"" : "") + (type ? " type=\"" + type + "\"" : "") + ">");
   } catch (e) {

   }

   if (!element || element.nodeName != tagName.toUpperCase()) {
	  // Non-IE browser; use canonical method to create named element
	  element = document.createElement(tagName);
	  if(name) {
		  element.name = name;
		  element.id = name;
	  }
	  
	  if(type) element.type = type;
   }

   return element;
}

function setCookie(name, value, expires, path, domain, secure) { 
    if(!expires){
        expires = 31;
    }

    var expireDate;
    if(!isNaN(expires)){
        expireDate = new Date();
        expireDate.setDate(expireDate.getDate() + expires);
    }else if(expires.toGMTString){
        expireDate = expires;
    }

    document.cookie= name + "=" + escape(value) +
    ((expireDate) ? "; expires=" + expireDate.toGMTString() : "") +
    ((path) ? "; path=" + path : "") + 
    ((domain) ? "; domain=" + domain : "") + 
    ((secure) ? "; secure" : ""); 
} 

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; 
    } 
    
	var value = unescape(dc.substring(begin + prefix.length, end));
	return value;
}

function deleteCookie(name){
	setCookie(name, "", -1);
}

function gotoPage(pageNo, usePost) {
	if(pageNo <= 0) return;

	if (usePost == 1) {
		cp = document.getElementById("curPage");
		if (cp == null) return;
		cp.value = pageNo;
		cp.form.submit();
		return ;
	}
		
	var url = window.location.href;	
	if(url.indexOf("curPage=") == -1) {
		url = url + (url.indexOf("?") == -1 ? "?" : "&") + "curPage=" + pageNo;	
	} else {
		url = url.replace(/curPage=\d*/, "curPage=" + pageNo);
	}

	window.location.href = url;
}

function setPageSize(pageSize, usePost) {
	if(pageSize <= 0) return;
	
	if (usePost == 1) {
		ps = document.getElementById("pageSize");
		if (ps == null) return;
		
		ps.value = pageSize.replace(/[^0-9]/g, "");
		if (ps.value == "") ps.value = "50";
		ps.form.submit();
		return ;
	}
	var url = window.location.href;	
	if(url.indexOf("pageSize=") == -1) {
		url = url + (url.indexOf("?") == -1 ? "?" : "&") + "pageSize=" + pageSize;
	} else {
		url = url.replace(/pageSize=\d*/, "pageSize=" + pageSize);
	}

	window.location.href = url;
}
var winhelp;
function openHelp(url, ancname) {
	if(url && ancname) {
		url += "#" + ancname;
	}
	
	if(winhelp && !winhelp.closed) {
		if(url)	winhelp.mainFrame.hload("help/" + url);
	} else {
		winhelp = window.open("help/help.htm" + (url ? "#sec=" + url : ""), "help", "width=960,height=590,resizable=no,scrollbars=no,status=no,menubar=no,toolbar=no,location=no,directories=no");
	}

	if(window.focus) winhelp.focus();
}
var DEFAULT_WIN_WIDTH = 600;
var DEFAULT_WIN_HEIGHT = 450;
function openWindow(url, caption, w, h) {
	var _url, _caption, _width, _height;

	switch(openWindow.arguments.length){
		case 0 :
			break;
		case 1 :
			_url = openWindow.arguments[0];
			break;
		case 2 :
			_url = openWindow.arguments[0];
			_caption = openWindow.arguments[1];
			break;
		case 3 :
			_url = openWindow.arguments[0];
			_width = openWindow.arguments[1];
			_height = openWindow.arguments[2];
			break;
		case 4 :
			_url = openWindow.arguments[0];
			_caption = openWindow.arguments[1];
			_width = openWindow.arguments[2];
			_height = openWindow.arguments[3];
			break;
	}

	if(!_url){
		return;
	}

	if(_caption == ""){
		_caption = "newWin";
	}

	if(!_width){
		_width = DEFAULT_WIN_WIDTH;
	}

	if(!_height){
		_height = DEFAULT_WIN_HEIGHT;
	}
	
    var options = "width=" + _width + ",height=" + _height + ",";
    options += "resizable=yes,scrollbars=yes,status=yes,";
    options += "menubar=no,toolbar=no,location=no,directories=no";
    var newWin = window.open(_url, _caption, options);
    newWin.focus();
}
