// $Id: drawmgt.js,v 1.12 2007/09/20 07:35:25 nils Exp $

//
// DrawMGT Javascript
//

// Sync Horizontal and Vertical Drawing Code Fields
function syncDrawingCode() {
  if ( document.forms[0] ) {
    for ( i = 0; i < document.forms[0].length; i++ ) {
      horizontalElement=document.forms[0][i].name;
      if ( horizontalElement.indexOf( "__dcb_dc" ) > -1 ) {
        verticalElement = horizontalElement + "_v";
        if ( document.getElementById(verticalElement)) {
          populateValueById( horizontalElement, document.getElementById(verticalElement) );
        }
      }
    }
  }
}

// Set Focus to first input element in first form
function setFocus() {
  if ( document.forms[0] ) {
    for ( i = 0; i < document.forms[0].length; i++ ) {
      if ( document.forms[0][i].type == "hidden" ) { continue; }
      if ( document.forms[0][i].type == "submit" ) { continue; }
      if ( document.forms[0][i].disabled == true ) { continue; }
      if ( document.forms[0][i].type != "text" )   { continue; }

      document.forms[0][i].focus();
      break;
    }
  }
}

function populateValueById(id, element) {

  if ( element.value ) {
    setValueById(id, element.value);
  }

  if ( getTypeById(id) == "text" ) {
    if ( element.value < 0 || element.value == "" ) {
      setValueById(id, "");
    }
  }
  if ( getTypeById(id).indexOf("select") > -1 ) {
    setValueById(id, "-1");
    for (var i = 0; i < document.getElementById(id).options.length; i++) {
      if ( document.getElementById(id).options[i].value == element.value ) {
        setValueById(id, element.value);
        return;
      }
    }
  }
}

function setValueById(id, value) {
  if (document.getElementById) {
    if ( document.getElementById(id) ) {
      document.getElementById(id).value = value;
    }
    document.getElementById(id).value = value;
  } else {
    if (document.layers) { // Netscape 4
      document.id.value = value;
    } else { // IE 4
      document.all.id.value = value;
    }
  }
}

function setNameById(id, name) {
  if (document.getElementById) {
    if ( document.getElementById(id) ) {
      document.getElementById(id).name = name;
    }
    document.getElementById(id).name = name;
  } else {
    if (document.layers) { // Netscape 4
      document.id.name = name;
    } else { // IE 4
      document.all.id.name = name;
    }
  }
}

function getValueById(id) {
  if (document.getElementById) {
    if ( document.getElementById(id) ) {
      return document.getElementById(id).value;
    }
  } else {
    if (document.layers) { // Netscape 4
      return document.id.value;
    } else { // IE 4
      return document.all.id.value;
    }
  }
}

function getTypeById(id) {
  if (document.getElementById) {
    // alert ( "Type: " + document.getElementById(id).type );
    return document.getElementById(id).type;
  } else {
    if (document.layers) { // Netscape 4
      return document.id.type;
    } else { // IE 4
      return document.all.id.type;
    }
  }
  return "none";
}

function toggleDisplayById(element_id) {
  if ( getDisplayById(element_id) == 'block' ) {
    setDisplayById(element_id, 'none');
  } else {
    setDisplayById(element_id, 'block');
  }
}

function showHideElement(id,state) { // state: 0=hide, 0!=show
  setToggleElement ( id, state );
  setDisplayById( id+'__opened', ( parseInt(state) ? 'block' : 'none'  ));
  setDisplayById( id+'__closed', ( parseInt(state) ? 'none'  : 'block' ));

}

function setDisplayById(element_id, state) {
  if ( document.getElementById ) { // DOM3 = IE5, NS6
    if ( document.getElementById(element_id) ) {
      document.getElementById(element_id).style.display = state;
    }
  } else {
    if (document.layers) { // Netscape 4
      document.element_id.display = state;
    } else { // IE 4
      document.all.element_id.style.display = state;
    }
  }
}

