var bName=navigator.appName; 

var bVer=parseInt(navigator.appVersion); 
var NS4=(bName=="Netscape" && bVer>=4); 
var IE4=(bName=="Microsoft Internet Explorer" && bVer==4); 
var NS3=(bName=="Netscape" && bVer<4); 
var IE3=(bName=="Microsoft Internet Explorer" && bVer<4); 
var IE5=((navigator.appVersion.indexOf("5.")!="-1")&&(bName=="Microsoft Internet Explorer"));
var emptyString = "   ";
var separator="&as;"
var optionalCheck = true;

function trim(inputString, invalidPrefixChars, invalidSuffixChars) { 
    if (inputString.length == 0) 
      return inputString; 
   var retValue = inputString; 
    var ch = retValue.substring(0, 1); 
    while (retValue.length > 0 && invalidPrefixChars.indexOf(ch) >= 0) { // Check for invalid characters at the beginning of the string 
       retValue = retValue.substring(1, retValue.length); 
       ch = retValue.substring(0, 1); 
    } 
    ch = retValue.substring(retValue.length-1, retValue.length); 
    while (retValue.length > 0 && invalidSuffixChars.indexOf(ch) >= 0) { // Check for invalid characters at the end of the string 
       retValue = retValue.substring(0, retValue.length-1); 
       ch = retValue.substring(retValue.length-1, retValue.length); 
    } 
   return retValue; // Return the trimmed string back to the user 
 } // Ends the "trim" function 

function containsChar(str, chars) {
  for (var i=0; i < chars.length; i++) {
    if (str.indexOf(chars.charAt(i)) >= 0) {
      return true;
    }
  }

  return false;
}

function getFormInputDataString(theForm, theFrame, oc) {
  var optTmp = optionalCheck;

  if (typeof(oc) != "undefined") {
    optionalCheck = oc;
  }

  var result = "";

  for(var i = 0; i < theForm.elements.length; i ++) {
    var index = theForm.elements[i].name.indexOf("DefineElement");
    if(index != -1) {
      var valueFunction = null;
      var defineFunctionElementName = theForm.elements[i].name.substring(0, index) + "DefineValueFunction" + theForm.elements[i].name.substring(index + 13);

      if(typeof(eval("theForm." + defineFunctionElementName)) != "undefined") {
        valueFunction = eval("theForm." + defineFunctionElementName).value;
      }

      var type = theForm.elements[i].name.substring(0, index - 1);
      var code = theForm.elements[i].name.substring(index + 14); 
      var value = "";

      if(valueFunction == null) {
        value = eval("theFrame." + type + "_" + code + "_getValue(theForm)");
      } else {
        value = eval(valueFunction + "(theForm, type + '_InputElement_' + code)");
      }

      if (value == null) { 
        optionalCheck = optTmp;
	return null;        
      }
        
      if(result.length != 0)
        result += separator;
      
      if(type.length > 0) {
        result += type + "_" + theForm.elements[i].value + "=" + value;
      } else {
        result += theForm.elements[i].value + "=" + value;
      }
    }
  }

  optionalCheck = optTmp;

  return result;
}

function pop(array) {
 var result = array[frames.length - 1];
 array.length = array.length - 1;
 return result;
}

function push(array, element) {
 array.length = array.length + 1;
 array[array.length - 1] = element;
}

