/* GLOBAL VARS */
var server = location.host;
var deleteOn = new Image(16, 16);
deleteOn.src = 'http://' + server + '/images/delete_on.png';
var deleteOff = new Image(16, 16);
deleteOff.src = 'http://' + server + '/images/delete_off.png';
var addOn = new Image(14, 15);
addOn.src = 'http://' + server + '/images/add.png';
var addOff = new Image(14, 15);
addOff.src = 'http://' + server + '/images/add_off.png';
/* END GLOBALS */

function swapAddImg(id)
{
	var addImg = document.getElementById(id);
	addImg.src = addOn.src;
	addImg.style.cursor = 'pointer';
}

function getTeams(callingSelectID, returnSelectID, loadingImgID)
{
	var conf = document.getElementById(callingSelectID);
	var selected = conf.value;
	var params = 'conferenceID=' + selected + '&returnSelectID=' + returnSelectID + '&loadingImgID=' + loadingImgID;
	var url = 'http://' + server + '/getteams/?' + params
	
	http("GET" , url , teamsCallBack);
	document.getElementById(loadingImgID).style.visibility = 'visible';
	
	var addImg = document.getElementById('addFavBtn');
	if (addImg)
	{
		addImg.src = addOn.src;
		addImg.style.cursor = 'pointer';
	}
}

function teamsCallBack(obj)
{
	var selectBox = document.getElementById(obj.returnSelectID);
	removeOptions(selectBox);
	var teams = obj.teams;
	selectBox.options[i] = new Option('--------', '');
	for (var i = 0; i < teams.length; i++)
	{
		selectBox.options[i+1] = new Option(teams[i]['teamName'], teams[i]['teamID']);
	}
	
	document.getElementById(obj.loadingImgID).style.visibility = 'hidden';
}

function removeOptions(optionMenu)
{
	optionMenu.options.length = 0;
}
	
function addtoFavorites()
{
	var favoritesTeams = document.getElementById('favoritesTeams');
	var teamID = favoritesTeams.value;
	
	if (teamID != '')
	{
		// this is here twice to prevent double entry
		var teams = extractValues(document.getElementById('favorites'));
		var teamExists = testForTeam(teamID, teams);
		
		if (!teamExists)
		{
			var favoritesMsg = document.getElementById('favoritesMsg');
			favoritesMsg.style.display = 'none';
			favoritesMsg.style.visibility = 'hidden';
			var params = 'teamID=' + teamID;
			var url = 'http://' + server + '/getfavorites/?' + params
			http("GET" , url , favoritesCallBack);
			
			document.getElementById('loading').style.visibility = 'visible';
		}
	}
}

function removeFromFavorites(rowID)
{
	var favorites = document.getElementById('favorites');
	var teamID = rowID.substring(rowID.indexOf('_') + 1, rowID.length);
	
	for (var i = 0; i < favorites.rows.length; i++)
	{
		if (favorites.rows[i].id == rowID)
		{
			favorites.deleteRow(i);
			deleteFromCookie(teamID);
		}
	}
}

function deleteFromCookie(teamID)
{
	var cookies = parseCookies();
	deleteCookie('favorites');
	if ('favorites' in cookies)
	{
		//alert(cookies['favorites']);
		var teamIDs = cookies['favorites'].split('|');
		for (var i = 0; i < teamIDs.length; i++)
		{
			if (teamID == teamIDs[i])
			{
				teamIDs.splice(i, 1);
			}
		}
		//alert(teamIDs);
		setCookie('favorites', teamIDs.join('|'));
	}
}

function testForTeam(teamID, teams)
{
	for (var i = 0; i < teams.length; i++)
	{
		if (teams[i]['teamID'] == teamID)
		{
			alert("You already have that team in your favorites");
			return true;
		}
	}
	return false;
}

function favoritesCallBack(obj)
{
	var favorites = document.getElementById('favorites');	
	var data = extractValues(favorites);
	data.push(obj);
	deleteRows(favorites);
	addHeader(favorites);
	data.sort(sortOrder);
	for (var i = 0; i < data.length; i++)
	{
		insertRow(favorites, data[i]);
	}
	
	document.getElementById('loading').style.visibility = 'hidden';
	
	var addImg = document.getElementById('addFavBtn');
	addImg.src = addOff.src;
	addImg.style.cursor = 'default';
	
	var cookies = parseCookies();
	
	deleteCookie('favorites');
	if ('favorites' in cookies)
	{
		setCookie('favorites', cookies['favorites'], obj['teamID']);
	}
	else
	{
		setCookie('favorites', '', obj['teamID']);
	}
}

