///***********************************************************************///
///***<!-- Contains Copyrighted Materials by (c) ISPRODUCTIONS 2006 -->***///
///***********************************************************************///

/*
 * function for disable&enable form elements, because old NS browsers don't support disable method.
 * Example of usage:
 * DisableControl("form_name.element_name", false);
 * First parameter - form name and el.name as string, second true or false
 * variable oldNSbr may be used from other js scripts to detect browser versions
 */

var oldNSbr = (((navigator.appName == "Netscape") ? true : false) && (parseInt(navigator.appVersion.charAt(0)) < 5));
var DisabledControls = new Array();

if(oldNSbr){
  window.captureEvents(Event.CLICK | Event.FOCUS);
  window.onclick = clickHandler;
  window.onfocus = focusHandler;
}

function focusHandler(e){
  var routeFlag = false;
  if(!e.target.form) routeFlag = true;
  else{
    var CtrlType = e.target.type;
    if(CtrlType == "button" || CtrlType == "checkbox" || CtrlType == "radio") routeFlag = true;
    else{
      var aCtrl = String(e.target.form.name) + "." + String(e.target.name);
      if(!isDisabled(aCtrl)){
        routeFlag = true;
      }
    }
  }

  if(routeFlag){
    window.routeEvent(e);
    return true;
  }
  else{
    if(String(CtrlType).indexOf("select") != -1){
      var selBox = document.forms[e.target.form.name].elements[e.target.name];
      for(var i=0;i<selBox.options.length;i++){
        if(selBox.options[i].selected) selBox.options[i].selected = true;
      }
    }
    document.forms[e.target.form.name].elements[e.target.name].blur();
    alert("This control is disabled in this context!");
    return false;
  }
}

function clickHandler(e){
//////////////////////////////////////
//  Index Detection for InputArray's
//  the element must have: onfocus="i", where i is the element index in the InputArray :((((
//////////////////////////////////////
//  var boza = String(e.target.onfocus);
//  var start = boza.indexOf("{");
//  var end = boza.indexOf("}");
//  boza = boza.substr(start+1,end-start-1);
//  alert(parseInt(boza));
///////////////////////////////////////
  var routeFlag = false;
  if(!e.target.form) routeFlag = true;
  else{
    var aCtrl = String(e.target.form.name) + "." + String(e.target.name);
    if(!isDisabled(aCtrl)){
      routeFlag = true;
    }
  }

  if(routeFlag){
    window.routeEvent(e);
    return true;
  }
  else{
    alert("This control is disabled in this context!");
    return false;
  }
}

function DisableControl(someCtrl,aBool){
  if (typeof(someCtrl) == "object") {  // case when aCtrl is an object
      var stmp = "";
      if (isNaN(someCtrl.length) )
           stmp = ""+someCtrl.form.name + "."+someCtrl.name
         else
           if (someCtrl.length < 2 || someCtrl.type == "button" || someCtrl.type == "select-one" || someCtrl.type == "text" || someCtrl.type == "hidden")
                 stmp = ""+someCtrl.form.name + "."+someCtrl.name
              else
                 stmp = ""+someCtrl[0].form.name + "."+someCtrl[0].name
      var aCtrl = stmp;
  }
  else var aCtrl = someCtrl;

  if(oldNSbr){
    if(aBool){
      if(isDisabled(aCtrl)) return;
      else{
        DisabledControls[DisabledControls.length] = aCtrl;
      }
    }
    else{
      for(var i=0;i<DisabledControls.length;i++){
        if(String(DisabledControls[i]) == String(aCtrl)){
          DisabledControls.splice(i,1);
          break;
        }
      }
    }
  }
  else{
    var dotPos = String(aCtrl).indexOf(".");
    var aForm = String(aCtrl).substr(0,dotPos);
    var aControl = String(aCtrl).substr(dotPos+1,String(aCtrl).length-dotPos);
    if(document.forms){
      if(document.forms[aForm]){
        if(document.forms[aForm].elements){
          if(document.forms[aForm].elements[aControl]){
                  if ((isNaN(document.forms[aForm].elements[aControl].length)) || (String(document.forms[aForm].elements[aControl].type).indexOf("select") != -1)){

                      document.forms[aForm].elements[aControl].disabled = aBool;}
                   else
                      for (var i = 0; i < document.forms[aForm].elements[aControl].length; i++)
                        document.forms[aForm].elements[aControl][i].disabled = aBool;
          }
        }
      }
    }
  }
}