function getInputDataString() { 
  var result = "";
  var forms = new Array(0);
 
  // Gather forms 
  if(getInputDataString.arguments.length == 0) {
    // Go through the frame hierarchy in the page
    var frames = new Array(top);
    while(frames.length > 0) {
      var frame = null;
      if(IE4 || IE5) {
        frame = pop(frames);
      } else {
        frame = frames.pop();
      }
      // Add the forms in frame to forms 
      for(var i = 0; i < frame.document.forms.length; i ++) {
        if(IE4 || IE5) {
          push(forms, frame.document.forms[i]);
          push(forms, frame);
        } else {
	  forms.push(frame.document.forms[i]);
	  forms.push(frame);
        }
      }
      // Add the sub frames to frames
      for(var i = 0; i < frame.frames.length; i ++) {
        if(IE4 || IE5) {
          push(frames, frame.frames[i]);
        } else {
	  frames.push(frame.frames[i]);
        }
      }
    }
  } else {
    for(var i = 0; i < getInputDataString.arguments.length; i ++) {
      if(IE4 || IE5) {
        push(forms, eval(getInputDataString.arguments[i]));
      } else {
        forms.push(eval(getInputDataString.arguments[i]));
      }
    }
  }

  // Go through the forms
  for(var i = 0; i < forms.length; i += 2) {
    var tmp = getFormInputDataString(forms[i], forms[i + 1]);
    if(tmp == null) {	
      return null;
    }
    result += tmp + separator;
  }

  return result.substring(0, result.length - separator.length);
}

function textFieldGetValue(theForm, textFieldName, number, numberMessage, optional, optionalMessage) {
  if(typeof(eval("theForm." + textFieldName)) == "undefined") {
    return "";
  }
  
  var element = eval("theForm." + textFieldName);
	
  var value;

  if (number) {
    value = trim(element.value," ,:.;"," ,:-");
  } else {
    value = trim(element.value," ,:.;"," ,:");
  }
        
    

  // Super feature of Netscape
  if((value.length == 2) && (value == "  ")) {
    value = "";
  }
	  
  if(number) {
    if(isNaN(Number(value))) {
      window.alert(numberMessage + value);
      return null;
    }
  }

  if(optionalCheck && !optional) {
    if(value == null || value.length == 0) {
      alert(optionalMessage);
      return null;
    }
  }
     
  if (value == null) {
    return "";
  } else {
    return value;
  }
}

function textAreaGetValue(theForm, textAreaName, optional, optionalMessage) {
  if(typeof(eval("theForm." + textAreaName)) == "undefined") {
    return "";
  }

  var element = eval("theForm." + textAreaName);

  var value = element.value;

  if(optionalCheck && !optional) {
    if(value == null || value.length == 0) {
      alert(optionalMessage);
      return null;
    }
  }
     
  if (value == null) {
    return "";
  } else {
    return value;
  }
}
 
function selectGetValue(theForm, selectName, editElementFunction, emptyString, optional, optionalMessage) { 
  if(typeof(eval("theForm." + selectName)) == "undefined") {
     return "";
  }
  
  var element = eval("theForm." + selectName); 

  if((element.options.length == 1) && (element.options[0].value == emptyString)) {
    if(typeof(eval("theForm." + editElementFunction)) == "undefined") {
      return "";
    } else {
      return eval(editElementFunction + "(theForm)");
    }
  } else {
    if(element.selectedIndex == -1) { 
      if(optionalCheck && !optional) {
        alert(optionalMessage);
        return null;
      } else {
        return "";
      }
    } else {
      var result = element.options[element.selectedIndex].value;
      
      if(result == emptyString) { 	
        if(optionalCheck && !optional) {
          alert(optionalMessage);
          return null;
        } else {
          return "";
        }
      } else {
        return element.options[element.selectedIndex].value;
      }
    }
  }
}	

function checkBoxGetValue(theForm, name) {
  if(typeof(eval("theForm." + name)) == "undefined") {
    return "";
  }
 
  var element = eval("theForm." + name);
	
  if(element.checked) {
    return eval("theForm." + name + "_checked.value");
  } else {
    return eval("theForm." + name + "_unchecked.value");
  } 
}

function fileFieldGetValue(theForm, hiddenFieldName, fileFieldName, optional, optionalMessage, fullName) {
  if(typeof(eval("theForm." + hiddenFieldName)) == "undefined") {
    return "";
  }
	
  if(typeof(eval("theForm." + fileFieldName)) == "undefined") {
    return "";
  }
	
  var fileElement = eval("theForm." + fileFieldName);
  var hiddenElement = eval("theForm." + hiddenFieldName);
        
  //alert("FileElement " + fileElement.name + ": " + fileElement.value + ". HiddenElement " + hiddenElement.name + ": " + hiddenElement.value);     
	
  if(fileElement.value.length > 0) {
    if(!fullName) {
      var index = fileElement.value.lastIndexOf("/");
      if(index == -1) {
        index = fileElement.value.lastIndexOf("\\");
        //window.alert(index);
      }
      if(index == -1) {	
        return fileElement.value;
      } else {
        return fileElement.value.substring(index + 1);
      }
    } else {
      return fileElement.value;
    }
  } else {
    if((hiddenElement.value.length == 2) && (hiddenElement.value == "  ")) {
      return "";
    } else {
      return hiddenElement.value;
    }
  }
}

