/* ************************************************* */ /* ****************** LIST ************************* */ /* ************************************************* */ var ListItem = Class.create( { initialize: function( jsonElements, objectParameter ) { this.array = []; jQuery.each( jsonElements, jQuery.proxy( function( i, jsonElement ) { this.addItem( jsonElement, objectParameter ); }, this ) ); }, addItem:function( jsonElement, objectParameter ) { var divItem = false; var newObjectItem = new Object(); newObjectItem.jsonElement = jsonElement; newObjectItem.divItem = this.createItemDiv( newObjectItem.jsonElement, objectParameter ); this.array.push( newObjectItem ); }, addOpenListener : function( func ) { jQuery.each( this.array, function( i, objectItem ) { objectItem.divItem.addOpenListener( func ); } ); }, displayNoItem: function( parentNode, idIfNoItem, textIfNoItem ) { var divNoItem = $( document.createElement( "div" ) ); divNoItem.attr( {id:idIfNoItem} ); divNoItem.html( textIfNoItem ); parentNode.append( divNoItem ); }, display : function( parentNode, idIfNoItem, textIfNoItem, className ) { parentNode.empty(); if( 0 >= this.array.length ) this.displayNoItem( parentNode, idIfNoItem, textIfNoItem ); else jQuery.each( this.array, function( i, item ) { if( className ) item.divItem.display( parentNode, className ); else item.divItem.display( parentNode ); } ); }, displayWithPairImpair : function( parentNode, idIfNoItem, textIfNoItem ) { parentNode.empty(); if( 0 >= this.array.length ) this.displayNoItem( parentNode, idIfNoItem, textIfNoItem ); else { jQuery.each( this.array, function( i, item ) { if( 0 == i % 2 ) item.divItem.display( parentNode, "pair" ); else item.divItem.display( parentNode, "impair" ); } ); } }, getItemById: function( itemId ) { var returnObj = false; jQuery.each( this.array, jQuery.proxy( function( i, objItem ) { if( objItem.jsonElement.id == itemId ) returnObj = objItem; }, this ) ); return returnObj; } } ); /* ************************************************* */ /* ****************** ITEM ************************* */ /* ************************************************* */ var Item = Class.create( { initialize: function( jsonElement, objectParameter ) { this.jsonElement = jsonElement; this.listeners = []; if( objectParameter ) { this.language = objectParameter.language || "fr"; this.onMouseOverContainer = objectParameter.onMouseOverContainer ? objectParameter.onMouseOverContainer : false; this.onMouseOutContainer = objectParameter.onMouseOutContainer ? objectParameter.onMouseOutContainer : false; } }, getId : function() { if( jQuery.isArray( this.jsonElement ) ) return this.jsonElement[0].id; else return this.jsonElement.id; }, getName: function () { if( jQuery.isArray( this.jsonElement ) ) return this.jsonElement[0].name; else return this.jsonElement.name; }, getNameWithCode: function () { if( jQuery.isArray( this.jsonElement ) ) return this.jsonElement[0].name + " (" + this.jsonElement[0].code + ")"; else return this.jsonElement.name + " (" + this.jsonElement.code + ")"; }, getContentType: function() { return this.jsonElement.contentType; }, createContainer: function ( containerName, classNameValue ) { this.divContainer = $( document.createElement( "div" ) ); this.divContainer.item = this; if( classNameValue ) this.divContainer.addClass( classNameValue ); if( jQuery.isArray( this.jsonElement ) && 1 < this.jsonElement.length ) this.divContainer.attr( {id:containerName + "_MENU"} ); else this.divContainer.attr( {id:containerName + "_" + this.getId()} ); }, appendContainer: function ( parentNode ) { this.parentNode = parentNode; parentNode.append( this.divContainer ); }, onHoverContainer: function( event ) { var contextEvent = event.data; if( !event || (event.detail == undefined || 1 == event.detail) ) contextEvent.executeListenersFunction(); }, onClickContainer: function( event ) { var contextEvent = event.data; if( !event || (event.detail == undefined || 1 == event.detail) ) contextEvent.executeListenersFunction(); }, selectWithParameter: function( classNameValue ) { if( classNameValue ) this.divContainer.addClass( classNameValue ); }, unselectWithParameter: function( classNameValue ) { if( classNameValue ) this.divContainer.removeClass( classNameValue ); }, executeListenersFunction: function() { jQuery.each( this.listeners, jQuery.proxy( function ( i, func ) { func( this ); }, this ) ); }, addObservers: function () { if( this.divContainer ) this.divContainer.bind( 'click', this, this.onClickContainer ); if( this.divContainer && this.onMouseOverContainer ) this.divContainer.bind( 'mouseover', this, this.onMouseOverContainer ); if( this.divContainer && this.onMouseOutContainer ) this.divContainer.bind( 'mouseout', this, this.onMouseOutContainer ); }, addOpenListener: function( func ) { this.listeners.push( func ); }, addName: function ( classNameValue ) { if( !this.divContainer ) return; var divName = $( document.createElement( "div" ) ); divName.addClass( classNameValue ); divName.html( this.getName() ); this.divContainer.append( divName ); }, addNameWithMenus: function ( classNameValue, isArrowFirst ) { if( !this.divContainer ) return; if( 1 < this.jsonElement.length ) { var divMenu_name = $( document.createElement( "div" ) ); divMenu_name.addClass( classNameValue + " divMenu_parameter_name" ); divMenu_name.html( this.getName() ); var divMenu_arrow = $( document.createElement( "div" ) ); divMenu_arrow.attr( {id:"divMenu_arrow_" + this.getId()} ); if( isArrowFirst ) { divMenu_arrow.addClass( "divMenu_arrow_left" ); this.divContainer.append( divMenu_arrow ); this.divContainer.append( divMenu_name ); } else { divMenu_arrow.addClass( "divMenu_arrow" ); this.divContainer.append( divMenu_name ); this.divContainer.append( divMenu_arrow ); } this.divHiddenElements = $( document.createElement( "div" ) ); this.divHiddenElements.attr( {class:"divMenu_content" } ); jQuery.each( this.jsonElement, jQuery.proxy( function ( i, element ) { var divSubMenu_name = $( document.createElement( "div" ) ); divSubMenu_name.addClass( classNameValue + "_subMenu" ); divSubMenu_name.addClass( "parameter_menu_" + element.id ); divSubMenu_name.html( element.code ); divSubMenu_name.bind( 'click', {divContainer:this.divContainer, jsonElement:[element]}, this.onClickMenu ); this.divHiddenElements.append( divSubMenu_name ); }, this ) ); this.divContainer.append( this.divHiddenElements ); divMenu_name.toggle( jQuery.proxy( function () { $( "#divMenu_arrow_" + this.getId() ).addClass( "deployed" ); this.divHiddenElements.animate( {height:"toggle"}, 100 ); }, this ), jQuery.proxy( function () { $( "#divMenu_arrow_" + this.getId() ).removeClass( "deployed" ); this.divHiddenElements.animate( {height:"toggle"}, 100 ); }, this ) ); divMenu_arrow.toggle( jQuery.proxy( function () { $( "#divMenu_arrow_" + this.getId() ).addClass( "deployed" ); this.divHiddenElements.animate( {width:"toggle"}, 100 ); }, this ), jQuery.proxy( function () { $( "#divMenu_arrow_" + this.getId() ).removeClass( "deployed" ); this.divHiddenElements.animate( {width:"toggle"}, 100 ); }, this ) ); } else this.addName( classNameValue ); }, onClickMenu: function( event ) { event.data.divContainer.item.jsonElement = event.data.jsonElement; } } );