/*
 * forms.js
 *
 * Copyright (c) 2006-2010 by Goose Networks, Inc.
 */

if (!GN) { var GN = {}; }
if (!GN.overlays) { GN.overlays = {}; }

var DOM = YAHOO.util.Dom;
var YCM = YAHOO.util.Connect;

/**
 * The subscribe form overlay.
 */
GN.overlays.SubscribeOverlay = function() {

    var _root;
    var _config;
    var _panel;

    var _closeButton;
    var _submitButton;

    var _confMsgElt;
    var _errMsgElt;

    _config = {
        close: false,
        draggable: true,
        effect: { effect: YAHOO.widget.ContainerEffect.FADE, duration:0.5 },
        fixedcenter: true,
        modal: true,
        underlay: "none",
        visible: false,
        zIndex:1000
    };

    /**
     * Callback invoked when the close button is clicked.
     */
    var _enableButtons = function(fEnable) {
        _closeButton.set('disabled', !fEnable);
        _submitButton.set('disabled', !fEnable);
    };

    /**
     * Callback invoked when the close button is clicked.
     */
    var _handleCloseButtonClick = function() {
        _panel.hide();
    };

    /**
     * Callback invoked when the submit button is clicked.
     */
    var _handleSubmitButtonClick = function() {
        _enableButtons(false);
        _clearErrorMessage();
        if(_validateInputs()) {
            _submitForm();
        }
    };

    /**
     * Check that valid inputs have been provided, returning true
     * if so.
     */
    var _validateInputs = function() {
        return _chkInput("first_name", "Please enter your First Name") &&
               _chkInput("last_name", "Please enter your Last Name") &&
               _chkInput("email", "Please enter your Email Address") &&
               _chkInput("company", "Please enter the name of your Company / Organization") &&
               _chkInput("state", "Please enter the name of your State");
    }

    /**
     * Given an input, check to make sure that it has been provided.  If
     * not, display the given error message.
     */
    var _chkInput = function(name, msg) {
        var inputs;
        inputs = DOM.getElementsByClassName("oform-input", "input", _root);
        for (var i = 0; i < inputs.length; i++) {
            if (inputs[i].name == name && inputs[i].value.length > 0) {
                return true;
            }
        }
        _showErrorMessage(msg);
        return false;
    }

    /**
     * Hide any visible confirmation message.
     */
    var _clearConfirmationMessage = function() {
        var anim;
        anim = new YAHOO.util.Anim(_confMsgElt.parentNode, {
            height: { to: 0 }
        }, 0.25);
        anim.animate();
    }

    /**
     * Display the confirmation message.
     */
    var _showConfirmationMessage = function() {
        var height;
        var anim;
        height = _confMsgElt.offsetHeight + 10;
        anim = new YAHOO.util.Anim(_confMsgElt.parentNode, {
            height: { to: height }
        }, 0.25);
        anim.animate();
    }

    /**
     * Hide any visible error message.
     */
    var _clearErrorMessage = function() {
        var anim;
        anim = new YAHOO.util.Anim(_errMsgElt.parentNode, {
            height: { to: 0 }
        }, 0.25);
        anim.animate();
    }

    /**
     * Display the given error message.
     */
    var _showErrorMessage = function(msg) {
        var span;
        var height;
        var anim;
        span = DOM.getElementsByClassName("msg-span", "span", _errMsgElt)[0];
        span.innerHTML = msg;
        height = _errMsgElt.offsetHeight + 10;
        anim = new YAHOO.util.Anim(_errMsgElt.parentNode, {
            height: { to: height }
        }, 0.25);
        anim.animate();
        _enableButtons(true);
    }

    /**
     *
     */
    var _submitForm = function() {
        var f;
        f = DOM.get('subscribe-form');
        _showConfirmationMessage();
        setTimeout(function() {
            f.submit();
        }, 5000);
    };

    /**
     * The 'Public API'
     */
    return {

        /**
         * Initialize the 'Subscribe' overlay.
         */
        init: function() {
            _root = DOM.get('subscribe-overlay');
            _panel = new YAHOO.widget.Panel("subscribe-overlay", _config);
            _panel.render();
            _closeButton = new YAHOO.widget.Button('close-subscribe-form-button');
            _submitButton = new YAHOO.widget.Button('submit-subscribe-form-button');
            _closeButton.addListener('click', _handleCloseButtonClick);
            _submitButton.addListener('click', _handleSubmitButtonClick);
            _confMsgElt = DOM.getElementsByClassName("conf-msg", "div", _root)[0];
            _errMsgElt = DOM.getElementsByClassName("err-msg", "div", _root)[0];
        },

        /**
         * Show the 'Subscribe' overlay.
         */
        show: function() {
            _clearConfirmationMessage();
            _clearErrorMessage();
            _enableButtons(true);
            _panel.show();
        }
    };
}();


