/**
 * $Workfile: ui.panel.js $
 * $Revision: 24 $
 * $Modtime: 24/06/10 12:20 $
 * $Author: Aamir.afridi $
 * 
 * jQuery UI Dialog 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Dialog
 *
 * Depends:
 *	ui.core.js
 *	ui.draggable.js
 *	ui.resizable.js
 */
(function($) {
		  
var setDataSwitch = {
		dragStart: "start.draggable",
		drag: "drag.draggable",
		dragStop: "stop.draggable",
		maxHeight: "maxHeight.resizable",
		minHeight: "minHeight.resizable",
		maxWidth: "maxWidth.resizable",
		minWidth: "minWidth.resizable",
		resizeStart: "start.resizable",
		resize: "drag.resizable",
		resizeStop: "stop.resizable"
	},
	
	uiDialogClasses =
		'ui-dialog ' +
		'ui-widget ' +
		'ui-widget-content ' +
		'ui-corner-all ';

$.widget("ui.panel", {

	_init: function() {
		this.originalTitle = this.element.attr('title');
		
		var self = this, options = this.options,

			title = options.title || this.originalTitle || '&nbsp;',
			//Set the id of the panel based on pluginName which should already be unique
			titleId = $.ui.panel.getTitleId(this.element.attr('id',this.options.pluginName || title.replace(/ /gi,""))),

			uiDialog = (this.uiDialog = $('<div/>'))
				.appendTo($("#"+this.element.parent().attr('id')))
				.hide()
				.addClass(uiDialogClasses + options.dialogClass)
				.css({
					position: 'absolute',
					overflow: 'hidden',
					zIndex: options.zIndex
				})
				// setting tabIndex makes the div focusable
				// setting outline to 0 prevents a border on focus in Mozilla
				.attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
					(options.closeOnEscape && event.keyCode
						&& event.keyCode == $.ui.keyCode.ESCAPE && self.close(event));
				})
				.attr({
					role: 'dialog',
					'aria-labelledby': titleId
				})
				.mousedown(function(event) {
					self.moveToTop(false, event);
				}),

			uiDialogContent = this.element
				.show()
				.removeAttr('title')
				.attr('style','position:relative !important')
				.addClass(
					'ui-dialog-content ' +
					'ui-widget-content')
				.appendTo(uiDialog),

			uiDialogTitlebar = (this.uiDialogTitlebar = $('<div></div>'))
				.addClass(
					'ui-dialog-titlebar ' +
					'ui-widget-header ' +
					'ui-corner-all ' +
					'ui-helper-clearfix'
				)
				.css('cursor',options.collapsible ? 'pointer' : 'default')
				.click(function(){ $(this).find('.atPanelCollapser').trigger('click'); })
				.prependTo(uiDialog),

			
			uiDialogTitlebarClose = $('<a title="Close" href="#"/>')
				.addClass(
					'ui-dialog-titlebar-close ' +
					'ui-corner-all'
				)
				.width(18)
				.attr('role', 'button')
				.hover(
					function() {
						uiDialogTitlebarClose.addClass('ui-state-hover');
					},
					function() {
						uiDialogTitlebarClose.removeClass('ui-state-hover');
					}
				)
				.focus(function() {
					uiDialogTitlebarClose.addClass('ui-state-focus');
				})
				.blur(function() {
					uiDialogTitlebarClose.removeClass('ui-state-focus');
				})
				.mousedown(function(ev) {
					ev.stopPropagation();
				})
				.click(function(event) {
					self.close(event);
					return false;
				})
				.appendTo(uiDialogTitlebar)
				.simpletooltip({fadeSpeed:1,width:30}),

			uiDialogTitlebarCloseText = (this.uiDialogTitlebarCloseText = $('<span/>'))
				.addClass(
					'ui-icon ' +
					'ui-icon-closethick'
				)
				.text(options.closeText)
				.appendTo(uiDialogTitlebarClose),

			uiDialogTitle = $('<span/>')
				.addClass('ui-dialog-title')
				.attr('id', titleId)
				.html(title)
				.prependTo(uiDialogTitlebar);

		//Check if closable is false than remove it
			if(!options.closable) uiDialogTitlebarClose.remove();
		

		uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();

		(options.draggable && $.fn.draggable && this._makeDraggable());
		(options.resizable && $.fn.resizable && this._makeResizable());

		this._createButtons(options.buttons);
		this._isOpen = false;

		(options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe());
		(options.autoOpen && this.open());
		
	},

	destroy: function() {
		(this.overlay && this.overlay.destroy());
		this.uiDialog.hide();
		this.element
			.unbind('.dialog')
			.removeData('dialog')
			.removeClass('ui-dialog-content ui-widget-content')
			.hide().appendTo('body');
		this.uiDialog.remove();

		(this.originalTitle && this.element.attr('title', this.originalTitle));
	},

	close: function(event) {
		var self = this;
		
		if (false === self._trigger('beforeclose', event)) {
			return;
		}

		(self.overlay && self.overlay.destroy());
		self.uiDialog.unbind('keypress.ui-dialog');

		(self.options.hide
			? self.uiDialog.hide(self.options.hide, function() {
				self._trigger('close', event);
			})
			: self.uiDialog.hide() && self._trigger('close', event));

		$.ui.panel.overlay.resize();

		self._isOpen = false;
		
		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
		if (self.options.modal) {
			var maxZ = 0;
			$('.ui-dialog').each(function() {
				if (this != self.uiDialog[0]) {
					maxZ = Math.max(maxZ, $(this).css('z-index'));
				}
			});
			$.ui.panel.maxZ = maxZ;
		}
	},

	isOpen: function() {
		return this._isOpen;
	},

	// the force parameter allows us to move modal dialogs to their correct
	// position on open
	moveToTop: function(force, event) {

		if ((this.options.modal && !force)
			|| (!this.options.stack && !this.options.modal)) {
			return this._trigger('focus', event);
		}
		
		if (this.options.zIndex > $.ui.panel.maxZ) {
			$.ui.panel.maxZ = this.options.zIndex;
		}
		(this.overlay && this.overlay.$el.css('z-index', $.ui.panel.overlay.maxZ = ++$.ui.panel.maxZ));

		//Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
		//  http://ui.jquery.com/bugs/ticket/3193
		var saveScroll = { scrollTop: this.element.attr('scrollTop'), scrollLeft: this.element.attr('scrollLeft') };
		this.uiDialog.css('z-index', ++$.ui.panel.maxZ);
		this.element.attr(saveScroll);
		//this._trigger('focus', event);
	},

	open: function() {
		if (this._isOpen) { return; }

		var options = this.options,
			uiDialog = this.uiDialog;

		this.overlay = options.modal ? new $.ui.panel.overlay(this) : null;
		(uiDialog.next().length && uiDialog.appendTo('body'));
		this._size();
		this._position(options.position);
		uiDialog.show(options.show);
		this.moveToTop(true);

		// prevent tabbing out of modal dialogs
		(options.modal && uiDialog.bind('keypress.ui-dialog', function(event) {
			if (event.keyCode != $.ui.keyCode.TAB) {
				return;
			}

			var tabbables = $(':tabbable', this),
				first = tabbables.filter(':first')[0],
				last  = tabbables.filter(':last')[0];

			if (event.target == last && !event.shiftKey) {
				setTimeout(function() {
					first.focus();
				}, 1);
			} else if (event.target == first && event.shiftKey) {
				setTimeout(function() {
					last.focus();
				}, 1);
			}
		}));

		// set focus to the first tabbable element in the content area or the first button
		// if there are no tabbable elements, set focus on the dialog itself
		$([])
			.add(uiDialog.find('.ui-dialog-content :tabbable:first'))
			.add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first'))
			.add(uiDialog)
			.filter(':first');
			//.focus();

			
		//Add extra CSS classes for Astun
			$('.ui-dialog, .ui-dialog-content').css({'font-size':'12px', 'cursor':'default'});
			$('.ui-dialog').addClass(options.astunParentClass).css("margin-bottom","5px");//Parent class
			$('.ui-dialog-titlebar').addClass(options.astunHeaderClass).css('margin-bottom',2);//Header class
			$('.ui-dialog-content').addClass(options.astunContentClass).css("overflow","hidden").css("padding",0);//Content class
			//Add footer and CSS
			$("."+options.astunFooterClass).remove();//Remove any previous
			$('.ui-dialog-content').after($("<div class='"+options.astunFooterClass+"'></div>").hide());

		//Now handle the callback functions -  calling other jquery plugin by getting the plugin's name
		options.pluginName=$.trim(options.pluginName); //Trim it
		if(options.pluginName && options.pluginName!='')
		{
			if($(this)[options.pluginName]) $(this)[options.pluginName](uiDialog,options.visibilityTriggerEvent,options.pluginData,options.pluginOptions);
			else alert('"'+options.pluginName+'" plugin not found.');
		}

		$dragHandle = $('<span></span>')
						.css({'position':'absolute', 'top':2, 'left':-1, 'cursor':'move', 'background':'none', 'border':'none'})
						.attr('title','drag this panel to sort')
						.addClass('ui-sort-icon ui-state-hover')
						.append(
							$('<span></span>')
								.css('position','relative')
								.append(
									$('<a></a>').addClass('ui-icon ui-icon-grip-dotted-vertical'),
									$('<a></a>').addClass('ui-icon ui-icon-grip-dotted-vertical').css({'position':'absolute','top': 22, 'left':0})
								)
						)
						.appendTo(uiDialog.find('.ui-dialog-titlebar'))
						.hide();//Sortable ui plugin will make it visible when if required.
		
		//Changes for IE
		if($.browser.msie || $.browser.safari)
		{
			uiDialog.find('.ui-sort-icon a:first').css('margin-top',4);
			uiDialog.find('.ui-sort-icon a:last').remove();
		}
		else
		{
			uiDialog.find('.ui-sort-icon a:last').css('top',(document.doctype.publicId.indexOf("Transitional")>0) ? 10 : 22);
		}


		//Check if we need the panels to be collapsible   / Also check if these panels are wrapped in jQuery Panels Wrapper than add some CSS
		if(options.collapsible)
		{
			//Collapse link
			if(options.compactCollapser)
			{
				$uiDialogTitlebarCollapser	= $('<span></span>')
												.addClass('atPanelCollapser ui-icon ui-icon-triangle-1-s')
												.css({'float':'left', 'width':14, 'margin':'1px 6px 0 -4px'})
												.attr('role', 'button')
												.click(function(event) {
													var $thisColl = $(this);
													//Hide the content first and do other stuff after
													uiDialog.find('.ui-dialog-content')
														.slideToggle(options.animationSpeed,
															function()
															{
																//Change the css class
																	$thisColl.toggleClass('ui-icon-triangle-1-e').toggleClass('ui-icon-triangle-1-s');
																//Save the open and close status of all the panels in cookie
																	savePanelsCollapseStatus();
															}
														)//End of slide
													return false;
												})
												.wrap('<span></span>')
												.parent().addClass('ui-state-hover').css({'border':'none', 'background':'none'})

				//Append it to the title of the panel
					uiDialog.find('.ui-dialog-title').css('margin-left','-6px').before($uiDialogTitlebarCollapser);
			}
			else
			{
				$uiDialogTitlebarCollapser	= $('<a title="Expand/Collapse" href="#"/>')
												.addClass('atPanelCollapser ui-dialog-titlebar-close ui-corner-all')
												.css({'width':18,'right':(options.closable) ? '0.2em' : '2em'})
												.attr('role', 'button')
												.bind('mouseenter mouseleave',function(){ $(this).toggleClass('ui-state-hover') })
												.focus(function() { $(this).addClass('ui-state-focus'); })
												.blur(function() { $(this).removeClass('ui-state-focus'); })
												.mousedown(function(ev) { ev.stopPropagation(); })
												.click(function(event) {
													var $thisColl	= $(this).find('span');
													//Hide the content first and do other stuff after
													uiDialog.find('.ui-dialog-content')
														.slideToggle(options.animationSpeed,
															function()
															{
																//Change the css class
																	$thisColl.toggleClass('ui-icon-plusthick').toggleClass('ui-icon-minusthick');
																//Save the open and close status of all the panels in cookie
																	savePanelsCollapseStatus();
															}
														)//End of slide
													return false;
												})
												.append(
													$('<span></span>')
														.addClass('ui-icon  ui-icon ui-icon-minusthick')
												)
												.appendTo(uiDialog.find('.ui-dialog-titlebar'))
			}	
			
			function restorePanelsCollapseStatus()
			{
				cookie = Astun.JS.Common.getCookie('jQuery-ui-panelsCollapseStatus');
				if(!cookie) return;//No cookie? return
				else
				{
					panelsOrder=cookie.split(",");
					$.each(panelsOrder,function(i,id) {
						var panel = $(options.panelParentNode).find('.ui-dialog[aria-labelledby="'+id+'"]');
						if(panel.length==1) collapsePanel(panel);
					});
				}
			}
			
			function savePanelsCollapseStatus()
			{
				//Save the open and close status of all the panels in cookie
				if(options.saveCollapseStatus)
				{
					var collapsedPanels = new Array();//Create an empty Array
					//Find all panels
					$(options.panelParentNode).find('.ui-dialog').each(function(){
						//Save only collapsed panels
						if($(this).find('.atPanelCollapser').hasClass('ui-icon-triangle-1-e'))
						{
							collapsedPanels.push($(this).attr("aria-labelledby"));
						}
					});
					//parent.find(this.options.items).each(function(){ alteredOrder.push($(this).attr("rel")) });
					Astun.JS.Common.setCookie('jQuery-ui-panelsCollapseStatus',collapsedPanels,options.savePanelPositionsForDays);
				}
			}
			
			function collapsePanel(panel)
			{
				//Check if already collapsed than return
				if(!panel.find('.ui-dialog-content').is(':visible')) return;
				panel.find('.ui-dialog-content').hide();
				if(options.compactCollapser) panel.find('.atPanelCollapser').toggleClass('ui-icon-triangle-1-s').toggleClass('ui-icon-triangle-1-e');
				else panel.find('.atPanelCollapser').toggleClass('ui-icon-plusthick').toggleClass('ui-icon-minusthick');
			}
			
			//Collapse on load only if cookie has not been created i.e. user has not expand or collapse any panel yet
			cookie = Astun.JS.Common.getCookie('jQuery-ui-panelsCollapseStatus');
			if(!cookie)
			{
				if(options.collapseInStart) collapsePanel(uiDialog);
			}
			
			//Restore the panel status
			restorePanelsCollapseStatus();
			
			//Hide panel if true
			if(options.hidePanelInstart) uiDialog.addClass('atPanelHidden').hide();
			
			
			//Bind its event to the event element
			if($.trim(options.visibilityBindEvent)!='')
			{
				$(options.eventElement).bind($.trim(options.visibilityBindEvent), function(e,visible){
					if(visible)
					{
						//Show the panel
							uiDialog.removeClass('atPanelHidden').show()
							if(!$.browser.safari) uiDialog.effect("highlight", {}, options.animationSpeed+400);
							setTimeout(function() { uiDialog.find('form input:first').focus(); } ,500);
						//Now scroll the panel wrapper to the this panel (if there are many panels inside already)
							$('.atPanelInnerWrapper').scrollTo(uiDialog, options.animationSpeed, {offset: {top:-5} });
						//If it is collapsed than expend it
							if(!uiDialog.find('.ui-dialog-content').is(':visible'))
								//Trigger click event $coll
								uiDialog.find('.ui-dialog-titlebar').trigger('click');
					}
					else
					{
						//Hide the panel
							uiDialog.addClass('atPanelHidden').hide();
						//Now scroll the panel wrapper to the first visible panel if any
							$('.atPanelInnerWrapper').scrollTo(uiDialog.parent().find('.ui-dialog:visible'), options.animationSpeed, {offset: {top:-5} });
						//See if this dialog is the last one to be removed
							if($('.atMainJQWrapper .ui-dialog:visible').length==0)
							{
								//Remove atLastlyVisible from all panels
									$('.atMainJQWrapper .ui-dialog').removeClass('atLastlyVisible');
								//Add atLastlyVisible to the current panel
									uiDialog.addClass('atLastlyVisible');
							}
							else
								//Remove atLastlyVisible from all panels
									$('.atMainJQWrapper .ui-dialog').removeClass('atLastlyVisible');
					}
					
					//Save the visibility either true or false and if has lastly visible than let the panel wrapper to hide it after it finish slide in
						var panelVisibility = uiDialog.is(':visible');
						

						/*
						TODO: IF THIS IS THE LAST PANEL THAN IT HAS THE CLASS 'atLastlyVisible' AND SHOULD BE HIDE ITSELF WHEN THE WRAPPER SLIDES IN
						alert(uiDialog.find('.ui-dialog-title').html()+" >> atLastlyVisible =  "+uiDialog.hasClass('atLastlyVisible'))
						if(uiDialog.hasClass('atLastlyVisible'))
						{
							uiDialog.show();
							dialogVisibility = false;
						}*/


					//First show/hide the main wrapper
							$(options.eventElement).trigger('panelWrapperVisibility',visible);

					//Finally trigger the event if any
						if($.trim(options.visibilityTriggerEvent)!='')
							//Second parameter will see the true or false value to show if the panel is visible or not
							$(options.eventElement).trigger($.trim(options.visibilityTriggerEvent),panelVisibility);
					});
			
				//Now bind the event to close button as well
					uiDialog.find('.ui-dialog-titlebar-close').click(function(){
						$(options.eventElement).trigger($.trim(options.visibilityBindEvent), false);
					});
			}

		}//End of collapsible
		
		this._trigger('open');
		this._isOpen = true;
	},

	_createButtons: function(buttons) {
		var self = this,
			hasButtons = false,
			uiDialogButtonPane = $('<div></div>')
				.addClass(
					'ui-dialog-buttonpane ' +
					'ui-widget-content ' +
					'ui-helper-clearfix'
				);

		// if we already have a button pane, remove it
		this.uiDialog.find('.ui-dialog-buttonpane').remove();

		(typeof buttons == 'object' && buttons !== null && $.each(buttons, function() { return !(hasButtons = true); }));
		if (hasButtons) {
			$.each(buttons, function(name, fn) {
				$('<button type="button"></button>')
					.addClass(
						'ui-state-default ' +
						'ui-corner-all'
					)
					.text(name)
					.click(function() { fn.apply(self.element[0], arguments); })
					.hover(
						function() {
							$(this).addClass('ui-state-hover');
						},
						function() {
							$(this).removeClass('ui-state-hover');
						}
					)
					.focus(function() {
						$(this).addClass('ui-state-focus');
					})
					.blur(function() {
						$(this).removeClass('ui-state-focus');
					})
					.appendTo(uiDialogButtonPane);
			});
			uiDialogButtonPane.appendTo(this.uiDialog);
		}
	},

	_makeDraggable: function() {
		var self = this,
			options = this.options,
			heightBeforeDrag;

		this.uiDialog.draggable({
			cancel: '.ui-dialog-content',
			handle: '.ui-dialog-titlebar',
			containment: 'document',
			start: function() {
				heightBeforeDrag = options.height;
				$(this).height($(this).height()).addClass("ui-dialog-dragging");
				(options.dragStart && options.dragStart.apply(self.element[0], arguments));
			},
			drag: function() {
				(options.drag && options.drag.apply(self.element[0], arguments));
			},
			stop: function() {
				$(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);
				(options.dragStop && options.dragStop.apply(self.element[0], arguments));
				$.ui.panel.overlay.resize();
			}
		});
	},

	_makeResizable: function(handles) {
		handles = (handles === undefined ? this.options.resizable : handles);
		var self = this,
			options = this.options,
			resizeHandles = typeof handles == 'string'
				? handles
				: 'n,e,s,w,se,sw,ne,nw';

		this.uiDialog.resizable({
			cancel: '.ui-dialog-content',
			alsoResize: this.element,
			maxWidth: options.maxWidth,
			maxHeight: options.maxHeight,
			minWidth: options.minWidth,
			minHeight: options.minHeight,
			start: function() {
				$(this).addClass("ui-dialog-resizing");
				(options.resizeStart && options.resizeStart.apply(self.element[0], arguments));
			},
			resize: function() {
				(options.resize && options.resize.apply(self.element[0], arguments));
			},
			handles: resizeHandles,
			stop: function() {
				$(this).removeClass("ui-dialog-resizing");
				options.height = $(this).height();
				options.width = $(this).width();
				(options.resizeStop && options.resizeStop.apply(self.element[0], arguments));
				$.ui.panel.overlay.resize();
			}
		})
		.find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');
	},

	_position: function(pos) {
		
		var orgPos=pos;
		
		var wnd = $(window), doc = $(document),
			pTop = doc.scrollTop(), pLeft = doc.scrollLeft(),
			minTop = pTop;

		if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) {
			pos = [
				pos == 'right' || pos == 'left' ? pos : 'center',
				pos == 'top' || pos == 'bottom' ? pos : 'middle'
			];
		}
		if (pos.constructor != Array) {
			pos = ['center', 'middle'];
		}
		if (pos[0].constructor == Number) {
			pLeft += pos[0];
		} else {
			switch (pos[0]) {
				case 'left':
					pLeft += 0;
					break;
				case 'right':
					pLeft += wnd.width() - this.uiDialog.outerWidth();
					break;
				default:
				case 'center':
					pLeft += (wnd.width() - this.uiDialog.outerWidth()) / 2;
			}
		}
		if (pos[1].constructor == Number) {
			pTop += pos[1];
		} else {
			switch (pos[1]) {
				case 'top':
					pTop += 0;
					break;
				case 'bottom':
					pTop += wnd.height() - this.uiDialog.outerHeight();
					break;
				default:
				case 'middle':
					pTop += (wnd.height() - this.uiDialog.outerHeight()) / 2;
			}
		}

		// prevent the dialog from being too high (make sure the titlebar
		// is accessible)
		
		if(orgPos!="static")
		{
			pTop = Math.max(pTop, minTop);
			this.uiDialog.css({top: pTop, left: pLeft});
		}
		else
		{
			this.uiDialog.css("position","relative");
		}
			
	},

	_setData: function(key, value){
		(setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value));
		switch (key) {
			case "buttons":
				this._createButtons(value);
				break;
			case "closeText":
				this.uiDialogTitlebarCloseText.text(value);
				break;
			case "dialogClass":
				this.uiDialog
					.removeClass(this.options.dialogClass)
					.addClass(uiDialogClasses + value);
				break;
			case "_makeDraggable":
				(value
					? this._makeDraggable()
					: this.uiDialog.draggable('destroy'));
				break;
			case "height":
				this.uiDialog.height(value);
				break;
			case "position":
				this._position(value);
				break;
			case "resizable":
				var uiDialog = this.uiDialog,
					isResizable = this.uiDialog.is(':data(resizable)');

				// currently resizable, becoming non-resizable
				(isResizable && !value && uiDialog.resizable('destroy'));

				// currently resizable, changing handles
				(isResizable && typeof value == 'string' &&
					uiDialog.resizable('option', 'handles', value));

				// currently non-resizable, becoming resizable
				(isResizable || this._makeResizable(value));
				break;
			case "title":
				$(".ui-dialog-title", this.uiDialogTitlebar).html(value || '&nbsp;');
				break;
			case "width":
				this.uiDialog.width(value);
				break;
		}

		$.widget.prototype._setData.apply(this, arguments);
	},

	_size: function() {
		/* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
		 * divs will both have width and height set, so we need to reset them
		 */
		var options = this.options;

		// reset content sizing
		this.element.css({
			height: 0,
			minHeight: 0,
			width: 'auto'
		});

		// reset wrapper sizing
		// determine the height of all the non-content elements
		var nonContentHeight = this.uiDialog.css({
				height: 'auto',
				width: options.width
			})
			.height();

		this.element
			.css({
				minHeight: Math.max(options.minHeight - nonContentHeight, 0),
				height: options.height == 'auto'
					? 'auto'
					: Math.max(options.height - nonContentHeight, 0)
			});
	}
});