function isDisabled(aCtrl){
  if(oldNSbr){
    for(var i=0;i<DisabledControls.length;i++){
      if(String(DisabledControls[i]) == String(aCtrl)) return true;
    }
    return false;
  }
  else{
    var dotPos = String(aCtrl).indexOf(".");
    var aForm = String(aCtrl).substr(0,dotPos);
    var aControl = String(aCtrl).substr(dotPos+1,String(aCtrl).length-dotPos);
    if(document.forms){
      if(document.forms[aForm]){
        if(document.forms[aForm].elements){
          if(document.forms[aForm].elements[aControl]){
            return document.forms[aForm].elements[aControl].disabled;
          } else return false;
        } else return false;
      } else return false;
    } else return false;
  }
}

// end function DisableControl

//********************************************************************************************************************************

/*
 * Functions for get and set a form elements values
 * Parameters:
 * get function - object element (format document.form_name.element.name)
 * set functions - first parameter - object element, second - value that would be set, may be a multiple values, separated with ","
 *
 * They are group by element type
 */



// common functions for get and set a form element value
// first check the type of object and then call an appropriate function  ***************************************************
function getElementValue(obj) {
  if (obj == null) return "";	
  var sElType= "" + obj.type;
  if (""+obj.length !="undefined" && sElType == "undefined") // when object is a array of objects - radio button for example
  	sElType= "" + obj[0].type;     // get a type of first element


  var sResult ;
  switch (sElType)
  {
	case "radio"			: sResult = getRadiobtn(obj);break;					//radio button
	case "text"			: sResult = getTextbox(obj);break;					//text box
	case "hidden"			: sResult = getTextbox(obj);break;
	case "textarea"			: sResult = getTextbox(obj);break;					//text area
	case "button"			: sResult = getTextbox(obj);break;					//button value
	case "checkbox"			: //check box
							  if (""+obj.length !="undefined")  // when object is a array of check boxes
									sResult = getSetCheckbox(obj) // return values separated by "," as string
								else
								    sResult = getCheckbox(obj)  // return true if check box is selected
							  break;
	case "select-one"		: sResult = getListbox(obj);break;					//list box with single selection
	case "select-multiple"	: sResult = getMultipleListvalue(obj);break;		//list box with multiple selection
	default				: sResult = getTextbox(obj);break;

  }

  return sResult;
}
function setElementValue(obj,val) {
  // val would be a multiple values, separated with ","
  if (obj == null) return "";
  var sElType= "" + obj.type;
  if (""+obj.length !="undefined" && sElType == "undefined") // when object is a array of objects - radio button for example
  	sElType= "" + obj[0].type;     // get a type of first element

  switch (sElType)
  {
	case "radio"			: setRadiobtn(obj,val);break;					//radio button
	case "text"			: setTextbox(obj,val);break;	//text box
	case "hidden"			: setTextbox(obj,val);break;
	case "textarea"			: setTextbox(obj,val);break;					//text area
	case "button"			: sResult = setTextbox(obj,val);break;			//button value
	case "checkbox"			: //check box
							  if (""+obj.length !="undefined")				// when object is a array of check boxes
									setSetCheckbox(obj,val)					// set values separated by "," as string
								else
								    setCheckbox(obj,val)					// set check box when val is a true
							  break;
	case "select-one"		: setListbox(obj,val);break;					//list box with single selection
	case "select-multiple"	: setListbox(obj,val);break;			//list box with multiple selection
	default					: setTextbox(obj,val);break;

  }

  return true;
}
// end common functions ************************************************************************************************

// text box and text area
function getTextbox(obj) {
    return Trim_String(obj.value);
}
function setTextbox(obj,val) {
	obj.value = Trim_String(val);
}

