//-----( Global functions )-------------------------------------------------

//event handler

function addEventToObject(obj,evt,func) {
	var oldhandler = obj[evt];
	obj[evt] = (typeof obj[evt] != 'function') ? func : function(ev){oldhandler(ev);func(ev);};
}

// preload images

function preloadImages(imageArray) {
	var tempImages = new Array();
	for(var i=0;i<imageArray.length;i++){tempImages[i] = new Image();tempImages[i].src = imageArray[i];}
}


// cycle through a list of class names (usually used for css-fades)

function cycleThroughClassNames(id,obj,objClass,start,i) {
	if (i > 0) {obj.className = objClass+i;i--;timeouts[id] = setTimeout(function(){cycleThroughClassNames(id,obj,objClass,start,i)},90);}
	else {clearTimeout(timeouts[id]);}
}

//-----( END )-------------------------------------------------


//-----( Global variables )-------------------------------------------------

// DESCRIPTION: global variables for the fades

var timeouts = {};

//-----( END )-------------------------------------------------



//-----( @FormButton )-------------------------------------------------

// DESCRIPTION: does image-swaps for form buttons

var FormButton = {
	init : function()
		{
		if (!document.getElementById) return false;
		if (!document.getElementsByTagName) return false;
		var inputs = document.getElementsByTagName('input');
		for (var i=0;i<inputs.length;i++)
			{
			if (inputs[i].type == 'image') 	
		  		{                                                 
				FormButton.events(inputs[i]);
				}
			}
		var imgs = document.getElementsByTagName('img');
		for (i=0;i<imgs.length;i++)
			{
			if (/hover-button/.test(imgs[i].className))
				{                                             
				FormButton.events(imgs[i]);
				}
			}
		},
	events : function(obj)
		{
		addEventToObject(obj,'onmouseover',FormButton.hover);
		addEventToObject(obj,'onclick',FormButton.click);
		addEventToObject(obj,'onmouseout',FormButton.out);
		},
	hover: function(ev)
		{
		if (!ev) ev = window.event;
		var eventElement = (window.event) ? window.event.srcElement : ev.target;
		if (!/-hov.gif/.test(eventElement.src)) {eventElement.src = eventElement.src.replace(/.gif/,'-hov.gif');}
		},
	click : function(ev)
		{
		if (!ev) ev = window.event;
		var eventElement = (window.event) ? window.event.srcElement : ev.target;
		if (/-hov.gif/.test(eventElement.src)) {eventElement.src = eventElement.src.replace(/-hov.gif/,'.gif');}
		},
	out : function(ev)
		{
		if (!ev) ev = window.event;
		var eventElement = (window.event) ? window.event.srcElement : ev.target;
		eventElement.src = eventElement.src.replace(/-hov.gif/,'.gif');
		}
	};

//-----( END )-------------------------------------------------




//-----( @Feedback )-------------------------------------------------
// DESCRIPTION: fades out flashed feedback messages
var Feedback = {
	init : function()
		{
		if (!document.getElementById) return false;
		if (!document.getElementById('feedback_fade')) return false;
		var obj = document.getElementById('feedback_fade');
		var newDate = new Date();
		var uniqueId = newDate.getTime();
		obj.fadeCount = 700;
		Feedback.fade(uniqueId,obj);
		addEventToObject(obj,'onmouseover',function(){Feedback.pause(uniqueId,obj);});
		addEventToObject(obj,'onmouseout',function(){Feedback.restart(uniqueId,obj);});
		},
	fade : function(id,obj)
		{
		if (obj.fadeCount <= 0)
			{
			clearTimeout(timeouts[id]);
			var height = obj.offsetHeight;
			obj.style.visibility = 'hidden';
			obj.style.overflow = 'hidden';
			obj.style.border = 'none';
			obj.style.marginTop = (-15)+'px';
			obj.style.height = (height + 15)+'px';
			obj.style.padding = 0;
			var duration = 100;
			var steps = 10;
			var stepDuration = Math.round(duration/steps);
			var stepSize = height/steps;
			Feedback.shrink(id,obj,stepDuration,stepSize);
			}
		else
			{
			obj.fadeCount -= 10;
			if (obj.fadeCount <= 100)
				{
				var opac = ((obj.fadeCount/100) > 0.999) ? 0.999 : (obj.fadeCount/100);
				obj.style.KHTMLOpacity = opac; // Safari<1.2, Konqueror
				obj.style.MozOpacity = opac; // Older Mozilla and Firefox
				obj.style.opacity = opac; // Safari 1.2, newer Firefox and Mozilla, CSS3
				}
			var delay = (obj.fadeCount == 0.999) ? 1000 : 65;
			timeouts[id] = setTimeout(function(){Feedback.fade(id,obj)},delay);
			}
		},
	pause : function(id,obj)
		{                                                                  
	   if (obj) {if (timeouts[id]) {clearTimeout(timeouts[id]);}} 
		},
	restart : function(id,obj)
		{
		if (obj) {timeouts[id] = setTimeout(function(){Feedback.fade(id,obj)},65);} 
		},
	shrink : function(id,obj,stepDuration,stepSize)
		{
		if ((obj.offsetHeight - stepSize) > 0)
			{
			obj.style.height = (obj.offsetHeight - stepSize)+'px';
			timeouts[id] = setTimeout(function(){Feedback.shrink(id,obj,stepDuration,stepSize)},stepDuration);
			}
		else
			{
			obj.style.display = 'none';
			clearTimeout(timeouts[id]);
			}
		}
	};
//-----( END )-------------------------------------------------

addEventToObject(window,'onload',FormButton.init);

addEventToObject(window,'onload',Feedback.init);
