Layouter = function(){
	var dialog;
	var feedView = null;
	var spanEl;
//	var tabManager;
	var activTabId;
	var tabIndex;
	var d = new Date();
	var t_date = d.getDate();  
	var t_mon = d.getMonth()+1;      
	var t_year = d.getFullYear();  
    var todayDate=t_date+'/'+t_mon+'/'+t_year;
    return {
    
    init: function(){
    	$id("menuParentTable").style.display = "";
		var container = newTag("div");
		container.className = "menu_cont";
		$id('menuContainer').appendChild(container);
		ContactManager.init();
		ModuleAddManager.init();
		ModuleMyManager.init();
		FeedbackAddManager.init();
		FeedbackAddManager.init();
		TestimonialAddManager.init();
		SMSAddManager.init();
		AgentDownloaderManager.init();
		
		function getMenuItemConfig(menuConfig){
			var moduleObj = Framework.Modules[menuConfig.module+"Widget"];
			var conf = moduleObj.menu[menuConfig.menuItem];
			conf["param"] = moduleObj;
			return conf;
		}
		
		for(var i = 0; i < MENU_CONFIG.length; i++){
			if(MENU_CONFIG[i].loadConfig){
				MENU_CONFIG[i] = getMenuItemConfig(MENU_CONFIG[i]);
			}else{
				var items = MENU_CONFIG[i].childItems;
				for (var j=0;j<items.length;j++){
					if(items[j].loadConfig){
						items[j] = getMenuItemConfig(items[j]);
					}
				}
			}
		}
		
		var menu = new MenuManager(container, MENU_CONFIG);
		
/*		var calendarCont = $id("calendar");
		var calendar = new Calendar(calendarCont, calendarCallback);
		calendar.showCalendar();*/
		
		
		
		/*var agentDownloadStr="<span title='Download Agent' style='cursor:pointer' onclick='AgentDownloaderManager.agentDownloaderSendRequest()'><table><tr><td><img src='images/monitis/16x16/add_agent.gif'/></td>"+
				 				"<td>Download Agent</td></tr></table></span>";
		var agentDownloadSpan=document.createElement('span');
		agentDownloadSpan.innerHTML=agentDownloadStr;
		$id('downloadAgent').appendChild(agentDownloadSpan);*/
		
		var calendarManagerStr="<table><tr><td><span class='calendarDisabledLabel'>Presets:</span></td><td><select class='calendarDisabled' disabled='true'><option>Last 4 hours</option></select></td>"+
								"<td><span class='calendarDisabledLabel'>From:</span></td><td><input class='calendarDisabled' value='"+todayDate+"' type='text' id='fromI' value style='width:80px' disabled='true'/><td id='fromCalCont'><img src='images/calendar.gif'/></td></td>"+
								"<td><span class='calendarDisabledLabel'>To:</span></td><td><input class='calendarDisabled' value='"+todayDate+"' type='text' id='toI' style='width:80px' disabled='true'/><td id='toCalCont'><img src='images/calendar.gif'/></td></td>"+
								"<td><input class='calendarDisabled' type='button' value='Refresh' disabled='true'/></td></tr></table>";
		var calendarManagerSpan=document.createElement('span');
		calendarManagerSpan.innerHTML=calendarManagerStr;
		$id('downloadAgent').appendChild(calendarManagerSpan);		
		var removeTabImg=document.createElement('img');
		removeTabImg.src='themes/default/images/layout/tab-close-on.gif'
		removeTabImg.title='Click to Delete tab';
		removeTabImg.style.cursor="pointer";
		removeTabImg.setAttribute("onclick","Layouter.tabClosed(this)")
	    var closeSpan = document.createElement('span');
		closeSpan.appendChild(removeTabImg);

		var getActivTabIdFromCallback=function(id,index){
			activTabId = id;
		    tabIndex = index;
			Layouter.whenActivate();
		}

		this.tabManager= new TabManager('tabs',getActivTabIdFromCallback,closeSpan)
		this.tabManager.generateTab();
		
		for( var id in TABS_CONFIG )
		{var i=0;
			if( typeof(TABS_CONFIG[id]) == "function" )continue;
			this.addNewTab( TABS_CONFIG[id] );
			//if (firstTabId == null) firstTabId = "tab_"+id;
			i++;
		}

		//$id('new_tab').setAttribute("onclick","Layouter.createNewTab()");
		this.tabManager.activateTab(getCookie("activeTabIndex"));
		
		$id("logoutCell").innerHTML = "<span class=userName>"/*+User.userAccount*/+
		"<a href='javascript:Layouter.request_signOut()'>"+Framework.Lang.footerLink_signOut+"</a></span>";

	/*	var tooltip = new Tooltip();
		tooltip.activateTooltip('body');
*/
		
		
		var tabs = $id("tabs");
		var calendarCont = newTag("span");
		calendarCont.align = "right";
		calendarCont.className = "calendarCont";
		tabs.insertBefore(calendarCont, tabs.childNodes[4]);
		
		var calendar = new Calendar(calendarCont, calendarCallback);
//		calendar.showCalendar();
 	},
 	
	request_signOut: function(){
		var data = "type=signOut&id="+User.userId;
		Request.sendPOST(Framework.userURL+'?nocache='+Math.random(), data, Layouter.process_signOut);
	},

	process_signOut: function(response){
		var resp=eval("("+response.responseText+")");
		if(resp.status==STATUS_OK){
			deleteCookie("activeTabId");
			deleteCookie("fullScreen");
			deleteCookie("menuWidth");
			deleteCookie("expandcollapse");
			deleteCookie("hideTabs");
			window.location.reload(true);
		} else {
			alert("Failed to sign out, try again.");
		}
	},
	
	addNewTab: function(params){
	    var tabContainerId = params['id'];
		var tabsContainer = $id("tabsContainer");
		var content = document.createElement("DIV");
		content.id = "tab_" + tabContainerId;
		inner = "<div class=tabdiv>";
		inner += "	<table id='table_"+ tabContainerId +"' class='portletcont' border='0' cellpadding='0' cellspacing='0' height='auto'>";
		inner += "	   <tr name=\"row\" valign=\"top\" >";

		var default_count = (params["colCount"] != null)?params["colCount"]:GENERAL_SETTINGS.DEFAULT_COLUMNS_COUNT;
		var wd = (100 / default_count) + "%";

		for( var i=0; i<GENERAL_SETTINGS.LAYOUT_MAX_COLUMNS_COUNT; i++ )
		{
			--default_count;
			inner += "		   <td align='center' id='"+tabContainerId+"_body"+(i+1)+"'";
			inner += " width='"+((default_count>=0)?wd:"0%")+"'";


			if(i == 0 && default_count == 0 )
				inner += "class = 'topLeftCell topRightCell' style='display:" + ((default_count<0)?"none":"") + "' ";
			else if( i == 0 )
				inner += "class = 'topLeftCell' style='display:" + ((default_count<0)?"none":"") + "' ";
			else if( default_count == 0 )
				inner += "class = 'topRightCell' style='display:" + ((default_count<0)?"none":"") + "' ";
			else
				inner += " style='display:" + ((default_count<0)?"none":"") + "' ";

			inner += "  name='row' colNum="+(i+1)+"></td>";
		
		}

		inner += "	   </tr>";
		inner += "	</table>";
		inner += "	</div>";

		content.innerHTML = inner;
		tabsContainer.appendChild( content );
		$id("monitorPageContainer").style.display="none";
		
		if (Browser.isIE){
			$(".portletcont", content)[0].style.width="98.5%";
		}
		
		this.tabManager.createTab('tab_'+tabContainerId,Layouter.editInput(params['title']))
//document.getElementById('tab_ul').style.display= '';

	 
	},
	editInput:function(tab_name){
		var input=document.createElement('input');
		input.type='text';
		input.readOnly="true";
		input.style.border="0px";
		input.style.background="transparent";
		input.style.fontSize="11px";
		input.style.cursor="pointer";
		input.style.width="50px";
		input.style.height="16px";
		input.setAttribute("value",tab_name);
		input.setAttribute("alt",tab_name);
		input.setAttribute("title",tab_name);
	    input.setAttribute("ondblclick","Layouter.startRenameTab(this)");
		input.setAttribute("onchange","Layouter.finishRenameTab(this)");
		input.setAttribute("onblur","Layouter.notRenameTab(this)");
		input.setAttribute("onkeydown","if(event.keyCode==13) Layouter.notRenameTab(this)");
		return input
	},
	startRenameTab:function(el){
		el.readOnly=false;
		el.style.cursor="";
        el.style.background="#FFFFFF";
		el.style.border="dashed 1px"  		
	},

	notRenameTab:function(el){
		el.readOnly=true;
		el.style.cursor="pointer";
		el.style.background="transparent";
		el.style.border="0px" ;
	},

	finishRenameTab:function(el){
	    el.style.cursor="pointer";
		el.readOnly=true;
		el.value=el.value;
		el.style.background="transparent";
		el.style.border="0px" ;
		var args = new Object();
		args.id = Layouter.getActiveTabId();
		args.title = el.value;
		el.setAttribute("alt",args.title);
		el.setAttribute("title",args.title);
		PortletLoader.saveUserData("renamePage", args, Layouter.completeEditTab, args);
	},
	
	completeEditTab:function(args){
			var title = args.title;
			args.el.innerHTML = "";
			args.tab.setText(title);
			TABS_CONFIG[args.id].title = title;
	},
	
	createNewTab: function(){/*
		var items = this.tabManager.getTabsObj();
		var titleNumber = items.childNodes.length-1;
		var lastTabId = 0;
		lastTabId = parseInt(items.lastChild.childNodes[0].hash.substring(5));
		var id = lastTabId + 1;
		var args = new Object();
		args.title = "Page "+ (titleNumber+1);
		PortletLoader.saveUserData("addPage", args.title,Layouter.completeCreateTab, args);
			 */
		var items = this.tabManager.getTabsObj();
		var titleNumber = items.childNodes.length-1;

		var lastTabId = 0;
		for(var i =1; i < items.childNodes.length; i++){
		
			if(parseInt(items.childNodes[i].id.substring(3)) >  lastTabId ){
				lastTabId = parseInt(items.childNodes[i].id.substring(3));
                var title  = items.childNodes[i].firstChild.firstChild.firstChild.value;
				if(title.substring(0,4) == "Page"){
					var num = parseInt(title.substring(5));
					if(num > titleNumber)
						titleNumber = num;
				}

			}
		}
		var id = lastTabId + 1;
		var args = new Object();
		args.title = "Page "+ (titleNumber+1);
		PortletLoader.saveUserData("addPage", args.title, Layouter.completeCreateTab, args);	 
	},

	completeCreateTab: function(args,resultArgs){
		if(resultArgs.id){
			if( TABS_CONFIG[ resultArgs.id ] != null )return;
			var newId = resultArgs.id;
			
			Layouter.addNewTab( {id: newId, title: args.title,colCount:GENERAL_SETTINGS.DEFAULT_COLUMNS_COUNT} );
				TABS_CONFIG[newId]= {id:newId,title: args.title,colCount:GENERAL_SETTINGS.DEFAULT_COLUMNS_COUNT};

			Layouter.whenActivate();
		}
	},

  	tabClosed: function(ev){
       	var id = ev.id.substring(6);
		if(confirm(Framework.Lang.Tabs.TabConfirm)){
			var args = new Object();
			args.id = id;
			var items = this.tabManager.getTabsObj();
			if(items.childNodes.length <= 2) alert("You cann't delete all tabs.");
			else 	PortletLoader.saveUserData("deletePage", id, Layouter.completeTabClosed, args)


		}
     },
		
	whenActivate: function(){
		var tabId = Layouter.getActiveTabId();
		$id("tab_"+tabId).style.display = "";
		setCookie("activeTabIndex", tabIndex, 30);
		if( PORTLETS.length != 0 )
				PortletLoader.loadPortlets(false,tabId);
		/*
			var tabId = Layouter.getActiveTabId();
			setCookie("activeTabId", tabId, 30);
			var tab =  dialog.getRegion('center').getTabs().getTab("tab_"+tabId);
			tab.addListener("deactivate", Layouter.whenDeactivate );
			var el = $id(tab.textEl.dom.id);
			//YAHOO.util.Event.addListener( el, "click", Layouter.tabEdited);
			Ext.EventManager.addListener(el, "click",Layouter.tabEdited);

			var items = dialog.getRegion('center').getTabs().items;

			var ch =  el.parentNode;
			ch.childNodes[ch.childNodes.length - 1].style.visibility = "visible";
			if(items.length > 2)
				{ch.childNodes[ch.childNodes.length - 2].style.visibility = "visible";}

			if( PORTLETS.length != 0 )
				PortletLoader.loadPortlets(false,tabId);

			setTimeout( "Controller.callModulesListener( 'onTabActivate' ) ", 500 );
			*/
	},
	
	completeTabClosed:function(args){
 		Layouter.deletePage()
			
	},
		
	deletePage:function(){
		this.tabManager.removeTab(tabIndex)
			deleteCookie("activeTabId");
	},

	getActiveTabId: function(){
		var activeTab = Layouter.getActiveTab();
		return (activeTab==null)?null:(activeTab.id.substring(4));	
	},

	getActiveTab: function(){	
		return $id(activTabId);
	},
	
	tuneModulesIssueForIE: function(tabNum){
		if(!tabNum) tabNum = Layouter.getActiveTabId();
		for( var i=0; i<PORTLETS.length; i++ ){
			if(parseInt(tabNum) == PORTLETS[i].params.tabNumber){
				var portlet = PORTLETS[i];
				if(portlet.portlet_FRAME){
					portlet.portlet_FRAME.style.position = "static";
					portlet.portlet_FRAME.style.position = "relative";
					portlet.portlet_FRAME.style.left = "0px";
					portlet.portlet_FRAME.style.top = "0px";
				}
			}
		}
	}
	
	};
}();