function setCookie(name, values, newValue)
{
	if (values.length == 0)
	{
		values += newValue;
	}
	else
	{
		if (newValue != undefined)
		{
			values += '|' + newValue;
		}
	}
	
	// remove the subdomain so the cookie is generic to the tld
	// then remove the port so the cookie can be set correctly on dev
	var domain = server.replace('www.', '').replace(':8000', '');

	var expiration = new Date();
	// set to expire in 10 years, or in other words, never
	expiration.setYear(expiration.getFullYear() + 10);
	document.cookie = name + '=' + values + '; domain=' + domain + '; path=/; expires=' + expiration.toGMTString();
}

function deleteCookie(name)
{
	document.cookie = name + '=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT';
	document.cookie = name + '; expires=Thu, 01-Jan-1970 00:00:01 GMT';
}

function createTeamLink(obj)
{
	var anchor = document.createElement('a');
	anchor.setAttribute('href', 'http://' + server + '/teams/' + obj['teamID'] + '\/');
	if (obj['shortName'])
	{
		anchor.innerHTML = obj['shortName'];
	}
	else
	{
		anchor.innerHTML = obj['teamName'];
	}
	
	return anchor;
}

function createLast10Img(obj)
{
	var image = document.createElement('img');
	if (obj['imgURL'].indexOf('http') < 0)
	{
		image.setAttribute('src', 'http://' + server + '/' + obj['imgURL']);
	}
	else
	{
		image.setAttribute('src', obj['imgURL']);
	}
	//image.setAttribute('height', 10);
	//image.setAttribute('width', 49);
	
	return image;
}

function createTextNode(text)
{
	return document.createTextNode(text);	
}

function insertRow(favorites, obj)
{
	favorites.insertRow(-1);
	var index = favorites.rows.length - 1;
	
	favorites.rows[index].id = 'favRow_' + obj['teamID'];
	
	favorites.rows[index].insertCell(-1);
	favorites.rows[index].cells[0].appendChild(createTeamLink(obj));
	favorites.rows[index].cells[0].className = 'favoritesCell';
	
	favorites.rows[index].insertCell(-1);
	favorites.rows[index].cells[1].appendChild(createTextNode(obj['tsrRank']));
	favorites.rows[index].cells[1].setAttribute('align', 'right');
	favorites.rows[index].cells[1].className = 'favoritesCell';
	
	favorites.rows[index].insertCell(-1);
	var tsr = parseFloat(obj['tsr']);
	favorites.rows[index].cells[2].appendChild(createTextNode(tsr.toFixed(4)));
	favorites.rows[index].cells[2].setAttribute('align', 'right');
	favorites.rows[index].cells[2].className = 'favoritesCell';
	
	favorites.rows[index].insertCell(-1);
	favorites.rows[index].cells[3].appendChild(createLast10Img(obj));
	favorites.rows[index].cells[3].setAttribute('width', 40);
	favorites.rows[index].cells[3].className = 'favoritesCell';
	
	var deleteBtn = document.createElement('img');
	deleteBtn.src = deleteOff.src;
	deleteBtn.style.verticalAlign = 'middle';
		
	// for firefox
	if (document.addEventListener)
	{
		deleteBtn.addEventListener('click', function() { removeFromFavorites('favRow_' + obj['teamID']) }, false);
		deleteBtn.addEventListener('mouseover', function() { deleteBtn.style.cursor='pointer'; deleteBtn.src = deleteOn.src; }, false);
		deleteBtn.addEventListener('mouseout', function() { deleteBtn.style.cursor='normal'; deleteBtn.src = deleteOff.src; }, false);
	}
	// for IE
	if (document.attachEvent)
	{
		// from what I understand, using anonymous functions this way can cause a memory leak in IE
		// hopefully nobody will use this so much that it will ever be a problem. cross your fingers!
		deleteBtn.attachEvent('onclick', function() { removeFromFavorites('favRow_' + obj['teamID']) });
		deleteBtn.attachEvent('onmouseover', function() { deleteBtn.style.cursor='pointer'; deleteBtn.src = deleteOn.src; });
		deleteBtn.attachEvent('onmouseout', function() { deleteBtn.style.cursor='normal'; deleteBtn.src = deleteOff.src; });
	}
	favorites.rows[index].insertCell(-1);
	favorites.rows[index].cells[4].appendChild(deleteBtn);
	favorites.rows[index].cells[4].setAttribute('width', 16);
	favorites.rows[index].cells[4].setAttribute('align', 'center');
	favorites.rows[index].cells[4].className = 'favoritesCell';
	favorites.rows[index].cells[4].style.padding = '1px';
}

