/* V A L I D A T E    F O R M */
function validateForm(validate) {
    var curr_field, fieldName, filterList, element, errno, tvalue, len;
    var missinginfo = '';
    var matchEmail =/email/i
    var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
    var matchField = /([a-zA-Z0-9]{1}[\w_]+[a-zA-Z0-9]{1})\[([\S]{0,})\]/i
    
    /*filters used*/
    var filter1 = /len/i //maximum length
    var filter2 = /numeric/i //numeric fields
    
    
    var checkList = validate.split(",");
    for( var z=0; z < checkList.length; z++ ) {
        //get the field name
        fieldName = checkList[z].replace(matchField,"$1");
        //get the field criterias
        curr_field = checkList[z].replace(matchField, "$2");
        element = document.getElementById(fieldName);
        
        //check if this field is the email field to use different filter
        if(matchEmail.test(fieldName)) {
            if( !filter.test(element.value) ) { errno = 3; } else { errno = 0; }
        } else {
            //check if field is blank
            if( element.value == '' ) {
                errno = 1;
            } else {
                filterList = curr_field.split(";");
                for( var f=0; f < filterList.length; f++ ) {
                    
                    tvalue = filterList[f].split("=");
                    if(filter1.test(filterList[f])) {//check field length
                        if(element.value.length > tvalue[1] ) { errno = 2; len=tvalue[1]; break; } else { errno = 0; }
                    } else if(filter2.test(filterList[f])){//check if field is numeric
                        if(!IsNumeric(element.value)) { errno = 4; break; } else { errno = 0; }
                    }
                }
            }
        }
        //ERRORS messages type
        if(errno==0){ //field is valid
            element.style.backgroundColor='#FFFFFF';
        }else if(errno==1) {//field is blank
            missinginfo += '\n - '+ capitalize(fieldName)+ ' is required';
            element.style.backgroundColor='#E3F0FF';
        }else if(errno==2) {//max characters permitted
            missinginfo += '\n - '+ capitalize(fieldName)+ ' Max. Characther allowed = '+len;
            element.style.backgroundColor='#E3F0FF';
        }else if(errno==3) {//invalid email
            missinginfo += '\n - '+ capitalize(fieldName)+ ' is not valid';
            element.style.backgroundColor='#E3F0FF';
        }else if(errno==4) {//numeric fields
            missinginfo += '\n - '+ capitalize(fieldName)+ ' is a numeric field';
            element.style.backgroundColor='#E3F0FF';
        }
    }
    if (missinginfo != '') {
        missinginfo = '_____________________________\n' + 'Please fill in the required fields:\n' +
        missinginfo + '\n_____________________________';
        alert(missinginfo);
        return false;
    } else {
        return true;
    }
    return false;
}

/*C O N V E R T   F I R S T   L E T T E R   T O    U P P E R C A S E*/
function capitalize(str) {
  var arr=str.split("");
  arr[0]=arr[0].toUpperCase();
  var s=arr.join("");
  return s;
}

/*C H E C K   I F   A   F I E L D   I S   N U M E R I C*/
function IsNumeric(sText){
    var ValidChars = "0123456789.";
    var IsNumber=true;
    var Char;

 
    for (i = 0; i < sText.length && IsNumber == true; i++) { 
        Char = sText.charAt(i); 
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
   return IsNumber;
   
}

function delPhoto(id, elem){
    var cfm = confirm('Are you sure you wish to delete this file?');
    if(cfm){
        ajax('index.php?action=deletePhoto&id='+id, elem);
    } else {
        return false;
    }
}

function ajax(fragment_url,element_id) {

    var element = document.getElementById(element_id);

    document.body.style.cursor = "progress";
    
    element.innerHTML = '<font size=1>Loading <img src="images/spinner.gif"></font>';
    
    if (window.XMLHttpRequest) { //for all browers but IE
        xmlhttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) { //for IE
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    }
    
    xmlhttp.open("GET", fragment_url+ '&r='+Math.random());
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.body.style.cursor = "auto";
            element.innerHTML = (unescape(xmlhttp.responseText)).replace(/\+/gi," ");
        }
    }
    xmlhttp.send(null);
}


