function objectAddCSSClass( objectID, newClassName ){
  var objectRef = document.getElementById( 'element_' + objectID );
  if( objectRef.className.indexOf( newClassName )  < 0 ){
    objectRef.className += ' ' + newClassName;
  }
}
function objectRemoveCSSClass( objectID, oldClassName ){
  var objectRef = document.getElementById( 'element_' + objectID );
  if( objectRef.className.indexOf( oldClassName ) >= 0 ){
    var regExString = new RegExp( oldClassName );
    objectRef.className = objectRef.className.replace( regExString, "" );
  }
}

var selectIds     = new Array();
var formElements  = new Array();
var checkReadOnly = new Array();
function setCheckbox( imageObject,formElement, inputElement ) {
  var setReadonly   = false;
  for ( var i = 0; i < checkReadOnly.length; i++ ) {
    if ( checkReadOnly[ i ] == formElement ) {
      setReadonly = true;
      break;
    } else {
      setReadonly = false;
    }
  }
  if ( setReadonly == false ) {
    var boxImgsrc;
    var elementValues = formElements[ formElement ];
    if( elementValues[ 2 ] != elementValues[ 1 ] ) {
      elementValues[ 2 ] = elementValues[ 1 ];
      if ( document.images[ imageObject.id ].src.indexOf( '-h' ) != -1 ) {
        boxImgsrc = document.images[ imageObject.id ].src;
      } else {
        boxImgsrc = document.images[ imageObject.id ].src.split( '.gif' );
        boxImgsrc = boxImgsrc[ 0 ] + '-h.gif'
      }
      document.images[ imageObject.id ].src = boxImgsrc;
      var elem = document.forms[ 0 ][ inputElement ];
      if( elem.length) {
        var idx = elementValues[ 3 ];
        elem[ idx ].value = elementValues[ 1 ];
      } else {
        elem.value = elementValues[ 1 ];
      }
    } else {
      elementValues[ 2 ] = elementValues[ 0 ];
      if ( document.images[ imageObject.id ].src.indexOf( '-h' ) != -1 ) {
        boxImgsrc = document.images[ imageObject.id ].src.split( '-h' );
        boxImgsrc = boxImgsrc[ 0 ] + '.gif'
      } else {
        boxImgsrc = document.images[ imageObject.id ].src;
      }
      document.images[ imageObject.id ].src = boxImgsrc;
      var elem = document.forms[ 0 ][ inputElement ];
      if( elem.length) {
        var idx = elementValues[ 3 ];
        elem[ idx ].value = elementValues[ 0 ];
      } else {
        elem.value = elementValues[ 0 ];
      }
    }
    handleBehaviours( inputElement, imageObject.id );
  }
}
function selectBoxNotify ( formField, formFieldValue, currentIndex ) {
  if ( typeof dependingSelects != 'undefined' ) {
  	var depSelects = dependingSelects[ formField ];
    if (depSelects && formFieldValue != "") {
      for ( var i=0; i < depSelects.length; i++ ) {
        if (typeof optionGroups[ depSelects[i] ][ formFieldValue ] == 'undefined' ) {
      	  loadDynamicOptions(depSelects[i], formFieldValue, currentIndex);
        } else {
          writeDependantSelectBox(depSelects[i], formFieldValue, currentIndex);
        }
      }
    } else if ( depSelects ) {
      resetDependingSelects(formField);
    }
    notifyValue( formField, formFieldValue );
  }
}


function submitForm( actionName ){
  document.forms[ 0 ].elements[ 'action_name' ].value = actionName;
  document.forms[ 0 ].submit();        
  return false;
}
function renderDropSelect( elem ) {
  var checkNotify = false;
  if ( ( typeof dependingSelects != 'undefined' && dependingSelects[ elem.name ] ) || ( typeof behaveDependOn != 'undefined' && behaveDependOn[ elem.name ] ) ) {
    checkNotify = true;
  }
  if ( elem.defaultText != "" ) {
		elem.options.unshift( "" );
		elem.options.unshift( elem.defaultText );
  }
  var selectHeight=elem.getOptionCount();
  if ( selectHeight > 10 ) selectHeight = 10;
  if ( selectHeight < 1 ) selectHeight = 1;
  
  var selectWidth = 289;

  var selectedValue = elem.elementValue;
  if ( elem.elementValue == "" ) {
    selectedValue = elem.defaultText;
  }
  selectIds[elem.name]=elem.id;
  document.write( writeSelectBox( elem.name, elem.options, elem.getAttribute( 'zIndex' ), selectWidth, selectHeight, selectedValue, checkNotify,elem.hasError,elem.isReadonly, null, elem.getAttribute( 'class' ) ) );
}

