// ---------------------------------------------------------------------------------------------------------------------
// ZOMG, ANIMATIONS! (the fancy animations for just the home page)
// ---------------------------------------------------------------------------------------------------------------------
function ZomgAnimations()
{
	this.start = function()
	{
		var outer = this;
		new YAHOO.util.YUILoader
		(
			{
				base: "/js/lib24watch/yui/",
				require: ["animation"],
				onSuccess: function()
				{
					outer.yuiLoaded();
				}
			}
		).insert();
	};

	this.processAnimationQueue = function(nodes, index, timeout)
	{
		if (index < nodes.length)
		{
			var a = nodes[index].node;

			var anim = new YAHOO.util.ColorAnim
			(
				a,
				{
					color: {from: "#ffffff", to: nodes[index].toColor}
				}
			);
			anim.duration = 0.5;
			anim.onComplete.subscribe(function()
			{
				this.getEl().style.color = "";
			});

			anim.animate();

			var outer = this;
			window.setTimeout(function()
			{
				outer.processAnimationQueue(nodes, index + 1, timeout);
			}, timeout);
		}
	};

	this.yuiLoaded = function()
	{
		var nodes = new Array();

		// find the top links
		var topLinks = document.getElementById("top-links");
		if (topLinks)
		{
			topLinks = topLinks.childNodes;
			for (var i = 0; i < topLinks.length; i++)
			{
				if (topLinks[i].getElementsByTagName)
				{
					nodes.push
					(
						{
							node: topLinks[i].getElementsByTagName("a")[0],
							toColor: "#666666"
						}
					);
				}
			}
			
			// and the role tabs
			var roleTabs = document.getElementById("home-page-tabs");
			if (roleTabs)
			{
				roleTabs = roleTabs.childNodes;
				for (var i = roleTabs.length - 1; i >= 0; i--)
				{
					if (roleTabs[i].getElementsByTagName)
					{
						nodes.push
						(
							{
								node: roleTabs[i].getElementsByTagName("a")[0],
								toColor: "#333333"
							}
						);
					}
				}
				
				this.processAnimationQueue(nodes, 0, 80);
			}
		}
	};
}

// ---------------------------------------------------------------------------------------------------------------------
// Membership Navigation Expansion/Collapsing
// ---------------------------------------------------------------------------------------------------------------------

function showMembershipNavigation()
{
	var event = (window.event ? window.event : arguments[0]);
	var sourceNode = (event.srcElement ? event.srcElement : event.target);
	var role = sourceNode.className;

	var nav = document.getElementById("membership-navigation");
	
	for (var i = 0; i < nav.childNodes.length; i++)
	{
		var menu = nav.childNodes[i];
	
		if (menu.nodeName && menu.nodeName.toLowerCase() == "li")
		{
			var className = "collapsed";

			if (menu.getAttribute("id") == "membership-" + role)
			{
				className = "expanded";
			}
			
			menu.className = className;
		}
	}
}


function showThisMembershipNavigation(role)
{
	var nav = document.getElementById("membership-navigation");
	
	for (var i = 0; i < nav.childNodes.length; i++)
	{
		var menu = nav.childNodes[i];
	
		if (menu.nodeName && menu.nodeName.toLowerCase() == "li")
		{
			var className = "collapsed";

			if (menu.getAttribute("id") == "membership-" + role)
			{
				className = "expanded";
			}
			
			menu.className = className;
		}
	}
}


function showSwitchingIndicator()
{
	var switchingIndicator = document.getElementById('coadmin-lct-org-selection-switching');
	switchingIndicator.className = 'expended';
}

function hideSwitchingIndicator()
{
	var switchingIndicator = document.getElementById('coadmin-lct-org-selection-switching');
	switchingIndicator.className = 'collapsed';
}

