var nav = navigator.userAgent.toLowerCase();
var db = (document.compatMode && document.compatMode.toLowerCase() != "backcompat") ? document.documentElement : (document.body || null);
var op = !!(window.opera && document.getElementById);
var isIE = !!(nav.indexOf("msie") >= 0 && document.all && !op);
var cbLoading = false;


function setPointer(rowIDorObj, theRowNum, theAction, theDefaultColor, thePointerColor, theMarkColor) {
	var obj = rowIDorObj;
	var clrPattern = /^#\w{6}$/i;
	
	if (typeof(obj)!="object") {
		obj = document.getElmentById(obj);
	}
	if ((obj == null) || (theAction == "")) return false;
	
	if (theAction == "over") {
		if (!thePointerColor) {thePointerColor = 'tblRowOver';}
		if (clrPattern.test(thePointerColor)) {
			obj.style.backgroundColor = thePointerColor;
		} else {
			obj.className = thePointerColor;
		}
	} 
	else if (theAction == "out") {
		if (clrPattern.test(theDefaultColor)) {
			obj.style.backgroundColor = theDefaultColor;
		} else {
			obj.className = theDefaultColor;
		}
	} 
	else if (theAction == "click") {
		if (theMarkColor) {
			if (clrPattern.test(theMarkColor)) {
				obj.style.backgroundColor = theMarkColor;
			} else {
				obj.className = theMarkColor;
			}
		}
	}
}

function getUrl(url, options){	
	var proceed = true;
	
	if (options) {
		if (options.Confirm){
			if (!confirm(options.msg)) {
				proceed = false;
			}
		}
		else if (options.Alert){
			alert(options.msg);
		}
	}
	
	if (proceed){
		setTimeout("window.location.replace('" + url + "')",500);
	}
}

function chkObj(objOrId) {
	var result = null
	
	if (objOrId == "") return result;
	
	if (typeof(objOrId) != "object") {
		result = document.getElementById(objOrId);
	} else if (typeof(objOrId) == "object"){
		result = objOrId;
	}
	return result;
}

function strToArr(strOrArr, delim) {
	if ("string" == typeof(strOrArr)) {
		if ("" == strOrArr) {
			return false;
		} else {
			delim = delim ? delim : ",";
			if (strOrArr.indexOf(delim) > -1) {
				return strOrArr.split(delim);
			} else {
				return (new Array(strOrArr));
			}
		}
	} else if ("array" == typeof(strOrArr) || "object" == typeof(strOrArr)) {
		if (0 == strOrArr.length) {
			return false;
		} else {
			return strOrArr;
		}
	} else return false;
}

function disableChildren(rootObj, childrenArr, initRes) {
	var result = false;
	if (initRes) {return initRes;}
	childrenArr = strToArr(childrenArr)
	if (false === childrenArr || null == chkObj(rootObj)) return false;
	var rootChecked = chkObj(rootObj).checked && !chkObj(rootObj).disabled;
	
	for(var i=0;i < childrenArr.length; i++) {
		if (cbLoading) {
			//chkObj(childrenArr[i]).checked = (rootChecked && chkObj(childrenArr[i]).checked);
		} else {
			if (chkObj(childrenArr[i]) != null)	chkObj(childrenArr[i]).checked = rootChecked;
		}
		if (chkObj(childrenArr[i]) != null) chkObj(childrenArr[i]).disabled = !rootChecked;
	}
	result = true;

	return result;
}

function disableChildrenEx(rootObj, childrenNameRule, initRes) {
	var result = false;
	if (initRes) {return initRes;}
	var rootChecked = chkObj(rootObj).checked && !chkObj(rootObj).disabled;

    var regEx = new RegExp("");
    regEx.compile(childrenNameRule,"i");
    //alert(regEx);
    var inputs=document.getElementsByTagName("input");
    var event = "onclick";
	tmp = inputs.length + "\n";
    tmp += regEx + "\n";
	for(var i=0; i < inputs.length;i++ ){
	    var obj = chkObj(inputs[i]);
		if (regEx.test(obj.id)) {
            if (cbLoading) {
			    //chkObj(inputs[i]).checked = (rootChecked && chkObj(inputs[i]).checked);
    		} else {
    		    //tmp += chkObj(inputs[i]).id + "\n";
    		    if (obj != null)	{
    		        obj.checked = rootChecked;
        			if (obj[event]) obj[event]();
                }
    		}
    		if (obj != null) obj.disabled = !rootChecked;
		}
	}
    //alert(tmp);
    result = true;

	return result;
}

