/**
 * doijs package
 * 
 * @author donna iwan setiawan
 * @version 0.1 
 * copyright - (c) 2007 - 2008 donna iwan setiawan
 * license - GPL version 3 or any later version <http://www.gnu.org/licenses/gpl-3.0.txt>
 */
doi.widget.menu=function(){doi.widget.menu.baseConstructor.call(this);var _item=[];this.menu=[];this._render=function(parentItem,parentElement){var jsPattern=/^javascript\:/i;var jx=0;for(var j=0;j < parentElement.childNodes.length;j++){if(parentElement.childNodes[j].tagName !='LI'){continue;}parentItem.item[jx]={icon:'',title:'',click:'',clickType:'a',status:'',item:[]};var kx=0;for(var k=0;k < parentElement.childNodes[j].childNodes.length;k++){if(parentElement.childNodes[j].childNodes[k].tagName=='A'){var l=0;for(var l=0;l < parentElement.childNodes[j].childNodes[k].childNodes.length;l++){if(parentElement.childNodes[j].childNodes[k].childNodes[l].nodeName=='#text'){parentItem.item[jx].title=parentElement.childNodes[j].childNodes[k].childNodes[l].nodeValue;}else if(parentElement.childNodes[j].childNodes[k].childNodes[l].tagName=='IMG'){parentItem.item[jx].icon=parentElement.childNodes[j].childNodes[k].childNodes[l].src || '';}}var href=parentElement.childNodes[j].childNodes[k].getAttribute('HREF');if(href){if(href.match(jsPattern)){parentItem.item[jx].clickType='function';parentItem.item[jx].click=unescape(href.replace(jsPattern,''));}else{parentItem.item[jx].clickType=parentElement.childNodes[j].childNodes[k].getAttribute('TARGET')|| 'a';parentItem.item[jx].click=href;}}parentItem.item[jx].status=unescape(parentElement.childNodes[j].childNodes[k].title|| '');}else if(parentElement.childNodes[j].childNodes[k].tagName=='UL'){this._render(parentItem.item[jx],parentElement.childNodes[j].childNodes[k]);}kx++;}jx++;}};this.draw=function(){doi.event.addEventListener(doi,'load',this.toString()+'.render()');};this.render=function(){var items=doi.dom.getElementsByTagName('div');var ix=0;for(var i=0;i < items.length;i++){var doiAtt=items[i].getAttribute('title');if(!doiAtt || !doiAtt.match(/doimenu/i)){continue;}for(var j=0;j < items[i].childNodes.length;j++){if(items[i].childNodes[j].tagName !='UL'){continue;}_item[ix]={element:items[i],item:[]};this._render(_item[ix],items[i].childNodes[j]);break;}ix++;}for(var i=0;i < _item.length;i++){if(!_item[i]){continue;}var attribute=this.parseAttribute(_item[i].element.getAttribute('title'));_item[i].element.setAttribute('title','');var shadow=!!attribute.shadow;var zIndex=doi.dom.parseInt(attribute.zIndex);var prefix=_item[i].element.getAttribute('class')|| _item[i].element.className || 'dm';if(zIndex <=0){zIndex=100;}this.menu[i]=new doi.widget.menuBar(_item[i].element);this.renderMenu(this.menu[i],_item[i].item);this.menu[i].zIndex=zIndex;this.menu[i].setClassNamePrefix(prefix);var layout=(attribute.layout)|| 'hv';if(layout !=null && layout.charAt){this.menu[i].setLayout(layout.charAt(0),layout.charAt(1));}this.menu[i].setShadow(shadow);this.menu[i].draw();}};this.renderMenu=function(menu,item){for(var i=0;i < item.length;i++){var menuItem=new doi.widget.menuItem({title:item[i].title,url:item[i].click,target:item[i].clickType,icon:item[i].icon,status:item[i].status});this.renderMenu(menuItem,item[i].item);menu.addItem(menuItem);}};};doi.extend(doi.widget.menu,doi.widget.base);doi.widget.menuBar=function(_element){doi.widget.menuBar.baseConstructor.call(this);var _timer=null;var isInitialized=false;var isDocClickRegistered=false;var isRendered=false;var visibleItem=[];this._element=null;this._onLoadCalled=false;this.all_item=[];this.className='dm_menu';this.item=[];this.itemClassName='dm_menuitem';this.layout='h';this.level=-1;this.menuClassName='dm_popmenu';this.menuItemClassName='dm_popmenuitem';this.menuLayout='v';this.shadow={visible:false,style:'',className:this.className+'_shadow',distance:5};this.timeout=0;this.zIndex=1;this.addItem=function(item){if(item instanceof doi.widget.menuItem){this.item.push(item);}};this.draw=function(){if(!_element){this.init();this.render();return;}else{this._element=doi.dom.getElement(_element);if(!this._element){if(!this._onLoadCalled){doi.event.addEventListener(window,'load',this.toString()+'.draw()');this._onLoadCalled=true;return;}else{return;}}}this.init();this.render();};this.hasItem=function(){return(this.item.length > 0);};this.hide=function(event,element,index){if(this.timeout > 0){_timer=window.setTimeout(this.toString()+'.hideAll()',this.timeout);}};this.hideAll=function(){for(var i=visibleItem.length-1;i >=0;i--){visibleItem[i].hide();visibleItem.pop();}};this.init=function(){if(!doi.widget.menuBarInstanceNumber){doi.widget.menuBarInstanceNumber=0;}doi.widget.menuBarInstanceNumber++;this.zIndex-=doi.widget.menuBarInstanceNumber;if(this.zIndex <=0){this.zIndex=1;}var tmpLayout=this.layout;this.layout=this.menuLayout;var tmpClassName=this.className;this.className=this.menuItemClassName;for(var i=0;i < this.item.length;i++){this.item[i].parentItem=this;this.item[i].topItem=this;this.item[i].init();this.item[i].className=this.itemClassName;}this.layout=tmpLayout;this.className=tmpClassName;};this.onDocumentClick=function(event){if(!isDocClickRegistered){return;}this.hideAll();doi.event.removeEventListener(document,'click',this.toString()+'.onDocumentClick(event)');isDocClickRegistered=false;};this.registerItem=function(item){item.index=this.all_item.length;item.id=item.topItem.id+'_'+item.index;item.name=item.id;this.all_item.push(item);};this.registerVisibleItem=function(item){var level=item.level;for(var i=visibleItem.length-1;i >=level;i--){visibleItem[i].hide();visibleItem.pop();}visibleItem.push(item);};this.render=function(){if(this.hasItem()){var o='<div class="'+this.className+'" style="position:relative;z-index:'+this.zIndex+'" onclick="'+this.toString()+'.onDocumentClick(event)">';var htmls=[];for(var i=0;i < this.item.length;i++){htmls[i]=this.item[i].draw();}if(this.layout !='v'){o+='<table border="0" cellpadding="0" cellspacing="0" style="position:relative"><tr><td>'+htmls.join('</td><td>')+'</td></tr></table>';}else{o+=htmls.join('');}o+='</div>';if(this._element){this._element.innerHTML=o;}else{document.write(o);}}};this.setClassNamePrefix=function(prefix){if(prefix){this.className=prefix+'_menu';this.itemClassName=prefix+'_menuitem';this.menuClassName=prefix+'_popmenu';this.menuItemClassName=prefix+'_popmenuitem';this.shadow.className=prefix+'_menu_shadow';}};this.setLayout=function(menuBarLayout,menuLayout){switch(menuBarLayout){case 'v':this.layout='v';break;default:this.layout='h';}switch(menuLayout){case 'v':this.menuLayout='v';break;default:this.menuLayout='h';}};this.setShadow=function(shadow){if(typeof shadow=='object'){this.shadow.visible=!!shadow.visible;this.shadow.style=shadow.style |'';this.shadow.className=shadow.className || this.menuClassName+'_shadow';this.shadow.distance=shadow.distance || 5;}else{this.shadow.visible=!!shadow;}};this.show=function(event,element,index){if(this.all_item[index].frame && this.all_item[index].frame.visible){return;}doi.event.stopPropagation(event);this.all_item[index].show(element);this.registerVisibleItem(this.all_item[index]);if(this.timeout > 0){if(_timer){window.clearTimeout(_timer);}}else{if(!isDocClickRegistered){doi.event.addEventListener(document,'click',this.toString()+'.onDocumentClick(event)');isDocClickRegistered=true;}}};};doi.extend(doi.widget.menuBar,doi.widget.base);doi.widget.menuItem=function(_conf){if(!_conf){var _conf={};}this.className='dm_menuitem';this.conf={};this.element=null;this.frame=null;this.html='';this.icon={active:null,hover:null,disabled:null};this.index=0;this.item=[];this.level=0;this.layout='v';this.menuClassName='dm_menu';this.nodeConfiguration=null;this.nodeIcon={visible:true,active:'',hover:'',type:'text'};this.offsetPos={x:0,y:0};this.parentItem=null;this.shadow={visible:false,style:'',className:this.menuClassName+'_shadow',distance:'5'};this.topItem=null;this.zIndex=100;this.addItem=function(item){if(item instanceof doi.widget.menuItem){this.item.push(item);}};this.changeMenuItemClassName=function(element,mode){if(!element){return;}if(!mode){mode='';}else{mode='_'+mode;}element.className=this.className+mode;var tableElement=element.childNodes[0];tableElement.className=this.className+mode;var rowElement=tableElement.childNodes[0].childNodes[0];rowElement.childNodes[0].className=this.className+'_icon'+mode;rowElement.childNodes[1].className=this.className+'_title'+mode;rowElement.childNodes[2].className=this.className+'_node'+mode;if(mode==''){if(this.icon.active && this.icon.active.src&& rowElement.childNodes[0].childNodes[0]&& rowElement.childNodes[0].childNodes[0].src){rowElement.childNodes[0].childNodes[0].src=this.icon.active.src;}if(this.hasItem()){if(this.nodeIcon.active && this.nodeIcon.active.src&& rowElement.childNodes[2].childNodes[0]&& rowElement.childNodes[2].childNodes[0].src){rowElement.childNodes[2].childNodes[0].src=this.node.active.src;}else{rowElement.childNodes[2].innerHTML=this.nodeIcon.active;}}}else{if(this.icon.hover && this.icon.hover.src&& rowElement.childNodes[0].childNodes[0]&& rowElement.childNodes[0].childNodes[0].src){rowElement.childNodes[0].childNodes[0].src=this.icon.hover.src;}if(this.hasItem()){if(this.nodeIcon.hover && this.nodeIcon.hover.src&& rowElement.childNodes[2].childNodes[0]&& rowElement.childNodes[2].childNodes[0].src){rowElement.childNodes[2].childNodes[0].src=this.nodeIcon.hover.src;}else{rowElement.childNodes[2].innerHTML=this.nodeIcon.hover;}}}};this.draw=function(){var o='';if(this.isSeparator()){o='<div class="';if(this.parentItem.layout=='v'){o+=this.className+'_separator"';}else{o+=this.className+'_vseparator"';}o+=' onmouseover="'+this.toString()+'.onMouseOver(event,this)" ';o+=' onmouseout="'+this.toString()+'.onMouseOut(event,this)" ';o+=' onclick="doi.event.stopEvent(event);"><div></div></div>';return o;}o='<div ';o+=' class="'+this.className+'" style="position:relative;"';o+=' onmouseover="'+this.toString()+'.onMouseOver(event,this)" ';o+=' onmouseout="'+this.toString()+'.onMouseOut(event,this)" ';if(this.conf.onClick !=''){o+=' onclick="'+this.conf.onClick+this.topItem.toString()+'.onDocumentClick(event);" ';}else{o+=' onclick="doi.event.stopEvent(event)" ';}o+='>';o+='<table class="'+this.className+'" width="100%" border="0" cellpadding="0" cellspacing="0" height="100%"><tr>';o+='<td class="'+this.className+'_icon">';if(this.icon.active){o+='<img class="'+this.className+'_icon" src="'+this.icon.active.src+'" border="0"/>';}else{o+='&nbsp;';}o+='</td>';o+='<td class="'+this.className+'_title">'+this.conf.title+'</td>';o+='<td class="'+this.className+'_node" align="right">';if(this.hasItem()&& this.nodeIcon.visible){if(this.nodeIcon.active.src){o+='<img class="'+this.className+'_node" src="'+this.nodeIcon.active.src+'" border="0"/>';}else{if(this.nodeIcon.active==''){if(this.parentItem.layout=='v'){this.nodeIcon.active='&#9658;';}else{this.nodeIcon.active='&#9660;';}}if(this.nodeIcon.hover==''){if(this.parentItem.layout=='v'){this.nodeIcon.hover='&#9658;';}else{this.nodeIcon.hover='&#9660;';}}o+=this.nodeIcon.active;}}else{o+='&nbsp;';}o+='</td>';o+='</tr></table>';if(this.hasItem()){var htmls=[];var html='';for(var i=0;i < this.item.length;i++){htmls[i]=this.item[i].draw();}if(this.layout !='v'){html='<table border="0" cellpadding="0" cellspacing="0"><tr><td>'+htmls.join('</td><td>')+'</td></tr></table>';}else{html=htmls.join('');}this.frame=new doi.widget.frame(html,{id:'m_'+this.id,className:this.menuClassName,zIndex:this.zIndex});this.frame.setShadow(this.shadow);this.html=this.frame.draw(true);o+=this.html;}o+='</div>';return o;};this.hasItem=function(){return(this.item.length > 0);};this.hide=function(){if(this.frame){this.frame.hide();this.changeMenuItemClassName(this.element);}};this.init=function(){this.topItem.registerItem(this);this.level=this.parentItem.level+1;this.setShadow(this.parentItem.shadow);this.className=this.parentItem.className;this.menuClassName=this.parentItem.menuClassName;this.layout=this.parentItem.layout;this.setNodeIcon(this.nodeConfiguration);this.zIndex=this.parentItem.zIndex+1;for(var i=0;i< this.item.length;i++){this.item[i].parentItem=this;this.item[i].topItem=this.topItem;this.item[i].init();}};this.isSeparator=function(){return(this.conf.title=='-');};this.onMouseOut=function(event,element){doi.event.setEvent(event);doi.event.stopPropagation();var reltg=doi.event.toTarget;if(!reltg){return;}while((reltg !=element)&&(reltg.nodeName !='BODY')&&(reltg.nodeName !='HTML')){reltg=reltg.parentNode;}if(reltg==element){return;}this.topItem.hide(event,element,this.index);if(this.frame && this.frame.visible){return;}window.status='';if(this.isSeparator()){return;}this.changeMenuItemClassName(element);};this.onMouseOver=function(event,element){window.status=this.conf.status;doi.event.stopPropagation(event);if(this.isSeparator()){return;}this.changeMenuItemClassName(element,'hover');this.topItem.show(event,element,this.index);};this.setConfiguration=function(conf){this.conf.status=(conf.status)|| '';this.conf.url=(conf.url)|| '';this.conf.title=(conf.title)|| '';this.conf.target=(conf.target)|| 'a';this.conf.onClick='';if(this.conf.url !=''){var pattern=/^javascript\:/i;if(this.conf.url.match(pattern)){this.conf.url=this.conf.url.replace(pattern,'');this.conf.target='f';}this.conf.target=this.conf.target.toLowerCase();switch(this.conf.target){case 'a':case 'address':case '_self':this.conf.target='a';this.conf.onClick="window.open('"+this.conf.url+"','_self');";break;case '_blank':case '_top':case '_parent':this.conf.onClick="window.open('"+this.conf.url+"','"+this.conf.target+"');";break;case 'f':case 'func':case 'function':this.conf.onClick=this.conf.url+';';break;default:this.conf.onClick='';}};};this.setIcon=function(conf){if(!conf){return;}if(typeof conf=='string' && conf !=''){this.icon.active=new Image();this.icon.active.src=conf;}else{if(conf.active){this.icon.active=new Image();this.icon.active.src=conf.active;}if(conf.hover){this.icon.hover=new Image();this.icon.hover.src=conf.hover;}if(conf.disabled){this.icon.disabled=new Image();this.icon.disabled.src=conf.disabled;}}};this.setNodeIcon=function(conf){if(!conf){return;}this.nodeConfiguration=conf;if(typeof conf=='string'){this.nodeIcon.active=conf;this.nodeIcon.hover=conf;}else{(typeof conf.visible !='undefined')?this.nodeIcon.visible=!!conf.visible:true;if(conf.type && conf.type=='image'){if(conf.active){this.nodeIcon.active=new Image();this.nodeIcon.active.src=conf.active;this.nodeIcon.hover=this.nodeIcon.active;}if(conf.hover){this.nodeIcon.hover=new Image();this.nodeIcon.hover.src=conf.hover;}}else{this.nodeIcon.active=conf.active || '';this.nodeIcon.hover=conf.hover || this.nodeIcon.active;}}};this.setShadow=function(shadow){if(typeof shadow=='object'){this.shadow.visible=!!shadow.visible;this.shadow.style=shadow.style || '';this.shadow.className=shadow.className || this.menuClassName+'_shadow';if(this.shadow.visible){this.shadow.distance=shadow.distance || 5;}else{this.shadow.distance=shadow.distance || 0;}}else{this.shadow.visible=!!shadow;}};this.show=function(element){if(this.frame){this.element=element;var l=this.offsetPos.x;var t=this.offsetPos.y;var clientDimension=doi.dom.getClientDimension();var body=doi.dom.getBodyScroll();if(this.parentItem.layout=='v'){l=element.offsetWidth;}else{t=element.offsetHeight;}this.frame.show(l,t);l=0;t=0;if(this.parentItem.layout=='v'){if(this.frame.left-element.offsetWidth-this.frame.width < 0){}else{if(clientDimension.width+body.scrollLeft < this.frame.left+this.frame.width+this.shadow.distance){l=-element.offsetWidth-this.frame.width;}}if(body.scrollTop > this.frame.top){t=body.scrollTop-this.frame.top;}else{if(clientDimension.height+body.scrollTop < this.frame.top+this.frame.height+this.shadow.distance){var oT=this.frame.top+this.frame.height+this.shadow.distance-clientDimension.height-body.scrollTop;if(this.frame.top-oT > 0){t=-oT;}}}}else{if(this.frame.top-element.offsetHeight-this.frame.height < 0){}else{if(clientDimension.height+body.scrollTop < this.frame.top+this.frame.height+this.shadow.distance){t=-element.offsetHeight-this.frame.height;}}if(body.scrollLeft > this.frame.left){l=body.scrollLeft-this.frame.left;}else{if(clientDimension.width+body.scrollLeft < this.frame.left+this.frame.width+this.shadow.distance){var oL=this.frame.left+this.frame.width+this.shadow.distance-clientDimension.width-body.scrollLeft;if(this.frame.left-oL > 0){l=-oT;}}}}this.frame.relativeMoveTo(l,t);}};this.toString=function(){if(!this.topItem){return '';}return this.topItem.toString()+'.all_item['+this.index+']';};this.setConfiguration(_conf);if(_conf.icon){this.setIcon(_conf.icon);}if(_conf.node){this.setNodeIcon(conf.node);}};
