var rowCount = 0;
var fields = new Array();
var validateNotMandatory = false;

function initFocus()
{
  for (var j = 0; j < fields.length; j++)
  {
    if (fields[j].onInit.length > 0)
    {
      eval(fields[j].onInit);
    }
  }
  if (document.forms.length > 0) 
  {
    if (document.forms[0].elements.length > 0)
    {
      for (i = 0; i < document.forms[0].elements.length; i++)
      {
        var e = document.forms[0].elements[i];
        if (e.type != 'hidden')
        {
          e.focus();
          return;
        }
      }
    }
  }
}

function findField(fieldName)
{
  for (var j = 0; j < fields.length; j++)
  {
    if (fields[j].fieldName == fieldName)
      return fields[j];
  }
  alert('Field not found:' + fieldName);
  return null;
}

function hideId(fieldName)
{
  afield = findField(fieldName);
  afield.fieldVisible = false;
  document.getElementById(afield.fieldName + '.row').style.display = 'none';
}
function showId(fieldName)
{
  afield = findField(fieldName);
  afield.fieldVisible = true;
  document.getElementById(afield.fieldName + '.row').style.display = '';
}

function requiredId(fieldName, required)
{
  afield = findField(fieldName);
  afield.required = required;
  var astyle
  if (required)
    astyle = 'PropertyLabelRequired';
  else
    astyle = 'PropertyLabel';
  document.getElementById(afield.fieldName + '.label').className = astyle;
}

function field(fieldName, required, fieldMethod, fieldMsg, fieldVisible, onInit)
{
  this.required = required;
  this.fieldMethod = fieldMethod;
  this.fieldMsg = fieldMsg;
  this.fieldName = fieldName;
  this.fieldVisible = fieldVisible;
  this.onInit = onInit;
}

function hasValue(formField, aField)
{
  if (formField.type == 'text' || formField.type == 'hidden')
  {
    if (formField.value == '')
    {
      return false;
    }
  }
  else if (formField.type == 'select-one')
  {
    if (formField.selectedIndex == 0)
    {
      return false;
    }
  }
  else if (formField.type == 'checkbox')
  {
    if (formField.checked)
      return true;
    return false;
  }
  return true;
}

function validateRequiredValue(formField, aField)
{
  if (!aField.required)
    return true;
    
  if (!aField.fieldVisible)
    return true;
    
  if (!hasValue(formField, aField))
  {
    alert("Please enter the details for '" + aField.fieldMsg + "'.");
    return false;
  }      
  return true;
}

function validateInt(formField, aField)
{
	if (!validateRequiredValue(formField, aField))
		return false;
	
	for (var j = 0; j < formField.value.length; j++)
	{
		var c = formField.value.charAt(j);
		switch(c)
		{
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
			break
		default:
	    alert("The field '" + aField.fieldMsg + "' requires a valid number.");
  	  return false;
	  }
	}
  return true;
}

function validateEmail(formField, aField)
{
	if (!validateRequiredValue(formField, aField))
		return false;
		
	if (formField.value == '')
	  return true;
	  
	if (formField.value.indexOf('@') == -1)
	{
    alert("The field '" + aField.fieldMsg + "' requires a valid email address.");
    return false;
  }
	return true;
}

function validatePhoneNumber(formField, aField)
{
	if (!validateRequiredValue(formField, aField))
		return false;
		
	if (formField.value == '')
	  return true;

  var count = 0;
	for (var j = 0; j < formField.value.length; j++)
	{
		var c = formField.value.charAt(j);
		switch(c)
		{
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
		  count++;
			break
	  }
	}
	if (count != 8 && count != 10)
	{
    alert("The field '" + aField.fieldMsg + "' requires a valid phone number with 8 or 10 numbers.");
    return false;
  }
	return true;
}

function safeValidateFields(aform)
{
	for (var i = 0; i < fields.length; i++)
	{
	  var aField = fields[i];
		var formField = aform.elements[aField.fieldName];
	  if (!eval(aField.fieldMethod + '(formField, aField)'))
	  {
			formField.focus();
	  	return false;
	  }
	}
	return true;
}
function safeMultipleValidateFields(aform)
{
  for (var row = 0; row < rowCount; row++)
  {
	  for (var i = 0; i < fields.length; i++)
	  {
	    var aField = fields[i];
	    var formField = aform.elements[aField.fieldName + row];
	    if (!eval(aField.fieldMethod + '(formField, aField)'))
	    {
	      formField.focus();
	      return false;
	    }
	  }
	}
  return true;
}

function checkFieldsForAnyValues(aform)
{
  for (var i = 0; i < fields.length; i++)
  {
    var aField = fields[i];
    var formField = aform.elements[aField.fieldName];
    if (hasValue(formField, aField))
    {
      return true;
    }
  }
  return false;
}

function validateFields(aform)
{
  try
  {
    if (validateNotMandatory)
    {
      if (!checkFieldsForAnyValues(aform))
        return true;
    }
    
    if (rowCount == 0)
      return safeValidateFields(aform)
    else
      return safeMultipleValidateFields(aform);
  }
  catch (e)
  {
    alert("Exception:" + e.message);
  }
  return false;
}

function buttonClicked(abutton, validateNotMandatoryValue)
{
  // Assign to ContentProvider.SUBMIT_EVENT 
  abutton.form.se.value = abutton.name;
  validateNotMandatory = validateNotMandatoryValue;
}

function checkAgreed(aform)
{
  try
  {
    return checkAgreedSafe(document.forms['validation']);
  }
  catch (e)
  {
    alert("Exception:" + e.message);
  }
  return false;
}

function checkAgreedSafe(aform)
{
	// aform.acknowledge.checked
	if (aform.acknowledge.length == 0)
	{
		alert("No acknowledge found");
		return false;
	}
	
  for (i = 0; i < aform.acknowledge.length; i++) 
  {
	  if (aform.acknowledge[i].value == 'Yes') 
	  {
			if (aform.acknowledge[i].checked)
  			return true; 
			alert("You must first agree that you have read and understood the Terms and Conditions of entry before you can proceed to the PayPal. Once you have read the conditions click the Yes button. Then click the PayPal logo.");
			return false;
	  }
	}
	alert("We never found the radio control");
	return false
}

function dateListChanged(select)
{
	var name = select.name;
	
	var baseName = name.substring(0, name.indexOf(".")) 
	
	var form = select.form;
	
	var day = form.elements[baseName + ".day"]
	var month = form.elements[baseName + ".month"]
	var year = form.elements[baseName + ".year"]
	
	if (day.selectedIndex != 0 && month.selectedIndex != 0 && year.selectedIndex != 0)
	{
		var timestamp = year.value + "/" + month.value + "/" + day.value;
		form.elements[baseName].value = timestamp;
	}
}
