var currentSortType = "name";
var currentFilter = "";
var currentFavoritesOnly = null;

function addClick() {
	var divSongFilter = document.getElementById("divSongFilter");
	divSongFilter = document.getElementById("criteriaWrapper");
	var allCheckBoxes = divSongFilter.getElementsByTagName("input");

	for(var i = 0;  i < allCheckBoxes.length;  ++i) {
		var box = allCheckBoxes[i];

		if(box.name.indexOf("txt") >= 0) {
			YAHOO.util.Event.addListener(box, "keypress", checkPress); 
		}
		else if(box.name.indexOf("ctlCustom") >= 0) {
			YAHOO.util.Event.addListener(box, "click", categoryClick);  
			YAHOO.util.Event.addListener(box, "keypress", checkPress); 
		}
	}
}
function clickFirstChecked() {
	var typeDivs = document.getElementById("divSongFilter").childNodes;
	for(var i = 0;  i < typeDivs.length;  ++i) {
		typeDiv = typeDivs[i];
		if(typeDiv.nodeName != 'DIV') continue;

		var testCheckBoxes = typeDiv.getElementsByTagName("input");
		for(var b in testCheckBoxes) {
			var box = testCheckBoxes[b];
			if(box.checked) {
				categoryClick(box);
				break;
			}
		}
	}
}
function checkPress(e) {
	if( e.keyCode == 13){
		YAHOO.util.Event.preventDefault(e);
		document.getElementById("btnSearch").click();
	}
}
function categoryClick(e) {
	var checkBox = (e.className == null) ? this : e;
	var typeDiv = null;
	var divSongFilter = document.getElementById("divSongFilter");

	if(YAHOO.util.Dom.isAncestor(divSongFilter, checkBox)) {
		var typeDivs = divSongFilter.childNodes;

		for(var i = 0;  i < typeDivs.length;  ++i) {
			typeDiv = typeDivs[i];
			if(typeDiv.nodeName != 'DIV') continue;

			var testCheckBoxes = typeDiv.getElementsByTagName("input");
			if(listContains(testCheckBoxes, checkBox)) {
				var allUnchecked = true;
				for(var b in testCheckBoxes) {
					var box = testCheckBoxes[b];
					if(box.checked) {
						allUnchecked = false;
						break;
					}
				}
				break;
			}
		}

		for(var x = 0;  x < typeDivs.length;  ++x) {
			var checkDiv = typeDivs[x];
			if(checkDiv == typeDiv) continue;
			if(checkDiv.nodeName != 'DIV') continue;
			if(checkDiv.id == '') continue;

			var allCheckBoxes = checkDiv.getElementsByTagName("input");

			var nonSubBoxes = new Array();
			
			for(var i = 0;  i < allCheckBoxes.length;  ++i) {
				var box = allCheckBoxes[i];

				if(box != checkBox && box.name.indexOf("btn") != 0) {
					if(checkBox.checked) {
						box.checked = false;
					}

					box.disabled = false;
					box.nextSibling.style.color = "";

					if(box != checkBox && box.name.indexOf("chk") != 0) {
						nonSubBoxes.push(box);
					}
				}
			}

			for(var i = 0;  i < nonSubBoxes.length;  ++i) {
				var box = nonSubBoxes[i];
				box.disabled = !allUnchecked;

				if(!allUnchecked)
					box.nextSibling.style.color = "#C0C0C0";
				else
					box.nextSibling.style.color = "";
			}
		}
	}

	if(checkBox.checked)
		checkBox.nextSibling.className = "checkBoxListSelected";
	else
		checkBox.nextSibling.className = "";
		
	checkBox.focus();
}

function listContains(list, item) {
	var found = false;

	for(var i = 0;  i < list.length;  ++i) {
		var listItem = list[i];
		if(listItem == item) {
			found = true;
			break;
		}
	}

	return found;
}