// Coadmin mutiple management switch
function showSelectedLctOrgMenu(e)
{
	var event = (window.event ? window.event : e);
	var sourceNode = (event.srcElement ? event.srcElement : event.target);
	var value = sourceNode.value;
	
	
	var url = "/administrator/set_current_coadmin_lct_org/" + value + "?" + Math.random();
	switchLctOrgRequest = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");

	switchLctOrgRequest.onreadystatechange = function(event)
	{	
		showSwitchingIndicator();
		if (switchLctOrgRequest && (switchLctOrgRequest.readyState || switchLctOrgRequest.readyState == 0))
		{
			if(switchLctOrgRequest.readyState == 4)
			{
				if (switchLctOrgRequest.status != 200)
				{
					hideSwitchingIndicator();
				}
				else
				{
					if (switchLctOrgRequest.responseText.length > 0)
					{
						for(var i=0; i<coadminOrgSelection.length; i++)
						{
							if(coadminOrgSelection.options[i].value == switchLctOrgRequest.responseText)
							{
								// Only reset currentSelectedIndex when 
								coadminOrgSelection.selectedIndex = i;
								currentSelectedIndex = i;
							}
						}

						if(document.getElementById("membership-coadmins")){
							var nav = document.getElementById("membership-coadmins");
						}else{
							var nav = document.getElementById("membership-administrators");
						}
	
						for (var i = 0; i < nav.childNodes.length; i++)
						{
							var menu = nav.childNodes[i];
						
							if (menu.nodeName && menu.nodeName.toLowerCase() == "ul")
							{
								var className = "collapsed";
					
								if (menu.getAttribute("id") == "coadmin-lct-org-" + value)
								{
									className = "expanded";
								}
								
								menu.className = className;
							}
						}
						
						if(switchLctOrgRequest.responseText == 0)
						{
							showThisMembershipNavigation('administrators');
						}

						hideSwitchingIndicator();
					}
					else
					{
						hideSwitchingIndicator();
					}
				}
			}
		}
	};

	switchLctOrgRequest.open("GET", url, true);
	switchLctOrgRequest.send(null);
	
	coadminOrgSelection.selectedIndex = currentSelectedIndex;
}


function addMembership()
{
	var event = (window.event ? window.event : arguments[0]);
	var sourceNode = (event.srcElement ? event.srcElement : event.target);

	if (confirm("You do not currently have this kind of membership.\nWould you like to add it to your account?\n\nCommissioner Membership is FREE\nCoaching Membership is $25.00\nOfficiating Membership is $25.00\nPlayer Membership (Test Version) is FREE"))
	{
		window.location = "/register/" + sourceNode.className + "/add";
	}
}

var membershipNavigation = document.getElementById("membership-navigation");
if (membershipNavigation)
{
	var h3s = membershipNavigation.getElementsByTagName("h3");
	for (var i = 0; i < h3s.length; i++)
	{
		var a = h3s[i].getElementsByTagName("a");
		if (a && a[0])
		{
			if (a[0].attachEvent)
			{
				a[0].attachEvent("onclick", showMembershipNavigation);
			}
			else
			{
				a[0].addEventListener("click", showMembershipNavigation, true);
			}
		}
		
		var span = h3s[i].getElementsByTagName("span");
		if (span && span[0])
		{
			if (span[0].attachEvent)
			{
				span[0].attachEvent("onclick", addMembership);
			}
			else
			{
				span[0].addEventListener("click", addMembership, true);
			}
		}
	}
}

var coadminOrgSelection = document.getElementById("coadmin-manage-lct-org-id");

if (coadminOrgSelection)
{
	var currentSelectedIndex = coadminOrgSelection.selectedIndex;

	if (coadminOrgSelection.attachEvent)
	{
		coadminOrgSelection.attachEvent("onchange", function(e) { 
			showSelectedLctOrgMenu(e) 
		});
	}
	else
	{
		coadminOrgSelection.addEventListener("change", function(e) { 
			showSelectedLctOrgMenu(e) 
		}, true);
	}
}

// ---------------------------------------------------------------------------------------------------------------------
// Suckerfish (give :hover <li>s in IE6 a class of "sfhover")
// ---------------------------------------------------------------------------------------------------------------------
 
function bindSuckerfish(target)
{
	if (target.attachEvent)
	{
		target.attachEvent("onmouseover", function()
		{
			target.className += " sfhover";
		});
		
		target.attachEvent("onmouseout", function()
		{
			target.className = target.className.replace(new RegExp(" sfhover\\b"), "");
		});
	}
	else
	{
		target.addEventListener("mouseover", function()
		{
			target.className += " sfhover";
		}, true);
		
		target.addEventListener("mouseout", function()
		{
			target.className = target.className.replace(new RegExp(" sfhover\\b"), "");
		});
	}
}

// only IE7 has native XHR support; IE6 and below has attachEvent and no native XHR
if (window.attachEvent && !window.XMLHttpRequest)
{
	window.attachEvent("onload", function()
	{
		var lis = document.getElementsByTagName("li");
		for (var i = 0; i < lis.length; i++)
		{
			bindSuckerfish(lis[i]);
		}
	});
}

