function trim(s) {

    if((s==null)||(typeof(s)!='string')||!s.length) {
        return '';
    }
    return s.replace(/^\s+/,'').replace(/\s+$/,'');

}

function check_blank(field) {

    if (field == '') {
        return false;
    }
    if (trim(field) == '') {
        return false;
    }
    return true;
}

function validate_survey() {
    
    var gender = document.form1.gender;
    var hs = document.form1.hs;
    var nh = document.form1.nh;
    var fhs = document.form1.fhs;
    var fnh = document.form1.fnh;
    var bullying = document.form1.bullying.value;
    var pressure = document.form1.pressure.value;
    var drugs = document.form1.drugs.value;
    var prostitution = document.form1.prostitution.value;
    var alcohol = document.form1.alcohol.value;
    var gangs = document.form1.gangs.value;
    var weapons = document.form1.weapons.value;
    var issues = new Array(bullying, pressure, drugs, prostitution, alcohol, gangs, weapons, issues);
    var fight = document.form1.fight;

    if (!(gender[0].checked || gender[1].checked)) {
	alert ("Please select a gender.");
	return false;
    }
    
    else if (!check_selected(hs)) {
	alert("Please choose an answer for question 1a.");
	return false;
    }

    else if (!check_selected(nh)) {
	alert("Please choose an answer for question 1b.");
	return false;
    }

    else if (!check_selected(fhs)) {
	alert("Please choose an answer for question 1c.");
	return false;
    } 
   
    else if (!check_selected(fnh)) {
	alert("Please choose an answer for question 1d.");
	return false;
    } 
    
    else if (check_match(issues, 0)) {
	alert ("Please rank all issues in question 2 a value from 1 to 7.");
	return false;
    }

    else if (!check_match(issues, 1)) {
	alert ("Please make sure you do not rank any of the issues in question 2 the same value.");
	return false;
    }

    else if (!check_match(issues, 2)) {
	alert ("Please make sure you do not rank any of the issues in question 2 the same value.");
	return false;
    }

    else if (!check_match(issues, 3)) {
	alert ("Please make sure you do not rank any of the issues in question 2 the same value.");
	return false;
    }

    else if (!check_match(issues, 4)) {
	alert ("Please make sure you do not rank any of the issues in question 2 the same value.");
	return false;
    }

    else if (!check_match(issues, 5)) {
	alert ("Please make sure you do not rank any of the issues in question 2 the same value.");
	return false;
    }

    else if (!check_match(issues, 6)) {
	alert ("Please make sure you do not rank any of the issues in question 2 the same value.");
	return false;
    }

    else if (!check_match(issues, 7)) {
	alert ("Please make sure you do not rank any of the issues in question 2 the same value.");
	return false;
    }

    else if (!check_selected(fight)) {
	alert ("Please choose 'Yes' or 'No' For question 4.");
	return false;
    }
    
    return true;
}

function check_selected(group) {
    
    for (var i = 0; i < group.length; i++) {
	if (group[i].checked) {
	    return true;
	}
    }
    return false;
}

function check_match(match_array, val) {

    for (var i = 0; i < match_array.length; i++) {
        if (match_array[i] == val) {
	    return true;
	}
    }
    return false;
}

function isDigit(num) {

    if (num.length>1) {
        return false;
    }
    var string="1234567890";
    if (string.indexOf(num)!=-1) {
        return true;
    }
    return false;
}

function isInteger(val){

    for(var i=0;i<val.length;i++) {
        if(!isDigit(val.charAt(i))) {
            return false;
        }
    }
    return true;
}

function formatCurrency(num) {
    
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
        num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
 	cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
    num.substring(num.length-(4*i+3));
    //don't include cents - James edit
    //return (((sign)?'':'-') + '$' + num + '.' + cents);
    return (((sign)?'':'-') + '$' + num);
}

function checkDigit(event, field) {
   
    var keyCode = event.which;
    if(keyCode == undefined) {
	keyCode = event.keyCode;
    }
    if ( keyCode == 46 || keyCode == 8 || keyCode == 9 ) { 
    } 
    else { 
	if (keyCode < 95) { 
	    if (keyCode < 48 || keyCode > 57 ) { 
	        alert('Please enter only digits.');
		field.value = '';
		return false;
	    } 
    	} 
    	else { 
	    if (keyCode < 96 || keyCode > 105 ) { 
	        alert('Please enter only digits.');
		field.value = '';
		return false;
   	    }  
    	} 
    }
}

