
/*
 (EWEJS) Evolver's Web Engine JavaScript
  implements: navigation
*/

var __Forms =4.00;

if( typeof __Core =="undefined")
 alert( 'v4_Core.js is required in v4_Forms.js');

var formCheckAlls =new Array();

// conditional setup of hidden input value
function v4_ConditionalChange( formname, elemname, bool_cond, trueval, falseval) {
 frm =v4_ResolveForm( formname);
 if( !frm) return false;
 if( !frm.elements[elemname]) return false;
 if( bool_cond) {
  frm.elements[elemname] =trueval;
 } else frm.elements[elemname] =falseval;
 return true;
}
function v4_CheckAll( formname) {
  var frm =v4_ResolveForm( formname);
  if( !frm) return;
  var elen =frm.elements.length;
  for( var i =0; i <elen; i++) {
    if( frm.elements[i].type !="checkbox") continue;
    frm.elements[i].checked =true;
  }
}
function v4_UncheckAll( formname) {
  var frm =v4_ResolveForm( formname);
  if( !frm) return;
  var elen =frm.elements.length;
  for( var i =0; i <elen; i++) {
    if( frm.elements[i].type !="checkbox") continue;
    frm.elements[i].checked =false;
  }
}
function v4_CheckTriggers( formname) {
  if( !formCheckAlls[formname])
    return;
  for( key in formCheckAlls[formname]) {
    v4_Resolve( key).checked =true;
  }
}
function v4_UncheckTriggers( formname) {
  if( !formCheckAlls[formname])
    return;
  for( key in formCheckAlls[formname]) {
    v4_Resolve( key).checked =false;
  }
}
function v4_AddCheckAll( id, formname) {
  var obj =v4_Resolve( id);
  if( !obj) return;
  if( !obj.type) return;
  if( obj.type !="checkbox") return;
  obj.onclick =function() {
    if(( obj.checked) &&( obj.checked ==true))  {
      v4_CheckAll( formname);
      v4_CheckTriggers( formname);
    } else {
      v4_UncheckAll( formname);
      v4_UncheckTriggers( formname);
    }
    return true;
  }
  if( !formCheckAlls[formname])
    formCheckAlls[formname] =new Array();
  if( !formCheckAlls[formname][id])
    formCheckAlls[formname][id] =formname;
}




// alpha code updates
var v4a_checkForms =new Array();

