function confirmDelete(msg, displayFullMessage)
{
    if (displayFullMessage === undefined)
    {
        displayFullMessage = false;
    }
    if(displayFullMessage == false)
    {
        return confirm("Are you sure you wish to delete "+msg+"?");
    }
    return confirm(msg);
}

function setControlError(control)
{
    if(!document.all)
    {
        control.style.border = '1px solid red';
        control.focus();
    }
    else
    {
        control.className = 'highlightControl';
        control.focus();
    }
}
function setControlOk(control)
{
    if(!document.all)
    {
        control.style.border = '';
    }
    else
    {
        control.className = '';
    }
}

function validateEmpty(fld, name) {
    if (fld.value.length == 0) {
        setControlError(fld);
        alert(name+" has not been filled in.\n");
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}
function validateNotEmpty(fld, name) {
    if (fld.value.length == 0) {
        setControlError(fld);
        alert(name+" has not been filled in.\n");
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}
function validateMinLength(fld, name, length) {
    if (fld.value.length < length) {
        setControlError(fld);
        alert(name+" must be at least "+length+" characters.\n");
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}

function validateMaxLength(fld, name, length) {
    if (fld.value.length > length) {
        setControlError(fld);
        alert(name+" must be less than "+length+" characters.\n");
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}
function validateRegex(fld, name, pattern) {
    var regex = new RegExp(pattern);
    var match = regex.exec(fld.value);
    if (match == null) {
        setControlError(fld);
        alert(name+" does not match pattern.\n");
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}

function validateTime(fld, name) {

    if(fld.value == '')
    {
        setControlError(fld);
        alert(name+" can not be empty!");
        return false;
    }

    var errorMsg = '';
    re = /^(\d{1,2}):(\d{2})$/;
    regs = fld.value.match(re);
    if(regs)
    {
        // 24-hour time format
        if(regs[1] > 23)
        {
            errorMsg = "Invalid value for hours '" + regs[1] + "' (0-23).\nExamples are 11.23, 22:00 etc.";
        }
        if(errorMsg == '' && regs[2] > 59)
        {
            errorMsg = "Invalid value for minutes '" + regs[2] + "' (0-59).\nExamples are 11.23, 22:00 etc.";
        }
    }
    else
    {
        errorMsg = "Invalid time format: '" + fld.value + "'.\nExamples are 11.23, 22:00 etc.";
    }

    if(errorMsg != '')
    {
        setControlError(fld);
        alert(errorMsg);
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}

function validateTimeIfValue(fld, name) {
    if(fld.value == '')
    {
        return true;
    }
    return validateTime(fld, name);
}

/**
 * Checks if a date is between startDate and endDate
 *
 * @requires date-functions.js
 * @param 
 * @param
 * @returns
 */
function validateDateBetween(fld, name, startDate, endDate, dateFormat) {
    var startDateObject     = new Date(Date.parseDate(startDate, dateFormat));
    var endDateObject       = new Date(Date.parseDate(endDate, dateFormat));
    var fldDateObject       = new Date(Date.parseDate(fld.value, dateFormat));
    
    if (fldDateObject <  startDateObject || fldDateObject > endDateObject)
    {
        setControlError(fld);
        alert(name + ' must be between the dates (' + startDateObject.dateFormat("d/m/y") +') - (' + endDateObject.dateFormat("d/m/y") +')');
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}

/**
 * Checks if a date is less than another date
 *
 * @requires date-functions.js
 * @param 
 * @param
 * @returns
 */
function validateDateLessThan(fld, name, checkDate, dateFormat) {
    var checkDateObject     = new Date(Date.parseDate(checkDate, dateFormat));
    var fldDateObject       = new Date(Date.parseDate(fld.value, dateFormat));
    
    if (fldDateObject > checkDateObject)
    {
        setControlError(fld);
        alert(name + ' can not be after the date (' + checkDateObject.dateFormat("d/m/y") + ')');
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}

/**
 * Checks if a date is greater than another date
 *
 * @requires date-functions.js
 * @param 
 * @param
 * @returns
 */
function validateDateGreaterThan(fld, name, checkDate, dateFormat) {
    var checkDateObject     = new Date(Date.parseDate(checkDate, dateFormat));
    var fldDateObject       = new Date(Date.parseDate(fld.value, dateFormat));
    
    if (fldDateObject < checkDateObject)
    {
        setControlError(fld);
        alert(name + ' can not be before the date (' + checkDateObject.dateFormat("d/m/y") + ')');
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}

function validateMinValue(fld, name, value) {
    if (fld.value < value) {
        setControlError(fld);
        alert(name+" must be more than "+value+".\n");
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}

function validateMaxValue(fld, name, value) {
    if (fld.value > value) {
        setControlError(fld);
        alert(name+" must be less than or equal to "+value+".\n");
        return false;
    } else {
        setControlOk(fld);
        return true;
    }
}


function validateMatch(fld1, fld2)
{
    if(fld1.value == fld2.value)
    {
        setControlOk(fld1);
        setControlOk(fld2);
        return true;
    }
    alert('Fields do not match');
    setControlError(fld1);
    setControlError(fld2);
    return false;
}

function validateAlphaNumeric(fld, name)
{
    var numaric = fld.value;
	for(var j=0; j<numaric.length; j++)
    {
        var alphaa = numaric.charAt(j);
        var hh = alphaa.charCodeAt(0);
        if((hh > 47 && hh<58) || (hh > 64 && hh<91) || (hh > 96 && hh<123))
        {

        }
        else
        {
            setControlError(fld);
            alert( name + " contains non alpha numeric characters.\n");
            return false;
        }
    }
    setControlOk(fld);
    return true;
}

function validateNumeric(fld, name)
{
	if(IsNumeric(fld.value))
    {
        setControlOk(fld);
        return true;
    }
    setControlError(fld);
    alert(name+" must be a number.\n");
    return false;
}

function validateNumericIfValue(fld, name)
{
    if(fld.value.length == 0)
    {
        return true;
    }
	if(IsNumeric(fld.value))
    {
        setControlOk(fld);
        return true;
    }
    setControlError(fld);
    alert(name+" must be a number.\n");
    return false;
}

function validateDropdownIndexGreaterThan(dropdown, index, name)
{
    if(dropdown.selectedIndex <= index)
    {
        setControlError(dropdown);
        alert('You must select a '+name);
        return false;
    }
    setControlOk(dropdown);
    return true;
}

function validateRadioGroupPicked(radioGroup, numItems, name)
{
    isOK = false;
    for ($i= 0; $i < numItems; $i++ )
    {
        setControlOk(radioGroup[$i]);
        if(radioGroup[$i].checked == true)
        {
            isOK = true;
        }
    }
    if(isOK == true)
    {
        return true;
    }
    setControlError(radioGroup[0]);
    alert('You must select a '+name);
    return false;
}

/**
 * function to process an array of checkboxes within a page
 *
 * @param form variable, HtmlForm object
 * @param fieldname name of checkbox array <i.e. myList> but in html checkbox its 'myList[]'
 * @returns javascript code
 */
function validateCheckBoxArrayPicked(form, fieldname, numItems, name)
{
    isOK = false;
    for ($i= 0; $i < numItems; $i++ )
    {
        checkbox = form.elements[fieldname+"[]"][$i];
        setControlOk(checkbox);
        if(checkbox.checked == true)
        {
            isOK = true;
        }
    }
    if(isOK == true)
    {
        return true;
    }
    checkbox = form.elements[fieldname+"[]"][0];
    setControlError(checkbox);
    alert('You must select a '+name);
    return false;
}
function noCheck(form)
{
    return true; // default auto form processor, just allows form to be submitted.
}

/**
 * function checks if a single checkbox is selected
 *
 * @param form variable, HtmlForm object
 * @param fieldname name of checkbox
 * @param name = friendly name of field for error display
 * @param overideError = {string} If set then overides default error text
  */
function validateCheckSingleCheckBoxSelected( form, fieldname, name, overideError )
{
	checkBox = form.elements[fieldname];
	if( checkBox.checked == false )
	{
		setControlError(checkBox);
		if( overideError.length > 0 )
		{
			alert( overideError );
		}
		else
		{
			alert( "You must select " + name );
		}
		return false;
	}
	else
	{
		setControlOk(checkBox);
		return true;
	}
}

function checkPasswordMatch(form)
{
    if(form.password1.value == form.password2.value)
    {
        res = validateEmpty(form.password1);
        if(res != "")
        {
            alert(res);
            return false;
        }
        setControlOk(form.password1);
        setControlOk(form.password2);
        return true;
    }
    alert('Passwords do not match');
    setControlError(form.password1);
    setControlError(form.password2);
    return false;
}

function IsNumeric(strString)
//  check for valid numeric strings
{
    var strValidChars = "0123456789.-";
    var strChar;
    var blnResult = true;

    if (strString.length == 0) return false;

    //  test strString consists of valid characters listed above
    for (i = 0; i < strString.length && blnResult == true; i++)
       {
        strChar = strString.charAt(i);
        if (strValidChars.indexOf(strChar) == -1)
        {
            blnResult = false;
        }
    }
    return blnResult;
}

function clearTextValue(element)
{
    if(element)
    {
        element.value = '';
    }
}
