	var LF = String.fromCharCode(13) + String.fromCharCode(10);
	var DOWN_AREA_SIGN = "!DOWN_AREA_SIGN!";
	var SAPORATOR = "*|*";
	var SAPORATOR2 = "#|#";
	var SAPORATOR3 = "!|!";

	function isIE(){
        if(document.all) return(true);
        else return(false);
    }
	
	/////////////////////////////////////////////////////////////////////
	var arVersion = navigator.appVersion.split("MSIE")
	var version = parseFloat(arVersion[1])

	function fixPNG(myImage){
			if ((version >= 5.5) && (version < 7) && (document.body.filters)){
				var imgID = (myImage.id) ? "id='" + myImage.id + "' " : ""
				var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : ""
				var imgTitle = (myImage.title) ? "title='" + myImage.title  + "' " : "title='" + myImage.alt + "' "
				var imgStyle = "display:inline-block;" + myImage.style.cssText
				var strNewHTML = "<span " + imgID + imgClass + imgTitle
					+ " style=\"" + "width:" + myImage.width 
					+ "px; height:" + myImage.height 
					+ "px;" + imgStyle + ";"
					+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
					+ "(src=\'" + myImage.src + "\', sizingMethod='scale');\"></span>"
				myImage.outerHTML = strNewHTML	  
			}
	}
	
	////////////////////////////////////////////////////////////	
	function getViewSize(){ //get view area sizes
		var viewSize = {vWidth:0, vHeight:0};
             
		//firefox
        if(typeof window.innerWidth != 'undefined'){
            viewSize.vWidth = window.innerWidth;
            viewSize.vHeight = window.innerHeight;
        }          
        //explorer
        else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0){                         
			viewSize.vWidth = document.documentElement.clientWidth;
            viewSize.vHeight = document.documentElement.clientHeight;
        }
        //older explorer
        else{
            viewSize.vWidth = document.getElementsByTagName('body')[0].clientWidth;
            viewSize.vHeight = document.getElementsByTagName('body')[0].clientHeight;
            }
	    return viewSize;
    }
	
/////////////////////////////////////////////////////////
	//onError function
//	onerror=handleErr
	function handleErr(msg,url,l){
	  var str="Error!!";
	  //str+="\\nFile: " + url;
	  str+="\n\nLine: " + l;
	  str+="\n\n"+msg;
	  alert(str);
	return(true);
	}

/////////////////////////////////////////////   		
	//for tracing
	
	document.write("<div id=\"traceDiv\" style=\"position:absolute;width:250px;height:300px;top:100;left:700;display:none\"></div>");
	
	var traceNum = 0;
	function trace(text){
		//return(false); //remove me
		var div;
		placeX = 700;
		if(arguments.length>1) placeX = arguments[1]; 
		
		div = document.getElementById("traceDiv");
		if(!div){
			alert(text);
			return(false);
		}	
		traceNum ++;
		div.style.backgroundColor = "#B9DBF0";
		div.style.background = "#B9DBF0";
		div.style.display = "";
		div.style.left = placeX;		
		div.innerHTML = "<br>" + traceNum + ":&nbsp;&nbsp;" + text + div.innerHTML;
	}
	
	function clearTrace(){
		var div;
		div = getElement("traceDiv");
		if(!div) return(false);		
		div.innerHTML = "";
		traceNum = 0;
	}
	
		
/////////////////////////////////////////////////////////	
	
    function getElement(objectName){
	   var obj = document.getElementById(objectName);
	   if(!obj){
 	      alert(objectName + " error - no object");
		  return(false);
	   }
	   return(obj)
	}

/////////////////////////////////////////////////// 

    function getElements(objectName){
	   var obj = document.getElementsByName(objectName);
	   if(!obj){
 	      alert(objectName + " error - no object");
		  return(false);
	   }
	   return(obj)
	}
	