function listGetValue(theForm, listName, editElementFunction, onlySelected, valueSeparator) {
  if(typeof(eval("theForm." + listName)) == "undefined") {
    return "";
  }

  var element = eval("theForm." + listName);	

  if(element.options.length == 0) {
    if(typeof(eval("window." + editElementFunction)) == "undefined") {
      return "";
    }
    return eval(editElementFunction + "(theForm)");
  }

  if(element.options[0].value == emptyString) {
    if(eval("window." + editElementFunction) == "undefined") {
      return "";
    }

    return eval(editElementFunction + "(theForm)");
  } else {
    var returnValue = "";
 
    for(var i = 0; i < element.options.length; i ++) {
      if(onlySelected) {
        if(element.options[i].selected) {
          returnValue += element.options[i].value + valueSeparator; 
        }
      } else {
        returnValue += element.options[i].value + valueSeparator;
      }  
    }
    
    if(returnValue.substring(returnValue.length - 1) == valueSeparator) {
      returnValue = returnValue.substring(0, returnValue.length - 1);
    }

    return returnValue;
  }
}

function setCheckboxsState(theForm, elementName, state) {
  for (var i = 0; i < theForm.elements.length; i ++) {
    var element = theForm.elements[i];

    if (element.name == elementName) {
      if (element.type.indexOf("checkbox") != -1) {
        element.checked = state;
      }
    }
  }
}

function checkAllElements(theForm, elementName) {
  setCheckboxsState(theForm, elementName, true);
}

function uncheckAllElements(theForm, elementName) {
  setCheckboxsState(theForm, elementName, false);
}

function checkAllForState(theForm, elementName, state) {
  for (var i = 0; i < theForm.elements.length; i ++) {
    var element = theForm.elements[i];

    if (element.name == elementName) {
      if (element.type.indexOf("checkbox") != -1) {
        if (element.checked != state) {
          return false;
        }
      }
    }
  }
  
  return true;
}

function areAllUnchecked(theForm, elementName) {
  return checkAllForState(theForm, elementName, false);
}

function areAllChecked(theForm, elementName) {
  return checkAllForState(theForm, elementName, true);
}

function collectValues(theForm, elementName, valueSeparator) {
  var result = "";
  
  for (var i = 0; i < theForm.elements.length; i ++) {
    var element = theForm.elements[i];

    if (element.name == elementName) {
      if (element.type.indexOf("checkbox") != -1) {
        if (element.checked) {
          result += (result != ""?valueSeparator:"") + element.value;
        }
      } else {
        result += (result != ""?valueSeparator:"") + element.value;
      }
    }
  }

  return result;
}

function removeValue(valueElement, multiple) {
  if(typeof(multiple) == "undefined") {
    multiple = false;
  }      

  if((valueElement.options.length > 0) && (valueElement.selectedIndex != -1)) {
    if(multiple) { 
      var i = 0;
      for(i = 0; i < valueElement.options.length; i ++) {
        if(valueElement.options[i].selected) {
          valueElement.options[i] = new Option("---", "removed", true, false); 
        }
      }
    } else {
      valueElement.options[valueElement.selectedIndex] = new Option("---", "removed", true, false);
    }
  }
  //valueElement.size = valueElement.options.length;
}

function removeValueSynonym(valueElement) {
  for(i = 0; i < valueElement.options.length; i ++) {
    if(valueElement.options[i].selected) {
      valueElement.options[i] = null; 
    }
  }  
}

