/*
	Modal Dialog v3.4.0
*/

;(function($) {

	$.modal = function (opts) {

		// SERUP

		var defaults = {
			'overlayId'					: 'dialog-overlay',
			'overlayFadeIn'				: null,
			'overlayFadeOut'			: null,
			'overlayOpacity'			: 50,
			'overlayColor'				: '#000',
			'zIndex'					: 9000,
			'overlayClose'				: true,
			'showBaseLoading'			: true,
			'containerId'				: 'dialog',
			'containerFadeIn'			: 500,
			'containerFadeOut'			: null,
			'containerHorizontal'		: 'center',
			'containerVertical'			: 'center',
			'closeIds'					: '.close',
			'onClose'					: null
		};

		this.settings = $.extend({}, defaults, opts);
		this.open = false;

		this.isie6			= $.browser.msie && (parseInt($.browser.version, 10) == 6);
		this.isie7			= $.browser.msie && (parseInt($.browser.version, 10) == 7);
		this.isie8			= $.browser.msie && (parseInt($.browser.version, 10) == 8);
		this.isie6or7		= this.isie6 || this.isie7;
		this.isQuirksMode	= (((($.support) && $.support.boxModel) || ($.boxModel)) !== true);
		//!jQuery.browser.msie || document.compatMode == "CSS1Compat"
		this.isie6Mode		= (this.isie6 || this.isie7 || this.isie8) && this.isQuirksMode;
		this.isMacXFF		= function () {
			var userAgent = navigator.userAgent.toLowerCase();
			if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox') != -1) {
				return true;
			}
		};

		this.makePx = function (dimension) {
			dimension = dimension + '';
			var units = 'px';
			if (!(dimension.substring(dimension.length, units.length) == units)) {
				dimension = dimension + units;
			}
			return dimension;
		};

		this.overlay = $('<div>')
			.attr('id', this.settings.overlayId)
			.css({
				'width'				: !this.isie6Mode ? '100%' : this.makePx($(window).width()),
				'height'			: !this.isie6Mode ? '100%' : this.makePx($(document).height()),
				'position'			: !this.isie6Mode ? 'fixed' : 'absolute',
				'left'				: '0',
				'top'				: '0',
				//'overflow'			: 'auto',  // covers flash
				'filter'			: 'alpha(opacity='+ (this.settings.overlayOpacity) +')', // IE6
				'opacity'			: this.settings.overlayOpacity / 100,
				'zIndex'			: this.settings.zIndex,
				'backgroundColor'	: this.settings.overlayColor ? this.settings.overlayColor : '#000'
			})
			.hide()
			.appendTo('body');

		// png overlay to hide flash in Mac OS X FF
		if (this.isMacXFF()) {
			$("#dialog-overlay").addClass("macxff");
		}

		if (this.isie6) {
			this.iframe = $('<iframe src="javascript:false;">')
				.css({
					'opacity'	: '0', 
					'position'	: 'absolute',
					'height'	: this.makePx($(document).height()),
					'width'		: this.makePx($(window).width()),
					'zIndex'	: '1000',
					'top'		: '0',
					'left'		: '0'
				})
				.hide()
				.appendTo('body');
		}

		// end SETUP

		/* functions */

		this.show = function () {
			this.showBase();
			this.showWindow();
			return this;
		};

		this.initWindow = function (windowHtml) {
			if (windowHtml) {
				this.container = $(windowHtml);
			} else {
				this.container = $('<div>').attr("id", this.settings.containerId);
			}
			/*// for fixed scrolling
			this.container
				.css({	'position'	: !this.isie6Mode ? 'fixed' : 'absolute', 
						'zIndex'	: this.settings.zIndex + 100
				})
				.hide()
				.appendTo('body');*/
			this.container
				.css({	'position'	: 'absolute', 
						'zIndex'	: this.settings.zIndex + 100
				})
				.hide()
				.appendTo('body')
		};

		this.showBase = function () {
			var me = this;
			if (!this.open) {
				this.open = true;
				if (this.iframe) {
					this.iframe.show();
				}
				if (this.settings.overlayFadeIn) {
					this.overlay.fadeIn(this.settings.overlayFadeIn);
				} else {
					this.overlay.show();
				}
				this.overlay.addClass('loading');
				if (this.settings.showBaseLoading) {
					//
				}
				if (this.settings.overlayClose) {
					this.overlay.click(function(e){
						me.close();
						return false;
					});
				}
			}
		};

		this.showWindow = function () {
			var me = this;
			/*var containerHeight = this.container.height();
			var windowHeight = $(window).height();
			if (containerHeight > windowHeight) {
				$(this.container).height(windowHeight - 14);
			}*/
			/*if (this.settings.containerHorizontal == 'center') {
				this.container.css({
					'left'			: '50%',
					'marginLeft'	: this.makePx(0 - (this.container.width() / 2))
				});
			}
			if (this.settings.containerVertical == 'center') {
				this.container.css({
					'top'			: '49%',
					'marginTop'		: this.makePx(0 - (this.container.height() / 2))
				});
			} else if (this.settings.containerVertical == 'top') {
				this.container.css({
					'top'			: '5px',
					'marginTop'		: '0'
				});
			}
			if (this.isie6) {
				this.container.css({
					'position'	: 'absolute',
					'top'		: 	(document.documentElement || document.body).scrollTop 
									+ Math.round(49 * (document.documentElement.offsetHeight || document.body.clientHeight) / 100)
									+ 'px'
				});
			}*/
			/*this.container.load(function(){
				me.overlay.removeClass('loading');
				centerContainer(me, true);
				if (me.settings.containerFadeIn) {
					me.container.fadeIn(me.settings.containerFadeIn);
				} else {
					me.container.show();
				}
				$(me.settings.closeIds).click(function(e){
					me.close();
					return false;
				});
				// centering events for IE6
				if (me.isie6Mode) {
					$(window).bind('scroll', {'modal':me}, ie6WindowScroll);
					$(window).bind('resize', {'modal':me}, ie6WindowResize);
				}
			});*/

			me.overlay.removeClass('loading');
			centerContainer(me, true);
			if (me.settings.containerFadeIn) {
				me.container.fadeIn(me.settings.containerFadeIn);
			} else {
				me.container.show();
			}
			$(me.settings.closeIds).click(function(e){
				me.close();
				return false;
			});
			/*// centering events for IE6 for fixed scrolling
			if (me.isie6Mode) {
				$(window).bind('scroll', {'modal':me}, ie6WindowScroll);
				$(window).bind('resize', {'modal':me}, ie6WindowResize);
			}*/

		};

		this.closeWindow = function () {
			if (this.overlay) {
				this.overlay.removeClass('loading');
			}
			if (this.container) {
				$(this.settings.closeIds).unbind('click');
				if (this.settings.containerFadeOut) {
					this.container.fadeOut(this.settings.containerFadeOut);
				}
				this.container.remove();
				this.container = null;
			}		
		};

		this.close = function () {
			$('#' + this.settings.overlayId).unbind('click');
			/*if (this.isie6Mode) {
				$(window).unbind('scroll', ie6WindowScroll);
				$(window).unbind('resize', ie6WindowResize);
			}*/
			this.closeWindow();
			if ($.isFunction(this.settings.onClose)) {
				//this.settings.onClose();
				this.settings.onClose.call();
			}
			if (this.overlay) {
				if (this.settings.overlayFadeOut) {
					this.overlay.fadeOut(this.settings.overlayFadeOut);
				}
				this.overlay.unbind('click');
				this.overlay.remove();
			}
			if (this.iframe) {
				this.iframe.remove();
			}
			this.overlay = null;
			this.container = null;
			this.iframe = null;
			this.open = false;
			return this;
		};

		this.makeId = function (idName) {
			var units = '#';
			if (!(idName.substr(0, units.length) == units)) {
				idName = units + idName;
			}
			return idName;
		};

		this.makeClass = function (className) {
			var units = '.';
			if (!(className.substr(0, units.length) == units)) {
				className = units + className;
			}
			return className;
		};

		function centerContainer (modal, isFirstTime) {
		
			/*// for fixed scrolling
			var width = modal.container.width();
			var height = modal.container.height();
			var top, marginTop;
			if (modal.settings.containerVertical == 'top') {				
				top = !modal.isie6Mode ? '5px' : modal.makePx($(window).scrollTop() + 5);
				marginTop = 0;
			} else {
				top = !modal.isie6Mode ? '50%' : modal.makePx($(window).scrollTop() + ($(window).height() / 2));
				marginTop = modal.makePx('-' + (height / 2));
			}
			modal.container.css({
				'top'			: top,
				'left'			: '50%',
				'height'		: 'auto',
				'marginLeft'	: modal.makePx('-' + (width / 2)),
				'marginTop'		: marginTop
			});*/
			
			var width = modal.container.width();
			modal.container.css({
				//'top'			: '35px',
				'top'			: modal.makePx($(window).scrollTop() + 30),
				'left'			: '50%',
				'height'		: 'auto',
				'marginLeft'	: modal.makePx('-' + (width / 2))
			});
			
			if (isFirstTime) {
				modal.container.css({
					'width'			: modal.makePx(width)
				});
			}
		}

		function ie6WindowScroll (evt) {
			centerContainer(evt.data.modal, false);
		};

		function ie6WindowResize (evt) {
			evt.data.modal.overlay.css({
				'width'		: evt.data.modal.makePx($(window).width()),
				'height'	: evt.data.modal.makePx($(document).height())
			});
			evt.data.modal.iframe.css({
				'width'		: evt.data.modal.makePx($(window).width()),
				'height'	: evt.data.modal.makePx($(document).height())
			});
			centerContainer(evt.data.modal, false);
		};

		return this;

	}; // end $.modal = function()

})(jQuery);

