(function($) { //base function to call and setup everything $.fn.modal=function(options){ return this.each(function(){ if(this._modal) return; //if already a modal return if(typeof(options) != "undefined") var params = $.extend({}, $.fn.modal.defaults, options); //if some options are passed in merge them else var params = $.fn.modal.defaults; if(typeof(modal_count) == "undefined") modal_count=0; //set the counter to 0 modal_count++; this._modal=modal_count; //set what modal number this is H[modal_count] = {config:params,target_modal:this}; //add to hash var $(this).modal_add_show(this); //add show & hide triggers }); } $.fn.modal_add_show=function(ele){ return $.modal.show(ele); } //extra function so show & hide can be called $.fn.modal_show=function(){ return this.each(function(){ $.modal.open(this); }); } $.fn.modal_hide=function(){ return this.each(function(){ $.modal.hide(this); }); } //the default config vars $.fn.modal.defaults = {show:false, hide:false, modal_styles:{display:"block", zIndex:1001}, resize:true, hide_on_overlay_click:true }; //the over riden stuff $.modal = { hash:{}, //the hash used to store all the configs & targets show:function(ele){ var pos = ele._modal, h = H[pos]; jQ(h.target_modal).click(function(){ $.modal.open(ele); return false; }); return false; }, hide:function(ele){ var pos = ele._modal, h = H[pos]; if(h.config.hide_on_overlay_click) var idstr = "#modal_overlay, .modal_close"; else var idstr = ".modal_close"; jQ(idstr).click(function(){ jQ("#modal_content").remove(); jQ("#modal_overlay").remove(); if(h.config.hide) h.config.hide(); return false; }); }, open:function(ele){ var pos = ele._modal; var h = H[pos]; $.modal.insert_overlay(); $.modal.insert_content_container(); var content = $.modal.get_content($(h.target_modal)); jQ("#modal_content").html(content); if(h.config.modal_styles) jQ("#modal_content").css(h.config.modal_styles); if(h.config.resize) $.modal.resize_container(); $.modal.for_ie(jQ("#modal_overlay")); if(h.config.show) h.config.show(); $.modal.hide(ele); //add hiding }, resize_container: function(){ var max_width = 0, max_height=0; jQ('#modal_content *').load(function(){ jQ('#modal_content *').each(function(){ var tw = jQ(this).outerWidth(), th = jQ(this).outerHeight(); if(tw > max_width) max_width = tw; max_height += th; }); if(max_width >0 && max_height>0) jQ('#modal_content').css('width', (max_width+jQ('#modal_content .modal_close:first').outerWidth())+'px').css('height', (max_height)+'px').css('margin-left', '-'+(max_width/2)+'px'); }); }, insert_overlay:function(){ if(!jQ('#modal_overlay').length) jQ("body").append('
'); jQ("#modal_overlay").css({height:'100%',width:'100%',position:'fixed',left:0,top:0,'z-index':1000,opacity:50/100}); }, insert_content_container:function(){ if(!jQ('#modal_content').length) jQ("body").append(''); }, get_content:function(trig){ c = "x