

// from http://www.crockford.com/javascript/remedial.html
function isFunction(a) { return typeof a == 'function'; }
function isObject(a) { return (a && typeof a == 'object') || isFunction(a); }	
function isArray(a) { return isObject(a) && a.constructor == Array; }


function installEventHandler(element, event, handler) 
{
	if(element.addEventListener) {
		element.addEventListener(event,handler,false) ;
	}
	else if(element.attachEvent) {
		element.attachEvent("on"+event,handler) ;
	}
}


function loginBoxFocusHandler(tgt)
{
	if ((tgt.value == 'Username') && (tgt.id == 'l_username'))
	{ 
		tgt.value = '';
		tgt.style.color = '#000';
	}
}

function loginBoxBlurHandler(tgt)
{
	if (tgt.value != '')
	{
		return;
	}
	
	if (tgt.id == 'l_username')
	{
		tgt.value = 'Username';
		tgt.style.color = '#666';
	}
}


function addFormSubmitHandler(whichForm, newFunc) 
{
	var oldHandler = whichForm.onsubmit;
	
	if(whichForm.onsubmit) {
		form.onsubmit = function() 
		{
			return (newFunc() && oldHandler()) ;
		};
	} 
	else 
	{
		form.onsubmit = newFunc;
	}
}



function findKey(evt) {
	var e = (evt) ? evt : ((window.event) ? window.event : null);
	if (e.type == 'keydown') {
		var charCode = (e.charCode) ? e.charCode : e.keyCode;
		return charCode;
	}
	return null;
}


function loadXMLDoc(url, funcProcess) {
	
	req = false;
    
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	if(req) {
		req.onreadystatechange = funcProcess;
		req.open("GET", url, true);
		req.send(null);
	}
}

function mailto(name, domain, subject) {
	url = 'mailto: ' + escape(name) + '%40' + escape(domain);
	if (subject != null) url += '?subject=' + escape(subject);
	window.location = url;
}


function urlDecode(s)
{
	return unescape(s.replace("+", " "));
}

function parseQueryString()
{
	var obj = new Object();
	
	var nvpairs = location.search.substring(1).split("&");
	
	for (var idx = 0; idx < nvpairs.length; idx++)
	{
		var tokens = nvpairs[idx].split("=");
		
		obj[urlDecode(tokens[0])] = tokens.length == 2 ? urlDecode(tokens[1]) : undefined;
	}

	return obj;
}