// Radio button
function getRadiobtn(obj) {
    var rez = "";
    if (""+obj.length != "undefined")
    {
	  	for (var i = 0; i < obj.length; i++)
      		if (obj[i].checked)
        		rez = "" + obj[i].value     ;
    }else{
		 if (obj.checked)
         	rez = "" + obj.value     ;
	}
     return rez;
}
function setRadiobtn(obj,val) {
	for (var i = 0; i < obj.length; i++) {
		if (obj[i].value == val) {
			obj[i].checked = true;
			return true;
		}

	}
}

// Check button
function getCheckbox(obj){
  if (obj.checked)
     return true;
   else
     return false;
}
// get a set of check boxes with same name, but different values
function getSetCheckbox(obj){
   var rz = "";
   for (var j = 0; j < obj.length; j++)
		if (obj[j].checked )
		    rz += "," + obj[j].value ;
   if (rz.length > 0)
	        rz = rz.substring(1,rz.length);
   return rz

}
function setCheckbox(obj,val) {
   if (val)
		obj.checked = true;
     else
	    obj.checked = false;
}
function setSetCheckbox(obj,val) {
   if (val.length > 0 ) {
        var arValues = val.split(",");
        for (var i = 0; i < obj.length; i++) {
		    obj[i].checked = false;
            for (var j = 0; j < arValues.length; j++)
			    if (obj[i].value == arValues[j])
			       obj[i].checked = true;


	    }

   }
}

// List box

function getListbox(obj){
	if ( obj.selectedIndex != -1 )
		return obj.options[obj.selectedIndex].value;
	else
		return "";
}
function getListboxtext(obj){
   if(obj.selectedIndex != -1)
	return obj.options[obj.selectedIndex].text;
  return "";
}
function getMultipleListvalue(obj){
    var rz = "";
    for (var j = 0; j < obj.options.length; j++)
		if (obj.options[j].selected )
		    rz += "," + obj.options[j].value ;

	if (rz.length > 0)
	       rz = rz.substring(1,rz.length);
	return rz
 }
function setListbox(obj,val) {
    listvalue = "" + val;

    if (listvalue.indexOf(",") == -1){
    	for (var j = 0; j < obj.options.length; j++)
		   if (obj.options[j].value == listvalue) {
			obj.selectedIndex = j;
            obj.options[j].selected = true;
		   }
        }
	   else {
         var ar = listvalue.split(",");
         for (var j = 0; j < obj.options.length; j++) {
              obj.options[j].selected = false;
              for (var i = 0; i < ar.length; i++)
		           if (obj.options[j].value == ar[i])
		      		      obj.options[j].selected = true;

		 }
	}
}
// add new list items from array
function addListItems(obj,ar) {

		targetLength = obj.options.length;
			//Remove all options
			while (obj.options.length > 0) {
				obj.options[obj.options.length-1] = null;
			}
		    //add new options
		for (var i = 0; i < ar.length-1; i = i+2) {
			obj.options[obj.options.length] = new Option(ar[i + 1],ar[i]);
			}
 }

// end functions for get and set values of form elements



// other useful functions

// function for remove blank space before and after strings
function Trim_String(txtobjvalue) {
	var ichar, icount;
	var strValue = txtobjvalue;
	if (""+strValue != "undefined" && strValue != "") {
		ichar = strValue.length - 1;
		icount = -1;
		while (strValue.charAt(ichar)==' ' && ichar > icount)
			--ichar;
		if (ichar!=(strValue.length-1))
			strValue = strValue.slice(0,ichar+1);
		ichar = 0;
		icount = strValue.length - 1;
		while (strValue.charAt(ichar)==' ' && ichar < icount)
			++ichar;
		if (ichar!=0)
			strValue = strValue.slice(ichar,strValue.length);
	}
	else
		strValue = "";		
	return strValue;
}

// function for check string for minimal length
function checkTextLength(obj,lmt) {
  if (obj.value.length < lmt ){
     obj.focus();
     alert("This field required " + lmt + " symbols at least")
     return false;
   }
   else
     return true;
}

