var $mainLayout;					// jQuery UI.Layout Object
var $mainTabs;						// jQuery UI Main Layout Tabs Object
var $mainOpenedTabs = Array(0);		// Array to hold open tabs and url used to open the tab
var $menuAccordion;					// jQuery UI Accordion Object
var $mainTabCloseIndex;

$(document).ready(function () {

	// Create jQuery UI.Layout
	$mainLayout = $('BODY').layout({
			west__size:					150
		,	west__resizable:			false
		,	east__size:					150
		,	east__initClosed:			true
		,	east__resizable:			false
		,	north__size:				70
		,	north__resizable:			false
		,	south__size:				50
		,	south__initClosed:			false
		,	south__resizable:			false
		,   fxName:                     "none"
		,	fxSpeed:                    "fast"
		,	spacing_closed:             12
		,	spacing_open:               12
		,	onopen_end:					function () { resizeWidgets(); }
		,	onclose_end:				function () { resizeWidgets(); }
	});
	
	// Set default open layout tabs
	set_default_openTabs();
	
	// Create Accordion for Menu
	load_accordion();
	
	// Create Main Tabs
	load_tabs();
	
	// Turn buttons into jquery buttons with "button" class
	$("button.button, input:submit.button, a.button").button();
	
	// Resize jquery widgets inside layout sides
	resizeWidgets();
	
	// Sets defaults for error classes on fields that fail validation
	$.validator.setDefaults({
		focusInvalid: true,
		focusCleanup: false,
		errorElement: "div",
		wrapper: "div",
		meta: "validate",
		errorClass: "validation_popup_error_container",
		highlight: function(input) {
			$(input).addClass("validation_field_error");
		},
		unhighlight: function(input) {
			$(input).removeClass("validation_field_error");
		},
		errorPlacement: function(error, element) {
			offset = element.offset();
			error.insertBefore(element)
			error.addClass('validation_popup_error_message');
			error.css('position', 'absolute');
			var offset = "10";
			if (element.attr('type') == 'radio' || element.attr('type') == 'checkbox')
			{
				offset = "143";
			}
			$( error ).position({
				of: $( element ),
				my: "left center",
				at: "right center",
				offset: offset+" 0"
			});
		}
	});
	
	// Bind Click even for error messages that come up for the form validation
	$(".validation_popup_error_message").live('click', function(){
		$(this).remove();
	});
	
});
function set_default_openTabs()
{
	// Set default open layout tabs
	// Also used in layoutTab_closeAll() to reset $mainOpenedTabs to the default
	$mainOpenedTabs = Array(0);
	$mainOpenedTabs.push('/layout/home');
}
function load_tabs()
{
	// Create Main Tabs
	$mainTabs = $(".ui-layout-center").tabs();
	// Set Cache Option, To not reload ajax loaded tabs
	$mainTabs.tabs( "option", "cache", true ); 
	// Set Default Template for tabs
	$mainTabs.tabs({ tabTemplate: '<li><A href="#{href}">&bull; #{label}</A><span class="ui-icon ui-icon-close">Remove Tab</span></li>' }); 
	// Allow resorting of tabs
	//$(".ui-layout-center").find(".ui-tabs-nav").sortable({ axis: 'x', zIndex: 2 });
	// Close tab when clicking the X
	$('.ui-layout-center span.ui-icon-close').live('click', function() {
		$mainTabCloseIndex = $('li',$mainTabs).index($(this).parent());
		dialog_confirm('click_close_tab','Alert','Are you sure you want to close this tab?','help','Yes','No');
	});
	// When tab is fully loaded, set button jquery ui skins
	$('.ui-layout-center').ajaxComplete(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
		$("button.button, input:submit.button, a.button").button();
	});
	// Look for errors loading tab via ajax and notify.
	$('.ui-layout-center').ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
		var responseCode = XMLHttpRequest.status;
		layoutTab_load('/layout/display_error/' + responseCode);
	});
}
function click_close_tab(result)
{
	if (result == true)
	{
		$mainTabs.tabs('remove', $mainTabCloseIndex);
		$mainOpenedTabs.remove($mainTabCloseIndex);
	}
}
function load_accordion()
{
	// Create accordion
	$menuAccordion = $("#accordion").accordion({
		fillSpace:	true,
		animated: false
	});
}
function resizeWidgets () {
	// Used to resize jquery UI widgets inside the ui.layout.
	$mainLayout.resizeAll();
	$menuAccordion.accordion("resize");
}