function callEvent(event, objArr, options) {
	var result = false;
	objArr = strToArr(objArr)
	if (false === objArr || "" == event) return false;
	
	if (options && options.loading) {cbLoading = options.loading}
    var tmp ="";
	for(var i=0;i < objArr.length; i++) {
		var obj = chkObj(objArr[i]);
		if (options && options.type && obj.type && options.type != obj.type) continue;
        //tmp += obj.type + "\n";
		if (obj != null) {
			if (obj[event]) {
				obj[event]();

			} else {
				//alert("No " + event + " on " + obj.id);
			}
		}
	}
    //alert(tmp);
	result = true;
	
	return result;
}

function callEventOnElements(event, elTagName, options) {
	var objs = document.getElementsByTagName(elTagName);
	callEvent(event, objs, options);
	cbLoading = false;
}

//съобщение за браузъра
function ShowSrvMsg(frm, ctl){
	if (frm.varMsgText) {
		if (frm.varMsgText.value != ""){
			window.alert(frm.varMsgText.value);
		}
  	}
	if (frm.varMsgCode && frm.varMsgCode.value != ""){
		ctl = document.getElementById(frm.varMsgCode.value);
	}
	if (ctl && !ctl.disabled){
		ctl.focus();
	}
}

function preloadImages() {
  var d=document; 
  
  if(d.images){ 
	if(!d.arrImgs) d.arrImgs=new Array();
	var i,j = d.arrImgs.length;
	var a = preloadImages.arguments; 
	
	for(i=0; i<a.length; i++) {
		if (a[i].indexOf("#")!=0){ 
			d.arrImgs[j]=new Image; 
			d.arrImgs[j++].src=a[i];
		}
	}
  }
}

function toggleVis(obj, options) {
    objs = strToArr(obj);
	if (!objs) return false;

    for (var i=0; i<objs.length; i++){
        obj = chkObj(objs[i]);
        if (null != obj) {
            if (obj.style.display == "none") {
		        obj.style.display = "block";
      	    } else {
      		    obj.style.display = "none";
	        }
        }
    }

    if (options) {
        if (options.img && options.img_from && options.img_to){
            var img = chkObj(options.img);

            if (img.src.indexOf(options.img_from) > -1) {
            	img.src = options.img_to;
            } else {
            	img.src = options.img_from;
            }
        }
        if (options.value != undefined) {
            if (options.value === true) {
                obj.style.display = "block";
            } else {
                obj.style.display = "none";
            }
        }

    }

	return true;
}

function getInputLabel(el){
	if (el.parentElement) {
		if(/label/i.test(el.parentElement.tagName)) {
			var lbl = el.parentElement.innerHTML.match(/[^:]*/i);
			return lbl[0];
		};
	}
	var labels=document.getElementsByTagName("label");
	//tmp = "";
	for(var i=0; i<labels.length;i++ ){
		//tmp += el.id + ":" + labels[i].htmlFor + "\n"
		if(labels[i].htmlFor == el.id) {
			var lbl = labels[i].innerHTML.match(/[^:]*/i);
			retval = lbl[0].replace("&nbsp;","");
			return retval;
		}
	}
	return "";
}

function submitFrm(form){
	if (!isIE) {
		if (form.onsubmit()) form.submit();
	} else {
		if (form.onsubmit()) setTimeout("document." + form.name + ".submit()",100);
		return false;
	}
}

function selectRow(value, options) {
	var retval = false;
	
	if (!options) return retval;
	
	if (options.id && options.objs) {
		var objsArr = strToArr(options.objs);
		
		if (value) {
			chkObj(objsArr[0] + "_" + options.id).className = "tblRowSelected";
			if(chkObj(objsArr[1] + "_" + options.id)) chkObj(objsArr[1] + "_" + options.id).style.display = "block";
		} else {
			chkObj(objsArr[0] + "_" + options.id).className = "";
			if (chkObj(objsArr[1] + "_" + options.id)) chkObj(objsArr[1] + "_" + options.id).style.display = "none";
		}
		retval = true;
	} else {
		retval = false;
	}
	
	return retval;
}

function popUp(url, winwidth, winheight) {
    option = "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0" +
    		 ",top=" + (screen.height - winheight)/2 +
    		 ",left=" + (screen.width - winwidth)/2 +
    		 ",width=" + winwidth + ",height=" + winheight;
    window.open(url, "", option);
}