// function for alerting user when leave page
function alertUser(bIsPageSubmitted) {

    if (!bIsPageSubmitted) {
        if (confirm("Are you sure?\nYou will lost your changes.")){            
            document.forms[0].submit();
            return true;
        } else {
            return false;    
        }    
    }
    return true;
}
// function for show image thumbnail
function showThumb(objSelect,strThumbs, divName) {
    if (divName == null)        divName = "thumbs3";
    if (objSelect.selectedIndex == -1) return false;
    var thumbid = getListbox(objSelect);
    if (thumbid == "")  {
        writeInDIV("","",divName);
        return false;
    }    
    var arSelThumb = getSelThumb(thumbid,strThumbs);
    if (arSelThumb.length != 3 && arSelThumb.length != 4) return false;
    var sName = arSelThumb[1], sImgSrc = arSelThumb[2];
    if (arSelThumb.length == 4)  {
        // have directives
        sName = "<a href=\"javascript:showWindow('showDirectives.asp?" + G_SecData + "&ID=" + arSelThumb[3] + "')\">Templates Specifications...</a>";
    } else {
        sName = "&nbsp;";
    }    
    writeInDIV(sImgSrc,sName,divName);
    

}
function showWindow(strURL){
        var LeftPosition;
        var TopPosition;
        var w;
        var h;
        w = 300;
        h = 200;
        LeftPosition = (screen.width) ? (screen.width-w)-5 : 0;
        //TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
        TopPosition = 0;
        hintWindow = window.open(strURL, "Message", 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars=yes,resizable=yes');
        hintWindow.focus();
        
}
function writeInDIV(imgsrc,desc,dvName) {
    var ie4=document.all
    var ns6=document.getElementById
    if (ie4||ns6)
    var contentobj=document.getElementById? document.getElementById(dvName): document.all[dvName]

    if (ie4||ns6)
        if (imgsrc.length > 0) {
	        contentobj.innerHTML='<center>Loading image...</center>';
	        contentobj.innerHTML='<center><img src="'+imgsrc+'"><br><br>'+desc+'</center>';
        } else contentobj.innerHTML= '';
    else if (document.layers)
	    if (imgsrc.length > 0) {
	        document.thumbs1.document.thumbs2.document.open();
	        document.thumbs1.document.thumbs2.document.write('<center><img src="'+imgsrc+'"><br><br>'+ desc +'</center>');
	        document.thumbs1.document.thumbs2.document.close();    
        } else {
            document.thumbs1.document.thumbs2.document.open();
            document.thumbs1.document.thumbs2.document.write('');
	        document.thumbs1.document.thumbs2.document.close();
	        }
    else
	    alert('You need NS 4+ or IE 4+ to view the images!')
}
// helper function for finding selecting thumbnail option
function getSelThumb(id,sThumbs) {
    var result = new Array();
    var arItems = sThumbs.split("|");
    var bFound = false;
    var arTemp;
    for (var i=0;i< arItems.length;i++){
        arTemp = arItems[i].split("~");
        if (arTemp[0] == id) {
            bFound = true;
            break;
        }
    }
    if (bFound) result = arTemp;
    return result;
}
// function for string replacment - use regexpr
function ReplaceReg(instr,str,tostr)
{
	var re = eval("/" + str + "/gi");
	return instr.replace(re,tostr);	
}
function checkFiles(objFile, sType ,sFileTypes){
        
        if (sType == "") {
            alert("File upload is disabled.");
            return false;
        }
        var filename = objFile.value.toLowerCase() ;
        if (filename == "") {
            //skip empty boxes
            return true;
        }
        // all file types are allowed
        if (sType == "1")
            return true;

        var pos = filename.lastIndexOf("\\");
        if (pos > -1)
            filename = filename.substring(pos+1);
        pos = filename.lastIndexOf(".");
        var ext = "";
        if (pos > -1)
            ext = filename.substring(pos+1);

        var bResult = IsInArray(sFileTypes,ext);
        // only this types are allowed
        var sMsg = "";
        if (sType == "3") {
            bResult = ! bResult;
            sMsg    = "Don't try ";
        } else
            sMsg    = "Try ";
        if (! bResult) {
            alert("You choose wrong file format ["+ ext +"]. "+ sMsg +"with " + sFileTypes + ".");
            objFile.focus();
            return false;
        } else
            return true;

    }
    function IsInArray(sTypes,sExt) {
        var arTypes = sTypes.split(",");
        var bResult = false;
        for (var i= 0; i < arTypes.length;i++) {
            if (Trim_String(arTypes[i].toLowerCase()) == Trim_String(sExt.toLowerCase())) {
                bResult = true;
                break;
            }
        }
        return bResult;
    }

function clientRedirection (sAdminPath, sGuestPath,user) {
	//if (top.location.href != document.location.href) {
		// frameset - we are in admin part
	if ( user == "administrator" ) {
			document.location.href = sAdminPath;
	 } else {
			document.location.href = sGuestPath;
	 }
}

function popUpWin(URL, winWidth, winHeight,locLeft, locTop) {
	if (winWidth == null) winWidth = 620;
	if (winHeight == null) winHeight = 400;
	if (locLeft == null) locLeft = 260;
	if (locTop == null) locTop = 50;
	
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width="+ winWidth +",height="+ winHeight +",left = "+ locLeft +",top = "+ locTop +"');");
	eval("page" + id + ".focus()");
}

function submitForm(objForm, addParams) {
	var frmAction = document.location.href;
	if (addParams != null && addParams != "") {
		var iPos = frmAction.indexOf("?");
		if (iPos > -1) 
			frmAction += "&" + addParams;
		else
			frmAction += "?" + addParams;	
	}
	objForm.action = frmAction;
	objForm.submit ();
	return true;
}



function IsExistInList(objCombo, NewWord) {
	// check for word duplication
	for (var i=0; i < objCombo.options.length; i++) 
		if (objCombo.options[i].value.toLowerCase() == NewWord.toLowerCase()) {
			//alert("This word " + NewWord + " already exists.");
			return true;
		}
		
	return false;	
}	

function removeBrackets (sWord, removeSpace) {
	if (removeSpace == null) removeSpace = false;
	var result = sWord;
	var iPos = result.indexOf ("(");
	if (iPos > -1) 
		result = result.substring (0, iPos - 1);
	
	// remove spaces
	if (removeSpace) {
		result = Trim_String (result);
		result = ReplaceReg( result, " ", "_");
	}		
	return result;	
}

function transferList (srList, dsList) {
	for (var i=0; i < srList.options.length; i++) {
		var opt = srList.options[i];
		if (IsExistInList (dsList, opt.value) == false)
			dsList.options[dsList.options.length] = new Option(opt.text, opt.value);
	}
}

function getListItems (objCombo) {
	var result = "";
	for (var i=0; i < objCombo.options.length; i++)
		result += (objCombo.options[i].value) + ",";
	
	if (result.length > 0)  result = result.substr(0,result.length - 1);
	return result;	
}
function MM_findObj(n, d) { //v4.01
			var p,i,x;  
			if(!d) d=document; 
			if((p=n.indexOf("?"))>0&&parent.frames.length) {
				d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
			}
			if(!(x=d[n])&&d.all) x=d.all[n]; 
			if(d.forms) for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
			for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
			if(!x && d.getElementById) x=d.getElementById(n); return x;
		}


//MM_showHideLayers('Layer1','','show','LL','','hide')
function MM_showHideLayers() { //v6.0
	var i,p,v,obj,args=MM_showHideLayers.arguments;
		
	for (i=0; i<(args.length-2); i+=3) {
		obj=MM_findObj(args[i],args[i+1])    
		if (obj!=null) { 
			v=args[i+2];
			if (obj.style) { 
				obj=obj.style; 
				v=(v=='show')?'visible':(v=='hide')?'hidden':v;
				v1 = (v=='visible')?'':'none';
				if(obj.display)  obj.display = v1;
				}
			obj.visibility=v; 
		}
		else { //alert('not find '+args[i]) 
			}
	}
}
function MM_setTextOfLayer(objName,x,newText,flEscape) { //v4.01
  if ((obj=MM_findObj(objName,x))!=null) {
    with (obj)
        if (document.layers) {document.write(unescape(newText)); document.close();}
        else innerHTML = unescape(newText);
   return true
  }                
  else{return false}
  
}

//MM_changeProp('Layer1','','style.borderStyle','','DIV');MM_changeProp('Layer1','','color','','DIV')
function MM_changeProp(objName,x,theProp,theValue) { //v6.0
  var obj = MM_findObj(objName,x);
  if (obj && (theProp.indexOf("style.")==-1 || obj.style)){
    if (theValue == true || theValue == false)
      eval("obj."+theProp+"="+theValue);
    else eval("obj."+theProp+"='"+theValue+"'");
  }
}

function GoPage (paramname, paramvalue) {
	if (paramname == "" && paramvalue == "")  return
	var page = "" +document.location.href;
	var action = document.forms[0].action;
	
	var iPos = page.indexOf(paramname);
	if (paramname == "orderby" || paramname == "rpp" || paramname == "cid")
	{
		var arr = (paramname == "cid" ? new Array("action") : new Array("whichpage"));
		//remove from queryString the pair 'whichpage=2', or 'whichpage='
		for(var i=0; i < arr.length; i++)
		{	
			iPos = page.indexOf(arr[i]);
			if (iPos != -1) {
					page2 = page.substr(iPos);
					iPos2 = page2.indexOf("&");
				if (iPos2 == -1) {
					// the last param 
					page = page.substring(0,iPos-1) ;
				} else {
					//page = page.substring(0,iPos-1)  + page2.substr(iPos2+1) ;
					page = page.substring(0,iPos)  + page2.substr(iPos2+1) ;
				}
			}
		}
	}	

	iPos = page.indexOf(paramname);
	
	if (iPos == -1) {
		// add param to form action
		if (page.indexOf("?") == -1) {
		   	if (page.length-1 == page.lastIndexOf("/") ) page = action;
		   	
			page += "?"
	    }
		else
			page += "&" 	
		page += paramname + "=" + paramvalue;
	} else {
		var page2 = page.substr(iPos);
		var iPos2 = page2.indexOf("&");
		if (iPos2 == -1) {
			// the last param 
			page = page.substring(0,iPos + paramname.length + 1) + paramvalue;
		} else {
			page = page.substring(0,iPos + paramname.length + 1) + paramvalue + page2.substr(iPos2) ;
		}
			
	}
	indx = page.indexOf("?&");
	if(indx != -1)
	{
		page = page.substr(0, indx+1) + page.substr(indx+2, page.length-indx);
	}

	document.forms[0].action = page.replace("&fl=1", "");
	document.forms[0].submit ();
}

function deleteAllListItems (objCombo) {
    //Remove all options
	while (objCombo.options.length > 0) {
		objCombo.options[objCombo.options.length-1] = null;
	}
}

function setSpanBackground (sID, toColor) {	
	if( toColor.length == 0 ) toColor = 'ffffff';
	var objSpan = findEl(sID);	
	if(objSpan)
	{
		if( toColor.indexOf('#') == -1 )
			toColor = '#' + toColor;		
		objSpan.style.backgroundColor = toColor;
	}
}

function changeColor(newColor,sID)
{
	if(newColor.length != 0)
	{
		if(checkColor(newColor)) setSpanBackground(sID, newColor);		
		else
			alert('Incorrect color!');
	}
	else
		setSpanBackground(sID, 'ffffff');
}

function checkColor(color)
{
	if( color.indexOf('#') == -1 )
		color = '#' + color;
	if(color.length == 7)
	{
		var regexp = new RegExp("#{1}[0-9a-fA-F]{6}");
		if(regexp.test(color))
			return true;	
	}	
	return false;	
}


function findEl(sID){
	IsSafari = navigator.userAgent.indexOf("Safari") > -1;
	IsNS6=(document.getElementById&&!document.all)
	var ret = null;
	if (IsSafari || IsNS6)  return document.getElementById(sID);
	if (document.all) return document.all[sID];
	if(document.layers){
		ret = document.layers[sID];
	}
	else if(document.all){
		ret = document.all.tags("DIV")[sID];
		if(!ret) ret = document.all.tags("SPAN")[sID];
	}
	else if(document.getElementByID){
		ret = document.getElementById(sID);
	}
	return ret;
}

function scrollToActiveChatMsg() {
	var el = MM_findObj("lastchatmsg");
	if(el){ 
		try{ 
			el.scrollIntoView(false); 
		} 
		catch(e){} 
	}
}