/* =================================================================================== */
/* ================================= DEVELOPMENT ONLY ================================ */
var isDebugMode = true;
/* =================================================================================== */

var minimumAge = 18;
var maximumAge = 65;
// var debugTabIndex = 10;

$(document).ready(function() {

	if(!$.browser.opera) {
		$("input:checkbox").css("background-color", "#131313");
	}

	//Show/Hide Hints
	$(".FormBlock :input").focus(
		function() {
			if(!($(this).parent("span").siblings("p").hasClass("warning"))) {
				$(this).parent("span").siblings(".cnt").children("p.hint").fadeIn();
			}
		}
	);
	$(".FormBlock :input").blur(
		function() {
			$(this).parent("span").siblings(".cnt").children("p.hint").hide();

		}
	);
	$(".date").focus(
	    function() {
	    	if($(this).attr('value') == "DD") {
	    		$(this).attr('value', '');
	    	}
	    }
    );
	$(".year").focus(
	    function() {
	    	if($(this).attr('value') == "YYYY") {
	    		$(this).attr('value', '');
	    	}
	    }
    );
	//FIELD VALIDATION FUNCTIONS
	$(".req").blur(
		function() {
			if($(this).hasClass("req")) {
				validateField(this);
			}
		}
	);

	$(".ContactType input").click(
		function() {
			validateMessageType(false);
		}
	);

	$(".DrinkChoice input").click(
		function() {
			validateChoiceOfDrink(false);
		}
	);

	$(".postcode-unknown").click(
	    function() {
	    	$("#ShowHideAddressList").hide();
	    	$("#NoPostcode").hide();
	    	$(".address").show();
	    }
    );

	/*
	$(".date").keydown(function(event) {
	if (event.keyCode == 9) {
	event.preventDefault();
	//setTimeout(function() { $("#ddlMonthSpan .ddn-selector").focus() }, 50);
	$("#ddlMonthSpan .ddn-selector").focus();
	}
	});
	$(".FormBlock").keydown(function(event) {
	if (event.target.id.indexOf("ddlDOBMonth") > 0) {
	if (event.keyCode == 9) {
	event.preventDefault();
	//setTimeout(function() { $(".year").focus() }, 50);
	$(".year").focus();
	}
	}
	});
	*/

	$(".Requirements").css("display", $(".UpForItCheckList input[type=checkbox]").length > 0 ? "block" : "none");

	$("#ageRange").html("You must be over " + minimumAge + " and under " + maximumAge);

	//Postcode find address button click
	$(".button a.pc-button").click(
		function() {
			
			var Postcode = $('.postcode').attr('value');
			var House = $('.house-no').attr('value');

			var AddressList = $('.addresses')[0];
			$("#UnknownPostcode").hide();
			$("#NoPostcode").hide();

			if($.trim(Postcode) == "") {
				$("#NoPostcode").show();
				return;
			}
			
			$.post(oGlobal.urlAjaxFindAddress, { Postcode: Postcode, House: House },
	                function(data) {
	                	
	                	//Clear address list and repopulate
	                	if(data.length < 2) {
	                		$("#UnknownPostcode").show();
	                		clearAddress();
	                	} else {
	                		AddressList.options.length = 0;
	                		$(".address span.input input").attr('value', '');

	                		var Addresses = data.toString().split(';');
	                		if(Addresses) {
	                			if(Addresses.length > 1) {
	                				for(i = 0; i < Addresses.length; i++) {
	                					AddressList.options[AddressList.options.length] = new Option(Addresses[i].split('|')[1], Addresses[i].split('|')[0]);
	                				}
	                				redrawSelectBox(".addresses");
	                				$("#ShowHideAddressList").show();
	                			}
	                			else if(Addresses.length == 1) {
	                				//populate address immediately because we only have one address from this data	
	                				poulateAddress(Addresses[0].split('|')[0]);
	                			}
	                		}
	                	}
	                }
	        );
		}
	);



	//forgotten password button click
	$(".forgot-password").click(
		function() {
			var Email = $('span.input input.email').attr('value');
			$("#yourEmailAddress").html(Email);
			$.post(urlAjaxForgottenPassword, { Email: Email }, function() {
				$('.reminderSent').slideDown();
			});

			$("input.RegPassword").removeAttr("readonly");
		}
	);


	//FORM SUBMISSION VALIDATION (SIGN IN)
	var siButtonClickAllowed = 1;
	
	$(".button a.si-button").click(
	    function() {
	    	
	    	if(siButtonClickAllowed == 1) {
		    	
		    	siButtonClickAllowed = 0;
		    	
		    	resetSubmission();
		    	$(".loader").show();
		    	var buttonText = $("span", this).text();
	
		    	if(buttonText == "Continue") {
		    		validateField("input.email", true);
		    		validateCheckBoxes();
		    	} else {
		    		$(".FormBlock :input").each(
		                function() {
		                	validateField(this, true);
		                }
		            );
		    	}
		    	if(buttonText == "Confirm Entry")
		    		buttonText = "Enter";
		    	if(buttonText == "Enter") {
		    		validateChoiceOfDrink(true);
		    		validateIAgree(true);
		    	}
		    	if(buttonText == "Send") {
		    		validateMessageType(true);
		    	}
	
		    	if(buttonText == "Send Invites") {
		    		validateEmailFriends();
		    	}
	
		    	if(fieldErrors == 0) {
	
		    		/*
		    		POSSIBLE RETURNS:
		    		=================
		    		Success,
		    		UserNameIncorrect,
		    		UserNameExists,
		    		PasswordIncorrect,
		    		UserLocked,
		    		ChallengeClosed,
		    		AlreadyEntered,
		    		IncompleteData,
		    		UnderAge
		    		*/
	
		    		if(buttonText == "Continue") {
	
		    			$('form').ajaxSubmit({ type: 'POST', success:
							function(response) {
								$(".loader").hide();
								$(".FormBlock :input").removeAttr("readonly");
								siButtonClickAllowed = 1;
								switch(response) {
									case "GENERAL ERROR":
									case "":
										addNetworkWarning();
										break;
									case "PasswordIncorrect":
										// User has an account, allow Comptition Registration with just the email address
										$(".passwordRow").show();
										$(".forgot-password").show();
	
										$("input.RegEmail").attr("readonly", "true");
										$(".button a.si-button span").text("Sign In");
										break;
									case "ChallengeClosed":
										addFormWarning("This challenge is now closed. Please check back later to enter into future challenges.");
										break;
									case "UserNameIncorrect":
										// User does not have an account, so take them to the page where they can create one
										postRegister();
										break;
									default:
										addSubmitWarning();
	
								}
							}
		    			});
		    			return false;
		    		}
	
		    		else if(buttonText == "Sign In") {
	
		    			$('form').ajaxSubmit({ type: 'POST', success:
							function(response) {
								$(".loader").hide();
								$("input.RegPassword").removeAttr("readonly");
								siButtonClickAllowed = 1;
								switch(response) {
									case "GENERAL ERROR":
									case "":
										addNetworkWarning();
										break;
									case "Success":
										postInviteFriends();
										break;
									case "ChallengeClosed":
										addFormWarning("This challenge is now closed. Please check back later to enter into future challenges.");
										break;
									case "AlreadyEntered":
										addFormWarning("You have already entered this challenge. In line with the prize draw  <a href='javascript: ShowTerms()'>terms and conditions</a> you can only enter once per challenge. Please try again in the next one. If this is incorrect please contact <a href='" + SiteLinks["ContactUs"] + "' target='_ContactUs'>Customer Services</a>.");
										break;
									case "IncompleteData":
										// User has an account, but the data is not sufficient to enter the competition
										$("#hidIncompleteData").attr("value", "true");
										postRegister();
										break;
									case "PasswordIncorrect":
										addFormWarning("Password not recognised");
										break;
									default:
										addSubmitWarning();
								}
							}
		    			});
		    			return false;
	
		    		}
	
		    		else if(buttonText == "Enter") {
	
	//	    			$('form').ajaxSubmit({ type: 'POST', success:
	//	    			function(response) {
	//	    				$(".loader").hide();
	//	    				$(".FormBlock :input").not($("td span input.email")).removeAttr("readonly");
	//	    				switch(response) {
	//	    					case "GENERAL ERROR":
	//	    					case "":
	//	    						addNetworkWarning();
	//	    						break;
	//	    					case "ChallengeClosed":
	//	    						addFormWarning("This challenge is now closed. Your account has been created, but entry into this challenge has now finished. Please check back later to enter into future challenges.");
	//	    						break;
	//	    					case "Success":
	//	    						postInviteFriends();
	//	    						break;
	//	    					case "UserNameExists":
	//	    						addFormWarning("It seems that email is already registered. Please begin the challenge entry process again. If you are still having problems, or believe that you haven't registered before, please contact us.");
	//	    						break;
	//	    					default:
	//	    						addSubmitWarning();
	//	    				}
	//	    			}
	//	    			});
	//	    			return false;
						siButtonClickAllowed = 1;
		    			return true;
		    		}
	
		    		else if(buttonText == "Send Invites") {
	
		    			$('form').ajaxSubmit({ type: 'POST', success:
								function(response) {
									$(".loader").hide();
									$(".FormBlock :input").removeAttr("readonly");
									siButtonClickAllowed = 1;
									switch(response) {
										case "GENERAL ERROR":
										case "":
											addNetworkWarning();
											break;
										case "ChallengeClosed":
											$("div.InviteEmails").hide();
											addFormWarning("Unfortunately this challenge has now closed. Please try again in the next one.");
											break;
										case "Success":
											postComplete();
											break;
										default:
											addSubmitWarning();
									}
								}
		    			});
		    			return false;
		    		}
	
		    		else if(buttonText == "Send") {
	
		    			$('form').ajaxSubmit({ type: 'POST', success:
								function(response) {
									$(".loader").hide();
									$(".FormBlock :input").removeAttr("readonly");
									siButtonClickAllowed = 1;
									switch(response) {
										case "Failed":
										case "":
											addNetworkWarning();
											break;
										case "Success":
											addFormSuccess("Your message has been sent.");
											break;
										default:
											addSubmitWarning();
									}
								}
		    			});
		    			return false;
	
		    		}
	
		    		else {
		    			// don't enable the email field on the Registration page
		    			$(".FormBlock :input").not($("td span input.email")).removeAttr("readonly");
		    			$(".loader").hide();
		    			siButtonClickAllowed = 1;
		    		}
		    	} else {
		    		$(".loader").hide();
		    		siButtonClickAllowed = 1;
		    	}
	
		    	$("p.back").show();
		    	$(".FormBlock :input").removeAttr("readonly");
		    	
		    	
		    }
		    	
	    	return false;
	    });
});

