/* ================================================
 Event manager
================================================ */
/* 2006-12-28 */

var EventManager = {};
EventManager.list = [];


EventManager.removeEvent = function( obj, event, listener, useCapture ){
	//if(navigator.userAgent.match(/Mac/) && document.all && !this.env.isOpera ) return;
	useCapture = useCapture || false;
	if(obj.removeEventListener){
		obj.removeEventListener( event, listener, useCapture );
	} else if(obj.detachEvent){
		obj.detachEvent( "on"+event, listener );
	} else {
		//delete obj['on'+event];
	}
};

EventManager.addEvent = function( obj, event, listener, useCapture ){
	//EventManager.list.push(arguments);
	EventManager.list[EventManager.list.length] = arguments;
	useCapture = useCapture || false;
	if(obj.addEventListener){
		obj.addEventListener( event, listener, useCapture );
	} else if(obj.attachEvent){
		obj.attachEvent( "on"+event, listener );
	} else {
		var exists = obj['on'+event];
		obj['on'+event] = (exists)?
			function(){
				exists();
				listener();
			} : function() {
				listener();
			};
	}
};


EventManager.addLoadEvent = function( listener ){
	EventManager.addEvent( window, "load", listener, false );
};

EventManager.removeEventCache = function(){
	if(!EventManager.list) return;
	for( var i=0; i<EventManager.list.length; i++ ){
//		EventManager.removeEvent.apply( this, EventManager.list[i] );
		EventManager.removeEvent( EventManager.list[i][0], EventManager.list[i][1], EventManager.list[i][2], EventManager.list[i][3] );
	}
}

EventManager.addEvent(window, 'unload', EventManager.removeEventCache, false);




/* ================================================
 Rollover Script
================================================ */
/* 2007-02-14 */

function hasClassName(el, classname) {
	if(!document.getElementById) return false;
	var el = (typeof el == 'string' )? document.getElementById(el) : el;
	if(el.className == null) return false;
	var list = el.className.split(/\s+/);
	for(var i = 0; i < list.length; i++)
		if (list[i] == classname)
			return true;
	return false;
}


var ROLLOVER_IMG = "rollover";
var ROLLOVER_IMG_NAME_SUFFIX = "on";

var buttons = [];
function registButton( el ){
	var btn = new Object();
	btn.src = el.src;
	btn.filetype = btn.src.substring(btn.src.lastIndexOf('.'));
	btn.basename = btn.src.substring(0, btn.src.length-btn.filetype.length);
	btn.onsrc = btn.basename + ROLLOVER_IMG_NAME_SUFFIX + btn.filetype;

	el.offsrc = btn.src;
	el.onsrc  = btn.onsrc;
	el.lock   = false;

	//buttons.push( el );
	buttons[buttons.length] = el;

	EventManager.addEvent( el, 'mouseover', function(){ swapImage( el, 'on' ); }, false );
	EventManager.addEvent( el, 'mouseout',  function(){ swapImage( el, 'off'); }, false );
}

function preloadImages(){
	if(!document.images) return;
	var ret = [];
	for( var i=0; i<buttons.length; i++ ){
		(new Image()).src = buttons[i].onsrc;
		ret[ret.length] = buttons[i].onsrc;
	}
}

function swapImage( obj, status ){
	if( !obj || !obj[status+"src"] ) return;
	if( !obj.lock )
		obj.src = obj[status+"src"];
}

function lock( obj ){
	if( obj.lock == 'undefined' ) return;
	if(!obj.lock)
		obj.lock = true;
}

function unlock(){
	if( obj.lock == 'undefined' ) return;
	if(obj.lock)
		obj.lock = false;
}

function initRolloverImages(){
	if(!document.getElementById) return;

	var img = document.getElementsByTagName('IMG');
	for( var i=0; i<img.length; i++ ){
		if (!hasClassName( img[i], ROLLOVER_IMG ))
			continue;
		else {
			registButton( img[i] );
		}
	}
	preloadImages();
}

EventManager.addEvent( window, 'load', initRolloverImages, false );
