﻿/* Utility Class */

com.timmons.srl.Utility = function() {

    var _disableGenericButtons = function(selector) {

        _disableElements(selector);
    };

    var _enableGenericButtons = function(selector) {

        _enableElements(selector);
    };

    var _enableElements = function(selector) {

        $(selector).removeClass("ui-state-disabled");
    };

    var _disableElements = function(selector) {

        $(selector).addClass("ui-state-disabled");
        $(selector).removeClass("ui-state-hover");
    };

    var _initializeGenericButtons = function(selector) {

        $(selector).live("mouseover", function() {

            $(this).addClass("ui-state-hover");
        });

        $(selector).live("mouseout", function() {

            $(this).removeClass("ui-state-hover");
        });
    };

    var _initializeDynamicButtons = function(selector) {

        $(selector).hover(
            function() {
                $(this).addClass("ui-state-hover");
            },
            function() {
                $(this).removeClass("ui-state-hover");
            }
        );
    };

    var _disableSteps = function(selector) {

        /* 
        Added code in the jQuery UI accordion - if we update to a new version we need to add the code back 
        unless the functionality is already added in the new version 
        */

        if (!selector) { // disable all steps

            _disableElements('#srlRequestAccordion .ui-accordion-header');

        } else { // disable steps in selector

            _disableElements(selector);
        }
    };

    var _enableSteps = function(step_number) {

        /* 
        Added code in the jQuery UI accordion - if we update to a new version we need to add the code back 
        unless the functionality is already added in the new version 
        */

        if (!step_number) { // enable all steps

            _enableElements('#srlRequestAccordion .ui-accordion-header');

        } else { // enable steps in selector

            // assume steps start at 1

            var selector = '#srlRequestAccordion .ui-accordion-header:eq(' + (step_number - 1) + ')';

            _enableElements(selector);
        }

    };

    var _showStep = function(step_number) {

        //$("#srlRequestAccordion").accordion('activate', step_number);
        var active = $('#srlRequestAccordion').accordion('option', 'active');

        if (active != step_number + 1) $("#srlRequestAccordion").accordion('activate', step_number);
    };

    var _isValidEmailAddress = function(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);
    };

    var _readablizeBytes = function(bytes) {
        var s = ['bytes', 'kb', 'MB', 'GB', 'TB', 'PB'];
        var e = Math.floor(Math.log(bytes) / Math.log(1024));
        return (bytes / Math.pow(1024, Math.floor(e))).toFixed(2) + " " + s[e];
    };

    return {

        enableNextButton: function(selector, step_number) {

            _enableGenericButtons(selector);

            _initializeDynamicButtons(selector);

            $(selector).click(function() {

                _enableSteps(step_number + 2);
                _showStep(step_number + 1);
            });
        },
        enableButton: function(selector) {

            _enableGenericButtons(selector);
            _initializeDynamicButtons(selector);
        },
        disableGenericButtons: function(selector) {

            _disableGenericButtons(selector);
        },
        disableNextButton: function(selector, step_number) {

            _disableGenericButtons(selector);

            $(selector).unbind();
        },
        enableSteps: function(step_number) {

            _enableSteps(step_number);
        },
        disableSteps: function(selector) {

            _disableSteps(selector);
        },
        showStep: function(step_number) {

            _showStep(step_number);
        },
        initializeGenericButtons: function(selector) {

            _initializeGenericButtons(selector);
        },
        initializeDynamicButtons: function(selector) {

            _initializeDynamicButtons(selector);
        },
        isValidEmailAddress: function(emailAddress) {

            return _isValidEmailAddress(emailAddress);
        },
        readablizeBytes: function(bytes) {

            return _readablizeBytes(bytes);
        }
    };
} ();
