/*
 * SimpleModal 1.3.5 - jQuery Plugin
 * http://www.ericmmartin.com/projects/simplemodal/
 * Copyright (c) 2010 Eric Martin (http://twitter.com/EricMMartin)
 * Dual licensed under the MIT and GPL licenses
 * Revision: $Id: jquery.simplemodal.js 245 2010-03-25 20:41:15Z emartin24 $
 */
;
(function($){
	var ie6=$.browser.msie&&parseInt($.browser.version)==6&&typeof window['XMLHttpRequest']!="object",ieQuirks=null,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={
		appendTo:'body',
		focus:true,
		opacity:50,
		overlayId:'simplemodal-overlay',
		overlayCss:{},
		containerId:'simplemodal-container',
		containerCss:{},
		dataId:'simplemodal-data',
		dataCss:{},
		minHeight:null,
		minWidth:null,
		maxHeight:null,
		maxWidth:null,
		autoResize:false,
		autoPosition:true,
		zIndex:1000,
		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
	};

	$.modal.impl={
		o:null,
		d:{},
		init:function(data,options){
			var s=this;
			if(s.d.data){
				return false;
			}
			ieQuirks=$.browser.msie&&!$.boxModel;
			s.o=$.extend({},$.modal.defaults,options);
			s.zIndex=s.o.zIndex;
			s.occb=false;
			if(typeof data=='object'){
				data=data instanceof jQuery?data:$(data);
				s.d.placeholder=false;
				if(data.parent().parent().size()>0){
					data.before($('<span></span>').attr('id','simplemodal-placeholder').css({
						display:'none'
					}));
					s.d.placeholder=true;
					s.display=data.css('display');
					if(!s.o.persist){
						s.d.orig=data.clone(true);
					}
				}
			}else if(typeof data=='string'||typeof data=='number'){
		data=$('<div></div>').html(data);
	}else{
		alert('SimpleModal Error: Unsupported data type: '+typeof data);
		return s;
	}
	s.create(data);
	data=null;
	s.open();
	if($.isFunction(s.o.onShow)){
		s.o.onShow.apply(s,[s.d]);
	}
	return s;
},
create:function(data){
	var s=this;
	w=s.getDimensions();
	if(s.o.modal&&ie6){
		s.d.iframe=$('<iframe src="javascript:false;"></iframe>').css($.extend(s.o.iframeCss,{
			display:'none',
			opacity:0,
			position:'fixed',
			height:w[0],
			width:w[1],
			zIndex:s.o.zIndex,
			top:0,
			left:0
		})).appendTo(s.o.appendTo);
	}
	s.d.overlay=$('<div></div>').attr('id',s.o.overlayId).addClass('simplemodal-overlay').css($.extend(s.o.overlayCss,{
		display:'none',
		opacity:s.o.opacity/100,
		height:s.o.modal?w[0]:0,
		width:s.o.modal?w[1]:0,
		position:'fixed',
		left:0,
		top:0,
		zIndex:s.o.zIndex+1
		})).appendTo(s.o.appendTo);
	s.d.container=$('<div></div>').attr('id',s.o.containerId).addClass('simplemodal-container').css($.extend(s.o.containerCss,{
		display:'none',
		position:'fixed',
		zIndex:s.o.zIndex+2
		})).append(s.o.close&&s.o.closeHTML?$(s.o.closeHTML).addClass(s.o.closeClass):'').appendTo(s.o.appendTo);
	s.d.wrap=$('<div></div>').attr('tabIndex',-1).addClass('simplemodal-wrap').css({
		height:'100%',
		outline:0,
		width:'100%'
	}).appendTo(s.d.container);
	s.d.data=data.attr('id',data.attr('id')||s.o.dataId).addClass('simplemodal-data').css($.extend(s.o.dataCss,{
		display:'none'
	})).appendTo('body');
	data=null;
	s.setContainerDimensions();
	s.d.data.appendTo(s.d.wrap);
	if(ie6||ieQuirks){
		s.fixIE();
	}
},
bindEvents:function(){
	var s=this;
	$('.'+s.o.closeClass).bind('click.simplemodal',function(e){
		e.preventDefault();
		s.close();
	});
	if(s.o.modal&&s.o.close&&s.o.overlayClose){
		s.d.overlay.bind('click.simplemodal',function(e){
			e.preventDefault();
			s.close();
		});
	}
	$(document).bind('keydown.simplemodal',function(e){
		if(s.o.modal&&s.o.focus&&e.keyCode==9){
			s.watchTab(e);
		}else if((s.o.close&&s.o.escClose)&&e.keyCode==27){
			e.preventDefault();
			s.close();
		}
	});
$(window).bind('resize.simplemodal',function(){
	w=s.getDimensions();
	s.setContainerDimensions(true);
	if(ie6||ieQuirks){
		s.fixIE();
	}else if(s.o.modal){
		s.d.iframe&&s.d.iframe.css({
			height:w[0],
			width:w[1]
			});
		s.d.overlay.css({
			height:w[0],
			width:w[1]
			});
	}
});
},
unbindEvents:function(){
	$('.'+this.o.closeClass).unbind('click.simplemodal');
	$(document).unbind('keydown.simplemodal');
	$(window).unbind('resize.simplemodal');
	this.d.overlay.unbind('click.simplemodal');
},
fixIE:function(){
	var s=this,p=s.o.position;
	$.each([s.d.iframe||null,!s.o.modal?null:s.d.overlay,s.d.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){
					var top=p[0]?typeof p[0]=='number'?p[0].toString():p[0].replace(/px/,''):el.css('top').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);
		}
	}
	});
},
focus:function(pos){
	var s=this,p=pos||'first';
	var input=$(':input:enabled:visible:'+p,s.d.wrap);
	input.length>0?input.focus():s.d.wrap.focus();
},
getDimensions:function(){
	var el=$(window);
	var h=$.browser.opera&&$.browser.version>'9.5'&&$.fn.jquery<='1.2.6'?document.documentElement['clientHeight']:$.browser.opera&&$.browser.version<'9.5'&&$.fn.jquery>'1.2.6'?window.innerHeight:el.height();
	return[h,el.width()];
},
getVal:function(v){
	return v=='auto'?0:v.indexOf('%')>0?v:parseInt(v.replace(/px/,''));
},
setContainerDimensions:function(resize){
	var s=this;
	if(!resize||(resize&&s.o.autoResize)){
		var ch=$.browser.opera?s.d.container.height():s.getVal(s.d.container.css('height')),cw=$.browser.opera?s.d.container.width():s.getVal(s.d.container.css('width')),dh=s.d.data.outerHeight(true),dw=s.d.data.outerWidth(true);
		var mh=s.o.maxHeight&&s.o.maxHeight<w[0]?s.o.maxHeight:w[0],mw=s.o.maxWidth&&s.o.maxWidth<w[1]?s.o.maxWidth:w[1];
		if(!ch){
			if(!dh){
				ch=s.o.minHeight;
			}else{
				if(dh>mh){
					ch=mh;
				}else if(dh<s.o.minHeight){
					ch=s.o.minHeight;
				}else{
					ch=dh;
				}
			}
		}else{
	ch=ch>mh?mh:ch;
}
if(!cw){
	if(!dw){
		cw=s.o.minWidth;
	}else{
		if(dw>mw){
			cw=mw;
		}else if(dw<s.o.minWidth){
			cw=s.o.minWidth;
		}else{
			cw=dw;
		}
	}
}else{
	cw=cw>mw?mw:cw;
}
s.d.container.css({
	height:ch,
	width:cw
});
if(dh>ch||dw>cw){
	s.d.wrap.css({
		overflow:'hidden'
	});
}
}
if(s.o.autoPosition){
	s.setPosition();
}
},
setPosition:function(){
	var s=this,top,left,hc=(w[0]/2)-(s.d.container.outerHeight(true)/2),vc=(w[1]/2)-(s.d.container.outerWidth(true)/2);
	if(s.o.position&&Object.prototype.toString.call(s.o.position)==="[object Array]"){
		top=s.o.position[0]||hc;
		left=s.o.position[1]||vc;
	}else{
		top=hc;
		left=vc;
	}
	s.d.container.css({
		left:left,
		top:top
	});
},
watchTab:function(e){
	var s=this;
	if($(e.target).parents('.simplemodal-container').length>0){
		s.inputs=$(':input:enabled:visible:first, :input:enabled:visible:last',s.d.data[0]);
		if((!e.shiftKey&&e.target==s.inputs[s.inputs.length-1])||(e.shiftKey&&e.target==s.inputs[0])||s.inputs.length==0){
			e.preventDefault();
			var pos=e.shiftKey?'last':'first';
			setTimeout(function(){
				s.focus(pos);
			},10);
		}
	}else{
	e.preventDefault();
	setTimeout(function(){
		s.focus();
	},10);
}
},
open:function(){
	var s=this;
	s.d.iframe&&s.d.iframe.show();
	if($.isFunction(s.o.onOpen)){
		s.o.onOpen.apply(s,[s.d]);
	}else{
		s.d.overlay.show();
		s.d.container.show();
		s.d.data.show();
	}
	s.focus();
	s.bindEvents();
},
close:function(){
	var s=this;
	if(!s.d.data){
		return false;
	}
	s.unbindEvents();
	if($.isFunction(s.o.onClose)&&!s.occb){
		s.occb=true;
		s.o.onClose.apply(s,[s.d]);
	}else{
		if(s.d.placeholder){
			var ph=$('#simplemodal-placeholder');
			if(s.o.persist){
				ph.replaceWith(s.d.data.removeClass('simplemodal-data').css('display',s.display));
			}else{
				s.d.data.hide().remove();
				ph.replaceWith(s.d.orig);
			}
		}else{
		s.d.data.hide().remove();
	}
	s.d.container.hide().remove();
	s.d.overlay.hide().remove();
	s.d.iframe&&s.d.iframe.hide().remove();
	s.d={};

}
}
};

})(jQuery);