function validateEmailFriends() {
    // check 3 unique email addresses have been entered
    var sEmail1 = $(".email")[0].value;
    var sEmail2 = $(".email")[1].value;
    var sEmail3 = $(".email")[2].value;
    var sName1 = $(".emailName")[0].value;
    var sName2 = $(".emailName")[1].value;
    var sName3 = $(".emailName")[2].value;
    if ($.trim(sEmail1) == "" || $.trim(sEmail2) == "" || $.trim(sEmail2) == "" || $.trim(sName1) == "" || $.trim(sName2) == "" || $.trim(sName3) == "") {
        addFormWarning("Three Names and Email Addresses are required");
        fieldErrors = 1;
        return;
    }
    if (sEmail1 == sEmail2 || sEmail1 == sEmail3 || sEmail2 == sEmail3) {
        addFormWarning("The three email addresses must be unique");
        fieldErrors = 1;
        return;
    }
}    

function validateChoiceOfDrink(submit) {
    if ($(".ChoiceOfDrinkCheckList input:radio:checked").length == 0) {
    	//addWarning($(".ChoiceOfDrinkCheckList").parent(), "This information is required");
        $(".ChoiceOfDrinkCheckList").before("<p style='color: #f00; font-weight: bold; margin-bottom: 6px;'>This information is required</p>");
        //<p class='warning'>" + message + "</p>
        if (submit) {
            if (fieldErrors == 0) {
                addSubmitWarning();
                fieldErrors = 1;
            }
        }
    } else {
        removeWarning($(".ChoiceOfDrinkCheckList input:radio").parent());
    }
}

