// User Sub Menu
$.ui.component.subclass('ui.user_sub_menu', {

	_init: function() {
		var self = this, 
			options = this.options, 
			menu = this.menu = self.element, 
			menuHeader = this.menuHeader = menu.find(options.headerSelector), 
			menuBody = this.menuBody = menu.find(options.bodySelector), 
			menuFooter = this.menuFooter = menu.find(options.footerSelector);
		this.create();
	}, 
	callPage: function(method, params) {
		var page = this.options.page;
		if (page && page.widget && page.object) {
			$.plugin(page.object, page.widget, method, params);
		}
	}, 
	onItemClick: function(object) {
		this.menuBody.find('ul').find('li').each(function() {
			$(this).removeClass('current');
		});
		object.addClass('current');
		if (object.attr('menu:item:url')) {
			this.callPage('loadBodyContent', [object.attr('menu:item:url')]);
		}
	}, 
	createBody: function() {
		var self = this;
		this.menuBody.find('ul').find('li').each(function() {
			var object = $(this);
			object.find('a').unbind('click');
			object.find('a').bind('click', function () {self.onItemClick(object);});
		});
	}, 
	destroyBody: function() {
		this.menuBody.find('ul').find('li').each(function() {
			var object = $(this);
			if (object.attr('menu:item:url')) {object.find('a').unbind('click');}
		});
	}, 
	create: function() {this.createBody();}, 
	destroy: function() {this.destroyBody();}
});
$.ui.user_sub_menu.defaults.extend({
	headerSelector: ' > .menu-header', bodySelector: ' > .menu-body', footerSelector: ' > .menu-footer'
});
// Left Side Bar Search Form
$.ui.form.subclass('ui.left_side_bar_search_form', {
	submit: function() {
		var keyword = this.formFieldSet.find('input').val();
		this.callPage('searchKeyword', [keyword]);
	}
});
// Page Category List
$.ui.component.subclass('ui.page_category_list', {
	_init: function() {
		var self = this, 
			options = this.options, 
			bar = this.bar = self.element, 
			barBody = this.barBody = bar.find(options.bodySelector);
		this.create();
	},
	
	create: function () {
		var activeKey = this.barBody.find('#page-category-list p.active').attr('active_key');
		this.barBody.find('#page-category-list').accordion({autoHeight: false, active: parseInt(activeKey)});
	}
});
$.ui.page_category_list.defaults.extend({
	bodySelector: ' > .bar-body'
});
// Left Side Bar
$.ui.component.subclass('ui.left_side_bar', {

	_init: function() {
		var self = this, 
			options = this.options, 
			bar = this.bar = self.element, 
			barHeader = this.barHeader = bar.find(options.headerSelector), 
			barBody = this.barBody = bar.find(options.bodySelector), 
			barFooter = this.barFooter = bar.find(options.footerSelector);
		this.create();
	}, 
	// User Sub Menu
	createUserSubMenu: function() {
		this.barBody.find('#user-sub-menu').user_sub_menu({page: this.options.page});
	}, 
	destroyUserSubMenu: function() {
		this.barBody.find('#user-sub-menu').user_sub_menu('destroy');
	}, 
	// Search Form
	createSearchForm: function() {
		this.barBody.find('.left-side-bar-search-form').left_side_bar_search_form({page: this.options.page});
	}, 
	destroySearchForm: function() {
		this.barBody.find('.left-side-bar-search-form').left_side_bar_search_form('destroy');
	}, 
	createHeader: function() {
		
	}, 
	destroyHeader: function() {
		
	}, 
	createBody: function() {
		this.createSearchForm();
		this.createUserSubMenu();
	}, 
	destroyBody: function() {
		this.destroySearchForm();
		this.destroyUserSubMenu();
	}, 
	create: function() {
		this.createHeader();
		this.createBody();
	}, 
	destroy: function() {
		this.destroyHeader();
		this.destroyBody();
	}
});
$.ui.left_side_bar.defaults.extend({
	headerSelector: ' > .bar-header', bodySelector: ' > .bar-body', footerSelector: ' > .bar-footer'
});
// Page
$.ui.component.subclass('ui.page', {

	_init: function() {
		var self = this, 
			options = this.options, 
			page = (this.page) = self.element, 
			pageHeader = this.pageHeader = page.find(options.headerSelector), 
			pageBody = this.pageBody = page.find(options.bodySelector), 
			pageBodyContent = this.pageBodyContent = pageBody.find(options.bodyContentSelector), 
			pageFooter = this.pageFooter = page.find(options.footerSelector);
		this.create();
		this.fixHeight();
	},
	
	// Fix panels height	
	fixHeight: function () {
		var leftDiv = this.pageBody.find('#body-column-left');
		if(leftDiv.attr('start_left_height') != undefined && leftDiv.attr('start_left_height') != undefined) return;
		var rightDiv = this.pageBody.find('#body-content-right');
		var leftOuterHeight = leftDiv.outerHeight();
		var rightOuterHeight = rightDiv.outerHeight();
		var leftHeight = leftDiv.height();
		var rightHeight = rightDiv.height();
		leftDiv.attr('start_left_height', leftHeight);
		leftDiv.attr('start_left_outer_height', leftOuterHeight);
		if (leftOuterHeight > rightOuterHeight) {
			var heightDiff = leftOuterHeight - rightOuterHeight;
			rightDiv.css('min-height', rightHeight + heightDiff + 'px');
		} else if (leftOuterHeight < rightOuterHeight) {
			var heightDiff = rightOuterHeight - leftOuterHeight;
			leftDiv.css('height', leftHeight + heightDiff + 'px');
		}
	},
	
	// Menu
	createMenu: function() {this.pageHeader.find('#main-menu').find('.jd_menu').jdMenu();}, 
	createHeader: function() {
		this.createMenu();
	}, 
	destroyHeader: function() {}, 
	// Left Side Bar
	createLeftSideBar: function() {
		this.pageBody.find('.left-side-bar').left_side_bar(this.getPageOptions());
	}, 
	destroyLeftSideBar: function() {
		this.pageBody.find('.left-side-bar').left_side_bar('destroy');
	}, 
	// Page Category List
	createPageCategoryList: function () {this.pageBody.find('.page-category-list').page_category_list();},
	destroyPageCategoryList: function () {this.pageBody.find('.page-category-list').page_category_list('destroy');},
	// Messager
	createMessager: function() {
		this.pageBody.find('.messager').each(function() {
			if (!$(this).attr('static')) {
				var object = $(this); object.unbind(); 
				object.bind('click', function() {$(this).slideUp('slow');});
				$.timer(3000, function (timer) {object.slideUp('slow'); timer.stop();});
			}
		});
	}, 
	// Recreate Body Content
	recreateBodyContent: function(content) {
		this.destroyBodyContent();
		this.pageBodyContent.html(content);
		this.createBodyContent();
	}, 
	// Create Body Content
	createBodyContent: function() {
		this.createMessager();
	}, 
	// Destroy Body Content
	destroyBodyContent: function() {}, 
	getUID: function() {
		var newDate = new Date;
		return newDate.getTime();
	}, 
	loadBodyContentHandler: function(responce, arguments) {
		if (responce.redirect_url) {
			window.location = responce.redirect_url;
			return true;
		}
		if (responce.result && responce.html) {
			this.recreateBodyContent(responce.html);
		}
		if (arguments.onLoad) arguments.onLoad();
		this.fixHeight();
	}, 
	loadBodyContent: function(url, onLoad) {
		var self = this;
		$.request({
			url: url, scope: self, func: self.loadBodyContentHandler, 
			container: self.pageBodyContent, arguments: {onLoad: onLoad}
		});
	}, 
	searchKeyword: function(keyword) {}, 
	// Body
	createBody: function() {
		this.createLeftSideBar();
		this.createPageCategoryList();
		this.createBodyContent();
	}, 
	destroyBody: function() {
		this.destroyBodyContent();
		this.destroyLeftSideBar();
		this.destroyPageCategoryList();
	}, 
	create: function() {
		this.createHeader();
		this.createBody();
	}, 
	destroy: function() {
		this.destroyHeader();
		this.destroyBody();
	}, 
	getPageOptions: function() {return {page: {widget: this.options.widget, object: this.element}};}
});
$.ui.page.defaults.extend({
	widget: 'manage_user_customer_page', 
	headerSelector: '#header', bodySelector: '#body', bodyContentSelector: '.body-content', footerSelector: '#footer'
});

$(function(){
	if($.browser.msie && $.browser.version == '8.0'){}else{
		DD_belatedPNG.fix('#body-content-top, #body-content-middle, #body-content-bottom');
	}
});