






//--------------------------------------Bandfarm Namespace---------------------------

var Bandfarm = {
	instance: {
		load: {}
	},
	util: {
		url: {},
		form: {},
		dom: {},
		browser: {},
		image: {},
		cookies: {}
	},
	anim: {},
	calendar: {},
	messages: {},
	dynamicDropDown: {},
	pageLock: {}
};

//-----------------------------------Data Listing----------------------------------

Bandfarm.dataListing = function()
{
	return{
		init: function()
		{
			//Header & row mouseover listeners 
			YAHOO.util.Event.addListener($(".datalist thead td.link, .datalist tbody tr.link").get(), "mouseover", Bandfarm.dataListing.mouseOver);
			YAHOO.util.Event.addListener($(".datalist thead td.link, .datalist tbody tr.link").get(), "mouseout", Bandfarm.dataListing.mouseOut);
			
			//Checkbox listener
			YAHOO.util.Event.addListener($(".datalist .list tbody input[@type='checkbox']").get(), "click", Bandfarm.dataListing.checkHighlight);
		},
		
		checkHighlight: function(e)
		{
			YAHOO.util.Event.stopPropagation(e);
			
			Bandfarm.util.form.checkHighlight(this, "row");
		},
		
		mouseOver: function(e)
		{
			$(this).addClass("mouseover");
		},
		
		mouseOut: function(e)
		{
			$(this).removeClass("mouseover");
		}
	};
}();

//-----------------------------------Live Search v4----------------------------------

Bandfarm.liveSearch = function(searchClass, options)
{
	this.searchClass 	= searchClass;
	this.options		= options;
	this.timeout		= null;
	
	this.initSearch();
	Bandfarm.dataListing.init();
};

Bandfarm.liveSearch.prototype = {
	initSearch: function()
	{
		//Livesearch listener
		YAHOO.util.Event.addListener("livesearch", "keydown", this.searchStart, this, true);
		YAHOO.util.Event.addListener($("select[@name='searchField']").get(), "change", this.searchStart, this, true);
	},
	
	searchStart: function(e)
	{
		var instance = this;
		
		if(this.timeout)
		{
			window.clearTimeout(this.timeout);
		}
		
		this.timeout = window.setTimeout(
			function(){instance.doSearch();},
			200
		);
	},
	
	doSearch: function()
	{
		var searchField = document.forms["datalist"].searchField.value;
		var searchValue	= document.forms["datalist"].searchValue.value;
		
		var url = "/ajax/search2.php?className=" + this.searchClass + "&searchField=" + searchField + "&searchValue=" + searchValue;
		
		if(window.location.search)
		{
			var query 	= window.location.search.substring(1);
			var regExp	= new RegExp("sortCriteria\[[0-9A-Z]+\]=[^&]+", "gi");
			var matches;
			
			if(matches = regExp.exec(query))
			{
				for(var i = 0; i < matches.length; i++)
				{
					url += "&" + matches[i];
				}
			}
			
			if(this.options)
			{
				if(this.options.queryVars)
				{
					var queryVars = this.options.queryVars;
					
					for(var i = 0; i < queryVars.length; i++)
					{
						url += "&" + queryVars[i] + "=" + Bandfarm.util.url.getVar(queryVars[i]);
					}
				}
				
				if(this.options.formVars)
				{
					var formVars = this.options.formVars;
					
					for(var i = 0; i < formVars.length; i++)
					{
						url += "&" + formVars[i] + "=" + Bandfarm.util.form.getValue(formVars[i]);
					}
				}
			}
		}
		
		YAHOO.util.Connect.asyncRequest("GET", url,
			{
				success: this.handleSuccess,
				scope: this
			}
		);
	},
	
	handleSuccess: function(obj)
	{
		$("#listingContents").html(obj.responseText);
		
		//Initialize listing mouseovers
		Bandfarm.dataListing.init();
	},
	
	getSearchURL: function(url)
	{
		var searchField, searchValue, prefix;
		
		if(document.forms["datalist"])
		{
			searchField = document.forms["datalist"].searchField ? document.forms["datalist"].searchField.value : "";
			searchValue = document.forms["datalist"].searchValue ? document.forms["datalist"].searchValue.value : "";
		}
		
		if(url.match(/searchField/))
		{
			url = url.replace(/searchField=[^&]*/, "searchField=" + searchField);
		}
		else
		{
			if(!url.match(/\?/))
			{
				prefix = "?";
			}
			else
			{
				prefix = "&";
			}
		
			url += prefix + "searchField=" + searchField;
		}
		
		if(url.match(/searchValue/))
		{
			url = url.replace(/searchValue=[^&]*/, "searchValue=" + searchValue);
		}
		else
		{
			url += "&searchValue=" + searchValue;
		}
		
		if(Bandfarm.util.url.getVar("searchValue") != searchValue && Bandfarm.util.url.getVar("startNum") !== false)
		{
			url = url.replace(/startNum=[^&]+/, "startNum=1");
		}
		
		return url;
	},
	
	changeSorting: function(url)
	{
		Bandfarm.util.url.redirect(this.getSearchURL(url));
	},
	
	addNew: function(url)
	{
		var redirectURL = Bandfarm.util.url.appendQueryVar(url, "httpReferrer", this.getSearchURL(Bandfarm.util.url.URI));
		
		Bandfarm.util.url.redirect(redirectURL);
	},
	
	editRecord: function(url)
	{
		url += "&httpReferrer=" + Bandfarm.util.url.Encode(this.getSearchURL(Bandfarm.util.url.URI));
		
		Bandfarm.util.url.redirect(url);
	}
}