function validateMessageType(submit) {
    if ($(".MessageType input:radio:checked").length == 0) {
        addWarning($(".MessageType input:radio").parent(), "This information is required");
        if (submit) {
            if (fieldErrors == 0) {
                addSubmitWarning();
                fieldErrors = 1;
            }
        }
    } else {
    removeWarning($(".MessageType input:radio").parent());
    }
}


function validateIAgree(submit) {
    if ($("input.AgreeTerms:checked").length == 0) {
        addWarning($(".AgreeTerms"), "This information is required");
        if (submit) {
            if (fieldErrors == 0) {
                addSubmitWarning();
                fieldErrors = 1;
            }
        }
    } else {
        removeWarning($(".AgreeTerms"));
    }
}       
 

function resetSubmission() {
    $(".loader.submit").show();
    //$("p.back").hide();
    $(".FormBlock :input").attr("readonly", "true");
    removeSubmitNotices();
    fieldErrors = 0;
}

function validateCheckBoxes() {
    if (isDebugMode) return;
    // ensure all check boxes are ticked
    if (fieldErrors == 0) {
        if ($(".UpForItCheckList input[type=checkbox]").length != $(".UpForItCheckList input[type=checkbox]:checked").length) {
            fieldErrors = 1;
            addFormWarning("Please confirm that you meet the requirements of the prize draw by checking ALL of the check boxes<br/>");
        }
    }
}


