﻿/**
 * Checks that the NYCC Contribute Event Template has been completed ok
 */
function validateField(toCompare, initValue, errMsg, form) {
		if (toCompare && ((toCompare.value == "") || (toCompare.value == initValue))) {
				document.getElementById("messageLbl").innerHTML = errMsg;
				document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
				return false;
		} 
		else {
				return true;
		}    
}

function validateContributeForm(form) {
		if (form.recurrancemeta.checked)
		{
				return (
						validateField(form.eventheading, "", "Please enter the event title.", form) &&
						validateField(form.recureverynumber, "0", "Please enter the recurrance value.", form) &&
						validateField(form.contFromDateField, "", "Please enter the start date for the event.", form) &&
						validateField(form.genlocation, "", "Please enter the location of this event.", form) &&
						validateField(form.nearesttownmeta, "-1", "Please enter the nearest town.", form) &&	
						validatePostCode(form.postcodefirst.value, form.postcodelast.value) &&
						validateField(form.organisername, "", "Please enter your name.", form)  &&
						validateField(form.organiserphone, "", "Please enter your telephone number.", form) &&
						validateTypesCheckBoxesInContribute()	&&
						validateEmail(form.organiseremail, form) && 
						validateStartAndEndDates(form)
				);
		} else {
				return (
						validateField(form.eventheading, "", "Please enter the event title.", form) &&
						validateField(form.contFromDateField, "", "Please enter the start date for the event.", form) &&
						validateField(form.genlocation, "", "Please enter the location of this event", form) &&
						validateField(form.nearesttownmeta, "-1", "Please enter the nearest town.", form) &&		
						validatePostCode(form.postcodefirst.value, form.postcodelast.value) &&		
						validateField(form.organisername, "", "Please enter your name.", form)  &&
						validateField(form.organiserphone, "", "Please enter your telephone number.", form) &&
						validateTypesCheckBoxesInContribute()	&&
						validateEmail(form.organiseremail, form) && 
						validateStartAndEndDates(form)
				);
		}		
}

function validateStartAndEndDates(form)
{			
		var currentDate = new Date();
		currentDate.setHours(0,0,0,0);
		
		Date.prototype.toDDMMYYYYString = function () {return isNaN (this) ? 'NaN' : [this.getDate() > 9 ? this.getDate() : '0' + this.getDate(), this.getMonth() > 8 ? this.getMonth() + 1 : '0' + (this.getMonth() + 1), this.getFullYear()].join('/')}

		Date.fromDDMMYYYY = function (s) {return (/^(\d\d?)\D(\d\d?)\D(\d{4})$/).test(s) ? new Date(RegExp.$3, RegExp.$2 - 1, RegExp.$1) : new Date (s)}

		var start = Date.fromDDMMYYYY (form.contFromDateField.value);
		
		if (currentDate > start) 
		{
				document.getElementById("messageLbl").innerHTML = "The start date of the event cannot be in the past.";				
				document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
				return false;
		}
		else 
		{
				if (form.contToDateField.value != "" && form.recurrancemeta.checked == true)
				{
						var end = Date.fromDDMMYYYY (form.contToDateField.value);
						if (start > end) 
						{
								document.getElementById("messageLbl").innerHTML = "End date of the event cannot be before the start date.";								
								document.getElementById("dummyMessageLbl").disabled = false;
								document.getElementById("dummyMessageLbl").focus();
								document.getElementById("dummyMessageLbl").disabled = true;
								return false;
						}
						else
						{		
								return true;
						}
				}
				else if (form.contToDateField.value == "" && form.recurrancemeta.checked == true)
				{
						document.getElementById("messageLbl").innerHTML = "Please enter an end date for this event.";
						document.getElementById("dummyMessageLbl").disabled = false;
						document.getElementById("dummyMessageLbl").focus();
						document.getElementById("dummyMessageLbl").disabled = true;
						return false;
				}
		}		
}

function validateSearchForm()
{
		return (
				validateTypesCheckBoxesInSearch()
		);
}

