﻿function CreateValidation(trigger, container)
{
    var formElements = GetFormElements(container);
    
    if (formElements.length > 0)
    {
        for (var i = 0; i < formElements.length; i++)
        {
            var element = $(formElements[i]);
            CreateValidationEvents(element);
        }
            
//        $(trigger).click(
//            function() {
//                return ValidateForm(container);
//            }
//        );
    }
}

function GetFormElements(container)
{
    return $(container).find("input.text"); 
}

function CreateValidationEvents(element)
{
    element.bind(
        "validate",
        function(e) {
            return ValidateElement(element);
        }
    );
}

function ValidateElement(element)
{
    var container = element.parent();
    container.removeClass("invalid");
    container.find("img.error").remove();
        
    var isValid = true;
    
    if (element.hasClass("required"))
    {
        if (!ValidateRequiredElement(element))
        {
            isValid = false;
        }
    }
    
    if (element.hasClass("email"))
    {
        if (!ValidateEmailElement(element))
        {
            isValid = false;
        }
    }
    
    if (!isValid)
    {    
        container.addClass("invalid");
    }
    
    return isValid;
}

function ValidateRequiredElement(element)
{
    var domElement = element.get(0);
    
    var isValid = true;
    
    switch (domElement.tagName)
    {
        case "INPUT":
            if (element.hasClass("text"))
            {
                var text = jQuery.trim(element.attr("value"));
                if (text == "")
                {
                    isValid = false;
                }
            }
            break;
    }
    
    if (!isValid)
    {
        AddErrorMessage(element, 'Please enter an email address');  
    }
    
    return isValid;
}

function ValidateEmailElement(element)
{
    var domElement = element.get(0);
    
    var isValid = true;
    
    switch (domElement.tagName)
    {
        case "INPUT":
            if (element.hasClass("text"))
            {
                var text = jQuery.trim(element.attr("value"));
                if (text != "")
                {
                    var regex = new RegExp("^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$");
                    if (!regex.test(text))
                    {
                        isValid = false;
                    }
                }
            }
            break;
    }
    
    if (!isValid)
    {
        AddErrorMessage(element, 'Please enter a valid email address');        
    }
    
    return isValid;
}

function ValidateForm(container)
{
    $(container).find('div.validationSummary').remove();
    
    var formElements = GetFormElements(container);
    
    var isValid = true;
    
    if (formElements.length > 0)
    {
        for (var i = 0; i < formElements.length; i++)
        {
            var element = $(formElements[i]);            
            element.trigger("validate");
            var container = element.parent();
            if (container.hasClass("invalid"))
            {
                isValid = false;
            }
        }
    }
    
    if (!isValid)
    {
        //Show a message about the errors
    }
    
    return isValid;
}

function AddErrorMessage(element, message)
{    
    AddMessage('There was an error submitting your email address.');
    
    var error = $('<div class="validationSummary"><p>' + message + '</p></div>');    
    element.parent().parent().before(error);
}

function AddMessage(message)
{
    var element = $('div#keepInformed div.formInputGroup');
    element.parent().find('div.message').remove();
    
    message = $('<div class="message"><p>' + message + '</p></div>');
    element.before(message);
}

$(document).ready(function(){    
    var sendButtonSelector = 'div#keepInformed div.formOptions input.submit';
    
    CreateValidation(sendButtonSelector, 'div#keepInformed fieldset');
    
    var ajaxLoadImgPath = "/resources/images/site/ajax-loader.gif";                
    var preloader = new Image();
    preloader.src = ajaxLoadImgPath;
       
    $(sendButtonSelector).click(function(){
        if (ValidateForm('div#keepInformed fieldset'))
        {
            var button = $('div#keepInformed div.formOptions input.submit');
            button.parent().hide();
            $('div#keepInformed div.formOptions').append('<img id="' + button.attr("id") + 'AjaxLoad" src="' + ajaxLoadImgPath + '" style="width: 16px;height:16px;padding-top:4px;" alt="Sending your email address..." title="Sending your email address..." />');
                      
            AddMessage('Sending your email address...');
            
            var email = jQuery.trim($('div#keepInformed div.formInput input.text.email').attr('value'));        
            $.ajax
            (
                {
                    type: 'GET',
                    url: '/register-email.ashx',
                    dataType: 'json',
                    data: { e : email },
                    timeout: 10000,
                    success: function(data, textStatus)
                    {
                        if (data.messageType == 1)
                        {
                            AddErrorMessage($('div#keepInformed div.formInput input.text.email'), data.message);
                        }
                        else
                        {                        
                            AddMessage(data.message);
                            
                            try
                            {
                                pageTracker._trackPageview('/keep-informed-confirm');
                            }
                            catch(e) {}
                            
                            $('div#keepInformed div.formInput input.text.email').attr('value', '');
                        }
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown)
                    {
                        AddErrorMessage($('div#keepInformed div.formInput input.text.email'), 'Sorry, there was a problem submitting your email address. Please try again.');
                    },
                    complete: function(XMLHttpRequest, textStatus)
                    {
                        var button = $('div#keepInformed div.formOptions input.submit');
                        $('img#' + button.attr("id") + 'AjaxLoad').remove();
                        button.parent().show();                
                    }
                }
            );
        }
        return false;
    });
});

