//Global variables
imageLinkArray = new Array();
imageArray = new Array();
wordArray = new Array();
var requestCount;
var progressEnd = 0;
var progressNow = 0;
nextImage = new Image();
nextImage.src = 'images/next.jpg';
prevImage = new Image();
prevImage.src = 'images/prev.jpg';
reloadImage = new Image();
reloadImage.src = 'images/reload.jpg';
loadingImage = new Image();
loadingImage.src = 'images/load.gif';

function prepareDigiPoem(xmlPoem, stanzaId, status) {

	var digitalPoem = document.getElementById("digipoem");
	var poemNav = document.getElementById("poemnav");
	
	//If poem holder already exists remove it
	if (document.getElementById('poemHolder')) {
		var poemHolder = document.getElementById('poemHolder');
		digitalPoem.removeChild(poemHolder);
	}
	
	//FOR YAHOO TERM EXTRACTION
	//if(!document.getElementById("yteContent")){
	//prepareYtePoem(xmlPoem);
	//}
	
	if (status==1 || status==4) {
		prepareOriginalPoem(xmlPoem);
	}
	
	prepareFlickrPoem(xmlPoem, stanzaId, status);
}

function populatePoem (photoNum, photoTotal, idWord, requestCount, word, firstLoad) {
	
	//Remove next image link		
	try {
		var oldnextImage = document.getElementById("next" + idWord);
		oldnextImage.parentNode.removeChild(oldnextImage); 
	}
	catch(err){
	}
	
	//Remove prev image link			
	try {
		var oldprevImage = document.getElementById("prev" + idWord);
		oldprevImage.parentNode.removeChild(oldprevImage); 	
	}
	catch(err){
	}
	
	try {
		var oldreloadImage = document.getElementById("reload" + idWord);
		oldreloadImage.parentNode.removeChild(oldreloadImage); 
	}
	catch(err){
	}
	
	//Create an image navigation holder
	var navHolder = document.createElement("span");
	navHolder.className = ("navImage");
	navHolder.setAttribute("id", ("nav"+idWord));
	
	//Create prev image link
	if (photoNum > 0) {
		var requestCountMinus = requestCount;
		var photoNumMinus = photoNum;
		var prevImage = createNav("prev",word,idWord,(--requestCountMinus),(--photoNumMinus),photoTotal);
		prevImage.onLoad = navHolder.appendChild(prevImage);
	}
	
	//Create reload image link
	var reloadImage = createNav("reload",word,idWord,null,"reload",photoTotal);
	reloadImage.onLoad = navHolder.appendChild(reloadImage);
	
	//Create next image link
	//alert(photoTotal + ',' + photoNum);
	if (photoNum < (photoTotal-1)) {
		var requestCountPlus = requestCount;
		var photoNumPlus = photoNum;
		var nextImage = createNav("next",word,idWord,(++requestCountPlus),(++photoNumPlus),photoTotal);
		nextImage.onLoad = navHolder.appendChild(nextImage);
	}
	
	//Remove loading and reload image
	var loadingId = 'loadingimg' + idWord;
	try {
		var loadingImage = document.getElementById(loadingId);
		loadingImage.parentNode.removeChild(loadingImage);
	}
	catch(err){
	}
	
	//Append navigation and images
	try {
		var newWordHolder = document.getElementById(idWord);
		newWordHolder.appendChild(navHolder);
		newWordHolder.appendChild(imageLinkArray[requestCount]);
		
		imageLinkArray[requestCount].childNodes[0].onmouseout();
		//var newImage = document.getElementById(idWord + 'image').childNodes[0];
		//newImage.onmouseout();
		if (firstLoad == true) {
			progressUpdate(0, 1);
		}
	}
	catch (err) {
	}
	
}

function changeImage (word, idWord, requestCount, photoNum, photoTotal) {
		
	var newWord = document.getElementById(idWord);
	var firstLoad = false;	
	
	//Remove old image	
	try {
		var oldImage = document.getElementById(idWord + 'image');
		oldImage.parentNode.removeChild(oldImage); 
		}
	catch (err) {
	}
	
	//Append loading image
	var loadingImage = makeLoadingImage(idWord);
	loadingImage.onLoad = newWord.appendChild(loadingImage);
	
	//Get new image
	if (photoNum == "reload"){
		requestFlickr(word, idWord);	
	}
	else {
		populatePoem(photoNum, photoTotal, idWord, requestCount, word, firstLoad);
	}
	
}
	
