var MinimumNumberOfRowsInTable = 21;

/*var isOddRow;
var tableRowsContent;
var linkStyle;
var numberOfRowsInTable;*/

function TracksTableGenerator(aLinkStyle)
{
	this.idOddRow = false;
	this.tableRowsContent = "";
	this.numberOfRowsInTable = 0;
	this.linkStyle=aLinkStyle;

	this.incrementNumberOfRowsInTable = incrementNumberOfRowsInTable;
	this.getNumberOfRowsInTable = getNumberOfRowsInTable;
	this.getArrow = getArrow;
	this.getAmazonSearchLink = getAmazonSearchLink;
	this.getGoogleSearchLink = getGoogleSearchLink;
	this.getITMSSearchLink = getITMSSearchLink;
	this.getLinkStyle = getLinkStyle;
	this.getIsOddRow = getIsOddRow;
	this.toggleOddRowState = toggleOddRowState;
	this.getTableRowsContent = getTableRowsContent;
	this.setTableRowsContent = setTableRowsContent;
	this.getHTMLContent = getHTMLContent;
	this.getTableHeader = getTableHeader;
	this.getTableFooter = getTableFooter;
	this.addSongsToTable = addSongsToTable;
	this.getEmptyRows = getEmptyRows;
	this.getLinkForSong = getLinkForSong;
	this.getLinkForArtist = getLinkForArtist;
	this.getLinkForAlbum = getLinkForAlbum;
	this.setLinkStyle = setLinkStyle;
}

function incrementNumberOfRowsInTable()
{
	this.numberOfRowsInTable++;
}

function getNumberOfRowsInTable()
{
	return this.numberOfRowsInTable;
}

function getArrow()
{
	return "<span class=\"arrow\"><img  alt=\"arrow\" src=\"images/arrow.gif\" \></span>"; 
}

function getAmazonSearchLink()
{
	return "http://www.amazon.com/exec/obidos/redirect?link_code=ur2&camp=1789&tag=ae-20&creative=9325&path=external-search%3Fsearch-type=ss%26index=music%26keyword=";
}

function getGoogleSearchLink()
{
	return "http://www.google.com/search?q=";
}

function getITMSSearchLink()
{
	return "itms://phobos.apple.com/WebObjects/MZSearch.woa/wa/com.apple.jingle.search.DirectAction/search?term=";
}

function setLinkStyle(aLinkStyle)
{
	this.linkStyle = aLinkStyle;
}

function getLinkStyle()
{
	return this.linkStyle;
}

function getIsOddRow()
{
	return this.isOddRow;
}

function toggleOddRowState()
{
	this.isOddRow = !this.isOddRow;
}

function getTableRowsContent()
{
	return this.tableRowsContent;
}

function setTableRowsContent(content)
{
	this.tableRowsContent = content;
}

function getHTMLContent()
{
	var contentToReturn = this.getTableHeader() + this.getTableRowsContent();

	/* we need to add empty rows if we haven't hit our threshold */
	if(this.getNumberOfRowsInTable() < MinimumNumberOfRowsInTable) {
		contentToReturn += this.getEmptyRows(MinimumNumberOfRowsInTable - this.getNumberOfRowsInTable());
	}

	return contentToReturn + this.getTableFooter();
}

/* the header for the song content */
function getTableHeader()
{
	var header;
	header = "<table class=\"header\">\n";
	header += "<tr id=\"header\"><td id=\"spacer\"></td><td id=\"name\">Name</td><td id=\"artist\">Artist</td><td id=\"album\">Album</td><td id=\"time\">Total Time</td><td id=\"track_no\">Track #</td></tr></table>\n";
	header += "<div class=\"songTable\"><table class=\"songs\">\n";
	header += "<COL id=\"colSpacer\"><col id=\"col1\"><COL id=\"col2\"><COL id=\"col3\"><COL id=\"col4\"><COL id=\"col5\"><COL id=\"col6\"><COL id=\"col7\"><COL id=\"col8\">\n";
	return header;
}

function getTableFooter()
{
	return "</div></table>";
}


