/*custom javascript DOM and Object handling*/
function objEqual(objA,objB) {
	if (typeof objA=="object" && typeof objB=="object" && objA===objB) {
		return true;
	}
	return false;
}

function arrayEqual(arrayA,arrayB,checkparam) {
    var matchcount=0;
	if (arrayA && arrayA.length && arrayB && arrayB.length && arrayA.length==arrayB.length)
    {
        for (var i=0;i<arrayA.length;i++)
        {
            switch (checkparam)
            {
                case "value":
                    if (arrayA[i].value===arrayB[i].value) matchcount++;
                break;
                default:
                    if (arrayA[i]===arrayB[i]) matchcount++;
                break;
            }
        }
		if (matchcount==arrayA.length)return true;
	}
	return false;
}

function makeRegExpFromString(str) {
	str=str.replace(/[\d]/g,'c?\\d+');
	str=str.replace(/\[/g,'\\[');
	str=str.replace(/\]/g,'\\]');
	return new RegExp("^"+str+"$");
}
Array.prototype.inArray = function (value)
{
    for (var i=0; i < this.length; i++)
	{
        if (this[i] === value)
		{
            return true;
        }
    }
    return false;
}

function setBodyBgColor(document,color_name) {
    var body=document.body;
    if ('undefined'!=typeof body.style.backgroundColor)
        body.style.backgroundColor=color_name; // Mozilla
    if ('undefined'!=typeof body.style.bgColor)
        body.style.bgColor=color_name; // FIXME: test in Internet Explorer
}




//tells you whether you got an obj., or only the id of the obj.; and gives the obj reference
function getObjfromIdorObj(obj)
{
	if (typeof obj=="object")return obj;
	else if (typeof obj=="string" && document.getElementById(obj))return document.getElementById(obj);
	return false;
}





//set, get, check INPUT items
function clearValue(obj,defval) {
	if (getValue(obj)==defval) {
		setValue(obj,'',defval);
	}
}
function unClearValue(obj) {
	if (getValue(obj)=='' && obj.o_value && typeof obj.o_value!="undefined") {
		obj.value=obj.o_value;
	}
}
function getValue(obj)
{
    var obj=getObjfromIdorObj(obj);
    if (obj)return obj.value;
    return false;
}
function setValue(id,val)
{
    var obj=getObjfromIdorObj(id);
    //if (!obj)alert("setValue - Nics ilyen objektum: "+id,1);
    if (obj.tagName=="INPUT"){setInputValue(obj,val);}
    else {setInnerHTML(obj,val);}
}
function setInnerHTML(obj,val)
{
    var obj=getObjfromIdorObj(obj);
    if (obj) obj.innerHTML = (val!="null" && val) ? val : '&nbsp;';
}
function setInputValue(obj,val)
{
    var obj=getObjfromIdorObj(obj);
    if (obj) {
		obj.o_value=obj.value;
		obj.value=(val!="null")?val:'';
	}
}

function setLink(obj,href)
{
    var obj=getObjfromIdorObj(obj);
    if (obj)
    {
        obj.href=href;
    }
	return true;
}




function showObj(obj,show)
{
    if (typeof show=='undefined') show='';
    closeObj(obj,show);
}

function closeObj(obj,show)
{
    if (typeof show=='undefined') show='none';
    var obj=getObjfromIdorObj(obj);
    if (obj)
    {
        obj.style.display=show;
    }
}

function setAction(obj,action2,dontsubmit)
{
    var obj=getObjfromIdorObj(obj);
    if (obj)
    {
        obj.action=action2;
        if (dontsubmit===false || dontsubmit===0) obj.submit();
    }
	return true;
}




function disable(id, value, toggle)
{
    elem = getObjfromIdorObj(id);
    if (elem)
    {
        if (toggle==1) elem.disabled = elem.disabled ? false : true;
        else elem.disabled = value;
//    	setClassDisabled(id,value);
    }
}

