String.prototype.trim = function()
{ 
    return this.replace(/^\s+|\s+$/g,"");
}


String.prototype.ltrim = function()
{ 
    return this.replace(/^\s+/,"");
}


String.prototype.rtrim = function()
{ 
    return this.replace(/\s+$/,"");
}


window.onload = function()
{
	makeVisible('submissionButton');
	makeInvisible('processingOrderMessage');
}


// This is needed because in firefox, window.onload won't
// function properly if window.onunload isn't defined.
window.onunload = function()
{

};


function showCreditCardSecurityCodeInformation()
{
	window.open(
		"/creditCardSecurityCode.html",
		"Window1",
		"menubar=no,width=510,height=510,toolbar=no,status=no");
}


function getVisibility(objectID)
{
	return (document.getElementById(objectID)) ? document.getElementById(objectID).style.display : "none";
}


function makeVisible(objectID)
{
    if ( document.getElementById(objectID) ) {
        var object = document.getElementById(objectID).style.display = 'block';
    }
}


function makeInvisible(objectID)
{
    if ( document.getElementById(objectID) ) {
        var object = document.getElementById(objectID).style.display = 'none';
    }
}


function onSubmissionButtonClick()
{
	makeInvisible('submissionButton');
	makeVisible('processingOrderMessage');
}


function toggleVisibility(objectID)
{
	if ( getVisibility(objectID) == 'none' )
    {
		makeVisible(objectID);
	} 
    else
    {
		makeInvisible(objectID);
	}
}


function onWhereIsThePINClick()
{
	toggleVisibility('pinLocationInformation');
}


function onWhereIsTheRegistrationCodeClick()
{
	toggleVisibility('registrationCodeLocationInformation');
}


function preventEnterKey(e) {
   var evt = (e) ? e : ((event) ? event : null);
   var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
   if ((evt.keyCode == 13) && (node.type=="text")) {return false;}
   return true;
}


function checkEmail(email)
{
    var pattern = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var emailVal = $("#" + email).val();
	return pattern.test(emailVal);
}

$(function()
{
    $("#subscribe_to_newsletter_form input:submit").click(function()
    {
        // First, disable the form from submitting
        $('form#subscribe_to_newsletter_form').submit(function() { return false; });

        // Grab form action
        var formAction = $("form#subscribe_to_newsletter_form").attr("action");

        var emailId = "newsletteremail";

        // Validate email address with regex
        if (!checkEmail(emailId))
        {
            alert("Please enter a valid email address");
            return;
        }

        // Serialize form values to be submitted with POST
        var str = $("form#subscribe_to_newsletter_form").serialize();

        // Add form action to end of serialized data
        // CDATA is used to avoid validation errors
        //<![CDATA[
        var serialized = str + "&action=" + formAction;
        // ]]>

        // Submit the form via ajax
        $.ajax({
            url: "/newsletter_subscription_processor.php",
            type: "POST",
            data: serialized,
            success: function(data)
            {
                // Server-side validation
                if (data.search(/invalid/i) != -1)
                {
                    alert('The email address you supplied is invalid and needs to be fixed before you can subscribe to this list.');
                }
                else
                {
                    $("#subscribe_to_newsletter").hide(); // If successfully submitted hides the form
                    $("#newsletter_subscription_confirmation").slideDown("slow");  // Shows "Thanks for subscribing" div
                    $("#newsletter_subscription_confirmation").tabIndex = -1;
                    $("#newsletter_subscription_confirmation").focus(); // For screen reader accessibility
                }
            }
        });
    });
});

