﻿//******************************************************************************************
//                COPYRIGHT ENDSLEIGH INSURANCE SERVICES LIMITED 2007
//******************************************************************************************
//   PROJECT         :   insurance.net
//   LANGUAGE        :   JavaScript
//   FILENAME        :   Validation.js
//   ENVIRONMENT     :   Microsoft Visual Studio
//******************************************************************************************
//   FILE FUNCTION   :   
//   EXECUTABLE TYPE :   JS
//   SPECIFICATION   :   None
//
//   RELATED DOCUMENTATION : None
//
//******************************************************************************************
//   ABSTRACT        :   JavaScript functions to manually handle the validation of .Net
//                       validation controls.
//                       
//   AUTHOR          :   C. Newton       CREATION DATE : 21-Aug-2007
//
//******************************************************************************************
//   BUILD INFORMATION   :   Endsleigh Build System
//   EXECUTABLE NAME     :   
//   MAIN ENTRY POINTS   :   
//
//   EVENTS              :   
//
//******************************************************************************************
//   PVCS SECTION:
//   ~~~~~~~~~~~~~
//   PVCS FILENAME: $Logfile:   Z:\Endsleigh\Resources\Web\Scripts\Validation.js  $
//   PVCS REVISION: $Revision:   1.0  $
//
//   $Log:   Z:\Endsleigh\Resources\Web\Scripts\Validation.js  $
//
//******************************************************************************************

//******************************************************************************************
// Functions to Handle .Net Validation Controls
//******************************************************************************************
// Validate the passed in validation control
function validatorValidate(val) 
{    
    val.isvalid = true;
    
    if (val.enabled != false)
        if (typeof(val.evaluationfunction) == "function")
            val.isvalid = val.evaluationfunction(val); 
    
    validatorUpdateDisplay(val);
}

// Either show or hide the validation control based on the isvalid property
function validatorUpdateDisplay(val) 
{
    if (typeof(val.display) == "string") {    
        if (val.display == "None") {
            return;
        }
        if (val.display == "Dynamic") {
            val.style.display = val.isvalid ? "none" : "inline";
            return;
        }
    }
    
    val.style.visibility = val.isvalid ? "hidden" : "visible";
}

// Reset all validation controls in the passed in array
function validatorReset(valArray)
{
    for (var x = 0; x < valArray.length; x++) 
    {
        // If we have an array then reset our children by recersivly
        // calling ourself with our child array.   
        
        if (valArray[x].constructor == Array)
            validatorReset(valArray[x]);
        else 
        {
            valArray[x].isvalid = true;
            valArray[x].style.display = 'none';
        }
    }
}

function validatorDisable(valArray)
{
    for (var x = 0; x < valArray.length; x++)
    {
        // If we have an array then disable our children by recersivly
        // calling ourself with our child array.   
             
        if ( valArray[x].constructor == Array )
            validatorDisable(valArray[x]);
        else
            valArray[x].enabled = false;
    }
}

function validatorEnable(valArray)
{
    for (var x = 0; x < valArray.length; x++)
    {
        // Only enable Validation controls and not their child arrays.  

        if ( valArray[x].constructor != Array )
            valArray[x].enabled = true;
    }
}

// Show the validation summary control for the given array
function validationSummary(summary, valArray) 
{
    var s;
    summary.style.display = "none";

    if (summary.showsummary != "False") {
        summary.style.display = "block";
        
        if (typeof(summary.displaymode) != "string") {
            summary.displaymode = "BulletList";
        }
        switch (summary.displaymode) {
            case "List":
                headerSep = "<br>";
                first = "";
                pre = "";
                post = "<br>";
                final = "";
                break;
            case "BulletList":
            default: 
                headerSep = "";
                first = "<ul>";
                pre = "<li>";
                post = "</li>";
                final = "</ul>";
                break;
            case "SingleParagraph":
                headerSep = " ";
                first = "";
                pre = "";
                post = " ";
                final = "<br>";
                break;
        }
        s = "";
        if (typeof(summary.headertext) == "string") {
            s += summary.headertext + headerSep;
        }
        s += first;
        
        // Add items to the 
        for (i = 0; i < valArray.length; i++) {
            if (!valArray[i].isvalid && typeof(valArray[i].errormessage) == "string") {
                s += pre + valArray[i].errormessage + post;
            }
        }  
         
        s += final;
        summary.innerHTML = s;
    }
}

// Checks that a valid date of birth has been entered - greater than 1 year old
function ValidDateOfBirth(day, month, year)
{
    var retVal = false;
    
    // Get date validation items
    var today = new Date();
	var todayDay = today.getDate();
	var todayMonth = today.getMonth() + 1;
	var todayYear = today.getFullYear() - 1;
	
    // Validate date fields
    if (parseInt(month) <= 12 && parseInt(day) <= 31 && year.toString().length == 4)
    {
        // only allow 29 days for February in leap years
        if (checkLeapYear(year)){
            if (parseInt(day) >= 30 && (parseInt(month) == 2))
                return retVal;
        }
        // only allow 28 days for February in NON leap years:
        else if (parseInt(day) >= 29 && (parseInt(month) == 2))
              return retVal;
        // only 30 days in April, June, Spetember and November:
	    if (parseInt(day) == 31 && (parseInt(month) == 4 || parseInt(month) == 6 || parseInt(month) == 9 || parseInt(month) == 11))
	        return retVal;
	    if (parseInt(year) < todayYear)
		    retVal = true;
	    else if (parseInt(year) == todayYear) 
	    {
		    if (parseInt(month) < todayMonth) 
			    retVal = true;
		    else if (parseInt(month) == todayMonth) 
		    {
			    if (parseInt(day) < todayDay) 
				    retVal = true;
	        }
	    }
	}
	
    return retVal;
}

//Validates that inputDate is a valid date.
function ValidDate(inputDate) 
{
	//Assumes dd/mm/ccyy as format
	rx=new RegExp('^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$');
	
	if(rx.exec(inputDate)==null){
		return false;
	}
	
	var substrings=inputDate.split('/');
	var strDay = substrings[0]
	var strMonth = substrings[1]
	var strYear = substrings[2]
	var strDate = strMonth + "/" + strDay + "/" + strYear
	var testDate = new Date(strDate);
	
	return (testDate.getFullYear()==substrings[2] && (testDate.getMonth()+1)==substrings[1] && testDate.getDate()==substrings[0])
}

// calculates if year provided is a leap year or not.
function checkLeapYear(yearToCheck)
{
	yearToCheck = parseInt(yearToCheck);

	if(yearToCheck%4 == 0)
	{
		if(yearToCheck%100 != 0)
		{
			return true;
		}
		else
		{
			if(yearToCheck%400 == 0)
				return true;
			else
				return false;
		}
	}
return false;
}



