function getElementsByClass(searchClass,node,tag)
{
	var classElements = new Array();
	if ( node == null ) node = document;
	if ( tag == null ) tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (var i = 0, j = 0; i < elsLen; i++)
	{
		if ( pattern.test(els[i].className) )
		{
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function removeChildren(n)
{
	if(typeof(n)=="string") n = $(n);
	var len = n.childNodes.length;
	for(var i=len-1; i>=0; i--)
	{
		n.removeChild(n.childNodes[i]);
	}
}

function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

function appendTextNode(appendTo,txt)
{
	var s = txt.indexOf("<");
	var left, mid, right;
	if(s==-1)
	{
		left = txt;
		if(left.length>0) appendTo.appendChild(document.createTextNode(left));
	}
	else
	{
		var e = txt.indexOf(">",s);
		if(e==-1)
		{
			left = txt;
			if(left.length>0) appendTo.appendChild(document.createTextNode(left));
		}
		else
		{
			left = txt.substring(0,s);
			if(left.length>0) appendTo.appendChild(document.createTextNode(left));
			mid = txt.substring(s+1,e);
			right = txt.substring(e+1);
			
			var z = mid.split(" ");
			var type = z[0];
			var nodeclass="";
			var nodeid="";
			var fields="";
			var textnode="";
			for(var j=1; j<z.length; j++)
			{
				//var field = z[j].split("=");
				var q = z[j].indexOf("=");
				if(q!=-1)
				{
					var f = z[j].substr(0,q);
					var v = z[j].substr(q+1);
					if((v.substr(0,1)=="'" || v.substr(0,1)=='"')  && (v.substr(v.length-1,1)!="'" && v.substr(v.length-1,1)!='"'))
					{
						for(j=j+1; j<z.length; j++)
						{
							v += " "+z[j];
							if((v.substr(v.length-1,1)=="'" || v.substr(v.length-1,1)=='"')) break;
						}
					}
					if((v.substr(0,1)=="'" || v.substr(0,1)=='"')  && (v.substr(v.length-1,1)=="'" || v.substr(v.length-1,1)=='"')) v = v.substr(1,v.length-2);
					f = f.replace(/'/g,"\\'");
					v = v.replace(/'/g,"\\'");
					if(f=="class") nodeclass=v;
					else if(f=="id") nodeid=v;
					else fields +=",'"+f+"','"+v+"'";
				}
			}
			var f = new Function("appendTo","return createElement('"+type+"','"+nodeclass+"','"+nodeid+"','',appendTo"+fields+")");
			var el = f(appendTo);
			var str = "</"+type+">";
			var e = right.indexOf(str)
			if(e!=-1)
			{
				left = right.substring(0,e);
				if(left.length>0) appendTextNode(el,left);
				right = right.substring(e+str.length);
				if(right.length>0) appendTextNode(appendTo,right);
			}
			else
			{
				if(right.length>0) appendTextNode(appendTo,right);
			}
		}
	}
}

function createElement(type,cl,id,childTextNode,appendTo)
{
	if(typeof(appendTo)=="string") appendTo = $(appendTo);
	if(type=="text")
	{
		var e = document.createTextNode(childTextNode);
		if(appendTo) appendTo.appendChild(e);
		return e;
	}
	else if(type=="button")
	{
		var e = document.createElement("a");
		e.className = "button "+cl;
		if(id) e.setAttribute("id",id);
		var s = document.createElement("span");
		if(id) s.setAttribute("id",id+"_txt");
		e.appendChild(s);
		if(childTextNode) (typeof(childTextNode)=="string"?s.appendChild(document.createTextNode(childTextNode)):s.appendChild(childTextNode));
		//if(childTextNode) s.appendChild(document.createTextNode(childTextNode));
		if(arguments.length>5) e.setAttribute("href",arguments[5]?arguments[5]:"javascript:void(0)");
		if(arguments.length>6) e.onclick = new Function("this.blur(); "+arguments[6]);
		for(var i=7; i<arguments.length; i+=2)
		{
			if(arguments[i] && arguments[i+1]) e[arguments[i]] = arguments[i+1];
		}
		if(appendTo) appendTo.appendChild(e);
		return e;
	}
	else if(type=="box")
	{
		var e = document.createElement("span");
		e.className = "button "+cl;
		if(id) e.setAttribute("id",id);
		var s = document.createElement("span");
		if(arguments.length>5 && arguments[5]!="") s.className = arguments[5]+"_txt";
		if(id) s.setAttribute("id",id+"_txt");
		e.appendChild(s);
		if(childTextNode) (typeof(childTextNode)=="string"?s.appendChild(document.createTextNode(childTextNode)):s.appendChild(childTextNode));
		for(var i=6; i<arguments.length; i+=2)
		{
			if(arguments[i] && arguments[i+1]) e[arguments[i]] = arguments[i+1];
		}
		if(appendTo) appendTo.appendChild(e);
		return e;
	}
	else
	{
		var e = document.createElement(type);
		if(cl) e.className = cl;
		if(id) e.setAttribute("id",id);
		if(childTextNode) (typeof(childTextNode)=="string"||typeof(childTextNode)=="number"?e.appendChild(document.createTextNode(childTextNode)):e.appendChild(childTextNode));
		for(var i=5; i<arguments.length; i+=2)
		{
			if(arguments[i] && arguments[i+1])
			{
				if(arguments[i]=="onclick")
				{
					e.onclick = new Function("this.blur(); "+arguments[i+1]);
				}
				else
				{
					e.setAttribute(arguments[i],arguments[i+1]);
					e[arguments[i]] = arguments[i+1];
				}
			}
		}
		if(appendTo) appendTo.appendChild(e);
		return e;
	}
}

function setClass(el, classAdd, classRemove)
{
	if(typeof(el)=="string") el = $(el);
	if(el)
	{
		var cl = el.className;
		cl = cl.split(" ");
		var cl2 = "";
		for(var i=0; i<cl.length; i++)
		{
			if(cl[i]!=classRemove) cl2+=cl[i]+" ";
			if(cl[i]==classAdd) classAdd = "";
		}
		if(classAdd!="") cl2+=classAdd;
		el.className = cl2;
		if(cl=="visibletab") // IE bug
		{
			el.style.visibility = 'visible';
		}
	}
}

function firstFormElement(p)
{
	var c = p.firstChild;
	var first = false;
	while(c)
	{
		if(c.nodeName=="INPUT" || c.nodeName=="SELECT" || c.nodeName=="TEXTAREA")
		{
			if(!first) first = c;
			if(c.value=="") return c;
		}
		var n = firstFormElement(c);
		if(n)
		{
			if(!first) first = c;
			if(n && n.value=="") return n;
		}
		c = c.nextSibling;
	}
	return first;
}

function popup(name,show)
{
	if(show)
	{
		setVisibility("popup_outer_"+name,'visible');
		var p = $(name);
		var e = firstFormElement(p);
		if(e) e.focus();
	}
	else
	{
		setVisibility("popup_outer_"+name,'hidden');
	}
}

function setVisibility(id,visibility,toggleabsolute)
{
	if(!$(id)) return;
	$(id).style.visibility = visibility;
	if(visibility=='hidden')
	{
		$(id).style.left = '-10000px';
		$(id).style.top = '-10000px';
		if(toggleabsolute) $(id).style.position = 'absolute';
	}
	else
	{
		$(id).style.left = '0';
		$(id).style.top = '0';
		if(toggleabsolute) $(id).style.position = 'relative';
	}
}

function disableButton(b)
{
	if(typeof(b)=="string")
	{
		if(!$(b)) return;
		b = $(b);
	}
	var click = $(b).onclick;
	var clack = $(b).onclack;
	$(b).onclack = (click==""?clack:click);
	$(b).onclick = "";
	setClass(b,"disabledbutton","");
}

function enableButton(b)
{
	if(typeof(b)=="string")
	{
		if(!$(b)) return;
		b = $(b);
	}
	var click = $(b).onclick;
	var clack = $(b).onclack;
	$(b).onclick = (click==""?clack:click);
	setClass(b,"","disabledbutton");
}

function infoBox(info,ok,js,timeout)
{
	document.getElementById("infobox_text").innerHTML = info;
	popup("infobox",1);
	if(js)
	{
		document.getElementById("infoboxOK").onclick= js;
	}
	else
	{
		document.getElementById("infoboxOK").onclick= function() { infoBoxOK(); }
	}
	
	if(ok<0)
	{
		document.getElementById("infoboxOK").style.visibility = "hidden";
		document.getElementById("infoboxOK").style.position = "absolute";
	}
	else
	{
		if(ok=="" || !ok)  document.getElementById("infoboxOK_txt").innerHTML = "OK";
		else document.getElementById("infoboxOK_txt").innerHTML = ok;
		
		document.getElementById("infoboxOK").style.visibility = "visible";
		document.getElementById("infoboxOK").style.position = "relative";
	}
	
	if(timeout>0) setTimeout("infoBoxOK()",Math.abs(ok)*1000);
}

function infoBoxOK()
{
	popup("infobox",0);
}

function replaceAll( str, from, to ) {

        var s = "";
        while(s!=str)
        {
                s = str;
        str = str.replace( RegExp(from), to );
    }


    return str;
}
