/**
 * 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.tab=function(){doi.widget.tab.baseConstructor.call(this);this.item=[];this.render=function(){var items=doi.dom.getElementsByTagName('div');var ix=0;for(var i=0;i < items.length;i++){var doiAt=items[i].getAttribute('title');if(!doiAt || !doiAt.match(/doitab/i)){continue;}var doiAtt=this.parseAttribute(doiAt);this.item[ix]=new doi.widget.tabByElement(items[i]);this.item[ix].className=items[i].getAttribute('class')|| items[i].className || 'dt';this.item[ix].setTabAlign(doiAtt['tabAlign']);this.item[ix].setTabPosition(doiAtt['tabPosition']);this.item[ix].setTabSpaceWidth(doiAtt['tabSpaceWidth']);this.item[ix].setTabWidth(doiAtt['tabWidth']);this.item[ix].setTabHeight(doiAtt['tabHeight']);this.item[ix].setTabIndex(doiAtt['tabIndex']);this.item[ix].setHeaderHeight(doiAtt['headerHeight']);this.item[ix].draw();items[i].setAttribute('title','');ix++;}};this.draw=function(){doi.event.addEventListener(doi,'load',this.toString()+'.render()');};};doi.extend(doi.widget.tab,doi.widget.base);doi.widget.tabByElement=function(_element){var _instanceName=doi.instance.save(this);this._element=null;this._tabElement=null;this._onLoadCalled=false;this.baseClassName='dt';this.className='dt';this.drawOuterLeft=false;this.drawOuterRight=false;this.headerHeight=30;this.item=[];this.outerLeftTabElement=null;this.outerRightTabElement=null;this.tabHeaderAlign='left';this.tabHeaderHeight=25;this.tabHeaderWidth=50;this.tabIndex=0;this.tabPosition='top';this.tabSpaceWidth=0;this._init=function(){var z=0;var isFocus=false;this.baseClassName=this.className;if(this.tabPosition !='top'){this.className=this.baseClassName+'_bottom';}for(var i=0;i < this._element.childNodes.length;i++){if(this._element.childNodes[i].tagName=='DIV'){this.item[z]={index:z,title:this._element.childNodes[i].getAttribute('title')|| '',icon:this._element.childNodes[i].getAttribute('icon')|| '',innerHTML:this._element.childNodes[i].innerHTML,element:this._element.childNodes[i],tabElement:null,isFocus:false,width:this.tabHeaderWidth};this._element.childNodes[i].setAttribute('title','');this._element.childNodes[i].className=this.baseClassName+'_content_hidden';this._element.childNodes[i].style.position='relative';if(!isFocus){if(this.tabIndex >=0){if(z==this.tabIndex){isFocus=true;this.item[z].isFocus=true;this._element.childNodes[i].className=this.className+'_content';this.tabIndex=z;}}else{if(this._element.childNodes[i].getAttribute('focus')){isFocus=true;this.item[z].isFocus=true;this._element.childNodes[i].className=this.className+'_content';this.tabIndex=z;}}}z++;this._element.childNodes[i].style.height='auto';}}if(!isFocus){this.item[0].isFocus=true;this.item[0].element.className=this.className+'_content';this.tabIndex=0;}};this._render=function(){var o='';if(this.item.length > 0){o+='<div class="'+this.className+'" style="position:absolute;width:100%;overflow:hidden;" align="'+this.tabHeaderAlign+'"><table class="'+this.className+'" border="0" cellpadding="0" cellspacing="0"><tr class="'+this.className+'">';var indexes=[];var index=0;for(var i=0;i < this.item.length;i++){if(this.drawOuterLeft && i==0){o+='<td class="'+this.className+'_outerleft">&nbsp;</td>';++index;}o+='<td style="';if(this.tabHeaderWidth > 0){o+='width:'+this.tabHeaderWidth+'px;';}o+='height:'+this.tabHeaderHeight+'px;" class="'+this.className;if(i==this.tabIndex){o+='_focus"';}else if(i < this.tabIndex){o+='_left"';}else{o+='_right"';}o+=' onmouseover="'+this.toString()+'.onMouseOver(event,this,'+i+')"';o+=' onmouseout="'+this.toString()+'.onMouseOut(event,this,'+i+')"';o+=' onclick="'+this.toString()+'.onClick(event,this,'+i+')"';o+='>'+this.item[i].title;o+='</td>';indexes[i]=index;if(this.tabSpaceWidth > 0 && i < this.item.length-1){o+='<td style="width:'+this.tabSpaceWidth+'px;">&nbsp;</td>';++index;}++index;}if(this.drawOuterRight){o+='<td class="'+this.className+'_outerright">&nbsp;</td>';}o+='</tr></table><div>';var header=document.createElement('div');header.setAttribute('width','100%');header.setAttribute('height',this.headerHeight+'px');header.style.width='100%';header.style.position='relative';header.style.height=this.headerHeight+'px';header.innerHTML=o;header.className=this.className+'_header';if(this.tabPosition=='top'){this._tabElement=this._element.insertBefore(header,this._element.childNodes[0]);}else{this._tabElement=this._element.appendChild(header);}var tabElements=this._tabElement.childNodes[0].childNodes[0].childNodes[0].childNodes[0];if(this.drawOuterLeft){this.outerLeftTabElement=tabElements.childNodes[0];}if(this.drawOuterRight){this.outerRightTabElement=tabElements.childNodes[indexes[this.item.length-1]+1];}for(var i=0;i < this.item.length;i++){if(i==this.tabIndex && this.onFocus){this.onFocus();}this.item[i].tabElement=tabElements.childNodes[indexes[i]];}}};this.draw=function(){if(!_element || !_element.tagName){this._element=doi.dom.getElementById(_element);}else{this._element=_element;}if(!this._element && !this._onLoadCalled){doi.event.addEventListener(window,'load',this.toString()+'.draw()');this._onLoadCalled=true;return;}if(!this._element.tagName){return;}this._init();this._render();};this.onClick=function(event,element,index){doi.message.throwMessage('DOITAB_ONCLICK',this);doi.event.stopPropagation(event);this.setTabFocus(index);};this.onMouseOut=function(event,element,index){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;}if(this.tabIndex==index){return;}else if(index < this.tabIndex){element.className=this.className+'_left';}else{element.className=this.className+'_right';}};this.onMouseOver=function(event,element,index){doi.event.stopPropagation(event);if(this.tabIndex==index){return;}else if(index < this.tabIndex){element.className=this.className+'_left_hover';}else{element.className=this.className+'_right_hover';}};this.setDrawOuterLeft=function(bool){this.drawOuterLeft=!!bool;};this.setDrawOuterRight=function(bool){this.drawOuterRight=!!bool;};this.setHeaderHeight=function(height){height=doi.dom.parseInt(height);if(height > 0){this.headerHeight=height;}};this.setTabAlign=function(align){if(!align || !align.toLowerCase){return;}align=align.toLowerCase();switch(align){case 'left':case 'center':case 'right':this.tabHeaderAlign=align;break;default:this.tabHeaderAlign='left';}};this.setTabFocus=function(index){this.setTabIndex(index);};this.setTabHeight=function(height){height=doi.dom.parseInt(height);if(height > 0){this.tabHeaderHeight=height;}};this.setTabIndex=function(index){index=doi.dom.parseInt(index);var lastTabIndex=this.tabIndex;if(!this._element){this.tabIndex=index;return;}if(index >=this.item.length){index=0;}doi.message.throwMessage('DOITAB_BLUR',this);if(this.onBlur){var result=this.onBlur(this.tabIndex,index);if(typeof result=='boolean' && !result){return;}}var className='';this.tabIndex=index;for(var i=0;i < this.item.length;i++){if(i==this.tabIndex){className=this.className+'_focus';}else if(i < this.tabIndex){className=this.className+'_left';}else{className=this.className+'_right';}this.item[i].tabElement.className=className;}this.item[lastTabIndex].element.className=this.baseClassName+'_content_hidden';this.item[this.tabIndex].element.className=this.className+'_content';if(this.onFocus){this.onFocus(this.tabIndex,lastTabIndex);}doi.message.throwMessage('DOITAB_FOCUS',this);};this.setTabPosition=function(position){if(!position || !position.toLowerCase){return;}position=position.toLowerCase();switch(position){case 'bottom':position='bottom';break;default:position='top';}this.tabPosition=position;};this.setTabSpaceWidth=function(spaceWidth){spaceWidth=doi.dom.parseInt(spaceWidth);if(spaceWidth < 0){spaceWidth=0;}this.tabSpaceWidth=spaceWidth;};this.setTabWidth=function(width){width=doi.dom.parseInt(width);if(width >=0){this.tabHeaderWidth=width;}};this.toString=function(){return _instanceName;};};
