var CExpandingLink = Class.create(
{
	initialize: function(element, minPadding, maxPadding)
	{
		if (!minPadding)
		{
			this.minPadding=5;
		}
		if (!maxPadding)
		{
			this.maxPadding=20;
		}
		this.element=element;
		this.timer=null;
		this.isExpanding=false;
		this.isContracting=false;
		this.isExpanded=false;
		this.isContracted=true;
		this.padding=this.minPadding;
		this.updateStyle();
		this.mouseOverEvent=Event.observe(element,"mouseover", this.expand.bind(this));
		this.mouseOutEvent=Event.observe(element,"mouseout", this.contract.bind(this));
		this.keepExpanded=false;
		this.keepContracted=false;
	},
	startTimer: function()
	{
		if (this.timer)
		{
			clearInterval(this.timer);
		}
		this.timer=setInterval(this.update.bind(this),1);
	},
	stopTimer: function()
	{
		if (this.timer)
		{
			clearInterval(this.timer);
		}
		this.timer=null;
	},
	update: function()
	{
		if (this.isExpanding)
		{
			if (this.padding<this.maxPadding)
			{
				this.padding++;
				this.updateStyle();
			}
			else
			{
				this.stopTimer();
				this.isExpanded=true;
				this.isExpanding=false;
			}
		}
		if (this.isContracting)
		{
			if (this.padding>this.minPadding)
			{
				this.padding--;
				this.updateStyle();
			}
			else
			{
				this.stopTimer();
				this.isContracted=true;
				this.isContracting=false;
			}
		}
	},
	updateStyle: function()
	{
		this.element.style.paddingLeft=this.padding + 'px';
		this.element.style.paddingRight=this.padding + 'px';
	},
	expand: function()
	{
		if ((this.isExpanding) || (this.isExpanded) || (this.keepContracted))
		{
			return;
		}
		this.isExpanding=true;
		this.isExpanded=false;
		this.isContracted=false;
		this.isContracting=false;
		if (!this.timer)
		{
			this.startTimer();
		}
	},
	contract: function()
	{
		if ((this.isContracting) || (this.isContracted) || (this.keepExpanded))
		{
			return;
		}
		this.isExpanding=false;
		this.isExpanded=false;
		this.isContracted=false;
		this.isContracting=true;
		if (!this.timer)
		{
			this.startTimer();
		}
	},
	fullyExpand: function(keepExpanded)
	{
		this.keepExpanded=keepExpanded;
		this.padding=this.maxPadding;
		this.isExpanding=false;
		this.isExpanded=true;
		this.isContracted=false;
		this.isContracting=false;
		this.updateStyle();
	},
	fullyContract: function(keepContracted)
	{
		this.keepContracted=keepContracted;
		this.padding=this.minPadding;
		this.isExpanding=false;
		this.isExpanded=false;
		this.isContracted=true;
		this.isContracting=false;
		this.updateStyle();
	}
});

var CExpandingLinks = Class.create(
{
	initialize: function()
	{
		this.links=new Array();
	},
	addLink: function(element)
	{
		expandingLink=new CExpandingLink(element);
		this.links.push(expandingLink);
		return expandingLink;
	},
	findLinkByElement: function(element)
	{
		var loop;
		for (loop=0; loop<this.links.length; loop++)
		{
			return this.links[loop];
			if (this.links[loop].element==element)
			{
				return this.links[loop];
			}
		}
		return null;
	}
});

var ExpandingLinks=new CExpandingLinks();





function showContactForm()
{
	window.scrollTo(0,0);
	new Effect.Appear('modal_background', {to: 0.85, duration: 0.5, afterFinish: realShowContactForm});
}

function realShowContactForm()
{
//	new Effect.SlideDown('contact');
	new Effect.SlideDown('contact', {duration: 0.5, afterFinish: focusContactName});
}

function focusContactName()
{
	$('contact_name').focus();
}

function hideContactForm()
{
//	new Effect.SlideUp('contact', {afterFinish: hideModalBackground});
	new Effect.Fade('contact', {afterFinish: hideModalBackground, duration: 0.5});
}

function hideModalBackground()
{
	new Effect.Fade('modal_background', {duration: 0.5});
}

