/* coding: utf-8 */
 
var lock = false ;

//xmlHTTPRequest function
function getXHR() {
	if (document.all) {
		//Internet Explorer
		var xhrObj = null ;
		try {
			xhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
		} catch(e) {
			xhrObj = new XMLHttpRequest() ;
		}
	} else {
		//Mozi
		var xhrObj = new XMLHttpRequest() ;
	}
	return xhrObj ;
}


function sendData(xhr, data, page) {
	//Ouverture du fichier en methode POST
	xhr.open("POST", page) ;
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded') ;
        xhr.send(data) ;
}



//gestion du form pour cacher/montrer une instance de carte aux autres joueurs pour echange
function setVisible(id, action, max) {
	var v = document.getElementById("visible_" + id) ;
	
	if (((action == "sum") && (parseInt(v.innerHTML) < max)) || ((action == "sub") && (parseInt(v.innerHTML) > 0))) {
		var xhr = getXHR() ;
		xhr.onreadystatechange = function() {
			if (xhr.readyState == 4 && xhr.status == 200)
				v.innerHTML = xhr.responseText ;
		}    
		sendData(xhr, 'card=' + id + "&action=" + action, '/card/publishIt') ;
	}
}


function moveEffect() {

}


//gestion du form pour cacher/montrer toutes les instances d'une carte aux autres joueurs
function setAllVisible(formId, state, id) {
	if (id != '') {
		var form = document.getElementById(formId) ;
		if (state == "visible") {
			form.action = "/card/setVisible" ;
		}
		if (state == "invisible") {
			form.action = "/card/setInvisible" ;
		}
		var cardId = document.getElementById("cardId") ;
		cardId.value = id ;
		form.submit() ;
	}
}


function addOneInst(cardId, sameMax, type, cardDisp) {
	if (lock)
		return ;
	
	var nbT = document.getElementById("nbT_" + cardId) ;
	var nbTl = document.getElementById("nbTl_" + cardId) ;
	var intnb = 1
	if (nbT != null)
		intnb = intnb + parseInt(nbT.innerHTML);
	if (nbTl != null)
		intnb = intnb + parseInt(nbTl.innerHTML) ;
	var msg = document.getElementById('msg') ;
	if (intnb >= sameMax) {
		if (!cardDisp) {
			var c = document.getElementById("card" + cardId) ;
			hideLine(c, cardId) ;
		}
		if (intnb > sameMax)
			return ;
	} 
	
	var nb = document.getElementById("nb_" + cardId) ;
	if (nb == null)
		return ;
	var intnbPool = parseInt(nb.innerHTML) - 1 ;
	if (intnbPool < 0)
		return ;
	var nbC = document.getElementById("nbCards") ;
	var bonusCards = document.getElementById("temp") ;
	var nbCards = getNbBonusCards(bonusCards.innerHTML) ;
	nbCards += 1 ;
	if ((nbCards > 100) || (parseInt(nbC.innerHTML) >=100)) {
		alert("Impossible d'ajouter davantage de cartes : un pack ne peut pas contenir plus de 100 cartes.") ;
		return ;
	}
	lock = true ;
	var cards = new Array() ;
	if (bonusCards.innerHTML != "")
		cards = bonusCards.innerHTML.split("|") ;
	
	
	setLiveStats(cardId, true, type) ;
	
	//modif de la liste à droite
	var found = false ;
	var nbc = "" ;
	var viewBox = document.getElementById("view") ;
	if (viewBox == null) {
		lock = false ;
		return ;
	}
	var view = viewBox.value ;
	for(var i = 0; i < cards.length; i++) {
		var infos = cards[i].split("#") ;
		if (infos[1] == cardId) {
			infos[0] = parseInt(infos[0]) + 1 ;
			cards[i] = infos[0]+ "#" + infos[1]  ;
			found = true ;
			nbT.innerHTML = infos[0] ;
		}
		
		if (nbc != "")
			nbc = nbc + "|" ;
		nbc = nbc + cards[i] ;
		
	}
	
	if (!found) {
		var target = document.getElementById("listCards") ;
		var name = document.getElementById("name" + cardId).innerHTML ;
		var n = "1#" + cardId ;
		cards[cards.length] = n ;
		if (nbCards == 1) 
			target.innerHTML = "<ul>" + getLineTemp(cardId, 1, name, view, type) + "</ul>" ;
		else {
			var lTarget = target.innerHTML.substring(0, target.innerHTML.length - 5) ;
			target.innerHTML = lTarget + getLineTemp(cardId, 1, name, view, type) + "</ul>" ;
		}
		if (nbc != "")
			nbc = nbc + "|" ;
		nbc = nbc + n ;
		
	}
	
	bonusCards.innerHTML = nbc ;
	nb.innerHTML = intnbPool ;
	
	if (intnbPool > 0) {
		var ex = document.getElementById("ex_" + cardId) ;
		if (ex != null) {
			if (intnbPool > 1) 
				ex.innerHTML = "<img class=\"icon\" src=\"http://data.dinocard.net/gfx/font/cardNb/x.gif\" alt=\"xxx\" />" + numberToImage("http://data.dinocard.net/gfx/font/cardNb", intnbPool) ;
			else
				ex.innerHTML = "" ;
		}
	} else {
		var c = document.getElementById("card" + cardId) ;
		if (!cardDisp) {
			hideLine(c ,cardId) ;
		} else
			c.style.display = "none" ;
	}
	
	nbC.innerHTML = parseInt(nbC.innerHTML) + 1 ;
	lock = false ;
}


