/*
 * jqModal - Minimalist Modaling with jQuery
 *
 * Copyright (c) 2007 Brice Burgess <bhb@iceburg.net>, http://www.iceburg.net
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * $Version: 2007.08.17 +r11
 * 
 */
 if(navigator.appVersion.indexOf('MSIE 8') != -1) ie8=true; else ie8=false;
 (function($) {
    $.fn.jqm = function(o) {
        var _o = {
            zIndex: 2000,
            overlay: 50,
            overlayClass: 'jqmOverlay',
            closeClass: 'jqmClose',
            trigger: '.jqModal',
            ajax: false,
            target: false,
            modal: false,
            toTop: false,
            onShow: false,
            onHide: false,
            onLoad: false

        };
        return this.each(function() {
            if (this._jqm) return;
            s++;
            this._jqm = s;
            H[s] = {
                c: $.extend(_o, o),
                a: false,
                w: $(this).addClass('jqmID' + s),
                s: s
            };
            if (_o.trigger) $(this).jqmAddTrigger(_o.trigger);

        });
    };

    $.fn.jqmAddClose = function(e) {
        hs(this, e, 'jqmHide');
        return this;
    };
    $.fn.jqmAddTrigger = function(e) {
        hs(this, e, 'jqmShow');
        return this;
    };
    $.fn.jqmShow = function(t) {
        return this.each(function() {
            if (!H[this._jqm].a) $.jqm.open(this._jqm, t)
        });
    };
    $.fn.jqmHide = function(t) {
        return this.each(function() {
            if (H[this._jqm].a) $.jqm.close(this._jqm, t)
        });
    };

    $.jqm = {
        hash: {},
        open: function(s, t) {
            var h = H[s],
            c = h.c,
            cc = '.' + c.closeClass,
            z = (/^\d+$/.test(h.w.css('z-index'))) ? h.w.css('z-index') : c.zIndex,
            b = ___getPageSize(),
            o = $('<div></div>').css({
                height: b[1]+'px',
                width: b[0]+'px',
                position: 'absolute',
                left: 0,
                top: 0,
                'z-index': z - 1,
                opacity: c.overlay / 100
            });
            h.t = t;
            h.a = true;
            h.w.css('z-index', z);
            if (c.modal) {
                if (!A[0]) F('bind');
                A.push(s);
                o.css('cursor', 'default');
            }
            else if (c.overlay > 0) h.w.jqmAddClose(o);
            else o = false;

            h.o = (o) ? o.addClass(c.overlayClass).prependTo('body') : false;
            if(ie8){
             
            }else if (ie6) {
                $('html,body').css({
                    height: '100%',
                    width: '100%'
                });
                if (o) {
                    o = o.css({
                        position: 'absolute'
                    })[0];
                    for (var y in {
                        Top: 1,
                        Left: 1
                    }) o.style.setExpression(y.toLowerCase(), "(_=(document.documentElement.scroll" + y + " || document.body.scroll" + y + "))+'px'");
                }
            }

            if (c.ajax) {
                var r = c.target || h.w,
                u = c.ajax,
                r = (typeof r == 'string') ? $(r, h.w) : $(r),
                u = (u.substr(0, 1) == '@') ? $(t).attr(u.substring(1)) : u;
                r.load(u, 
                function(data) {
                    if (c.onLoad) c.onLoad.call(this, h);
                    if (cc) h.w.jqmAddClose($(cc, h.w));
                    e(h);
                });
            }
            else if (cc) h.w.jqmAddClose($(cc, h.w));

            if (c.toTop && h.o) h.w.before('<span id="jqmP' + h.w[0]._jqm + '"></span>').insertAfter(h.o);
            (c.onShow) ? c.onShow(h) : h.w.show();
            e(h);
            return false;

        },
        close: function(s) {
            var h = H[s];
            h.a = false;
            if (A[0]) {
                A.pop();
                if (!A[0]) F('unbind');
            }
            if (h.c.toTop && h.o) $('#jqmP' + h.w[0]._jqm).after(h.w).remove();
            if (h.c.onHide) h.c.onHide(h);
            else {
                h.w.hide();
                if (h.o) h.o.remove();
            }
            return false;

        }
    };
    var s = 0,
    H = $.jqm.hash,
    A = [],
    ie6 = $.browser.msie && ($.browser.version == "6.0"),
    i = $('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({
        opacity: 0
    }),
    e = function(h) {
         if(ie8){
             
        }else if (ie6){ 
        if (h.o) h.o.html('<p style="width:100%;height:100%"/>').prepend(i);
        else if (!$('iframe.jqm', h.w)[0]) h.w.prepend(i);
        f(h);
        }
    },
    f = function(h) {
        try {
            $(':input:visible', h.w)[0].focus();
        } catch(e) {}
    },
    F = function(t) {
        $()[t]("keypress", m)[t]("keydown", m)[t]("mousedown", m);
    },
    m = function(e) {
        var h = H[A[A.length - 1]],
        r = (!$(e.target).parents('.jqmID' + h.s)[0]);
        if (r) f(h);
        return ! r;
    },
    hs = function(w, e, y) {
        var s = [];
        w.each(function() {
            s.push(this._jqm)
        });
        $(e).each(function() {
            if (this[y]) $.extend(this[y], s);
            else {
                this[y] = s;
                $(this).click(function() {
                    for (var i in {
                        jqmShow: 1,
                        jqmHide: 1
                    }) for (var s in this[i]) if (H[this[i][s]]) H[this[i][s]].w[i](this);
                    return false;
                });
            }
        });
    };
	/**
	 / THIRD FUNCTION
	 * getPageSize() by quirksmode.com
	 *
	 * @return Array Return an array with page width, height and window width, height
	 */
	function ___getPageSize() {
		var xScroll, yScroll;
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = window.innerWidth + window.scrollMaxX;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		var windowWidth, windowHeight;
		if (self.innerHeight) {	// all except Explorer
			if(document.documentElement.clientWidth){
				windowWidth = document.documentElement.clientWidth; 
			} else {
				windowWidth = self.innerWidth;
			}
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){	
			pageWidth = xScroll;		
		} else {
			pageWidth = windowWidth;
		}
		arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
		return arrayPageSize;
	};
})(jQuery);