//--------------------------------------LightBox-----------------------------------------

Bandfarm.lightBox = {
	config: {},
	
	getDefaultConfig: function()
	{
		return {
			title: "&nbsp;",
			closeEnabled: true,
			closeHandler: null,
			closeText: "Close Window",
			hideOnExtClick: false,
			iframe: true,
			draggable: true,
			width: 600,
			height: 425
		};
	},
	
	show: function(url, userConfig)
	{
		//Get default config
		this.config = this.getDefaultConfig();
		
		//Override default config
		if(userConfig)
		{
			for(i in userConfig)
			{
				this.config[i] = userConfig[i];
			}
		}
		
		var content = "&nbsp;";
		
		//Load page into iframe
		if(this.config.iframe)
		{
			content = '<iframe frameborder="0" id="LBiframe" src="' + url + '" width="' + (this.config.width - 8) +'px" height="' + (this.config.height - 30) + 'px"></iframe>';
		}
		//Load content dynamically via ajax request
		else
		{
			YAHOO.util.Connect.asyncRequest(
				"GET",
				url,
				{
					success: this.loadContent,
					scope: this
				}
			);
		}
		
		//Render panel
		$(document.body).append(
			'<div id="LBWindow">' +
				'<div class="hd">' + this.config.closeText + '</div>' +
				'<div class="bd">' + content + '</div>' +
				'<div class="ft"></div>' +
			'</div>'
		);
		
		this.panel = new YAHOO.widget.Panel(
			"LBWindow",
			{
				modal: true,
				underlay: "none",
				fixedcenter: true,
				constraintoviewport: true,
				width: this.config.width + "px",
				height: this.config.height + "px",
				effect: {effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.25} 
			}
		);
		
		this.panel.hideEvent.subscribe(this.removeDOM, this, true); 
		this.panel.render();
	},
	
	loadContent: function(obj)
	{
		//Set HTML
		$("#LBWindow.yui-panel .bd").html(obj.responseText);
	},
	
	hide: function()
	{
		//Hide panel
		Bandfarm.lightBox.panel.hide();
	},
	
	removeDOM: function()
	{
		$("#LBWindow").remove();
	}
};

//-----------------------------------Calendar----------------------------------

Bandfarm.calendar = function(config)
{
	for(i in config)
	{
		eval("this." + i + "= config[i];");
	}
	
	this.timeout = null;
	
	this.calObj = new YAHOO.widget.Calendar(
		this.instance,
		this.container,
		{selected: $("#" + this.input).val()}
	);
	
	eval(this.instance + "= this.calObj");
	
	//Calendar overlaps other absolute positioned items
	YAHOO.util.Dom.setStyle(this.container, "position", "absolute");
	YAHOO.util.Dom.setStyle(this.container, "z-index", 2);
	
	//Initialize
	this.initialize();
}