// ---------------------------------------------------------------------------------------------------------------------
// Ajax search
// ---------------------------------------------------------------------------------------------------------------------

function submitAjaxSearch()
{
	var query = document.getElementById("google-query").value;

	if (query.length > 0)
	{
		var url = ajaxSearchUrl + escape(document.getElementById("google-query").value) + "?" + Math.random();

		if (ajaxSearchRequest)
		{
			ajaxSearchRequest = null; // destroy it
		}
		initAjaxSearchXHR();
		ajaxSearchRequest.open("GET", url, true);
		ajaxSearchRequest.send(null);
	}
}

var ajaxSearchTimer = null;
var ajaxSearchRequest = null;
var lastSearchQuery = null;

function startAjaxSearchTimer()
{
	var query = document.getElementById("google-query").value;

	if (!query.match(/[a-zA-Z]/))
	{
		hideAjaxSearchResults();
	}
	else
	{
		// don't bother if a key like left/right arrow was pressed; check that the value actually changed
		if (lastSearchQuery == null || lastSearchQuery != query)
		{
			lastSearchQuery = query;

			hideAjaxSearchResults();
			
			if (ajaxSearchTimer)
			{
				window.clearTimeout(ajaxSearchTimer);
			}
	
			ajaxSearchTimer = window.setTimeout(submitAjaxSearch, 500);
		}
	}
}

function hideAjaxSearchResults()
{
	window.clearTimeout(ajaxSearchTimer);
	document.getElementById("ajax-search").className = "";
	
	// destroy the XHR and abort the timer
	ajaxSearchRequest = null;
	window.clearTimeout(ajaxSearchTimer);
}

function hideAjaxSearchResultsEvent()
{
	hideAjaxSearchResults();
}

function initAjaxSearchXHR()
{
	ajaxSearchRequest = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");

	ajaxSearchRequest.onreadystatechange = function(event)
	{
		if (ajaxSearchRequest && (ajaxSearchRequest.readyState || ajaxSearchRequest.readyState == 0))
		{
			switch (ajaxSearchRequest.readyState)
			{
				case 4: // done
					var target = document.getElementById("ajax-search-results");
					document.getElementById("ajax-search").className = "done";

					if (ajaxSearchRequest.status != 200)
					{
						target.innerHTML = "<p>Error " + ajaxSearchRequest.status + " while loading results</p>";
					}
					else
					{
						if (ajaxSearchRequest.responseText.length > 0)
						{
							target.innerHTML = ajaxSearchRequest.responseText;
						}
						else
						{
							hideAjaxSearchResults();
						}
					}
					break;
					
				case 0: // not initialized
					hideAjaxSearchResults();
					break;
					
				default: // somewhere between initialized and done
					document.getElementById("ajax-search-results").innerHTML = "";
					document.getElementById("ajax-search").className = "loading";
					break;
			}
		}
	};
}

function bindAjaxSearchEvents()
{
	var input = document.getElementById("google-query");

	if (input)
	{
		if (input.attachEvent)
		{
			input.attachEvent("onkeypress", startAjaxSearchTimer);
		}
		else
		{
			input.addEventListener("keypress", startAjaxSearchTimer, true);
		}
	
		lastSearchQuery = input.value;
	}
}

if (window.attachEvent)
{
	window.attachEvent("onload", bindAjaxSearchEvents);
}
else
{
	window.addEventListener("load", bindAjaxSearchEvents, true);
}

// ---------------------------------------------------------------------------------------------------------------------
// [rel="external"] also becomes [target="_blank"] (opens external links in new windows)
// ---------------------------------------------------------------------------------------------------------------------
function externalLinks()
{ 
    if (!document.getElementsByTagName)
    {
        return; 
    }
    var anchors = document.getElementsByTagName("a"); 
    for (var i = 0; i < anchors.length; i++)
    { 
        var anchor = anchors[i];
         
        if (anchor.getAttribute("href") && anchor.getAttribute("rel")) 
        {
            var rels = anchor.getAttribute("rel").split(/\s+/);
            for (var j = 0; j < rels.length; j++)
		    {
			    if (rels[j].toLowerCase() == "external")
			    {
			    	anchor.setAttribute("target", "_blank");
			    }
			    break;
		    } 
        }
    } 
}

