// This function shows one element and hides another, and if ele_focus is set, also sets focus
function ShowAndHide(ele_show, ele_hide, ele_focus) {
	document.getElementById(ele_hide).style.display = 'none';
	document.getElementById(ele_show).style.display = 'block';

	if (ele_focus)
		document.getElementById(ele_focus).focus();
}

// This function checks to see if the default text search value needs to be removed and font changed
function TextFocus() {
	if (document.getElementById('filters').k.value == 'Text Search...') {
		document.getElementById('filters').k.value = '';
		document.getElementById('filters').k.style.color = 'black'
	}
}

// This function expands or collapses every child element of given parent
function ExpandAll(parent, expand) {
	var display;

	if (expand) {
		document.getElementById(parent + 'Expand').style.display = 'none';
		document.getElementById(parent + 'Collapse').style.display = 'inline';
		display = "block";
	} else {
		display = "none";
		document.getElementById(parent + 'Collapse').style.display = 'none';
		document.getElementById(parent + 'Expand').style.display = 'inline';
	}

	var children = document.getElementById(parent).getElementsByTagName('div');
	var num_children = children.length;

	for (i=0; i<num_children; i++) {
		if (children[i].id.search('category_') != -1)
			children[i].style.display = display;
	}
}

// This function submits the filter form when the server select is changed
function SubmitServer(id) {
	document.getElementById('s').value = document.getElementById('servers').server.value;
	SubmitFilters();
}

// This function submits the filter form when a profession icon is clicked
function SubmitProfession(id) {
	document.getElementById('filters').action = 'list.php';
	document.getElementById('filters').p.value = id;
	SubmitFilters();
}

// This function toggles the visibility of the specified element
function Toggle(ele) {
	if (document.getElementById(ele).style.display == 'block')
		document.getElementById(ele).style.display = 'none';	
	else
		document.getElementById(ele).style.display = 'block';	
}

// This function enables visibilty of specified element, and disables visibility of others
function ToggleMode(total, current) {
	// Cycle through modes and hide them
	for (var i=1; i<=total; i++)
		if (i != current)
			document.getElementById('extra_' + i).style.display = 'none';

	// Display current mode
	document.getElementById('extra_' + current).style.display = 'block';

	// Focus current mode text box (if there is one)
	if (current == 2)
		document.getElementById('filters').g.focus();
	else if (current == 3)
		document.getElementById('filters').c.focus();
}

// Makes sure a string is safe for passing through a URL
function urlencode( str ) {
	var ret = str;

	ret = ret.toString();
	ret = encodeURIComponent(ret);
	ret = ret.replace(/%20/g, '+');

	return ret;
}