Bandfarm.calendar.prototype = {

	initialize: function()
	{
		//Initialize date click
		var input 		= this.input;
		var container	= this.container;
		var calObj		= this.calObj;
		var selectFunc	= this.selectFunc;
		
		//Date click handler
		this.calObj.selectEvent.subscribe(
			function(type, args, obj)
			{
				//Get selected date
				var selectedDate = calObj._toDate(args[0][0]);
				
				//Set input
				$("#" + input).val(selectedDate.getMonth() + 1 + "/" + selectedDate.getDate() + "/" + selectedDate.getFullYear());
				
				//Call select function
				if(selectFunc)
				{
					selectFunc.call(this);
				}
				
				//Hide calendar
				$("#" + container).hide();
			}
		);
		
		//Initialize event handlers
		YAHOO.util.Event.addListener(this.button, "click", this.handleClick, this, true);
		YAHOO.util.Event.addListener(document, "click", this.handleBlur, this, true);
		
		//Hide calendar
		$("#" + this.container).hide();
		
		//Pre-render calendar for faster loading
		this.calObj.render();
	},
	
	handleBlur: function(e)
	{
		var src = (Bandfarm.util.browser.isIE()) ? e.srcElement : e.target;
	
		if(src.parentNode.id == this.button)
		{
			return;
		}
		
		var parentNode 	= src.parentNode;
		var calClick	= false;
		
		for(i = 0; i < 10; i++)
		{
			if(parentNode.nodeName.toLowerCase() == "html")
			{
				break;
			}
			
			if(parentNode.id == this.container)
			{
				calClick = true;
				break;
			}
			
			parentNode = parentNode.parentNode;
		}
		
		if(!calClick)
		{
			var container = this.container;
			
			$("#" + container).hide();
		}
	},
	
	setPosition: function()
	{
		var pos 	= YAHOO.util.Dom.getXY(this.button);
		var height	= YAHOO.util.Dom.getViewportHeight() + Bandfarm.util.dom.getScrollOffset();
		
		if(pos[1] + 160 > height)
		{
			YAHOO.util.Dom.setXY(this.container, [pos[0], pos[1] - 10 - 160]);
		}
		else
		{
			YAHOO.util.Dom.setXY(this.container, [pos[0], pos[1] + 20]);
		}
	},
	
	handleClick: function()
	{
		//Render calendar
		this.display();
		
		if(Bandfarm.util.browser.isIE())
		{
			options = {
				XRightOffset: 0,
				XLeftOffset: -16,
				YTopOffset: 4,
				YBottomOffset: 18,
				boxWidth: 166,
				boxHeight: 162
			};
		}
		else
		{
			options = {
				XRightOffset: 0,
				XLeftOffset: -4,
				YTopOffset: 18,
				YBottomOffset: 18,
				boxWidth: 166,
				boxHeight: 162
			};
		}
		
		//Display calendar
		Bandfarm.util.dom.displayBox(
			this.button,
			this.container,
			options
		);
	},
	
	display: function()
	{
		$("#" + this.container).show();
		
		if($("#" + this.input).val())
		{
			this.calObj.selectDate($("#" + this.input).val());
		}
	}
}

//--------------------------------------Messages-----------------------------------------

Bandfarm.messages = function()
{
	var messagePanel;
	var message;
	
	var config = {
		timeout: true,
		time: 2000
	};
	
	return{
		setMessage: function(str)
		{
			message = str;
		},
		
		addMessages: function(messageArray)
		{
			if(messageArray && messageArray.length)
			{
				message = messageArray.join(".<br />");
			}
		},
		
		display: function()
		{
			if(!message)
			{
				return;
			}
			
			messagePanel = new YAHOO.widget.Panel(
				"messages",
				{ 
					fixedcenter: true, 
					underlay: "none", 
					close: false, 
					visible: true, 
					draggable: false, 
					modal: false, 
					effect: {
						effect: YAHOO.widget.ContainerEffect.FADE,
						duration: 0.5
					}
				}
			);
			
			messagePanel.setBody(message);
			messagePanel.render(document.body);
			
			if(config.timeout)
			{
				window.setTimeout(Bandfarm.messages.hide, config.time);
			}
		},
		
		hide: function()
		{
			messagePanel.hide();
		},
		
		setConfig: function(prop, value)
		{
			if(prop != "undefined")
			{
				config[prop] = value;
			}
		},
		
		wait: function()
		{
			message = "Loading, please wait...<br /><img id='loading' src='/images/loading.gif' />";
			
			this.setConfig("timeout", false);
			this.display();
		}
	}
}();

//--------------------------------------Help-----------------------------------------

Bandfarm.help = {
	init: function(categories)
	{
		//Create help container (fixes whitespace bug)
		$(document.body).append("<div id='helpContainer' style='position: absolute; top: 0; left: 0'></div>");
		
		//Make sure categories is an array
		if(!(categories instanceof Array))
		{
			categories = [categories];
		}
		
		//Ajax request url
		var url = "/ajax/get-help.php?categories=" + categories.join(",");
		
		//Get help categories
		YAHOO.util.Connect.asyncRequest(
			"GET",
			url,
			{
				success: function(obj)
				{
					eval("var result = " + obj.responseText);
					
					//Iterate through help icons
					$(".helpImage").each(
						function()
						{
							//Get help topic
							var helpTopic = $(this).attr("helpTopic");
							
							//Exit if no topic is defined
							if(!helpTopic)
							{
								return;
							}
							
							//Config
							var config = {
								hideIfEmpty: false
							};
							
							//Get user config (optional)
							var helpConfig = $(this).attr("helpConfig");
							
							if(helpConfig)
							{
								eval("var userConfig = {" + helpConfig + "};");
								
								//Override default config
								for(i in userConfig)
								{
									config[i] = userConfig[i];
								}
							}
							
							var helpParsed	= helpTopic.split(".");
							var category	= helpParsed[0];
							var topic		= helpParsed[1];
							var text		= "";
							var paragraphs	= "";
							
							if(result[category])
							{
								text = result[category][topic];
							}
							
							//No text
							if(!text)
							{
								if(config.hideIfEmpty)
								{
									$(this).hide();
								}
								
								return;
							}
							
							//Build html
							for(i = 0; i < text.paragraphs.length; i++)
							{
								last = (i == text.paragraphs.length - 1) ? "last" : "";
								paragraphs += '<div class="paragraph ' + last + '">' + text.paragraphs[i] + "</div>";
							}
							
							var html = '<div class="helpContent"><div class="title">' + text.title + '</div>' + paragraphs + '</div>';
							
							//Create tooltip
							new YAHOO.widget.Tooltip(
								"helpBalloon",
								{
									context: this,
									container: "helpContainer",
									text: html,
									autodismissdelay: 600000
								}
							);
						}
					);
				}
			}
		);
	}
}