var calendarCallback = function(){
	var activeTabId = Layouter.getActiveTabId();
	for( var i=0; i<PORTLETS.length; i++){
		if(PORTLETS[i].params.tabNumber == activeTabId){
			var date = new Date();
			var date_subs = this.value.split("/");
			date.setDate(date_subs[1]);
			date.setMonth(date_subs[0]);
			date.setYear(date_subs[2]);
			PORTLETS[i].refreshDate(date);
		}
	}
}

DEMO_TAB_CONFIG={
	"tabs":{"1695":{"colCount":3,"isShared":false,"title":"Page 2","rowCount":null,"order":1},"1788":{"colCount":3,"isShared":false,"title":"Page 3","rowCount":null,"order":2},"12":{"colCount":3,"isShared":false,"title":"Welcome","rowCount":null,"order":0}},
 	"user":{"weeklyReport":false,"hasUserAgent":"true","plan":0,"userId":"1MSEJCJ3D2OJUB1FNVCG8U3DS1","expire":"Aug 26, 2007","username":"Nare Gasparyan(ngaspary@sourcio.com)","cycle":"M","userAccount":"ngaspary@sourcio.com","admin":true},
 	"options":{"showHeaderIcons":true,"theme":"default","loadAllModules":false}
};

//@TODO remove this counter
var MODULES_COUNT=66285;