// This function exists so that only non-default values are appended on the URL instead of everything
function SubmitFilters() {
	// Destination url begins with the action value of the filters form
	url = document.getElementById('filters').action;

	// Append server value to url
	url += "?s=" + document.getElementById('s').value;

	// Check if profession value is set, and if so append
	if (document.getElementById('p').value > 0)
		url += "&p=" + document.getElementById('p').value;

	// Check if the filter mode section exists on page before appending url with values
	if (document.getElementById('category_a')) {
		if (document.getElementById('filters').m[0].checked) {
			// Add faction to the url if not default
			if (document.getElementById('filters').f.value > 0)
				url += "&f=" + document.getElementById('filters').f.value;
		} else if (document.getElementById('filters').m[1].checked) {
			// Add specific guild to the url
			url += "&g=" + urlencode(document.getElementById('filters').g.value);	
		} else if (document.getElementById('filters').m[2].checked) {
			// Add specific crafter to the url
			url += "&c=" + urlencode(document.getElementById('filters').c.value);	
		} else if (document.getElementById('filters').m[3].checked) {
			// Add edit option to the url
			url += "&e=" + document.getElementById('filters').e.value;		
		}
	} else {
		// If not, check to see if any values are being carried over otherwise through the default filters form
		if (document.getElementById('filters').f)
			url += "&f=" + document.getElementById('filters').f.value;
		else if (document.getElementById('filters').g)
			url += "&g=" + urlencode(document.getElementById('filters').g.value);
		else if (document.getElementById('filters').c)
			url += "&c=" + urlencode(document.getElementById('filters').c.value);
		else if (document.getElementById('filters').e)
			url += "&e=" + document.getElementById('filters').e.value;
	}

	// Check if the text search filter section even exists on page before appending url with values
	if (document.getElementById('keyword'))
		if ((document.getElementById('filters').k.value.length) && (document.getElementById('filters').k.value != "Text Search..."))
			url += "&k=" + urlencode(document.getElementById('filters').k.value);

	// Check if the wizard filter section even exists on page and that profession will be jewelcrafting before appending url with values
	if ((document.getElementById('p').value == 1) && (document.getElementById('wizard')))
		if (document.getElementById('filters').w.value != 0)
			url += "&w=" + document.getElementById('filters').w.value;

	// Check if the basic filters section even exists on page before appending url with values
	if (document.getElementById('category_b')) {
		// Scope
		if (!document.getElementById('filters').wotlk.checked)
			url += "&wotlk=0";
		if (document.getElementById('filters').tbc.checked)
			url += "&tbc=1";
		if (document.getElementById('filters').pre.checked)
			url += "&pre=1";

		// Quality
		if (!document.getElementById('filters').q1.checked)
			url += "&q1=0";
		if (!document.getElementById('filters').q2.checked)
			url += "&q2=0";
		if (!document.getElementById('filters').q3.checked)
			url += "&q3=0";
		if (!document.getElementById('filters').q4.checked)
			url += "&q4=0";

		// Specialty Excludes
		if (document.getElementById('filters').bop.checked)
			url += "&bop=1";
		if (document.getElementById('filters').pro.checked)
			url += "&pro=1";
		if (document.getElementById('filters').pvp.checked)
			url += "&pvp=1";
		if (document.getElementById('filters').res.checked)
			url += "&res=1";
	}

	// Check if the recipe filters section even exists on page before appending url with values
	if (document.getElementById('category_c')) {
		// Recipe Source
		if (!document.getElementById('filters').s1.checked)
			url += "&s1=0";
		if (!document.getElementById('filters').s2.checked)
			url += "&s2=0";
		if (!document.getElementById('filters').s3.checked)
			url += "&s3=0";
		if (!document.getElementById('filters').s4.checked)
			url += "&s4=0";
		if (!document.getElementById('filters').s5.checked)
			url += "&s5=0";
		if (!document.getElementById('filters').s6.checked)
			url += "&s6=0";
	}

	// Submit the appended url representing the user's desired non-default filters
	location.href = url;
	return false;

	if (document.getElementById('filters').wotlk) {
		if (!document.getElementById('filters').wotlk.checked)
			url += "&wotlk=0";
	} else {
		location.href = url;
		return false;
	}

	if (!document.getElementById('filters').wotlk.checked)
		url += "&wotlk=0";
	if (document.getElementById('filters').tbc.checked)
		url += "&tbc=1";
	if (document.getElementById('filters').pre.checked)
		url += "&pre=1";

	location.href = url;
	return false;
}

// These last functions handle the tooltip display
function getMouse(e) {
	if (!e) { var e = window.event; }

	x = e.clientX;
	y = e.clientY;

	return {x:x,y:y};
}
function getSize() {
	if ( typeof( window.innerWidth ) == 'number' ) {
		width = window.innerWidth;
		height = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		width = document.documentElement.clientWidth;
		height = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		width = document.body.clientWidth;
		height = document.body.clientHeight;
	}

	return {width:width, height:height};
}
function getOffset( m, s, height, width ) {
	if ( (m.y - height - 10) < 1 ) {
		y = 10;
	} else {
		y = -height - 10;
	}

	if ( (m.x + width + 20) > s.width ) {
		x = -width;
	} else {
		x = 0;
	}

	return {x:x,y:y};
}
function displayTooltip( event, tag ) {
	document.getElementById(tag).style.display = "block";

	moveTooltip(event, tag);

}
function moveTooltip( event, tag ) {
	var m = getMouse(event);
	var s = getSize();

	var o = getOffset(m, s, document.getElementById(tag).clientHeight, document.getElementById(tag).clientWidth);

	document.getElementById(tag).style.left = m.x + o.x + document.body.scrollLeft + document.documentElement.scrollLeft + "px";
	document.getElementById(tag).style.top = m.y + o.y + document.body.scrollTop + document.documentElement.scrollTop + "px";
}
function hideTooltip( tag ) {
	document.getElementById(tag).style.display = "none";	
}

function EditRecipe( recipe_id ) {
	var ajax; 

	try {
		// Firefox, Opera 8.0+, Safari
		ajax=new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try {
			ajax=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				ajax=new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}

	ajax.ele = 'r_' + recipe_id;

	ajax.old = document.getElementById(ajax.ele).innerHTML;
	document.getElementById(ajax.ele).innerHTML = '<span class="progress">Updating list...</span>';

	ajax.onreadystatechange=function()
	{
		if (ajax.readyState==4)
		{
			var inner = ajax.responseText;
			
			// If error is present, then display it in alert box and restore previous inner text for recipe
			if (inner.search('Error:') != -1) {
				alert(inner);
				document.getElementById(ajax.ele).innerHTML = ajax.old;
			} else {
				document.getElementById(ajax.ele).innerHTML = inner;
			}
		}
		delete this;
	}

	ajax.open("GET", "edit.php?recipe="+recipe_id, true);
	ajax.send(null);
}

function CheckFile() {
	if (!document.getElementById('upload').userfile.value.length) {
		alert('Please browse for the specified file before uploading.');
		return false;
	}

	return true;
}