Changed zouba directory heirarchy.
[ptas] / zouba / wrt / preview / script / lib / menu.js
diff --git a/zouba/wrt/preview/script/lib/menu.js b/zouba/wrt/preview/script/lib/menu.js
new file mode 100644 (file)
index 0000000..bb3bd3c
--- /dev/null
@@ -0,0 +1,497 @@
+/**
+ * widget object constructor
+ * @param {void}
+ *     widget()
+ * @return {void}
+ */ 
+
+if (typeof window.menu == "undefined" || !window.menu) 
+{
+       window.menu = 
+       {
+               author : 'Nokia WRT Emulation Library',
+               items : [],
+               index : null,
+               isDimmed : false,       
+                       
+               //      Event triggers
+               onShow : null,
+               onRightSoftKeySelect : null,
+       };
+       
+       
+       /*
+               Function        :       menu.append()
+               Argument        :       MenuItem Object
+               Returns         :       Void
+               Description     :       Function appends MenuItem to a Menu Object
+       */
+       menu.append = function(MenuItem)
+       {
+               if(this.allowedTypeOf(MenuItem))
+               {
+                       var i;
+                       var flag = true;
+                       try{
+                       for(var key in this.items)
+                       {
+                               if(this.items[key].id == MenuItem.id)
+                               {       
+                                       flag = false; 
+                                       break; 
+                               }
+                       }} catch(e){ }
+                       if(flag)
+                       {
+                               //      MenuItem.parent = this;
+                               this.items[MenuItem.id] = MenuItem;
+                       }
+               }
+       }
+       
+       
+       /*
+               Function        :       menu.remove()
+               Argument        :       MenuItem Object
+               Returns         :       Void
+               Description     :       Function Remove the menuItem and its children from the container options menu.
+       */
+       menu.remove = function(MenuItem)
+       {
+               if(!this.allowedTypeOf(MenuItem))
+                       return false;
+       
+               var flag = false;
+               if (this.items.length) {
+                       for (var key in this.items) {
+                               if (this.items[key].id == MenuItem.id) {
+                                       flag = true;
+                                       break;
+                               }
+                       }
+               }
+               if(flag)
+               {
+                       this.items.splice(key, 1);
+               }
+       }
+       
+       /*
+               Function        :       menu.clear()
+               Argument        :       Void
+               Returns         :       Void
+               Description     :       Clears (deletes) all the menu items in the menupane.
+       */
+       menu.clear = function()
+       {
+               try
+               {
+                       this.items.splice(0, this.items.length);
+               }catch(e){}
+       }
+       
+       
+       /*
+               Function        :       Menu.getMenuItemById(id)
+               Argument        :       Integer
+               Returns         :       MenuItem Object
+               Description     :       Function get the MenuItem Object with the reference of id
+       */
+       menu.getMenuItemById = function(id)
+       {
+               var menuItemRef = menu.menuItemExhistsById(this, id, 0);
+               if(this.allowedTypeOf(menuItemRef))
+                       return menuItemRef;
+               else
+                       return undefined;
+       }
+       
+       
+       /*
+               Function        :       Menu.getMenuItemByName(name)
+               Argument        :       String
+               Returns         :       MenuItem Object
+               Description     :       Function get the MenuItem Object with the reference of String name
+       */
+       menu.getMenuItemByName = function(name)
+       {
+               var menuItemRef = menu.menuItemExhistsById(this, name, 1);
+       
+       //      if(menuItemRef !=null)
+               if(this.allowedTypeOf(menuItemRef))
+                       return menuItemRef;
+               else
+                       return undefined;
+       }
+       
+       /*
+               Function        :       Menu.setRightSoftkeyLabel()
+               Argument        :       String, Function
+               Returns         :       Void
+               Description     :       Set the label of the right soft key to str. This enables the default text 
+                                               to be changed from exit and a new function assigned by setting a callbackfunction
+       */
+
+       menu.setRightSoftkeyLabel = function(label, callback)
+       {
+               window.menu = this;
+               try
+               {
+                       if(typeof label != '' && !label)
+                               this.setExitToRsk();                    
+
+                       else if(typeof callback != 'function' && !callback)
+                               this.setExitToRsk();                    
+                       
+                       else if (_BRIDGE_REF.nokia.menu.setRsk(callback)) {
+                               _BRIDGE_REF.parent.$("#RskLabel > a")[0].innerHTML = label;
+                               _BRIDGE_REF.nokia.menu.rsk_label = label;
+                               _BRIDGE_REF.nokia.menu.rsk_event = callback;
+                               _BRIDGE_REF.nokia.menu.is_rsk_overridden = true;
+                       }
+                       else 
+                               this.setExitToRsk();
+
+               }catch(e){ 
+                       // alert(e);
+                }
+       }
+
+
+       menu.setExitToRsk = function()
+       {
+               this.onRightSoftKeySelect = null;
+
+               _BRIDGE_REF.nokia.menu.is_rsk_overridden = false;
+               _BRIDGE_REF.nokia.menu.rsk_label = '';
+               _BRIDGE_REF.nokia.menu.rsk_event = null;
+               _BRIDGE_REF.parent.$("#RskLabel > a")[0].innerHTML = 'Exit';
+
+               _BRIDGE_REF.nokia.menu.setRsk(function(){
+                       _BRIDGE_REF.nokia.menu.exit();
+               });
+       }
+       
+       /*
+               Function        :       Menu.showSoftkeys()
+               Argument        :       Void
+               Returns         :       Void
+               Description     :       Makes the softkeys visible. By default the softkeys are not visible
+       
+       */
+       menu.showSoftkeys = function()
+       {
+               /*
+                *  Shows showSoftkeys
+                */
+               _BRIDGE_REF.nokia.menu.softkeys_visibility = true;
+               _BRIDGE_REF.nokia.menu.showSoftKeys();
+       }
+       
+       /*
+               Function        :       Menu.hideSoftkeys()
+               Argument        :       Void
+               Returns         :       Void
+               Description     :       Makes the softkeys invisible. By default the softkeys are not visible. 
+       
+       */
+       menu.hideSoftkeys = function()
+       {
+               /*
+                *  Hide showSoftkeys
+                */
+               _BRIDGE_REF.nokia.menu.softkeys_visibility = false;
+               _BRIDGE_REF.nokia.menu.hideSoftKeys();
+       }
+       
+       
+       /*      
+        *  
+        * ----------------------------------------------------------------
+        * Exta Functionalities which helps to make main functions to work
+        * ----------------------------------------------------------------
+        *  
+       */
+       
+       menu.cancel = function()
+       {
+               _BRIDGE_REF.nokia.menu.cancel();
+       }
+       
+       menu.exit = function()
+       {
+               _BRIDGE_REF.nokia.menu.exit();
+       }
+       
+       
+       menu.triggeLSKEvent = function()
+       {
+               if(typeof(window.menu.onShow) == 'function')
+               {
+                               window.menu.onShow();
+               }
+               _BRIDGE_REF.parent.$('#softKeysPane').show();
+               this.show();
+       }
+       
+       menu.triggerEvent = function(MenuItemId)
+       {
+               try{
+                       var menuItemRef = this.menuItemExhistsById(this, MenuItemId, 0);
+                       if(menuItemRef != null)
+                       {
+                               if(typeof menuItemRef.onSelect == 'function')
+                                       menuItemRef.onSelect(MenuItemId);
+               
+                               if(_BRIDGE_REF.helper.getElementsLengthInObject(menuItemRef.items))
+                                       this.show(MenuItemId);
+                               else
+                                       this.cancel();
+
+                       }else
+                       {
+                               this.show();
+                       }
+               }
+               catch(e)
+               {
+                       alert('triggeEvent: '+MenuItemId+' >> '+e);
+               }
+       }
+       
+       menu.hasChild = function(parentId)
+       {
+               for(var i in this.items)
+               {
+                       if(this.items[i].parentId == parentId)
+                       {       
+                                return true;
+                       }
+               }
+               return false;
+       }
+       
+       
+       menu.allowedTypeOf = function(MenuItem)
+       {
+               try
+               {
+                       if( (typeof(MenuItem) == 'object') && (MenuItem.type == 'MenuItem'))
+                               return true;                    
+               }
+               catch(e)
+               {
+                       return false;
+               }
+       }
+       
+       menu.show = function(parentId)
+       {
+               try
+               {
+                       var menuItemsPane = _BRIDGE_REF.parent.$('#MenuItemsArea')
+                       menuItemsPane = menuItemsPane[0];
+                       
+                       menuItemsPane.innerHTML = '';
+                       
+                       var ul = document.createElement('ul');
+                       var ele = window.menu;
+
+                       if(typeof parentId != 'undefined' && typeof parentId == 'object')
+                       {
+                               if (typeof window.menu.onShow != null && typeof window.menu.onShow == 'function') {
+                                       window.menu.onShow();
+                               }
+                       }
+
+                       if(typeof parentId == 'number')
+                       {
+                               var tempRef = menu.menuItemExhistsById(ele, parentId, 0);
+       
+                               if(typeof parentId != 'undefined' && typeof tempRef != 'undefined')
+                                       ele = tempRef;
+                       }
+
+                       if(_BRIDGE_REF.helper.getElementsLengthInObject(ele.items))
+                       {
+                               for(var key in ele.items)
+                               {
+                                       if(!ele.items[key].isDimmed){
+                                               
+                                               try{
+                                                       ul.appendChild(menu.create_menuElement(ele.items[key]));
+                                               }catch(e){  }
+                                       }
+                               }
+                               if(typeof parentId == 'number' && _BRIDGE_REF.helper.getElementsLengthInObject(ele.items))
+                               {
+                                       if(ele.parent)
+                                               ul.appendChild(menu.create_normalMenuItem('Back', ele.parent.id));      
+                                       else
+                                               ul.appendChild(menu.create_normalMenuItem('Back', null));       
+                               }
+                               else
+                               {
+                                       ul.appendChild(menu.create_exitMenuItem());     
+                               }
+
+
+                               if(_BRIDGE_REF.helper.getElementsLengthInObject(ele.items) > 5)
+                                       menuItemsPane.style.overflowY = 'scroll';
+                               else
+                                       menuItemsPane.style.overflowY = 'hidden';
+
+                       }
+                       else
+                       {
+                               menuItemsPane.style.overflowY = 'hidden';
+                               ul.appendChild(menu.create_exitMenuItem());     
+                       }
+                       menuItemsPane.innerHTML = '<ul>'+ul.innerHTML+'</ul>';
+                       
+                       _BRIDGE_REF.nokia.menu.show();
+               }
+               catch(e)
+               {
+                       alert('menu.show: '+e);
+               }
+       }
+
+
+
+/*
+*
+*      HELPER FUNCTIONS
+*
+*/
+
+       menu.menuItemExhistsById = function(menuReference, value, argumentType)
+       {
+               var flag = null;
+               
+               for(var key in menuReference.items)
+               {
+                       if(!argumentType)
+                       {
+                               if(menuReference.items[key].id == value)
+                               {       
+                                       flag = true; 
+                                       break; 
+                               }
+                       }
+                       else
+                       {
+                               if(menuReference.items[key].name == value)
+                               {       
+                                       flag = true; 
+                                       break; 
+                               }
+                       }
+                       
+                       if(menuReference.items[key].items != undefined && menuReference.items[key].items.length)
+                       {
+                               var temp = this.menuItemExhistsById(menuReference.items[key], value, argumentType);
+                               if(temp)
+                                       return temp;
+                       }
+               }
+               if(flag)
+               {
+                       // crate a package and send it
+                       menuReference.items[key].index = key;
+                       return menuReference.items[key];
+               }
+               else
+                       return null;
+       }
+       
+       menu.create_menuElement = function(MenuItem) 
+       {
+               var listitem = document.createElement('li');
+               listitem.id = MenuItem.id;
+               listitem.setAttribute('onClick', 'javascript:NOKIA.emulator.child.menu.triggerEvent('+MenuItem.id+');');
+       
+           var anchor = document.createElement('a');
+               anchor.id = 'subMenuItem_'+MenuItem.id;
+               anchor.innerHTML = MenuItem.name;
+               if(_BRIDGE_REF.helper.getElementsLengthInObject(MenuItem.items))
+               {  
+                       anchor.className = 'subMenuItem';
+                       anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.show('+MenuItem.id+');');
+               }
+           listitem.appendChild(anchor);
+               return (listitem);
+       }
+       
+       menu.create_normalMenuItem = function(MenuTitle, index) 
+       {
+           var listitem = document.createElement('li');
+       
+           var anchor = document.createElement('a');
+               anchor.id = 'subMenuItem_BACK';
+               anchor.innerHTML = MenuTitle;
+       
+               if (MenuTitle == 'Back') {
+                       listitem.className = 'exitOrBackBtn';
+                       anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.triggerEvent(' + index + ');');
+               }
+               else 
+                       anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.triggerEvent(' + index + ');');
+           
+               listitem.appendChild(anchor);
+               return (listitem);
+       }
+       
+       menu.create_exitMenuItem = function() 
+       {
+           var listitem = document.createElement('li');
+               listitem.className = 'exitOrBackBtn';
+           var anchor = document.createElement('a');
+               anchor.id = 'subMenuItem_EXIT';
+               anchor.innerHTML = 'Exit';
+               anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.exit();');
+               listitem.setAttribute('onClick', 'javascript:NOKIA.emulator.child.menu.exit();');
+               
+           listitem.appendChild(anchor);
+               return (listitem);
+       }
+       
+       menu.triggeRSK = function()
+       {
+               try {
+                       if (window.menu) {
+                               if (childToParent_Reference.$('softKeysPane').style.display != 'none') {
+                                       if (window.menu.onRightSoftKeySelect != null) {
+                                               window.menu.onRightSoftKeySelect();
+                                               window.menu.cancel();
+                                       }
+                                       else {
+                                               window.menu.cancel();
+                                       }
+                               }
+                       }
+               }catch(e)
+               {
+                       alert(e);
+               }
+       }
+       
+       menu.triggeLSK = function()
+       {
+               if(window.menu)
+               {
+                       window.menu.show();
+                       if(typeof(window.menu.onShow) == 'function')
+                       {
+                               if(window.menu.onShow)
+                               {
+                                       window.menu.onShow();
+                               }
+                       }
+               }
+       }
+
+
+       //      make TRUE menu.js script loaded
+       window.parent.NOKIA.scriptsLoaded.menu = true;
+}
\ No newline at end of file