//====================================================================
// AmberMenu v1.0.0, 2004-01-16
// Copyright 2004 Michael van Ouwerkerk (http://13thparallel.org)
// Developed for Netfielders Websolutions (http://www.netfielders.com)
//====================================================================
// Known compatibility:
// - Internet Explorer 6 / Windows XP
// - Mozilla 1.5 / Windows XP
// - Opera 7.02 / Windows XP
// Assumed to work:
// - All browsers that support the W3C level 1 DOM
//   or the Microsoft DOM, and scripted CSS manipulation
//====================================================================

// Netscape 4 must reload on resize to restore the css.
if( document.layers && !document.getElementById ){
    var scrX = innerWidth;
	var scrY = innerHeight;
    onresize = function(){
		if( scrX != innerWidth || scrY != innerHeight ) history.go(0);
	}
} else if( document.all || document.getElementById ){
	onresize = function(){
		AmberMenu.centerMenu();
	};
}

// call prototype - modified from Tom Trenka
if( !Function.prototype.call ){
	Function.prototype.call = function( thisObj ){
		if( thisObj == null || thisObj == 'undefined' ) thisObj = window;
		var args = [];
		for( var i = 1; i < arguments.length; i++ ){
			args[ args.length ] = 'arguments[' + i + ']' ;
		}
		thisObj.__method__ = this;
		var returnValue = eval( "thisObj.__method__(" + args.join( "," ) + ");" );
		thisObj.__method__ = null;
		return returnValue;
	};
}

var AmberMenu = function( id, parentId ){
	if( id ){
		// inheriting from Skriptobj
		Skriptobj.call( this, id );

		// common constructor actions
		this.id = id;
		AmberMenu.objRegistry[ id ] = AmberMenu.objRegistry[ AmberMenu.objRegistry.length ] = this;
		this.gRef = "Ambermenu_" + id;
		eval( this.gRef + " = this" );

		// unique properties and methods
		var elm = Skriptlib.getElement( id );
		elm.obj = this;
		this.parentId = parentId;
		this.showTimer = null;
		this.hideTimer = null;
		this.open = false;		
		this.onSlide = function( distanceX, distanceY ){
			if( distanceY >= 0 ) this.setClip( this.h - distanceY, this.w, this.h, 0 );
			else this.setClip( -distanceY, this.w, this.h, 0 );
		};
		this.onEndHide = this.onEndSlide = function(){
			AmberMenu.setDefaultSelection();
		};
	}
	return this;
};

// inheriting from Skriptobj
AmberMenu.prototype = new Skriptobj;
AmberMenu.prototype.constructor = AmberMenu;

// user configurable variables
AmberMenu.useShowSlide = true;
AmberMenu.useHideSlide = true;
AmberMenu.slideOutDuration = 250;
AmberMenu.slideInDuration = 250;
AmberMenu.showDelay = 150;
AmberMenu.hideDelay = 150;
AmberMenu.onLoad = function(){};

// private variables
AmberMenu.defaultImgTimer = null;
AmberMenu.zIndex = 10;
AmberMenu.objRegistry = [];
AmberMenu.imgRegistry = [];

AmberMenu.init = function(){
	this.container = new Skriptobj( "divAmberMenuContainer" );
	this.setDefaultSelection();
	this.centerMenu();
	this.container.show();
	this.onLoad();
};

AmberMenu.showMenu = function( imgId, skipImgReset ){
	var i;
	var puppetDivId;
	var containerDivId;
	var puppetObj;
	var containerObj;
	var aSplitImgId;
	var recursionImgId;

	aSplitImgId = imgId.split( "_" );
	puppetDivId = "divAmberMenu_0";
	for( i = 1; i < aSplitImgId.length; i++ ) puppetDivId += "_" + aSplitImgId[ i ];

	containerDivId = "divAmberMenu_0";
	for( i = 1; i < aSplitImgId.length - 1; i++ ) containerDivId += "_" + aSplitImgId[ i ];

	puppetObj = this.objRegistry[ puppetDivId ];
	containerObj = this.objRegistry[ containerDivId ];

	if( puppetObj ){
		clearTimeout( puppetObj.hideTimer );
		puppetObj.showTimer = setTimeout( "AmberMenu.doShow('" + puppetDivId + "')", this.showDelay );
	}
	if( !skipImgReset ){
		for( var i = 0; i < this.imgRegistry.length; i++ ){
			Img.swap( this.imgRegistry[ i ].id, null, this.imgRegistry[ i ].srcNormal );
		}
	}
	Img.swap( imgId, null, this.imgRegistry[ imgId ].srcRollover );
	if( containerObj.parentId ){
		recursionImgId = aSplitImgId[ 0 ];
		for( i = 1; i < aSplitImgId.length - 1; i++ ) recursionImgId += "_" + aSplitImgId[ i ];
		this.showMenu( recursionImgId, true );
	}
};

