/*
    TwoGreySuits v1.0 - Main JavaScript Controller for Two Grey Suits
      - Copyright (c) 2009 Bottomline HR, Inc. All rights reserved.
      - Script Author
            - Robert J. Secord, B.Sc. <Robert [dot] Secord [at] edgeip [dot] com>
      - Dependancies:
            - Mootools v1.2 or later.  <www.mootools.net>
      - Tested Browsers:
            - Windows: IE 6, IE 7, Firefox 2+, Opera 9+, Netscape 8+, Google Chrome 0.4
*/
var TwoGreySuits = new Class(
{
    Implements: [Events, Options],

    // -------------------------------------------------------------------------------------------------------------
    // Member Variables
    options:
    {
        // Required Settings:
        BasePath:      '',
        GraphicsPath:  '',
        PseudoHoverOn: ['iButton'],

        // Optional Events:
        onPageLoad:  $empty,
        onPageReady: $empty,

        // Optional Developer Use:
        DebugMode: false
    },

    // -------------------------------------------------------------------------------------------------------------
    // Class Constructor (options = JSON Object)
    initialize: function( options )
    {
        this.setOptions( options );

        // Check for Required Settings for Object Instantiation
        if( this.options.GraphicsPath.length < 1 ) return this.ErrorAlert('Object Construction Failed - Invalid GraphicsPath Supplied!');

        // Attach Window Events
        window.addEvents(
        {
            'load':     this.OnLoad.bind(this),
            'domready': this.OnDomReady.bind(this)
        });
    },

    // -------------------------------------------------------------------------------------------------------------
    // Internal Routine: DOM Ready Event (before OnLoad)
    OnDomReady: function()
    {
        this.PseudoHover();
        this.UpdateDisplayToggle();

        // Fire Page Ready Event
        this.fireEvent('pageReady', this, 0);
    },

    // -------------------------------------------------------------------------------------------------------------
    // Internal Routine: Page Loaded Event
    OnLoad: function()
    {

        // Fire Page Ready Event
        this.fireEvent('pageLoad', this, 0);
    },

    // -------------------------------------------------------------------------------------------------------------
    // External Routine: Open a Popup Window
    PopupWin: function( szURL, oArgs )
    {
        var oOptions = $extend(
        {
            Name:     '',
            Top:      100,    Left:     100,
            Width:    800,    Height:   600,
            Location: 'yes',  Menubar:  'yes',
            Status:   'yes',  Toolbar:  'yes',
            Scroll:   'auto', Resize:   'yes'
        }, oArgs );

        var szOptions = 'top='+oOptions.Top+',left='+oOptions.Left+',width='+oOptions.Width+',height='+oOptions.Height+',location='+oOptions.Location+',menubar='+oOptions.Menubar+',status='+oOptions.Status+',toolbar='+oOptions.Toolbar+',scrollbars='+oOptions.Scroll+',resizable='+oOptions.Resize;
        window.open( szURL, oOptions.Name, szOptions );
    },

    // -------------------------------------------------------------------------------------------------------------
    // External Routine: Test a Regular Expression on a Value
    RegexTest: function( szValue, szPattern, szFlags )
    {
        if( !szFlags ) szFlags = '';
        var oRegex = new RegExp(szPattern, szFlags);
        return oRegex.test(szValue);
    },

    // -------------------------------------------------------------------------------------------------------------
    // Internal Routine: Fix INPUT Hover for IE
    PseudoHover: function()
    {
        if( !Browser.Engine.trident4 ) return;
        if( !this.options.PseudoHoverOn || !this.options.PseudoHoverOn.length ) return;

        this.options.PseudoHoverOn.each(function( szElementClass )
        {
            //console.log(szElementClass);
            $$('.' + szElementClass).each(function( oElement )
            {
                oElement.addEvent('mouseenter', function(){ new Element(this).addClass(szElementClass + '-Hover'); } );
                oElement.addEvent('mouseleave', function(){ new Element(this).removeClass(szElementClass + '-Hover'); } );
            });
        });
    },

    // -------------------------------------------------------------------------------------------------------------
    // Internal Routine: Updates Display Toggle for Hidden Elements
    UpdateDisplayToggle: function()
    {
        $$('.MinusLink, .PlusLink').each(function( oLink )
        {
            if( oLink.hasClass('MinusLink') )
                this.ToggleDisplay( oLink.get('id').replace('ToggleLink', '').toInt() );
            else
                oLink.removeClass('PlusLink').addClass('MinusLink');
        }, this);
    },

    // -------------------------------------------------------------------------------------------------------------
    // Internal Routine: Display Toggle for Hidden Elements
    ToggleDisplay: function( iLinkID )
    {
        var oBlock = $('ToggleBlock' + iLinkID), oLink = $('ToggleLink' + iLinkID);
        if( !oBlock || !oLink ) return;

        if( oLink.hasClass('MinusLink') )
        {
            oBlock.setStyle('display', 'none');
            oLink.removeClass('MinusLink').addClass('PlusLink');
        }
        else
        {
            oBlock.setStyle('display', 'block');
            oLink.removeClass('PlusLink').addClass('MinusLink');
        }
    },

    // -------------------------------------------------------------------------------------------------------------
    // Internal Routine: Debug-Mode Error Alerts
    ErrorAlert: function( szErrorMsg )
    {
        // Debug Alert Message
        if( this.options.DebugMode )
            alert('[' + this.ClassName + ' ' + this.ClassVersion + '] -- Developer Error --\n\n' + szErrorMsg);
        return false;
    },

    // -------------------------------------------------------------------------------------------------------------
    // Class Name, Version, Author
    ClassName:    'TwoGreySuits',
    ClassVersion: '1.0',
    ClassAuthor:  'Robert J. Secord, B.Sc.'
});