/**************
Modal Popup
**************/
/*  Reusable modal popup object using jQuery.

    Example use:
        var modal = new ModalPopup({
            popupSelector: "#modal1", 
            triggerSelector: ".openModel",
            closeSelector:".closeModal",
            dynamic: true,
            urlContent: "test.html"
        });
        
        All the options parameters are used as jQuery selectors. So all CSS3 selectors + jQuery extensions can be used.
        
        popupSelector - element containing the modal popup
        triggerselector - element(s) that will trigger the popup
        closeSelector - element(s) that will cause popup to close    
*/

//Set options for Modal Popup

var ModalPopup = function(options)
{
    var popupSelector = options.popupSelector,
        closeSelector = options.closeSelector,
        triggerSelector = options.triggerSelector,
        opacity = options.opacity || 0.55,
        dynamic = options.dynamic || false,
        urlContent = options.urlContent || "",
        modalHeadline = options.modalHeadline || "",
        fadeSpeed = options.fadeSpeed || "slow",
        smallPopup = popupSelector,
        center = (options.center === undefined) ? true : options.center,
        allSelectBoxes = $("select"),
        popupSelectBoxes = $("select", popupSelector);

    var overlayContent = '<div id="modalBackground">&nbsp;</div>';  //modal background code
    var overlay = '#modalBackground';    //Modal background ID
    var dynamicModalBox = '#modalBox';
    var modalClass = '.modalBox';

    // set up the events
    if(triggerSelector == 'onLoad')
    {
        showModal();
    }
    
    else
    {
        $(triggerSelector).click(showModal);
    }

    //$(window).resize(AdjustOverlay);
    if (center === true)
    {
        $(window).resize(Center);
        $(window).scroll(Center);
    }


    // methods
    function showModal()
    {

        //Create Modal Background
        createModalBackground();

        /* IE6 fix to select zindex bug */
        if (($.browser.msie === true) && ($.browser.version == '6.0'))
        {
            allSelectBoxes.css("visibility", "hidden");
            popupSelectBoxes.css("visibility", "visible");
        }

        $(overlay).fadeIn(fadeSpeed, function()
        { // Fade in modal background and show modal

            if (dynamic)
            {
                loadDynamicModal();
                //Bind closing event
                $(closeSelector).live('click', function(event) { hideModal() });
            }
            else
            {
                
                $(smallPopup).show();
                if (center) { Center(); } // If center option is set, center modal
                
                //Bind closing event
                $(closeSelector).live('click', hideModal);
                
            }
        });

        return false;
    }

    function hideModal()
    {
        /* IE6 fix to select zindex bug */
        if (($.browser.msie === true) && ($.browser.version == '6.0'))
        {
            allSelectBoxes.css("visibility", "visible");
        }

        $(overlay).fadeOut(fadeSpeed);
        if (dynamic)
        {
            closeDynamicModal();
        }
        else
        {
            $(smallPopup).hide();
            $(overlay).remove();
        }
        return false;
    }

    function Center()
    {
        if ($(smallPopup).css('display') == 'block' || $(dynamicModalBox).css('display') == 'block')
        {
            var popups = $(smallPopup + ', ' + dynamicModalBox);
            var windowWidth = $(window).width();
            var windowHeight = $(window).height();
            var scrollLeft = $(window).scrollLeft();
            var scrollTop = $(window).scrollTop();

            var popupWidth = popups.width();
            var popupHeight = popups.height();

            var leftPos = (windowWidth - popupWidth) / 2 + scrollLeft;
            var topPos = (windowHeight - popupHeight) / 2 + scrollTop;

            $(smallPopup + ', ' + dynamicModalBox).css({
                "left": leftPos,
                "top": topPos
            });
        }
    }

    function createModalBackground()
    {
        // If modal background does not exist, build modal
        if (!$('#modalBox').length)
        {
            $('body').append(overlayContent);
        }

        if (typeof document.body.style.maxHeight === "undefined")
        { //if IE 6 calculate height of window
            $("body", "html").css({ height: "100%", width: "100%" });
        }

        $(overlay).css('opacity', opacity); // Set overlay		
    }

    function createModal()
    {
        // if dynamic modal box does not exist, build out
        if (!$('#modalBox').length)
        {
            //Add generic modal box to body
            $('body').append('<div id="modalBox" class="modalBox"><div class="modalTopCap png">&nbsp;</div><div class="modalHeader"><a class="closeModal">Close</a><h1></h1></div><div class="modalContent"><div id="modalAction"></div></div><div class="modalBtmCap png">&nbsp;</div><div class="clear"></div></div>');
        }
    }

    function loadDynamicModal()
    {
        createModal();
        $.ajax({
            type: "POST",
            url: urlContent,
            data: "",
            success: function(msg)
            {
                var contentInsert = $(msg).find('.modalDynamicContent').html();
                $("#modalBox .modalContent").html(contentInsert);
                $("#modalBox .modalHeader h1").html(modalHeadline);
                if (center) { Center(); }
                if ($('#modalBox .modalContent').height() >= 500)
                {
                    $('#modalBox .modalContent').css('overflow-y', 'scroll');
                }
            }
        });


        $(dynamicModalBox).show();
    }

    function closeDynamicModal()
    {
        $(dynamicModalBox).remove();
        $(overlay).remove();
    }

}
