/*
 * SimpleModal 1.1.1 - jQuery Plugin
 * http://www.ericmmartin.com/projects/simplemodal/
 * http://plugins.jquery.com/project/SimpleModal
 * http://code.google.com/p/simplemodal/
 *
 * Copyright (c) 2007 Eric Martin - http://ericmmartin.com
 *
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * Revision: $Id: jquery.simplemodal.js 93 2008-01-15 16:14:20Z emartin24 $
 *
 */
(
	function($)
	{
		$.modal=function(data,options){
			return $.modal.impl.init(data,options);
		};
		$.modal.close=function(){
			$.modal.impl.close(true);
		};
		$.fn.modal=function(options){
			return $.modal.impl.init(this,options);
		};
		$.modal.defaults={
			overlay:50,
			overlayId:'modalOverlay',
			overlayCss:{},
			containerId:'modalContainer',
			containerCss:{},
			close:true,
			closeTitle:'Close',
			closeClass:'modalClose',
			persist:false,
			onOpen:null,
			onShow:null,
			onClose:null
		};
		$.modal.impl={
			opts:null,
			dialog:{},
			init:function(data,options){
				if(this.dialog.data){
					return false;
				}
				this.opts=$.extend({},$.modal.defaults,options);
				if(typeof data=='object'){
					data=data instanceof jQuery?data:$(data);
					if(data.parent().parent().size()>0){
						this.dialog.parentNode=data.parent();
						if(!this.opts.persist){
							this.dialog.original=data.clone(true);
						}
					}
				}
				else if(typeof data=='string'||typeof data=='number'){
					data=$('<div>').html(data);
				}
				else{
					if(console){
						console.log('SimpleModal Error: Unsupported data type: '+typeof data);
					}
					return false;
				}
				this.dialog.data=data.addClass('modalData');
				data=null;
				this.create();
				this.open();
				if($.isFunction(this.opts.onShow)){
					this.opts.onShow.apply(this,[this.dialog]);
				}
				return this;
			},
			create:function(){
				this.dialog.overlay=$('<div>').attr('id',this.opts.overlayId).addClass('modalOverlay').css($.extend(this.opts.overlayCss,{opacity:this.opts.overlay/100,height:'100%',width:'100%',position:'fixed',left:0,top:0,zIndex:3000})).hide().appendTo('body');
				this.dialog.container=$('<div>').attr('id',this.opts.containerId).addClass('modalContainer').css($.extend(this.opts.containerCss,{position:'fixed',zIndex:3100})).append(this.opts.close?'<a class="modalCloseImg '+this.opts.closeClass+'" title="'+this.opts.closeTitle+'"></a>':'').hide().appendTo('body');
				if($.browser.msie&&($.browser.version<7)){
					this.fixIE();
				}
				this.dialog.container.append(this.dialog.data.hide());
			},
			bindEvents:function(){
				var modal=this;
				$('.'+this.opts.closeClass).click(function(e){
					e.preventDefault();
					modal.close();
				});
			},
			unbindEvents:function(){
				$('.'+this.opts.closeClass).unbind('click');
			},
			fixIE:function(){
				var wHeight=$(document.body).height()+'px';
				var wWidth=$(document.body).width()+'px';
				this.dialog.overlay.css({position:'absolute',height:wHeight,width:wWidth});
				this.dialog.container.css({position:'absolute'});
				this.dialog.iframe=$('<iframe src="javascript:false;">').css($.extend(this.opts.iframeCss,{opacity:0,position:'absolute',height:wHeight,width:wWidth,zIndex:1000,width:'100%',top:0,left:0})).hide().appendTo('body');
			},
			open:function(){
				if(this.dialog.iframe){
					this.dialog.iframe.show();
				}
				if($.isFunction(this.opts.onOpen)){
					this.opts.onOpen.apply(this,[this.dialog]);
				}
				else{
					this.dialog.overlay.show();
					this.dialog.container.show();
					this.dialog.data.show();
				}
				this.bindEvents();
			},
			close:function(external){
				if(!this.dialog.data){
					return false;
				}
				if($.isFunction(this.opts.onClose)&&!external){
					this.opts.onClose.apply(this,[this.dialog]);
				}
				else{
					if(this.dialog.parentNode){
						if(this.opts.persist){
							this.dialog.data.hide().appendTo(this.dialog.parentNode);
						}
						else{
							this.dialog.data.remove();
							this.dialog.original.appendTo(this.dialog.parentNode);
						}
					}
					else{
						this.dialog.data.remove();
					}
					this.dialog.container.remove();
					this.dialog.overlay.remove();
					if(this.dialog.iframe){
						this.dialog.iframe.remove();
					}
					this.dialog={};
				}this.unbindEvents();
			}
		};
	}
)
(jQuery);