var toggleFavoriteIcon = null;
var isFavorite;
function toggleFavorite(icon, favoriteId) {
	var divUnauthorized = YAHOO.util.Dom.get('divUnauthorized');

	if(divUnauthorized == null) {
		if(toggleFavoriteIcon == null) {
			if(favoriteId != null) {
				var divResults = YAHOO.util.Dom.get('divResults');
				var imgLoader = YAHOO.util.Dom.get('imgLoader');
				var imgIconFavorite = YAHOO.util.Dom.get('imgIconFavorite');

				toggleFavoriteIcon = icon;
				isFavorite = (toggleFavoriteIcon.src == imgIconFavorite.src);
				
				toggleFavoriteIcon.src = imgLoader.src;
				// showLoader(divResults);

				var post = "toggleFavorites=" + favoriteId;

				var completedToggle =
				{
					success: function(o) {
						var divResults = YAHOO.util.Dom.get('divResults');
						var response = o.responseText;
						var imgIconFavorite = YAHOO.util.Dom.get('imgIconFavorite');
						var imgIconNotFavorite = YAHOO.util.Dom.get('imgIconNotFavorite');

						if(response.match("-100")) {
							if(isFavorite)
								toggleFavoriteIcon.src = imgIconFavorite.src;
							else
								toggleFavoriteIcon.src = imgIconNotFavorite.src;
							alert("You have reached the maximum number of favorites.  Please remove some to add others.");
						}
						else {
							if(currentFavoritesOnly)
								performSearch(null, null);
							else {
								// No need to reload the full results, just flip the favorite icon
								if(isFavorite)
									toggleFavoriteIcon.src = imgIconNotFavorite.src;
								else
									toggleFavoriteIcon.src = imgIconFavorite.src;
							}
						}
						
						toggleFavoriteIcon = null;
					},
					failure: function(o) {
						var divResults = YAHOO.util.Dom.get('divResults');
						divResults.innerHTML = '<p style="text-align:center">Sorry an error has occured.  Please try again.</p>';
						clearLoader(divResults);

						toggleFavoriteIcon = null;
					}
				}

				var transaction = YAHOO.util.Connect.asyncRequest('POST', '/ajax/vocal/toggleFavorite.aspx', completedToggle, post);
			}
		}
	}
	else {
		var divSongList = YAHOO.util.Dom.get('divSongList');
		divUnauthorized.style.display = '';
		divSongList.style.display = 'none';
	}
}

function performSearch(sortType, showFavoritesOnly) {
	var post = "";
	var divResults = YAHOO.util.Dom.get('divResults');
	var filter = currentFilter;

	if(showFavoritesOnly != null)
		currentFavoritesOnly = showFavoritesOnly;

	showLoader(divResults);

	if(sortType == null) sortType = currentSortType;

	post += "sortType=" + sortType;

	if(currentFavoritesOnly)
		post += "&showFaveOnly=1";

	filter = getCriteriaPost();
	post += "&filter=" + filter;

	var url = '/ajax/vocal/songResults.aspx';
	var completedSearch =
	{
		success: function(o) {
			var divResults = YAHOO.util.Dom.get('divResults');
			divResults.innerHTML = o.responseText;
			clearLoader(divResults);
			try { pageTracker._trackPageview(o.argument.url + "?" + o.argument.post); } catch(err) {}
		},
		failure: function(o) {
			var divResults = YAHOO.util.Dom.get('divResults');
			divResults.innerHTML = '<p style="text-align:center">Sorry an error has occured.  Please try again.</p>';
			clearLoader(divResults);
			try { pageTracker._trackPageview(o.argument.url + "?ERROR&" + o.argument.post); } catch(err) {}
		},
		argument: {url: url, post: post}
	}

	var transaction = YAHOO.util.Connect.asyncRequest('POST', url, completedSearch, post);

	currentSortType = sortType;
	currentFilter = filter;
	
	adjustSortLinks();
	adjustFavoriteLinks();
}

function getCriteriaPost() {
	var divSongFilter = YAHOO.util.Dom.get("criteriaWrapper");
	var allCheckBoxes = divSongFilter.getElementsByTagName("input");
	var post = "";

	for(var i = 0;  i < allCheckBoxes.length;  ++i) {
		var box = allCheckBoxes[i];

		if(box.name.indexOf("txt") >= 0) {
			if(box.value.length > 0) {
				if(post != '') post += '*';
				filterName = box.name.replace(/txt(.+?)/, '$1');
				post += filterName + "#" + box.value;
			}
		}
		else if(box.name.indexOf("ctlCustom") >= 0) {
			if(box.checked) {
				var filterType = box.name;
				filterType = filterType.replace(/ctlCustom(.+?)_.+(?:\:|\$)(.+)/, '$1#$2');

				if(post != '') post += '*';
				post += filterType;
			}
		}
	}

	return post;
}

function adjustFavoriteLinks() {
	if(currentFavoritesOnly) {
		YAHOO.util.Dom.get('hrefShowFavorites').style.display = 'none';
		YAHOO.util.Dom.get('hrefShowAll').style.display = '';
	}
	else {
		YAHOO.util.Dom.get('hrefShowFavorites').style.display = '';
		YAHOO.util.Dom.get('hrefShowAll').style.display = 'none';
	}
}

function adjustSortLinks() {
	var sortWrapper = YAHOO.util.Dom.get("sortWrapper");
	var allSortLinks = sortWrapper.getElementsByTagName("a");
	var allSortTexts = sortWrapper.getElementsByTagName("span");

	for(var i = 0;  i < allSortLinks.length;  ++i) {
		allSortLinks[i].style.display = '';
	}
	for(var i = 0;  i < allSortTexts.length;  ++i) {
		allSortTexts[i].style.display = 'none';
	}

	YAHOO.util.Dom.get('hrefSort_' + currentSortType).style.display = 'none';
	YAHOO.util.Dom.get('spanSort_' + currentSortType).style.display = '';
}

