/******************************************************************
* DME - Guide & Konklurrence validerings script   /TRA 2009.10.18 *
*******************************************************************/


function PerformGenericInputValidation(dataArray, errorelement)
{    
    try {
        var i = 0;
        var debugOutput = '';
        // First entry contains setup parameters
        
        
        var errorMsgPrefix = dataArray[0][0];
        var fieldErrorsMsg = '';
        var errorOccured = false;
        
        for (i = 1; i < dataArray.length; i++) {
            if (dataArray[i] != null) {
                
                var fieldId = dataArray[i][0];
                var fieldValidationType = dataArray[i][1];
                var validationErrorMsg = dataArray[i][2];
                var fieldparams = dataArray[i][3];                
                
                if (!PerformFieldValidation(fieldId, fieldValidationType, fieldparams)) {
                    errorOccured = true;
                    if (validationErrorMsg != '')
                        fieldErrorsMsg += '<li>' + validationErrorMsg + '</li>';
                }
            }
        }

        if (errorOccured) {
            var errorfield = null;

            var errorfield = document.getElementById(errorelement);
            errorfield.innerHTML = '<div class="errorheader">' + errorMsgPrefix + '</div><ul>' + fieldErrorsMsg + '</ul>';
        }
        return !errorOccured;
    }
    catch (e) { alert(e.message); }
    return false;
}

/*--------------------------------------------------------------------------

var $F = Form.Element.getValue;

--------------------------------------------------------------------------*/


// Currently supported validationTypes {'NotEmpty', 'Email', 'Number', 'Date'}
function PerformFieldValidation(fieldId, validationType, fieldparams)
{
	if(validationType == '' || validationType == 'None')
		return true;	
	var fieldValue = null;
	switch(validationType)
	{
		case 'NotEmpty':
			if(document.getElementById(fieldId) != null)
			{
				fieldValue = document.getElementById(fieldId).value;
			}
			if(fieldValue == '')				
				return false;
			break;
		case 'NotEmpty_RadioBtnSet':	

			var fieldlist = new Array();
			fieldlist = fieldparams.split("*");
			for(i=0;i<fieldlist.length;i++)
			{
			    var field = fieldlist[i];
			    if (fieldlist[i].indexOf("=") > 0) {
			        field = fieldlist[i].substring(0, fieldlist[i].indexOf("="));
			    }			    
			    radioField = document.getElementById(fieldId + '_' + field);		
				if (radioField == null)
				{
				    throw ('Field ' + fieldId + '_' + field + ' not found in document - cannot validate!');
				}
				if (radioField.checked)
	            {				
					return true;
				}
			}
			return false;
			break;
		case 'NotEmpty_CheckboxSet':	
		   
			var fieldlist = new Array();
			fieldlist = fieldparams.split("*");			
			for(i=0;i<fieldlist.length;i++)
			{
			    var field = fieldlist[i];
			    if (fieldlist[i].indexOf("=") > 0) 
			    {
			        field = fieldlist[i].substring(0, fieldlist[i].indexOf("="));
			    }
			    
				checkField = document.getElementById(fieldId+'_'+field);				
				if(checkField == null)
					throw ('Field '+fieldId+'_'+field+' not found in document - cannot validate!' ) ;
				if(checkField.checked)
					return true;
			}
			return false
			break;			
		case 'Email':
			if(document.getElementById(fieldId) != null)
			{
				fieldValue = document.getElementById(fieldId).value;
			}
			var emailChk = new RegExp('^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$', 'i');
			if(!emailChk.test(fieldValue))
				return false;
			break;
		case 'Number':
			if(document.getElementById(fieldId) != null)
			{
				fieldValue = document.getElementById(fieldId).value;
			}
			var numberChk = new RegExp('^[0-9]+$', 'i');
			if(!numberChk.test(fieldValue))
				return false;
			break;
		case 'Date':
			if(document.getElementById(fieldId) != null)
			{
				fieldValue = document.getElementById(fieldId).value;
			}
			if(!checkValidDate(fieldValue))
				return false;
			break;
	}	
	return true;
}


function checkValidDate(dateStr) 
{
	// regular expression which contains valid separators in a date, ("-")
	var dateSplitArray = dateStr.split('-');
	
	if (dateStr.length != 10) return false;
	if (dateSplitArray.length != 3) return false;				// counting separators

	if (isNaN(dateSplitArray[0])) return false;
	if (isNaN(dateSplitArray[1])) return false;
	if (isNaN(dateSplitArray[2])) return false;

	var numDay   = parseInt(removeZero(dateSplitArray[0]));		// convert the text day to a number
	if ((numDay <= 0) || (numDay > 31)) return false;

	var numMonth = parseInt(removeZero(dateSplitArray[1]));		// convert the text month to a number
	if ((numMonth < 1) || (numMonth > 12)) return false;
	if ((numMonth == 2) && (numDay > 29)) return false;			// February can't be greater than 29 (leap year calculation comes later)
	// check for months with only 30 days
	if (((numMonth == 4) || (numMonth == 6) || (numMonth == 9) || (numMonth == 11)) && (numDay > 30)) return false;
	// check for leap year if the month and day is Feb 29
	if ((numMonth == 2) && (numDay == 29)) {
		if ((numYear % 4) != 0) return false;									// if not divisible by 4, then not a leap year so Feb 29 is invalid
		if (((numYear % 100) == 0) && ((numYear % 400) != 0)) return false;		// if divisible by 100 and not by 400 leap year is invalid,
	}

	if(dateSplitArray[2].length != 4)						// Year must be 4 digit ie. 2007 not 07
			return false;
	var numYear  = parseInt(parseInt(dateSplitArray[2]));	// convert the text year to a number
	if ((numYear <= 0) || (numYear > 9999)) return false;

	return true;											// date is valid
}	

function trimString(str) {
	str = this != window? this : str;
	return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}


function isValidEmail(str) {
	var re = new RegExp("^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$");
	return (str.match(re) != null);
}

