var AdministrationCore = function(){
	
	this.language;
	this.host_url;
	this.shadowbox;
	this.loaded_js = {};
	this.loaded_js_handlers = {};
	this.tinyMCEinstances = new Array();
	this.AUTO_FILL_LOG = new Array();
	this.CONTENT_DIV = '#content_body';
	this.EDITOR_DIV = '.adminEditorRightPanel';
	this.EDITOR_DIV_TITLE = '.adminEditorRightPanelTitle';
	this.CONTEXT_MENU = 'contextMenuBox';
	this.ajaxDialogSelector = '#ajax-admin-form-dialog'; // NB! dont forget to change in the initAjaxDialog function
	this.CSS_FOLDER = 'css/';
	this.JS_FOLDER = 'scss/js/';
	this.IMAGES_FOLDER = 'scss/images/';
	
	this.tinyMCESimpleSettings = {
		  mode: "none"
		, theme: "advanced"
		, theme_advanced_toolbar_location: "top"
		, theme_advanced_toolbar_align: "left"
		, theme_advanced_resizing : true
		, skin: "o2k7"
		, skin_variant: "silver"
		, theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect"
		, extended_valid_elements: "iframe[src|width|height|frameborder|scrolling|marginheight|marginwidth|name|align],div[rel|align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]"
		, force_br_newlines : true
		, forced_root_block: ''
		, force_p_newlines: false
		, relative_urls : true
		, content_css : "css/tinyMCE.css"
		, setupcontent_callback: function(editor_id, body, doc) {
	    	if(jQuery.browser.msie) {
	    		jQuery('#' + editor_id + '_tbl').css('height', '50%');
	    	}
	    	jQuery('#' + editor_id + '_ifr').css('height', '100%');
	    }
	};
	
	this.tinyMCEAdvancedSettings = {
		// General options
		mode : "none",
		theme : "advanced",
		skin : "o2k7",
		skin_variant : "silver",
		plugins : "cmssmartform,cmspages,cmsgallery,cmsfiles,cmsimages,safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
	
		// Theme options
		theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
		theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
		theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
		theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
		theme_advanced_buttons5 : "cmsfiles,|,cmsimages,|,cmsgallery,|,cmspages,|,cmssmartform",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_statusbar_location : "bottom",
		theme_advanced_resizing : true,
		theme_advanced_resizing_use_cookie : false,
		theme_advanced_fonts : "Arial=arial,helvetica,sans-serif;"+
			"Arial Black=arial black,avant garde;"+
			"Comic Sans MS=comic sans ms,sans-serif;"+
			"Calibri =calibri;"+
			"Courier New=courier new,courier;"+
			"Helvetica=helvetica;"+
			"Tahoma=tahoma,arial,helvetica,sans-serif;"+
			"Times New Roman=times new roman,times;"+
			"Trebuchet MS=trebuchet ms,geneva;"+
			"Verdana=verdana,geneva;"+
			"Wingdings=wingdings,zapf dingbats",
			
		extended_valid_elements: "iframe[src|width|height|frameborder|scrolling|marginheight|marginwidth|name|align],div[rel|align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]",
		
		force_br_newlines : true, 
		forced_root_block: '', 
		force_p_newlines: false,
	
		// Drop lists for link/image/media/template dialogs
		template_external_list_url : "lists/template_list.js",
		external_link_list_url : "lists/link_list.js",
		external_image_list_url : "lists/image_list.js",
		media_external_list_url : "lists/media_list.js",
		
		//save_callback: "postForm",
		relative_urls : false, 
		convert_urls : false,
		content_css : "css/tinyMCE.css",
		
		class_filter : function(cls, rule) {
	        // Block the someClass
	        if (cls == 'galleryBox')
	            return false;

	        // Swap the otherClass
	        if (cls == 'otherClass')
	            return 'someOtherClass';

	        // Skip classes that are inside id like #id .myclass
	        if (/^#.*/.test(rule))
	            return false;

	        // Pass though the rest
	        return cls;
	    },
	    
	    setupcontent_callback: function(editor_id, body, doc) {
	    	if(jQuery.browser.msie) {
	    		jQuery('#' + editor_id + '_tbl').css('height', '50%');
	    	}
	    	jQuery('#' + editor_id + '_ifr').css('height', '100%');
	    },
	
		// Replace values for the template plugin
		template_replace_values : {
			username : "Some User",
			staffid : "991234"
		}
	};		
	
	/* select pagination num*/
	
	this.changePagingNum = function () {
		$('.cms-qty-page-item-set').click( function(){
			cmsCookieManager.set("panginationSet", $(this).attr('rel'));
			
			$('.cms-qty-page-item-set').removeClass('active');
			$(this).addClass('active');	
			$('#pangination_set').val($(this).attr('rel'));
		});
	}
	
	/* Init Actions */
	this.init = function(c_lang, c_url, c_shadowbox, c_css_client, c_css_admin) {
		 
		if(typeof(c_lang) != 'undefined' && c_lang != '') this.language = c_lang;
		if(typeof(c_url) != 'undefined' && c_url != '') this.setURL(c_url);
		if(typeof(c_shadowbox) != 'undefined' && c_shadowbox != '') this.setShadowbox(c_shadowbox);
		
		var cssTinyMCE = '';
		
		// add client css, for admin code
		if((typeof(c_css_client) != 'undefined' && c_css_client != '')) cssTinyMCE  =  c_css_client + "tinyMCE.css";
		
		// add admin css, for admin code
		if((typeof(c_css_admin) != 'undefined' && c_css_admin != '')) {
			if(cssTinyMCE == '') cssTinyMCE  =  c_css_admin + "tinyMCE.css";
			else cssTinyMCE  =  cssTinyMCE + ',' + c_css_admin + "tinyMCE.css";
		}
		
		if(cssTinyMCE != '') this.tinyMCEAdvancedSettings.content_css = cssTinyMCE;
		
		// TODO Add me
		//this.tinyMCEAdvancedSettings.template_external_list_url = this.getURL('page', 'templates', {layout: 'ajax', type: 'tinyMCE'});
		
		cmsAdministration.loadJS('jquery-plugins/jquery.cookie.js');
		cmsAdministration.loadJS('jquery-plugins/jquery.json-2.2.js');
		
		cmsAdministration.loadJS('jquery-plugins/jquery.contextmenu.r2.js', function() { 
			cmsAdministration.initEditInPlace(".cms-translation-item", "admintranslations", "translationSaveInPlace", { layout: 'ajax', lang: cmsAdministration.language });
			cmsAdministration.initContentEditInPlace(".cms-page-edit", "adminmenu", "menuEditContentInPlace", { layout: 'ajax', menu_lang: cmsAdministration.language });
		});
		
		cmsAdministration.loadJS('jquery-plugins/jquery-ui.js', function() { 
			cmsAdministration.initDialogWindowButtons();
			cmsAdministration.initDialogWindowResize();
			cmsAdministration.initDialogWindowDraggable();
		});
		
		this.changePagingNum();
	}
	
	this.initDialogWindowDraggable = function() {
		var draggableWindowID = '.draggableWindow';
		var activateWindowID  = '.activateDragWindow';
		var dragInitParametrs = {};
		
		$(activateWindowID).each( function () {
			var item = this;
			
			$(item).mouseover( function () {
				$(this).parents(draggableWindowID + ':first').draggable();
			}).mouseout( function () {
				$(this).parents(draggableWindowID + ':first').draggable( 'destroy' );
			});
		});
		
	}
	
	
	this.initDialogWindowResize = function() {
		var resize_window_params = {
			minWidth: 350
			, minHeight: 100
			, stop: function(event, ui) { 
			
				var id = $(cmsAdministration.getEventTarget(event)).attr('id');
				if(typeof(id) == 'undefined' || id.length == 0) id = $(cmsAdministration.getEventTarget(event)).attr('class');
				
				cmsCookieManager.set(id + "_width", ui.size.width);
				
				cmsCookieManager.set(id + "_height", ui.size.height);
				
			} 
		};
		
		jQuery(".resizableWindow").each(function(i, val){
			jQuery(this).resizable(resize_window_params);

			var id = $(this).attr('id');
			if(typeof(id) == 'undefined' || id.length == 0) id = $(this).attr('class');
			
			var width = cmsCookieManager.get(id + "_width");
			var height = cmsCookieManager.get(id + "_height");
			
			if(width != null && height != null) {
				$(this).css('width', width + 'px');
				$(this).css('height', height + 'px');
			}
		});
		
	}

	this.initDialogWindowButtons = function(){
		/* Hover action for close window button  */
		$(".cms-sys-button-close-box div.cms-sys-button-close").hover(function () {
			$(this).removeClass('cms-sys-button-close');
			$(this).addClass('cms-sys-button-close-hover');
		}, function(){
			$(this).removeClass('cms-sys-button-close-hover');
			$(this).addClass('cms-sys-button-close');
		});

		/* Close action for menu window  */
		$(".cms-sys-button-close-box div.cms-menu-main-window").click(function () {
			cmsAdministration.removeTinyMCE('', '.adminEditorLeftPanel');
			cmsAdministration.removeTinyMCE('', '.adminEditorRightPanel');
			$(".adminEditorLeftPanel").html('');
			$(".adminEditorRightPanel").html('');
			window.parent.location.reload();
		});
		
		/* Close action for dialog window  */
		$(".cms-sys-button-close-box div.cms-menu-dialog-window").click(function () {
			cmsAdministration.removeTinyMCE('', '.adminEditorRightPanel');
			$(".adminEditorRightPanel").html('');
		});
		
		/* Close action for dialog window  */
		$(".cms-sys-button-close-box div.cms-main-middle-window").click(function () {
			cmsAdministration.removeTinyMCE('', '.adminEditorMiddlePanel');
			$(".adminEditorMiddlePanel").html('');
			window.parent.location.reload();
		});		
	}
	
	this.initTinyMCE = function(){
		tinyMCE.init(this.tinyMCEAdvancedSettings);
	}
	
	this.initTabs = function(element_id, tabsShow, tabsNeiborShow){
		
		if(typeof(tabsNeiborShow) == 'undefined' ) tabsNeiborShow = 1;
		
		var selectedTabID = 0;
		if(typeof(tabsShow) != 'undefined') selectedTabID = tabsShow;
			
		var prevButtonID = 'prev-button-' + element_id;
		var nextButtonID = 'next-button-' + element_id;
		
		cmsAdministration.loadJS('jquery-plugins/jquery-ui.js', function() {
			$("#" + element_id).tabs({panelTemplate: '<div style="height: 100%;"></div>'});
			$("#" + element_id).tabs('select', selectedTabID);
			$("#" + element_id).tabs( "option", "selected", selectedTabID );
			$("#" + element_id).tabs( "option", "selected", selectedTabID );
			
			if($("#" + element_id).length > 0) {
				var maxTabId = $("#" + element_id).tabs('length') - 1;
			} else {
				var maxTabId = 0;
			}
			
			if(maxTabId != 0){
				$("#" + element_id).append('<div id="' + prevButtonID +'" class="cms-tabs-arrow-left disabled"></div>');
				$("#" + element_id).append('<div id="' + nextButtonID +'" class="cms-tabs-arrow-right"></div>');
			}
			
			//change tab position by select
			$("#" + element_id).bind('tabsshow', function(event, ui) {
				selectedTabID = $("#" + element_id).tabs( "option", "selected" );
				cmsAdministration.showTabs(element_id, selectedTabID, maxTabId, tabsNeiborShow, prevButtonID, nextButtonID);
			});
			
			//change tab position by left arrow
			$("#" + prevButtonID).click( function (){
				if( selectedTabID  > 0 ){
					selectedTabID -= 1;
					$("#" + element_id).tabs('select', selectedTabID);
					//cmsAdministration.showTabs(element_id, selectedTabID, maxTabId, tabsNeiborShow, prevButtonID, nextButtonID);	
				}	
			});
			
			//change tab position by right arrow
			$("#" + nextButtonID).click( function (){
				if( (selectedTabID + 1) <= maxTabId){
					selectedTabID += 1;
					
					$("#" + element_id).tabs('select', selectedTabID);
					$("#" + element_id).tabs( "option", "selected", selectedTabID );
					
					//cmsAdministration.showTabs(element_id, selectedTabID, maxTabId, tabsNeiborShow, prevButtonID, nextButtonID);
				}
			});
			
			cmsAdministration.showTabs(element_id, selectedTabID, maxTabId, tabsNeiborShow, prevButtonID, nextButtonID);
		});
	}
	

	this.showTabs = function(element_id, selectedTabID, maxTabId, tabsNeiborShow, prevButtonID, nextButtonID){
		var a =  new Array();
		
		var hideTabs = true;
		if(tabsNeiborShow == 0) hideTabs = false;
		
		var limitFrom;
		var limitTo;

		if(selectedTabID <= tabsNeiborShow){
			limitFrom = 0;
			limitTo = 2*tabsNeiborShow + 1;
		}else if( selectedTabID >= (maxTabId - tabsNeiborShow)){
			limitFrom = maxTabId - 2*tabsNeiborShow;
			limitTo = maxTabId + 1;
		}else {
			limitFrom = selectedTabID - tabsNeiborShow;
			limitTo = selectedTabID + tabsNeiborShow + 1;
		}
		
		if(hideTabs){
			var index = 0;
			for(var i = 0; i <= maxTabId; i ++){
				if( limitFrom <= i && i < limitTo ){
					continue;
				}else {
					a[index] = i;
					index++;
				}
			}
		}
		$("#" + element_id).tabs( "option", "disabled", a);

		if(selectedTabID == 0){
			$("#" + prevButtonID).addClass('disabled');
		}else{
			$("#" + prevButtonID).removeClass('disabled');
		}

		if(	selectedTabID == maxTabId){
			$("#" + nextButtonID).addClass('disabled');
		}else {
			$("#" + nextButtonID).removeClass('disabled');
		}	
	}
	
	this.initSelectTabs = function(element_id, custom_params, select_handler, CS_style){
		if(typeof(select_handler) == 'undefined')
		{
			select_handler = function(obj, element){
				jQuery( $('#' + obj).data('options').params.e_overall ).hide();
				jQuery('#' + $('#' + obj).data('options').params.e_pref + jQuery(element).attr('vl') ).show();
			};
		}
		
		if(typeof(CS_style) == 'undefined') CS_style = 'CS_select';
		
		cmsAdministration.loadJS('jquery-plugins/jquery.customselect.js', function() {
			jQuery('#' + element_id).customSelect({
				selectImage: './scss/images/'+ CS_style + '_select_box_icon.png'
				,defaultIcon: './scss/images/CS_select_box_grey.jpg'
				,e_id: element_id
				,params: custom_params
				,selectStyle: CS_style
				,onSelect: select_handler
			});
		});
	}
	
	this.initAccordion = function(active_element)
	{
		$("#accordion").accordion({
			header: "h3",
			animated: false,
			autoHeight: false,
			collapsible: true,
			active: active_element
		});
	}
	
	this.initSelectComplete = function(element_selector, data_url, allow_newel, onSelectHandler, onRemoveHandler) 
	{
		if(typeof(allow_newel) == 'undefined') allow_newel = true;
		if(typeof(onSelectHandler) != 'function') onSelectHandler = '';
		if(typeof(onRemoveHandler) != 'function') onRemoveHandler = '';
		
		cmsAdministration.loadJS('jquery-plugins/jquery.fcbkcomplete.js', function() {
			$(element_selector).fcbkcomplete({
	        	json_url: data_url,
	        	json_cache: false,
		        cache: false,
		        height: "10",
		        newel: allow_newel,
				firstselected: true,
		        filter_case: true,
		        filter_hide: true,
		        complete_text: "Start to type...",
				maxshownitems:  30,
				onselect: onSelectHandler,
				onremove: onRemoveHandler
			});
		});
	}
	
	this.initSelectCombo = function(element_selector, target_element_selector, application, action, params, settings) {
		cmsAdministration.loadJS('jquery-plugins/jquery.selectCombo.js', function() {
			$(element_selector).selectCombo(
				cmsAdministration.getURL(application, action, params)
				, target_element_selector
				, settings
			);
		});
	}
	
	this.initLoading = function()
	{
		$("body").append("<div id='loading-box'><span class='ui-icon-loading' style='float: left; margin-right: 0.3em;'/>" + $t('msg.loading') + "</div>");
		
		cmsAdministration.loadJS('jquery-plugins/jquery-ui.js', function() {
			$("#loading-box").dialog({
				autoOpen: false,
				bgiframe: true,
				closeOnEscape: false,
				draggable: false,
				modal: true,
				resizable: false,
				minHeight: 10,
				title: $t('lbl.loading')
			});
		});
	}
	
	this.initError = function()
	{
		$("body").append("<div id='error-box' title='" + $t('msg.error') + "'><div id='error-message' class='ui-state-error ui-corner-all'></div></div>");
		
		var dialog_buttons = {};
		dialog_buttons[$t('button.ok', '', false)] = function() {
			$(this).dialog('close');
		};
		
		$("#error-box").dialog({
			autoOpen: false,
			bgiframe: true,
			draggable: false,
			modal: true,
			resizable: false,
			minHeight: 10,
			buttons: dialog_buttons
		});
	}
	
	this.initMessage = function()
	{
		$("body").append("<div id='message-box' title='" + $t('msg.message') + "'><div id='message' class='ui-state-highlight ui-corner-all'></div></div>");
		
		var dialog_buttons = {};
		dialog_buttons[$t('button.ok', '', false)] = function() {
			$(this).dialog('close');
		};
		
		$("#message-box").dialog({
			autoOpen: false,
			bgiframe: true,
			draggable: false,
			modal: true,
			resizable: false,
			minHeight: 10,
			buttons: dialog_buttons
		});
	}
	
	this.initConfirm = function()
	{
		$("body").append("<div id='confirm-box' title='" + $t('msg.confirm') + "'><div id='confirm-message' class='ui-corner-all'></div></div>");
		
		var dialog_buttons = {};
		dialog_buttons[$t('button.yes', '', false)] = function() {
			$(this).dialog('close');
			var success_handler = $("#confirm-box").data('success_handler');
			success_handler();			
		};
		dialog_buttons[$t('button.no', '', false)] = function() {
			$(this).dialog("close");
			var cancel_handler = $("#confirm-box").data('cancel_handler');
			cancel_handler();
		};
		
		$("#confirm-box").dialog({
			autoOpen: false,
			bgiframe: true,
			draggable: false,
			modal: true,
			resizable: false,
			minHeight: 10,
			buttons: dialog_buttons
		});
	}
	
	this.initAjaxDialog = function()
	{
		$("body").append("<div id='ajax-admin-form-dialog'></div>");
	}	
	
	this.initAdminPanel = function(panelID)
	{
		// Add shadow to panel
		//$("#" + panelID).dropShadow({left: -4, top: 4});

		
		
		// Init left arrow click
		$('.adminPanelArrowRight', $("#" + panelID)).click(function(){			
			if($('.adminPanelButtonHidden + .adminPanelButton:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).length > 0 && $('.adminPanelButton:last + .adminPanelButtonHidden', $('.adminPanelControlls', $(this).parents('#' + panelID))).length > 0)
			{
				$('.adminPanelButton:last + .adminPanelButtonHidden', $('.adminPanelControlls', $(this).parents('#' + panelID))).show().addClass('adminPanelButton').removeClass('adminPanelButtonHidden');
				$('.adminPanelButtonHidden + .adminPanelButton:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).hide().addClass('adminPanelButtonHidden').removeClass('adminPanelButton');
			
			}
			
			if($('.adminPanelButtonHidden + .adminPanelButton:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).length == 0 && $('.adminPanelButtonHidden:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).length > 0)
			{
				$('.adminPanelButtonHidden:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).show().addClass('adminPanelButton').removeClass('adminPanelButtonHidden');
				$('.adminPanelButton:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).hide().addClass('adminPanelButtonHidden').removeClass('adminPanelButton');
			}

			if($('.adminPanelButton:last + .adminPanelButtonHidden', $('.adminPanelControlls', $(this).parents('#' + panelID))).length > 0){
				$('.adminPanelArrowRight', $("#" + panelID), $(this)).removeClass('adminPanelArrowRight-None');
				$('.adminPanelArrowRight', $("#" + panelID), $(this)).addClass('adminPanelArrowRight-Active');
			}else{
				$('.adminPanelArrowRight', $("#" + panelID), $(this)).removeClass('adminPanelArrowRight-Active');
				$('.adminPanelArrowRight', $("#" + panelID), $(this)).addClass('adminPanelArrowRight-None');
			}
			
			if($('.adminPanelButton:first + .adminPanelButtonHidden', $('.adminPanelControlls', $(this).parents('#' + panelID))).length > 0){
				$('.adminPanelArrowLeft', $("#" + panelID), $(this)).removeClass('adminPanelArrowLeft-Active');
				$('.adminPanelArrowLeft', $("#" + panelID), $(this)).addClass('adminPanelArrowLeft-None');
			}else{
				$('.adminPanelArrowLeft', $("#" + panelID), $(this)).removeClass('adminPanelArrowLeft-None');
				$('.adminPanelArrowLeft', $("#" + panelID), $(this)).addClass('adminPanelArrowLeft-Active');
			}
			
			cmsAdministration.initAdminPanelHint(panelID);
		});
		
		// Init right arrow click
		$('.adminPanelArrowLeft', $("#" + panelID)).click(function(){
			if($('.adminPanelButtonHidden + .adminPanelButton:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).prev().length > 0 && $('.adminPanelButton:last + .adminPanelButtonHidden', $('.adminPanelControlls', $(this).parents('#' + panelID))).prev().length == 0){
				$('.adminPanelButtonHidden + .adminPanelButton:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).prev().show().addClass('adminPanelButton').removeClass('adminPanelButtonHidden');
				$('.adminPanelButton:last', $('.adminPanelControlls', $(this).parents('#' + panelID))).hide().addClass('adminPanelButtonHidden').removeClass('adminPanelButton');
			}
			
			if($('.adminPanelButtonHidden + .adminPanelButton:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).prev().length > 0 && $('.adminPanelButton:last + .adminPanelButtonHidden', $('.adminPanelControlls', $(this).parents('#' + panelID))).prev().length > 0)
			{
				$('.adminPanelButtonHidden + .adminPanelButton:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).prev().show().addClass('adminPanelButton').removeClass('adminPanelButtonHidden');
				$('.adminPanelButton:last + .adminPanelButtonHidden', $('.adminPanelControlls', $(this).parents('#' + panelID))).prev().hide().addClass('adminPanelButtonHidden').removeClass('adminPanelButton');
			}
			
			if($('.adminPanelButtonHidden + .adminPanelButton:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).length >= 0){
				$('.adminPanelArrowRight', $("#" + panelID), $(this)).removeClass('adminPanelArrowRight-None');
				$('.adminPanelArrowRight', $("#" + panelID), $(this)).addClass('adminPanelArrowRight-Active');
			}else{
				$('.adminPanelArrowRight', $("#" + panelID), $(this)).removeClass('adminPanelArrowRight-Active');
				$('.adminPanelArrowRight', $("#" + panelID), $(this)).addClass('adminPanelArrowRight-None');
			}
			
			
			if($('.adminPanelButtonHidden + .adminPanelButton:first', $('.adminPanelControlls', $(this).parents('#' + panelID))).length > 0){
				$('.adminPanelArrowLeft', $("#" + panelID), $(this)).removeClass('adminPanelArrowLeft-None');
				$('.adminPanelArrowLeft', $("#" + panelID), $(this)).addClass('adminPanelArrowLeft-Active');
			}else{
				$('.adminPanelArrowLeft', $("#" + panelID), $(this)).removeClass('adminPanelArrowLeft-Active');
				$('.adminPanelArrowLeft', $("#" + panelID), $(this)).addClass('adminPanelArrowLeft-None');
			}
			
			cmsAdministration.initAdminPanelHint(panelID);
		});
		
		$('.adminPanelButton', $("#" + panelID)).hover(function() {
			$(this).addClass('iconHover');
		}, function(){
			$(this).removeClass('iconHover');
		});
		
		$('.adminPanelButtonHidden', $("#" + panelID)).hover(function() {
			$(this).addClass('iconHover');
		}, function(){
			$(this).removeClass('iconHover');
		});
		
		this.initAdminPanelHint(panelID);
		
		if(cmsCookieManager.get("admin_panel_status") == 'hidden') {
			$("#adminPanel .adminPanelLine").hide();
			$("#adminPanel-hidden").show();
		}
	}
	
	this.initAdminPanelHint = function(panelID) {
		$('.adminPanelButton', $("#" + panelID)).hover(
			function() {
				$('.adminPanelDDMenu', this).css('top', $(this).position().top + 50 );
				$('.adminPanelDDMenu', this).css('left', $(this).position().left - ($('.adminPanelDDMenu', this).width() / 2) + 35);
				$('.adminPanelDDMenu-arrow', $('.adminPanelDDMenu', this)).css('left', ($('.adminPanelDDMenu', this).width() / 2) - 4 );
				$('.adminPanelDDMenu', this).show();
				
				$('.adminPanelDDMenu', this).hover(function() {
					$('.adminPanelDDSubMenu', this).show();
					
					$('.adminPanelDDSubMenu', this).css('width', $('.adminPanelDDSubMenu-Container', this).width() + 32);
					$('.adminPanelDDSubMenu', this).css('height', $('ul:first',$('.adminPanelDDSubMenu-Container', this)).height() + 55);
					
					$('.adminPanelDDSubMenu-arrow', this).css('left', ($('.adminPanelDDSubMenu', this).width() / 2) - 4 );
					
					$('.adminPanelDDSubMenu', this).css('top', $(this).position().top - 10 );
					$('.adminPanelDDSubMenu', this).css('left', ($(this).width() / 2) - ($('.adminPanelDDSubMenu', this).width() / 2)  );
				},
				function() {
					$('.adminPanelDDSubMenu', this).fadeOut('fast');
				});
			},
			function() {
				$('.adminPanelDDMenu', this).fadeOut('fast');
			}
		);
	}
	
	this.adminPanelButtonsActions = function() {
	/* Hover action for hide and show admin panel buttons  */
		$("#button-show").hover(function () {
			$(this).removeClass('button-show');
			$(this).addClass('button-show-hover');
		}, function(){
			$(this).removeClass('button-show-hover');
			$(this).addClass('button-show');
		});
		$("#button-hide").hover(function () {
			$(this).removeClass('button-hide');
			$(this).addClass('button-hide-hover');
		}, function(){
			$(this).removeClass('button-hide-hover');
			$(this).addClass('button-hide');
		});
	
	/*  Hide, show admin panel  */
		$("#button-hide").click(function () {
			$("#adminPanel .adminPanelLine").effect('slide',{ direction:'up', mode:'hide' },440,function(){
				cmsCookieManager.set("admin_panel_status", "hidden");
				$("#adminPanel-hidden").effect('slide',{ direction:'up', mode:'show' },440,function(){
					if(typeof(cmsAdministration.shadowbox) != 'undefined' && cmsAdministration.shadowbox != '') cmsAdministration.shadowbox.close();
				});
			});
		});

		$("#button-show").click(function () {
			var iframe = $('#sb-body-inner iframe').contents().find("body");
			
			$("#adminPanel-hidden").effect('slide',{ direction:'up', mode:'hide' },440,function(){
				cmsAdministration.removeTinyMCE('', '.adminEditorLeftPanel',  iframe);
				cmsAdministration.removeTinyMCE('', '.adminEditorRightPanel', iframe);
				cmsAdministration.removeTinyMCE('', '.adminEditorMiddlePanel', iframe);
				
				$(".adminEditorLeftPanel", iframe).html('');
				$(".adminEditorRightPanel", iframe).html('');
				$(".adminEditorMiddlePanel", iframe).html('');
				
				$("#adminPanel .adminPanelLine").effect('slide',{ direction:'up', mode:'show' },440,function(){
					cmsCookieManager.set("admin_panel_status", "visible");
				});
			});
		});
	}	
	
	this.initToolTips = function(element){
		cmsAdministration.loadJS('jquery-plugins/jquery.tooltip.js', function() { 
			jQuery(element).each(function(i, val) {
				var element_id = $(this).attr('id');
				if(element_id.length == 0) $(this).attr('id', 'tip_' + cmsAdministration.randomString(10));
				
				$('#' + $(this).attr('id')).tooltip({ 
					track: true, 
				    delay: 0, 
				    showURL: false, 
				    showBody: " - ", 
				    fade: 250 
				});
			});
		});
	}
	
	this.initImageBox = function(element_selector) {
		cmsAdministration.loadJS('jquery-plugins/jquery.fancybox.js', function() { 
			jQuery(element_selector).fancybox({ 
				 'zoomSpeedIn': 300
				 , 'zoomSpeedOut': 300
				 , 'overlayShow': false 
			}); 
		});
	}
	
	this.initAsmSelect = function(element_selector, handler){
		if(typeof(handler) != 'function') handler = false;
		cmsAdministration.loadJS('jquery-plugins/jquery.filter.js', function() { 
			cmsAdministration.loadJS('jquery-plugins/jquery.asmselect.js', function() { 
				$(element_selector).asmSelect({
					addItemTarget: 'bottom',
					animate: true,
					highlight: false,
					sortable: false,
					filter: true,
					filterClass: 'asmFilter',
					removeLabel: '',
					dropListItemHandler: handler
				});
			});
		});
	}
	
	this.initSimpleTree = function(element_selector, addHandler, editHandler, deleteHandler, activateHandler, deActivateHandler, BindingDrawHandler, MenuOnShowHandler) {
		if(typeof(addHandler) != 'function') addHandler = false;
		if(typeof(editHandler) != 'function') editHandler = false;
		if(typeof(deleteHandler) != 'function') deleteHandler = false;
		if(typeof(activateHandler) != 'function') activateHandler = false;
		if(typeof(deActivateHandler) != 'function') deActivateHandler = false;
		if(typeof(BindingDrawHandler) != 'function') {
			BindingDrawHandler = function(event, binding, func) {
				if(binding == 'activate' && jQuery(cmsAdministration.getEventTarget(event)).parent().hasClass('activeIcon')) {
					return false;
				}
				if(binding == 'deActivate' && jQuery(cmsAdministration.getEventTarget(event)).parent().hasClass('deActiveIcon')) {
					return false;
				}	
				return func;
			};
		}
		if(typeof(MenuOnShowHandler) != 'function') {
			MenuOnShowHandler = function(e, menu) {
				if($(e.target).hasClass('pop-menu-ignore')) {
					return false;
				} else {
					$(e.target).click(); // make the item active
					return menu;
				}
			};
		}
		
		var contextMenu = false;
		if(addHandler || editHandler || deleteHandler || activateHandler || deActivateHandler) contextMenu = 'contextMenuBox';
		
		cmsAdministration.loadJS('jquery-plugins/jquery.contextmenu.r2.js');
		
		cmsAdministration.loadJS('jquery-plugins/jquery.simple.tree.js', function() {
			jQuery(element_selector).simpleTree({
				drag: false,
				animate: true,
				afterAjax: false,
				afterMove: false,
				afterClick: false,
				afterDblClick: false,
				imagesFolder: cmsAdministration.IMAGES_FOLDER + 'menu_tree/',
				docToFolderConvert: false,
				contextMenu: contextMenu,
				contextMenuShadow: false,
				contextMenuDoAdd: addHandler,
				contextMenuDoEdit: editHandler,
				contextMenuDoDelete: deleteHandler,
				contextMenuDoActivate: activateHandler,
				contextMenuDoDeActivate: deActivateHandler,
				contextMenuOnBindingDraw: BindingDrawHandler,
				contextMenuOnShow: MenuOnShowHandler,
				afterMove: false
			});
		});
	}
	
	this.initSelectBox = function(element_selector) {
		cmsAdministration.loadJS('jquery-plugins/jquery.selectbox-0.6.1.js', function() {
			jQuery(element_selector).selectbox({replaceInvisible: true});
		});
	}
	
	/*
	this.initSelectBox = function(element_selector) {
		cmsAdministration.loadJS('jquery-plugins/jquery-ui.js', function() {
			cmsAdministration.loadJS('jquery-plugins/ui.selectmenu.js', function() {
				jQuery(element_selector).selectmenu({
					style:'dropdown'
					, maxHeight: 150
				});
			});
		});
	}*/
	
	this.initMultipleSelect = function(element_selector, wrapper, changeHandler, additional_params) {
		if(typeof(wrapper) == 'undefined' || wrapper == false) wrapper = ".select_wrap";
		if(typeof(changeHandler) != 'function') changeHandler = false;
		
		var default_params = {
				isscrolling: 	true,				//scrolls long lists
				scrollminitems:	5,					//items before scrolling
				scrollheight:	150,				//height of scrolling window
				preopenselect:	false,				//opens prechecked select boxes
				hideselected:	true,
				hoverstyle:		"hover",			//css hover style name
				openspeed:		false,			//selectbox open speed "slow","normal","fast" or numbers 1000
				alldisabled:	false,				//disables the selectbox
				selectwidth:	"auto",				//set width of selectbox
				showSelection:	true,
				allowEmptySelection: false, 
				closeOnChange: 	true,
				onChange:		changeHandler,
				wrappername:	wrapper				
		};
		
		jQuery.extend(default_params, additional_params);
		
		cmsAdministration.loadJS('jquery-plugins/jquery.custom_select.js', function() {
			jQuery(element_selector).custSelectBox(default_params);			
		});
	}
	
	this.initDateField = function(main_filed_selector){
		cmsAdministration.loadJS('jquery-plugins/jquery-ui.js', function() {
			$(main_filed_selector).datepicker({
				changeMonth: true
				,changeYear: true
				,dateFormat: 'dd.mm.yy'
				,showButtonPanel: true
				,closeText: $t('button.close')
				,currentText: $t('button.today')
			});	
		});
	}
	
	this.initDateTimeField = function(field_selector) {
		cmsAdministration.loadJS('jquery-plugins/jquery-ui.js', function() {
			cmsAdministration.loadJS('jquery-plugins/ui.datetimepicker.js', function() {
				jQuery(field_selector).datetimepicker({ 
					changeMonth: true
					,changeYear: true
					,dateTimeFormat: 'dd.mm.yy hh:ii'
				});
			});
		});
	}

	this.initDateRange = function(main_filed_selector, start_field_selector, end_field_selector){
		cmsAdministration.loadJS('jquery-plugins/datepicker.js', function() {
			$(main_filed_selector).DatePicker({
				format:'d.m.Y',
				date: new Date(),
				current: new Date(),
				starts: 1,
				position: 'bottom',
				calendars: 3,
				mode: 'range',
				onBeforeShow: function(){
					if($(main_filed_selector).val().length > 0) {
						$(main_filed_selector).DatePickerSetDate( $(main_filed_selector).val().split(' - ') , true);
					}
				},
				onChange: function(formated, dates){
					$(main_filed_selector).val( formated.join(' - ') );
					$(start_field_selector).val( formated[0] );
					$(end_field_selector).val( formated[1] );
				}
			});	
		});
	}
	
	this.initEditInPlace = function(element_selector, application, action, params) {
		$(element_selector).data('application', application);
		$(element_selector).data('action', action);
		$(element_selector).data('params', params);
		
		this.addContextMenu(element_selector, {
			'editInPlace': function(trig, target, contextMenu) {
				// check if the editor is allready initialized
				if($('#inPlaceEditorForm', $('#editInPlace', contextMenu)).length > 0) return;
				
				var id = $(trig).attr('id');
				var value = $(trig).html();
				
				$('#editInPlace', contextMenu).html("<div style='position: relative;'><form id='inPlaceEditorForm'><input type='hidden' name='id' value='"+id+"' /><div class=\"cms-pop-input-on-dark-left\" style='float: left; z-index: 20005;'><div class=\"cms-pop-input-on-dark-right\"><div class=\"cms-pop-input-on-dark\"><input id=\"cms-edit-in-place-input\" style=\"z-index: 10;\" type='text' alt=\"" + element_selector + "\" name='value' value='"+value+"' /></div></div></div><div id='cms-editInPlace' class='adminContextMenuIconFormSave' style=\"margin-left: 2px;\" onclick=\"cmsAdministration.saveEditInPlace('"+element_selector+"', event); return false;\" ></div></form></div>");
				$('#cms-edit-in-place-input', contextMenu).focus();
				$('#cms-edit-in-place-input', contextMenu).keypress(function(e) {
					switch(e.keyCode){
						case 13:{//Enter
							cmsAdministration.saveEditInPlace($('#cms-edit-in-place-input').attr('alt'), e);
							$('#cms-edit-in-place-input').focus();
							return false;
						}
						case 27:{//Escape 
							$('#jqContextMenu').hide();
							return false;
						}
					}
				});
			}
		});
	}
	
	this.saveEditInPlace = function(element_selector, event){
		this.stopEvent(event);
		
		var form = $('#inPlaceEditorForm');
		var id = $('input[name=id]', form).val();
		var value = $('input[name=value]', form).val();
		
		var application = $(element_selector).data('application');
		var action = $(element_selector).data('action');
		var params = $(element_selector).data('params');
		
		cmsAdministration.postForm(application, action, 'inPlaceEditorForm', params, function(response, textStatus) { 
			var response_data = cmsAdministration.pareseXMLResponse(response);
			response_data = $(response_data).find('data').text();
			if(response_data.length > 0) {
				$.each($(element_selector), function(i, val){
					if($(val).attr('id') == id) {
						$(val).html(response_data);
					}
				});
			}
			// hide edit box
			$('#jqContextMenu').hide();
		});
	}
	
	this.initContentEditInPlace = function(element_selector, application, action, params) {
		$(element_selector).data('application', application);
		$(element_selector).data('action', action);
		$(element_selector).data('params', params);
		
		this.addContextMenu(element_selector, {
			'editInPlace': function(trig, target, contextMenu) {
				// check if the editor is allready initialized
				if($('#inPlaceContentEditorForm', $('#editInPlace', contextMenu)).length > 0) return;
				
				var rel = $(trig).attr('rel');
				
				cmsAdministration.showAjaxEdit(application, action, jQuery.extend(params, { item_id: rel }), function() { }, { width: 600, height: 450 });
				$('#jqContextMenu').hide();
				return false;
			}
		});
	}
	
	this.initSortable = function(element_selector, application, action, params, success_handler) {
		jQuery(element_selector).sortable({
			stop: function(event, ui) {
				return;
				
				var c_id;
				var c_position;
				var post_params = jQuery.extend(params, { item_id: c_id, item_position: c_position  });
				
				cmsAdministration.postForm(application, action, '', {item_group: cmsItemsOrganizer.group, item_type: cmsItemsOrganizer.item_type, item_id: item_id, item_position: new_position}, function(){
					if(typeof(success_handler) == "function") success_handler(post_params);
				});
    		}
		});
	}
	
	/* Get & Load Actions */
	this.getURL = function(action, subaction, params){
		var url = this.host_url;
		
		if(action != '' && subaction != '' && typeof(action) != 'undefined' && typeof(subaction) != 'undefined')
		{
			url += "?action=" + action + "." + subaction;
		}
		
		if(params != '' && typeof(params) != 'undefined')
		{
			var additionalParams = "";
			for(key in params) {
				additionalParams += "&" + key + "=" + params[key];
			}
			url += additionalParams
		}
		
		return (typeof(url) != 'undefined') ? url : '';
	}
	
	/* Add / Set / Show Actions */
	this.setURL = function(url){
		this.host_url = url;
	}
	
	this.setShadowbox = function(shadowbox){
		this.shadowbox = shadowbox;
	}
	
	/* Add/Create a default setup tinyMCE */
	this.addTinyMCE = function(text_area_id, custom_settings, custom_params){
		if(document.getElementById(text_area_id) != null && tinyMCE.getInstanceById(text_area_id) == null) {
			if(typeof(custom_settings) != 'undefined') 
			{
				switch(custom_settings)
				{
					case 'simple':
						tinyMCE.settings = this.tinyMCESimpleSettings;
					break;
					default:
						tinyMCE.settings = custom_settings;
					break;
				}
			} else {
				tinyMCE.settings = this.tinyMCEAdvancedSettings;
			}
			
			if(typeof(custom_params) != 'undefined') tinyMCE.settings = $.extend(tinyMCE.settings, custom_params);
			tinyMCE.execCommand('mceAddControl', false, text_area_id);
			
			this.tinyMCEinstances.push(text_area_id);
		}
	}
	
	this.getTinyMCEContent = function(text_area_id){
		
	}
	
	this.updateTinyMCE = function(text_area_id, body){
		if(typeof(text_area_id) == 'undefined' || text_area_id == '')
		{
			var instanses_count = this.tinyMCEinstances.length;
			for(var i=0; i <= instanses_count; i++)
			{
				var text_area_id = this.tinyMCEinstances[i];
				if ($('#' + text_area_id, $(body)).length > 0 && tinyMCE.getInstanceById(text_area_id) != null) {
					tinyMCE.getInstanceById(text_area_id).getBody().innerHTML = $('#' + text_area_id).val();
				}
			}
			
		} else if (tinyMCE.getInstanceById(text_area_id) != null) {
			tinyMCE.getInstanceById(text_area_id).getBody().innerHTML = $('#' + text_area_id).val();
		}
	}

	/* Delete / Remove / Hide Actions */
	this.removeTinyMCE = function(text_area_id, body){
		if(typeof(text_area_id) == 'undefined' || text_area_id == '')
		{
			var instanses_count = this.tinyMCEinstances.length;
			for(var i=0; i <= instanses_count; i++)
			{
				var text_area_id = this.tinyMCEinstances[i];
				if ($('#' + text_area_id, $(body)).length > 0 && tinyMCE.getInstanceById(text_area_id) != null) {
					tinyMCE.execCommand('mceRemoveControl', false, text_area_id);
					this.tinyMCEinstances[i] = null; // remove it from the array
				}
			}
			
		} else if (tinyMCE.getInstanceById(text_area_id) != null) {
			for(var i=0; i<this.tinyMCEinstances.length; i++)
			{
				if(this.tinyMCEinstances[i] == text_area_id)
				{
					this.tinyMCEinstances.pop(i); // remove it from the array
					break;
				}
			}
			
			tinyMCE.execCommand('mceRemoveControl', false, text_area_id);
		}
	}
	
	
	this.addTinySelectList = function(text_area_id, select_name, select_values) {
		if(typeof(select_values) == 'string') {
			eval("var select_values = " + select_values);
			tinyMCE.get(text_area_id).controlManager.get(select_name).items = [];
			tinyMCE.get(text_area_id).controlManager.get(select_name).selectedValue = null;
		}
		
		if(typeof(select_values) != 'undefined')
		{
			jQuery.each(select_values, function(i, val) {

				if(document.getElementById(text_area_id) != null && tinyMCE.getInstanceById(text_area_id) != null) {
					if(tinyMCE.get(text_area_id).controlManager.get(select_name)) 
						tinyMCE.get(text_area_id).controlManager.get(select_name).add(val, i);
				}
			});
		}
		
		if (tinyMCE.get(text_area_id).controlManager.get(select_name).isMenuRendered) {
			tinyMCE.get(text_area_id).controlManager.get(select_name).menu.destroy();
			tinyMCE.get(text_area_id).controlManager.get(select_name).isMenuRendered = false;
		}
	}
	
	this.addContextMenu = function(element_selector, element_bindings, element_onBinding, element_onShow, element_onMenu){
		if(typeof(element_onShow) != 'function') element_onShow = null;
		if(typeof(element_onMenu) != 'function') element_onMenu = null;
		if(typeof(element_onBinding) != 'function') element_onBinding = null;
		
		cmsAdministration.loadJS('jquery-plugins/jquery.contextmenu.r2.js', function() {
			$(element_selector).contextMenu(cmsAdministration.CONTEXT_MENU, {
				bindings: element_bindings
				,onContextMenu: element_onMenu // NB!! return TRUE - to show the menu
				,onShowMenu: element_onShow // NB!! must return 2 param ( menu ) from function
				,onBindingDraw: element_onBinding // NB!! must return 2 param ( func ) from function or false to hide the binding
			});
		});
	}
	
	this.setButtonAction = function(element_selector, show_element, new_action) {
		// remove previous events
		$(element_selector).unbind('click');
		// add new event
		$(element_selector).bind('click', new_action);
		// show hidden element
		if(typeof(show_element) != 'undefined' && show_element != false && show_element != '') $(show_element).show();
	}
	
	this.removeButtonAction = function(element_selector, hide_element) {
		// remove previous events
		$(element_selector).unbind('click');
		// hide element
		if(typeof(hide_element) != 'undefined') $(hide_element).hide();
	}
	
	this.showLoading = function()
	{
		if($("#loading-box").length == 0) this.initLoading();
		$("#loading-box").dialog("open");
	}
	
	this.showError = function(error_message)
	{
		if($("#error-box").length == 0) this.initError();
		$("#error-box").find('#error-message').html('<span class="ui-icon ui-icon-alert" style="float: left; margin-right: 0.3em;"/>' + error_message);
		$("#error-box").dialog("open");
		cmsAdministration.init();
	}
	
	this.showMessage = function(message)
	{
		if($("#message-box").length == 0) this.initMessage();
		$("#message-box").find('#message').html('<span class="ui-icon ui-icon-info" style="float: left; margin-right: 0.3em;"/>' + message);
		$("#message-box").dialog("open");
		cmsAdministration.init();
	}
	
	this.showConfirm = function(message, success_handler, cancel_handler)
	{
		if($("#confirm-box").length == 0) this.initConfirm();
		$("#confirm-box").find('#confirm-message').html('<span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>' + message);
		$("#confirm-box").data('success_handler', success_handler);
		
		if(typeof(cancel_handler) != 'function') cancel_handler = function (){};
		
		$("#confirm-box").data('cancel_handler', cancel_handler);
		$("#confirm-box").dialog("open");
		cmsAdministration.init();
	}
	
	this.showAjaxForm = function(application, action, params, buttons, dparams)
	{
		if($(cmsAdministration.ajaxDialogSelector).length == 0) this.initAjaxDialog();
		
		var dialog_buttons = {};
		dialog_buttons[$t('button.cancel', '', false)] = function() {
			$(this).dialog("close");
		};
		
		var dialog_params = {
			bgiframe: true
			,draggable: false
			,modal: true
			,resizable: true
			,minHeight: 10
			,open: function(event, ui) { 
				var title = $('.form-title', $(cmsAdministration.ajaxDialogSelector)).html();
				if(title != null && typeof(title) != 'undefined' && title.length > 0) {
					$('.ui-dialog-title', $(cmsAdministration.ajaxDialogSelector).parent()).html( title );
					$('.form-title', $(cmsAdministration.ajaxDialogSelector)).hide();
				}
				
				$.each($('.tinyMCE', $(cmsAdministration.ajaxDialogSelector)), function(i, val){
					cmsAdministration.addTinyMCE($(val).attr('id'), $(val).attr('rel'));
				});						
				
				cmsAdministration.init();
			}
			,close: function() {
				cmsAdministration.removeTinyMCE('', cmsAdministration.ajaxDialogSelector);
				$(cmsAdministration.ajaxDialogSelector).remove();     
			}
			,buttons: $.extend(dialog_buttons, buttons)
		};
		
		$.extend(dialog_params, dparams);
		
		$(cmsAdministration.ajaxDialogSelector).load(
			this.getURL(application, action)
			, $.extend({layout: 'ajax'}, params)
			, function() {  
				$(cmsAdministration.ajaxDialogSelector).dialog(dialog_params);
			}
		);
	}
	
	this.showAjaxEdit = function(application, action, params, after_edit_handler, dialog_params) {
		if(typeof(after_edit_handler) == 'undefined' || after_edit_handler == '') {
			after_edit_handler = function() {}
		}
		
		var dialog_buttons = {};
		dialog_buttons[$t('button.save', '', false)] = function() {
			tinyMCE.triggerSave(true,true);
			cmsAdministration.postForm(application, action, $('form', $(this)).attr('id'), $.extend({operation: 'save'}, params), function() {
				after_edit_handler();
			});
			cmsAdministration.removeTinyMCE('', cmsAdministration.ajaxDialogSelector);
			$(this).dialog("close");
		};
		
		this.showAjaxForm(application, action, params, dialog_buttons, dialog_params);
	}
	
	this.showAjaxDelete = function(application, action, params, after_delete_handler) {
		if(typeof(after_delete_handler) == 'undefined' || after_delete_handler == '') {
			after_delete_handler = function() {}
		}
		
		var dialog_buttons = {};
		dialog_buttons[$t('button.delete', '', false)] = function() {
			cmsAdministration.postForm(application, action, '', $.extend({operation: 'delete'}, params), function() {
				after_delete_handler();
			});
			$(this).dialog("close");
		};
		
		this.showAjaxForm(application, action, params, dialog_buttons);
	}
	
	this.confirmSubmitForm = function(confirm_message, validation_rules, post_application, post_action, post_form, post_params, load_application, load_action, load_body, load_params, successHandler)
	{
		this.showConfirm(confirm_message,  function() {
			cmsAdministration.submitForm(validation_rules, post_application, post_action, post_form, post_params, load_application, load_action, load_body, load_params, successHandler);
		});
		return false;
	}
	
	this.confirmPostForm = function(confirm_message, post_application, post_action, post_form, post_params, load_application, load_action, load_body, load_params, successHandler)
	{
		this.showConfirm(confirm_message, function() {
			if(typeof(post_application) != 'undefined' && post_application != '' && (typeof(load_application) == 'undefined' || load_application == ''))
			{
				cmsAdministration.postForm(post_application, post_action, post_form, post_params, successHandler);
			} else {
				cmsAdministration.postLoadForm(post_application, post_action, post_form, post_params, load_application, load_action, load_body, load_params, successHandler);
			}
		});
		return false;
	}
	
	this.hideLoading = function()
	{
		$("#loading-box").dialog("close");
	}
	
	this.openWindow = function(application, action, params, windowName, windowFeatures) {
		window.open(this.getURL(application, action, params), windowName, windowFeatures);
	}
	
	/* Form Actions */
	this.autoFill = function(id, value)
	{
		jQuery("#" + id).focus(function(){
				if(jQuery(this).val()== value){
					jQuery(this).val("");
				}
			}).blur(function(){
				if(jQuery(this).val()==""){
					jQuery(this).val(value);
				}
		});
		
		this.AUTO_FILL_LOG.push({field_id: id, field_value: value });
	}
	
	this.isAutoFillValue = function(id, value)
	{
		for(var i=0; i<this.AUTO_FILL_LOG.length; i++)
		{
			var temp = this.AUTO_FILL_LOG[i];
			if(temp.field_id == id && temp.field_value.toLowerCase() == value.toLowerCase()) return true;
		}
		return false;
	}
	
	this.initRowColoring = function(table){
		$(table).hover(
			  function () {
				  $(this).attr('style', 'background-color: #f3f6b8; cursor:pointer;');
			  },
			  function () {
				  $(this).removeAttr('style');
			  }
		);
	}
	
	this.openShadowBox = function(application, action){
		var urlParams = "layout=admin-lite&action=" + application + "." + action;
		
		$("#adminPanel .adminPanelLine").effect('slide',{ direction:'up', mode:'hide' },440,function(){
			cmsCookieManager.set("admin_panel_status", "hidden");
		});
		$("#adminPanel-hidden").effect('slide',{ direction:'up', mode:'show' },440,function(){
			cmsAdministration.shadowbox.open({
				player: 'iframe',
				content: cmsAdministration.getURL() + '?' + urlParams,
				
				options: {animate: true
						 ,animateFade: true 
						 ,viewportPadding: 0
						 ,overlayColor: '#000'
						 }
			});	
		});
		
		cmsCookieManager.set("menu_open_list", '');
	}
	
	this.setFormValues = function(form_id, values){
		jQuery.each(values, function(key, value) {
			if( $('input[name=' + key + ']', $("#" + form_id)).length > 0 )
				$('input[name=' + key + ']', $("#" + form_id)).val( value );
			else if( $('#' + key, $("#" + form_id)).length > 0 )
				$('#' + key, $("#" + form_id)).val( value );
		});
	}
	
	this.sendForm = function(form_id, values){
		if(typeof(values) != 'undefined') this.setFormValues(form_id, values);
		$("#" + form_id).submit();
	}
	
	this.submitParams = function(post_application, post_action, post_params, load_application, load_action, load_body, load_params, successHandler) {
		this.submitForm('', post_application, post_action, '', post_params, load_application, load_action, load_body, load_params, successHandler);
	}
	
	this.submitForm = function(validation_rules, post_application, post_action, post_form, post_params, load_application, load_action, load_body, load_params, successHandler){		
		if(typeof(validation_rules) != 'undefined' && validation_rules != '' && validation_rules != false)
		{
			var validator = new FormValidator();
			var res = validator.validate(validation_rules);
		} else {
			var res = true; // no validation needed
		}
		
		if(res == true)
		{
			if(typeof(post_application) != 'undefined' && post_application != '' && (typeof(load_application) == 'undefined' || load_application == ''))
			{
				cmsAdministration.postForm(post_application, post_action, post_form, post_params, successHandler);
			} else {
				cmsAdministration.postLoadForm(post_application, post_action, post_form, post_params, load_application, load_action, load_body, load_params, successHandler);
			}
		}
		
		return false;
	}
	
	this.replaceContent = function(body, response, textStatus, successHandler) 
	{
		cmsAdministration.removeTinyMCE('', body); /// remove old editor if exists
		if(body == 'iframe') {
			cmsAdministration.shadowbox.open({
				player:     'iframe',
				content:    response
			});
		} else if(body == 'frame') {
			$(cmsAdministration.contentDocument).find('body').html(response);
		} else if(body == 'reload'){
			window.location.reload();
		} else if(body == 'window'){
			var cwin = window.open("", "", "resizable");
			if(typeof(cwin) != 'undefined') cwin.document.write(response);
		} else if(typeof(body) != 'undefined' && body !== null && body !== false) {
			$(body).html(response);
		}
		cmsAdministration.hideLoading();
		if(successHandler != '' && typeof(successHandler) != 'undefined')
		{
			successHandler(response, textStatus);
		}
		cmsAdministration.init();
		
	}
	
	this.loadForm = function(application, action, body, params, successHandler, returnDataType) {
		var urlParams = "layout=ajax&action=" + application + "." + action;
	
		if(typeof(params) != 'undefined')
		{
			var additionalParams = "";
			jQuery.each(params, function(i, val) {
				additionalParams += "&" + i + "=" + val;
			});
			urlParams += additionalParams;
		}
		
		if(typeof(returnDataType) == 'undefined') returnDataType = 'html';
	
		this.showLoading();
		
		$.ajax({
			type: "POST",
			url: this.getURL(),
			data: urlParams,
			cache: false,
			dataType: returnDataType,
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				cmsAdministration.hideLoading();
				cmsAdministration.showError(XMLHttpRequest + " " + textStatus + " " + errorThrown);
			},
			success: function(response, textStatus) {				
				cmsAdministration.replaceContent(body, response, textStatus, successHandler);
			}
		});
	}
	
	this.loadJS = function(file_name, successHandler) {
		jQuery.ajaxSetup({async: false});
		
		//console.log('loadJS called: ' + file_name + ' (' + hash + ') | handler: ' + successHandler);

		var hash = file_name;
		
		if(typeof(cmsAdministration.loaded_js[hash]) == 'undefined') {
			//console.log('Loading JS: ' + file_name);
			cmsAdministration.loaded_js[hash] = false;
			cmsAdministration.loaded_js_handlers[hash] = new Array();
			cmsAdministration.loaded_js_handlers[hash].push(successHandler);
			jQuery.getScript(cmsAdministration.getURL() + cmsAdministration.JS_FOLDER + file_name, function() {
				cmsAdministration.loaded_js[hash] = true;
				
				for(var i in cmsAdministration.loaded_js_handlers[hash]) {
					var handler = cmsAdministration.loaded_js_handlers[hash].shift();
					if(typeof(handler) == 'function') {
						//console.log('Calling handler for loaded ' + file_name + ': ' + handler);
						handler();
					}
				}
			});			
		} else if( cmsAdministration.loaded_js[hash] == false) {
			//console.log('Add handler to loading js: ' + file_name);
			cmsAdministration.loaded_js_handlers[hash].push(successHandler);
		} else {
			//console.log('Execute handler, js exists: ' + file_name);
			//no need to load
			if(typeof(successHandler) == 'function') successHandler();
		}
		
		jQuery.ajaxSetup({async: true});
	}
	
	this.ajaxGetData = function(application, action, params, successHandler, returnDataType){
		var urlParams = "layout=ajax&action=" + application + "." + action;
		
		if(typeof(params) != 'undefined')
		{
			var additionalParams = "";
			jQuery.each(params, function(i, val) {
				additionalParams += "&" + i + "=" + val;
			});
			urlParams += additionalParams;
		}
		
		if(typeof(returnDataType) == 'undefined') returnDataType = 'html';
	
		this.showLoading();
		
		$.ajax({
			type: "POST",
			url: this.getURL(),
			data: urlParams,
			cache: false,
			dataType: returnDataType,
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				cmsAdministration.hideLoading();
				cmsAdministration.showError(XMLHttpRequest + " " + textStatus + " " + errorThrown);
			},
			success: function(response, textStatus) {
				cmsAdministration.hideLoading();
				if(successHandler != '' && typeof(successHandler) != 'undefined')
				{
					successHandler(response, textStatus);
				}
				return response;
			}
		});
	}
	
	this.loadXML = function(application, action, body, params, successHandler){
		return this.loadForm(application, action, body, params, successHandler, 'xml');
	}
	
	this.loadJSON = function(application, action, body, params, successHandler){
		return this.loadForm(application, action, body, params, successHandler, 'json');
	}
	
	this.loadModule = function(application, action)
	{
		this.loadForm(application, action, 'iframe');
	}
	
	this.postForm = function(application, action, form_id, params, successHandler){
		if( ( form_id == '' || typeof(form_id) == 'undefined' ) && typeof(params) == 'undefined') return false;
		
		if(typeof(tinyMCE) != 'undefined') tinyMCE.triggerSave(true,true);
		
		var urlParams = "layout=ajax&action=" + application + "." + action;
		if(form_id != '' && typeof(form_id) != 'undefined') urlParams += "&" + $("#"+form_id).serialize();
		
		if(params != '' && typeof(params) != 'undefined')
		{
			var additionalParams = "";
			jQuery.each(params, function(i, val) {
				additionalParams += "&" + i + "=" + val;
			});
			urlParams += additionalParams;
		}
		
		this.showLoading();
		
		$.ajax({
			type: "POST",
			url: this.getURL(),
			data: urlParams,
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				cmsAdministration.hideLoading();
				//cmsAdministration.showError(XMLHttpRequest + " " + textStatus + " " + errorThrown);
				alert('in');
			},
			success: function(response, textStatus) {
				if(typeof(params) != 'undefined' && typeof(params.show_responce) != 'undefined' && params.show_responce != false){
					cmsAdministration.replaceContent(params.show_responce, response, textStatus, successHandler);
					return;
				}
				
				cmsAdministration.hideLoading();
				// Have we got an error?
				if(response.length > 0 && $(response).find('#error-list').length > 0)
				{
					cmsAdministration.showError($(response).find('#error-list').html());
				} else {
					// cmsAdministration.removeTinyMCE(); /// remove old editor if exists --- !!! removed because after posting ajax form, all tinyMCE were removed
					// if we have a handler send the response there and leave the  message output to the handler
					if(typeof(successHandler) == 'function')
					{
						successHandler(response, textStatus);
					} else {
						if(response.length > 0 && $(response).find('#message-list').length > 0) {
							cmsAdministration.showMessage($(response).find('#message-list').html());
						}
					}
				}
			}
		});
	}
	
	this.postLoadForm = function(post_application, post_action, post_form, post_params, load_application, load_action, load_body, load_params, successHandler) {
		this.postForm(post_application, post_action, post_form, post_params, function(response, textStatus) {
			if(typeof(load_params) != 'undefined' && load_params.redirect_response == true){
				var response_data = cmsAdministration.pareseXMLResponse(response);
				response_data = $(response_data).find('data').text();
				if(response_data.length > 0) $.extend(load_params, $.evalJSON(response_data));
			}
			cmsAdministration.loadForm(load_application, load_action, load_body, load_params, successHandler);
		});
	}
	
	this.doLogin = function(){
		var login = $("#i_l").val();
		if (login == "" || login == undefined) {
		  $("#i_l").focus();
		  return false;
		}
		var password = $("#i_p").val();
		if (password == "" || password == undefined) {
		  $("#i_p").focus();
		  return false;
		}
		var code = $("#i_code").val();
		if (code == "" || code == undefined) {
		  $("#i_code").focus();
		  return false;
		}
		
		var dataString = 'i_l='+ login + '&i_p=' + password + '&i_code=' + code;
			
		this.showLoading();	
			
		$.ajax({
		  type: "POST",
		  url: this.getURL('registration','login', {layout: 'ajax'}),
		  data: dataString,
		  cache: false,
		  dataType: "html",
		  success: function(response, textStatus) {
			cmsAdministration.hideLoading();
		  	// Have we got an error?
			if($(response).find('#error-list').length > 0)
			{
				cmsAdministration.showError($(response).find('#error-list').html());
			} else {
				if($(response).find('#message-list').length > 0) {
					cmsAdministration.showMessage($(response).find('#message-list').html());
				}
				
				$(cmsAdministration.CONTENT_DIV).html(response);
			}
			
			var options = {
				doRefreshOnClose: true
			};
			cmsAdministration.shadowbox.applyOptions(options);
		  }
		 });
		return false;
	}
	
	this.singleUpload = function(application, action, upload_field, upload_params, successHandler){
		
		var default_params = {
		    action : application + "." + action
		    ,layout: 'ajax'
		    , operation: 'upload'
		    , success_handler: successHandler
		};
		
		cmsAdministration.loadJS('jquery-plugins/ajaxupload.js', function() {
			var uploader = new AjaxUpload(upload_field + '-file', {
				id: upload_field,
				interval: 0,
				// Location of the server-side upload script
				action: cmsAdministration.getURL(),
				// File upload name
				name: 'userfile',
				// Additional data to send
				data: $.extend(default_params, upload_params),
				// Submit file after selection
				autoSubmit: false,
				// The type of data that you're expecting back from the server.
				// Html (text) and xml are detected automatically.
				// Only useful when you are using json data as a response.
				// Set to "json" in that case.
				responseType: false,
				// Fired after the file is selected
				// Useful when autoSubmit is disabled
				// You can return false to cancel upload
				// @param file basename of uploaded file
				// @param extension of that file
				onChange: function(file, extension){			
					$(upload_field + '-file').val(file);
					$(upload_field + '-error').text('');
				},
				// Fired before the file is uploaded
				// You can return false to cancel upload
				// @param file basename of uploaded file
				// @param extension of that file
				onSubmit: function(file, extension) {
					var upload_field = this._settings.id;
					var value = extension[0];
					var param = this._settings.data.allowed_extension;
					param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
					
					if (! value.match( new RegExp("^(" + param + ")$", "i") ) ){
	                    // extension is not allowed
						var extensions_str = this._settings.data.allowed_extension;
						var expr = new RegExp('[|]', 'g');
						extensions_str = extensions_str.replace(expr, ', *.');
						extensions_str = '*.' + extensions_str;
						cmsAdministration.showError( $t('err_upload.file_extension', {extensions: extensions_str, filename: file}) );
	                    // cancel upload
	                    return false;
					}
					
					$(upload_field + '-error').html('<img width="16" height="16" src="scss/images/ajax-loader.gif" border="0" />');
					
					// If you want to allow uploading only 1 file at time,
					// you can disable upload button
					this.disable();
					
					$(upload_field + '-button').attr("disabled", "disabled");
					$(upload_field + '-button').val('Uploading');
				},
				// Fired when file upload is completed
				// WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE!
				// @param file basename of uploaded file
				// @param response server response
				onComplete: function(file, response) {
					var upload_field = this._settings.id;
					
					// enable upload button
					this.enable();
					
					$(upload_field + '-button').text($t('button.upload', '', false));
					$(upload_field + '-error').html('');
					
					if($(response).find('#error-list').length > 0)
					{
						cmsAdministration.showError($(response).find('#error-list').html());
					} else {
						if($(response).find('#message-list').length > 0) {
							if(typeof(this._settings.data.success_handler) == 'function') {
								this._settings.data.success_handler(upload_field, response);
							} else {
								$(upload_field + '-error').html($(response).find('#message-list').html());
							}
						} else {
							$(upload_field + '-error').html($t('err_upload.unknown'));
						}
					}	
				}
			});
			
			$(upload_field + '-button').data('uploader', uploader);
			$(upload_field + '-button').bind('click', function() { 
				var uploader = $(this).data('uploader'); 
				uploader.submit(); 
			});
		});
	}
	
	this.randomString = function(length)
	{
		if(typeof(length) == 'undefined') length = 6;
	  	chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
	  	string = "";
		for(x=0;x<length;x++)
		{
			i = Math.floor(Math.random() * 62);
			string += chars.charAt(i);
		}
		return string;
	}
	
	this.limitTextArea = function(field, countfield, maxlimit) {
		// if too long...trim it!
		if ($(field).val().length > maxlimit) {
			$(field).val( $(field).val().substring(0, maxlimit) );
		// otherwise, update 'characters left' counter
		} else {
			$(countfield).html( (maxlimit - $(field).val().length) );
		}
	}
	
	this.pareseXMLResponse = function(response) {
		var response_data;
		if ( $.browser.msie && typeof(response) == 'string' ) {
			// IF it`s IE, convert string to XML using ActiveX
			response_data = new ActiveXObject( 'Microsoft.XMLDOM');
			response_data.async = false;
			response_data.loadXML( response );
		} else {
			response_data = response;
		}
		return response_data;
	}
	
	this.pause = function(millisecondi)
	{
		var now = new Date();
		var exitTime = now.getTime() + millisecondi;
	
		while(true)
		{
			now = new Date();
			if(now.getTime() > exitTime) return;
		}
	}
	
	this.stopEvent = function(event) {
		if (!event) event = window.event;
		
		if (event.stopPropagation) {
			// this code is for Mozilla and Opera
			event.stopPropagation();
		}else if (window.event) {
			// this code is for IE
			window.event.cancelBubble = true;
		}
	}
	
	this.getEventTarget = function(event){
		return (event.target || event.srcElement);
	}
	
	this.parseDate = function(date){ 
		var c = new Date();
		var d = date.split(/\W+/); 
		var year = d[2] ? d[2] : c.getFullYear(); 
		var month = d[1] ? d[1] : c.getMonth(); 
		month = month -1; 
		var day = d[0] ? d[0] : c.getDay(); 
		var hours = d[3] ? d[3] : c.getHours(); 
		var minutes = d[4] ? d[4] : c.getMinutes(); 
		var seconds = d[5] ? d[5] : c.getSeconds(); 
		var d = new Date(year,month,day,hours,minutes,seconds); 
		return d; 
	};
	
	this.dateFormat = function () {
		var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
			timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
			timezoneClip = /[^-+\dA-Z]/g,
			pad = function (val, len) {
				val = String(val);
				len = len || 2;
				while (val.length < len) val = "0" + val;
				return val;
			};
	
		// Regexes and supporting functions are cached through closure
		return function (date, mask, utc) {
			var dF = this.dateFormat;
	
			// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
			if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
				mask = date;
				date = undefined;
			}
	
			// Passing date through Date applies Date.parse, if necessary
			date = date ? new Date(date) : new Date;
			if (isNaN(date)) throw SyntaxError("invalid date");
	
			mask = String(dF.masks[mask] || mask || dF.masks["default"]);
	
			// Allow setting the utc argument via the mask
			if (mask.slice(0, 4) == "UTC:") {
				mask = mask.slice(4);
				utc = true;
			}
	
			var	_ = utc ? "getUTC" : "get",
				d = date[_ + "Date"](),
				D = date[_ + "Day"](),
				m = date[_ + "Month"](),
				y = date[_ + "FullYear"](),
				H = date[_ + "Hours"](),
				M = date[_ + "Minutes"](),
				s = date[_ + "Seconds"](),
				L = date[_ + "Milliseconds"](),
				o = utc ? 0 : date.getTimezoneOffset(),
				flags = {
					d:    d,
					dd:   pad(d),
					ddd:  dF.i18n.dayNames[D],
					dddd: dF.i18n.dayNames[D + 7],
					m:    m + 1,
					mm:   pad(m + 1),
					mmm:  dF.i18n.monthNames[m],
					mmmm: dF.i18n.monthNames[m + 12],
					yy:   String(y).slice(2),
					yyyy: y,
					h:    H % 12 || 12,
					hh:   pad(H % 12 || 12),
					H:    H,
					HH:   pad(H),
					M:    M,
					MM:   pad(M),
					s:    s,
					ss:   pad(s),
					l:    pad(L, 3),
					L:    pad(L > 99 ? Math.round(L / 10) : L),
					t:    H < 12 ? "a"  : "p",
					tt:   H < 12 ? "am" : "pm",
					T:    H < 12 ? "A"  : "P",
					TT:   H < 12 ? "AM" : "PM",
					Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
					o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
					S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
				};
	
			return mask.replace(token, function ($0) {
				return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
			});
		};
	}();
	
	// Some common format strings
	this.dateFormat.masks = {
		"default":      "ddd mmm dd yyyy HH:MM:ss",
		shortDate:      "m/d/yy",
		mediumDate:     "mmm d, yyyy",
		longDate:       "mmmm d, yyyy",
		fullDate:       "dddd, mmmm d, yyyy",
		shortTime:      "h:MM TT",
		mediumTime:     "h:MM:ss TT",
		longTime:       "h:MM:ss TT Z",
		isoDate:        "yyyy-mm-dd",
		isoTime:        "HH:MM:ss",
		isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
		isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
	};

	// Internationalization strings
	this.dateFormat.i18n = {
		dayNames: [
			"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
			"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
		],
		monthNames: [
			"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
			"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
		]
	};
	
	this.Client = {
	  viewportWidth: function() {
	    return self.innerWidth || (document.documentElement.clientWidth || document.body.clientWidth);
	  },
	
	  viewportHeight: function() {
	    return self.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight);
	  },
	  
	  viewportScrollWidth: function(){
		if (window.innerHeight && window.scrollMaxY) {// Firefox
			return  window.innerWidth + window.scrollMaxX;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			return document.body.scrollWidth;
		} else { // works in Explorer 6 Strict, Mozilla (not FF) and Safari
			return document.body.offsetWidth;
	  	}
	  },
	  
	   viewportScrollHeight: function(){
		if (window.innerHeight && window.scrollMaxY) {// Firefox
			return  window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			return document.body.scrollHeight;
		} else { // works in Explorer 6 Strict, Mozilla (not FF) and Safari
			return document.body.offsetHeight;
	  	}
	  },
	  
	  viewportSize: function() {
	    return { width: this.viewportWidth(), height: this.viewportHeight() };
	  },
	  
	   viewportScrollSize: function() {
	    return { width: this.viewportScrollWidth(), height: this.viewportScrollHeight() };
	  }
	};
	
	this.cmsTabsSimple = function (tabs_id, additional_params) {
		if (typeof selected_tab == "undefined"){ selected_tab = "none";}
		
		var default_params = {
				selected_tab: 	'none',			// Selected tabs(default first)
				tabsAlign:	    ''			// Set align tabs (default left)
		};
		
		$.extend(default_params, additional_params);
		
		$(tabs_id).each( function () {
			var id_tabs_conteiner = this;
			$('ul:first', id_tabs_conteiner).addClass('cms-tabs-nav ' + default_params.tabsAlign + ' cms-clearfix');
			if(default_params.tabsAlign == ''){
				$('ul:first li:last',id_tabs_conteiner).addClass('last-tab');
			}else{
				$('ul:first li:first',id_tabs_conteiner).addClass('last-tab');
			}
			
			
			$('ul:first li',id_tabs_conteiner).click( function (){
				var click_item = this;
				$('ul:first li',id_tabs_conteiner).each( function() {
					var item_id = this;
					$(item_id).removeClass('cms-tab-selected');
					$($('a',item_id).attr('href')).hide();
				} );
				
				$(click_item).addClass('cms-tab-selected');
				$($('a',click_item).attr('href')).show();
				
			});
			
			
			
			
			cmsAdministration.cmsTabsSimplePreLoad(id_tabs_conteiner, {tabsAlign: default_params.tabsAlign});
		
		});
	};
	
	this.cmsTabsSimplePreLoad = function (tab_id, params){
		var default_params = {
				selected_tab: 	'none',			// Selected tabs(default first)
				tabsAlign:	    ''			// Set align tabs (default left)
		};
		
		$.extend(default_params, params);

		var default_tab_id;
		
		if(default_params.tabsAlign == ''){
			default_tab_id = $('ul:first li:first',tab_id);
		}else{
			default_tab_id = $('ul:first li:last',tab_id);
		}
		
		//TODO 
		//Add select default tab option
		
		$('ul:first li',tab_id).each( function() {
			var item_id = this;
			$(item_id).removeClass('cms-tab-selected');
			$($('a',item_id).attr('href')).hide();
		} );
		
		$(default_tab_id).addClass('cms-tab-selected');
		$($('a',default_tab_id).attr('href')).show();
	};
	
	this.initDropDownTabs = function () {
		
		
	};
	
	this.hightLightItemsList = function(listClass){
		var list = '.' + listClass;

		$(list).mousedown(function (){
			$(list).removeClass('cms-item-select');
			$(this).addClass('cms-item-select');
		});

		$(list).mouseover( function (){
			$(this).addClass('cms-item-hover');

		}).mouseout( function (){
			$(this).removeClass('cms-item-hover');
		});
	}

	
	
}

var cmsAdministration = new AdministrationCore();