PORTLETS_CONFIG = [ 
					{"moduleName":"Report","height":294,"collapsed":false,"colNumber":1,"tabNumber":12,"dataId":553,"id":11848},
					{"moduleName":"Report","height":294,"collapsed":false,"colNumber":2,"tabNumber":12,"dataId":554,"id":11849},
					{"moduleName":"Report","height":294,"collapsed":false,"colNumber":3,"tabNumber":12,"dataId":555,"id":11937},
					{"moduleName":"Test","height":294,"collapsed":false,"colNumber":1,"tabNumber":12,"dataId":556,"id":11938},
					{"moduleName":"Visitor","height":294,"collapsed":false,"colNumber":2,"tabNumber":12,"dataId":556,"id":11939},
					{"moduleName":"Visitor","height":294,"collapsed":false,"colNumber":3,"tabNumber":12,"dataId":557,"id":11940}
					
					];
var lineInMenu = {
				name: "",
				tooltip: "",
				url: "",
				callback: "",
				param: "",
				childItems: []
				};
var MENU_CONFIG = [
				{
				    loadConfig: true,
					module:"SnmpObject",
					menuItem: "add"
				},
				{
				    loadConfig: true,
					module: "Snmp",
					menuItem: "add"
				},
				{
				    loadConfig: true,
					module: "Notification",
					menuItem: "add"
				},
				{
					name: "My Account",
					tooltip: "",
					url: "",
					callback: "",
					param: "",
					childItems: [
									{
									    loadConfig: true,
										module:"SnmpObject",
										menuItem: "existing"
									},
									{
									    loadConfig: true,
										module: "Snmp",
										menuItem: "existing"
									},
									lineInMenu,
									{
										name: "My Contacts",
										tooltip: "",
										url: "",
										callback: showContacts,//function(){showModule("Notification")},
										param: "",
										childItems: []
									},
									{
										name: "SMS Balance",
										tooltip: "",
										url: "",
										callback: SMSAddManager.getSMSBalanceContent,
										param: "",
										childItems: []
									}
								]
				},
				{
					name: "Tools",
					tooltip: "",
					url: "",
					callback: "",
					param: "",
					childItems: [
									{
										name: "Download Agent",
										tooltip: "",
										url: "",
										callback: AgentDownloaderManager.agentDownloaderSendRequest,
										param: "",
										childItems: []
									},
									lineInMenu,
									{
										name: "Note",
										tooltip: "",
										url: "",
										callback: addNoteModule,
										param: "",
										childItems: []
									},
									lineInMenu,
									{
										name: "Feedback",
										tooltip: "",
										url: "",
										callback: FeedbackAddManager.addFeedbackModule,
										param: "",
										childItems: []
									},
									{
										name: "Testimonial",
										tooltip: "",
										url: "",
										callback: TestimonialAddManager.addTestomonialModule,
										param: "",
										childItems: []
									},
									lineInMenu,
									{
										name: "Mib Browser",
										tooltip: "",
										url: "",
										callback: MibTreeManager.init,
										param: "",
										childItems: []
									}
								]
				}
];