function validateField(field, submit, check) {

	try
	{

    var field_type = $(field).attr("class").substr(10);
    var field_value = $(field).attr("value");
    $(".FormErrorMessage p").html(""); // clear error messages
    $(".FormErrorMessage").hide();
    if (isDebugMode && field_value == "zxcv") {
        removeWarning(field);
        return;
    }

    switch (field_type) {
        case "RegEmail": case "email":
            var emailFilter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;

            if (!emailFilter.test(field_value)) {
                addWarning(field, "Please enter a valid email address");
                if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }
            } else {
                removeWarning(field);
            }
            break;

        case "password": 
            var first_pass = $("input.password").attr("value");
            var second_pass = $("input.password-check").attr("value");

            if (!field_value) {
                removeWarning(field, 1);
                addWarning(field, "This information is required");
                if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }
            } else if (first_pass.length < 6)  {
                removeWarning(field);
                addWarning(field, "Your passwords must be at least 6 characters long");
                if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }
            } else if (first_pass != second_pass && second_pass != "") {
                removeWarning(field, 1);
                addWarning($("input.password")[0], "Your passwords don't match, please re-type");
                addWarning(field, "Your passwords don't match, please re-type");
                if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }                
            
            } else {
                removeWarning(field);
                if (first_pass == second_pass){
                    removeWarning($("input.password-check")[0]);
                }
            }
            break;

        case "password-check":

            var first_pass = $("input.password").attr("value");
            var second_pass = $("input.password-check").attr("value");

            if (!field_value) {
                removeWarning(field, 1);
                addWarning(field, "This information is required");
                if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }
            } else if (second_pass.length < 6) {
                removeWarning(field);
                addWarning(field, "Your passwords must be at least 6 characters long");
                if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }                
            } else if (first_pass != second_pass) {
                removeWarning(field, 1);
                addWarning($("input.password")[0], "Your passwords don't match, please re-type");
                addWarning(field, "Your passwords don't match, please re-type");
                if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }

            } else {
                //removeWarning($("input.password")[0]);
                removeWarning(field);
                if (first_pass == second_pass){
                    removeWarning($("input.password")[0]);
                }                
            }
            break;        