function changeTotal(val) {
    
    var chief = document.form1.package1.value;
    var platinum = document.form1.package2.value;
    var gold = document.form1.package3.value;
    var silver = document.form1.package4.value;
    var bronze = document.form1.package5.value;
    var circle = document.form1.package6.value;
    var eight = document.form1.package7.value;
    var individual = document.form1.package8.value;

    var total = (chief*15000)+(platinum*10000)+(gold*5000)+(silver*2500)+(bronze*500)+(circle*250)+(eight*1200)+(individual*175);

    document.form1.totalStripped.value = total;
    total = formatCurrency(total);
    document.form1.total.value = total;
    document.getElementById('total').innerHTML = total;
}

function validate_postal(postal) {

    var regex = /^\D{1}\d{1}\D{1}\ ?\d{1}\D{1}\d{1}$/;
    return regex.test(postal);
}

function validate_phone(phone) {

    var regex = /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/
    return regex.test(phone);
}

function echeck(str) {

      var at="@";
      var dot=".";
      var lat=str.indexOf(at);
      var lstr=str.length;
      var ldot=str.indexOf(dot);

      if (str.indexOf(at)==-1){
           return false;
      }

      if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
          return false;
      }

      if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
          return false;
      }

      if (str.indexOf(at,(lat+1))!=-1){
          return false;
      }

      if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
          return false;
      }

      if (str.indexOf(dot,(lat+2))==-1){
          return false;
      }

      if (str.indexOf(" ")!=-1){
          return false;
      }

      return true;
}

function isExpiryDate(year, month) {

    var today = new Date();
    var expiry = new Date(year, month);

    if (today.getTime() > expiry.getTime()) {
        return true;
    }

    else {
        return false;
    }
}

function testCreditCard (ccnum, cctype, ccexpirymonth, ccexpiryyear) {

  if (isExpiryDate(ccexpiryyear, ccexpirymonth)) {
      return "expired";
  }
  else if (checkCreditCard (ccnum, cctype)) {
      return "valid";
  }
  else {
      return "invalid";
  }
}

function validate_gala() {
    
    var name = document.form1.name.value;
    var address = document.form1.address.value;
    var city = document.form1.city.value;
    var postal = document.form1.postal.value;
    var phone = document.form1.phone.value;
    var email = document.form1.email.value;
    var total = document.form1.totalStripped.value;
    var cctype = document.form1.cctype.value;
    var ccname = document.form1.ccname.value;
    var ccnum = document.form1.ccnum.value;
    var ccmon = document.form1.ccmon.value;
    var ccyear = document.form1.ccyear.value;

    if (!check_blank(name)) {
	alert('Name cannot be blank.');
	return false;
    }

    if (!check_blank(address)) {
	alert('Address cannot be blank.');
	return false;
    }

    if (!check_blank(city)) {
	alert('City cannot be blank.');
	return false;
    }

    if (!check_blank(postal)) {
	alert('Postal Code cannot be blank.');
	return false;
    }

    if (!validate_postal(postal)) {
	alert('Invalid Postal Code. Must be in the form of T5H 0H7.');
	return false;
    }

    if (!check_blank(phone)) {
	alert('Telephone cannot be blank.');
	return false;
    }

    if (!validate_phone(phone)) {
	alert('Invalid Phone Number. Must be in the form of (999) 999-9999.');
	return false;
    }

    if (!check_blank(email)) {
	alert('Email cannot be blank.');
	return false;
    }

    if (!echeck(email)) {
	alert('Invalid E-Mail address.');
	return false;
    }

    if (total == 0) {
	alert('You must choose at least one package.');
	return false;
    }

    if (cctype == "- Select Card Type -") {
        alert ("You must select a credit card type.");
        return false;
    }

    if (!check_blank(ccname)) {
	alert('Name on Card is required.');
	return false;
    }
    
    if (!check_blank(ccnum)) {
	alert('Credit Card Number is required.');
	return false;
    }

    if (ccmon == "- Month -") {
        alert ("You must select a credit card expiry month.");
        return false;
    }

    if (ccyear == "- Year -") {
        alert ("You must select a credit card expiry year.");
        return false;
    }

    var valid = testCreditCard(ccnum, cctype, ccmon, ccyear);
    if (valid == "expired") {
        alert ("Your credit card is expired.");
        return false;
    }
    if (valid == "invalid") {
        alert ("Invalid credit card number for " + cctype);
        return false;
    }

    return true;
}
