/**
 * Menu Drop Down
 * 
 * @author: Thomaz Takashi Oda Toyama.
 * @retrun void
 */
 
var initMenuDropDown = {
	defaults: {
		menuDropDown	: 'menuDropDown',
		dropDownAjuste	: 'dropDownAjuste',
		dropDownAjusteH	: 'dropDownAjusteH'
	}
	, dropDownAbility : function(){
		var mDropDown = document.getElementsByTagName('ul');

		if(mDropDown){
			var mCount 		= mDropDown.length;
			var className 	= initMenuDropDown.defaults.menuDropDown;
			
			for(i=0;i<mCount;i++){
				var li 		= mDropDown[i].getElementsByTagName('li');
				if(li[i]){
					var liCount = li.length;
					for(j=0;j<liCount;j++){
						if(mDropDown[i].className == className){
							initMenuDropDown.eventMouse.addEvent(li[j], 'mouseenter', initMenuDropDown.show, false);
							initMenuDropDown.eventMouse.addEvent(li[j], 'mouseleave', initMenuDropDown.hidden, false);
						}
					}
				}
			}
		}
	}
	, show: function(){
		var visible = this.getElementsByTagName('ul');
		var Link = this.getElementsByTagName('a');
		var Strong = Link[0].getElementsByTagName('strong');
	
		if(visible[0]){
			visible[0].style.display = "block";
			visible[0].style.z_index = 2;
			Link[0].style.background = 'url(arquivos/10/imagens/bg_li1.png) no-repeat left top';
			Strong[0].style.background = 'url(arquivos/10/imagens/bg_li2.png) no-repeat left bottom';
			if(visible[0].className == initMenuDropDown.defaults.dropDownAjuste)
				initMenuDropDown.ajuste(visible[0]);
			if(visible[0].className == initMenuDropDown.defaults.dropDownAjusteH){
				initMenuDropDown.ajusteH(visible[0]);
			}
		}
	}
	, hidden: function(){
		var hidde = this.getElementsByTagName('ul');
		var Link = this.getElementsByTagName('a');
		var Strong = Link[0].getElementsByTagName('strong');
	
		if(hidde[0]){ 
			if(hidde[0].className == initMenuDropDown.defaults.dropDownAjuste)
				initMenuDropDown.ajusteClear(hidde[0]);
			if(hidde[0].className == initMenuDropDown.defaults.dropDownAjusteH)
				initMenuDropDown.ajusteHClear(hidde[0]);
			hidde[0].style.display = "none";
			Link[0].style.background = 'url(arquivos/10/imagens/seta.png) no-repeat right center';
			Strong[0].style.background = 'none';
		}
	}
	, ajusteClear: function(obj){
		obj.style.bottom 	= 'auto';
		obj.style.top 		= '-1px';
	}
	, ajuste: function(obj){
		var viewport 		= initMenuDropDown.getViewportDimensions();
		var windowHeight 	= viewport.height;
		var position		= initMenuDropDown.objectPosition(obj);
		var objPos			= position.Top + obj.clientHeight;
		
		if((objPos > windowHeight) && (obj.style.top != 'auto')){
			obj.style.top = 'auto';
			obj.style.bottom = '-1px';
		}
	}
	, ajusteHClear: function(objUL){
		/*objUL.style.width = '628px';*/
		objUL.style.width = 'auto';
		objUL.style.right 	= 'auto';
		objUL.style.left 	= '0';
	}
	, ajusteH: function(objUL){
		var viewport 		= initMenuDropDown.getViewportDimensions();
		var windowWidth		= viewport.width;
		var position		= initMenuDropDown.objectPosition(objUL);
		var objPos			= position.Left + objUL.clientWidth;
		
		if((objPos > windowWidth) && (objUL.style.left != 'auto')){
			/*objUL.style.width = '628px';*/
			objUL.style.left 	= '-'+(696+158)+'px';
		}
		
	}
	, getViewportDimensions: function(){
		var intH = 0, intW = 0;
		if(self.innerHeight) {
		   intH = window.innerHeight;
		   intW = window.innerWidth;
		} 
		else {
			if(document.documentElement && document.documentElement.clientHeight) {
				intH = document.documentElement.clientHeight;
				intW = document.documentElement.clientWidth;
			}
			else {
				if(document.body) {
					intH = document.body.clientHeight;
					intW = document.body.clientWidth;
				}
			}
		}
		return {
			height: parseInt(intH, 10),
			width: parseInt(intW, 10)
		};
	}
	, objectPosition: function(obj){
		
		var objLeft = 0;
	    var objTop = 0;
	    if (obj.offsetParent) {
	    	do {
	        	objLeft += obj.offsetLeft;
	            objTop 	+= obj.offsetTop;
			} while (obj = obj.offsetParent);
	  	}		
		return {
			Top: objTop,
			Left: objLeft
		};
	}
	, eventMouse: eventMouse = {
		evtHash: [],
	
		ieGetUniqueID: function(_elem){
			if (_elem === window) { return 'theWindow'; }
			else if (_elem === document) { return 'theDocument'; }
			else { return _elem.uniqueID; }
		},
	
		addEvent: function(_elem, _evtName, _fn, _useCapture){
			if (typeof _elem.addEventListener != 'undefined'){
				if (_evtName == 'mouseenter')
					{ _elem.addEventListener('mouseover', eventMouse.mouseEnter(_fn), _useCapture); }
				else if (_evtName == 'mouseleave')
					{ _elem.addEventListener('mouseout', eventMouse.mouseEnter(_fn), _useCapture); } 
				else
					{ _elem.addEventListener(_evtName, _fn, _useCapture); }
			}else if (typeof _elem.attachEvent != 'undefined'){
				var key = '{FNKEY::obj_' + eventMouse.ieGetUniqueID(_elem) + '::evt_' + _evtName + '::fn_' + _fn + '}';
				var f = eventMouse.evtHash[key];
				if (typeof f != 'undefined'){ return; }
				
				f = function(){
					_fn.call(_elem);
				};
			
				eventMouse.evtHash[key] = f;
				_elem.attachEvent('on' + _evtName, f);
		
				window.attachEvent('onunload', function(){
					_elem.detachEvent('on' + _evtName, f);
				});
			
				key = null;
			}else{ _elem['on' + _evtName] = _fn; }
		},	
	
		removeEvent: function(_elem, _evtName, _fn, _useCapture)
		{
			if (typeof _elem.removeEventListener != 'undefined')
				{ _elem.removeEventListener(_evtName, _fn, _useCapture); }
			else if (typeof _elem.detachEvent != 'undefined'){
				var key = '{FNKEY::obj_' + eventMouse.ieGetUniqueID(_elem) + '::evt' + _evtName + '::fn_' + _fn + '}';
				var f = eventMouse.evtHash[key];
				if (typeof f != 'undefined'){
					_elem.detachEvent('on' + _evtName, f);
					delete eventMouse.evtHash[key];
				}
			
				key = null;
			}
		},
		
		mouseEnter: function(_pFn)
		{
			return function(_evt){
				var relTarget = _evt.relatedTarget;				
				if (this == relTarget || eventMouse.isAChildOf(this, relTarget))
					{ return; }
	
				_pFn.call(this, _evt);
			}
		},
		
		isAChildOf: function(_parent, _child){
			if (_parent == _child) { return false };
			
			while (_child && _child != _parent)
				{ _child = _child.parentNode; }
			
			return _child == _parent;
		}	
	}
}
