$(document).ready(function() {

    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    // Form Methods
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    function getFormDataFromElement(elementName) {
        //Add a new form to the DOM and hide it
        $('body').append('<form id="tempForm" style="visibility:hidden;"></form>');

        //Clone the element into the new form.
        $('#tempForm').html($('#' + elementName).clone());

        //Serialize the form data
        var data = $('#tempForm').serialize();

        //Remove the form from the DOM
        $('#tempForm').remove();

        return data;

    }

    function getMessageData(message) {
        $('body').append('<form id="tempForm" style="visibility:hidden;"></form>');
        $('#tempForm').html(message);

        var data = $('#tempForm').serialize();
        $('#tempForm').remove();
        return data;
    }

    function postData(elementId, nextElement) {
        var url = "Ajax.aspx?CN=7F3676F0A58B&EN=CDD6FE9F2CEC&TYPE=POST";
        var data = getFormDataFromElement('MiniRegistrationContainer');
        $.ajax({
            type: "POST",
            url: url,
            data: data,
            success: function(msg) {
                ClearAndAppendMessageData(msg);
                if (elementId != '') { $("#" + elementId).hide(); }
                if (nextElement != '') { $("#" + nextElement).show(); }
		eval(msg);
            }
        });
    }

    function postDataForm(redirect) {
        var url = "Ajax.aspx?CN=7F3676F0A58B&EN=CDD6FE9F2CEC&TYPE=POST";
        var data = getFormDataFromElement('MiniRegistrationContainer');
        $.ajax({
            type: "POST",
            url: url,
            data: data,
            success: function(msg) {
                if (redirect != '') { location.href = 'Portal.aspx?CN=' + redirect }
            }
        });
    }

    function postLogin(redirect) {
        var url = "Ajax.aspx?CN=1751D9361092&EN=26B390C5A3FF&TYPE=POST";
        var data = getFormDataFromElement('MiniLoginContainer');
        $.ajax({
            type: "POST",
            url: url,
            data: data,
            success: function(msg) {
                ClearAndAppendLoginResponseMessage(msg, redirect);
            }
        });
    }

    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    // Helpers
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    function RaiseError(message) {
        ClearError();
        $("#Response").show();
        $("#Response").html(message);
    }

    function ClearError() {
        $("#Response").hide();
        $("#Response").html("");
    }

    function ClearInputAndFocus(elementId) {
        $("#" + elementId).val('');
        $("#" + elementId).focus();
    }

    function ClearAndAppendMessageData(msg) {
        if ($('#UserID').length > 0) {
            $('#UserID').remove();
            $('#ResponseMessage').remove();
        }

        $("#MiniRegistrationContainer").append(msg);
        if ($('#UserID').val() == '-1') { $('#ReturnToEmail').show(); }
        RaiseError($("#ResponseMessage").val());
    }

    function ClearAndAppendLoginResponseMessage(msg, redirect) {
        $("#MiniLoginContainer").append(msg);
        if ($("#ResponseMessage").val() != '') {
            RaiseError($("#ResponseMessage").val());
            return;
        }

        if (redirect != '') { location.href = 'Portal.aspx?CN=' + redirect }
    }

    function isValidEmailAddress(emailAddress) {
        var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
        return pattern.test(emailAddress);
    }

    function isValidDate(myDate) {
	/**--------------------------
	//* Validate Date Field script- By JavaScriptKit.com
	//* For this script and 100s more, visit http://www.javascriptkit.com
	//* This notice must stay intact for usage
	---------------------------**/
	var validformat = /^\d{1,2}\/\d{1,2}\/\d{4}$/; //Basic check for format validity
	var returnval = false;

	if (!validformat.test(myDate))
		returnval = false;
	else {
		//Detailed check for valid date ranges
		var monthfield = myDate.split("/")[0];
		var dayfield = myDate.split("/")[1];
		var yearfield = myDate.split("/")[2];
		var dayobj = new Date(yearfield, monthfield-1, dayfield)
		if ((dayobj.getMonth()+1 != monthfield) || (dayobj.getDate() != dayfield) || (dayobj.getFullYear() != yearfield))
			returnval = false;
		else
			returnval = true;
	}
	return returnval;
    }

    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    // UI Methods
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    $("#createAccount").click(function() {
        ClearError();
        $("#MiniRegistrationContainer").dialog({
            bgiframe: true,
            draggable: true,
            width: 400,
            resizable: false,
            modal: false,
            position: 'center',
            closeOnEscape: true
        });
        $("#validEmail").removeClass();
        $("#validEmail").addClass("valid");
        $("#validDate").removeClass();
        $("#validDate").addClass("valid");
        $("#EnterEmailAddress").show();
        $("#MiniRegistrationContainer").dialog('open');
        ClearInputAndFocus('tbDOB');
        ClearInputAndFocus('tbMINIEMAIL');
        return false;
    });

    $("#logIntoAccount").click(function() {
        $("#tbMINIPASSWORD").val($("#tbMINIPASSWORD1").val());
        postLogin('CA78283C200F');
    });

    $("#Return").click(function() {
        ClearError();
        ClearInputAndFocus('tbMINIEMAIL');
        $("#validEmail").removeClass();
        $("#EnterEmailAddress").show();
        $("#ReturnToEmail").hide();
    });

    $("#passwordSubmit").click(function() {
        if ($('#tbMINIPASSWORD1').val() == "") {
            RaiseError('Please enter a password');
        } else {
            $("#tbMINILOGIN").val($("#tbMINIEMAIL").val());
            $("#tbMINIPASSWORD").val($("#tbMINIPASSWORD1").val());
            postData('EnterPassword', '');
        }
        return false;
    });

    $("#emailAddressSubmit").click(function() {
        var emailAddress = $('#tbMINIEMAIL').val();
        var state = $('#tbMINISTATE').val();
        var dateOfBirth = $('#tbDOB').val();

        //alert(state + ' : ' + dateOfBirth);

        if (isValidEmailAddress(emailAddress) && state != '' && isValidDate(dateOfBirth)) {
            ClearError();
            $("#EnterEmailAddress").hide();
            $("#EnterPassword").show();
            ClearInputAndFocus('tbMINIPASSWORD');
        } else {
            RaiseError('Please check all the required fields.');
        }
        return false;
    });

    $("#registerSimple").click(function() {
        var emailAddress = $('#tbMINIEMAIL').val();

        if (emailAddress == "") {
            RaiseError('Please enter an email address');
            return false;
        }

        if (!isValidEmailAddress(emailAddress)) {
            RaiseError('Please enter a valid email address.');
            return false;
        }

        if ($('#tbMINIPASSWORD1').val() == "") {
            RaiseError('Please enter a password');
            return false;
        }

        $("#tbMINILOGIN").val($("#tbMINIEMAIL").val());
        $("#tbMINIPASSWORD").val($("#tbMINIPASSWORD1").val());

        postDataForm('FBC0845A200C');
        return false;


    });

    $("#tbEMAIL").keyup(function() {
        var email = $("#tbMINIEMAIL").val();
        if (email != 0) {
            if (isValidEmailAddress(email)) {
                ClearError();
                $("#validEmail").removeClass();
                $("#validEmail").addClass("validYes");
            } else {
                $("#validEmail").removeClass();
                $("#validEmail").addClass("validNo");
            }
        } else {
            $("#validEmail").removeClass();
        }
    });

    $("#tbDOB").keyup(function() {
        var dateOfBirth = $("#tbDOB").val();
        if (dateOfBirth != 0) {
            if (isValidDate(dateOfBirth)) {
                ClearError();
                $("#validDate").removeClass();
                $("#validDate").addClass("validYes");
            } else {
                $("#validDate").removeClass();
                $("#validDate").addClass("validNo");
            }
        } else {
            $("#validDate").removeClass();
        }
    });

    $("#PreviousOrderLink").click(function() {
        var url = "Ajax.aspx?CN=8662B6F080B5&EN=37F76E2E4DE3&TYPE=POST";
        $.ajax({
            type: "POST",
            url: url,
            cache: false,
            success: function(msg) {
                $("#PreviousOrderDetails").html("");
                $("#PreviousOrderDetails").append(msg);
            }
        });
    });

    $("#AccountInformationLink").click(function() {
        var url = "Ajax.aspx?CN=188CD230D6FB&EN=2130560020B5&TYPE=POST";
        $.ajax({
            type: "POST",
            url: url,
            cache: false,
            success: function(msg) {
                $("#AccountInformationDetails").html("");
                $("#AccountInformationDetails").append(msg);
            }
        });
    });

});