/*
        case "house-no":
            if (!field_value) {
                addWarning(field, "This information is required");
                if (check) {
                    if (fieldErrors == 0) {
                        fieldErrors = 1;
                    }
                } else if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }
            } else {
                removeWarning(field);
            }
            break;
*/            

        case "postcode":
			// This postcode validate doesn't match all postcodes, and allows through some invalid postcodes
            // var postcodeFilter = /[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}/i;
			// This second validator is more accurate,
			// it is a simplified version of the one defined in British Standard BS7666:
            var postcodeFilter = /[A-Z]{1,2}[0-9R][0-9A-Z]? ?[0-9][A-Z]{2}/i;
            if (!postcodeFilter.test(field_value)) {
                addWarning(field, "Please enter a valid UK postcode");
                if (check) {
                    if (fieldErrors == 0) {
                        fieldErrors = 1;
                    }
                } else if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }
            } else {
                removeWarning(field);
                var postcodeFilter = /(^[A-Z]{1,2}[0-9]{1,2})([0-9][A-Z]{2}$)/i;
                var formatted_postcode = field_value.replace(postcodeFilter, "$1 $2");
                formatted_postcode = formatted_postcode.toUpperCase();
                $("input.postcode").attr("value", formatted_postcode)
            }
            break;

        case "date":
            if (!field_value || field_value == "Day") {
                addWarning(field, "This information is required");
                addWarning($('#ddlMonthSpan select').next()[0]);
                addWarning($("input.year")[0]);
                if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }
            } else if ($("select.month").attr("value") != "~ Month ~" && $("input.year").attr("value") != "" && $("input.year").attr("value") != "Year") {
                var iReturn = validateAge($("input.date").attr("value"), $("select.month").attr("value"), $("input.year").attr("value"));
                
                if (iReturn == 0) {
                    removeWarning(field);
                    removeWarning($('#ddlMonthSpan select').next()[0]);
                    removeWarning($("input.year")[0]);
                } else {
                    removeWarning(field, 1);
                    if (iReturn == -1) {
                        addWarning(field, "You must be over " + minimumAge + " and under " + maximumAge );
                    } else {
                        addWarning(field, "Invalid Date");
                    }
                    addWarning($('#ddlMonthSpan select').next()[0]);
                    addWarning($("input.year")[0]);
                    if (submit) {
                        if (fieldErrors == 0) {
                            addSubmitWarning();
                            fieldErrors = 1;
                        }
                    }
                }
            }
            break;

        case "month":
            if (!field_value || field_value == "~ Month ~") {
                addWarning(field, "This information is required");
                addWarning($("input.date")[0]);
                addWarning($("input.year")[0]);
                if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }
            } else if ($("input.date").attr("value") != "" && $("input.date").attr("value") != "DD" && $("input.year").attr("value") != "" && $("input.year").attr("value") != "YYYY") {
                var iReturn = validateAge($("input.date").attr("value"), $("select.month").attr("value"), $("input.year").attr("value"));
                if (iReturn == 0) {
                    removeWarning(field);
                    removeWarning($("input.date")[0]);
                    removeWarning($("input.year")[0]);
                } else {
                removeWarning(field, 1);
                    if (iReturn == -1) {
                        addWarning(field, "You must be over " + minimumAge + " and under " + maximumAge);
                    } else {
                        addWarning(field, "Invalid Date");
                    }
                    addWarning($("input.date")[0]);
                    addWarning($("input.year")[0]);
                    if (submit) {
                        if (fieldErrors == 0) {
                            addSubmitWarning();
                            fieldErrors = 1;
                        }
                    }
                }
            }
            break;

        case "year":
            if (!field_value || field_value == "Year") {
                addWarning(field, "This information is required");
                addWarning($("input.date")[0]);
                addWarning($('#ddlMonthSpan select').next()[0]);
                if (submit) {
                    if (fieldErrors == 0) {
                        addSubmitWarning();
                        fieldErrors = 1;
                    }
                }
            } else if ($("input.date").attr("value") != "" && $("input.date").attr("value") != "Day" && $("select.month").attr("value") != "~ Month ~") {
                var iReturn = validateAge($("input.date").attr("value"), $("select.month").attr("value"), $("input.year").attr("value"));
                if (iReturn == 0) {
                    removeWarning(field);
                    removeWarning($("input.date")[0]);
                    removeWarning($('#ddlMonthSpan select').next()[0]);
                    } else {
                        removeWarning(field, 1);
                        if (iReturn == -1) {
                            addWarning(field, "You must be over " + minimumAge + " and under " + maximumAge);
                        } else {
                            addWarning(field, "Invalid Date");
                        }
                        addWarning($("input.date")[0]);
                        addWarning($('#ddlMonthSpan select').next()[0]);
                        if (submit) {
                            if (fieldErrors == 0) {
                                addSubmitWarning();
                                fieldErrors = 1;
                            }
                        }
                    }
                }
                break;

            case "mobile":
                var MobileFilter = /^(((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$/
                var MobileFilter1 = /^((02\d\s?\d{4}\s?\d{4})|(01\d{2}\s?\d{3}\s?\d{4})|(01\d{3}\s?\d{5,6})|(01\d{4}\s?\d{4,5}))$/

                if ((!MobileFilter.test(field_value) && !MobileFilter1.test(field_value)) || $.trim(field_value) == "") {
                    addWarning(field, "Please enter a valid mobile phone number");
                    if (check) {
                        if (fieldErrors == 0) {
                            fieldErrors = 1;
                        }
                    } else if (submit) {
                        if (fieldErrors == 0) {
                            addSubmitWarning();
                            fieldErrors = 1;
                        }
                    }
                } else {
                    removeWarning(field);
                }

                break;

            case "address-line-1": case "town": 
                if ($.trim(field_value) == "") {
                    $(".address").show();
                    addWarning(field, "This information is required");
                    if (submit) {
                        if (fieldErrors == 0) {
                            addSubmitWarning();
                            fieldErrors = 1;
                        }
                    }
                } else {
                    removeWarning(field);
                }

            default:

                if ($(field).hasClass("req")) {
                    if (!field_value || field_value == "~ Please Select ~" || field_value == "~ Select Frequency ~" || field_value == "~ Select Sport ~") {
                        addWarning(field, "This information is required");
                        if (submit) {
                            if (fieldErrors == 0) {
                                addSubmitWarning();
                                fieldErrors = 1;
                            }
                        }
                    } else {
                        removeWarning(field);
                    }
                }
    }
    }catch(ex)
    {
    }
}