/////////////////////////////////////////////////// 
	
	function displayElement(elementID,show){
		if(typeof show == "undefined") var show = true;
		var el = getElement(elementID);
		if(!el) return(false);
		
		if(show == true) el.style.display = "";
		else if(show == false) el.style.display = "none";
	}
	
	/////////////////////////////////////////////////// 
	
	function focusElement(elementID){
		var el = getElement(elementID);
		if(!el) return(false);
		el.focus();
	}
	
	/////////////////////////////////////////////////// 
	
	function enableElement(elementID,show){				
		if(typeof show == "undefined") var show = true;
		var el = getElement(elementID);		
		if(!el) return(false);
		el.disabled = (!show);		
	}
	
//////////////////////////////////////////////////////////////////////////////	

    function valueElement(objectName,text){
	   var obj = document.getElementById(objectName);
	   if(!obj){
 	      alert(objectName + "error - no object");
		  return(false);
	   }
	   
	   if(obj.tagName == "TD" || obj.tagName == "DIV") obj.innerHTML = text;
		else obj.value = text;
		
	   return(obj)
	}
	
//////////////////////////////////////////////////////////////////////////////	
	//validate the name field:
	function validateName(textboxID,fieldName){	
		var textbox = getElement(textboxID),displayName;
		if(textbox.value.length==0){
			displayName = "";
			if(fieldName != undefined) displayName = " '" + fieldName + "'";
			alert("The field" + displayName + " should not be empty");
			textbox.focus();
			return(false);
		}
				
		if(textbox.value.indexOf(SAPORATOR,0)>=0){
			alert("the field should not contain those sequences: " + SAPORATOR);
			textbox.focus();
			return(false);			
		}		
		return(true);
	}
	
//////////////////////////////////////////////////////////////////////////////	
	//validate the email field:
	function validateEmail(textboxID,fieldName){
		var emailField = getElement(textboxID),displayName;
		if(emailField.value.length == 0) return(true);
		if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(emailField.value)) return(true);
		else{
			displayName = "";
			if(fieldName != undefined) displayName = " '" + fieldName + "'";
			alert("The field" + displayName + " is invalid email");
			emailField.focus();
			return(false);			
		}
	}
	
//////////////////////////////////////////////////////////////////////////////	
	//validate the name field:
	function validateNumber(textboxID){
		var fieldValue;
		var textbox = getElement(textboxID);
		if(textbox.value.length==0 || isNaN(Number(textbox.value))){
			fieldValue = "";
			if(arguments.length==2) fieldValue = ": '" + arguments[1] + "' ";
			alert("The field"+fieldValue+" should be a numeric");
			textbox.focus();
			return(false);
		}
		return(true);
	}