$.extend($.ui.panel, {
	version: "1.7.2",
	defaults: {
		animationSpeed:800,
		autoOpen: true,
		astunParentClass: '',
		astunHeaderClass: 'atJQPanelHeader',
		astunContentClass: 'atJQPanelContent',
		astunFooterClass: 'atJQPanelFooter',
		eventElement: '#atMap',
		bgiframe: false,
		buttons: {},
		pluginName: '',
		pluginData: '',
		pluginOptions: {},
		closable:true,
		closeOnEscape: false,
		closeText: 'close',
		collapsible: true,
		compactCollapser: true, //This will make a small arrow with the title of the panel otherwise - if false a minus sign will apear on the right handside of the panel titlebar
		collapseInStart:false,
		visibilityBindEvent:'',
		visibilityTriggerEvent:'',
		hidePanelInstart:false,
		dialogClass: '',
		draggable: false,
		hide: null,
		height: 'auto',
		maxHeight: false,
		maxWidth: false,
		minHeight: 40,
		minWidth: 150,
		modal: false,
		position: 'static',
		panelParentNode: '.atMainJQWrapper',
		resizable: false,
		show: null,
		stack: true,
		saveCollapseStatus: true,
		savePanelPositionsForDays: 7,
		title: '',
		width: 'auto',
		zIndex: 10000
	},

	getter: 'isOpen',

	uuid: 0,
	maxZ: 0,

	getTitleId: function($el) {
		return 'ui-dialog-title-' + ($el.attr('id') || ++this.uuid);
	},

	overlay: function(dialog) {
		this.$el = $.ui.panel.overlay.create(dialog);
	}
});