function removeOneTemp(cardId, cardDisp, type) {
	if (lock) 
		return ;
	var nb = document.getElementById("nbT_" + cardId) ;
	var intnb = parseInt(nb.innerHTML) - 1;
	if ( intnb < 0 ) return ; 

	var bonusCards = document.getElementById("temp") ;
	var nbCards = getNbBonusCards(bonusCards.innerHTML) ;
	if ( nbCards <= 0) {
		alert("Aucune carte à retirer") ;
		return ;
	}
	lock = true ;
	var cards = new Array() ;
	if (bonusCards.innerHTML != "")
		cards = bonusCards.innerHTML.split("|") ;
	nbCards -= 1 ;
	
	setLiveStats(cardId, false, type) ;
	//modif de la liste à droite
	var nbc = "" ;
	var view = document.getElementById("view").value ;
	var target = document.getElementById("listCards") ;
	for(var i = 0; i < cards.length; i++) {
		var infos = cards[i].split("#") ;
		if (infos[1] == cardId) {
			infos[0] = parseInt(infos[0]) - 1 ;
			
			if (infos[0] > 0) {
				nb.innerHTML = infos[0] ;
				cards[i] = infos[0]+ "#" + infos[1] ;
				if (nbc != "")
					nbc = nbc + "|" ;
				nbc = nbc + cards[i] ;				
			} else
				deleteInList(target, cardId) ;
		} else {
			if (nbc != "")
					nbc = nbc + "|" ;
				nbc = nbc + cards[i] ;
		}
	}
	
	if (nbc == "")
		target.innerHTML = "<ul><li><i>Aucune carte ajoutée.</i></li></ul>" ;
	
	bonusCards.innerHTML = nbc ;
	
	var nbPool = document.getElementById("nb_" + cardId) ;
	if (nbPool != null) {
		var intnbPool = parseInt(nbPool.innerHTML) + 1;
		nbPool.innerHTML = intnbPool ;
		
		if (intnbPool > 1) {
			var ex = document.getElementById("ex_" + cardId) ;
			if (ex != null)
				ex.innerHTML = "<img class=\"icon\" src=\"http://data.dinocard.net/gfx/font/cardNb/x.gif\" alt=\"xxx\" />" + numberToImage("http://data.dinocard.net/gfx/font/cardNb", intnbPool) ;
		}
		if  ((!cardDisp) || (intnbPool == 1)) {
			//on vire le display:none de la carte
			var c = document.getElementById("card" + cardId) ;
			if (!cardDisp) {
				showLine(c, cardId) ;
			} else
				c.style.display = "inline" ; 
		} 
	}
	
	var nbC = document.getElementById("nbCards") ;
	nbC.innerHTML = parseInt(nbC.innerHTML) - 1 ;
	lock = false; 	
}