if (window.attachEvent)
{
	window.attachEvent("onload", externalLinks);
}
else
{
	window.addEventListener("load", externalLinks, true);
}

// ---------------------------------------------------------------------------------------------------------------------
// Fancy text hints in the side login form
// ---------------------------------------------------------------------------------------------------------------------

if (input = document.getElementById("membership-sidebar-username"))
{
	function onUsernameFocus()
	{
		if (input.value == "email address" || input.value == "")
		{
			input.value = "";
		}

		input.className = "";
	}

	function onUsernameBlur()
	{
		if (input.value == "email" || input.value == "")
		{
			input.value = "";
			input.className = "blurred";
			input.value = "email address";
		}
	}

	if (window.attachEvent)
	{
		input.attachEvent("onfocus", onUsernameFocus);
		input.attachEvent("onblur", onUsernameBlur);
		window.attachEvent("onload", onUsernameBlur);
	}
	else
	{
		input.addEventListener("focus", onUsernameFocus, true);
		input.addEventListener("blur", onUsernameBlur, true);
		window.addEventListener("load", onUsernameBlur, true);
	}
}

// ---------------------------------------------------------------------------------------------------------------------
// 5-star Ajax rating boxes
// ---------------------------------------------------------------------------------------------------------------------

function onRatingLiMouseOver()
{
	// find what LI is being entered
	var event = (window.event ? window.event : arguments[0]);
	var sourceNode = (event.toElement ? event.toElement : event.currentTarget);

	var li = (sourceNode.nodeName.toLowerCase() == "li" ? sourceNode : null);

	// find the parent UL (IE doesn't always traverse the DOM right, so do it recursively by brute force)
	var parent = sourceNode.parentNode;
	while (parent && parent.nodeName.toLowerCase() != "ul")
	{
		if (!li && parent.nodeName.toLowerCase() == "li")
		{
			li = parent;
		}
		parent = parent.parentNode;
	}

	if (!parent)
	{
		alert("Couldn't find parent UL for the rating box");
	}
	else if (!li)
	{
		alert("Found the parent UL for the rating box but not the active LI");
	}
	else
	{
		// set all lower stars (and the current star) to full, others to none
		var className = "full";
		for (var i = 0; i < parent.childNodes.length; i++)
		{
			var node = parent.childNodes[i];
			
			if (node.nodeName && node.nodeName.toLowerCase() == "li")
			{
				node.className = className;
			}
			
			if (node == li)
			{
				className = "none";
			}
		}
	}
}

function onRatingAClick()
{
	// find what <a> was clicked
	var event = (window.event ? window.event : arguments[0]);
	var sourceNode = (event.srcElement ? event.srcElement : event.currentTarget);

	var href = sourceNode.getAttribute("href");
	sourceNode = sourceNode.parentNode; // move to the parent <li>
	
	// find out which star this is
	var index = 0;
	var rating = null;
	for (var i = 0; i < sourceNode.parentNode.childNodes.length; i++)
	{
		var node = sourceNode.parentNode.childNodes[i];
		if (node.nodeName && node.nodeName.toLowerCase() == "li")
		{
			index++;
			if (node == sourceNode)
			{
				rating = index;
				break;
			}
		}
	}
	
	if (!rating)
	{
		throw "Unknown rating star clicked";
	}
	
	// get an instance of an XMLHttpRequest
	var xhr = (typeof(XMLHttpRequest) != "undefined") ? new XMLHttpRequest() : new ActiveXObject("Msxml2.XMLHTTP");

	if (!xhr)
	{
		alert("Your browser does not support this feature.\nPlease upgrade to Internet Explorer 7, Firefox 2, or Safari 3, or lower your security settings.");
	}
	else
	{
		xhr.onreadystatechange = function()
		{
			if (xhr.readyState == 4)
			{
				if (xhr.status != 200)
				{
					throw "Ajax request failed with HTTP status code " + xhr.status;
				}
				
				if (xhr.responseXML == null)
				{
					throw "Ajax request failed to return well-formed XML with the proper content type";
				}
				
				var root = xhr.responseXML.documentElement;
				if (!root)
				{
					throw "Ajax request failed to return an XML response with a root document element";
				}
				
				if (root.getAttribute("type") != "success")
				{
					alert("There was an error submitting your rating:\n" + root.firstChild.nodeValue);
				}
				else
				{
					sourceNode.parentNode.className = "rating-success";
				}
			}
		};
		xhr.open("GET", href + "?" + Math.random(), true);
		xhr.send(null);
	}
	
	// don't make the link actually get followed by calling every single method and setting every property ever made
	if (event.preventDefault)
	{
		event.preventDefault();
	}
	event.cancelBubble = true;
	event.returnValue = false;

	return false;
}