//--------------------------------------Navigation-----------------------------------------

Bandfarm.nav = function()
{
	var animSpeed = 0.5;
	
	return{
		init: function()
		{
			var heightStr 	= "";
			var grpIDs 		= Bandfarm.nav.grpIDs;
			
			for(i = 0; i < grpIDs.length; i++)
			{
				var ID		= grpIDs[i];
				var grpObj 	= document.getElementById(ID);
				
				if(!grpObj)
				{
					continue;
				}
				
				var height = grpObj.offsetHeight;
				
				heightStr += '"' + ID + '" => ' + height + ", ";
				
				YAHOO.util.Event.addListener(ID + "_grp", "click", this.toggleDisplay);
			}
		},
		
		toggleDisplay: function(e)
		{
			var ID 			= this.id.replace(new RegExp("_grp"), "");
			var height		= parseInt($("#" + ID).attr("height"));
			var	parentID 	= ID.replace(new RegExp("_[0-9]+$"), "");
			var subMenu		= (new RegExp("[0-9]+")).test(parentID) ? true : false;
			var parentHeight;
			
			//Get parent height
			if(subMenu)
			{
				parentHeight = parseInt($("#" + parentID).attr("height"));
			}
			
			if(YAHOO.util.Dom.hasClass(ID, "closed"))
			{
				if(subMenu)
				{
					$.cookie(ID, 1);
				}
				
				//Mark group opened
				$("#" + ID).removeClass("closed");
				
				//Display open arrow
				$("#" + ID + "_img").attr("src", "/images/leftnav-open.gif");
				
				var counter = 1;
				var prefix 	= ID.replace(new RegExp("(.*_)[0-9]+$"), "$1");
				var siblingID;
				
				parentHeight += height;
				
				while(true)
				{
					if(subMenu)
					{
						break;
					}
					
					siblingID = prefix + counter++;
					
					if(!Bandfarm.nav.grpIDs.search(siblingID))
					{
						break;
					}
					
					if(!YAHOO.util.Dom.hasClass(siblingID, "closed") && siblingID != ID)
					{
						//alert(siblingID);
						Bandfarm.nav.hide(siblingID);
						
						parentHeight -= parseInt($("#"+siblingID).attr("height"));
					}
				}
				
				//Animate nav group open
				var attributes = {
					height : {
						from : 0,
						to : height
					}
				};
				
				var anim = new YAHOO.util.Anim(ID, attributes, animSpeed, YAHOO.util.Easing.easeOut);
				anim.animate();
			}
			else
			{
				if(subMenu)
				{
					$.cookie(ID, 0);
				}
				
				Bandfarm.nav.hide(ID);
				parentHeight -= height;
			}
			
			//Animate parent
			if(subMenu)
			{
				Bandfarm.nav.animateParent(parentID, parentHeight);
			}
		},
		
		animateParent: function(parentID, parentHeight)
		{
			var attributes = {
				height : {
					to : parentHeight
				}
			};
			
			var anim = new YAHOO.util.Anim(parentID, attributes, animSpeed, YAHOO.util.Easing.easeOut);
			anim.animate();
			
			//Set parent height
			$("#" + parentID).attr("height", parentHeight);
		},
		
		hide: function(ID)
		{
			//Mark group closed
			$("#" + ID).addClass("closed");
			
			//Display closed arrow
			$("#" + ID + "_img").attr("src", "/images/leftnav-closed.gif");
			
			//Animate nav group close
			var attributes = {
				height : {
					to : 0
				}
			};
			
			var anim = new YAHOO.util.Anim(ID, attributes, animSpeed, YAHOO.util.Easing.easeIn);
			anim.animate();
		}
	};
}();

//--------------------------------------Animation-----------------------------------------

