 ///////////////////
//GENERIC FUNCTIONS
 ///////////////////

   function confirmDel(myForm) {

   	 if (confirm("Are you sure you want to perform this deletion?")) {
         	 myForm.deleteFlag.value = "true";
             myForm.submit();
             return true;
          } else return false;
   }

  //allows item
  function FormItem(field,display) {
     this.field = field;
     this.display = display;
  }


  /**
    * @var Array [element-> FormItem]
    */
  var text_items = new Array();
  var date_items = new Array();
  var select_items = new Array();
  var numeric_items = new Array();


  function addToCheckArray(datatype,formitem) {
    if (datatype == "select")
      select_items.push(formitem);
    else if (datatype == "date")
      date_items.push(formitem);
    else if (datatype == "numeric")
      numeric_items.push(formitem);
    else if (datatype == "text" || datatype == "varchar")
      text_items.push(formitem);
  }

  //check_array is array of FormItem where each has the form field and the message to display
  function formCheck(myForm) {

     //allow delete submissions to go through
     if (myForm.deleteFlag && (myForm.deleteFlag.value == "true"))
       return true;
    
     var msg = "";

     //check entered fields
     for (var i = 0; i < text_items.length; i++) {
        if (eval("myForm." + (text_items[i]).field + " && " + "myForm." + (text_items[i]).field + ".value") == "") {

           if ((text_items[i]).display.indexOf("your ") != -1)
             msg = (text_items[i]).display;
           else
             msg = "the " + (text_items[i]).display;
        }
     }


     var dmsg = "";

     //check entered dates
     for (var i = 0; i < date_items.length; i++) {


          denter = eval("myForm." + (date_items[i]).field + ".value") ;

          darray = denter.split("/");

          day = parseInt(darray[0],10);
          month = parseInt(darray[1],10);
          year = parseInt(darray[2],10);

          prefix = date_items[i].display + ": ";

          if (darray.length < 3)
            dmsg = prefix+"date requires the use of / separator";
          else if (isNaN(day) || isNaN(month) || isNaN(year))
            dmsg = prefix+"only numeric values may be entered for the date items";
          else if (day < 1 || day > 31)
            dmsg = prefix+"day should be between 1 and 31";
          else if (month < 1 || month > 12)
            dmsg = prefix+"month should be between 1 and 12";
          else if (year < 1 || year > 99)
            dmsg = prefix+"year should be between 01 and 99";


     }

     var smsg = "";

     //check select boxes
     for (var i = 0; i < select_items.length; i++) {

       sbox = eval("myForm." + (select_items[i]).field);

       sopt = sbox.options[sbox.selectedIndex];

       if (sopt.value == "-1")
         smsg = select_items[i].display;
    }

    var nmsg = "";

     //check numeric fields
     for (var i = 0; i < numeric_items.length; i++) {
        if (eval("myForm." + (numeric_items[i]).field + " && " + "!isNaN(myForm." + (numeric_items[i]).field + ".value)")) {

           if ((numeric_items[i]).display.indexOf("your ") != -1)
             nmsg = (numeric_items[i]).display;
           else
             nmsg = "the " + (numeric_items[i]).display;
        }
     }


    if (msg != "") {
       alert("Required field missing: please enter " + msg);
       return false;
    } else if (dmsg != "") {
       alert("Required field error: please check the " + dmsg + " (dd/mm/yy format only)");
       return false;
    } else if (smsg != "") {
       alert("Required field incomplete: An option must be selected for " + smsg);
       return false;
    } else if (nmsg != "") {
       alert("Required field error: " + nmsg + " must be a numeric value.");
       return false;
    } else if (myForm.password && myForm.password_test && myForm.password.value != myForm.password_test.value) {
       alert("Passwords do not match");
       return false;
    }

    return true;

  }

  //change page for form-style page changer
   function changePage(amount) {

      document.pageChooser.row_start.value = Number(document.pageChooser.row_start.value) + amount;

      if (Number(document.pageChooser.row_start.value) < 0)
         document.pageChooser.row_start.value = 0;

      document.pageChooser.submit();
   }



 /**
 //JS DHTML TABLE FILLER / CHOOSER / SORTER FUNCTIONS
  **/



//first row
var start = 0;
//number of rows to display
var rowCount = 10;

//default CSS ID of table output
var tableID = "displayData";
//default CSS ID of page choosing DIV
var pagechooserID = "displayDataChooser";

//internal array - output fields
var fieldNameArray;
//internal array - table data
var tableDataArray;
//internal array - keep data for refinement
var refineKeepArray;


function setTableID(newID) {
   tableID = newID;
}

function setPcID(newID) {
   pagechooserID = newID;
}

function setDataArray(inArray) {
    tableDataArray = inArray;
}

function setFieldArray(inArray) {
    fieldNameArray = inArray;
}


function changePage(amount) {
    clearTable();
    start += amount;
    drawTable();
}

function refineResults(selectBox) {


}

// Draw table from tableDataArray array of objects
function drawTable() {
     var tr, td;
     tbody = document.getElementById(tableID);

     // loop through data source
     for (var i = start; i < Math.min(start+rowCount,tableDataArray.length); i++) {
        tr = tbody.insertRow(tbody.rows.length);

        // adminFields comes from classes
        for (var x = 0; x < fieldNameArray.length; x++) {
          td = tr.insertCell(tr.cells.length);
          //td.setAttribute("align", "center");
          td.innerHTML = eval("tableDataArray[i]." + fieldNameArray[x]);
        }


     }

     if (tableDataArray.length > rowCount) {
        drawPageChooser();
     }
}

//Draw page select code
function drawPageChooser() {
      var pc = document.getElementById(pagechooserID);

      var page_nbr = (start / (rowCount)) + 1;

      var total_pages = Math.floor((tableDataArray.length / rowCount));

      if (tableDataArray.length % rowCount != 0) total_pages++;


      if (start > 0)
         control_prev = "<a href='javascript: changePage(-" + rowCount.toString() + ");'>" + show_image("a_prevarrow_w.gif") + "</a>";
      else
         control_prev = "";

      if ((start + rowCount) < tableDataArray.length)
         control_next = "<a href='javascript: changePage(" + rowCount.toString() + ");'>" + show_image("a_nextarrow_w.gif") + "</a>";
      else
         control_next = "";


      pc.innerHTML = control_prev + " Page " + page_nbr + " of " + total_pages + "   " + " " + control_next;

}

// Remove existing table rows
function clearTable() {
    tbody = document.getElementById(tableID);
    while (tbody.rows.length > 0) {
        tbody.deleteRow(0);
    }
}

var sortField = "";

function sortTable(inField) {
    clearTable();

    //already sorted so invert sort
    if (inField == sortField) {
       sortField = inField;
       tableDataArray.sort(sortByStringInv);
       sortField = "";
    } else {
       sortField = inField;
       tableDataArray.sort(sortByString);
    }

    drawTable();
    return false;
}

function sortByString(a, b) {
    if (sortField == "") return 0;

    a = eval("a." + sortField + ".toLowerCase( )");
    b = eval("b." + sortField + ".toLowerCase( )");
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}

function sortByStringInv(a, b) {
    if (sortField == "") return 0;

    a = eval("a." + sortField + ".toLowerCase( )");
    b = eval("b." + sortField + ".toLowerCase( )");
    return ((a > b) ? -1 : ((a < b) ? 1 : 0));
}