function deleteHeader(favorites)
{
	if (document.getElementById('favHeader'))
	{
		var deletePoint = document.getElementById('favHeader');
		favorites.deleteRow(0);
	}
}
function addHeader(favorites)
{
	// to change headers or the order, do it here.
	var headers = ['Team','Rank','Rating','Last 10', ''];
	favorites.insertRow(0);
	var headerRow = favorites.rows[0];
	headerRow.setAttribute('id', 'favHeader');
	
	for (var i = 0; i < headers.length; i++)
	{
		headerRow.appendChild(document.createElement('th'));
		headerRow.lastChild.setAttribute('align', 'center');
		headerRow.lastChild.appendChild(document.createTextNode(headers[i]));
	}
}

function extractValues(favorites)
{
	var rows = favorites.rows;
	var tableData = new Array();
	var teamName = '';
	var teamID = 0;
	var tsr = 0.0;
	var tsrRank = 0;
	var imgURL = '';
	var node = null;
	
	for (var i = 1; i < rows.length; i++)
	{
		var cellData = new Object();
		for (var j = 0; j < rows[i].cells.length; j++)
		{
			for (var m = 0; m < rows[i].cells[j].childNodes.length; m++)
			{
				//alert('i: ' + i + '\nj: ' + j + '\nm: ' + m);
				node = rows[i].cells[j].childNodes[m];
				
				if (node.nodeName == 'A')
				{
					teamName = node.innerHTML;
					tokens = node.getAttribute('href').split('/');
					teamID = tokens[tokens.length - 2];
				}
					
				else if (node.nodeType == 3 && (parseInt(node.nodeValue) != parseFloat(node.nodeValue)))
				{
					tsr = parseFloat(node.nodeValue);
				}
				
				else if (node.nodeType == 3 && (parseInt(node.nodeValue) == parseFloat(node.nodeValue)))
				{
					tsrRank = parseInt(node.nodeValue);
				}
				
				else if (node.nodeName == 'IMG')
				{
					if (node.getAttribute('src').indexOf('delete') < 0)
					{
						imgURL = node.getAttribute('src');
					}
				}
			}
		}
		cellData['teamName'] = teamName;
		cellData['teamID'] = teamID;
		cellData['tsr'] = tsr;
		cellData['tsrRank'] = tsrRank;
		cellData['imgURL'] = imgURL;
		tableData.push(cellData);
	}	
	return tableData;
}

function sortOrder(a, b)
{
	if (a['teamName'] > b['teamName'])
		return 1;
	else if (a['teamName'] < b['teamName'])
		return -1;
	else
		return 0;
}

function deleteRows(favorites)
{
	if (favorites.hasChildNodes())
	{
		while (favorites.hasChildNodes())
		{
			//alert(nodeStatus(favorites.lastChild));
			favorites.removeChild(favorites.lastChild);
		}
	}
}

function nodeStatus(node)
{
	var msg = '';
	msg += "nodeName: " + node.nodeName + '\n';
	msg += "nodeType: " + node.nodeType + '\n';
	msg += "nodeValue: " + node.nodeValue + '\n\n';
	return msg;
}

function parseCookies()
{
	var cookies = new Object();
	
	var name, value;
	var beginning, middle, end;
	
	for (name in cookies)
	{
		// if there are any entries currently, get rid of them
		cookies = new Object;
		break;
	}
	
	beginning = 0;		// start at the beginning of the cookie string
	while (beginning < document.cookie.length)
	{
		middle = document.cookie.indexOf('=', beginning);		// find next '='
		end = document.cookie.indexOf(';', beginning);			// find next ';'
		
		if (end == -1)
			end = document.cookie.length;
		
		if ((middle > end) || (middle == -1))
		{
			// if the cookie has no value ...
			name = document.cookie.substring(beginning, end);
			value = '';
		}
		else
		{
			// extract its value
			name = document.cookie.substring(beginning, middle);
			value = document.cookie.substring(middle + 1, end);
		}
		
		cookies[name] = value;
		beginning = end + 2;
	}
	return cookies;
}

function loadTeamsFromCookies()
{
	var cookies = parseCookies()
	alert(cookies['favorites'].split('|'));
}