/**
 * jQuery --> Depth Box
 * v1.0
 *
 *
 * @copyright	Start Creative, 2007
 * @author		Paul Campbell <paulc@startcreative.co.uk>
 * @author		Matthew Lane <matthewl@startcreative.co.uk>
 *
 * @option		laodingImage	(String) 	Location of loading image
 *
 * @return		Array
 */
(function() {

	jQuery.fn.depthbox = function(settings) {
		
		settings = jQuery.extend({
			overlayId: 		"db-overlay", 
			windowId: 		"db-window",
			closeClass: 	"db-close",
			requestType: 	"GET",
			dataType: 		"html",
			speed: 			"fast"
		}, settings);
		
		var elements = this;
		var overlay, win, form_block;
		
		init();
		//////////////////////// Apply ////		
		return(elements.each(function() {
			var el = $(this);
			el.click(function() {
				var href = el.attr("href");
				if(href && href.length) {
					//	href_size = parseQueryString(href.replace(/^[^\?]+\??/, '')));
					$.ajax({
						url: href,
						type: settings.requestType,	
						dataType: settings.dataType,	
						success: parseContent,
						error: function() {
							remove();
						}
					});	
				}
				return(false);
			});
		}));
				
		//////////////////////// Methods ////		
		function init() {
			if(!document.getElementById( settings.windowId ) && !document.getElementById( settings.overlayId )) {
				$("body").append(
						'<div id="' + settings.overlayId + '"></div>' 
					+ 	'<div id="' + settings.windowId + '"></div>'
				);
			}
			overlay 	= $("#" + settings.overlayId).hide();
		 	win 		= $("#" + settings.windowId).hide();
		}
		
		function display() {
			$(document).keydown(function(e) { 	
				if ($.browser.msie) { // MSIE
			 		var keycode = event.keyCode;
					var escape_key = 27;
				} else { // Moz
					var keycode = e.keyCode;
					var escape_key = e.DOM_VK_ESCAPE;
				}
				if(keycode == escape_key) {
					remove();
				}
			});
			if(!$.browser.msie) {
				overlay.fadeIn( settings.speed );
				win.fadeIn( settings.speed , function() {
					overlay.click(function() {
						remove();
					});
				});
				toggleForm(false);
			} else {
				// MSIE likes to mess the animation so don't bother
				overlay.show().click(function() {
					remove();
				});
				win.show();
				toggleForm(false);
			}
		}
		
		function remove() {
			// Remove key controls
			$(document).keydown(function() {
				// Null
				return(true);
			});
			// Hide overlay and window
			var c = "<!-- empty -->";
			if(!$.browser.msie) {
				overlay.fadeOut( settings.speed );
				win.fadeOut( settings.speed , function() {
					win.html( c );
				});
				toggleForm(true);
			} else {
				overlay.hide();
				win.hide().html( c );
				// Reshow forms
				toggleForm(true);
			}
		}
		
		function resize() {
			win.css({ marginTop: -Math.round(win.height() / 2), marginLeft: -Math.round(win.width() / 2) });
		}
		
		function parseContent(html) {
			$(html, "." + settings.closeClass).click(function() {
				remove();
				return(false);
			});
			win.html(html);
			resize();
			display();
		}
		
		function toggleForm(e) {
			var els = $("select, textarea, object");
			if(!e) {
				els.each(function() {
					var el = $(this);
					if(!el.parent().is("span")) {
						el.wrap("<span></span>");
						el.parent().css({
							display: "block",
							height: el.height(),
							width:el.width()
						});
					}
					el.hide();
				});
			} else {
				els.each(function() {
					var el = $(this);
					el.show();
					if(el.parent().is("span")) {
						var html = el.parent().html();
						var p = el.parent().parent();
						el.parent().remove();
						p.html(html);
					}					
				});
			}
		}
		
		function parseQueryString(query) {
			var params = {};
			if ( !query ) {
				return(params);
			}
			var vals = query.split(/[;&]/);
			for ( var i = 0; i < vals.length; i++ ) {
				var key_val = vals[i].split('=');
				if ( !key_val || key_val.length != 2 ) {
					continue;
				}
				var key = unescape( key_val[0] );
				var val = unescape( key_val[1] );
				val = val.replace(/\+/g, ' ');
				params[key] = val;
			}
			return(params);
		}
	}

})(jQuery)