var Errors = 0;
var TEXTBOX_VALIDATOR_ITEMS = new Array();
var COMBOBOX_VALIDATOR_ITEMS = new Array();

function show_error(id, msg)
{
  var span = document.getElementById("validation_"+id);
  span.style.visibility = "visible";
  span.style.display = "";
  if (span.innerHTML != "") span.innerHTML += "<br>";
  span.innerHTML += msg;
  Errors++;
}

function trim(str)
{
  return str.replace(/^ *(.*?) *$/, "$1");
}

function reset_error_boxes(ITEMS)
{
  Errors = 0;
  
  for(i=0; i<ITEMS.length; i++)
  {
	var item = ITEMS[i];
    if( span = document.getElementById("validation_" + item.errBoxID) ) {
		span.style.display = "none";
		span.innerHTML = "";
	}
  }
}

function reset_errors()
{
  reset_error_boxes(TEXTBOX_VALIDATOR_ITEMS);
  reset_error_boxes(COMBOBOX_VALIDATOR_ITEMS);
}

function AddTextItemToValidator(id, func, err, errBoxId)
{
	TEXTBOX_VALIDATOR_ITEMS.push(eval({"id": id, "type": "textbox", "func": func, "err": err, "errBoxID" : errBoxId}));
}

function AddComboBoxItemToValidator(id, func, err, errBoxId)
{
	COMBOBOX_VALIDATOR_ITEMS.push(eval({"id": id, "type": "checkbox", "func": func, "err": err, "errBoxID" : errBoxId}));
}

function CheckValidatorItems(ITEMS)
{
	for(i=0; i<ITEMS.length; i++)
	{
	  item_has_error = false;
	  var item = ITEMS[i];
	  
	  var validator_item = document.getElementById(item.id);
	  item_value = trim(validator_item.value);
	  
	  if(typeof(item.func) == "function") {
		item_has_error = !item.func(item_value);
	  } else {			
		item_has_error = isEmpty(item_value);
		//if(item.type == "checkbox" && validator_item.selectedIndex <= 0) { item_has_error = true; }
	  }
	  
	  if(item_has_error) { show_error(item.errBoxID, item.err) };
	}
}

/* Helper functions */
function checkRegex(val, regex)
{
  var matched = regex.exec(val);  
  return matched != null;
}

function isEmpty(val)
{
  return (val == "");
}

function checkNumber(val)
{  
  return (!isEmpty(val) && checkRegex(val, /^\d+$/));
}

function checkEmail(val)
{
  return (!isEmpty(val) && checkRegex(val, /..*@..*\...*/));
}

function checkZipCode(val)
{
  return (!isEmpty(val) && checkRegex(val, /^\d{5}$/));
}

function checkAmountRequested(val)
{
  return (!isEmpty(val) && parseInt(val) > 100);
}

function checkPhone(val)
{
  return (!isEmpty(val) && checkRegex(val, /^\d{3}-\d{3}-\d{4}$/));
}

function checkPhoneWithExtention(val)
{
  return (!isEmpty(val) && checkRegex(val, /^\d{3}-\d{3}-\d{4}-\(\d{5}\)$/));
}

function checkDate(val)
{
  return (!isEmpty(val) && checkRegex(val, /^\d{2}\.\d{2}\.\d{4}$/));
}

function checkSSN(val)
{
  return (!isEmpty(val) && checkRegex(val, /^\d{3}-\d{2}-\d{4}$/));
}

AddTextItemToValidator("Name", null, "Contact name is required",6);
AddTextItemToValidator("EmailAddress", checkEmail, "Email address is required",7);


function validate()
{
  reset_errors();    

  CheckValidatorItems(TEXTBOX_VALIDATOR_ITEMS);
  CheckValidatorItems(COMBOBOX_VALIDATOR_ITEMS);
  
  if (Errors > 0) return false;

  return true;
}