function addWarning(field, message) {
    if (!($(field).parent("span").siblings("p").hasClass("warning"))) {
        $(field).parent("span").addClass("warning");
        $(field).parent("span").after("<p class='warning'>" + message + "</p>");
    }
    if (!$(field).parent("span").hasClass("warning")) {
        $(field).parent("span").addClass("warning");
    }
}

function removeWarning(field, clear) {
    if ($(field).parent("span").hasClass("warning")) {
        $(field).parent("span").removeClass("warning");
    }
    if ($(field).parent("span").siblings("p").hasClass("warning")) {
        //$(field).parent("span").removeClass("warning");
        $(field).parent("span").siblings("p.warning").remove();
        if (!clear) {
            $(field).parent("span").after("<span class='ok'></span>");
            $(field).parent("span").siblings("span.ok").animate({ opacity: 1.0 }, 1500).fadeOut(300);
        }
    }
}

function removeWarningText(field, clear) {
    if ($(field).children("span").siblings("p").hasClass("warning")) {
        $(field).children("span").removeClass("warning");
        $(field).children("span").siblings("p.warning").remove();
        if (!clear) {
            $(field).children("span").after("<span class='ok'></span>");
            $(field).children("span").siblings("span.ok").animate({ opacity: 1.0 }, 1500).fadeOut(300);
        }
    }
}

function addFormWarning(message) {
    $(".FormErrorMessage p").append(message);
    $(".FormErrorMessage").show();
}

function addFormSuccess(message) {
	$(".FormErrorMessage").hide();
    $(".FormSuccessMessage p").append(message);
    $(".FormSuccessMessage").show();
}

function addSubmitWarning() {
    addFormWarning("<strong>Oh dear. We encountered a problem.</strong><br />Please correct the items highlighted and try submitting the form again<br/><br/>");
    $("#PlaceOfError").remove();
    $(".warning:first").after("<a name='PlaceOfError' id='PlaceOfError'></a>");
    setTimeout(function() { location.href = "#PlaceOfError"; }, 100);
}

function addNetworkWarning() {
    addFormWarning("<strong>Oh dear. We encountered a problem.</strong><br />The system is currently playing up. Please try again later<br/><br/>");
}

function poulateAddress(address) {
    $("#ShowHideAddressList").hide();
    $(".address").show();
    address = (address) ? address : $(".addresses")[0].options[$(".addresses")[0].selectedIndex].value;
	$.post(oGlobal.urlAjaxFindAddress, { Address: address },
		function(data) {
	        removeWarning($('.address-line-1')[0]);
	        removeWarning($('.town')[0]);
	        //We should always get the following pipe separated information out of data:
			//[Organisation]|[Address Line 1]|[Address Line 2]|[Address Line 3]|[Town]|[County]|[Postcode]|[Country]
			$('.address-line-1').attr('value', data.toString().split('|')[1]);
			$('.address-line-2').attr('value', data.toString().split('|')[2]);
			$('.address-line-3').attr('value', data.toString().split('|')[3]);
			$('.town').attr('value', data.toString().split('|')[4]);
			$('.county').attr('value', data.toString().split('|')[5]);
			$('.postcode').attr('value', data.toString().split('|')[6]);			
		}
	);
}

