(function($){
	$.fn.dialog = function(){
		var args = 'construct', settings = {};
		for(var i=0; i<arguments.length; i++){
			switch(typeof(arguments[i])){
				case 'string': 
					args = arguments[i];
				break;
				case 'object':
					settings = arguments[i];
				break;
			}
		}
		if(typeof($.dialog[args]) == 'function'){
			$(this).each(function(){
				$.dialog[args]($(this), settings);
			});
		}
	}
	$.dialog = {
		construct: function(elem, settings){
			var dialog = this;
			settings = jQuery.extend({
				'height': 600,
				'width': 800,
				'standalone': false,
				'target': 'href'
			},settings);
			if(settings['standalone'] !== true){
				// add click handlers
				$(elem).click(function(e){
					e.preventDefault();
					var myDiag = $.dialog.build(settings,elem);
					$.dialog.scroll(myDiag);
				});
			}else{
				// call dialog instantly
				var myDiag = $.dialog.build(settings);
				$.dialog.scroll(myDiag);
			}
		},
		build: function(options, elem){
			var dialogFunct = this, 
			// check for percent
			percentRegExp = new RegExp(/.[0-9][%]$/);
			if (percentRegExp.test(options.height)) {
				//convert to pixels
				options.height = (parseInt($(window).height(), 10) / 100) * parseInt(options.height.substring(0, (options.height.length)), 10);
			}
			if (percentRegExp.test(options.width)) {
				//convert to pixels
				options.width = (parseInt($(window).width(), 10) / 100) * parseInt(options.width.substring(0, (options.width.length)), 10);
			}
			// generate dialog
			var dialogHolder = $('<div />').css({
				width: $(document).width(),
				height: $(document).height(),
				position: 'absolute',
				zIndex: 9,
				left: 0,
				top: 0
			}).addClass('dialogHolder'),
			overlay = $('<div />').addClass('dialogOverlay').css({
				width: $(document).width(),
				height: $(document).height(),
				background: '#000',
				opacity: 0.5,
				position: 'absolute',
				zIndex: 10,
				left: 0,
				top: 0
			}),
			dialogShadow = $('<div />').addClass('dialogShadow').css({
				height: options.height + 30,
				width: options.width + 30,
				position: 'absolute',
				zIndex: 11,
				left: (($(window).width() / 2) - ((options.width + 30) / 2)),
				top: ((($(window).height()) / 2) - ((options.height + 30) / 2)) + $(window).scrollTop(),
				background: '#000',
				opacity: 0.5,
				'-moz-border-radius': '10px',
				'-webkit-border-radius': '10px',
				'border-radius': '10px'
			}),
			dialog = $('<div />').addClass('dialog-holder').css({
				position: 'absolute',
				zIndex: 12,
				height: options.height,
				width: options.width,
				left: ($(window).width() / 2) - ((options.width / 2)),
				top: ($(window).height() / 2) - ((options.height / 2)) + $(window).scrollTop()
			}).append(
				$('<div />').addClass('dialog').css({
					height: options.height,
					width: options.width,
					zIndex: 13,
					background: '#fff',
					opacity: 1,
					position: 'absolute',
					top:0,
					left:0,
					overflow:'auto'
				})
			),
			dialogCloser = $('<div>').addClass('ssatv_dialog_closer').css({
				position:'absolute',
				top:'-15px',
				right: '-15px',
				width: 30,
				height: 30,
				zIndex:14,
				cursor:'pointer',
				background: 'url(/_includes/images/close.png)'
			}).click(function(){
				dialogFunct.remove($(this));
			});
			dialogHolder.append(overlay).append(dialogShadow).append(dialog.append(dialogCloser));
			$(window).resize(function () {
				$.dialog.resize(dialogHolder);
			}).scroll(function () {
				$.dialog.scroll(dialogHolder);
			});
			if(elem){
				if(options['target'] == 'href'){
					dialogFunct.loadContent($(elem).attr('href'), $('.dialog',dialog));
				}
			}else{
				dialogFunct.loadContent(options['target'], $('.dialog',dialog));
			}
			$('body').append(dialogHolder);
			if(elem) $(elem).data('dialog', dialogHolder);
			return dialogHolder;
		},
		scroll: function(dialog){
			$('.dialogShadow', dialog).stop().animate({
				left: (parseInt($(window).width()) / 2) - (parseInt($('.dialogShadow', dialog).outerWidth(true)) / 2),
				top: (parseInt($(window).height()) / 2) - (parseInt($('.dialogShadow', dialog).outerHeight(true)) / 2) + $(window).scrollTop()
			}, 50);
			$('.dialog-holder', dialog).stop().animate({
				left: (parseInt($(window).width()) / 2) - (parseInt($('.dialog-holder', dialog).outerWidth(true)) / 2),
				top: (parseInt($(window).height()) / 2) - (parseInt($('.dialog-holder', dialog).outerHeight(true)) / 2) + $(window).scrollTop()
			}, 50);
		},
		resize: function(dialog){
			$('.dialogShadow', dialog).stop().animate({
				left: (parseInt($(window).width()) / 2) - (parseInt($('.dialogShadow', dialog).outerWidth(true)) / 2),
				top: (parseInt($(window).height()) / 2) - (parseInt($('.dialogShadow', dialog).outerHeight(true)) / 2)
			}, 50);
			$('.dialog-holder', dialog).stop().animate({
				left: (parseInt($(window).width()) / 2) - (parseInt($('.dialog-holder', dialog).outerWidth(true)) / 2),
				top: (parseInt($(window).height()) / 2) - (parseInt($('.dialog-holder', dialog).outerHeight(true)) / 2)
			}, 50);
			$('.dialogOverlay', dialog).width($(window).width()).height($(document).height())
		},
		loadContent: function(dataTarget, dialog){
			if(typeof(dataTarget) == 'string'){
				var internalLink = new RegExp(/^\#/),
				externalLink = new RegExp(/^http:/);
				if (internalLink.test(dataTarget)) {
					dialog.html($(dataTarget).html());
				}else{
					if (externalLink.test(dataTarget)) {
						// generate iFrame
						dialog.append(
							$('<iframe />')
								.attr({
									src: dataTarget,
									width: '100%',
									height: '100%',
									'frameborder': 0
								})
						)
					}else{
						$.ajax({
							url:dataTarget,
							success:function(data){
								dialog.html(data);
							}
						})
					}
				}
			}else{
				dialog.html($(dataTarget).html());
			}
		},
		remove: function(elem, settings){
			if($(elem).data('dialog')){
				$($(elem).data('dialog')).remove();
			}else{
				$(elem).parents('.dialogHolder').remove();
			}
		}
	}
}(jQuery));