Bandfarm.anim.fade = function(elements, speed, onCompleteFunc)
{
	var attributes = {
		opacity: { to: 0 }
	};
	
	var animTime = 0.25;
	
	switch(speed)
	{
		case "slow":
			animTime = 0.5;
			break;
		case "fast":
			animTime = 0.1;
	}
	
	var anim = new YAHOO.util.Anim(elements, attributes, animTime, YAHOO.util.Easing.easeOut);
	
	if(onCompleteFunc)
	{
		anim.onComplete.subscribe(onCompleteFunc);
	}
	
	anim.animate();
}

Bandfarm.anim.appear = function(elements, speed, onCompleteFunc)
{
	var attributes = {
		opacity: { to: 1 }
	};
	
	var animTime = 0.25;
	
	switch(speed)
	{
		case "slow":
			animTime = 0.5;
			break;
		case "fast":
			animTime = 0.15;
	}
	
	var anim = new YAHOO.util.Anim(elements, attributes, animTime, YAHOO.util.Easing.easeOut);
	
	if(onCompleteFunc)
	{
		anim.onComplete.subscribe(onCompleteFunc);
	}
	
	anim.animate();
}

//--------------------------------------Util.Browser-----------------------------------------

Bandfarm.util.browser.getBrowser = function()
{
	var userAgent = navigator.userAgent;
	
	//Opera (check first in case of spoof)
	if(userAgent.match(/opera/gi))
	{
		return "opera";
	}
	//IE
	else if(userAgent.match(/msie/gi))
	{
		return "ie";
	}
	//Safari (check before Gecko because it includes "like Gecko")
	else if(userAgent.match(/safari/gi))
	{
		return "safari";
	}
	//Gecko
	else if(userAgent.match(/gecko/gi))
	{
		return "mozilla";
	}
	
	return false;
}

Bandfarm.util.browser.isIE = function()
{
	return (Bandfarm.util.browser.getBrowser() == "ie");
}

Bandfarm.util.browser.isSafari = function()
{
	return (Bandfarm.util.browser.getBrowser() == "safari");
}

Bandfarm.util.browser.isMozilla = function()
{
	return (Bandfarm.util.browser.getBrowser() == "mozilla");
}

Bandfarm.util.browser.isOpera = function()
{
	return (Bandfarm.util.browser.getBrowser() == "opera");
}

//--------------------------------------Util.DOM-----------------------------------------

Bandfarm.util.dom.displayBox = function(anchorObj, displayObj, options)
{
	//Display box
	YAHOO.util.Dom.setStyle(displayObj, "display", "block");
		
	var pos 			= YAHOO.util.Dom.getXY(anchorObj);
	var windowHeight	= YAHOO.util.Dom.getViewportHeight() + Bandfarm.util.dom.getScrollOffset();
	var windowWidth		= YAHOO.util.Dom.getViewportWidth();
	var boxWidth		= parseInt(YAHOO.util.Dom.getStyle(displayObj, "width")) || options.boxWidth || 0;
	var boxHeight		= parseInt(YAHOO.util.Dom.getStyle(displayObj, "height")) || options.boxHeight || 0;
	
	var posX 			= pos[0] + (options.XRightOffset ? options.XRightOffset : 0);
	var posY 			= pos[1] + (options.YBottomOffset ? options.YBottomOffset : 0);
	
	if(pos[1] + boxHeight > windowHeight)
	{
		posY = pos[1] - boxHeight - (options.YTopOffset ? options.YTopOffset : 0);
	}
	
	if(pos[0] + boxWidth > windowWidth)
	{
		posX = pos[0] - boxWidth - (options.XLeftOffset ? options.XLeftOffset : 0);
	}
	
	YAHOO.util.Dom.setXY(displayObj, [posX, posY]);
}

Bandfarm.util.dom.center = function(element, options)
{
	//Display box
	YAHOO.util.Dom.setStyle(element, "display", "block");
	
	if(options)
	{
		var useYCord = options.useYCord;
	}
	
	var screenWidth 	= YAHOO.util.Dom.getViewportWidth();
	var screenHeight	= YAHOO.util.Dom.getViewportHeight();
	
	var elementWidth	= parseInt(YAHOO.util.Dom.getStyle(element, "width")); 
	var elementHeight	= parseInt(YAHOO.util.Dom.getStyle(element, "height"));
	
	var newX 			= parseInt((screenWidth / 2) - (elementWidth / 2));
	var newY			= useYCord ? parseInt(YAHOO.util.Dom.getStyle(element, "top")) : parseInt((screenHeight / 2) + Bandfarm.util.dom.getScrollOffset() - (elementHeight / 2));
	
	YAHOO.util.Dom.setXY(element, [newX, newY]);
}

Bandfarm.util.dom.getScrollOffset = function()
{
	var offset = 0;
	
	if(document.documentElement && document.documentElement.scrollTop)
	{
		offset = document.documentElement.scrollTop;
	}
	else if(document.body)
	{
		offset = document.body.scrollTop;
	}
		
	return offset;
}