//check postcode format is valid
function validatePostCode(firstPart, lastPart){ 
		var test = firstPart + " " + lastPart;
		var size = test.length;
		if (size > 1){ 
				test = test.toUpperCase(); //Change to uppercase
				while (test.slice(0,1) == " ") //Strip leading spaces
				{		
						test = test.substr(1,size-1);size = test.length
				}
				while(test.slice(size-1,size)== " ") //Strip trailing spaces
				{
						test = test.substr(0,size-1);size = test.length
				}		
				if (!(isNaN(test.charAt(0)))){ //leftmost character must be alpha character rule
						document.getElementById("messageLbl").innerHTML = "Post code is invalid.";
						document.getElementById("dummyMessageLbl").disabled = false;
						document.getElementById("dummyMessageLbl").focus();
						document.getElementById("dummyMessageLbl").disabled = true;
						 return false;
				}
				if (isNaN(test.charAt(size-3))){ //first character of inward code must be numeric rule
						document.getElementById("messageLbl").innerHTML = "Post code is invalid.";
						document.getElementById("dummyMessageLbl").disabled = false;
						document.getElementById("dummyMessageLbl").focus();
						document.getElementById("dummyMessageLbl").disabled = true;
						 return false;
				}
				if (!(isNaN(test.charAt(size-2)))){ //second character of inward code must be alpha rule
						document.getElementById("messageLbl").innerHTML = "Post code is invalid.";
						document.getElementById("dummyMessageLbl").disabled = false;
						document.getElementById("dummyMessageLbl").focus();
						document.getElementById("dummyMessageLbl").disabled = true;
						 return false;
				}
				if (!(isNaN(test.charAt(size-1)))){ //third character of inward code must be alpha rule
						document.getElementById("messageLbl").innerHTML = "Post code is invalid.";
						document.getElementById("dummyMessageLbl").disabled = false;
						document.getElementById("dummyMessageLbl").focus();
						document.getElementById("dummyMessageLbl").disabled = true;
						 return false;
				 }
		}		
		return true;
}

function getFormattedCurrentDate()
{
		var cDate = new Date();
		var cDay;
		var cMonth;
		if (cDate.getDate() < 10)
		{
				cDay = "0" + cDate.getDate();
		}
		else
		{
				cDay = cDate.getDate();
		}
		
		if ((cDate.getMonth()+1) < 10)
		{
				var month = cDate.getMonth() + 1;
				cMonth = "0" + month;
		}
		else
		{
				cMonth = cDate.getMonth() + 1;
		}
		
		var strDate = cDay + "/" + cMonth + "/" + cDate.getFullYear();
		cDate = strDate;
		return cDate;
}

function validateTypesCheckBoxesInContribute()
{
		var objCheckBoxes = document.forms["contributeevent"].elements["eventTypeMeta"];
		var countCheckBoxes = objCheckBoxes.length;
		var atleastOneChecked = false;
		for(i = 0; i < countCheckBoxes; i++)
		{
				if (objCheckBoxes[i].checked)
				{		
						atleastOneChecked = true;						
				}
		}
		if (atleastOneChecked)
				return true;
		else
		{
				document.getElementById("messageLbl").innerHTML ="Please select at least one event type.";				
				document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
				return false;
		}
}

function validateTypesCheckBoxesInSearch()
{				
		var objCheckBoxes = document.forms["eventsearchform"].elements["typemeta"];
		var countCheckBoxes = objCheckBoxes.length;
		var atleastOneChecked = false;
		for(i = 0; i < countCheckBoxes; i++)
		{
				if (objCheckBoxes[i].checked)
				{		
						atleastOneChecked = true;						
				}
		}
		if (atleastOneChecked == true)
		{
				return true;
		}
				
		if (atleastOneChecked == false)
		{
				var ele = document.getElementById("errorMessageLbl");
				document.getElementById("errorMessageLbl").innerHTML = "Please select at least one event type.";				
				document.getElementById("errorMessageLbl").style.display = "block";
				return false;	
		}
}

function validateNearestTown()
{
		var text = document.getElementById('nearesttown').value;
		if (text == "-1")
		{
				document.getElementById("messageLbl").innerHTML = "Please select at least one event type.";
				document.getElementById('messageLbl').style.display = "inherit";
				document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
				return false;		
		}
		else
		{
				return true;
		}
}

