(function()
{
	YAHOO.util.Event.onDOMReady(function()
	{
		$Event = YAHOO.util.Event;
		$Dom   = YAHOO.util.Dom;
		$Anim  = YAHOO.util.Anim;
		$Ease  = YAHOO.util.Easing;
		
		// setup textarea if it is in the DOM
		var configObj = {charLen: 4000, writeTo: "remainingText", message: "You have <rm> characters remaining.", replaceStr: "<rm>"};
		
		function textLen(e, config)
		{
			var elem;
			
			if (typeof e == "string")
			{
				elem = $Dom.get(e);
			}
			else
			{
				elem = $Event.getTarget(e);
			}
			
			var remaining = config.charLen - elem.value.length;
		
			if (remaining < 0) 
			{
				remaining = 0;
			}
			
			if (elem.value.length > config.charLen)
			{
				elem.value = elem.value.substring(0,config.charLen);
			}
			
			$Dom.get(config.writeTo).innerHTML = config.message.replace(config.replaceStr, remaining.toString());
		}
		
		$Event.addListener("contact-message", "keyup", textLen, configObj);
		
		if ($Dom.inDocument("contact-message"))
		{
			textLen("contact-message", configObj);
		}
		
		var inProgress = false;
		
		if ($Dom.inDocument("imageGallery") || $Dom.inDocument("originalGallery"))
		{
			var gallery = ($Dom.inDocument("imageGallery")) ? $Dom.get("imageGallery") : $Dom.get("originalGallery");
			
			var links = gallery.getElementsByTagName("a");
			
			for (var i = 0; i < links.length; i++)
			{
				$Event.addListener(links[i], "click", function(e, orderNum)
				{
					$Event.preventDefault(e);
					var elem = $Event.getTarget(e);
					
					if (elem.tagName.toLowerCase() != "img")
					{
						elem = $Dom.getFirstChild(elem);
					}
	
					var currentImage = $Dom.getElementsBy(function(elem)
					{
						if (elem.style.display != "none")
						{
							return true;
						}
						
						return false;
					}, "img", "imageHolder")[0];
			
					var newImage = $Dom.get("imageHolder").getElementsByTagName("img")[orderNum];
					var enlargeLinkId = orderNum + 1;
					
					if (currentImage && newImage && currentImage != newImage && !inProgress)
					{
						$Dom.setStyle(currentImage, "opacity", 1);
						var animOut = new $Anim(currentImage, {opacity: {to: 0}}, .5, $Ease.easeIn);
						var animIn  = new $Anim(newImage, {opacity: {to: 1}}, .5, $Ease.easeIn);
						
						animOut.onStart.subscribe(function(eType, args, linkId)
						{
							inProgress = true;
							
							var enlargeLink = $Dom.get("enlarge");
							enlargeLink.href = enlargeLink.href.substring(0, enlargeLink.href.length - 1) + linkId;
						}, enlargeLinkId);
						
						animOut.onComplete.subscribe(function(eType, args, anim)
						{
							$Dom.setStyle(this.getEl(), "display", "none");
							$Dom.setStyle(anim.getEl(), "opacity", "0");
							$Dom.setStyle(anim.getEl(), "display", "block");
							anim.animate();
							
						}, animIn, false);
						
						animIn.onComplete.subscribe(function()
						{
							inProgress = false;
						});
						
						animOut.animate();
					}
				}, i);
			}
		}
	});
})();