//--------------------------------------Util.Form-----------------------------------------

Bandfarm.util.form.getValue = function(varName, formIndex)
{
	formIndex = formIndex ? formIndex : 0;
	
	return document.forms[formIndex].elements[varName].value;
}

Bandfarm.util.form.setValue = function(varName, varValue, formIndex)
{
	formIndex = formIndex ? formIndex : 0;
	
	var element = document.forms[formIndex].elements[varName];
	
	if(element.length)
	{
		var type = element[0].getAttribute("type");
		
		for(i = 0; i < element.length; i++)
		{
			if(element[i].value == varValue)
			{
				element[i].checked = true;
				break;
			}
		}
	}
	else
	{
		element.value = varValue;
	}
}

Bandfarm.util.form.setChecked = function(varName, index, formIndex)
{
	formIndex = formIndex ? formIndex : 0;
	
	document.forms[formIndex].elements[varName][index].checked = true;
}


Bandfarm.util.form.setFormAction = function(actionValue, formIndex)
{
	formIndex = formIndex ? formIndex : 0;
	
	document.forms[formIndex].action = actionValue;
}

Bandfarm.util.form.setAction = function(varValue, formIndex)
{
	formIndex = formIndex ? formIndex : 0;
	
	document.forms[formIndex].elements["action"].value = varValue;
	
	document.forms[formIndex].submit();
}

Bandfarm.util.form.confirmAction = function(actionVal, confirmText, formIndex)
{
	formIndex = formIndex ? formIndex : 0;
	
	if(confirm(confirmText))
	{
		//Set action
		document.forms[formIndex].action.value = actionVal;
		
		//Submit form
		Bandfarm.util.form.submit(formIndex);
	}
}

Bandfarm.util.form.submit = function(formIndex)
{
	formIndex = formIndex ? formIndex : 0;
	
	document.forms[formIndex].submit();
}

Bandfarm.util.form.addAnother = function(formIndex)
{
	formIndex = formIndex ? formIndex : 0;
	
	//Set add another to true
	document.forms[formIndex].addAnother.value = 1;
	
	//Submit form
	Bandfarm.util.form.submit(formIndex);
}

Bandfarm.util.form.nextPage = function(formIndex)
{
	formIndex = formIndex ? formIndex : 0;
	
	//Set add another to true
	document.forms[formIndex].nextPage.value = 1;
	
	//Submit form
	Bandfarm.util.form.submit(formIndex);
}

Bandfarm.util.form.toggleCheckBoxes = function(checkboxObj, nameSearch, parentClassName)
{
	var checkValue = checkboxObj.checked;
	
	$('input[@name*="'+nameSearch+'"]').each(
		function(i)
		{
			if(this.type == "checkbox" && !this.disabled)
			{
				this.checked = checkValue;
				
				if(!parentClassName)
				{
					parentClassName = "row";
				}
				
				Bandfarm.util.form.checkHighlight(this, parentClassName);
			}
		}
	);
}

Bandfarm.util.form.checkHighlight = function(checkboxObj, className)
{
	var parent = checkboxObj.parentNode;
	
	for(i = 1; i <= 5; i++)
	{
		if(parent)
		{
			if(YAHOO.util.Dom.hasClass(parent, className))
			{
				break;
			}
		}
		
		parent = parent.parentNode;
	}
	
	if(checkboxObj.checked)
	{
		$(parent).addClass("highlightRow");
	}
	else
	{
		$(parent).removeClass("highlightRow");
	}
}

Bandfarm.util.form.initMouseOvers = function()
{
	YAHOO.util.Event.addListener($("input.button, input.smallButton").get(), "mouseover", Bandfarm.util.form.mouseOver);
	YAHOO.util.Event.addListener($("input.button, input.smallButton").get(), "mouseout", Bandfarm.util.form.mouseOut);
}

Bandfarm.util.form.mouseOver = function(e)
{
	$(this).addClass("mouseover");
}

Bandfarm.util.form.mouseOut = function(e)
{
	$(this).removeClass("mouseover");
}

Bandfarm.util.form.focusFirst = function()
{
	var form = document.forms[0];
	
	if(form)
	{
		for(i = 0; i < form.elements.length; i++)
		{
			if(form.elements[i].type == "text")
			{
				form.elements[i].focus();
				break;
			}
		}
	}
}

Bandfarm.util.form.setOptions = function(element, options)
{
	if(typeof element == "string")
	{
		element = $("#" + element).get(0);
	}
	
	//Clear select options
	$(element).empty();

	var appendStr = "";
	
	for(i in options)
	{
		var value = options[i];
		
		if(value instanceof Object)
		{
			appendStr += '<optgroup label="' + i + '">';
			
			for(j in value)
			{
				appendStr += '<option value="' + j + '">' + value[j] + '</option>';
			}
			
			appendStr += "</optgroup>";
		}
		else
		{
			appendStr += '<option value="' + i + '">' + value + '</option>';
		}
	}
	
	$(element).append(appendStr);
}