function v4a_AddCheckallFormElement( formname, elementname, checkbox_id, initial_check, initial_checked) {
 var frm =v4_ResolveForm( formname);
 var trig =v4_Resolve( checkbox_id);
 if( !trig) return false;
 if( !frm) return false;
 if( !frm.elements[elementname]) return false;
 if( !v4a_checkForms[formname])
  v4a_checkForms[formname] =new Array();
 if( !v4a_checkForms[formname][elementname])
  v4a_checkForms[formname][elementname] ={
   "trigs" :new Array(),
   "checked" : false
  };
 v4a_checkForms[formname][elementname]["trigs"][checkbox_id] =trig;
 if( initial_check ==true) {
  if( initial_checked ==true)
   v4a_checkAll( formname, elementname);
  else v4a_uncheckAll( formname, elementname);
 }
 trig.onclick =function() {
   v4a_trigCheckAll( formname, elementname);
 }
 return true;
}
function v4a_checkAll( formname, elementname) {
 if( !v4a_checkForms[formname])
  return false;
 if( !v4a_checkForms[formname][elementname])
  return false;
 var trigs =v4a_checkForms[formname][elementname]["trigs"];
 var frm =v4_ResolveForm( formname);
 if( !frm)
  return false;
 for( elem in frm.elements) {
  if( elem ==elementname) {
   if( typeof( frm.elements[elem].length) =="number") {
    var elems =frm.elements[elem];
    for( var i =0; i <frm.elements[elem].length; ++i)
     elems[i].checked =true; 
   } else frm.elements[elem].checked =true;
  }
 }
 for( trig in trigs) {
  trigs[trig].checked =true;
 }
 v4a_checkForms[formname][elementname]["checked"] =true;
 return true;
}
function v4a_uncheckAll( formname, elementname) {
 if( !v4a_checkForms[formname])
  return false;
 if( !v4a_checkForms[formname][elementname])
  return false;
 var trigs =v4a_checkForms[formname][elementname]["trigs"];
 var frm =v4_ResolveForm( formname);
 if( !frm)
  return false;
 for( var i=0; i < frm.elements.length; ++i) {
  var elem =frm.elements[i];
  if( elem.name ==elementname) {
    elem.checked =false;
  }
 }
 for( trig in trigs) {
  trigs[trig].checked =false;
 }
 v4a_checkForms[formname][elementname]["checked"] =false;
 return true;
}
function v4a_trigCheckAll( formname, elementname) {
 if( !v4a_checkForms[formname])
  return false;
 if( !v4a_checkForms[formname][elementname])
  return false;
 if( v4a_checkForms[formname][elementname]["checked"] ==true)
  v4a_uncheckAll( formname, elementname);
 else v4a_checkAll( formname, elementname);
 return true;
}
// check if user presses enter during input of data to the form
// usage: onkeypress="v4_CheckEnterPress( this, event)"
function v4_CheckEnterPress( field, e ) {
 var keycode;
 if (window.event)
  keycode = window.event.keyCode;
 else if (e)
  keycode = e.which;
 else return true;

 if (keycode == 13) {
  field.form.submit();
  return false;
 } else
  return true;
}
// toggle radio button
function ToggleRadio( obj) {
 if( !document.__lastRadioObj || document.__lastRadioObj !=obj)
  obj.__chk =false;
 document.__lastRadioObj =obj;
 obj.__chk =obj.__chk ? obj.checked =!obj.__chk : obj.checked;
}
// select radio input
function RadioFocus( obj_id) {
 obj =v4_Resolve( obj_id);
 if( !obj) return;
 if( obj.checked) return;
 obj.click();
}
// deselect radio input
function RadioBlur( obj_id) {
 obj =v4_Resolve( obj_id);
 if( !obj) return;
 obj.click();
}
// select value of select box
function v4_SelectOption( form_name, elem_name, elem_value) {
 frm =v4_ResolveForm( form_name);
 if( !frm) return false;
 elem =frm.elements[ elem_name];
 if( !elem) return false;
 if( !elem.options) return false;
 opts =elem.options;
 for( var i =0; i < opts.length; ++i) {
  if( opts[ i].value ==elem_value) {
   opts[ i].selected =true;
   return true;
  }
 }
 return false;
}
// check if any of checkboxes is selected
function v4_IsAnyCheckboxSelected( form_name, elemname) {
 var frm =v4_ResolveForm( form_name);
 if( !frm) return false;
 var rblen =frm.elements.length;
 // check all checkboxes
 for( var rb =0; rb < rblen; rb++ ) {
  if( frm.elements[rb].type =="checkbox" && frm.elements[rb].name ==elemname)
   if( frm.elements[rb].checked ==true)
    return true;
 }
 return false;
}
/**
 * the specified text input must have following additional properties:
 *  altclass - which class to assign to input when an alternative text pops up
 *  alt - which text to show as alternate text
 */
// create text type input with alternate text for specified value of form
function v4_SetAsAltText( text_input_id) {
  var obj =v4_Resolve( text_input_id);
  if( !obj) return false;
  var altclass =obj.getAttribute( "altclass");
  var altfor =obj.getAttribute( "altfor");
  if( altclass ==null) return false;
  if( altfor ==null) return false;
  if( obj.type =="password") return false;// disabled on passwords
  var frm =obj.form;
  if( !frm.elements[ altfor]) return false;
  // get hidden object
  var forelem =frm.elements[ altfor];
  // store default value
  obj.setAttribute( "alt", obj.value);
  obj.value =forelem.value;
  // remember class
  obj.setAttribute( "__class", obj.className);
  obj.setAttribute( "__type", obj.type);
  obj.setAttribute( "__altfor", altfor);
  // check if value is empty
  if( obj.value !="") {
    // value is set
    obj.setAttribute( "__dispAlt", false);
  } else {
    //obj.type ="text";
    obj.className =obj.getAttribute( "altclass");
    obj.value =obj.getAttribute( "alt");
    obj.setAttribute( "__dispAlt", true);
  }
  // handle any changes, made to text input
  obj.onkeyup =function() {
    this.form.elements[ this.getAttribute( "__altfor")].value =this.value;
  }
  // handle focus (hide alt text)
  obj.onfocus =function() {
    if( this.__dispAlt ==true) {
      // alternative text is displayed
      this.className =this.getAttribute( "__class");
      //this.type =this.__type;
      this.value =this.form.elements[ this.getAttribute( "__altfor")].value;
    } else {
      // set class to normal
      //this.className =this.getAttribute( "__class");
      //this.value =this.form.elements[ this.getAttribute( "__altfor")].value;
    }
  }
  // handle blur (display alt text)
  obj.onblur =function() {
    if( this.value =="") {
      // value assigned
      this.setAttribute( "__dispAlt", true);
      this.className =this.getAttribute( "altclass");
      this.value =this.getAttribute( "alt");
      //this.type ="text";
    } else
      this.setAttribute( "__dispAlt", false);
  }
}