my_addClass = function(el, cn){
	var c_new = new Array();
	var cstr = el.className;
	if(cstr.indexOf(" ")>=0){
		c_new = cstr.split(" ");
		if(!c_new[cn]) c_new[c_new.length] = cn;
	}
	else{
		if(cstr) c_new[0] = cstr;
		if(cstr!=cn) c_new[c_new.length] = cn;
	}
	el.className = c_new.join(" ");
}

my_removeClass = function(el, cn){
	var c_new = new Array();
	var cstr = el.className;
	if(cstr.indexOf(" ")>=0){
		c_new = cstr.split(" ");
		if(c_new.indexOf(cn)>=0){
			c_new.splice(c_new.indexOf(cn), 1);
			el.className = c_new.join(" ");
		}
	}
	else{
		if(cstr==cn) el.className = '';
	}
}

/**
 *withEvent: if set, an event will be passed to the target function as fist argument
 *additional arguemnts (after withEvent) will be passed to the target function
 */
my_proxy = function(fn, xThis, withEvent){
	//get arguments
	var offset = (withEvent) ? 1 : 0;
	var args = new Array();
	for(var a=3;a<arguments.length;a++){
		args[offset] = arguments[a];
		offset++;
	}

	//alert(args.length);

	if(withEvent){
		return function(e){
			//args.splice(0,0,e); //add event "e" as first argument - NOT IN USE anymore
			args[0] = e;
			//var str = ''; for(j in args) str = str + "\n" + j + ': '+args[j]; alert(str); //debug
			fn.apply(xThis, args);
		}
	}
	else{
		return function(e){ fn.apply(xThis, args);}
	}
}

myAddEvent = function(element, myEvent, myFunction, capture){
	if(!capture) capture = false;
	var ev1 = myEvent; //standard compliant
	var ev2 = 'on'+myEvent; //IE

	//alert(element + "\n" + myEvent + "\n" + myFunction);
	if(element.addEventListener){	element.addEventListener(ev1, myFunction, capture);}
	else{ element.attachEvent(ev2, myFunction);}
}

//AJAX submission - handling message boxes (EMS,IMS,QMS)
function MS_displayMessage(type, text, formid){
	MS_clearMessages(formid);
	document.getElementById(type+'ms').innerHTML = text;
	document.getElementById(type+'ms').style.display = 'block';
	if(type=='i'){
		document.getElementById(formid).style.display = 'none';
	}
}

function MS_clearMessages(formid){
	if(document.getElementById('ems')!=null){
		document.getElementById('ems').style.display = 'none';
		document.getElementById('ems').innerHTML = '';
	}
	if(document.getElementById('ims')!=null){
		document.getElementById('ims').style.display = 'none';
		document.getElementById('ims').innerHTML = '';
		document.getElementById(formid).style.display = '';
	}
	if(document.getElementById('qms')!=null){
		document.getElementById('qms').style.display = 'none';
		document.getElementById('qms').innerHTML = '';
	}
}