//--------------------------------------Util.Url-----------------------------------------

Bandfarm.util.url.redirect = function(url)
{
	window.location = $.trim(url);
}

Bandfarm.util.url.getVar = function(variable)
{
	var vars = window.location.search.substring(1).split("&");
	
	for(var i = 0; i < vars.length; i++)
	{
		var pair = vars[i].split("=");
		
		if(pair[0] == variable)
		{
			return pair[1];
		}
	}
	
	return "";
}

Bandfarm.util.url.appendQueryVar = function(url, key, value)
{
	var query = key + "=" + Bandfarm.util.url.Encode(value);
	
	if(url.match(/\?/gi))
	{
		url += "&" + query
	}
	else
	{
		url += "?" + query;
	}
	
	return url;
}

Bandfarm.util.url.Encode = function( plaintext )
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for

	return encoded;
}

//--------------------------------------Util.Image-----------------------------------------

Bandfarm.util.image.load = function(imageURL, callback)
{
	var image = new Image();
	image.src = imageURL;
	
	if(callback)
	{
		image.onload = callback;
	}
}

Bandfarm.util.image.preLoad = function(images, directory)
{
	if(!images.length)
	{
		return;
	}
	
	var image 	= new Image();
	image.src	= "/" + directory + "/" + images.pop();
	
	image.onload = function()
	{
		Bandfarm.util.image.preLoad(images, directory);
	}
}

//-----------------------Dynamic Drop Down-------------------------

Bandfarm.dynamicDropDown = function()
{
	return{
		getOptions: function(url, childID)
		{
			this.childID = childID;
			
			var callback = {
					success: this.appendOptions,
					scope: this
				}
				
			YAHOO.util.Connect.asyncRequest("GET", url, callback, null);
		},
		
		appendOptions: function(obj)
		{
			var selectObj = document.getElementById(this.childID);
			var i, key, value, optionObj;
			
			if(selectObj)
			{
				//Clear select options
				selectObj.options.length = 0;
				
				var options = obj.responseXML.getElementsByTagName("option");
				
				for(i = 0; i < options.length; i++)
				{
					key 		= options[i].getAttribute("key");
					value		= options[i].firstChild.nodeValue;
					
					optionObj	= new Option(value, key, false, false);
					optionObj.className = options[i].getAttribute("class");
					
					selectObj.options[i] = optionObj;
				}
			}
		}
	};
}();

//--------------------------------------Page Lock-----------------------------------------

Bandfarm.pageLock.lock = function()
{
	var unlockable = ["^/locked\.html", "^/popup-window/"];
	
	//Redirect to splash page if page is locked
	if($.cookie("locked") == 1 && !unlockable.search(window.location.pathname))
	{
		Bandfarm.util.url.redirect("/locked.html");
	}
	
	//Lock page
	$.cookie("locked", 1);
}

Bandfarm.pageLock.unlock = function()
{
	//Unlock page
	if(window.location.pathname != "/locked.html")
	{
		$.cookie("locked", 0);
	}
}

//--------------------------------------Color Wheel-----------------------------------------

Bandfarm.colorWheel = function(wheelID, options)
{
	this.color		= "#ffffff";
	this.wheelID	= wheelID;
	this.hoverFunc	= options.hoverFunc;
	this.clickFunc	= options.clickFunc;
	this.blurFunc	= options.blurFunc;
	
	//Init variables
	this.initVars();
	
	//Init event handlers
	this.initEventHandlers();
}