function validateDate(dateFieldID){
	var dat,arrDate,temp,sap,RegExPattern,textbox,fieldText;
	textbox = getElement(dateFieldID);
	RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
	dat = textbox.value;
	sap = "";
	//switch months with days, and validate the date.
	if(dat.length>3){
		if(dat.indexOf(":")>=0) sap = ":";
		else if(dat.indexOf("-")>=0) sap = "-";
		else if(dat.indexOf(".")>=0) sap = ".";
		else if(dat.indexOf("/")>=0) sap = "/";
		if(sap.length>0){
			arrDate = dat.split(sap);
			if(arrDate.length == 3){
				temp = arrDate[1];
				arrDate[1] = arrDate[0];
				arrDate[0] = temp;
				dat = arrDate[0] + sap + arrDate[1] + sap + arrDate[2];
				if(dat.match(RegExPattern)) return(true);
			}
		}
	}	//in case of wrong date:
	
	fieldText = "";
	if(arguments.length == 2) fieldText = " in field: '" + arguments[1] + "' ";
	alert("Date "+fieldText+" is wrong , should be in format dd/mm/yyyy!!! and have the correct day/month/year values.");
	textbox.focus();
	return(false);
}
	
	///////////////////////////////////////////////////////////////////////////
	// replace special sign by line feed sign in every arr field
	function replaceLF(str){
		while(str.indexOf(DOWN_AREA_SIGN)!=-1) str = str.replace(DOWN_AREA_SIGN,LF);
		return(str);
	}
	
	function replaceAll(str,sign1,sign2){
		str = String(str);
		while(str.indexOf(sign1)!=-1) str = str.replace(sign1,sign2);		
		return(str);		
	}
	
	//------------------------ select fuinctions -----------------------------------------
	
	//////////////////////////////////////////////////////////////////////////////
	// return selected option of select box
	function getSelectedOption(selectID){
		var i,selectedOption,select;
		selectedOption = false;
		select = getElement(selectID);
		for(i=0;i<select.options.length;i++) 
			if(select.options[i].selected){ selectedOption = select.options[i];}			
		return(selectedOption);
	}
	
	
	//////////////////////////////////////////////////////////////////////////////
	// deselect all options from select
	function unselectAllMultiple(selectID){
		var i,select;
		select = getElement(selectID);
		for(i=0;i<select.options.length;i++) select.options[i].selected = false;
	}
	
	//////////////////////////////////////////////////////////////////////////////
	// select multiple items by value
	function selectMultiple(selectID,values,sap){
		var i,select,arrValues,value;
		values = String(values);
		select = getElement(selectID);
		if(values.length == 0) return(false);
		arrValues = values.split(sap);
		if(arrValues.length == 0) return(false);
		for(i=0;i<select.options.length;i++){
			//trace(select.options[i].value);
			//trace(arrValues[0]);			
			for(j=0;j<arrValues.length;j++){
				if(select.options[i].value == arrValues[j]) select.options[i].selected = true;
			}
		}		
	}
	
	//////////////////////////////////////////////////////////////////////////////
	// get the values coma saporated by saporator, or by coma. default - coma. if none - return false
	// if 3-th argument will be "names" - retrieve names.
	function getMultipleSelectValues(selectID,sap){
		var values,i,select,flagNames = false;
		if(arguments.length == 3 && arguments[2] == "names") flagNames = true;
		if(typeof sap != "string") var sap = ",";
		select = getElement(selectID);
		values = "";
		for(i=0;i<select.options.length;i++) 
			if(select.options[i].selected){ 
				if(values.length>0) values += sap;
				if(flagNames) values += select.options[i].text;
				else values += select.options[i].value;
			}
		return(values);
	}
	
/////////////////////////////////////////////   	
	//remove all items from a select
	function clearSelect(selectID){
		var select = getElement(selectID);
		while(select.options.length != 0) select.remove(0);
	}

	/////////////////////////////////////////////   	
	//find select option by value, and update text
	function updateSelectByValue(selectID,value,text){
		var select,selectedOption;
		selectedOption = false;
		select = getElement(selectID);
		for(i=0;i<select.options.length && selectedOption==false;i++) if(select.options[i].value == value) selectedOption = select.options[i];
		if(selectedOption){
			selectedOption.text = text;
		}		
	}
	
	/////////////////////////////////////////////   	
	//find select option by value, and return text. if not found - return -1
	function getSelectTextByValue(selectID,value){
		var select,selectedOption,text,i;
		text = "";
		selectedOption = false;
		select = getElement(selectID);
		for(i=0;i<select.options.length && selectedOption==false;i++) if(select.options[i].value == value) selectedOption = select.options[i];
		if(selectedOption) text = selectedOption.text;
		return(text);
	}
	
	/////////////////////////////////////////////////////////////////////
	//add some element to select.
	function addToSelect(selectID,text,value){
		var select,option,flagNew,optionOld;
		select = document.getElementById(selectID);
		option = document.createElement('option');
		flagNew = false;
		
		option.text = text;
		option.value = value;
		
		if (select.selectedIndex >= 0){
			flagNew = true;			
			optionOld = select.options[select.selectedIndex];	
		}
			try {
				if(flagNew) select.add(option, optionOld); // standards compliant; doesn't work in IE
				else select.add(option, null); // standards compliant; doesn't work in IE				
			}
			catch(ex) {
				if(flagNew) select.add(option, select.selectedIndex); // IE only
				else select.add(option); // IE only
			}			
		option.selected = true;
	}
	
	//////////////////////////////////////////////////////////////////////////////	
	//remove item from list , by the value
	function removeFromSelectByValue(selectID,value){
		var select,options,i,removeIndex,selectIndex;
		select = getElement(selectID);
		options = select.options;
		removeIndex = -1;
		for(i=0;i<select.options.length && removeIndex == -1;i++)
			if(select.options[i].value == value) removeIndex = i;
			
		if(removeIndex != -1){
			select.remove(removeIndex);
			
			//select next option
			if(removeIndex < select.options.length) selectIndex = removeIndex;
			else selectIndex = select.options.length-1;
			
			if(selectIndex>=0) select.options[selectIndex].selected = true;
		}
	}
	
