
/*
* LastModified :
* Date        Ref Who JobID Description
* ----------------------------------------------------------------------------------
* 20090416        GSJ Added allowance for urls in fields whose name contains "URL".
* 20090422        GSJ Added code to check at least one 'Area of interest'
*                     checkbox has been checked.
* 25 Sep 2009     YS  Fix bugs in checking textareas and in check radio buttons.
*/

function validateRadio(field) {

	var radio_choice = false;

	for (m = 0; m < field.length; m++) {
	   if (field[m].checked){
         radio_choice = true;
         break; 
       }
	}

    return radio_choice;
}

function checkMandatory(fields) {

	var ret = true;
    var name = "";
	for (i = 0; (i < fields.length) && ret; i++) 
	{
		field = fields[i];
       if (field.length) 
		{  
            if(field[0].type.indexOf("radio") >= 0){
                name = field[0].name;
                // Radio button will have a few objects using the same name.
                // The validateRadio method will check the objects in one go.
                // So variable i should jump over the few objects.      
			    i=i+field.length-1;
			    ret = validateRadio(field); 
            }
		} else if(field.type.indexOf("checkbox") == 0){
			name = field.name;
			if (field.checked) ret = true;
            else ret = false;
        } else {
            name = field.name;
		    if (field.value.length > 0) 
			    ret = ret && true;
	    	else 
			    ret = ret && false;
		}
        if (ret == false)
			break;
	}
    if (ret == false){
        alert ("Please fill out all required fields.");
    }
    return ret;
}

function checkMandInterest (fields)
{
	var ret = false;
	for (i = 0; i < fields.length; i++)
	{
        field = fields[i];
		if (field.checked)
		{
			ret = true;
		}
	}
    if (ret == false)
        alert ("Please check at least one area of interest");
	return ret;
}
    
function checkEmailFields(fields) {

    var invalidFields = "";
	var ret = true;
	for (i = 0; i < fields.length; i++) 
	{
		field = fields[i];
        ret = echeck (field.value);
		if (ret == false) return ret;
	}
    return ret;
}

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) {
	   alert("Invalid E-mail address.");
	   return false;
	}
	
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) {
	   alert("Invalid E-mail address.");
	   return false;
	}
	
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) {
	    alert("Invalid E-mail address.");
	    return false;
	}
	
	 if (str.indexOf(at,(lat+1))!=-1) {
	    alert("Invalid E-mail address.");
	    return false;
	 }
	
	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) {
	    alert("Invalid E-mail address.");
	    return false;
	 }
	
	 if (str.indexOf(dot,(lat+2))==-1) {
	    alert("Invalid E-mail address.");
	    return false;
	 }
	
	 if (str.indexOf(" ")!=-1) {
	    alert("Invalid E-mail address.");
	    return false;
	 }
	
	  return true;
}

function checkCrawlers(allFields) {

    badNames = new Array("http");
    badFields = new Array();
    var bFirstError = true;
    var ret = true;
    var err_mes = "";

    for (i = 0; i < allFields.length; i++) 
	{
		field = allFields[i];
        for (j = 0; (j < badNames.length) && ret; j++)
             if(field.value.toLowerCase().indexOf(badNames[j]) >= 0 &&
			    field.name.indexOf("URL") < 0) /* allow urls here */
			 {
                   if (bFirstError == true) 
				   {
                       if (ret == false) err_mes += "\n";
                       err_mes += "URLS not permitted in field(s).\n";
                       ret = ret && false;
                       bFirstError = false;
                   }
             }
    }

    if(ret == false)
       alert(err_mes);

    return ret;
}


function validate(form) {
  var allFields = new Array();
  var mandatoryFields = new Array();
  var mandAreaInterest = new Array();
  var emailFields = new Array();
  var name = "";
  var type = "";
  var ret = true;

  var inputs = form.getElementsByTagName('input');
  for (fieldname in inputs) 
	  if (typeof inputs[fieldname] == 'object')
      {
		  if(inputs[fieldname].length){
            name = fieldname;
            type = inputs[fieldname][0].type;
          }else{
		    name = inputs[fieldname].name;
		    type = inputs[fieldname].type;
          }
		  if (type != 'button' &&
			  type != 'submit' &&
			  type != 'reset'  &&
			  type != 'hidden')
		  {
			  if (name.indexOf ("mand_a_area_interest") != 0){
			      allFields.push(inputs[fieldname]);
			      if (name.indexOf("mand_") == 0) 
				      mandatoryFields.push(inputs[fieldname]);
			      if (name.indexOf("email") >= 0 && 
				      inputs[fieldname].value.length >0) 
				      emailFields.push(inputs[fieldname]);
              }
		  }
		  if (type == 'checkbox' &&
			  name.indexOf ("mand_a_area_interest") == 0)
		  {
			  mandAreaInterest.push (inputs[fieldname]);
		  } 
	  }

  var textareas = form.getElementsByTagName('textarea');
  for (fname in textareas) 
  {		
	  if (typeof textareas[fname] == 'object')
	  {
 		  name = textareas[fname].name;

		  if (name != 'length') 
		  {
			  allFields.push (textareas[fname]);
			  if (name.indexOf ("mand_") == 0 &&
                  textareas[fname].disabled != true &&
                  textareas[fname].readonly != true) {
				  mandatoryFields.push (textareas[fname]);
              }
			  if (name.indexOf ("email") >= 0 &&
				  textareas[fname].type != 'hidden' &&
				  textareas[fname].value.length > 0)
			  {
				  emailFields.push (textareas[fname]);
			  }
		  }
	  }
  }

  ret = checkMandatory (mandatoryFields);
  if (ret == false) return ret;

  if (mandAreaInterest.length > 0)
  {
	  ret = checkMandInterest (mandAreaInterest);
      if (ret == false) return ret;
  }

  ret = checkEmailFields (emailFields);
  if(ret == false) return ret;

  ret = checkCrawlers (allFields);

  return ret;
}