Bandfarm.colorWheel.prototype = {
	initVars: function()
	{
		addary 		= new Array();
		addary[0] 	= new Array(0,1,0);
		addary[1] 	= new Array(-1,0,0);
		addary[2] 	= new Array(0,0,1);
		addary[3] 	= new Array(0,-1,0);
		addary[4] 	= new Array(1,0,0);
		addary[5] 	= new Array(0,0,-1);
		addary[6] 	= new Array(255,1,1);
		
		clrary 		= new Array(360);
		
		for(i = 0; i < 6; i++)
		{
			for(j = 0; j < 60; j++)
			{
				clrary[60 * i + j] = new Array(3);
				
				for(k = 0; k < 3; k++) 
				{
					clrary[60 * i + j][k] = addary[6][k];
					addary[6][k] += (addary[i][k] * 4);
				}
			}
		}
		
		this.clrary = clrary;
	},
	
	initEventHandlers: function()
	{
		YAHOO.util.Event.addListener(this.wheelID, "mousemove", this.mouseMove, this, true);
		
		if(this.clickFunc)
		{
			YAHOO.util.Event.addListener(this.wheelID, "click", this.clickFunc, this, true);
		}
		
		if(this.handleBlur)
		{
			YAHOO.util.Event.addListener(document, "click", this.handleBlur, this, true);
		}
	},
	
	handleBlur: function(e)
	{
		var src = (Bandfarm.util.browser.isIE()) ? e.srcElement : e.target;
		
		if(YAHOO.util.Dom.hasClass(src, "colorwheelImage"))
		{
			return;
		}
	
		var parentNode 	= src.parentNode;
		var validClick	= false;
		
		for(i = 0; i < 10; i++)
		{
			if(parentNode.nodeName.toLowerCase() == "html")
			{
				break;
			}
			
			if(parentNode.id == this.wheelID)
			{
				validClick = true;
				break;
			}
			
			parentNode = parentNode.parentNode;
		}
		
		if(!validClick && this.blurFunc)
		{
			this.blurFunc.call(this);
		}
	},
	
	mouseMove: function(e)
	{
		var xOffset, yOffset;
		
		if(document.layers)
		{
			xOffset = e.layerX;
			yOffset = e.layerY;
		}
		else if(document.all)
		{
			xOffset = event.offsetX;
			yOffset = event.offsetY;
		}
		else if(document.getElementById)
		{
			xOffset = e.pageX - document.getElementById(this.wheelID).offsetLeft - parseInt(YAHOO.util.Dom.getStyle("colorWheel", "left"));
			yOffset = e.pageY - document.getElementById(this.wheelID).offsetTop - parseInt(YAHOO.util.Dom.getStyle("colorWheel", "top"));
		}
		
		x 		= 4 * xOffset;
		y 		= 4 * yOffset;
		
		sx 		= x - 512;
		sy 		= y - 512;
		qx 		= (sx < 0) ? 0 : 1;
		qy 		= (sy < 0) ? 0 : 1;
		q 		= 2 * qy + qx;
		quad	= new Array(-180,360,180,0);
		xa 		= Math.abs(sx);
		ya 		= Math.abs(sy);
		d 		= ya * 45 / xa;
		
		if(ya > xa) d = 90 - (xa * 45 / ya);
		
		deg 	= Math.floor(Math.abs(quad[q] - d));
		n 		= 0;
		sx 		= Math.abs(x - 512);
		sy 		= Math.abs(y - 512);
		r 		= Math.sqrt((sx * sx) + (sy * sy));
		
		if(x == 512 & y == 512)
		{
			c = "000000";
		}
		else
		{
			for(i = 0; i < 3; i++)
			{
				r2 = this.clrary[deg][i] * r / 256;
				
				if(r > 256) r2 += Math.floor(r - 256);
				if(r2 > 255) r2 = 255;
				
				n = 256 * n + Math.floor(r2);
			}
			
			c = n.toString(16);
			
			while(c.length < 6) c = "0" + c;
		}
		
		//Set color
		this.color = "#" + c;
		
		//Call hover function
		if(this.hoverFunc && !Bandfarm.util.browser.isIE())
		{
			this.hoverFunc.call(this);
		}
	}
}

//--------------------------------------Stylesheet-----------------------------------------

Bandfarm.stylesheet = function()
{
	var currentEditor;
	
	return{
		edit: function(editorName)
		{
			currentEditor = editorName;
			
			eval("var code = " + currentEditor + ".getCode()");
			
			YAHOO.util.Connect.asyncRequest(
				"POST",
				"/ajax/parse-stylesheet.php",
				{
					success: function(obj)
					{
						var styleProperties, queryStr = "";
						
						eval("styleProperties = " + obj.responseText);
						
						for(var i in styleProperties)
						{
							queryStr += i + "=" + Bandfarm.util.url.Encode(styleProperties[i]) + "&";
						}
						
						Bandfarm.lightBox.show(
							"/popup-window/edit-stylesheet.html?" + queryStr,
							{iframe: true, width: 600, height: 500, dragable: false}
						);
					}
				},
				"code=" + Bandfarm.util.url.Encode(code)
			);
		},
		
		modify: function(postVars)
		{
			Bandfarm.messages.wait();
			
			eval("var code = " + currentEditor + ".getCode()");
			postVars += "code=" + Bandfarm.util.url.Encode(code);
			
			var callback = {
				success: function(obj)
				{
					eval(currentEditor + ".setCode(obj.responseText)");
					Bandfarm.messages.hide();
				}
			};
			
			window.setTimeout("panel.hide()", 1000);
			
			YAHOO.util.Connect.asyncRequest(
				"POST",
				"/ajax/modify-stylesheet.php",
				callback,
				postVars
			);
		}
	};
}();

//--------------------------------------Array-----------------------------------------

Array.prototype.search = function(needle)
{
	for(var i = 0; i < this.length; i++)
	{
		if((new RegExp(this[i])).test(needle))
		{
			return true;
		}
	}
	
	return false;
}