function clearAddress() {
    $('.address-line-1').attr('value', "");
    $('.address-line-2').attr('value', "");
    $('.address-line-3').attr('value', "");
    $('.town').attr('value', "");
    $('.county').attr('value', "");
    removeWarning($('.address-line-1')[0]);
    removeWarning($('.town')[0]);
    $("#ShowHideAddressList").hide();
}		


function removeSubmitNotices() {
    $("p.warning.submit").remove();
    $("p.success.submit").remove();
    $(".alert-panel").remove();
    $(".FormErrorMessage p").html(""); 
    $(".FormErrorMessage").hide();
    $(".FormSuccessMessage p").html(""); 
    $(".FormSuccessMessage").hide();
}

//VALIDATE AGE
function validateAge(day, month, year) {
	
	DateValidation = {
	   isValidDate: function(day, month, year) {
	       if (typeof (month) == "undefined") {
	           var dateParts = day.split("/");
	           day = dateParts[0];
	           month = dateParts[1];
	           year = dateParts[2];
	       }
	       day = parseInt(day, 10);
	       month = parseInt(month, 10);
	       year = parseInt(year, 10);
	       if (isNaN(day) || isNaN(month) || isNaN(year)) {
	           return false;
	       }
	       if (year < 1 || year > 9999) {
	           return false;
	       }
	       if (month < 1 || month > 12) {
	           return false;
	       }
	 
	 
	       var daysInMonth = this._daysInMonth[month - 1];
	       if (month == 2 && this.isLeapYear(year)) {
	           daysInMonth++;
	       }
	       if (day < 1 || day > daysInMonth) {
	           return false;
	       }
	       return true;
	   },
	   isLeapYear: function(year) {
	       return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
	   },
	   _daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
	};
	
	var today = new Date();
    var d = day + "/" + month + "/" + year;
    
    // regex to test date format including days in month. allows for leap years.
    /*
    var re = /^(?:(?:(?:0?[1-9]|1\d|2[0-8])\/(?:0?[1-9]|1[0-2]))\/(?:(?:1[6-9]|[2-9]\d)\d{2}))$|^(?:(?:(?:31\/0?[13578]|1[02])|(?:(?:29|30)\/(?:0?[1,3-9]|1[0-2])))\/(?:(?:1[6-9]|[2-9]\d)\d{2}))$|^(?:29\/0?2\/(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26]))))$/;
    if (!re.test(d)){
        return -2;
    }
    */
    if(!DateValidation.isValidDate(day, month, year)){
    	return -2;
    }
    
    d = d.split('/');
    var by = Number(d[2]);
    var bm = Number(d[1]) - 1;
    var bd = Number(d[0]);
    if (by < 1890) { // year must be at least 1890
        return -1;
    }
    var bday = new Date(by, bm, bd)
    var age = 0;
    var dif = bday;

    while (dif < today) {
        var dif = new Date(by + age, bm, bd);
        age++;
    }
    age += -2;

    if (age > (minimumAge - 1)) {
        if (age < (maximumAge)) {
            return 0;
        }
    }
    return -1
    
}