function onRatingUIMouseOut()
{
	// find what rating box was exited
	var event = (window.event ? window.event : arguments[0]);
	var sourceNode = (event.srcElement ? event.srcElement : event.currentTarget);

	// first try walking up the DOM to find the parent UL
	var target = sourceNode.parentNode;
	while (target && target.nodeName.toLowerCase() != "ul")
	{
		target = target.parentNode;
	}

	if (!target)
	{
		// whatever, find the first UL and use that
		var uls = sourceNode.getElementsByTagName("ul");
		if (!uls)
		{
			alert("Couldn't find the rating box in either direction by walking the DOM");
		}

		target = uls[0];
	}

	resetRatingUI(target);
}

function resetRatingUI(sourceNode)
{
	// find the original rating value of this rating UI
	var match = sourceNode.className.match(/rating-([1-5])-([05])/);
	if (!match)
	{
		// use an empty rating
		var major = 0;
		var minor = 0;
	}
	else
	{
		var major = parseInt(match[1]);
		var minor = parseInt(match[2]);
	}
	
	var lis = sourceNode.getElementsByTagName("li");
	for (var i = 1; i <= lis.length; i++)
	{
		var li = lis[i - 1];
		
		var className;
		if (i == (major + 1) && minor == 5)
		{
			className = "half";
		}
		else if (i <= major)
		{
			className = "full";
		}
		else
		{
			className = "none";
		}
		
		li.className = className;
	}
}

// find every rating UI on the page
function bindRatingUIs()
{
	var divs = document.getElementsByTagName("div");
	var ratings = new Array();
	for (var i = 0; i < divs.length; i++)
	{
		var className = divs[i].className;
		if (className &&
				(className == "rating" || className.match(/^rating\s/) || className.match(/\srating$/) || className.match(/\srating\s/)) &&
				(className != "rating-static" && !className.match(/^rating-static\s/) && !className.match(/\srating-static$/) && !className.match(/\srating-static\s/)))
		{
			ratings[ratings.length] = divs[i];
		}
	}
	
	// bind mouseover/click events for each star rating and mouseout to the rating UI
	for (var i = 0; i < ratings.length; i++)
	{
		bindRatingUI(ratings[i]);
	}
}

function bindRatingUI(rating)
{
	var lis = rating.getElementsByTagName("li");
	for (var j = 0; j < lis.length; j++)
	{
		var li = lis[j];
		
		// find the child <a> tag
		for (var k = 0; k < li.childNodes.length; k++)
		{
			var node = li.childNodes[k];
			if (node.nodeName && node.nodeName.toLowerCase() == "a")
			{
				if (node.attachEvent)
				{
					node.attachEvent("onclick", onRatingAClick);
				}
				else
				{
					node.addEventListener("click", onRatingAClick, true);
				}
			}
		}
		
		if (li.attachEvent)
		{
			li.attachEvent("onmouseover", onRatingLiMouseOver);
		}
		else
		{
			li.addEventListener("mouseover", onRatingLiMouseOver, true);
		}
	}
	
	if (rating.attachEvent)
	{
		rating.attachEvent("onmouseout", onRatingUIMouseOut);
	}
	else
	{
		rating.addEventListener("mouseout", onRatingUIMouseOut, true);
	}
}

if (window.attachEvent)
{
	window.attachEvent("onload", bindRatingUIs);
}
else
{
	window.addEventListener("load", bindRatingUIs, true);
}

function systemIsDown(target)
{
	target.innerHTML = '<embed type="application/x-shockwave-flash" id="nazdravemp3_1" src="/flash/players/audio_player.swf" wmode="opaque" ' +
			'quality="high" flashvars="file=/audio/sbtechno.mp3" height="20" width="100%"></embed>';
	target.style.width = "300px";
	target.style.height = "20px";
	var so = new SWFObject("/flash/players/audio_player.swf", "nazdravemp3_player", "100%", "20", "8", "#FFFFFF");
	so.addVariable("file", "/audio/sbtechno.mp3");
	so.addParam("wmode", "opaque");
				
	so.write("nazdravemp3_1");
}

