(function(d){
	var k=d.browser.msie&&parseInt(d.browser.version)===6&&typeof window.XMLHttpRequest!=="object",
	m=d.browser.msie&&parseInt(d.browser.version)===7,
	l=null,
	f=[];
	d.modal=function(a,b){
		return d.modal.impl.init(a,b)};
	d.modal.close=function(){
		d.modal.impl.close()};
	d.modal.focus=function(a){
		d.modal.impl.focus(a)};
	d.modal.setContainerDimensions=function(){
		d.modal.impl.setContainerDimensions()};
	d.modal.setPosition=function(){
		d.modal.impl.setPosition()};
	d.modal.update=function(a,b){
		d.modal.impl.update(a,b)};
	d.fn.modal=function(a){
		return d.modal.impl.init(this,a)};
	d.modal.defaults={
		appendTo:"body",
		focus:true,
		opacity:.5,
		overlayId:"popupOverlay",
		overlayCss:{},
		containerId:"popupBox",
		containerCss:{},
		dataId:"simplemodal-data",
		dataCss:{},
		minHeight:null,
		minWidth:null,
		maxHeight:null,
		maxWidth:null,
		autoResize:false,
		autoPosition:true,
		zIndex:1E3,
		close:true,
		closeHTML:'<a class="modalCloseImg" title="Close"></a>',
		closeClass:"simplemodal-close",
		escClose:true,
		overlayClose:false,
		position:null,
		persist:false,
		modal:true,
		onOpen:null,
		onShow:null,
		onClose:null};
	d.modal.impl={
		d:{},
		init:function(a,b){
			var c=this;
			if(c.d.data)return false;
			l=d.browser.msie&&!d.boxModel;
			c.o=d.extend({},d.modal.defaults,b);
			c.zIndex=c.o.zIndex;
			c.occb=false;
			if(typeof a==="object"){
				a=a instanceof jQuery?a:d(a);
				c.d.placeholder=false;
				if(a.parent().parent().size()>0){
					a.before(d("<span></span>").attr("id","simplemodal-placeholder").css({display:"none"}));
					c.d.placeholder=true;
					c.display=a.css("display");
					if(!c.o.persist)c.d.orig=a.clone(true)
				}
			}else if(typeof a==="string"||typeof a==="number")a=d("<div></div>").html(a);
			else{
				alert("SimpleModal Error: Unsupported data type: "+typeof a);
				return c}
			c.create(a);
			c.open();
			d.isFunction(c.o.onShow)&&c.o.onShow.apply(c,[c.d]);
			return c},
		create:function(a){
			var b=this;
			f=b.getDimensions();
			if(b.o.modal&&k)b.d.iframe=d('<iframe src="javascript:false;"></iframe>').css(d.extend(b.o.iframeCss,{
				display:"none",
				opacity:0,
				position:"fixed",
				height:f[0],
				width:f[1],
				zIndex:b.o.zIndex,
				top:0,
				left:0})).appendTo(b.o.appendTo);
			b.d.overlay=d("<div></div>").attr("id",b.o.overlayId).addClass("popupOverlay").css(d.extend(b.o.overlayCss,{
				display:"none",
				//opacity:b.o.opacity,
				height:b.o.modal?f[0]:0,
				width:b.o.modal?f[1]:0,
				position:"fixed",
				left:0,
				top:0,
				zIndex:b.o.zIndex+1})).appendTo(b.o.appendTo);
			b.d.container=d("<div></div>").attr("id",b.o.containerId).addClass("popupBox").css(d.extend(b.o.containerCss,{
				display:"none",
				position:"fixed",
				zIndex:b.o.zIndex+2})).append(b.o.close&&b.o.closeHTML?d(b.o.closeHTML).addClass(b.o.closeClass):"").appendTo(b.o.appendTo);
			b.d.wrap=d("<div></div>").attr("tabIndex",-1).addClass("simplemodal-wrap").css({
				height:"100%",
				outline:0,
				width:"100%"}).appendTo(b.d.container);
			b.d.data=a.attr("id",a.attr("id")||b.o.dataId).addClass("simplemodal-data").css(d.extend(b.o.dataCss,{
				display:"none"})).appendTo("body");
			b.setContainerDimensions();
			b.d.data.appendTo(b.d.wrap);
			if(k||l)b.fixIE()},
		bindEvents:function(){
			var a=this;
			d("."+a.o.closeClass).bind("click.simplemodal",function(b){b.preventDefault();a.close()});
			a.o.modal&&a.o.close&&a.o.overlayClose&&a.d.overlay.bind("click.simplemodal",function(b){b.preventDefault();a.close()});
			d(document).bind("keydown.simplemodal",function(b){
				if(a.o.modal&&b.keyCode===9)a.watchTab(b);
				else if(a.o.close&&a.o.escClose&&b.keyCode===27){b.preventDefault();a.close()}});
			d(window).bind("resize.simplemodal",function(){
				f=a.getDimensions();
				a.o.autoResize?a.setContainerDimensions():a.o.autoPosition&&a.setPosition();
				if(k||l)a.fixIE();
				else if(a.o.modal){a.d.iframe&&a.d.iframe.css({height:f[0],width:f[1]});a.d.overlay.css({height:f[0],width:f[1]})}})},
		unbindEvents:function(){
			d("."+this.o.closeClass).unbind("click.simplemodal");
			d(document).unbind("keydown.simplemodal");
			d(window).unbind("resize.simplemodal");
			this.d.overlay.unbind("click.simplemodal")},
		fixIE:function(){
			var a=this,b=a.o.position;
			d.each([a.d.iframe||null,!a.o.modal?null:a.d.overlay,a.d.container],function(c,h){
				if(h){var g=h[0].style;
					g.position="absolute";
					if(c<2){
						g.removeExpression("height");
						g.removeExpression("width");
						g.setExpression("height",'document.body.scrollHeight > document.body.clientHeight ? document.body.scrollHeight : document.body.clientHeight + "px"');
						g.setExpression("width",'document.body.scrollWidth > document.body.clientWidth ? document.body.scrollWidth : document.body.clientWidth + "px"')
					}else{
						var e;
						if(b&&b.constructor===Array){
							c=b[0]?typeof b[0]==="number"?b[0].toString():b[0].replace(/px/,""):h.css("top").replace(/px/,"");
							c=c.indexOf("%")===-1?c+' + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"':parseInt(c.replace(/%/,""))+' * ((document.documentElement.clientHeight || document.body.clientHeight) / 100) + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"';
							if(b[1]){
								e=typeof b[1]==="number"?b[1].toString():b[1].replace(/px/,"");
								e=e.indexOf("%")===-1?e+' + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"':parseInt(e.replace(/%/,""))+' * ((document.documentElement.clientWidth || document.body.clientWidth) / 100) + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"'}
						}else{
							c='(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"';
							e='(document.documentElement.clientWidth || document.body.clientWidth) / 2 - (this.offsetWidth / 2) + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"'}
						g.removeExpression("top");
						g.removeExpression("left");
						g.setExpression("top",c);
						g.setExpression("left",e)}}})},
		focus:function(a){
			var b=this;
			a=a&&d.inArray(a,["first","last"])!==-1?a:"first";
			var c=d(":input:enabled:visible:"+a,b.d.wrap);
			setTimeout(function(){c.length>0?c.focus():b.d.wrap.focus()},10)},
		getDimensions:function(){
			var a=d(window);
			return[d.browser.opera&&d.browser.version>"9.5"&&d.fn.jquery<"1.3"||d.browser.opera&&d.browser.version<"9.5"&&d.fn.jquery>"1.2.6"?a[0].innerHeight:a.height(),a.width()]},
		getVal:function(a,b){
			return a?typeof a==="number"?a:a==="auto"?0:a.indexOf("%")>0?parseInt(a.replace(/%/,""))/100*(b==="h"?f[0]:f[1]):parseInt(a.replace(/px/,"")):null},
		update:function(a,b){
			var c=this;
			if(!c.d.data)return false;
			c.d.origHeight=c.getVal(a,"h");
			c.d.origWidth=c.getVal(b,"w");
			c.d.data.hide();
			a&&c.d.container.css("height",a);
			b&&c.d.container.css("width",b);
			c.setContainerDimensions();
			c.d.data.show();
			c.o.focus&&c.focus();
			c.unbindEvents();
			c.bindEvents()},
		setContainerDimensions:function(){
			var a=this,b=k||m,c=a.d.origHeight?a.d.origHeight:d.browser.opera?a.d.container.height():a.getVal(b?a.d.container[0].currentStyle.height:a.d.container.css("height"),"h");
			b=a.d.origWidth?a.d.origWidth:d.browser.opera?a.d.container.width():a.getVal(b?a.d.container[0].currentStyle.width:a.d.container.css("width"),"w");
			var h=a.d.data.outerHeight(true),g=a.d.data.outerWidth(true);
			a.d.origHeight=a.d.origHeight||c;
			a.d.origWidth=a.d.origWidth||b;
			var e=a.o.maxHeight?a.getVal(a.o.maxHeight,"h"):null,i=a.o.maxWidth?a.getVal(a.o.maxWidth,"w"):null;
			e=e&&e<f[0]?e:f[0];i=i&&i<f[1]?i:f[1];
			var j=a.o.minHeight?a.getVal(a.o.minHeight,"h"):"auto";
			c=c?a.o.autoResize&&c>e?e:c<j?j:c:h?h>e?e:a.o.minHeight&&j!=="auto"&&h<j?j:h:j;
			e=a.o.minWidth?a.getVal(a.o.minWidth,"w"):"auto";
			b=b?a.o.autoResize&&b>i?i:b<e?e:b:g?g>i?i:a.o.minWidth&&e!=="auto"&&g<e?e:g:e;
			a.d.container.css({height:c,width:b});
			a.d.wrap.css({overflow:h>c||g>b?"auto":"visible"});
			a.o.autoPosition&&a.setPosition()},
		setPosition:function(){
			var a=this,b,c;
			b=f[0]/2-a.d.container.outerHeight(true)/2;
			c=f[1]/2-a.d.container.outerWidth(true)/2;
			if(a.o.position&&Object.prototype.toString.call(a.o.position)==="[object Array]"){
				b=a.o.position[0]||b;
				c=a.o.position[1]||c
			}else{
				b=b;
				c=c
			}
			a.d.container.css({left:c,top:b})},
		watchTab:function(a){
			var b=this;
			if(d(a.target).parents(".popupBox").length>0){
				b.inputs=d(":input:enabled:visible:first, :input:enabled:visible:last",b.d.data[0]);
				if(!a.shiftKey&&a.target===b.inputs[b.inputs.length-1]||a.shiftKey&&a.target===b.inputs[0]||b.inputs.length===0){
					a.preventDefault();b.focus(a.shiftKey?"last":"first")}
			}else{
				a.preventDefault();
				b.focus()}},
		open:function(){
			var a=this;
			a.d.iframe&&a.d.iframe.show();
			if(d.isFunction(a.o.onOpen))a.o.onOpen.apply(a,[a.d]);
			else{a.d.overlay.show();a.d.container.show();a.d.data.show()}a.o.focus&&a.focus();
			a.bindEvents()},
		close:function(){
			var a=this;
			if(!a.d.data)return false;
			a.unbindEvents();
			if(d.isFunction(a.o.onClose)&&!a.occb){
				a.occb=true;
				a.o.onClose.apply(a,[a.d])
			}else{
				if(a.d.placeholder){
					var b=d("#simplemodal-placeholder");
					if(a.o.persist)b.replaceWith(a.d.data.removeClass("simplemodal-data").css("display",a.display));
					else{a.d.data.hide().remove();b.replaceWith(a.d.orig)}
				}
				else a.d.data.hide().remove();
				a.d.container.hide().remove();
				a.d.overlay.hide();
				a.d.iframe&&a.d.iframe.hide().remove();
				setTimeout(function(){a.d.overlay.remove();a.d={}},10)
			}
		}
	}
})(jQuery);

