/*
 * 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&&(( /MSIE 6\.0/i.test(window.navigator.userAgent)     && !/MSIE 7\.0/i.test(window.navigator.userAgent)))){
		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);