function calculateMaxToDate(fromDtStr) 
{
		var dayStr = fromDtStr.substring(0,2); 
		var monthStr = fromDtStr.substring(3,5);
		var yrStr = fromDtStr.substring(6,10);
		var fromDt = new Date(yrStr, monthStr, dayStr);
		var toDate = fromDt.getDate() + 100;
		var month = fromDt.getUTCMonth();
		var year = fromDt.getFullYear();
		var newToDate;
		var toResolve = true;
		while (toResolve)
		{			
				if ((month == 1) || (month == 3) || (month == 8) || (month == 10) || (month == 5) || (month == 7))
				{
						if (toDate > 31)
						{
								toResolve = true;
								newToDate = toDate - 31;
								toDate = newToDate;
								month = month + 1;								
						}
						else 
						{
								toResolve = false;
						}
				}
				if (month == 12)
				{
						if (toDate > 31)
						{
								toResolve = true;
								newToDate = toDate - 31;
								toDate = newToDate;
								month = 1;
								year = year + 1;
						}
						else 
						{
								toResolve = false;
						}
				}
				if ((month == 6)  || (month == 9) || (month == 11) || (month == 4))	
				{
						if (toDate > 30)
						{
								toResolve = true;
								newToDate = toDate - 30;
								toDate = newToDate;
								month = month + 1;
						}
						else 
						{
								toResolve = false;
						}
				}
				if (month == 2)
				{
						if (((year % 4) == 0) && ((year % 100) != 0) || ((year % 400) == 0))
						{
								if (toDate > 29)
								{
										toResolve = true;
										newToDate = toDate - 29;
										toDate = newToDate;
										month = month + 1;
								}
								else 
								{
										toResolve = false;
								}
						}
						else
						{
								if (toDate > 28)
								{
										toResolve = true;
										newToDate = toDate - 28;
										toDate = newToDate;
										month = month + 1;
								}
								else 
								{
										toResolve = false;
								}
						}		
				}				
		}
		var maxEndDt = new Date();
		maxEndDt.setDate(toDate);
		maxEndDt.setMonth(month-1);
		maxEndDt.setFullYear(year);
		return 	(maxEndDt);
}

function processRecurranceSelection(selection) {
		if (selection.checked) {
				document.getElementById('recurrancewrapper').style.display = "block";
				document.getElementById('endDatewrapper').style.display = "block";
				
		}	else {
				document.getElementById('recurrancewrapper').style.display = "none";
				document.getElementById('endDatewrapper').style.display = "none";			
		}				
}

function displayFromDate() {
	var currdate = new Date();
	return (currdate);
}

function displayToDate() {
	var currdate = new Date();
	var toDate = currdate.getDate() + 6;
	var month = currdate.getUTCMonth();
	var year = currdate.getFullYear();
	var newToDate;
	if ((month == 1) || (month == 4) || (month == 6) || (month == 8) || (month == 10))
	{
		if (toDate > 31)
		{
				var newToDate = toDate - 31;
				toDate = newToDate;
				month = month + 1;
		}
	}
	if (month == 12)
	{
		if (toDate > 31)
		{
				newToDate = toDate - 31;
				toDate = newToDate;
				month = month + 1;
				year = year + 1;
		}
	}
	if ((month == 3) || (month == 5) || (month == 7) || (month == 9) || (month == 11))	
	{
		if (toDate > 30)
		{
				newToDate = toDate - 30;
				toDate = newToDate;
				month = month + 1;
		}
	}
	if (month == 2)
	{
		if (((year % 4) == 0) && ((year % 100) != 0) || ((year % 400) == 0))
		{
				if (toDate > 29)
				{
						newToDate = toDate - 29;
						toDate = newToDate;
						month = month + 1;
				}
		}
		else
		{
				if (toDate > 28)
				{
						newToDate = toDate - 28;
						toDate = newToDate;
						month = month + 1;
				}
		}		
	}
	var dateForDisplay = new Date();
	dateForDisplay.setDate(toDate);
	dateForDisplay.setMonth(month);
	dateForDisplay.setFullYear(year);
	return 	(dateForDisplay);
}

function displayMonthYr(month, year) {
	var yearstr = year.toString();
	yearstr = yearstr.substring(2, 4);
	var strMonth = "";
	switch (month){
		case 0:
				strMonth = "Jan";				
		break;
		case 1:
				strMonth = "Feb";
		break;
		case 2:
				strMonth = "Mar";
		break;
		case 3:
				strMonth = "Apr";
		break;
		case 4:
				strMonth = "May";
		break;
		case 5:
				strMonth = "Jun";
		break;
		case 6:
				strMonth = "Jul";
		break;
		case 7:
				strMonth = "Aug";
		break;
		case 8:
				strMonth = "Sep";
		break;
		case 9:
				strMonth = "Oct";
		break;
		case 10:
				strMonth = "Nov";
		break;
		case 11:
				strMonth = "Dec";
		break;
	}	
	return (strMonth + "-" + yearstr);
}

function validateWhenCriteria()
{
		var chkBox = document.getElementById("selectdates");
		if (chkBox.checked)
		{
		}
		else
		{
				document.getElementById("from-date-field").value = "";
				document.getElementById("to-date-field").value = "";
		}
}