//CLASS concatenating, and original/base
function setClassOld(id,to,time)
{
	elem=getObjfromIdorObj(id);
	if (id && elem)
	{
        if (!elem.origClassName)elem.origClassName=(typeof to!="undefined")?to:elem.className
	}
}
function setClassBaseRoot(id) {
	elem=getObjfromIdorObj(id);
	if (id && elem)
	{
		elem.className=elem.origClassName?elem.origClassName:getClassBaseRoot(elem.className);
		inputClassBeingErrored[elem.name]=null;
	}
}
function getClassBaseRoot(str) {
	if (typeof str!="string") return null;
        var dash=str.indexOf('-');
        if (dash!=-1)
        {
            str=str.substring(0, dash);
        }
        else
        {
            str=str;
        }
		return str;
}
function setClass2Something(id,setto,checkifclasswereset) {
	elem=getObjfromIdorObj(id);
	if (id && elem)
	{
		if (checkifclasswereset==1 && elem.className!=getClassBaseRoot(elem.className))return false;
		elem.className=getClass2Something(elem.className,setto);
	}
}
function getClass2Something(str,setto) {
	if (setto=="" || typeof setto=="undefined")return getClassBaseRoot(str);
	else return getClassBaseRoot(str)+"-"+setto;
}

function setClassHover(id) {
	elem=getObjfromIdorObj(id);
	if (id && elem)
	{
		if (elem.className.match(/\-error$/))return false;
		elem.className=getClassHover(elem.className);
	}
}

function getClassHover(str) {
	return getClassBaseRoot(str)+"-hover";
}

function setClassUnHover(id) {
	elem=getObjfromIdorObj(id);
	if (id && elem)
	{
		if (elem.className.match(/\-error$/))return false;
		setClassBaseRoot(id);
	}
}

function setClassDisabled(id,disabled) {
	elem=getObjfromIdorObj(id);
	if (id && elem)
	{
		elem.className=getClassDisabled(elem.className,disabled);
	}
}
function getClassDisabled(str,disabled) {
	if (disabled=="switchingback" && str.indexOf("disabled")!=-1)return getClassBaseRoot(str);
	else if (disabled=="switchingback" && str.indexOf("disabled")==-1)return getClassBaseRoot(str);
	else if (disabled==false)return getClassBaseRoot(str);
	else return getClassBaseRoot(str)+"-disabled";
}

var inputClassBeingErrored=new Array();
function setClassError(id) {
	//FIXME: make an Array with all the current *-error CSS classes, and refer from isitValidating()
	elem=getObjfromIdorObj(id);
	if (id && elem)
	{
		inputClassBeingErrored[elem.name]=true;
		elem.className=getClassError(elem.className);
	}	
}
function isitClassError(obj) {
	obj=getObjfromIdorObj(obj);
	return obj.className.match(/\-error$/);
/*	if (!obj)return false;
	return (inputClassBeingErrored[obj.name]===true)?true:false;*/
}
function getClassError(str) {
	return getClassBaseRoot(str)+"-error";
}










var focusedOneElementNow=null;
function looseFocus() {
	focusedOneElementNow=null;
}
function itemFocused(obj) {
    focusedOneElementNow=getObjfromIdorObj(obj);
}
function getFocused() {
	if (getObjfromIdorObj(focusedOneElementNow))return focusedOneElementNow;
	return null;
}
function isitFocused(obj) {
	objOk=getObjfromIdorObj(obj);
	if (objOk && objEqual(objOk,focusedOneElementNow))
	{
		return true;
	}
	return false;
}
function isthisRowFocused(id)
{
    obj=getObjfromIdorObj(id);
    var inputs=obj.getElementsByTagName('input');
    for (i=0;i<inputs.length;i++)
    {
        if (isitFocused(inputs[i]))	return true;
    }
    return false;
}