function createNav (ctrl,word,idWord,requestCount,photoNum, photoTotal) {
	//Create specific nav image
	var navImage = document.createElement("img");
	navImage.src = 'images/'+ctrl+'.jpg';
	navImage.setAttribute("id", ctrl+idWord);
	navImage.setAttribute('alt', ctrl+' image');
	navImage.className = (ctrl+'img');
	navImage.onclick = new Function("changeImage('"+word+"','"+idWord+"','"+requestCount+"','"+photoNum+"','"+photoTotal+"')");
	return navImage;
}

function stanzaNav (stanzaId, stanzaArray){	
	
	//Next/Prev stanza numbers
	var stanzaIdnext = (parseInt(stanzaId))+1;
	var stanzaIdprev = (parseInt(stanzaId))-1;
	
	//Remove stanza navigation or info
	function removeNav (direction, placement) {
		if (document.getElementById(direction + 'Stanza' + placement)) {
			var oldStanzaNav = document.getElementById(direction + 'Stanza' + placement);
			oldStanzaNav.parentNode.removeChild(oldStanzaNav); 
		}
	}
	
	//Create stanza navigation
	function stanzaNav (direction, placement) {
		var stanzaLink = document.createElement("a");
		stanzaLink.setAttribute("href", '#');
		stanzaLink.setAttribute("id", direction + 'Stanza' + placement);
		if (direction == "prev") {
			stanzaLink.onclick = new Function("selectStanza('"+ (stanzaIdprev) + "','2')");
		}
		else {
			stanzaLink.onclick = new Function("selectStanza('"+ (stanzaIdnext) + "','2')");
		}
		var stanzaLinkNode = document.createTextNode(direction);
		stanzaLink.appendChild(stanzaLinkNode);
		var poemNav = document.getElementById("poemnav" + placement);
		poemNav.appendChild(stanzaLink);
	}
	
	//Create stanza number info
	function stanzaNum (placement) {
		var stanzaNumber = document.createElement("span");
		var stanzaNumberNode = document.createTextNode('Stanza No.' + (stanzaIdnext) + ' of ' + stanzaArray.length);
		stanzaNumber.setAttribute("id", 'idStanza' + placement);
		stanzaNumber.appendChild(stanzaNumberNode);
		var poemNav = document.getElementById("poemnav" + placement);
		poemNav.appendChild(stanzaNumber);
	}
	
	//Remove prev buttons
	removeNav ("prev", "top");
	removeNav ("prev", "bot");	
	
	//If not the first stanza create prev buttons
	if (stanzaId !=0) {
		stanzaNav("prev", "top");
		stanzaNav("prev", "bot");
	}
	
	//Remove next buttons
	removeNav ("next", "top");
	removeNav ("next", "bot");
	
	//If not the last stanza create next buttons
	if (stanzaId != stanzaArray.length-1) {
		stanzaNav("next", "top");
		stanzaNav("next", "bot");
	}
	
	//Remove info
	removeNav ("id", "top");
	removeNav ("id", "bot");
	
	//Create info
	stanzaNum ("top");
	stanzaNum ("bot");
	
}

function selectStanza(stanzaId, status) {
		
		//Zero progress bar
		document.getElementById('progressbar').style.width  = '0px';
		document.getElementById("progressbar").innerHTML = '0%';
		
		//Update progress
		progressUpdate(0, 2);
		
		prepareDigiPoem(xmlPoem, stanzaId, status);
}

function makeLoadingImage (idWord) {
	
	//Create new loading image
	loadingImage = new Image();
	loadingImage.src = 'images/load.gif';
	loadingImage.setAttribute('id', 'loadingimg' + idWord);
	loadingImage.setAttribute('alt', 'Loading...');
	loadingImage.className = ('loadingimg');
	return loadingImage;
	
}