function checkAll()
{
		var selectAllChkBox = document.getElementById("selectall");
		var objCheckBoxes;
		var countCheckBoxes;
		var i;
		if (selectAllChkBox.checked)
		{
				objCheckBoxes = document.forms["eventsearchform"].elements["typemeta"];
				countCheckBoxes = objCheckBoxes.length;
				for(i = 0; i < countCheckBoxes; i++)
				{
						objCheckBoxes[i].checked = true;
						objCheckBoxes[i].disabled = true;
				}
		}
		else
		{
				objCheckBoxes = document.forms["eventsearchform"].elements["typemeta"];
				countCheckBoxes = objCheckBoxes.length;
				for(i = 0; i < countCheckBoxes; i++)
				{
						objCheckBoxes[i].checked = false;
						objCheckBoxes[i].disabled = false;
				}
		}
}

function validateSelection(chkBx)
{
		var selectAllChkBox = document.getElementById("selectall");
		if (chkBx.checked)
		{				
				selectAllChkBox.checked = false;
				selectAllChkBox.disabled = true;
		}
		else
		{
				selectAllChkBox.disabled = false;
		}
}

function checkValidation(formInput, form) {

    var message;

    if (stringEmpty(formInput.value)) {
        message = "Please enter your email address.";
        document.getElementById("messageLbl").innerHTML = message;
        document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
        return false;
    } else if (noAtSign( formInput.value )) {
        message = "Email address is invalid."
        document.getElementById("messageLbl").innerHTML = message;
        document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
        return false;
    } else if (nothingBeforeAt(formInput.value)) {
        message = "Email address is invalid.";
        document.getElementById("messageLbl").innerHTML = message;
        document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
        return false;
    } else if (noLeftBracket(formInput.value)) {
        message = "Email address is invalid.";
        document.getElementById("messageLbl").innerHTML = message;
        document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
        return false;
    } else if (noRightBracket(formInput.value)) {
        message = "Email address is invalid.";
        document.getElementById("messageLbl").innerHTML = message;
        document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
        return false;
    } else if (noValidPeriod(formInput.value)) {
        message = "Email address is invalid.";
        document.getElementById("messageLbl").innerHTML = message;
        document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
        return false;
    } else if (noValidSuffix(formInput.value)) {
        message = "Email address is invalid.";
        document.getElementById("messageLbl").innerHTML = message;
        document.getElementById("dummyMessageLbl").disabled = false;
				document.getElementById("dummyMessageLbl").focus();
				document.getElementById("dummyMessageLbl").disabled = true;
        return false;
    } else {
				return true;
    }
}

function validateEmail(formField, form) {
    if (checkValidation(formField, form) == true)
    {        
				return true;
    }
    else
    {
				return false;
    }
}

function stringEmpty (formField) {
    // CHECK THAT THE STRING IS NOT EMPTY
    if ( formField.length < 1 ) {
        return ( true );
    } else {
        return ( false );
    }
}

function noAtSign (formField) {
    // CHECK THAT THERE IS AN '@' CHARACTER IN THE STRING
    if (formField.indexOf ('@', 0) == -1) {
        return ( true )
    } else {
        return ( false );
    }
}

function nothingBeforeAt (formField) {
    // CHECK THERE IS AT LEAST ONE CHARACTER BEFORE THE '@' CHARACTER
    if ( formField.indexOf ( '@', 0 ) < 1 ) {
        return ( true )
    } else {
        return ( false );
    }
}

function noLeftBracket (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR LEFT BRACKET
    if ( formField.indexOf ( '[', 0 ) == -1 && formField.charAt (formField.length - 1) == ']') {
        return ( true )
    } else {
        return ( false );
    }
}

function noRightBracket (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR RIGHT BRACKET
    if (formField.indexOf ( '[', 0 ) > -1 && formField.charAt (formField.length - 1) != ']') {
        return ( true );
    } else {
        return ( false );
    }
}

function noValidPeriod (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if (formField.indexOf ( '@', 0 ) > 1 && formField.charAt (formField.length - 1 ) == ']')
        return ( false );

    // CHECK THAT THERE IS AT LEAST ONE PERIOD IN THE STRING
    if (formField.indexOf ( '.', 0 ) == -1)
        return ( true );

    return ( false );
}

function noValidSuffix(formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if (formField.indexOf('@', 0) > 1 && formField.charAt(formField.length - 1) == ']') {
        return ( false );
    }

    // CHECK THAT THERE IS A TWO OR THREE CHARACTER SUFFIX AFTER THE LAST PERIOD
    var len = formField.length;
    var pos = formField.lastIndexOf ( '.', len - 1 ) + 1;
    if ( ( len - pos ) < 2 || ( len - pos ) > 4 ) {
        return ( true );
    } else {
        return ( false );
    }
}



