﻿/*  UI Control scripts */

/* OGFForm jQuery plugin 
    OGF Controls register their validators with the containing form by jQuery("#fomrid").OGFForm("RegisterValidator", validator_func);
    You may check to see if the form is valid by the following FormIsValid = jQuery("#fomrid").OGFForm("IsValid");

    Other OGF controls will register themselves in the containing OGF form. When an OGF form is submitted it will call all the validators and return true/false.
    Each OGF control should display validation in real time (use Ajax if nessesary)
*/

(function (jQuery) {

    var methods = {
        RegisterValidator : function(validator) {  
            if (!jQuery(this).attr("id")) jQuery(this).attr("id",Math.floor(Math.random()*10000000000000000));
            formId = jQuery(this).attr("id");
            formValidators = jQuery(this).data("validators")
            formValidators[formId] = OGFEmailValidation;        
        },
        IsValid : function( ) {
            formIsValid = true;

            validators = jQuery(this).data("validators");
            for (formId in validators)
                formIsValid = validators[formId](0, this) && formIsValid;

            return formIsValid;
        }
    };    

    jQuery.fn.OGFForm = function ( method ) {
        
        if (!jQuery(this).data("IsInitialized")) {
            //Initialization Code
            this.each(function(){
                var jQuerythis = jQuery(this);
                var validators = {};
                jQuerythis.data("validators", validators);
                jQuerythis.submit(methods.IsValid);
            });   
            jQuery(this).data("IsInitialized", true);
        }

        if ( methods[method] ) 
            return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));

        jQuery.error( 'Method ' +  method + ' does not exist on jQuery.OGFForm' );
    };

})(jQuery);


/*  Compact Email control */
/* CSS Classes used 
CompactEmail (Base class, always present)
CompactEmailIsBlank (Represents format for the "BlankText", this class added and removed when nessesary)
CompactEmailIsInvalid (Represents format for invalid state, this class is added and removed when nessesary)
*/
var emailPattern = /^([a-zA-Z0-9_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

jQuery(document).ready(InitializeOGFEmails);

function InitializeOGFEmails() {
    jQuery("input.CompactEmail").each(function (index) {
        jQuery(this).attr("value", GetEmailFieldValue(this));

        jQuery(this).focus(function () {
            jQuery(this).data("hasFocus", true);
            if (jQuery(this).val() == jQuery(this).attr("BlankText")) {
                jQuery(this).attr("value", "");
                jQuery(this).removeClass("CompactEmailIsBlank");
            }
        });

        jQuery(this).blur(function () {
            jQuery(this).data("hasFocus", false);
            jQuery(this).removeData("timer");
            ValidateEmail(this);
        });

        jQuery(this).keypress(function () {
            clearTimeout(jQuery.data(this, 'timer'));
            jQuery(this).data('timer', setTimeout(ValidateEmailTimer, 1000));
        });

        //Validation
        jQuery(this).parents("form").OGFForm("RegisterValidator", OGFEmailValidation);

    });
}

function GetEmailFieldValue(element) {
    if (typeof(CurrentUsername) != 'undefined' && emailPattern.test(CurrentUsername))
        return CurrentUsername;

    if (typeof(primaryEmailAddress) != 'undefined' && emailPattern.test(primaryEmailAddress))
        return primaryEmailAddress;

    jQuery(element).addClass("CompactEmailIsBlank");
    return jQuery(element).attr("BlankText");
}

//Timer to validate the field in focus 
function ValidateEmailTimer() {
    jQuery("input.CompactEmail").each(function () {
        if (jQuery(this).data("timer") != null) {
            ValidateEmail(this);
        }
    });
}

function EmailIsBlank(element) { 
    return (jQuery(element).attr("value") == "" || jQuery(element).val() == jQuery(element).attr("BlankText"));
}

//Validate an Individual email field
function ValidateEmail(element) {
    //Remove blanks
    if (!EmailIsBlank(element))
        jQuery(element).val(jQuery(element).val().replace(/ /g, ""));

    if (!jQuery(element).data("hasFocus") && EmailIsBlank(element) && jQuery(element).attr("Required") == "True") {

        jQuery(element).attr("value", jQuery(element).attr("BlankText"));
        jQuery(element).addClass("CompactEmailIsBlank");
        jQuery(element).removeClass("CompactEmailIsInvalid");
        jQuery(element).next().fadeIn(300);
        jQuery(element).next().html("Required");

        return false;
    } else if (!jQuery(element).data("hasFocus") && EmailIsBlank(element)) { 

        jQuery(element).attr("value", jQuery(element).attr("BlankText"));
        jQuery(element).addClass("CompactEmailIsBlank");
        jQuery(element).removeClass("CompactEmailIsInvalid");
        jQuery(element).next().html("");

        return true;
    }

    if (!emailPattern.test(jQuery(element).val()) && (jQuery(element).attr("Required") == "True" || !EmailIsBlank(element))) {
        jQuery(element).addClass("CompactEmailIsInvalid");
        jQuery(element).removeClass("CompactEmailIsBlank");
        jQuery(element).next().fadeIn(300);
        jQuery(element).next().html("Not a valid email address");
        return  false;
    }     
    
    jQuery(element).removeClass("CompactEmailIsInvalid");
    jQuery(element).removeClass("CompactEmailIsBlank");
    jQuery(element).next().fadeOut(300);
    jQuery(element).next().html("");
    
    return true;
}

//Validate all Compact OGF Email fileds on a form
function OGFEmailValidation(index, formElement) {
    var validEmails = true;

    jQuery(formElement).find("input.CompactEmail").each(function (frmIndex, emailElement) {
        validEmails = ValidateEmail(emailElement) && validEmails;
    });

    return validEmails;
}


/* MiniSurvey JQuery Plugin */

(function (jQuery) {

    jQuery.fn.miniSurvey = function () {

        return this.each(function () {

            var jQuerythis = jQuery(this);

            jQuerythis.children().each(function (index, element) {

                //Display only the first child
                if (index != 0) {
                    jQuery(element).hide();
                } else {
                    jQueryactive = jQuery(element);
                }

                //add Advance features
                jQuery(element).find('[next="advance"]').click(function () {
                    //Check for a containing OGFForm, and see if it is valid to adanve
                    var validToAdvance = true;
                    if (jQuery(this).parents('form'))
                        validToAdvance = jQuery(this).parents('form').OGFForm("IsValid");
                    
                    if (!validToAdvance) return;

                    jQueryactive.hide();
                    jQueryactive = jQueryactive.next();
                    jQueryactive.fadeIn(300);
                });

                //add Close feature
                jQuery(element).find('[next="close"]').click(function () {
                    jQuerythis.fadeOut(1000);
                });

            });

        });

    };

})(jQuery);