function addValue(editElement, valueElement) {
  var value = eval("property_" + editElement.name + "_getValue(editElement.form)");
  if(value.length > 0) {
    var i = 0;
    var existing = false;
    for(i = 0; i < valueElement.options.length; i++) {
      if(valueElement.options[i].value == value) {
        existing = true; 
        break;
      }
    }
    if(!existing) {
      if (editElement.type.indexOf("select") != -1) {
        valueElement.options[valueElement.options.length] = new Option(editElement.options[editElement.selectedIndex].text, value, false, true);
      } else
        valueElement.options[valueElement.options.length] = new Option(value, value, false, true);
    }
  }
  //valueElement.size = valueElement.options.length;  
}

function changeValue(editElement, valueElement) {
  if(valueElement.selectedIndex == -1) {
    return;
  }
  var value = eval("property_" + editElement.name + "_getValue(editElement.form)");
  if(value.length > 0) {
    if (editElement.type.indexOf("select") != -1) {
      valueElement.options[valueElement.selectedIndex] = new Option(editElement.options[editElement.selectedIndex].text, value, false, true);
    } else {
      valueElement.options[valueElement.selectedIndex] = new Option(value, value, false, true);
    }
  }
}

function editValue(editElement, valueElement) {
  if(valueElement.selectedIndex == -1) {
    return;
  }
  editElement.value = valueElement.options[valueElement.selectedIndex].value;
}

function valueUp(valueElement) {
  if((valueElement.selectedIndex == -1) || (true)) {
    return;
  }
}

function valueDown(valueElement) {

}

function toggle(elem) {
  if (elem) {
    if (elem.style.display == 'none') {
      elem.style.display = 'block';
    } else {
      elem.style.display = 'none';
    }
  }
}

function restoreLanguage(theSelect, requestLanguage) {
  if(requestLanguage == null || requestLanguage == "" || requestLanguage == "null") {
    theSelect.selectedIndex = 0;
  } else {
    var i = 0;
    for(i = 0; i < theSelect.options.length; i ++) {
      if(theSelect.options[i].value.toLowerCase() == requestLanguage.toLowerCase()) {
        theSelect.selectedIndex = i; 
      }
    }
  }
}

function enableElements(targetForm, disable) {
  for(var i = 0; i < targetForm.elements.length; i ++) {
    var targetElement = targetForm.elements[i];
     
    if((targetElement.type.indexOf("text") != -1) || (targetElement.type.indexOf("select") != -1)) {
      if(typeof(targetElement.disabled) != "undefined") {
        targetElement.disabled = disable?true:false;
      }
    }
  }
}

