function addClass(cn, obj) {
	if (!obj) obj = this;

	if (obj.className) {
		var str = obj.className;
		str += ' ';
		str += cn;
		obj.className = str;
	} else {
		obj.className = cn;
	}
}

function removeClass(cn, obj) {
	var st = obj.className.split(/\s+/);
	var st2 = new Array();
	for (var i=0; i < st.length; i++) {
		if (st[i] != cn) st2.push(st[i]);
	}
	obj.className = st2.join(' ');
}

function hasClass(cn, obj) {
	var st = obj.className.split(/\s+/);
	var hasit = false;
	for (var i=0; i < st.length; i++) {
		if (st[i] == cn) {
			hasit = true;
			break;
		}
	}
	return hasit;
}

function selectOption(opt, obj) {
	for (var i=0; i < obj.options.length; i++) {
		if (obj.options[i].value == opt) obj.options[i].selected = true;
		else obj.options[i].selected = false;
	}
}

function disableEnterKey(e) {
        var key = window.event ? event.keyCode : e.which;
        return (key != 13);
}

function goWithEnter(e, strexec) {
	var key = window.event ? event.keyCode : e.which;
	if (key == 13) {
		eval(strexec);
		return false;
	}
}

function stopItCold(e, strexec) {
	if (!e) var e = window.event;
        e.cancelBubble = true;
        if (e.stopPropagation) e.stopPropagation();

	eval(strexec);
}

function postToUrl(loc, params) {
	var form = document.createElement('form');
	form.setAttribute('method', 'post');
	form.setAttribute('action', loc);

	for (var key in params) {
		var hf = createNamedElement('input', key);
		hf.setAttribute('type', 'hidden');
		hf.setAttribute('value', params[key]);
		
		form.appendChild(hf);
	}

	document.body.appendChild(form);
	form.submit();

	return false;
}

function getChildrenByTagName(obj, tag) {
	var tag2 = tag.toUpperCase();
	var arr = new Array();
	for (var i=0; i < obj.childNodes.length; i++) {
		if (!obj.childNodes[i].tagName || obj.childNodes[i].tagName.toUpperCase() != tag2) continue;
		arr.push(obj.childNodes[i]);
	}

	return arr;
}

function widthBetween(obj1, obj2) {
	var parentn = obj1;
	var twidth = 0;
	while (obj2 != parentn && obj2 != document.body) {
		twidth += parentn.offsetLeft;
		parentn = parentn.offsetParent;
	}

	return twidth;
}

// can't use setAttribute to set the name of an element in IE,
// so we have to use this function instead when creating an
// element with a name
function createNamedElement(type, name) {
	var el;
	try {
		el = document.createElement('<'+type+' name="'+name+'">');
	} catch (e) { }
	if (!el || !el.name) {
		el = document.createElement(type);
		el.name = name;
	}
	return el;
}


//
// AJAX stuff
//

function requestObject() {
        var theRequest;

        if (window.XMLHttpRequest) { // Firefox, Safari, others
                theRequest = new XMLHttpRequest();
                if (theRequest.overrideMimeType) {
                        theRequest.overrideMimeType('text/xml');
                }
        } else if (window.ActiveXObject) { // IE
                try {
                        theRequest = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                        try {
                                theRequest = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch (e) {}
                }
        }

        if (!theRequest) {
                return false;
        }

        return theRequest;
}

function ajaxRequest(url, whatToDo, args) {
	if (!args) args = new Array();
        var theRequest = requestObject();
	if (!theRequest) return false;

	if (whatToDo) {
        	theRequest.onreadystatechange = function() {
                        try {
                                if (theRequest.readyState == 4) {
                                        if (theRequest.status == 200) {
                                                whatToDo(theRequest.responseXML, args);
                                        }
                                }
                        } catch (e) {}
                };
	}
	var urlp = url.split('?');
        theRequest.open('POST', urlp[0], true);
        theRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        theRequest.send(urlp[1]);
        return true;
}

function sjaxRequest(url) {
        try {
                var req = requestObject();
                req.open('GET', url, false);
                req.send(null);
                return req.responseXML;
        } catch (e) {}
}

function getTable(tblid) {
	var tbl1 = document.getElementById(tblid);
        if (!tbl1) return false;
        var tbl2 = tbl1.getElementsByTagName('tbody');
        if (tbl2.length < 1) return false;
        return tbl2[0];
}

function getFormField(nam, fnam) {
	var fa = document.getElementsByName(nam);
	if (fa.length < 1) return false;
	else if (!fnam) {
		if (fa.length == 1) return fa[0];
		else return false;
	}

	for (var i=0; i < fa.length; i++) {
		if (fa[i].form.name == fnam) return fa[i];
	}
	return false;
}

function getFormFieldValue(nam, fnam) {
	var f = getFormField(nam, fnam);
	if (f === false) return false;
	var ret;

	if (f.type == 'select-one') ret = f.options[f.selectedIndex].value;
	else ret = f.value;

	return ret;
}

function setFormField(nam, val, fnam) {
	if (!fnam) fnam = '';
	var f = getFormField(nam, fnam);

	if (f.type == 'select-one') {
		for (var i=0; i < f.options.length; i++) {
			if (f.options[i].value == val) {
				f.options[i].selected = true;
				break;
			}
		}
	} else {
		f.value = val;
	}
}


function toggleDiv(nam, way) {
	var div = document.getElementById(nam);
	if (!div) return;

	if (way) div.style.display = 'block';
	else div.style.display = 'none';
}

function showDiv(nam) {
	toggleDiv(nam, 1);
}

function hideDiv(nam) {
	toggleDiv(nam, 0);
}