function addRemoveFromString(str, inputObj, add) {
    if ("" == str || null == chkObj(inputObj)) return false;

    var regEx = new RegExp("");
    regEx.compile(str + "[\s]*[,]{0,1}","gi");
    //var regEx = /001[\s]*[,]{0,1}/i;
    var obj = chkObj(inputObj)
    var val = obj.value;

    if (!add) {
        val = val.replace(regEx, "");
    } else {
        if (/[,]+/i.test(val)) {
            val = val + str + ","
        } else {
            if (val != "") {
                val = val + "," + str + ",";
            } else {
                val = str + ",";
            }
        }
    }
    var arr = val.split(",");

    function doCompare(a, b) {
        return a - b
    }
    arr.sort(doCompare);
    //alert(arr[0]);
    //val = arr.join(",");
    //if ()

    obj.value = val;
    return true;
}
function enumCB(pattern, outputObj){

    var output = chkObj(outputObj);
    if (output == null) return false;

    var regEx = new RegExp("");
    regEx.compile(pattern,"i");
    //alert(regEx);
    var inputs=document.getElementsByTagName("input");
    var event = "onclick";
	tmp = inputs.length + "\n";
    tmp += regEx + "\n";
    var res = "";
	for(var i=0; i < inputs.length;i++ ){
	    var obj = chkObj(inputs[i]);
		if (regEx.test(obj.id)) {
            if (cbLoading) {
			    //chkObj(inputs[i]).checked = (rootChecked && chkObj(inputs[i]).checked);
    		} else {
    		    //tmp += chkObj(inputs[i]).id + "\n";
    		    if ((obj != null) && (obj.checked) && (obj.checked == true)){
    		        if (res == "") {
    		            res = obj.value;
    		        } else {
    		            res += "," + obj.value;
                    }
                }
    		}
    		//if (obj != null) obj.disabled = !rootChecked;
		}
	}
    output.value = res;
    //alert(tmp);
    result = true;

	return result;
}

function enumInput(pattern, callbackFunc){
    if (pattern == "") return false;

    var regEx = new RegExp("");
    regEx.compile(pattern,"i");
    //alert(regEx);
    var inputs=document.getElementsByTagName("input");
    var res = "";
	for(var i=0; i < inputs.length;i++ ){
	    var obj = chkObj(inputs[i]);
		if (regEx.test(obj.id)) {
  		    if (obj != null){
                if (callbackFunc != null) callbackFunc(obj);
            }
		}
	}

	return true;
}

/**
* changeInputStyle(sTypePattern, options)
* 
* @param sTypePattern - regular expression
* @param options - object {css_focused:"input_focused", tagName:"input"}
*
* searches the document for inputs of type sTypePattern
* in order for the function to work it needs to have 
* a css style of type class ".input_focused" 
**/

function changeInputStyle(sTypePattern, options) {
	if (!isIE) return true;
	if (sTypePattern == "") return false;

    var regEx = new RegExp("");
    regEx.compile(sTypePattern,"i");
	var tagName = (options && options.tagName)?options.tagName:"input";
	if (document.getElementsByTagName) {
		var objs = document.getElementsByTagName(tagName);
	} else {
		return false;
	}
	
	css_focused = (options && options.css_focused)?options.css_focused:"input_focused";
	//css_over = (options && options.css_over)?options.css_over:"input_over";
	
	for(var i=0; i < objs.length; i++) {
		var e = objs[i];
		if (e.type && regEx.test(e.type)) {
			e.onfocus = function(){
				if (!this.oldClassName) this.oldClassName = this.className;
				this.className = this.oldClassName + " " + css_focused;
			}
			
			e.onblur = function(){
				if (this.oldClassName) this.className = this.oldClassName;
				this.oldClassName = false;
			}
			/*
			e.onmouseover = function(){
				if (!this.oldClassName) this.oldClassName = this.className;
				this.className = this.oldClassName + " " + css_over;
			}
			
			e.onmouseout = function(){
				if (this.oldClassName) this.className = this.oldClassName;
				this.oldClassName = false;
			}
			*/
		}
	}
}

function inputBtnHover(obj, override) {
	obj = chkObj(obj);
	if (obj == null) return false;
	
	if (obj.className == "") return false;
	
	if ((obj.className.indexOf("hover") > 0) || !override) {
		obj.className.replace("/[\s]+hover/i","");
	} else {
		obj.className += " hover";
	}
}

/* quick getElement reference */
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;
}