function addBonusCard(cardId, max, type, cardDisp) {
	if (lock)
		return ;

	var nb = document.getElementById("nb_" + cardId) ;
	var intnbPool = parseInt(nb.innerHTML) - 1 ;
	if (intnbPool < 0)
		return ;

	var nbC = document.getElementById("nbCards") ;
	var bonusCards = document.getElementById("temp") ;
	var nbCards = getNbBonusCards(bonusCards.innerHTML) ;
	if ( nbCards >= max) {
		if ((parseInt(nbC.innerHTML) == 0) && (nbCards > 0)) {
			bonusCards.innerHTML = "" ;
			nbCards = 0 ;
		} else {
			alert("Vous ne pouvez pas ajouter plus de cartes à ce pack avant un combat.") ;
			return ;
		}
	}
	lock = true ;
	var cards = new Array() ;
	if (bonusCards.innerHTML != "")
		cards = bonusCards.innerHTML.split("|") ;
	nbCards += 1 ;
	
	setLiveStats(cardId, true, type) ;
	
	//modif de la liste à droite
	var found = false ;
	var nbc = "" ;
	var viewBox = document.getElementById("view") ;
	if (viewBox == null) {
		lock = false ;
		return ;
	}
		var view = viewBox.value ;

	for(var i = 0; i < cards.length; i++) {
		var infos = cards[i].split("#") ;
		if (infos[1] == cardId) {
			infos[0] = parseInt(infos[0]) + 1 ;
			cards[i] = infos[0]+ "#" + infos[1] ;
			found = true ;
			var nbT = document.getElementById("nbT_" + cardId) ;
			nbT.innerHTML = infos[0] ;
		}
		
		if (nbc != "")
			nbc = nbc + "|" ;
		nbc = nbc + cards[i] ;
		
	}
	
	if (!found) {
		var target = document.getElementById("listCards") ;
		var name = document.getElementById("name" + cardId).innerHTML ;
		var n = "1#" + cardId ;
		cards[cards.length] = n ;
		if (nbCards == 1)
			target.innerHTML = "<ul>" + getLineBonusTemp(cardId, 1, name, view, type) + "</ul>" ;
		else {
			var lTarget = target.innerHTML.substring(0, target.innerHTML.length - 5) ;
			target.innerHTML = lTarget + getLineBonusTemp(cardId, 1, name, view, type) + "</ul>" ;
		}
		if (nbc != "")
			nbc = nbc + "|" ;
		nbc = nbc + n ;
		
	}
	
	bonusCards.innerHTML = nbc ;
	
	if (intnbPool > 0) {
		var ex = document.getElementById("ex_" + cardId) ;
		if (ex != null) {
			if (intnbPool > 1) 
				ex.innerHTML = "<img class=\"icon\" src=\"http://data.dinocard.net/gfx/font/cardNb/x.gif\" alt=\"xxx\" />" + numberToImage("http://data.dinocard.net/gfx/font/cardNb", intnbPool) ;
			else
				ex.innerHTML = "" ;
		}
	} else {
		//on vire le display:inline de la carte
		c = document.getElementById("card" + cardId) ;
		if (!cardDisp) {
			hideLine(c, cardId) ;
		} else
			c.style.display = "none" ;
	}
	
	nbC.innerHTML = nbCards ;
	nb.innerHTML = intnbPool ;
	lock = false ;
}


