function $(e){return document.getElementById(e); }
function ge(e){return document.getElementById(e); }
function ce(e){return document.createElement(e); }

function isie(){return (navigator.userAgent.indexOf('MSIE') != -1) ? true : false;}

function getElementsByClassName(strClassName){
    var arrElements = document.all ? document.all : document.getElementsByTagName('div');
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

function cc_toggleDiv(id) {
	var d = ge(id);
	if ( d.style.display == 'block' ) { d.style.display = 'none'; }
	else { d.style.display = 'block'; }
}

/*function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}*/

//------------------------
// ajax functions
//------------------------
function ajaxIt(id,url)
{
	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		req.onreadystatechange = function() { ajaxHandler(id); } ;
		req.open("GET", url, true);
		req.send(null);
	}
	else if (window.ActiveXObject) {
		try { req = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (e) {
			try { req = new ActiveXObject("Microsoft.XMLHTTP"); } 
			catch (oc) { req = null; }
		}
		if ( !req && typeof XMLHTTPRequest != "undefined" ) {
			req = new XMLHTTPRequest();
		}
		if (req) {
			req.onreadystatechange = function() { ajaxHandler(id); }
			req.open("GET", url, true);
			req.send();
		}
	}
}

function ajaxPost(id,url,vars){
	if (window.XMLHttpRequest) { req = new XMLHttpRequest(); }
	else if (window.ActiveXObject) {
		try { req = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (e) {
			try { req = new ActiveXObject("Microsoft.XMLHTTP"); } 
			catch (oc) { req = null; }
		}
		if ( !req && typeof XMLHTTPRequest != "undefined" ) {
			req = new XMLHTTPRequest();
		}
	}
	if (req) {
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		req.open("POST",url,true);
		req.send(vars);
	}
}

function ajaxHandler(id)
{
	var obj = ge(id);
	if ( req.readyState == 4 && req.status == 200 ) {
		obj.innerHTML = req.responseText;
	}
}

//-------------------------
// position functions
//-------------------------
function insertAfter(parent, node, referenceNode){
	parent.insertBefore(node, referenceNode.nextSibling);
}
function prependChild(parent, node) {
	parent.insertBefore(node, parent.firstChild);
}

function mposx(e)
{
	var x=0;
	if (!e) var e = window.event;
	if (e.pageX) x = e.pageX;
	else if (e.clientX) x = e.clientX + document.body.scrollLeft;
	return x;
}
function mposy(e)
{
	var y=0;
	if (!e) var e = window.event;
	if (e.pageY) y = e.pageY;
	else if (e.clientX) y = e.clientY + document.body.scrollLeft;
	return y;
}

function growTo(objid,w,h) {
	var obj = ge(objid);
	var oh = obj.offsetHeight;
	var ow = obj.offsetWidth;
	var go1 = false;
	if ( oh < h ) { obj.style.height = String((oh + 20) + 'px'); go1 = true; }
	if ( ow < w ) { obj.style.width = String((ow + 20) + 'px'); go1 = true; }
	if ( go1 && ok2open ) { 
		ok2close=false;
		setTimeout("growTo('"+objid+"',"+w+","+h+")",30); 
	}
	else ok2close=true
 }

function shrinkTo(objid,w,h) {
	var obj = ge(objid);
	var go1 = false;
	if ( obj.offsetHeight > h ) { obj.style.height = String((obj.offsetHeight - 20) + 'px'); go1 = true; }
	if ( obj.offsetWidth > w ) { obj.style.width = String((obj.offsetWidth - 20) + 'px'); go1 = true; }
	if ( go1 && ok2close ) {
		//ok2open=false;
		setTimeout("shrinkTo('"+objid+"',"+w+","+h+")",30);
	} 
	else ok2open=true
}

function findX(obj) { 
	var curleft = 0;
	if ( obj.offsetParent ) {
		while ( obj.offsetParent ) {
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if ( obj.x ) { curleft += obj.x; }
	return curleft;
}
function findY(obj) { 
	var cur = 0;
	if ( obj.offsetParent ) {
		while ( obj.offsetParent ) {
			cur += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if ( obj.y ) { curleft += obj.y; }
	return cur;
}

var tableSortOrder = 'up';
function tableSort(field)
{
	var tab = field.parentNode.parentNode.parentNode;
	var thead = tab.getElementsByTagName('thead')[0];
	var tbody = tab.getElementsByTagName('tbody')[0];
	var pos = null; 
	for ( var i=0; i<thead.getElementsByTagName('th').length;i++){
		if ( thead.getElementsByTagName('th')[i]==field){
			pos=i;
			break;
		}
	}
	var comp = field.innerHTML;
	var tr = tbody.getElementsByTagName('tr');
	var rowa = new Array();
	var keya = new Array();
	for ( var j=tr.length - 1; j>=0; j--) {
		var td = tr[j].getElementsByTagName('td')[pos];
		var data = td.getAttribute('value') == undefined ? td.innerHTML : td.getAttribute('value');
		data += ':' + j;
		rowa[j] = tr[j];
		keya[j] = data.toLowerCase();
		tbody.removeChild(tr[j]);
	}
	keya.sort();
	if ( tableSortOrder=='down' ) { keya.reverse(); }
	for ( var i=0; i<keya.length; i++ ) {
		var data = keya[i].split(':');
		var key = data.pop();
		tbody.appendChild(rowa[key]);
	}
	tableSortOrder = tableSortOrder == 'up' ? 'down' : 'up';
}