function synchronize(sourceFrame, targetFrame, sourceForm, targetForm) {
  var result = "";

  for(var i = 0; i < targetForm.elements.length; i ++) {
    //alert(targetForm.elements[i].name);
    var targetElement = targetForm.elements[i];
    if(targetElement.name.indexOf("Operator") != -1) {
      continue;
    }
    var index = targetElement.name.indexOf("DefineElement");

    if(index != -1) {
      var type = targetElement.name.substring(0, index - 1);
      var code = targetElement.name.substring(index + 14); 
      var sourceElement = eval("sourceForm." + type + '_InputElement_' + code);
      targetElement = eval("targetForm." + type + '_InputElement_' + code);
      var sel = sourceFrame.document.getElementById(code);
      var tel = targetFrame.document.getElementById(code);
      
      if(!tel) {
          continue;
      }

      var imageProperty = false;

      if(typeof(sourceElement) != "undefined") {
        imageProperty = (sourceElement.type == "hidden") && (sourceElement.value == "imageProperty");   
      }
     
      if(typeof(sourceElement) == "undefined") {    
        tel.style.display="none";
        tel.style.visibility="hidden";
        continue;
      } else {
        tel.style.display = sel.style.display;
        tel.style.visibility = sel.style.visibility;
        /* HA: if the visibility will be set explicitely at generation time
        if(navigator.appName == "Microsoft Internet Explorer") {
          el.style.display="block";
        } else {
          el.style.display="table-row";
        }
      
        el.style.visibility="visible";
        */
      }

      var teli = targetFrame.document.getElementById("Input" + code);
      var seli = sourceFrame.document.getElementById("Input" + code);

      
      if(imageProperty) {
        teli.innerHTML = seli.innerHTML;
      } else if(sourceElement.type != targetElement.type) { 
        targetElement.style.display = "none";
        targetElement.style.visibility = "hidden";     
        //        alert("Setting HTML: " + targetElement.options[targetElement.selectedIndex].text + " for " + code);

        teli.innerHTML = targetElement.options[targetElement.selectedIndex].text;
      } else {
	  if(typeof(sourceElement.options) != "undefined") {
	      for(j = 0; j < sourceElement.options.length; j ++) {
		  //alert(sourceElement.options[j].text);
		  if(j >= targetElement.options.length) {
		      targetElement.options[j] = new Option();
		  }
		  targetElement.options[j].value = sourceElement.options[j].value;
		  targetElement.options[j].text = sourceElement.options[j].text;
		  //alert("Setting " + sourceElement.options[j].value + " at " + targetElement.name + "[" + j + "]");
                  targetElement.options[j].selected = sourceElement.options[j].selected
	      }
      
	      targetElement.options.length = sourceElement.options.length; 
              /*
              if(sourceElement.selectedIndex != -1) {
                targetElement.selectedIndex = sourceElement.selectedIndex;
              }
              */
              if (targetElement.multiple) {
                targetElement.size = sourceElement.options.length;
              }
	      //alert("Setting options for " + targetElement.name);
	  } else {
              if(sourceElement.type != targetElement.type) {
                if((typeof(targetElement.options) != "undefined") && (targetElement.selectedIndex != -1)) {
		  var selectedOption = targetElement.options[targetElement.selectedIndex];
                  targetElement.options.length = 1;
                  targetElement.options[0].text = selectedOption.text;
		  targetElement.options[0].value = selectedOption.value;
                  continue;
                }  
              } 
	      targetElement.value = sourceElement.value;
	      // alert("Setting value for " + targetElement.name);
	}
      }	
    }
  }

  /*for(var i = 0; i < targetForm.elements.length; i ++) {
    var targetElement = targetForm.elements[i];
    var index = targetElement.name.indexOf("DefineElement");

    if(index != -1) {
      var type = targetElement.name.substring(0, index - 1);
      var code = targetElement.name.substring(index + 14); 
      var sourceElement = eval("sourceForm." + type + '_InputElement_' + code);
      targetElement = eval("targetForm." + type + '_InputElement_' + code);
            
      if(typeof(sourceElement) == "undefined") {
        var el = targetFrame.document.getElementById(code);
        el.style.display="none";
        el.style.visibility="hidden";   
      }
    }
  }*/
}

function changes(element, processKey) {
  if(typeof(element) == "undefined") {
    anyChanges = true;
    showElement("isModified", "inline");
    return;     
  }      

  var keyCode = (element.which == 16)?element.which:element.keyCode;                      
  var modifiers = (keyCode == 16) || (keyCode == 17) || (keyCode == 20) || element.altKey || (element.ctrlKey && (keyCode != 86) && (keyCode != 88)) || ((keyCode >=37) && (keyCode <= 40));
           
  if(!modifiers) {
    anyChanges = true;
    showElement("isModified", "inline");
  } 
}

function editMap(url, objectId, mapId, scopeCode, imageId, width, height) {
  var sep = '&';

  if (url.indexOf('?') == -1) {
    sep = '?';
  }

  if (!width) {
    width = 800;
  }

  if (!height) {
    height = 450;
  }

  try {
    top.mapManager.editing = true;
  } catch(exception) {}

  top.mapManager = window.open(url + sep + 'sourceObjectId=' + objectId + '&imageId=' + imageId + '&mapId=' + mapId + "&scopeCode=" + scopeCode, 'mapManager', 'width=' + width + ',height=' + height + ',scrollbars=yes,resizable=yes,statusbar=yes,status=yes');
  top.mapManager.focus();
}