function addSongsToTable(songs)
{
	var rowContent = "";
	var rowsWithContent = 0;

	for(var i=0; i<songs.length; i++) {
		this.incrementNumberOfRowsInTable();
		var track_time = getElementTextNS("", "total_time", songs[i], 0);
		var min = Math.floor(track_time / 1000 / 60);
		var sec = Math.round(((track_time / 1000 / 60) - min) * 60);
		var thisArtist = getElementTextNS("", "artist", songs[i], 0);
		
		try {
			var name = getElementTextNS("", "name", songs[i], 0);
		} catch(e)	{ var name = "Unknown";}

		try {
			var artist = getElementTextNS("", "artist", songs[i], 0);
		} catch(e)	{  var artist = "Unknown"; }

		try {
			var album = getElementTextNS("", "album", songs[i], 0);
		} catch(e)	{ var album = "Unknown"; }

		try {
			var track_number = getElementTextNS("", "track_number", songs[i], 0);
		} catch(e) {  var track_number = ""; }

		if(sec < 10) // for a single digit like '1', we display it as '01'
			sec = sec + "0";

		track_time = min + ":" + sec;

		if(this.getIsOddRow())  {
			rowContent += "<tr id=\"odd\">"; 
		}
		else  {
			rowContent += "<tr id=\"even\">"; 
		}

		this.toggleOddRowState();
		rowContent += "<td></td>";
		rowContent += "<td> " + this.getLinkForSong(name, artist) +   " </td>";
		rowContent += "<td>" + this.getLinkForArtist(artist)  + "</td>";
		rowContent += "<td>" + this.getLinkForAlbum(artist, album) + "</td>";
		rowContent += "<td>" + track_time + "</td>";
		rowContent += "<td>" + track_number + "</td>";
		rowContent += "</tr>\n";
		rowsWithContent += 1;
	}

	this.setTableRowsContent(this.getTableRowsContent() + rowContent);
}

function getEmptyRows(count)
{
	var rows = "";
	for(var i = 0; i< count; i++) {
		if(this.getIsOddRow()) {
			rows += "<tr id=\"odd\"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>";
		} else {
			rows += "<tr id=\"even\"><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>";
		}
		this.toggleOddRowState();
	}
	return rows;
}

function getLinkForSong(name, artist)
{
	if (this.getLinkStyle() == "iTMS") {
		return name + "</td><td class=\"arrow\"><a href=\""+ this.getITMSSearchLink() + artist + " " + name + "\">" + this.getArrow() + "</a>";
	} else if (this.getLinkStyle() == "Amazon") { 
		return name + "</td><td class=\"arrow\"><a target=\"amazon\" href=\"" + this.getAmazonSearchLink() + artist + " " + name + "\">" + this.getArrow() + "</a>";
	} else if (this.getLinkStyle() == "Google") { 
		return name + "</td><td class=\"arrow\"><a target=\"google\" href=\"" + this.getGoogleSearchLink() + artist + "+" + name + "\">" + this.getArrow() + "</a>";
	} 
	
	return name + "</td><td>"; 
}

function getLinkForArtist(artist) 
{
	if (this.getLinkStyle() == "iTMS") {
		return artist + "</td><td class=\"arrow\"><a href=\"" + this.getITMSSearchLink() + artist + "\">" + this.getArrow() + "</a>";
	} else if (this.getLinkStyle() == "Amazon") {
		return artist + "</td><td class=\"arrow\"><a target=\"amazon\" href=\"" + this.getAmazonSearchLink() + artist +  "\">" + this.getArrow() + "</a>";
	} else if (this.getLinkStyle() == "Google") { 
		return artist + "</td><td class=\"arrow\"><a target=\"google\" href=\"" + this.getGoogleSearchLink() + artist + "\">" + this.getArrow() + "</a>";
	}

	return artist + "</td><td>"; 
}

function getLinkForAlbum(artist, album) 
{
	if (this.getLinkStyle() == "iTMS") {
		return album + "</td><td class=\"arrow\"><a href=\"" + this.getITMSSearchLink() + artist + " " + album + "\">" + this.getArrow() + "</a>";
	} else if (this.getLinkStyle() == "Amazon") {
		return album + "</td><td class=\"arrow\"><a target=\"amazon\" href=\"" + this.getAmazonSearchLink() + artist +  " " + album + "\">" + this.getArrow() + "</a>";
	} else if (this.getLinkStyle() == "Google") { 
		return album + "</td><td class=\"arrow\"><a target=\"google\" href=\"" + this.getGoogleSearchLink() + artist + "+" + album + "\">" + this.getArrow() + "</a>";
	}

	// otherwise...
	return  album + "</td><td>";
}