function removeBonusCard(cardId, cardDisp, type) {
	if (lock) 
		return ;
	var nb = document.getElementById("nbT_" + cardId) ;
	var intnb = parseInt(nb.innerHTML) - 1;
	if ( intnb < 0 ) return ; 

	var bonusCards = document.getElementById("temp") ;
	var nbCards = getNbBonusCards(bonusCards.innerHTML) ;
	if ( nbCards <= 0) {
		alert("Aucune carte bonus à retirer") ;
		return ;
	}
	lock = true ;
	var cards = new Array() ;
	if (bonusCards.innerHTML != "")
		cards = bonusCards.innerHTML.split("|") ;
	nbCards -= 1 ;
	
	setLiveStats(cardId, false, type) ;
	
	//modif de la liste à droite
	var nbc = "" ;
	var view = document.getElementById("view").value ;
	var target = document.getElementById("listCards") ;
	for(var i = 0; i < cards.length; i++) {
		var infos = cards[i].split("#") ;
		if (infos[1] == cardId) {
			infos[0] = parseInt(infos[0]) - 1 ;
			if (infos[0] > 0) {
				nb.innerHTML = infos[0] ;
				cards[i] = infos[0]+ "#" + infos[1]  ;
				if (nbc != "")
					nbc = nbc + "|" ;
				nbc = nbc + cards[i] ;
			} else 
				deleteInList(target, cardId) ;
		} else {
			if (nbc != "")
					nbc = nbc + "|" ;
				nbc = nbc + cards[i] ;
		}
		
	}
	
	if (nbc == "")
		target.innerHTML = "<ul><li><i>Aucune carte bonus.</i></li></ul>" ;
	
	bonusCards.innerHTML = nbc ;
	
	var nbPool = document.getElementById("nb_" + cardId) ;
	if (nbPool != null) {
		var intnbPool = parseInt(nbPool.innerHTML) + 1;
		nbPool.innerHTML = intnbPool ;
		
		if (intnbPool > 1) {
			var ex = document.getElementById("ex_" + cardId) ;
			if (ex != null)
				ex.innerHTML = "<img class=\"icon\" src=\"http://data.dinocard.net/gfx/font/cardNb/x.gif\" alt=\"xxx\" />" + numberToImage("http://data.dinocard.net/gfx/font/cardNb", intnbPool) ;
		}
		
		if (intnbPool == 1) {
			//on vire le display:none de la carte
			var c = document.getElementById("card" + cardId) ;
			if (!cardDisp) {
				showLine(c, cardId) ;
			} else
				c.style.display = "inline" ; 
		}
	}
	
	var nbC = document.getElementById("nbCards") ;
	nbC.innerHTML = nbCards ;
	lock = false; 	
}


function deleteInList(target, cardId) {
	var lTarget = target.innerHTML ;
	var start = lTarget.indexOf("<li id=\"li_" + cardId + "\">", 0) ; //firefox & co
	if (start == -1) {
		start = lTarget.indexOf("<LI id=li_" + cardId + ">", 0) ; //ie
		if (start == -1) 
			start = lTarget.indexOf("<LI id=\"li_" + cardId + "\">", 0) ; //opera
	}
	if (start != -1) {
		var end = lTarget.indexOf("</li>", start) ;
		if ((end == -1) && (document.all)) {
			end = lTarget.indexOf("</LI>", start) ;
			var test = lTarget.indexOf("<LI", start + 1) ;
			if ((end < 0) || ((end >= 0) && (test > 0) && (end > test))) {
				end = lTarget.indexOf("<LI", start + 1) - 1 ;
				if (end < 0)
					end = lTarget.indexOf("</UL>", start + 1) - 5 ;
			}
		}
		if (end != -1)
			target.innerHTML = lTarget.substring(0, start) + lTarget.substring(end, lTarget.length) ;
		else
			target.innerHTML = "<ul><li><i>Aucune carte bonus.</i></li></ul>" ;
	} else
		target.innerHTML = "<ul><li><i>Aucune carte bonus.</i></li></ul>" ;
}


function getNbBonusCards(bc) {
	if (bc == "")
		return 0 ;
	var tab = bc.split("|") ;
	var res = 0 ;
	for (var i = 0; i < tab.length; i++) {
		res += parseInt(tab[i].split("#")[0]) ;
	}
	return res ;
}


function hideLine(c, cardId) {
	if ( c.className.length > 8)
		return ;
	var zeClass = c.className;
	c.className = zeClass + "Disabled" ;
	var bouton = document.getElementById("img" + cardId) ;
	var boutonDisabled = document.getElementById("img" + cardId + "disabled") ;
	bouton.style.display = "none" ;
	boutonDisabled.style.display = "block" ;
	hideTip() ;
}

