(function($) {
    $.fn.jqm = function(o) {
        var p = {
            overlay: 50,
            overlayClass: 'jqmOverlay',
            closeClass: 'jqmClose',
            trigger: '.jqModal',
            ajax: F,
            ajaxText: '',
            target: F,
            modal: F,
            toTop: F,
            onShow: F,
            onHide: F,
            onLoad: F
        };
        return this.each(function() {
            if (this._jqm)
                return H[this._jqm].c = $.extend({}, H[this._jqm].c, o);
            s++;
            this._jqm = s;
            H[s] = { c: $.extend(p, $.jqm.params, o), a: F, w: $(this).addClass('jqmID' + s), s: s };
            //            alert(p.trigger);
            if (p.trigger)  //Get value of param trigger
                $(this).jqmAddTrigger(p.trigger);

        });
    };

    $.fn.jqmAddClose = function(e) { return hs(this, e, 'jqmHide'); };
    $.fn.jqmAddTrigger = function(e) {
        return hs(this, e, 'jqmShow');
    };
    $.fn.jqmShow = function(t) {
        return this.each(function() {

            $.jqm.open(this._jqm, t);
        });
    };
    $.fn.jqmHide = function(t) { return this.each(function() { $.jqm.close(this._jqm, t) }); };

    $.jqm = {
        hash: {},
        open: function(s, t) {
            //Set black background
            var h = H[s];
            var c = h.c;
            var cc = '.' + c.closeClass;
            var z = (parseInt(h.w.css('z-index')));
            var z = (z > 0) ? z : 3000;
            var o = $('<div></div>').css({ height: '100%', width: '100%', position: 'fixed', left: 0, top: 0, 'z-index': z - 1, opacity: c.overlay / 100 });
			
            if (h.a)
                return F;
            h.t = t;
            h.a = true;
            h.w.css('z-index', z);

            if (c.modal) {
                if (!A[0]) 
                    L('bind');
                A.push(s); 
            }
            else if (c.overlay > 0) h.w.jqmAddClose(o);
            else o = F;

            h.o = (o) ? o.addClass(c.overlayClass).prependTo('body') : F;
            //alert(c.overlayClass);
            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 (ie7) {
                $('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'");
                }
            }

            //End set background

            if (c.ajax) {
                var r = c.target || h.w;
                var u = c.ajax; //Get value of param ajax
                var r = (typeof r == 'string') ? $(r, h.w) : $(r);
                var u = (u.substr(0, 1) == '@') ? $(t).attr(u.substring(1)) : u;
                //                alert(r.html() );
//                r.slideDown(1000);
				//alert(r.css("opacity"));
				//alert($("body").css("width"));
				//alert(document.body.clientHeight);
				//alert(document.body.clientWidth);				
				
                r.html(c.ajaxText).load(u, function() {
                    if (c.onLoad)
                        c.onLoad.call(this, h);
                    if (cc)
                        h.w.jqmAddClose($(cc, h.w));
                    e(h);
                });
                //                alert(r.html() );
                //                r.hide();
//                if(
//                if(document.body.clientHeight<600)
//					r.css("top",'5px');
                /*
                var myHeight = 0;
                if( typeof( window.innerWidth ) == 'number' ) {
                    //Non-IE
                    myHeight = window.innerHeight;
                } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
                    //IE 6+ in 'standards compliant mode'
                    myHeight = document.documentElement.clientHeight;
                } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
                    //IE 4 compatible
                    myHeight = document.body.clientHeight;
                }
                if(myHeight < 450)
                {
                    r.css("top",'0px');
                }
                */
            }
            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 F;
        },
        close: function(s) {
            var h = H[s];
            if (!h.a) return F;
            h.a = F;

//            h.w.slideUp(1000);           
            
            if (A[0]) {
                A.pop();
                if (!A[0]) L('unbind');
            }
            
            if (h.c.toTop && h.o)
                $('#jqmP' + h.w[0]._jqm).after(h.w).remove();
            //            alert(h.c.onHide);
            if (h.c.onHide)
                h.c.onHide(h);
            else {
                h.w.hide();
                if (h.o) h.o.remove();
            }
            return F;
        },
        params: {}
    };
    var s = 0, H = $.jqm.hash, A = [], ie6 = $.browser.msie && ($.browser.version == "6.0"), F = false,ie7 = $.browser.msie && ($.browser.version == "7.0"),
i = $('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({ opacity: 0.5 }),
e = function(h) { 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 (_) { } },
L = 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, t, c) {
    return w.each(function() {
        var s = this._jqm; $(t).each(function() {
            if (!this[c]) {
                this[c] = [];
                $(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 F;
                });
            }
            this[c].push(s);
        });
    });
};
})(jQuery);