/***
 * Creates new navigation point
 * Needs functions.js
 */
function navigation(submenuTop, submenuLeft) {
	this.DDSpeed	= 3;
	this.DDTimer	= 15;
	
	if(isEmpty(submenuTop)) {
		submenuTop = 0;
	}
	if(isEmpty(submenuLeft)) {
		submenuLeft = 0;
	}

	this.menuTimer = new Array();
	this.submenuTimer = new Array();

	this.submenuTop		= submenuTop;
	this.submenuLeft	= submenuLeft;
}

// Clear menu timeout
navigation.prototype._clearMenu = function (id) {
	if(this.menuTimer[id])  {
		clearTimeout(this.menuTimer[id]);
	}

//	showSelect();
}

// Clear submenu intervall
navigation.prototype._clearSubmenu = function (id) {
	if(this.submenuTimer[id])  {
		clearInterval(this.submenuTimer[id]);
	}
	
//	showSelect();
}

// Switch menu
navigation.prototype.switchMenu = function (id, on) {
	var current = this;
	
	var menu	= GetObject('Menu' + id);
	var submenu	= GetObject('Submenu' + id);

	this._clearSubmenu(id);
	
	if(on == 1) {
		this._clearMenu(id);
		
		// Mouse over effect for classname
		if(stristr(menu.className, 'Aktiv')) { menu.className = menu.className.replace('Aktiv', ''); }
		menu.className = menu.className + 'Aktiv';
		switchCursor(menu, 1);
		
		if(submenu != null) {
			// Show submenue
			submenu.style.display	= 'block';
			//hideSelect();

			// Initalize height, top and left position
			if(!submenu.startHeight) {
	     		submenu.style.height	= 'auto';
				submenu.startHeight		= submenu.offsetHeight;
				submenu.startTop		= submenu.offsetTop;
				submenu.startLeft		= submenu.offsetLeft;
				submenu.style.height	= '0px';
				submenu.style.zIndex	= '1000';
	
				var top = parseInt(submenu.startTop) + parseInt(this.submenuTop);
				var left = parseInt(submenu.startLeft) + parseInt(this.submenuLeft);

				submenu.style.top = top + 'px';
				submenu.style.left = left + 'px';
			}

			// Start sliding for open
			this.submenuTimer[id] = setInterval(function() { current.slideMenu(id, 1); }, current.DDTimer);
		}
	} else {
		this.menuTimer[id] = setTimeout(function() { current.collapseMenu(id); }, 100);
	}
}

// Set style
navigation.prototype.cancelSwitchMenu = function (id) {
	var current = this;
	
	var menu	= GetObject('Menu' + id);
	var submenu	= GetObject('Submenu' + id);

	this._clearMenu(id);

	if(submenu != null) {
		this._clearSubmenu(id);
		
		var currentHeight = parseInt(submenu.style.height) || 0;

		if(submenu.startHeight && currentHeight <= submenu.startHeight) {
			this.submenuTimer[id] = setInterval(function() { current.slideMenu(id, 1); }, current.DDTimer);
		}
	}
}

// Set style
navigation.prototype.collapseMenu = function (id) {
	var current = this;
	
	var menu	= GetObject('Menu' + id);
	var submenu	= GetObject('Submenu' + id);

	switchCursor(menu, -1);

	// Stop sliding for open and close it
	if(submenu != null) {
		this.submenuTimer[id] = setInterval(function() { current.slideMenu(id, -1); }, current.DDTimer);
	} else if(menu) {
		// Mouse over effect for classname
		if(stristr(menu.className, 'Aktiv')) { menu.className = menu.className.replace('Aktiv', ''); }
	}
}

// Set style
navigation.prototype.slideMenu= function (id, direction) {
	var current = this;
	
	var menu	= GetObject('Menu' + id);
	var submenu	= GetObject('Submenu' + id);
	
	if(submenu == null) {
		return;
	}
	
	if(direction > 0) {
		var distance = (submenu.startHeight - parseInt(submenu.style.height)) / current.DDSpeed;
		distance = parseInt(Math.round(distance));
		if(isNaN(distance) || distance < 1) { distance = 2; }

		var newHeight = parseInt(GetStyle(submenu, 'height')) + distance;
	
		if(isNaN(newHeight) || newHeight >= submenu.startHeight) {
			SetStyle(submenu, 'height', submenu.startHeight + 'px');
			submenu.className	= submenu.className;
			
			this._clearSubmenu(id);
		} else {
			SetStyle(submenu, 'height', newHeight + 'px');
		}
	} else {
		var distance = parseInt(GetStyle(submenu, 'height')) / current.DDSpeed;
		distance = parseInt(Math.round(distance));
		if(isNaN(distance) || distance < 1) { distance = 2; }

		var newHeight = parseInt(GetStyle(submenu, 'height')) - distance;
	
		if(isNaN(newHeight) || newHeight < 1) {
			// Mouse over effect for classname
			if(stristr(menu.className, 'Aktiv')) { menu.className = menu.className.replace('Aktiv', ''); }
		
			SetStyle(submenu, 'height', '0px');
			SetStyle(submenu, 'display','none');

			this._clearSubmenu(id);
		} else {
			SetStyle(submenu, 'height', newHeight + 'px');
		}
	}
};