function showLine(c, cardId) {
	if ( c.className.length < 8)
		return ;
	var newClass = c.className.substring(0, c.className.length - 8) ;
	c.className = newClass ;
	var bouton = document.getElementById("img" + cardId) ;
	var boutonDisabled = document.getElementById("img" + cardId + "disabled") ;
	bouton.style.display = "block" ;
	boutonDisabled.style.display = "none" ;
	hideTip() ;
}


function getLineTemp(cardId, nb, name, view, typ) {
	var elem = document.getElementById("element_" + cardId) ;
	var type = document.getElementById("type_" + cardId) ;
	var tn = "dinoz" ;
	var tname = "dinoz" ;
	switch (type.innerHTML) {
		case "0" :
			tn = "spell" ;
			tname = "incantation" ;
			break ;
		case "2" :
			tn = "object" ;
			tname = "objet magique" ;
			break ;
		case "3" :
			tn = "charm" ;
			tname = "enchantement" ;
			break ;
	}
	var en = "fire" ;
	switch (elem.innerHTML) {
		case "1" :
			en = "wood" ;
			break ;
		case "2" :
			en = "water" ;
			break ;
		case "3" :
			en = "thunder" ;
			break ;
		case "4" :
			en = "sky" ;
			break ;
	}
	var type = document.getElementById("type_" + cardId) ;
	var atk = document.getElementById("atk_" + cardId).innerHTML ;
	var def = document.getElementById("def_" + cardId).innerHTML ;
	var ecl = document.getElementById("ecl_" + cardId).innerHTML ;
	var energy = document.getElementById("energy_" + cardId).innerHTML ;
	var cost = mana2Tip(energy) ;
	var ad = "" ;
	if (tn == "dinoz") {
		ad = " - " + ecl + " / " + atk + " / " + def ;
	}
	var desc = document.getElementById("desc" + cardId).innerHTML ;
	desc = desc.replace(/\\'/g, "'") ;
	desc = desc.replace(/'/g, "\\\'") ;
	desc = desc.replace(/"/g, "\\\'") ;
	desc = desc.replace(/\n/g, "") ;
	return "<li id=\"li_" + cardId + "\"><a id=\"rm_" +cardId + "\" name=\"rm_" + cardId + "\" href=\"javascript:removeOneTemp(" + cardId + ", " + view +  ", " + typ + ");\"><img class='icon' src='http://data.dinocard.net/gfx/icons/minus.gif' alt='icon moins dinocard' /></a>&nbsp;<label name=\"nbT_" + cardId + "\" id=\"nbT_" + cardId + "\">" + nb + "</label> x <a class=\"cardNameLink" + en + "\" target=\"popup\" href=\"/card/view?id=" + cardId + "\" onMouseOver=\"showTip(this, '<img class=\\\'icon\\\' src=\\\'http://data.dinocard.net/gfx/icons/element_" + en + ".gif\\\' alt=\\\'icon " + en + "\\\' />&nbsp;<img class=\\\'icon\\\' src=\\\'http://data.dinocard.net/gfx/icons/icon_" + tn + ".gif\\\' alt=\\\'icon " + tn + "\\\' /><span><img alt=\\\'rien\\\' src=\\\'http://data.dinocard.net/gfx/card/nrj/rien.gif\\\'/>&nbsp;" + cost +  "</span>', '<b>" + tname + ad + "</b><br />" + desc + "');\" onMouseOut=\"hideTip();\">" + name + "</a></li>" ;
}



function getLineBonusTemp(cardId, nb, name, view, typ) {
	var elem = document.getElementById("element_" + cardId) ;
	var type = document.getElementById("type_" + cardId) ;
	var tn = "dinoz" ;
	var tname = "dinoz" ;
	switch (type.innerHTML) {
		case "0" :
			tn = "spell" ;
			tname = "incantation" ;
			break ;
		case "2" :
			tn = "object" ;
			tname = "objet magique" ;
			break ;
		case "3" :
			tn = "charm" ;
			tname = "enchantement" ;
			break ;
	}
	var en = "fire" ;
	switch (elem.innerHTML) {
		case "1" :
			en = "wood" ;
			break ;
		case "2" :
			en = "water" ;
			break ;
		case "3" :
			en = "thunder" ;
			break ;
		case "4" :
			en = "sky" ;
			break ;
	}
	var type = document.getElementById("type_" + cardId) ;
	var atk = document.getElementById("atk_" + cardId).innerHTML ;
	var def = document.getElementById("def_" + cardId).innerHTML ;
	var ecl = document.getElementById("ecl_" + cardId).innerHTML ;
	var energy = document.getElementById("energy_" + cardId).innerHTML ;
	var cost = mana2Tip(energy) ;
	var ad = "" ;
	if (tn == "dinoz") {
		ad = " - " + ecl + " / " + atk + " / " + def ;
	}
	var desc = document.getElementById("desc" + cardId).innerHTML ;
	desc = desc.replace(/\\'/g, "'") ;
	desc = desc.replace(/'/g, "\\\'") ;
	desc = desc.replace(/"/g, "\\\'") ;
	desc = desc.replace(/\n/g, "") ;
	return "<li id=\"li_" + cardId + "\"><a id=\"rm_" +cardId + "\" name=\"rm_" + cardId + "\" href=\"javascript:removeBonusCard(" + cardId + ", " + view +  ", " + typ + ");\"><img class='icon' src='http://data.dinocard.net/gfx/icons/minus.gif' alt='icon moins dinocard' /></a>&nbsp;<label name=\"nbT_" + cardId + "\" id=\"nbT_" + cardId + "\">" + nb + "</label> x <a class=\"cardNameLink" + en +"\" target=\"popup\" href=\"/card/view?id=" + cardId + "\" onMouseOver=\"showTip(this, '<img class=\\\'icon\\\' src=\\\'http://data.dinocard.net/gfx/icons/element_" + en + ".gif\\\' alt=\\\'icon " + en + "\\\' />&nbsp;<img class=\\\'icon\\\' src=\\\'http://data.dinocard.net/gfx/icons/icon_" + tn + ".gif\\\' alt=\\\'icon " + tn + "\\\' /><span><img alt=\\\'rien\\\' src=\\\'http://data.dinocard.net/gfx/card/nrj/rien.gif\\\'/>&nbsp;" + cost +  "</span>', '<b>" + tname + ad + "</b><br />" + desc + "');\" onMouseOut=\"hideTip();\">" + name + "</a></li>" ;
}


function setLiveStats(cardId, add, type) {
	var nb = document.getElementById(type + "Nb") ;
	if (nb == null)
		return ;
	if (add)
		nb.innerHTML = parseInt(nb.innerHTML) + 1 ;
	else
		nb.innerHTML = parseInt(nb.innerHTML) - 1 ;
}


function mana2Tip(mana) {
	var dom = "http://data.dinocard.net" ;
	var res = "" ;
	for (var i = 0; i < mana.length; i++) {
		var c = mana.charAt(i) ;
		switch(c) {
			case "F" :
				res = "<img alt=\\\'feu\\\' src=\\\'" + dom + "/gfx/card/nrj/feu.gif\\\' />&nbsp;" + res ;
				break ;
			case "B" :
				res = "<img alt=\\\'bois\\\' src=\\\'" + dom + "/gfx/card/nrj/bois.gif\\\' />&nbsp;" + res ;
				break ;
			case "E" :
				res = "<img alt=\\\'eau\\\' src=\\\'" + dom + "/gfx/card/nrj/eau.gif\\\' />&nbsp;" + res ;
				break ;
			case "J" :
				res = "<img alt=\\\'foudre\\\' src=\\\'" + dom + "/gfx/card/nrj/foudre.gif\\\' />&nbsp;" + res ;
				break ;
			case "C" : 
				res = "<img alt=\\\'air\\\' src=\\\'" + dom + "/gfx/card/nrj/air.gif\\\' />&nbsp;" + res ;
				break ;
			case "A" :
				res = "<img alt=\\\'neutre\\\' src=\\\'" + dom + "/gfx/card/nrj/neutre.gif\\\' />&nbsp;" + res ;
				break ;
			default :
				res = "<img alt=\\\'rien\\\' src=\\\'" + dom + "/gfx/card/nrj/rien.gif\\\' />&nbsp;" + res ;
				break ;
		}
	}
	return res ; 
}
