 /* Copyright (C) 2006-2007 by Joseph McVerry - American Coders, Ltd.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the Free
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */


function Section(node)
{
  if (node == null)
      return;
       
     
    var attr=node.attributes
    
    
    for (var i = 0; i < attr.length; i++) {
     if (attr[i].name == 'name')   
        this.name = attr[i].value
     if (attr[i].name == 'id')   
        this.id = attr[i].value
     if (attr[i].name == 'required')   
        this.required = attr[i].value
     if (attr[i].name == 'help')   
        this.help = attr[i].value
        }
     
     this.elements = new Array()
     this.name = this.name
     

     var cd=node.childNodes;
     var decnt=0
     this.fieldCrossRef = Array()

     for (var i = 0; i < cd.length; i++)
        {
               //alert(cd.item(i).tagName)
               if (cd.item(i).tagName == 'group') {
                         c = new Group(cd.item(i));
	 		 this.elements[decnt]=c;
	 		 decnt++;
	 		 
	 		 }
	       else		 
               if (cd.item(i).tagName == 'element' || cd.item(i).tagName == 'de' ) {
                         de = new Element(cd.item(i));
	 		 this.elements[decnt]=de;
	 		 //alert(decnt +' is in array at ' + i)
	 		 this.fieldCrossRef[i] = decnt;
	 		 decnt++;
	 		 }
	      //else alert(cd.item(i).tagName+' not used')
        }
        
        
     ruls=node.getElementsByTagName("rule");

     this.rules = new Array()

	 for (var i = 0; i < ruls.length; i++)
        {
 		 this.rules[i]=new DESRules(ruls.item(i));
             
        }


}

  new Section(null);
  Section.prototype.display = section_display;
  Section.prototype.clear = section_clear;
  Section.prototype.verify = section_verify;
  Section.prototype.get = section_get;
  Section.prototype.didUserEnterData =section_didUserEnterData;


function section_display(node, dataNode)
{

  var divCtr = document.createElement('center');
  node.appendChild(divCtr);
  var divHelp = document.createElement('div');
  divCtr.appendChild(divHelp)
  if (this.help != null)
     divHelp.setAttribute('title', 'header=['+this.name+'] body=['+this.help+'] delay=[450] singleclickstop=[on] offsetx=[-200]');

  var alength = this.elements.length;
  var divFont = document.createElement('font');
  divFont.setAttribute("size", "+1");
  divHelp.appendChild(divFont);
  divFont.appendChild(document.createTextNode(this.name))

  

  if (this.required == "M")
     {
       divHelp.appendChild(document.createElement('br'));
       var divFont2 = document.createElement('font');
       divFont2.appendChild(document.createTextNode("Mandatory Section"))
       divFont2.setAttribute("size", "-2");
       divHelp.appendChild(divFont2);
      }


  var divTable  = document.createElement('table');
  divTable.setAttribute("width", "100%");
  divTable.setAttribute("bgcolor", "#FAEBD0");
  divHelp.appendChild(divTable);
  var divTableRow  = document.createElement('tr');
  divTable.appendChild(divTableRow);

  var divTableCol  = document.createElement('td');
  divTableRow.appendChild(divTableCol);
  divTableCol.setAttribute("width" , "10%");
  

  divTableCol  = document.createElement('td');
  divTableRow.appendChild(divTableCol);
  divTableCol.setAttribute("width" , "80%");

  var dataSubNode;
  
  if (dataNode == undefined)
      dataSubNode = undefined;
  else  
      dataSubNode = dataNode.childNodes;
      
  if (dataSubNode == undefined) {
     dataSubNode = new Array()
     for (i=0; i<alength; i++)
       dataSubNode[i] = undefined
     }
    
  
    var i;
    for (i=0; i<alength; i++)
      {
        
        this.elements[i].display(divTableCol, 0, dataSubNode[i]);
      }

  
 

  
  
}


function section_clear()
{
  var alength = this.elements.length;

  var i;
  for (i=0; i<alength; i++)
    {
      //alert(i)
      this.elements[i].clear();
    }

}
function section_verify()
{
  var ok = true;
  var dataEntered = false;
  var i;
  var alength = this.elements.length;

  if (this.required != "M") /* check to see if any data entered */
    {
      if (this.didUserEnterData() == false)
        return true;
    }

  
  for (i=0; i<alength; i++)
    {
       testvalue = this.elements[i].verify();
          if (testvalue != true)
             return false;
  
       if (testvalue != true)
         ok=false;
    }
  if (ok == false)
     return false;
  if (this.rules == null)
    return ok;
  for (i = 0; i < this.rules.length; i++)
    {
       
       testvalue = this.rules[i].test(this);
       if (testvalue != true)
         {
            alert(testvalue);
            ok = false;
         }
    }
  return ok;
  
}

function section_didUserEnterData()
{
    var dataEntered = false;
     
    for (i = 0; i < this.elements.length; i++)
        {
          if (this.elements[i].didUserEnterData() == true)
                dataEntered = true;

        }
      return dataEntered;
}

function section_get()
{
  if (this.verify() != true)
    {
      return false;
    }
    
   
  
  var a = "";
  var alength = this.elements.length;
  for (i=0; i<alength; i++)
    {
       a+=this.elements[i].get();
    }
  return a
}