$.extend($.ui.panel.overlay, {
	instances: [],
	maxZ: 0,
	events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
		function(event) { return event + '.dialog-overlay'; }).join(' '),
	create: function(dialog) {
		if (this.instances.length === 0) {
			// prevent use of anchors and inputs
			// we use a setTimeout in case the overlay is created from an
			// event that we're going to be cancelling (see #2804)
			setTimeout(function() {
				// handle $(el).dialog().dialog('close') (see #4065)
				if ($.ui.panel.overlay.instances.length) {
					$(document).bind($.ui.panel.overlay.events, function(event) {
						var dialogZ = $(event.target).parents('.ui-dialog').css('zIndex') || 0;
						return (dialogZ > $.ui.panel.overlay.maxZ);
					});
				}
			}, 1);

			// allow closing by pressing the escape key
			$(document).bind('keydown.dialog-overlay', function(event) {
				(dialog.options.closeOnEscape && event.keyCode
						&& event.keyCode == $.ui.keyCode.ESCAPE && dialog.close(event));
			});

			// handle window resize
			$(window).bind('resize.dialog-overlay', $.ui.panel.overlay.resize);
		}

		var $el = $('<div></div>').appendTo(document.body)
			.addClass('ui-widget-overlay').css({
				width: this.width(),
				height: this.height()
			});

		(dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe());

		this.instances.push($el);
		return $el;
	},

	destroy: function($el) {
		this.instances.splice($.inArray(this.instances, $el), 1);

		if (this.instances.length === 0) {
			$([document, window]).unbind('.dialog-overlay');
		}

		$el.remove();
		
		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309)
		var maxZ = 0;
		$.each(this.instances, function() {
			maxZ = Math.max(maxZ, this.css('z-index'));
		});
		this.maxZ = maxZ;
	},

	height: function() {
		// handle IE 6
		if ($.browser.msie && $.browser.version < 7) {
			var scrollHeight = Math.max(
				document.documentElement.scrollHeight,
				document.body.scrollHeight
			);
			var offsetHeight = Math.max(
				document.documentElement.offsetHeight,
				document.body.offsetHeight
			);

			if (scrollHeight < offsetHeight) {
				return $(window).height() + 'px';
			} else {
				return scrollHeight + 'px';
			}
		// handle "good" browsers
		} else {
			return $(document).height() + 'px';
		}
	},

	width: function() {
		// handle IE 6
		if ($.browser.msie && $.browser.version < 7) {
			var scrollWidth = Math.max(
				document.documentElement.scrollWidth,
				document.body.scrollWidth
			);
			var offsetWidth = Math.max(
				document.documentElement.offsetWidth,
				document.body.offsetWidth
			);

			if (scrollWidth < offsetWidth) {
				return $(window).width() + 'px';
			} else {
				return scrollWidth + 'px';
			}
		// handle "good" browsers
		} else {
			return $(document).width() + 'px';
		}
	},

	resize: function() {
		/* If the dialog is draggable and the user drags it past the
		 * right edge of the window, the document becomes wider so we
		 * need to stretch the overlay. If the user then drags the
		 * dialog back to the left, the document will become narrower,
		 * so we need to shrink the overlay to the appropriate size.
		 * This is handled by shrinking the overlay before setting it
		 * to the full document size.
		 */
		var $overlays = $([]);
		$.each($.ui.panel.overlay.instances, function() {
			$overlays = $overlays.add(this);
		});

		$overlays.css({
			width: 0,
			height: 0
		}).css({
			width: $.ui.panel.overlay.width(),
			height: $.ui.panel.overlay.height()
		});
	}
});

$.extend($.ui.panel.overlay.prototype, {
	destroy: function() {
		$.ui.panel.overlay.destroy(this.$el);
	}
});

})(jQuery);