/*select drop down */
function selectList(myBox) {
    var selection = document.getElementById(myBox);
    for(var i = 0; i < selection.options.length; i++) {
    if (selection.options[i] != null)
    selection.options[i].selected = true;
    }
    return true;
}

//O N L Y   A L L O W   N U M B E R S
function numbersonly(myfield, e, dec) {
  var key;
  var keychar;

  if (window.event)
    key = window.event.keyCode;
  else if (e)
    key = e.which;
  else
    return true;
  keychar = String.fromCharCode(key);

  // control keys
  if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) )
    return true;

  // numbers
  else if ((("0123456789").indexOf(keychar) > -1))
    return true;

  // decimal point jump
  else if (dec && (keychar == ".")) {
    myfield.form.elements[dec].focus();
    return false;
  } else
    return false;
}


//P O P U L A T E   L I S T
// Control flags for list selection and sort sequence

// Sequence is on option value (first 2 chars - can be stripped off in form processing)

// It is assumed that the select list is in sort sequence initially

var singleSelect = true;  // Allows an item to be selected once only

var sortSelect = true;  // Only effective if above flag set to true

var sortPick = true;  // Will order the picklist in sort sequence



// Initialise - invoked on load

function initIt(fieldName) {

  var selectList = document.getElementById(fieldName+"_srcList");

  var pickList = document.getElementById(fieldName+"_destList");

  var pickOptions = pickList.options;

  pickOptions[0] = null;  // Remove initial entry from picklist (was only used to set default width)

  selectList.focus();  // Set focus on the selectlist

}



// Adds a selected item into the picklist 

function addIt(fieldName) {

  var selectList = document.getElementById(fieldName+"_srcList");

  var selectIndex = selectList.selectedIndex;

  var selectOptions = selectList.options;

  var pickList = document.getElementById(fieldName+"_destList");

  var pickOptions = pickList.options;

  var pickOLength = pickOptions.length;

  // An item must be selected

  if (selectIndex > -1) {

    pickOptions[pickOLength] = new Option(selectList[selectIndex].text);

    pickOptions[pickOLength].value = selectList[selectIndex].value;

    // If single selection, remove the item from the select list

    if (singleSelect) {

      selectOptions[selectIndex] = null;

    }

    if (sortPick) {

      var tempText;

      var tempValue;

      // Sort the pick list

      while (pickOLength > 0 && pickOptions[pickOLength].value < pickOptions[pickOLength-1].value) {

        tempText = pickOptions[pickOLength-1].text;

        tempValue = pickOptions[pickOLength-1].value;

        pickOptions[pickOLength-1].text = pickOptions[pickOLength].text;

        pickOptions[pickOLength-1].value = pickOptions[pickOLength].value;

        pickOptions[pickOLength].text = tempText;

        pickOptions[pickOLength].value = tempValue;

        pickOLength = pickOLength - 1;

      }

    }

  }

}



// Deletes an item from the picklist

function delIt(fieldName) {

  var selectList = document.getElementById(fieldName+"_srcList");

  var selectOptions = selectList.options;

  var selectOLength = selectOptions.length;

  var pickList = document.getElementById(fieldName+"_destList");

  var pickIndex = pickList.selectedIndex;

  var pickOptions = pickList.options;

  if (pickIndex > -1) {

    // If single selection, replace the item in the select list

    if (singleSelect) {

      selectOptions[selectOLength] = new Option(pickList[pickIndex].text);

      selectOptions[selectOLength].value = pickList[pickIndex].value;

    }

    pickOptions[pickIndex] = null;

    if (singleSelect && sortSelect) {

      var tempText;

      var tempValue;

      // Re-sort the select list

      while (selectOLength > 0 && selectOptions[selectOLength].value < selectOptions[selectOLength-1].value) {

        tempText = selectOptions[selectOLength-1].text;

        tempValue = selectOptions[selectOLength-1].value;

        selectOptions[selectOLength-1].text = selectOptions[selectOLength].text;

        selectOptions[selectOLength-1].value = selectOptions[selectOLength].value;

        selectOptions[selectOLength].text = tempText;

        selectOptions[selectOLength].value = tempValue;

        selectOLength = selectOLength - 1;

      }

    }

  }

}