/**
 * The demo request form overlay.
 */
GN.overlays.DemoRequestOverlay = function() {

    var _root;
    var _config;
    var _panel;

    var _closeButton;
    var _submitButton;

    var _confMsgElt;
    var _errMsgElt;

    _config = {
        close: false,
        draggable: true,
        effect: { effect: YAHOO.widget.ContainerEffect.FADE, duration:0.5 },
        fixedcenter: true,
        modal: true,
        underlay: "none",
        visible: false,
        zIndex:1000
    };

    /**
     * Callback invoked when the close button is clicked.
     */
    var _enableButtons = function(fEnable) {
        _closeButton.set('disabled', !fEnable);
        _submitButton.set('disabled', !fEnable);
    };

    /**
     * Callback invoked when the close button is clicked.
     */
    var _handleCloseButtonClick = function() {
        _panel.hide();
    };

    /**
     * Callback invoked when the submit button is clicked.
     */
    var _handleSubmitButtonClick = function() {
        _enableButtons(false);
        _clearErrorMessage();
        if(_validateInputs()) {
            _submitForm();
        }
    };

    /**
     * Check that valid inputs have been provided, returning true
     * if so.
     */
    var _validateInputs = function() {
        return _chkInput("first_name", "Please enter your First Name") &&
               _chkInput("last_name", "Please enter your Last Name") &&
               _chkInput("company", "Please enter the name of your Company / Organization") &&
               _chkInput("email", "Please enter your Email Address") &&
               _chkInput("phone", "Please enter your Phone Number");
    }

    /**
     * Given an input, check to make sure that it has been provided.  If
     * not, display the given error message.
     */
    var _chkInput = function(name, msg) {
        var inputs;
        inputs = DOM.getElementsByClassName("oform-input", "input", _root);
        for (var i = 0; i < inputs.length; i++) {
            if (inputs[i].name == name && inputs[i].value.length > 0) {
                return true;
            }
        }
        _showErrorMessage(msg);
        return false;
    }

    /**
     * Hide any visible confirmation message.
     */
    var _clearConfirmationMessage = function() {
        var anim;
        anim = new YAHOO.util.Anim(_confMsgElt.parentNode, {
            height: { to: 0 }
        }, 0.25);
        anim.animate();
    }

    /**
     * Display the confirmation message.
     */
    var _showConfirmationMessage = function() {
        var height;
        var anim;
        height = _confMsgElt.offsetHeight + 10;
        anim = new YAHOO.util.Anim(_confMsgElt.parentNode, {
            height: { to: height }
        }, 0.25);
        anim.animate();
    }

    /**
     * Hide any visible error message.
     */
    var _clearErrorMessage = function() {
        var anim;
        anim = new YAHOO.util.Anim(_errMsgElt.parentNode, {
            height: { to: 0 }
        }, 0.25);
        anim.animate();
    }

    /**
     * Display the given error message.
     */
    var _showErrorMessage = function(msg) {
        var span;
        var height;
        var anim;
        span = DOM.getElementsByClassName("msg-span", "span", _errMsgElt)[0];
        span.innerHTML = msg;
        height = _errMsgElt.offsetHeight + 10;
        anim = new YAHOO.util.Anim(_errMsgElt.parentNode, {
            height: { to: height }
        }, 0.25);
        anim.animate();
        _enableButtons(true);
    }

    /**
     *
     */
    var _submitForm = function() {
        var f;
        f = DOM.get('demo-request-form');
        _showConfirmationMessage();
        setTimeout(function() {
            f.submit();
        }, 5000);
    };

    /**
     * The 'Public API'
     */
    return {

        /**
         * Initialize the 'Subscribe' overlay.
         */
        init: function() {
            _root = DOM.get('demo-request-overlay');
            _panel = new YAHOO.widget.Panel("demo-request-overlay", _config);
            _panel.render();
            _closeButton = new YAHOO.widget.Button('close-demo-request-form-button');
            _submitButton = new YAHOO.widget.Button('submit-demo-request-form-button');
            _closeButton.addListener('click', _handleCloseButtonClick);
            _submitButton.addListener('click', _handleSubmitButtonClick);
            _confMsgElt = DOM.getElementsByClassName("conf-msg", "div", _root)[0];
            _errMsgElt = DOM.getElementsByClassName("err-msg", "div", _root)[0];
        },

        /**
         * Show the 'Subscribe' overlay.
         */
        show: function() {
            _clearConfirmationMessage();
            _clearErrorMessage();
            _enableButtons(true);
            _panel.show();
        }
    };
}();