function popUp(URL, px, py) {
	if(!px){ px = 500;}
	if(!py){ py = 300;}
	var day = new Date();
	var id = day.getTime();
	var sx = screen.width;
	var sy = screen.height;
	var posx = Math.round((sx-px)/2);
	var posy = Math.round((sy-py)/2);
	//eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width="+px+",height="+py+",left="+posx+",top="+posy+"');");
	window.open(URL, id, 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width='+px+',height='+py+',left='+posx+',top='+posy+'');
}

function stripHTML(s){
	s = s.innerHTML;
	return s.replace(/(<([^>]+)>)/g, '');
}

function getRandNumber(xMin, xMax){
	if(xMin!==false && xMax!==false && xMin<xMax){
		return Math.floor(Math.random()*(xMax-xMin+1)+xMin);
	}
	else return false;
}

//////////////////////////////////////////////////////
// GET ELEMENT BY... Functions
//////////////////////////////////////////////////////

my_GEBC = getElementsByClassName = function(cn, parent, tag){
	if(parent){ parent = (typeof(parent)=='object') ? parent : document.getElementById(parent);}
	var retVal = new Array();
	if(!tag){tag = '*';}
	if(parent){	var elements = parent.getElementsByTagName(tag);}
	else{	var elements = document.getElementsByTagName(tag);}

	var elL = elements.length;
	for(var i = 0;i < elL;i++){
		if(elements[i].className.indexOf(" ") >= 0){
			var classes = elements[i].className.split(" ");
			for(var j = 0;j < classes.length;j++){
				if(classes[j] == cn) retVal.push(elements[i]);
			}
		}
		else if(elements[i].className == cn)	retVal.push(elements[i]);
	}
	return retVal;
}

my_GEBN = function(n, parent, tag){
	if(parent){ parent = (typeof(parent)=='object') ? parent : document.getElementById(parent);}
	var retVal = new Array();
	if(!tag){tag = '*';}
	if(parent){	var elements = parent.getElementsByTagName(tag);}
	var elL = elements.length;
	for(var i = 0;i < elL;i++){
		//alert(elements[i].name + ', '+n);
		if(elements[i].name==n)	retVal.push(elements[i]);
	}
	return retVal;
}

my_GEBI = function(id, parent, tag){
	if(parent){ parent = (typeof(parent)=='object') ? parent : document.getElementById(parent);}
	if(parent){
		if(!tag) tag = '*';
		var els = parent.getElementsByTagName(tag);
		var elL = els.length;
		for(var i = 0;i < elL;i++){
			if(els[i].id==id) return els[i];
		}
	}
	else{
		return document.getElementById(id);
	}
}

my_GEBT = function(tag, parent){
	if(parent){ parent = (typeof(parent)=='object') ? parent : document.getElementById(parent);}
	if(parent){	return parent.getElementsByTagName(tag);}
	else{ return document.getElementsByTagName(tag);}
}

function my_getWidth(el, scroll){
	el = (typeof(el)=='object') ? el : document.getElementById(el);
	if(!el) el = document.body;
	var cw, sw = 0;
	cw = el.clientWidth;
	if(scroll) sw = el.scrollWidth;
	return Math.max(cw, sw);
}
function my_getHeight(el, scroll){
	el = (typeof(el)=='object') ? el : document.getElementById(el);
	if(!el) el = document.body;
	var ch, sh = 0;
	ch = el.clientHeight;
	if(scroll) sh = el.scrollHeight;
	return Math.max(ch, sh);
}
function my_centerElement(el){
	el = (typeof(el)=='object') ? el : document.getElementById(el);
	//get main element's width
	var display = el.style.display;
	var opacity = el.style.opacity;
	my_setOpacity(el, 0);
	el.style.display = 'block';
	var elW = my_getWidth(el);
	var elH = my_getHeight(el);

	el.style.display = display;
	my_setOpacity(el, opacity);

	var windowW = my_getWidth(false, true);
	var windowH = my_getHeight(false, true);

	el.style.position = 'absolute';
	if(!el.style.zIndex) el.style.zIndex = 10000;
	el.style.left = (windowW/2) - (Math.round(elW/2))+'px';
	el.style.top = (windowH/2) - (Math.round(elH/2))+'px';

	//alert(elW + "\n" + windowW + "\n" + el.style.left);
	//alert(elH + "\n" + windowH + "\n" + el.style.top);
}

function my_setOpacity(el, value){
	if(!value || value<0) value = 0;
	el = (typeof(el)=='object') ? el : document.getElementById(el);
	el.style.opacity = value;
	//var IEval = parseInt((value*100), 10);
	//if(IEval>100) IEval = 100;
	//alert(value + "\n" + IEval);
	if(g_IE_version){
		var IEval = value*100;
		el.style.filter = 'alpha(opacity='+IEval+')';
	}
}


///////////////////////////
// php.js
///////////////////////////

function in_array(needle, haystack, argStrict){
	var key = '', strict = !!argStrict;
	if (strict){
		for (key in haystack){
			if (haystack[key] === needle){ return true;}
		}
	}
	else{
		for(key in haystack){
			if (haystack[key] == needle){	return true;}
		}
	}
	return false;
}

function array_search (needle, haystack, argStrict){
	var strict = !!argStrict;
	var key = '';

	for (key in haystack){
		if((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)){ return key;}
	}
	return false;
}