function progressUpdate(progressTotal, status) {
	
	//Found request total
	if (status == 0) { 
		progressEnd = progressTotal;
	}
	
	//Finished a request
	if (status == 1) { 
		++progressNow;
	}
	
	//Clear progress
	if (status == 2){
		progressNow = 0;
	}
	
	//Found total and finished a request
	if (progressEnd != 0){
		if (progressTotal == progressNow) {
		var progressPercent = 100;
		var roundedPercent =100;
		}
		else {
		var progressPercent = ((progressNow/progressEnd)*100);
		var roundedPercent = Math.round(progressPercent);
		}
		if (progressPercent <= 100){
		document.getElementById('progressbar').style.width  = (progressPercent*2)+'px';
		document.getElementById("progressbar").innerHTML = roundedPercent + '%';
		}
	}	
	
}

function xmlRequest(url, method, asyncRequest, callback) { 
	var newXMLHttpRequest = new XMLHttpRequest; 
	newXMLHttpRequest.open(method, url, asyncRequest); 
	newXMLHttpRequest.onreadystatechange = function() { 
		if (this.readyState == XMLHttpRequest.DONE) { 
			callback(newXMLHttpRequest);
		} 
	} 
	newXMLHttpRequest.send(null); 
}

function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements);
}

function prepareSend () {

	if (document.getElementById('poemHolder')) {
		var poemHolder = document.getElementById('poemHolder');
		var copyPoem = poemHolder.cloneNode(true);
		
		var sendPoem = copyPoem;
		
		var navHolders = (getElementsByClassName(sendPoem, 'span', 'navImage'));
		for (var a=0; a<navHolders.length; a++) {
			navHolders[a].parentNode.removeChild(navHolders[a]);
		}
		
		var wordHolders = (getElementsByClassName(sendPoem, 'span', 'wordholder'));
		for (var b=0; b<wordHolders.length; b++) {
			wordHolders[b].style.backgroundColor = "rgb(211,224,220)";
			wordHolders[b].style.border = "1px solid rgb(254, 0, 134)";
			wordHolders[b].style.font = "bold 1.2em Georgia, serif";
			wordHolders[b].style.color = "rgb(254, 0, 134)";
			wordHolders[b].style.padding = "5px";
			wordHolders[b].style.marginTop = "75px";
			wordHolders[b].style.marginRight = "10px";
			wordHolders[b].style.marginBottom = "10px";
			wordHolders[b].style.lineHeight = "120px";
		}
		
		var wordImgHolders = (getElementsByClassName(sendPoem, 'span', 'wordimgholder'));
		var tagWords = (getElementsByClassName(sendPoem, 'span', 'tagword'));
		for (var c=0; c<wordImgHolders.length; c++) {
			wordImgHolders[c].style.backgroundColor = "rgb(211,224,220)";
			wordImgHolders[c].style.border = "1px solid rgb(0, 97, 222)";
			wordImgHolders[c].style.font = "bold 1.2em Georgia, serif";
			wordImgHolders[c].style.color = "rgb(0, 97, 222)";
			wordImgHolders[c].style.padding = "5px";
			wordImgHolders[c].style.marginTop = "75px";
			wordImgHolders[c].style.marginRight = "10px";
			wordImgHolders[c].style.marginBottom = "20px";
			wordImgHolders[c].style.lineHeight = "120px";
			tagWords[c].style.paddingRight = "5px";
		}
		
		var paragraphs = sendPoem.getElementsByTagName('p');
		for (var d=0; d<paragraphs.length; d++) {
			paragraphs[d].style.paddingTop = "10px";
			paragraphs[d].style.paddingRight ="15px";
			paragraphs[d].style.paddingLeft ="15px";
			paragraphs[d].style.backgroundColor = "white";
		}
		
		var images = sendPoem.getElementsByTagName('img');
		for (var e=0; e<images.length; e++) {
			images[e].className = ("flickrimg");
			images[e].width = "75";
			images[e].height = "75";
			images[e].style.backgroundColor = "rgb(211,224,220)";
			images[e].style.border = "1px solid rgb(132,149,139)";
			images[e].style.padding = "5px";
			images[e].style.marginTop = "20px";
		}
		
		openSend('sendpoem.html', '_blank', sendPoem.innerHTML);
	}
}


function openSend(url, name, sendPoem)
{
window.sendPoem = sendPoem;
var newwindow=window.open(url, name, 'toolbar=0,scrollbars=yes,location=0,statusbar=0,menubar=0,resizable=yes,width=800,height=500,left=50,top=50,titlebar=yes');
if (window.focus) {newwindow.focus()}
}