Ext.onReady(function()
{
	Ext.BLANK_IMAGE_URL = brodos.config.get('WDIR')+'/js/lib/extjs/resources/images/default/s.gif';

    var IAS = new Object(); // IAS: Internal Application Store
	var LanguageMenu 		= new Array();
	var AdministrationMenu 	= new Array();
	var TranslationMenu 	= new Array();
	var HelpMenu 			= new Array();
	var SubMenu 			= new Array();
	var SystemMenu 			= new Array();
    var LoginMask;
    var LoginWindow;
    var LoginUser;
    
    IAS.Setting = Framework.Setting;
    var TDO     = IAS.Setting.Translation;
    var LoginServiceURL     = IAS.Setting.Path.Root+'/index.php/mpath/services_Login';
    IAS.MenuCssNum = 1;
    IAS.GlobalCss = '';
    IAS.MenuCss = '';

	var MenuEventList = new Array();
	
	actionMenuEvent = function(e) 
					  { 
						e.showMenu();
					  };
	
	addMenuEvent =  function ()
					{
						for (var n = 0; n < MenuEventList.length; n++)
						{
							MenuEventList[n].on('mouseover', actionMenuEvent);
						}
					};
	
	removeMenuEvent =  function ()
					   {
							for (var n = 0; n < MenuEventList.length; n++)
							{
								if (MenuEventList[n].hasListener('mouseover'))
								{
									MenuEventList[n].un('mouseover', actionMenuEvent);
								}
							}
					   };

	function invokeLanguageChange(Language) 
	{
        var Link = IAS.Setting.Path.Page;

        if (IAS.Setting.Path.Module != null && IAS.Setting.Path.Module.length)
        {
            Link += '/mpath/'+IAS.Setting.Path.Module;
        }
        
        Link += '/language/'+Language;
        
        if (IAS.Setting.Path.Param != null && IAS.Setting.Path.Param.length)
        {
            Link += '?'+IAS.Setting.Path.Param;
        }

	    window.location.href = Link;
	}

	function gotoMenuPage(Help)
	{
		window.location.href = IAS.Setting.Path.Root+'/index.php/mpath/'+Help;
	}

	function addGlobalCss(ClassName, Url) 
	{
        IAS.GlobalCss += '.'+ClassName+ '{ background-image: url(' + Url + ') !important; background-repeat: no-repeat; background-position: center left !important; }';
		return ClassName;
	};
    
    function createGlobalCss()
    {
        if (IAS.GlobalCss.length)
        {
            Ext.util.CSS.createStyleSheet(IAS.GlobalCss);
        }
    }

	function addMenuCss(url) 
	{
        var className = 'navButtonCls' + (IAS.MenuCssNum++);
        IAS.MenuCss += '.'+className+' { background-image: url(' + url + ') !important; background-repeat: no-repeat !important; background-position: center 0px !important; }';
		return className;
	}
    
    function createMenuCss()
    {
        if (IAS.MenuCss.length)
        {
            Ext.util.CSS.createStyleSheet(IAS.MenuCss);
        }
    }
    
    function createMenuText(text, className)
    {
        return '<div class="'+className+'">'+text+'</div>';
    }

    function SystemPanel_OnEnter(Sender, EventArgs)
    {

       if (EventArgs.getCharCode() == EventArgs.ENTER)
       {
           invokeSystemChange();
       }
    }
    
    function enableSystemPanel()
    {
        Ext.getCmp('ChangeSystemId').setDisabled(false);
        Ext.getCmp('systemChangeButton').setDisabled(false);
    }
    
    function disableSystemPanel()
    {
            Ext.getCmp('ChangeSystemId').setDisabled(true);
            Ext.getCmp('systemChangeButton').setDisabled(true);
    }
    
    function invokeSystemChange() 
    {
        if (Ext.getCmp('ChangeSystemId').isValid())
        {
            disableSystemPanel();            
            Ext.Ajax.request({
                               url: IAS.Setting.Path.Root+'/index.php/mpath/common_systemchange',
                               params: { NewSystemId: Ext.get('ChangeSystemId').getValue() },
                               failure: enableSystemPanel,
                               success: function (Data)
                                        {
                                            if (Data.responseText == '1')
                                            {
                                                window.location.href = IAS.Setting.Path.Self;
                                            }
                                            else
                                            {
                                                enableSystemPanel();
                                                Ext.getCmp('ChangeSystemId').markInvalid();
                                            }
                                        }
                            });
        }
    }
    
    function showLoginDialog(User)
    {
        LoginWindow = brodos.login.dialog(TDO, LoginServiceURL, User, false, successLoginCallback, failureLoginCallback, waitLoginCallback); 
                                          
        if (User != undefined && User != null && User.length > 0)
        {
            Ext.getCmp('idfSystemIdentifer').setValue(User);
            Ext.getCmp('idfSystemIdentifer').setDisabled(true);
        }
        
        LoginWindow.show();
        LoginWindow.setPosition(LoginWindow.getPosition()[0], LoginWindow.getPosition()[1]-120);
    }
    
    function waitLoginCallback()
    {
         LoginMask = new Ext.LoadMask(Ext.getBody(), {msg: TDO._IDF_LOGIN_WAIT});
         LoginMask.show();
         LoginWindow.hide();
    }

    function successLoginCallback(data)
    {
        if (data.responseText == '1')
        {
            window.location.href = IAS.Setting.Path.Self;
        }
        else
        {
            failureLoginCallback();
        }
    }
    
    function failureLoginCallback()
    {
        LoginMask.hide();
        LoginWindow.show();
    }
    
    function successReloginCallback(data, me)
    {
        if (data.responseText == '1')
        {
            window.location.href = IAS.Setting.Path.Self;
        }
        else
        {
            failureReloginCallback();
        }
    }
    
    function failureReloginCallback()
    {
        showLoginDialog(LoginUser);
        LoginMask.hide();
    }
    
    function getMenuNameByIndex(Index)
    {
        if (typeof (MenuStore[Index]) == 'object')
        {
            return MenuStore[Index]['name'];
        }
        
        return MenuStore[Index];
    }

    function getMenuTextByIndex(Index)
    {
        return brodos.translation.get(getMenuNameByIndex(Index));
    }
    
    function getMenuImageByIndex(Index)
    {
        if (typeof (MenuStore[Index]) == 'object')
        {
            return MenuStore[Index]['image'];
        }
    }

	IAS.Loop = 0;

	for (var LKey in IAS.Setting.Language.Supported)
	{
	    if (typeof (IAS.Setting.Language.Supported.LKey) != 'function')
	    {
	        var Temp = new Object();
	        Temp.text = IAS.Setting.Language.Supported[LKey];
	        Temp.iconCls = addGlobalCss('languageFlag'+IAS.Loop, IAS.Setting.Path.Root+'/images/flag/'+LKey+'.gif');
	        Temp.PLanguage = LKey;
	        Temp.href = 'javascript:void(0);';
	        Temp.handler = function() { invokeLanguageChange(this.PLanguage); };
	        LanguageMenu[IAS.Loop++] = Temp;
	    }
	}
    
	IAS.Loop = 0;

	for (var MenuItem in IAS.Setting.Help)
	{
	    if (typeof (IAS.Setting.Help[MenuItem]) != 'function')
	    {
	        var Temp = new Object();
	        Temp.text = getMenuTextByIndex(IAS.Setting.Help[MenuItem]);
	        Temp.href = IAS.Setting.Path.Root+'/index.php/mpath/'+IAS.Setting.Help[MenuItem];
	        HelpMenu[IAS.Loop++] = Temp;
	    }
	}
	
	IAS.Loop = 0;
	
	for (var MenuItem in IAS.Setting.Administration)
	{
	    if (typeof (IAS.Setting.Administration[MenuItem]) != 'function')
	    {
	        if (isNaN(parseInt(MenuItem)))
	        {
	        	var Temp = '<b class="menu-title">'+brodos.translation.get(IAS.Setting.Administration[MenuItem])+'</b>';
	        }
	        else if (IAS.Setting.Administration[MenuItem] != undefined)
	        {
	        	var Temp = new Object();
	        	Temp.text = getMenuTextByIndex(IAS.Setting.Administration[MenuItem]);
	        	Temp.href = IAS.Setting.Path.Root+'/index.php/mpath/'+IAS.Setting.Administration[MenuItem];
	        } 
	        else
	        {
	        	var Temp = '-';
	        }
	        
	        AdministrationMenu[IAS.Loop++] = Temp;
	    }
	}

	IAS.Loop = 0;

	for (var MenuItem in IAS.Setting.Trans)
	{
	    if (typeof (IAS.Setting.Trans[MenuItem]) != 'function')
	    {
	        var Temp = new Object();
	        Temp.text = getMenuTextByIndex(IAS.Setting.Trans[MenuItem]);
	        Temp.href = IAS.Setting.Path.Root+'/index.php/mpath/'+IAS.Setting.Trans[MenuItem];
            if (IAS.Setting.Trans[MenuItem] == 'translation_tool')
            {
                Temp.hrefTarget = '_blank';

            }
	        TranslationMenu[IAS.Loop++] = Temp;
	    }
	}
    

    IAS.Loop = 0;
    

    
    if (IAS.Setting.IsSuper)
    {
          var SystemChangePanel = new Ext.Panel({
                                                autoShow: true,
                                                labelWidth: 50,
                                                width: 250,
                                                height: 35,
                                                frame: true,
                                                border: true,
                                                layout:'column',
                                                items: [
                                                  {
                                                    columnWidth: 0.30,
                                                    items: [{
                                                        xtype: 'label',
                                                        html: '<div style="padding-top: 4px; font-weight:bold;">'+TDO._IDF_SYSTEM_CHANGE+'</div>'
                                                    }]
                                                  },{
                                                    columnWidth: 0.58,
                                                    items: [{
                                                        id: 'ChangeSystemId',
                                                        xtype: 'numberfield',
                                                        allowDecimals: false,
                                                        allowNegative: false,
                                                        allowBlank: false,
                                                        listeners: { 
                                                                        'specialkey': SystemPanel_OnEnter
                                                                   },
                                                        width: 130,
                                                        layout: 'form'
                                                    }] 
                                                  },      {
                                                    columnWidth: 0.12,
                                                    items: [new Ext.Button({
                                                                            icon: IAS.Setting.Path.Root+'/images/zoom.png', 
                                                                            cls: 'x-btn-icon', 
                                                                            id: 'systemChangeButton',
                                                                            handler: invokeSystemChange
                                                                           })]
                                                  }
                                                ]
                                            
                                              });        

        var SystemChangeMenu = SystemChangePanel;

        SystemMenu[IAS.Loop++] = SystemChangeMenu;
        
        if (IAS.Setting.Systems && IAS.Setting.Systems.length)
        {
            SystemMenu[IAS.Loop++] = '-';
        }
    }
   
        if (IAS.Setting.Systems && IAS.Setting.Systems.length)
        {
            var SystemIterator = 1;
            for (var MenuItem in IAS.Setting.Systems)
            {
                if (typeof (IAS.Setting.Systems[MenuItem]) != 'function')
                {
                    var Temp = new Object();
                    Temp.text =  '<b>'+IAS.Setting.Systems[MenuItem]['Desc']+'</b>';
                    
                    if (IAS.Setting.Systems[MenuItem]['Customer'])
                    {
                        var systemIcon = 'loginCustomer';
                        Temp.text += '<b class="system-info-line">'+TDO._IDF_SYSCUSTNO+': '+IAS.Setting.Systems[MenuItem]['Customer']+' | '+TDO._IDF_SYSLOGIN+': '+IAS.Setting.Systems[MenuItem]['Username']+'</b>';
                    }
                    else
                    {
                        var systemIcon = 'loginSystem';
                        Temp.text += '<b class="system-info-line">'+TDO._IDF_PERSONNAME+': '+IAS.Setting.Systems[MenuItem]['Person']+' | '+TDO._IDF_SYSLOGIN+': '+IAS.Setting.Systems[MenuItem]['Username']+'</b>';
                    }
                 
                    Temp.PSystem = IAS.Setting.Systems[MenuItem]['Id'];
                    Temp.PUser   = IAS.Setting.Systems[MenuItem]['Username'];
                    Temp.PValid  = IAS.Setting.Systems[MenuItem]['Valid'];
                    Temp.PAccess  = IAS.Setting.Systems[MenuItem]['Access'];
                    Temp.href = 'javascript:void(0);';
                    
                    Temp.iconCls = addGlobalCss('systemIcon'+IAS.Loop, IAS.Setting.Path.Root+'/images/'+systemIcon+'.png');
                    Temp.handler = function () 
                                   { 
                                        if (this.PAccess.length > 10)
                                        {
                                            LoginMask = new Ext.LoadMask(Ext.getBody(), {msg: TDO._IDF_LOGIN_WAIT});
                                            LoginMask.show();
                                            LoginUser = this.PUser;
                                            brodos.login.repeat(LoginServiceURL, this.PAccess, false, successReloginCallback, failureReloginCallback);
                                        }
                                        // Additional login required
                                        else 
                                        {
                                            showLoginDialog(this.PUser);
                                        }

                                   };
                    SystemMenu[IAS.Loop++] = Temp;
                    
                    if (IAS.Setting.Systems.length != SystemIterator)
                    {
                        SystemMenu[IAS.Loop++] = '-';
                        SystemIterator++;
                    }
                }
            }
        }
        
	var TopMenuSystem = new Ext.menu.Menu({ listeners: { 'hide': function() 
                                                                 {  
                                                                    if (Ext.getCmp('ChangeSystemId')) 
                                                                    {
                                                                        Ext.getCmp('ChangeSystemId').reset(); 
                                                                    } 
                                                                },
                                                         'show': function() 
                                                                 {  
                                                                    if (Ext.getCmp('ChangeSystemId')) 
                                                                    {
                                                                        Ext.getCmp('ChangeSystemId').clearInvalid();
                                                                        Ext.getCmp('ChangeSystemId').focus(false, 50);
                                                                    } 
                                                                }
                                            },
                                            items: SystemMenu });
	var TopButtonSystem = new Ext.Button({
                                            text: IAS.Setting.System,
                                            renderTo:'systemTopButtonShow',
                                            autoShow: true,
                                            cls: 'topmenu-button',
                                            style:'cursor: default !important;',
                                            overCls: IAS.Setting.IsSuper ? '' :'default-cursor-button',
                                            menu: ((SystemMenu.length) ? TopMenuSystem: null),
                                listeners: { 'click': function() 
                                                                 {  
                                                                    if (Ext.getCmp('ChangeSystemId')) 
                                                                    {
                                                                        Ext.getCmp('ChangeSystemId').reset(); 
                                                                    } 
                                                                }
                                            },
                                            scope : this
                                        });
	
    // Generates help button
	if (HelpMenu.length)
	{
        var TopMenuHelp = new Ext.menu.Menu({ items: HelpMenu });
		var TopButtonHelp = new Ext.Button({
                                                text: TDO._IDF_HELP,
                                                renderTo:'helpTopButtonShow',
                                                autoShow: true,
                                                cls: 'topmenu-button',
                                                menu: TopMenuHelp,
                                                scope : this
                                            });
	}
    
	

    // Generates administration button
	if (AdministrationMenu.length)
	{
        var TopMenuAdministration = new Ext.menu.Menu({items: AdministrationMenu });
		var TopButtonAdministration = new Ext.Button({
                                                text:TDO._IDF_ADMINISTRATION,
                                                renderTo:'adminTopButtonShow',
                                                autoShow: true,
                                                cls: 'topmenu-box',
                                                menu: TopMenuAdministration,
                                                scope : this
                                        });
	}	

    // Generates translation button
	if (TranslationMenu.length)
	{
        var TopMenuTranslation = new Ext.menu.Menu({ items: TranslationMenu });
		var TopButtonTranslation = new Ext.Button({
                                                    text: TDO._IDF_TRANSLATION,
                                                    renderTo:'translationTopButtonShow',
                                                    autoShow: true,
                                                    cls: 'topmenu-box',
                                                    menu: TopMenuTranslation,
                                                    scope : this
                                                 });
	} 
	
    // Generates language switcher
	if (LanguageMenu.length)
	{
        var TopMenuLanguage = new Ext.menu.Menu({ items: LanguageMenu });
		var TopButtonLanguage = new Ext.Button({
                                                    text: IAS.Setting.Language.Active.Desc,
                                                    renderTo:'languageTopButtonShow',
                                                    autoShow: true,
                                                    cls: 'topmenu-button x-btn-text-icon',
                                                    iconCls: 'topmenu-icon',
                                                    icon: IAS.Setting.Path.Root+'/images/flag/'+IAS.Setting.Language.Active.Key+'.gif',
                                                    menu: TopMenuLanguage,
                                                    scope : this
                                                });
	}
	
	var createSubMenu = function(MenuList) {
		
		var SubMenu = [];

		if (typeof(MenuList) != 'function')
		{
			for (var MenuIndex in MenuList)
			{
				var MenuItem = MenuList[MenuIndex];
				
				if (typeof(MenuItem) != 'function')
				{
					var MenuEntry  = {};
					MenuEntry.text = getMenuTextByIndex(MenuItem.Src);
					
					var ChildMenu = createSubMenu(MenuItem.Submenu);
					
					var MenuIconImage  = 'app';
					
					if (ChildMenu.length)
					{
						MenuIconImage  = 'folder';
						MenuEntry.menu = new Ext.menu.Menu({ items: ChildMenu, 
															onClick: function(e){
																					var t;
																					if(t = this.findTargetItem(e)){
																						if(t.menu){
																							t.expandMenu();
																						}else{
																							t.onClick(e);
																							this.fireEvent("click", this, t, e);
																						}
																					}
																				} });
					}
					else
					{
						MenuEntry.href = IAS.Setting.Path.Root+'/index.php/mpath/'+MenuItem.Src;
					}
					
					var Image = IAS.Setting.Path.Root+'/'; 
					
					if (MenuItem.Image.length)
					{
						Image += MenuItem.Image; 
					}
					else
					{
						Image += 'images/submenu_'+MenuIconImage+'.gif';
					}
					
					MenuEntry.iconCls = addGlobalCss('SMItem'+MenuItem.Src, Image);
					
					SubMenu.push(MenuEntry);
				}
			}
		}
		
		return SubMenu;
	};

    // Generates sub menus
    if (IAS.Setting.Submenu != undefined)
    {
        for (var MenuItem in IAS.Setting.Submenu)
        {
        	var SubItem = createSubMenu(IAS.Setting.Submenu[MenuItem]);
        	
        	if (SubItem.length)
        	{
        		SubMenu[MenuItem] = SubItem;
        	}
        }
    }

    // Generates main menu
    if (IAS.Setting.Menu.length)
    {
        IAS.Loop = 0;
        var NavigationButtonClassPrefix;
		var ButtonNavigationMenu;

        for (var MenuItem in IAS.Setting.Menu)
        {
            if (typeof (IAS.Setting.Menu[MenuItem]) != 'function')
            {   
                if (IAS.Setting.Menu[MenuItem] == IAS.Setting.ActiveMenu)
                {
                    NavigationButtonClassPrefix = 'a';
                }
                else
                {
                    NavigationButtonClassPrefix = 'p';
                }

                var ButtonNavigationMenuSettings = { text: createMenuText(getMenuTextByIndex(IAS.Setting.Menu[MenuItem]), NavigationButtonClassPrefix+'-nav-button-text-space'),
													 renderTo: 'menu_'+IAS.Setting.Menu[MenuItem],
													 autoShow: true,
													 Link: IAS.Setting.Menu[MenuItem]+'_default',
													 iconCls: addMenuCss(IAS.Setting.Path.Root+'/'+getMenuImageByIndex(IAS.Setting.Menu[MenuItem])),
													 cls: NavigationButtonClassPrefix+'-nav-button', 
													 scope : this,
													 iconAlign: 'top'
												   };
		                                
                ButtonNavigationMenu = undefined; 

                if (SubMenu[IAS.Setting.Menu[MenuItem]] != undefined && SubMenu[IAS.Setting.Menu[MenuItem]].length)
                {
                     ButtonNavigationMenu = new Ext.menu.Menu({ items: SubMenu[IAS.Setting.Menu[MenuItem]], 
																onClick : function(e){
																						var t;
																						if(t = this.findTargetItem(e)){
																							if(t.menu){
																								t.expandMenu();
																							}else{
																								t.onClick(e);
																								this.fireEvent("click", this, t, e);
																							}
																						}
																					} });
                     ButtonNavigationMenuSettings.menu = ButtonNavigationMenu;
                }

                
                NavigationButton = new Ext.Button(ButtonNavigationMenuSettings);
				
                if (ButtonNavigationMenu != undefined)
                {
					NavigationButton.on({'menushow': addMenuEvent, 'menuhide': removeMenuEvent});
					MenuEventList.push(NavigationButton);
                }
				else
				{
					// If main button has no menu: create default link on button
					NavigationButton.on({'click': function () { gotoMenuPage(this.Link); }});
				}
				
            }
        }
    }
	
    if ($('InternalMenuButton'))
    {
        var ButtonInternalMenu = new Ext.menu.Menu({ items: SubMenu['internaldata'], 
													 onClick: function(e){
																			var t;
																			if(t = this.findTargetItem(e)){
																				if(t.menu){
																					t.expandMenu();
																				}else{
																					t.onClick(e);
																					this.fireEvent("click", this, t, e);
																				}
																			}
																		} 
													});
        var InternalButton = new Ext.Button({   text: TDO._IDF_INTERNAL,
												renderTo:'InternalMenuButton',
												autoShow: true,
												cls: 'top-quick-nav-button',
												menu: ButtonInternalMenu,
												scope : this
											});
            
	   MenuEventList.push(InternalButton);
	   InternalButton.on({'menushow': addMenuEvent, 'menuhide': removeMenuEvent});
    }


    createMenuCss();
    createGlobalCss();
});