/////////////////////////////////////////////////////////
	//Find absolute position on the screen of some element
	function findPos(obj) {		
	  var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}			
		return[curleft,curtop];
	}
	
/////////////////////////////////////////////////////////
	//Get selected radio number. if not - return 0
	function getSelectedRadioNumber(radioID){
		var radios,i;
		radio = getElements(radioID);
		for(i=0;i<radio.length;i++){
			if(radio[i].checked) return(i);
		}
		return(-1);
	}
	
/////////////////////////////////////////////////////////
	// if the number has only one digit, add zero before it.
	function addZero(num){
		var str;
		str = String(num);
		if(Number(num)<10 && Number(num)>0) str = String("0" + num);
		return(str);
	}

/////////////////////////////////////////////////////////	
	// print array by trace name/id -> element	
	function print_r(arr){
		if(typeof arr!="object"){
			trace("print_r error , the given array argument is not object, but: " + typeof arr);
			return(false);
		}
		var i,x;		
		for(x in arr){
			trace(x + " - " + arr[x] + "");
		}
	}

/////////////////////////////////////////////////////////	
	//fix transparent png image.
    function writePngImg(src,width,height,mode){
		if (isIE()){
			document.write("<div style=\"width:"+width+"px;"+height+"px;background:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+ src +"' ,sizingMethod=’crop’);\"></div>");
		 } else {
			document.write("<img src='"+ src +"' width=\""+width+"\" height=\""+height+"\" vspace=\"0\" hspace=\"0\" border=\"0\" >");
		}
    }
	
	function getPngImg(src,width,height){
		if (isIE()){
			return("<div style=\"width:"+width+"px;"+height+"px;background:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+ src +"' ,sizingMethod=’crop’);\"></div>");
		 } else {
			return("<img src='"+ src +"' width=\""+width+"\" height=\""+height+"\" vspace=\"0\" hspace=\"0\" border=\"0\" >");
		}	
	}
		
/////////////////////////////////////////////////////////	
	//custom function - get elements by class name
	/*document.getElementsByClassName = function(cl) {
		var retnode = [];
		var myclass = new RegExp('\\b'+cl+'\\b');
		var elem = this.getElementsByTagName('*');
		for (var i = 0; i < elem.length; i++) {
			var classes = elem[i].className;
			if (myclass.test(classes)) retnode.push(elem[i]);
		}
		return retnode;
	};*/		


/////////////////////////////////////////////////////////	
	
	function trim(str){
		return str.replace(/^\s+|\s+$/g,"");
	}
	
	
/////////////////////////////////////////////////////////	

	//deside how the error will be printed	
	function printError(err){
		alert(err);
	}

/////////////////////////////////////////////////////////	
	// load external js code
	function loadJsCode(code){
		if(window.execScript) window.execScript(code)
		else window.eval(code);
	}
	