/**
 * The newsletter subscription form overlay.
 */
GN.overlays.NewsletterSubscriptionOverlay = function() {

    var _root;
    var _config;
    var _panel;

    var _closeButton;
    var _submitButton;

    var _confMsgElt;
    var _errMsgElt;

    _config = {
        close: false,
        draggable: true,
        effect: { effect: YAHOO.widget.ContainerEffect.FADE, duration:0.5 },
        fixedcenter: true,
        modal: true,
        underlay: "none",
        visible: false,
        zIndex:1000
    };

    /**
     * Callback invoked when the close button is clicked.
     */
    var _enableButtons = function(fEnable) {
        _closeButton.set('disabled', !fEnable);
        _submitButton.set('disabled', !fEnable);
    };

    /**
     * Callback invoked when the close button is clicked.
     */
    var _handleCloseButtonClick = function() {
        _panel.hide();
    };

    /**
     * Callback invoked when the submit button is clicked.
     */
    var _handleSubmitButtonClick = function() {
        _enableButtons(false);
        _clearErrorMessage();
        if(_validateInputs()) {
            _submitForm();
        }
    };

    /**
     * Check that valid inputs have been provided, returning true
     * if so.
     */
    var _validateInputs = function() {
        return _chkInput("cm-f-jkjihr", "Please enter your First Name") &&
               _chkInput("cm-f-jkjihy", "Please enter your Last Name") &&
               _chkInput("cm-duukku-duukku", "Please enter your Email Address");
    }

    /**
     * Given an input, check to make sure that it has been provided.  If
     * not, display the given error message.
     */
    var _chkInput = function(name, msg) {
        var inputs;
        inputs = DOM.getElementsByClassName("oform-input", "input", _root);
        for (var i = 0; i < inputs.length; i++) {
            if (inputs[i].name == name && inputs[i].value.length > 0) {
                return true;
            }
        }
        _showErrorMessage(msg);
        return false;
    }

    /**
     * Hide any visible confirmation message.
     */
    var _clearConfirmationMessage = function() {
        var anim;
        anim = new YAHOO.util.Anim(_confMsgElt.parentNode, {
            height: { to: 0 }
        }, 0.25);
        anim.animate();
    }

    /**
     * Display the confirmation message.
     */
    var _showConfirmationMessage = function() {
        var height;
        var anim;
        height = _confMsgElt.offsetHeight + 10;
        anim = new YAHOO.util.Anim(_confMsgElt.parentNode, {
            height: { to: height }
        }, 0.25);
        anim.animate();
    }

    /**
     * Hide any visible error message.
     */
    var _clearErrorMessage = function() {
        var anim;
        anim = new YAHOO.util.Anim(_errMsgElt.parentNode, {
            height: { to: 0 }
        }, 0.25);
        anim.animate();
    }

    /**
     * Display the given error message.
     */
    var _showErrorMessage = function(msg) {
        var span;
        var height;
        var anim;
        span = DOM.getElementsByClassName("msg-span", "span", _errMsgElt)[0];
        span.innerHTML = msg;
        height = _errMsgElt.offsetHeight + 10;
        anim = new YAHOO.util.Anim(_errMsgElt.parentNode, {
            height: { to: height }
        }, 0.25);
        anim.animate();
        _enableButtons(true);
    }

    /**
     *
     */
    var _submitForm = function() {
        var f;

        DOM.get('newsletter-subscription-form-name').value =
            DOM.get('newsletter-subscription-form-first-name').value + " " +
            DOM.get('newsletter-subscription-form-last-name').value;

        _panel.hide();

        f = DOM.get('newsletter-subscription-form');
        f.submit();
    };

    /**
     * The 'Public API'
     */
    return {

        /**
         * Initialize the 'Subscribe' overlay.
         */
        init: function() {
            _root = DOM.get('newsletter-subscription-overlay');
            _panel = new YAHOO.widget.Panel("newsletter-subscription-overlay", _config);
            _panel.render();
            _closeButton = new YAHOO.widget.Button('close-newsletter-subscription-form-button');
            _submitButton = new YAHOO.widget.Button('submit-newsletter-subscription-form-button');
            _closeButton.addListener('click', _handleCloseButtonClick);
            _submitButton.addListener('click', _handleSubmitButtonClick);
            _confMsgElt = DOM.getElementsByClassName("conf-msg", "div", _root)[0];
            _errMsgElt = DOM.getElementsByClassName("err-msg", "div", _root)[0];
        },

        /**
         * Show the 'Subscribe' overlay.
         */
        show: function() {
            _clearConfirmationMessage();
            _clearErrorMessage();
            _enableButtons(true);
            _panel.show();
        }
    };
}();