function getDisplayById(element_id) {
  if ( document.getElementById ) { // DOM3 = IE5, NS6
    state = document.getElementById(element_id).style.display;
  } else {
    if (document.layers) { // Netscape 4
      state = document.element_id.display;
    } else { // IE 4
      state = document.all.element_id.style.display;
    }
  }
  return state;
}

// Handle toggle using cookie functions

var toggleCookieName = "showHideToggle";
var dirtyElementName = "showHideDirty";

// Set a cookie
function setCookie ( cookieName, cookie ) {
  document.cookie = cookieName + "=" + cookie;
  // alert ( "setCookie: " + cookieName + " = " + cookie );
}

// Set an element of a cookie
function setCookieElement ( cookieName, elementId, value ) {

  var currentValue = getCookieElement ( cookieName, elementId );

  // ignore
  // alert( "setCookieElement: currentValue = [" + currentValue + "] value = [" + value + "]" );
  if ( currentValue == value ) { return; }

  var oldCookie = getCookie( cookieName );
  var newCookie = elementId + "=" + parseInt(value) + ":";
  newCookie = newCookie + dirtyElementName + "=1:";

  var elements = oldCookie.split(":");
  for (var i = 0; i < elements.length; i++) {
    thisElement = elements[i];
    attrValue = thisElement.split("=");
    if ( attrValue[0] != elementId && thisElement.length > 0
         && attrValue[0] != dirtyElementName ) {
      // alert ( "setCookieElement: thisElement: " + thisElement );
      newCookie = newCookie + thisElement + ":";
    }
  }

  // alert ( "setCookieElement: " + cookieName + ": " + newCookie );
  setCookie ( toggleCookieName, newCookie );
}

// Set an element of the toggle cookie
function setToggleElement ( elementId, value ) {
  // alert ( "setToggleElement: " + elementId + ", " + value );
  setCookieElement ( toggleCookieName, elementId, value );
}

// Get a cookie
function getCookie( cookieName ) {
  var allcookies = document.cookie;
  var pos = allcookies.indexOf( cookieName );

  // severe error
  if ( pos == -1 ) { return ""; }

  var start = pos + cookieName.length + 1;
  var end = allcookies.indexOf(";", start);
  if ( end == -1) end = allcookies.length;

  var cookie = allcookies.substring(start, end);
  cookie = unescape(cookie);

  // alert ( "getCookie: " + cookieName + " = " + cookie );

  return cookie;
}

// Retrieve an element value from a cookie
function getCookieElement ( cookieName, elementId ) {
  var cookie = getCookie ( cookieName );
  if ( cookie == "" ) { return -1; }

  var elements = cookie.split(":");
  for (var i = 0; i < elements.length; i++) {
    thisElement = elements[i];
    attrValue = thisElement.split("=");
    if ( attrValue[0] == elementId ) {
      return unescape( attrValue[1] );
    }
  }
  return -1;
}

// Retrieve an element value from the toggle cookie
function getToggleElement ( elementId ) {
  var rc = getCookieElement ( toggleCookieName, elementId );
  if ( rc < 0 ) rc = 0;
  return rc;
}

// Display/hide all toggle elements
function showHideToggleElements ( ) {
  var cookie = getCookie ( toggleCookieName );
  if ( cookie == "" ) { return -1; }

  var elements = cookie.split(":");
  for (var i = 0; i < elements.length; i++) {
    thisElement = elements[i];
    var params = thisElement.split("=");
    if ( params.length == 2 ) {
      // alert ( "getToggleElements: [" + params[0] + "] = [" + params[1] + "]" );
      showHideElement( params[0], params[1] );
    }
  }
}

// Simulate an event by adding a hidden input field with
//   the event name and submitting the form
//
// Calling this function with value set to "change" creates a tag
//   equivalent to the HTML:
//   <input type="hidden" name="event_change" value="change">

function submitEvent ( value ) {
  if ( value == "" ) { return; }

  // Create a new input element to define the event
  var elem = document.createElement( "input" );
  elem.setAttribute( "type", "hidden" );
  elem.setAttribute( "name",  "event_" + value );
  elem.setAttribute( "value", value );

  // Add to form[0]
  document.forms[0].appendChild( elem );

  // Submit form
  document.forms[0].submit();
}


