function formValidator () {

	// Hold Error Messages
	this.errorList = new Array();
	this.isEmpty = isEmpty;
	this.isNumber = isNumber;
	this.isWithinRange = isWithinRange;
	this.isChecked = isChecked;
	this.isAlphabetic = isAlphabetic;
	this.isAlphaNumeric = isAlphaNumeric;
	this.isEmailAddress = isEmailAddress;
	this.isValidSelection = isValidSelection;
    this.isValidMultipleSelection = isValidMultipleSelection;
	this.isPostcode = isPostcode;
	this.isDate = isDate;
	this.isPhoneNumber = isPhoneNumber;
    this.getFCKContent = getFCKContent;
	this.raiseError = raiseError;
	this.displayErrors = displayErrors;
	this.numErrors = numErrors;
	this.isUKPhoneNumber = isUKPhoneNumber;

}
function isEmpty (val)
{
	if (val.match(/^\s+$/) || val == "" || val == 0) {
		return true;
	} else {
		return false;
	}
}

function isNumber(val)
{
	if (isNaN(val))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function isWithinRange(val, min, max)
{
	if (val >= min && val <= max)
	{
		return true;
	}
	else
	{
		return false;
	}
}
function isChecked(obj)
{
	if (obj.checked)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function isAlphabetic(val)
{
	if (val.match(/^[a-zA-Z \-]+$/))
	{
		return true;
	}
	else
	{
		return false;
	}
}


function isPhoneNumber(val)
{
	if (val.match(/^[0-9 \-\(\)]+$/))
	{
		return true;
	}
	else
	{
		return false;
	}
}


function isAlphaNumeric(val)
{
	if (val.match(/^[a-zA-Z0-9 \n&]+$/))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function isEmailAddress(val)
{
	if (val.match(/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+\.([a-zA-Z0-9_-]+)+/))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function isPostcode(val)
{
	if (val.match(/^[a-zA-Z][a-zA-Z0-9]{1,3} \d[a-zA-Z]{2}$/))
	{
		return true;
	}
	else
	{
		return false;
	}
}


function isDate(val){

	var arrDate = val.split("/");

	if (arrDate.length < 3) {
		return false;
	}

	var DAY = arrDate[0];
	var MONTH = arrDate[1];
	var YEAR = arrDate[2];

	if (YEAR.length != 4 || YEAR < 1900) {
		return false;
	}

	strDate = MONTH + "/" + DAY + "/" + YEAR;
	var testDate=new Date(strDate);

	if (testDate.getMonth()+1==MONTH) {
		return true;
	}else{
		return false;
	}
}

/**
 * Is value a valid UK phone number (does it start with 01, 02, 03 or 07)
 */
function isUKPhoneNumber(val) {
	// Nothing is valid (field may be optional)
	if (val.length < 1) {
		return true;
	}

	return (/^0[1,2,3,7]/.test(val));
}


function isValidSelection(val) {

	if (val != 0) {
		return true;
	}
	else
	{
		return false;
	}

}


function isValidMultipleSelection(obj) {

    var found = false;
    for (i=0; i<obj.options.length; i++) {
        if ( obj.options[i].selected ) {
            found = true;
            return false;
        }
    }

	if (!found) {
		return true;
	}

}

function raiseError(msg)
{
	this.errorList[this.errorList.length] = msg;
}

function displayErrors()
{
	errorStr = "Please provide the following information:\n\n";
	for (x=0; x<this.errorList.length; x++)
	{
		errorStr += this.errorList[x] + "\n";
	}

	alert(errorStr);
}

function numErrors()
{
	return this.errorList.length;
}



function getSelectedCheckbox(buttonGroup) {
   // Go through all the check boxes. return an array of all the ones
   // that are selected (their position numbers). if no boxes were checked,
   // returned array will be empty (length will be zero)
   var retArr = new Array();
   var lastElement = 0;
   if (buttonGroup[0]) { // if the button group is an array (one check box is not an array)
      for (var i=0; i<buttonGroup.length; i++) {
         if (buttonGroup[i].checked) {
            retArr.length = lastElement;
            retArr[lastElement] = i;
            lastElement++;
         }
      }
   } else { // There is only one check box (it's not an array)
      if (buttonGroup.checked) { // if the one check box is checked
         retArr.length = lastElement;
         retArr[lastElement] = 0; // return zero as the only array value
      }
   }
   return retArr;
} // Ends the "getSelectedCheckbox" function

function getSelectedCheckboxValue(buttonGroup) {
   // return an array of values selected in the check box group. if no boxes
   // were checked, returned array will be empty (length will be zero)
   var retArr = new Array(); // set up empty array for the return values
   var selectedItems = getSelectedCheckbox(buttonGroup);
   if (selectedItems.length != 0) { // if there was something selected
      retArr.length = selectedItems.length;
      for (var i=0; i<selectedItems.length; i++) {
         if (buttonGroup[selectedItems[i]]) { // Make sure it's an array
            retArr[i] = buttonGroup[selectedItems[i]].value;
         } else { // It's not an array (there's just one check box and it's selected)
            retArr[i] = buttonGroup.value;// return that value
         }
      }
   }
   return retArr;
} // Ends the "getSelectedCheckBoxValue" function


function getFCKContent(FCKInstance) {
	var api = FCKeditorAPI.GetInstance(FCKInstance);
    var HTML = api.GetHTML().toLowerCase();

//alert(HTML);

    if ( HTML == "" || HTML == "<p>&nbsp;</p>" || HTML == "<p></p>" || HTML == "<br/>") {
        return false;
    } else {
	    return true;
    }
}