/* Function for stylised select boxes */
$(document).ready(function() {
    redrawSelectBoxes();
});
function redrawSelectBoxes() {
    $(".ddn-container, .ddn, .ddn-containerMulti, .ddnMulti").remove();
    var $selectBoxes = $("[selectzor='1']");
    for (var i = 0; i < $selectBoxes.length; i++) {
        var ddl = $selectBoxes.get(i);
        var width = ddl.style.width ? ddl.style.width : "175px";
        var selText = (ddl.selectedIndex != null &&  ddl.selectedIndex != -1) ? ddl.options[ddl.selectedIndex].text : "";
        var size = ddl.getAttribute("size");
		var tabindex = ddl.getAttribute("tabindex");
        var Multi = (size==0 || size == null)?"":"Multi";
        var div = "<div class='ddn" + Multi + " ddn-selector" + Multi + "' style='width: " + width + "' tabindex='" + tabindex + "' parent='" + ddl.id + "' id='div_" + ddl.id +
                          "'>" + selText + "</div><div id='div_" + ddl.id + "_Container' class='ddn-container" + Multi + "'>";
        // debugTabIndex++;                          
        for (var o = 0; ddl.options[o]; o++) {
            div += "<div id='div_" + ddl.id + "_" + o + "' index='" + o + "' class='ddn-item' parent='" + ddl.id + "'>" + ddl.options[o].text + "</div>";
        }
        div += "</div>";
        $("#" + ddl.id).after(div);
        $("#" + ddl.id).css("display", "none");
    }
    $(".ddn-container").hide();
    $(".ddn-selector").click(function(e) {
        if (!($(this).parent("span").siblings("p").hasClass("warning"))) {
            $(this).parent("span").siblings(".cnt").children("p.hint").is(":hidden") ? $(this).parent("span").siblings(".cnt").children("p.hint").fadeIn() : $(this).parent("span").siblings(".cnt").children("p.hint").fadeOut();
        }
        var id = $(this).attr("id");
        var $container = $("#" + id + "_Container")
        if (!$container.css("display") || $container.css("display") == "none") {
            $container.show();
        } else {
            $container.hide();
        }
        e.preventDefault();
    });
    $(".ddn-selector").keydown(function(e) {
		if (e.keyCode == '13' || e.keyCode == '32') {
			 $(this).trigger('click');
		}
    });

    $(".ddn-item").click(function() {
        var $this = $(this);
        var $parentId = $this.attr("parent")
        var $parent = $("#" + $parentId)
        $parent[0].selectedIndex = $(this).attr("index");
        $("#div_" + $parentId).text($(this).text());
        $("#div_" + $parentId).trigger('click');
        if ($parent[0].attributes["onchange"]) {
            eval($parent[0].attributes["onchange"].value);
        }
    });
    $(".ddn-item").hover(function() {
        $(this).toggleClass("ddn-item-hover");
    },
    function() {
        $(this).toggleClass("ddn-item-hover");
    });
}

function redrawSelectBox(oObj) {
    $("#div_" + $(oObj)[0].id).remove();
    $("#div_" + $(oObj)[0].id + "_Container").remove();

    var ddl = $(oObj)[0];
    var width = ddl.style.width ? ddl.style.width : "175px";
    var selText = (ddl.selectedIndex != null && ddl.selectedIndex != -1) ? ddl.options[ddl.selectedIndex].text : "";
    var size = ddl.getAttribute("size");
    var Multi = (size == 0 || size == null) ? "" : "Multi";
    //var Multi = size == 0 ? "" : "Multi";
    var div = "<div class='ddn" + Multi + " ddn-selector" + Multi + "' style='width: " + width + "' tabindex='1' parent='" + ddl.id + "' id='div_" + ddl.id +
                          "'>" + selText + "</div><div id='div_" + ddl.id + "_Container' class='ddn-container" + Multi + "'>";
    for (var o = 0; ddl.options[o]; o++) {
        div += "<div index='" + o + "' class='ddn-item' parent='" + ddl.id + "'>" + ddl.options[o].text + "</div>";
    }
    div += "</div>";
    $("#" + ddl.id).after(div);
    if (Multi == "") {
        $("#div_" + $(oObj)[0].id + "_Container").hide();
        $("#div_" + $(oObj)[0].id).click(function(e) {
            var id = $(this).attr("id");
            var $container = $("#" + id + "_Container")
            if (!$container.css("display") || $container.css("display") == "none") {
                $container.show();
            } else {
                $container.hide();
            }
            e.preventDefault();
        });
    }
    $("#div_" + $(oObj)[0].id + "_Container .ddn-item").click(function() {
        var $this = $(this);
        var $parentId = $this.attr("parent")
        var $parent = $("#" + $parentId)
        $parent[0].selectedIndex = $(this).attr("index");
        $("#div_" + $parentId).text($(this).text());
        $("#div_" + $parentId).trigger('click');
        if ($parent[0].attributes["onchange"]) {
            eval($parent[0].attributes["onchange"].value);
        }
    });
    $("#div_" + $(oObj)[0].id + "_Container .ddn-item").hover(function() {
        $(this).toggleClass("ddn-item-hover");
    },
    function() {
        $(this).toggleClass("ddn-item-hover");
    });
}

function doNothing() {
    // Nothing done
}
function proceed() {
    // another name for doNothing
}
