var menuDBT = new function() {
	this.toggled = false;
	this.rootPath = "/";
	this.state = [];

	this.scrollStep = 10;
	this.stimer;
	this.upDiv;
	this.downDiv;

	this.init = function( rootPath ) {
		this.rootPath = rootPath;

		this.loadValues();
		this.initScroll();
		
		this.setState();
	}

	this.initScroll = function() {
		document.getElementById('leftFrame').style.overflow = "hidden";

		this.upDiv = menuDBT.addScrollUpElm();
		menuDBT.addEvent( this.upDiv, "mouseover", menuDBT.scrollUp );
		menuDBT.addEvent( this.upDiv, "mouseout", menuDBT.clearScroll );

		this.downDiv = menuDBT.addScrollDownElm();
		menuDBT.addEvent( this.downDiv, "mouseover", menuDBT.scrollDown );
		menuDBT.addEvent( this.downDiv, "mouseout", menuDBT.clearScroll );

		menuDBT.addEvent( 'leftFrame', 'mousewheel', menuDBT.scrollWheel );

		this.checkScroll();
	}

	this.getState = function() {
		this.state['leftFrame'] = document.getElementById('leftFrame').style.left;
		this.state['content'] = document.getElementById('content').style.margin;
		this.state['breadcrumb'] = document.getElementById('breadcrumb').style.padding;
		this.state['mainMenuToggler'] = document.getElementById('mainMenuToggler').style.left;
	}

	this.setState = function() {
		document.getElementById('mainMenuToggler').style.visibility = "visible";

		if ( !this.toggled ) {
			document.getElementById('leftFrame').style.left = ( this.state['leftFrame'] != undefined ? this.state['leftFrame'] : "" );
	                document.getElementById('content').style.marginLeft = ( this.state['content'] != undefined ? this.state['content'] : "" );
        	        document.getElementById('breadcrumb').style.paddingLeft = ( this.state['breadcrumb'] != undefined ? this.state['breadcrumb'] : "" );
        	        document.getElementById('mainMenuToggler').style.left = ( this.state['mainMenuToggler'] != undefined ? this.state['mainMenuToggler'] : "" );
        	        document.getElementById('mainMenuToggler').src = this.rootPath + "/images/menu_close.gif"

			this.checkScroll();
		} else {
			this.getState();

			menuDBT.upDiv.style.visibility = "hidden";
			menuDBT.downDiv.style.visibility = "hidden";

			document.getElementById('leftFrame').style.left = "-240px";
			document.getElementById('content').style.marginLeft = "25px";
			document.getElementById('breadcrumb').style.paddingLeft = "25px";
			document.getElementById('mainMenuToggler').style.left = "16px";
			document.getElementById('mainMenuToggler').src = this.rootPath + "/images/menu_open.gif";
		}
	}

	this.toggle = function() {
		this.toggled = !this.toggled;
		this.setState();

		this.saveValues();
	}

	/*******************************************************************************
	 * event hooking functions
	 *******************************************************************************/	
	this.addEvent = function( elm, evType, fn, useCapture ) {
		if ( typeof(elm) == "string" )
			elm = document.getElementById(elm);
		if ( elm == null )
			return;

		if (elm.addEventListener) {
			if ( evType == 'mousewheel' )
				elm.addEventListener('DOMMouseScroll', fn, false);
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent) {
			var r = elm.attachEvent("on"+evType, fn);
			return r;
		} else {
			alert("Handler could not be removed");
		}
	}

	this.removeEvent = function( elm, evType, fn ) {
		if ( typeof(elm) == "string" )
			elm = document.getElementById(elm);
		if ( elm == null )
			return;
		if ( elm.removeEventListener ) {
			if ( evType == 'mousewheel' )
				elm.removeEventListener('DOMMouseScroll', fn, false);  
			elm.removeEventListener(evType, fn, false);
		} else if ( elm.detachEvent )
			elm.detachEvent("on" + evType, fn);
	}

	this.cancelEvent = function( e ) {
		e = e ? e : window.event;

		if ( e.stopPropagation )
			e.stopPropagation();
		if ( e.preventDefault )
			e.preventDefault();

		e.cancelBubble = true;
		e.cancel = true;
		e.returnValue = false;

		return false;
	}

	/*******************************************************************************
	 * cookie functions
	 *******************************************************************************/
	this.saveValues = function() {
		if (document.cookie) {
			/*var now = new Date();
			var _expires = now.getTime() + (10 * 24 * 60 * 60 * 1000);
			var expires = new Date(_expires);*/

			var _cookie = "toggled=" + this.toggled + "; ";

			for ( var key in this.state ) {
				_cookie+= key + "=" + this.state[key] + "; ";
			}
			/*_cookie += "expires=" + expires.toGMTString();*/

			document.cookie = _cookie;
		}
	}

	this.loadValues = function() {
		if (document.cookie) {
			this.toggled = ( menuDBT.getCookieValue( "toggled") != false ? eval(menuDBT.getCookieValue( "toggled" )) : false);
			this.state['leftFrame'] = menuDBT.getCookieValue( "leftFrame" );
			this.state['content'] = menuDBT.getCookieValue( "content" );
			this.state['breadcrumb'] = menuDBT.getCookieValue( "breadcrumb" );
			this.state['mainMenuToggler'] = menuDBT.getCookieValue( "mainMenuToggler" );
		}
	}

	this.getCookieValue = function( key ) {
		if (document.cookie) {
			var result = new Array();

			var _cookie = document.cookie;
			_cookie = _cookie.split( ";" );
			
			if ( _cookie.length > 0 ) {
				for ( var c in _cookie ) {
					var cPart = _cookie[c];
					if ( typeof(cPart) == "string" ) {
						cPart = cPart.split( "=" );
						if ( cPart.length > 0 ) {
							if ( ( key != undefined ) && ( key == cPart[0] ) )
								return cPart[1];
							else
								result[cPart[0]] = cPart[1];
						}
					}
				}

				return result;
			} else
				return flase;
		} else
			return false;
	}

	/*******************************************************************************
	 * Scroll functions
	 *******************************************************************************/
	this.scroll = function( direction ) {
		clearTimeout(menuDBT.stimer);

		d = document.getElementById('leftFrame');
		y = d.scrollTop;
		
		if ( direction == 1 ) y-= menuDBT.scrollStep;
		if ( direction == 2 ) y+= menuDBT.scrollStep;
		if ( y <= d.scrollHeight - d.offsetHeight + menuDBT.scrollStep && y >= 0-menuDBT.scrollStep ) {
			d.scrollTop = y;
			
			if ( direction == 1 ) menuDBT.stimer = setTimeout(menuDBT.scrollUp,50);
			if ( direction == 2 ) menuDBT.stimer = setTimeout(menuDBT.scrollDown,50);
		}
		if ( y < 0 || y > d.scrollHeight - d.offsetHeight ) {
			clearTimeout(menuDBT.stimer);
		}

		this.checkScroll();
	}

	this.scrollWheel = function( e ) {
		e = e ? e : window.event;
		var normal = e.detail ? e.detail * -1 : e.wheelDelta / 40;

		if ( normal < 0 )
			menuDBT.scroll( 2 );
		else
			menuDBT.scroll( 1 );

		menuDBT.clearScroll();

		return menuDBT.cancelEvent(e);
	}

	this.scrollUp = function( e ) {
		menuDBT.scroll( 1 );
	}

	this.scrollDown = function( e ) {
		menuDBT.scroll( 2 );
	}

	this.clearScroll = function(e) {
		clearTimeout(menuDBT.stimer);
	}

	this.checkScroll = function(e) {
		d = document.getElementById('leftFrame');

		if ( d.scrollTop == 0 )
			menuDBT.upDiv.style.visibility = "hidden";
		else
			menuDBT.upDiv.style.visibility = "visible";
		
		if ( (d.scrollHeight - d.offsetHeight - d.scrollTop) == 0 )
			menuDBT.downDiv.style.visibility = "hidden";
		else
			menuDBT.downDiv.style.visibility = "visible";

		if ( d.scrollHeight == d.offsetHeight || menuDBT.toggled ) {
			d.scrollTop = 0;
			menuDBT.upDiv.style.visibility = "hidden";
			menuDBT.downDiv.style.visibility = "hidden";
		}
	}

	this.addScrollUpElm = function() {
		var frame = document.getElementById('leftFrame');
		var div = document.createElement('div');
		var divIdName = 'menuScrollUp';
  
		div.setAttribute('id',divIdName);
  		div.innerHTML = '<center><img src="'+this.rootPath+'/i/greenArrow_up.gif" border="0" /></center>';
		frame.appendChild(div);

		return div;
	}

	this.addScrollDownElm = function() {
		var frame = document.getElementById('leftFrame');
		var div = document.createElement('div');
		var divIdName = 'menuScrollDown';
  
		div.setAttribute('id',divIdName);
  		div.innerHTML = '<center><img src="'+this.rootPath+'/i/greenArrow_down.gif" border="0" /></center>';
		frame.appendChild(div);

		return div;
	}
}

menuDBT.scrollStep = 10;
menuDBT.addEvent( window, "resize", menuDBT.checkScroll );