var a = 0, u = 0;
var breakDisplay = "";
var breakVisibility = "";
var breakMandatory = "";
function handleBehaviours ( elemName, token ) {
  if ( typeof behaviours != 'undefined' ) {
    handleSections( elemName );
    if ( behaveDependOn[ elemName ] ) {
      for ( var a = 0; a < behaveDependOn[ elemName ].length; a++ ) {
        parentElement = behaveDependOn[ elemName ][ a ];
        if ( behaviours[ parentElement ][ 0 ].length > 0 ) {
          handleDisplay( parentElement, behaviours[ parentElement ][ 0 ], token );
        }
        if ( behaviours[ parentElement ][ 1 ].length > 0) {
          handleVisibility ( parentElement, behaviours[ parentElement ][ 1 ] );
        }
        if ( behaviours[parentElement][2].length > 0 ) {
          handleMandatory ( parentElement, behaviours[ parentElement ][ 2 ] )
        }
      }
    }
  }
}
function isBehaviourActive( behaviourDef ) {
  if ( behaviourDef[ 1 ] == null ) return false;
  var elem = document.forms[ 0 ].elements[ behaviourDef[ 0 ] ];
  if (! elem) return false;
  if ( behaviourDef.length > 3 && behaviourDef[ 3 ] == 'notequal' ) {
    if (elem.length) {
      if (behaviourDef[ 1 ] == "") {
        for( var i=0; i < elem.length; i++) {
      	  if (elem[i].value != behaviourDef[ 1 ]) {
      	    return true;
      	  }
        }
        return false;
      } else {
      	for( var i=0; i < elem.length; i++) {
      	  if (elem[i].value == behaviourDef[ 1 ]) {
      	    return false;
      	  }
        }
        return true;
      }
    } else {
      return elem.value != behaviourDef[ 1 ];
    }
  } else {
    if (elem.length) {
      if (behaviourDef[ 1 ] == "") {
        for( var i=0; i < elem.length; i++) {
      	  if (elem[i].value != behaviourDef[ 1 ]) {
      	    return false;
      	  }
        }
        return true;
      } else {
      	for( var i=0; i < elem.length; i++) {
      	  if (elem[i].value == behaviourDef[ 1 ]) {
      	    return true;
      	  }
        }
        return false;
      }
    } else {
      return elem.value == behaviourDef[ 1 ];
    }
  }
}
function handleDisplay ( parentElement, displayArray, token ) {
  if ( typeof document.forms[ 0 ].elements[ parentElement ] == 'object' ) {
    for ( var i = displayArray.length -1; i >= 0 ; i-- ) {
      if ( typeof document.forms[ 0 ].elements[ displayArray[ i ][ 0 ] ] != 'undefined' ) {
        if ( breakDisplay != parentElement && isBehaviourActive( displayArray[ i ] ) ) {
          displayMode = displayArray[ i ][ 2 ];
          switchDisplayMode ( displayMode, parentElement, displayArray[ i ][ 0 ], token );
          breakDisplay = parentElement;
        } else if ( breakDisplay != parentElement && displayArray[ i ][ 1 ] == null ) {
          displayMode = displayArray[ i ][ 2 ];
          switchDisplayMode ( displayMode, parentElement, displayArray[ i ][ 0 ], token );
        }
      }
    }
  }
  breakDisplay = "";
}
function switchDisplayMode ( displayMode, parentElement, displayArrayElement, token ) {
  switch ( displayMode ) {
    case 0:
      handleDisplayTextBehaviour( parentElement, displayArrayElement );
    break;
    case 1:
      handleDisplayReadonlyBehaviour ( parentElement, displayArrayElement, token );
    break;
    case 2:
      handleDisplayEditBehaviour( parentElement, displayArrayElement, token );
    break;
  }
}
function handleDisplayTextBehaviour ( parentElement, controlElement ) {
  writeIntoLayer( parentElement, document.forms[ 0 ].elements[ controlElement ].value );
}
function handleDisplayReadonlyBehaviour ( parentElement, controlElement, imageId ) {
  if ( document.forms[ 0 ].elements[ parentElement ].type == "hidden" && ( typeof document.getElementsByTagName( "div" )[ parentElement ] != 'undefined' ) ) {
    var checkElem;
    for ( checkElem in formElements ) {
      if ( parentElement == checkElem ) {
        checkReadOnly.push( parentElement );
        if ( formElements[ parentElement ][ 2 ] != formElements[ parentElement ][ 1 ] ) {
          document.images[imageId].src = checkboxDisabledGif;
        } else {
          document.images[imageId].src = checkboxDisabledGifHigh;
        }
      }
    }
  }
  if ( typeof document.forms[ 0 ].elements[ parentElement ] == 'object' ) {
    if ( document.forms[ 0 ].elements[ parentElement ].type != 'hidden' ) {
      document.forms[ 0 ].elements[ parentElement ].setAttribute( "readOnly", "readonly" );
      objectAddCSSClass( parentElement, 'disabled');
    }
  }
}
function handleDisplayEditBehaviour ( parentElement, controlElement, imageId ) {
  var checkElem;
  for ( checkElem in formElements ) {
    if ( parentElement == checkElem ) {
      if (formElements[ parentElement ][ 2 ] != formElements[ parentElement ][ 1 ]) {
        document.images[ imageId ].src = checkboxGif;
      } else{
        document.images[ imageId ].src = checkboxGifHigh;
      }
    }
  }
  document.forms[ 0 ].elements[ parentElement ].readonly = false;
  setClassName( document.forms[ 0 ].elements[ parentElement ], 'input100' );
}
function handleVisibility ( parentElement, displayArray ) {
  if ( document.getElementById( "element_" + parentElement ) ) {
    for ( var i = displayArray.length -1; i >= 0 ; i-- ) {
      if ( typeof document.forms[ 0 ].elements[ displayArray[ i ][ 0 ] ] != 'undefined' ) {
        if ( breakVisibility != parentElement && isBehaviourActive( displayArray[ i ] ) ) {
          visibilityMode = displayArray[ i ][ 2 ];
          switchVisibilityMode ( visibilityMode, parentElement, displayArray[ i ][ 0 ] );
          breakVisibility = parentElement;
        } else if ( breakVisibility != parentElement && displayArray[ i ][ 1 ] == null ) {
          visibilityMode = displayArray[ i ][ 2 ];
          switchVisibilityMode ( visibilityMode, parentElement, displayArray[ i ][ 0 ] );
        }
      }
    }
  }
  breakVisibility = "";
}
function switchVisibilityMode ( visibilityMode, parentElement ) {
  switch ( visibilityMode ) {
    case 0:
      objectAddCSSClass( parentElement, 'hidden' );
    break;
    case 1:
      objectRemoveCSSClass( parentElement, 'hidden' );
    break;
  }
}
function handleMandatory ( parentElement, displayArray ) {
  if (typeof document.forms[ 0 ].elements[ parentElement ] == 'object') {
    for ( var i = displayArray.length -1; i >= 0 ; i-- ) {
      if (typeof document.forms[ 0 ].elements[ displayArray[ i ][ 0 ] ] != 'undefined') {
        if ( breakMandatory != parentElement && isBehaviourActive( displayArray[ i ] )) {
          mandatoryMode = displayArray[ i ][ 2 ];
          switchMandatoryMode ( mandatoryMode, parentElement, displayArray[ i ][ 0 ] );
          breakMandatory = parentElement;
        } else if ( breakMandatory != parentElement && displayArray[ i ][ 1 ] == null ) {
          mandatoryMode = displayArray[ i ][ 2 ];
          switchMandatoryMode ( mandatoryMode, parentElement, displayArray[ i ][ 0 ]);
        }
      }
    }
  }
  breakMandatory = "";
}
function switchMandatoryMode ( mandatoryMode, parentElement ) {
  switch ( mandatoryMode ) {
    case 0:
      objectRemoveCSSClass( parentElement, 'mandatory' );
    break;
    case 1:
      objectAddCSSClass( parentElement, 'mandatory' );
    break;
  }
}
function notifyValue(elemName, curValue) {
  handleBehaviours(elemName);
}
function checkEmptySelects () {
  if ( typeof dependingSelects != 'undefined' ) {
    if ( typeof document.forms[ 0 ] != 'undefined' ){
      var currentDependant;
      for ( currentDependant in dependingSelects ) {
        for( var i=0; i < dependingSelects[ currentDependant ].length; i++ ){
          if( ( typeof window[ "fe_" + dependingSelects[ currentDependant ][ i ] ] != "undefined" ) && document.forms[ 0 ][ currentDependant ] && document.forms[ 0 ][ currentDependant ].value == window[ "fe_" + currentDependant ].options[ 0 ] ){
            setVisibility( 'element_' + dependingSelects[ currentDependant ][ i ], null, 'none' );
          }
          if( ( typeof window[ "fe_" + dependingSelects[ currentDependant ][ i ] ] != "undefined" ) && ( typeof window[ "fe_" + dependingSelects[ currentDependant ][ i ] ].options[ 2 ] != "string" ) ){
            setVisibility( 'element_' + dependingSelects[ currentDependant ][ i ], null, 'none' );
          }
        }
      }
    } else {
      window.setTimeout( 'dependingSelects()', 500 );
    }
  }
}

