/*
 * SimpleModal 1.2.2 - jQuery Plugin
 * http://www.ericmmartin.com/projects/simplemodal/
 * Copyright (c) 2008 Eric Martin
 * Dual licensed under the MIT and GPL licenses
 * Revision: $Id: jquery.simplemodal.js 181 2008-12-16 16:51:44Z emartin24 $
 */
(function($){
	var ie6=$.browser.msie&&parseInt($.browser.version)==6&&!window['XMLHttpRequest'],ieQuirks=$.browser.msie&&!$.boxModel,w=[];
	$.modal=function(data,options){return $.modal.impl.init(data,options);};
	$.modal.close=function(){$.modal.impl.close();};
	$.fn.modal=function(options){return $.modal.impl.init(this,options);};
	$.modal.defaults={
		opacity:50,
		overlayId:'simplemodal-overlay',
		overlayCss:{},
		containerId:'simplemodal-container',
		containerCss:{},
		dataCss:{},
		zIndex:1000,
		close:true,
		closeHTML:'<a class="modalCloseImg" title="Close"></a>',
		closeClass:'simplemodal-close',
		position:null,
		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);
			this.zIndex=this.opts.zIndex;
			this.occb=false;
			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.orig=data.clone(true);}
				}
			} else if(typeof data=='string'||typeof data=='number'){data=$('<div/>').html(data);}
			else{alert('SimpleModal Error: Unsupported data type: '+typeof data);
			return false;
		}
		this.dialog.data=data.addClass('simplemodal-data').css(this.opts.dataCss);
		data=null;this.create();
		this.open();
		if($.isFunction(this.opts.onShow)){this.opts.onShow.apply(this,[this.dialog]);}
		return this;
		},
		create:function(){
			w=this.getDimensions();
			if(ie6){this.dialog.iframe=$('<iframe src="javascript:false;"/>').css($.extend(this.opts.iframeCss,{display:'none',opacity:0,position:'fixed',height:w[0],width:w[1],zIndex:this.opts.zIndex,top:0,left:0})).appendTo('body');}
			this.dialog.overlay=$('<div/>').attr('id',this.opts.overlayId).addClass('simplemodal-overlay').css($.extend(this.opts.overlayCss,{display:'none',opacity:this.opts.opacity/100,height:w[0],width:w[1],position:'fixed',left:0,top:0,zIndex:this.opts.zIndex+1})).appendTo('body');this.dialog.container=$('<div/>').attr('id',this.opts.containerId).addClass('simplemodal-container').css($.extend(this.opts.containerCss,{display:'none',position:'fixed',zIndex:this.opts.zIndex+2})).append(this.opts.close?$(this.opts.closeHTML).addClass(this.opts.closeClass):'').appendTo('body');
			this.setPosition();
			if(ie6||ieQuirks){this.fixIE();}
			this.dialog.container.append(this.dialog.data.hide());},bindEvents:function(){var self=this;$('.'+this.opts.closeClass).bind('click.simplemodal',function(e){e.preventDefault();self.close();});
			$(window).bind('resize.simplemodal',function(){w=self.getDimensions();self.setPosition();if(ie6||ieQuirks){self.fixIE();}else{self.dialog.iframe&&self.dialog.iframe.css({height:w[0],width:w[1]});self.dialog.overlay.css({height:w[0],width:w[1]});}});
		},
		unbindEvents:function(){
			$('.'+this.opts.closeClass).unbind('click.simplemodal');
			$(window).unbind('resize.simplemodal');
		},
		fixIE:function(){
			var p=this.opts.position;
			$.each(
				[this.dialog.iframe||null,this.dialog.overlay,this.dialog.container],
				function(i,el){
					if(el){
						var bch='document.body.clientHeight',bcw='document.body.clientWidth',bsh='document.body.scrollHeight',bsl='document.body.scrollLeft',bst='document.body.scrollTop',bsw='document.body.scrollWidth',ch='document.documentElement.clientHeight',cw='document.documentElement.clientWidth',sl='document.documentElement.scrollLeft',st='document.documentElement.scrollTop',s=el[0].style;
						s.position='absolute';
						//if(i<2){
							//s.removeExpression('height');
							//s.removeExpression('width');
							//s.setExpression('height',''+bsh+' > '+bch+' ? '+bsh+' : '+bch+' + "px"');
							//s.setExpression('width',''+bsw+' > '+bcw+' ? '+bsw+' : '+bcw+' + "px"');
						//} else {
							var te,le;
							if(p&&p.constructor==Array){
								if(p[0]){
									var top=typeof p[0]=='number'?p[0].toString():p[0].replace(/px/,'');
									te=top.indexOf('%')==-1?top+' + (t = '+st+' ? '+st+' : '+bst+') + "px"':parseInt(top.replace(/%/,''))+' * (('+ch+' || '+bch+') / 100) + (t = '+st+' ? '+st+' : '+bst+') + "px"';
								}
								if(p[1]){
									var left=typeof p[1]=='number'?p[1].toString():p[1].replace(/px/,'');le=left.indexOf('%')==-1?left+' + (t = '+sl+' ? '+sl+' : '+bsl+') + "px"':parseInt(left.replace(/%/,''))+' * (('+cw+' || '+bcw+') / 100) + (t = '+sl+' ? '+sl+' : '+bsl+') + "px"';
								}
							} else {
								te='('+ch+' || '+bch+') / 2 - (this.offsetHeight / 2) + (t = '+st+' ? '+st+' : '+bst+') + "px"';le='('+cw+' || '+bcw+') / 2 - (this.offsetWidth / 2) + (t = '+sl+' ? '+sl+' : '+bsl+') + "px"';
							}
							//s.removeExpression('top');
							//s.removeExpression('left');
							//s.setExpression('top',te);
							//s.setExpression('left',le);
						//}
					}
				});
			},
			getDimensions:function(){
				var el=$(window);
				var h=$.browser.opera&&$.browser.version>'9.5'&&$.fn.jquery<='1.2.6'?document.documentElement['clientHeight']:el.height();return[h,el.width()];
			},
			setPosition:function(){
				var top,left,hCenter=(w[0]/2)-((this.dialog.container.height()||this.dialog.data.height())/2),vCenter=(w[1]/2)-((this.dialog.container.width()||this.dialog.data.width())/2);
				if(this.opts.position&&this.opts.position.constructor==Array){
					top=this.opts.position[0]||hCenter;
					left=this.opts.position[1]||vCenter;
				}else{top=hCenter;left=vCenter;}
				this.dialog.container.css({left:left,top:top});
			},
			open:function(){
				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(){
				if(!this.dialog.data){return false;}
				if($.isFunction(this.opts.onClose)&&!this.occb){
					this.occb=true;
					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.orig.appendTo(this.dialog.parentNode);
						}
					}else{this.dialog.data.remove();}
					this.dialog.container.remove();
					this.dialog.overlay.remove();
					this.dialog.iframe&&this.dialog.iframe.remove();
					this.dialog={};
				}
				this.unbindEvents();
			}
		};
	})(jQuery);