var setFocusTimeVar=null;
function setFocusTime() {
	if (setFocusTimeVar && setFocusTimeVar.focus && setFocusTimeVar.disabled==false)setFocusTimeVar.focus();
	else if (setFocusTimeVar.disabled==true)//this is because of strange disable onthefly inputs by checkboxes
    {
        setValidating(null);
        hideTooltip();
    }
}
function setFocus(obj,sureagain) {
	objOk=getObjfromIdorObj(obj);
	if (objOk && objOk.focus && objOk.disabled==false)
	{
//        showAllParentsOfInput(objOk);//open all
		objOk.focus();
		if (sureagain==1)//under FF need to be refocusd after onblur
        {
			setFocusTimeVar=objOk;
			setTimeout("setFocusTime()",100);
		}
		return true;
	}
	return false;
}






function showAllParentsOfInput(obj, formObj)
{
    var obj=getObjfromIdorObj(obj);
	if (!obj || !obj.parentNode) return false;
	while (! (objEqual(obj.parentNode,formObj) || !obj || !obj.parentNode) )
	{
        if (obj.style.display=='none')obj.style.display = "";
		obj=obj.parentNode;
    }
}



function getMaxWidth(realbodysize)
{
    var width=(typeof document.body.clientWidth!="undefined"?document.body.clientWidth:document.width);
    if (realbodysize!=true && realbodysize!=1) {
        if (width<1024)width=1024;
        if (width>1200)width=1200;
    }
    return width;
}
function getMaxHeight(realbodysize)
{
	clearTimeout(window.timeout_getMaxHeight);
    var docheight=(typeof document.body.clientHeight!="undefined"?document.body.clientHeight:document.height);
    if (realbodysize!=true && realbodysize!=1) {
		if (getObjfromIdorObj('documentbottom')) {
			var lasttag=getAnchorPosition('documentbottom').y+27;
			if (docheight<lasttag) docheight = lasttag;
		} else {
			docheight+=document.body.scrollTop;
		}
    }
    return docheight;
}

function openNewWindow(src,target,prop)
{
    return window.open(src,target, (typeof prop!="undefined") ? prop : 'statusbar=yes, menubar=yes, scrollbars=yes, status=yes, location=yes, toolbar=yes, resizable=yes, height='+getMaxHeight(true)+',width='+getMaxWidth()+',left=0,top=0');
}


function number_format(number, decimals, point, separator)
		{
			if(!isNaN(number))
			{
				point = point ? point : '.';
				number = number.split('.');
				if(separator)
				{
					var tmp_number = new Array();
					for(var i = number[0].length, j = 0; i > 0; i -= 3)
					{
						var pos = i > 0 ? i - 3 : i;
						tmp_number[j++] = number[0].substring(i, pos);
					}
					number[0] = tmp_number.reverse().join(separator);
				}
				
				if(decimals && number[1]) 
					number[1] = number[1].substr(0,decimals);
//					number[1] = Math.round(parseFloat(number[1].substr(0, decimals) + '.' + number[1].substr(decimals, number[1].length), 10));
				return(number.join(point));
			}
			else return("0");
		}




/**
 * dontshow elements (used for selects) during popup
 */
function showHideElementsInObj(type,rootObj,setto)
{
    if (!rootObj) rootObj=document.body;
    rootObj=getObjfromIdorObj(rootObj);
    var elems = rootObj.getElementsByTagName(type);
    for(var i=0; i<elems.length; i++)
    {
        if (setto && typeof setto!='undefined') elems[i].style.visibility=setto;
        else elems[i].style.visibility = ((elems[i].style.visibility=='hidden') ? 'visible' : 'hidden');
    }
}


function getBrowserType(isbrowser)
{
    var browser;
	if (document.all)browser="ie";
//	if (document.layers)return "ff";
	else browser="ff";
	if (typeof isbrowser=='undefined')return browser;
	else return (isbrowser===browser?true:false);
}