AmberMenu.doShow = function( divId ){
	var divObj = this.objRegistry[ divId ];
	var parentObj = this.objRegistry[ divObj.parentId ];
	if( divObj ){
		// Hide all open menus that are not this menu and not its parent.
		var openId;
		for( var i = 0; i < this.objRegistry.length; i++ ){
			if( this.objRegistry[ i ].open ){
				var openId = this.objRegistry[ i ].id;
				if( openId != parentObj.id && openId.slice( 0, divId.length ) != divId ){
					clearTimeout( this.objRegistry[ i ].hideTimer );
					this.doHide( this.objRegistry[ i ].id );
				}
			}
		}
		if( !divObj.open ){
			divObj.hide();
			if( this.useShowSlide || this.useHideSlide ) divObj.setClip( 0, divObj.w, divObj.h, 0 );
			divObj.open = true;
			divObj.setZIndex( this.zIndex++ );
			if( parentObj ) parentObj.setZIndex( this.zIndex++ );
			var setY = 0;
			var loopParent = parentObj;
			while( loopParent ){
				setY += loopParent.h;
				loopParent = this.objRegistry[ loopParent.parentId ];
			}
			if( this.useShowSlide ) divObj.startSlide( this.slideOutDuration, 0, setY - divObj.h, 0, setY );
			else{
				divObj.moveTo( 0, setY );
				divObj.show();
			}
		}
	}
};

AmberMenu.hideMenu = function( imgId ){
	var i;
	var puppetDivId;
	var containerDivId;
	var puppetObj;
	var containerObj;
	var aSplitImgId;
	var recursionImgId;

	aSplitImgId = imgId.split( "_" );
	puppetDivId = "divAmberMenu_0";
	for( i = 1; i < aSplitImgId.length; i++ ) puppetDivId += "_" + aSplitImgId[ i ];

	containerDivId = "divAmberMenu_0";
	for( i = 1; i < aSplitImgId.length - 1; i++ ) containerDivId += "_" + aSplitImgId[ i ];

	puppetObj = this.objRegistry[ puppetDivId ];
	containerObj = this.objRegistry[ containerDivId ];

	Img.swap( imgId, null, this.imgRegistry[ imgId ].srcNormal );
	setTimeout( "AmberMenu.setDefaultImages()", 10 );
	if( puppetObj ){
		clearTimeout( puppetObj.showTimer );
		puppetObj.hideTimer = setTimeout( "AmberMenu.doHide('" + puppetDivId + "')" , this.hideDelay );
	}

	if( containerObj.parentId ){
		recursionImgId = aSplitImgId[ 0 ];
		for( i = 1; i < aSplitImgId.length - 1; i++ ) recursionImgId += "_" + aSplitImgId[ i ];
		this.hideMenu( recursionImgId );
	}
};

AmberMenu.doHide = function( divId ){
	var divObj = this.objRegistry[ divId ];
	var parentObj = this.objRegistry[ divObj.parentId ];
	if( divObj && divObj.open ){
		divObj.open = false;
		if( this.useHideSlide ) divObj.startSlide( this.slideInDuration, 0, parentObj.y + parentObj.h, 0, parentObj.y + parentObj.h - divObj.h );
		else {
			divObj.hide();
			divObj.onEndHide();
		}
	}
	for( var i = 0; i < this.objRegistry.length; i++ ){
		if( this.objRegistry[ i ].open && this.objRegistry[ i ].parentId == divId ){
			this.doHide( this.objRegistry[ i ].id );
		}
	}
};

AmberMenu.addImage = function( imgId, imgSrcNormal, imgSrcRollover ){
	var img = this.imgRegistry[ this.imgRegistry.length ] = this.imgRegistry[ imgId ] = {};
	img.id = imgId;
	img.srcNormal = imgSrcNormal;
	img.srcRollover = imgSrcRollover;
	Img.preload( imgSrcRollover );
};

AmberMenu.setDefaultImages = function(){
	var active = false;
	var imgId = this.defaultSelection;
	if( this.defaultSelection ){
		for( var i = 0; i < this.imgRegistry.length; i++ ){
			if( Img.find( this.imgRegistry[ i ].id ).src.slice( - this.imgRegistry[ i ].srcRollover.length ) == this.imgRegistry[ i ].srcRollover ) active = true;
		}
		while( !active && imgId != "imgAmberMenu" ){
			Img.swap( imgId, null, this.imgRegistry[ imgId ].srcRollover );
			imgId = imgId.slice( 0, imgId.lastIndexOf( "_" ) );
		}
	}
};

AmberMenu.setDefaultSelection = function(){
	setTimeout( "AmberMenu.setDefaultSelectionAux()", 10 );
};

AmberMenu.setDefaultSelectionAux = function(){
	var active = false;
	if( this.defaultSelection ){
		for( var i = 0; i < this.objRegistry.length; i++ ){
			if( this.objRegistry[ i ].open ) active = true;
		}
		if( !active ) this.showMenu( this.defaultSelection );
	}
};

AmberMenu.centerMenu = function(){
	var viewportWidth = 0;
	var setX = 0;
	if( document.documentElement && document.documentElement.clientWidth ) viewportWidth = document.documentElement.clientWidth;
	else if( document.body && document.body.clientWidth ) viewportWidth = document.body.clientWidth;
	else if( innerWidth ) viewportWidth = innerWidth - 18;
	setX = (viewportWidth - this.container.w) / 2;
	if(setX < 0) setX = 0;
	this.container.moveTo(setX, null);
};
// end
