/*
 * Functies en objecten die gebruikt worden in product-content.jsp.
 */
 
/**************************************************************************
*********************** DIVERSE FUNCTIES **********************************
**************************************************************************/

function ClipBoard(which, lang)
{
	if (navigator.appName.indexOf("Microsoft") < 0) {
		alert("Deze functie is enkel mogelijk in Microsoft Internet Explorer.");
	} else {
		var holdtext = document.getElementById("holdtext_"+which);
		var copytext = document.getElementById("copytext_"+which);
		
	   	holdtext.innerText = copytext.innerText;
		holdtext.innerText = holdtext.innerText.replace(/-/, "");
		Copied = holdtext.createTextRange();
		Copied.execCommand("Copy");
	
		if (lang == 'nederlands' || lang == 'NEDERLANDS') {
			alert ("CNK-nummer " + which + " gekopieerd naar het klembord !");
		} else {
			alert ("Le nr. CNK " + which + " est mis sur votre 'Clipboard' !");
		}
	}
}
 
/*
 * Plaatst locationIndex in hidden field "currentLocationIndex".
 * Argumenten:
 *             locationIndex: index van locatie op basis waarvan navigatie doorheen
 *                            producten zal verlopen
 */
function setCurrentLocationIndex(locationIndex) {
  //alert("Index: " + locationIndex);
  document.productForm.currentLocationIndex.value = locationIndex;
  return;
}

function updateProductName(nameId, newName) {
  var nameElement = document.getElementById(nameId);
  var curName = nameElement.value;
  //alert("Old product name: " + curName + ", New product name: " + newName);
  if (trim(curName) == '') {
  	nameElement.value = newName;
  }
}

/**************************************************************************
********************* BEHEER TREFWOORDEN **********************************
**************************************************************************/

/*
 * Instantie van KeywordManager.
 */
var keywordManager;

/*
 * Zorgt dat hidden field met lijst trefwoorden up-to-date is.
 * Deze functie kan bvb. via een onsubmit event handler opgeroepen worden.
 * Argumenten:
 *            newKeyword: id van select met nieuw trefwoord
 *            keywordList: id van tabel met lijst trefwoorden
 *            keywordsAsString: id van hidden field met lijst van trefwoorden in String-formaat
 */
function updateKeyword(newKeyword, keywordList, keywordsAsString) {
	if (keywordManager == null) {
		keywordManager = new KeywordManager(newKeyword, keywordList, keywordsAsString);
	}
	if (keywordManager.newKeyword != null && keywordManager.tbody != null && keywordManager.keywords != null) {
		keywordManager.updateKeyword();
	}
}

/* Kopieert een nieuw trefwoord naar de lijst trefwoorden.
 * Argumenten:
 *            newKeyword: id van select met nieuw trefwoord
 *            keywordList: id van tabel met lijst trefwoorden
 *            keywordsAsString: id van hidden field met lijst van trefwoorden in String-formaat
 */
function addKeyword(newKeyword, keywordList, keywordsAsString) {
	if (keywordManager == null) {
		keywordManager = new KeywordManager(newKeyword, keywordList, keywordsAsString);
	}
	return keywordManager.addKeyword();
}

/* Verwijdert een trefwoord.
 * Argumenten:
 *            newKeyword: id van select met nieuw trefwoord
 *            keywordList: id van tabel met lijst trefwoorden
 *            keywordsAsString: id van hidden field met lijst van trefwoorden in String-formaat
 *			  keywordIndex: index van te verwijderen trefwoord
 */
function removeKeyword(newKeyword, keywordList, keywordsAsString, keywordIndex) {
	if (keywordManager == null) {
		keywordManager = new KeywordManager(newKeyword, keywordList, keywordsAsString);
	}
	keywordManager.removeKeyword(keywordIndex);
}

/*
 * Hulp-object dat tabel met trefwoorden beheert.
 * De tabel moet er als volgt uitzien:
 * <table id="keywordList">
 *   <tbody>
 *     <tr>
 *        <td>[keyword]</td>
 *     </tr>
 *   </tbody>
 * </table>
 *
 * Argumenten:
 *            newKeyword: id van select met nieuw trefwoord
 *            keywordList: id van tabel met lijst trefwoorden
 *            keywordsAsString: id van hidden field met lijst van trefwoorden in String-formaat
 * Velden:
 *            newKeyword: select met geselecteerde trefwoord
 *            tbody: tbody van tabel met lijst trefwoorden
 *            keywordsAsString: hidden field met lijst van trefwoorden in String-formaat
 *            newKeywordId: kopie van argument newKeyword
 *            keywordListId: kopie van argument keywordList
 *            keywordsAsStringId: kopie van argument keywordsAsString
 */
function KeywordManager(newKeyword, keywordList, keywordsAsString) {
	//Oorspronkelijke ID's worden opgeslagen
	this.newKeywordId = newKeyword;
	this.keywordListId = keywordList;
	this.keywordsAsStringId = keywordsAsString;
	//DOM ementen
    this.newKeyword = document.getElementById(newKeyword);
    var keywordListEl = document.getElementById(keywordList);
    if (keywordListEl != null) {
	    this.tbody = keywordListEl.getElementsByTagName("tbody")[0];
    }
    this.keywords = document.getElementById(keywordsAsString);
}

KeywordManager.prototype.updateKeyword = function() {
	this.keywords.value = "";
	
	var i;
	for (i=0; i<this.tbody.getElementsByTagName("tr").length; i++) {
		var keyword = this.tbody.getElementsByTagName("tr")[i];
		
		var keywordValue = keyword.getElementsByTagName("td")[0].childNodes[0].data;
		//Replace all whitespace by one single space
		keywordValue = keywordValue.replace(/\s{2,}/g, " ");
		keywordValue = trim(keywordValue);
		keywordValue = keywordValue.replace(/#/g, '##');
		keywordValue = keywordValue.replace(/\|/g, '#|');
		keywordValue = keywordValue.replace(/@/g, '#@');
		this.keywords.value += keywordValue;
		if (i+1 != this.tbody.getElementsByTagName("tr").length) {
			this.keywords.value += "@";
		}
	}
	//alert("Lijst trefwoorden: \n" + this.keywords.value);
}

KeywordManager.prototype.removeKeyword = function(keywordIndex) {
	var ok = confirm("Dit trefwoord zal verwijderd worden. Bent U zeker?");
	if (ok) {
		//var row = this.tbody.getElementsByTagName("tr")[keywordIndex];
		var row = document.getElementById("keyword" + keywordIndex);
		this.tbody.removeChild(row);
		this.updateKeyword();
	}
}

KeywordManager.prototype.addKeyword = function() {
	var keywordVal = this.newKeyword.value;
	//alert("New keyword: " + keywordVal);
	
	var temp = keywordVal.replace(/\s*/g, "");
	if (temp == "") {
		alert("Gelieve een waarde in te vullen voor het nieuwe trefwoord");
		return false;
	}
	
	//Bepaal hoeveel rijen nu aanwezig zijn
	var nbrOfRows = this.tbody.getElementsByTagName("tr").length;

	//Voeg nieuwe rij toe aan lijst CNK-nummers
	var newRow = document.createElement("tr");
	newRow.setAttribute("id", "keyword" + nbrOfRows);

	var keywordCell = document.createElement("td");
	keywordCell.appendChild(document.createTextNode(keywordVal));
	newRow.appendChild(keywordCell);

	var deleteCell = document.createElement("td");
	var deleteInput = document.createElement("input");
	deleteInput.setAttribute("type", "image");
	deleteInput.setAttribute("name", "remove_keyword");
	deleteInput.setAttribute("src", "images/trash.gif");
	//deleteInput.setAttribute("onclick", "removeKeyword('" + this.newKeyowrdId + "', '" + this.keywordListId + "', '" + 
	//						 this.keywordsAsStringId + "', '" + nbrOfRows + "');return false;");
	//onclick-attribuut werkt niet in IE
	deleteInput.onclick = function() {
		removeKeyword(this.newKeywordId, this.keywordListId, this.keywordsAsStringId, 
			 nbrOfRows);
		 return false;
	};
	deleteInput.setAttribute("alt", "Verwijder trefwoord");
	deleteCell.appendChild(deleteInput);
	newRow.appendChild(deleteCell);
	
	this.tbody.appendChild(newRow);
	
	this.newKeyword.value = "";
	
	this.updateKeyword();
	return true;
}

/**************************************************************************
********************* BEHEER CNK-NUMMERS **********************************
**************************************************************************/

/*
 * Instantie van CnkManager.
 */
var cnkManager;

/*
 * Zorgt dat hidden field met lijst CNK-nummers up-to-date is.
 * Deze functie kan bvb. via een onsubmit event handler opgeroepen worden.
 * Argumenten:
 *            cnkFound: id van select met geselecteerde CNK-nummer
 *            cnkLijst: id van tabel met lijst CNK-nummers
 *            cnksAsString: id van hidden field met lijst van CNK-nummers in String-formaat
 */
function updateCnk(cnkFound, cnkLijst, cnksAsString) {
	if (cnkManager == null) {
		cnkManager = new CnkManager(cnkFound, cnkLijst, cnksAsString);
	}
	if (cnkManager.cnkFound != null && cnkManager.tbody != null && cnkManager.cnks != null) {
		cnkManager.updateCnk();
	}
}

/* Kopieert een nieuw cnk-nummer naar de lijst CNK-nummers.
 * Argumenten:
 *            cnkFound: id van select met geselecteerde CNK-nummer
 *            cnkLijst: id van tabel met lijst CNK-nummers
 *            cnksAsString: id van hidden field met lijst van CNK-nummers in String-formaat
 */
function addCnk(cnkFound, cnkLijst, cnksAsString) {
	if (cnkManager == null) {
		cnkManager = new CnkManager(cnkFound, cnkLijst, cnksAsString);
	}
	return cnkManager.addCnk();
}

/* Verwijdert een cnk-nummer
 * Argumenten:
 *            cnkFound: id van select met geselecteerde CNK-nummer
 *            cnkLijst: id van tabel met lijst CNK-nummers
 *            cnksAsString: id van hidden field met lijst van CNK-nummers in String-formaat
 *			  cnkIndex: index van te verwijderen cnk-nummer 
 */
function removeCnk(cnkFound, cnkLijst, cnksAsString, cnkIndex) {
	if (cnkManager == null) {
		cnkManager = new CnkManager(cnkFound, cnkLijst, cnksAsString);
	}
	cnkManager.removeCnk(cnkIndex);
}

/*
 * Hulp-object dat tabel met CNK-nummers beheert.
 * De tabel moet er als volgt uitzien:
 * <table id="cnkLijst">
 *   <tbody>
 *     <tr>
 *        <td>[CNK-nummer]</td>
 *        <td>
 *          <input type="text" name="authorDescription" value="[authorDescription]"/>
 *          <input type="hidden" name="dbDescription" value="[dbDescription]"/>
 *        </td>
 *     </tr>
 *   </tbody>
 * </table>
 *
 * Argumenten:
 *            cnkFound: id van select met geselecteerde CNK-nummer
 *            cnkLijst: id van tabel met lijst CNK-nummers
 *            cnksAsString: id van hidden field met lijst van CNK-nummers in String-formaat
 * Velden:
 *            cnkFound: select met geselecteerde CNK-nummer
 *            tbody: tbody van tabel met lijst CNK-nummers
 *            cnksAsString: hidden field met lijst van CNK-nummers in String-formaat
 *            cnkFoundId: kopie van argument cnkFound
 *            cnkLijstId: kopie van argument cnkLijst
 *            cnksAsStringId: kopie van argument cnkAsString
 */
function CnkManager(cnkFound, cnkLijst, cnksAsString) {
	//Oorspronkelijke ID's worden opgeslagen
	this.cnkFoundId = cnkFound;
	this.cnkLijstId = cnkLijst;
	this.cnksAsStringId = cnksAsString;
	//DOM ementen
    this.cnkFound = document.getElementById(cnkFound);
    var cnkLijstEl = document.getElementById(cnkLijst);
    if (cnkLijstEl != null) {
	    this.tbody = cnkLijstEl.getElementsByTagName("tbody")[0];
    }
    this.cnks = document.getElementById(cnksAsString);
}

CnkManager.prototype.updateCnk = function() {
	this.cnks.value = "";
	
	var i;
	for (i=0; i<this.tbody.getElementsByTagName("tr").length; i++) {
		var cnk = this.tbody.getElementsByTagName("tr")[i];
		
		//Number
		this.cnks.value += cnk.getElementsByTagName("td")[0].childNodes[0].childNodes[0].data;
		this.cnks.value += "|";	
		
		//Author-description
		var input = cnk.getElementsByTagName("input")[0];
		if (input != null) {
		    var inputString = input.value;
		    //delimiters worden escaped
			inputString = inputString.replace(/#/g, '##');
			inputString = inputString.replace(/\|/g, '#|');
			inputString = inputString.replace(/@/g, '#@');
			this.cnks.value += inputString;
		}
		this.cnks.value += "|";
		
		//DB-description
		var hidden = cnk.getElementsByTagName("input")[1];
		if (hidden != null) {
			this.cnks.value += hidden.value;
		}
		this.cnks.value += "|";
		
		//DB-name
		var hidden2 = cnk.getElementsByTagName("input")[2];
		if (hidden2 != null) {
			this.cnks.value += hidden2.value;
		}
		if (i+1 != this.tbody.getElementsByTagName("tr").length) {
			this.cnks.value += "@";
		}
	}
	//alert("Lijst cnks: \n" + this.cnks.value);
}

CnkManager.prototype.removeCnk = function(cnkIndex) {
	var ok = confirm("Dit CNK-nummer zal verwijderd worden. Bent U zeker?");
	if (ok) {
		//var row = this.tbody.getElementsByTagName("tr")[cnkIndex];
		var row = document.getElementById("cnk" + cnkIndex);
		this.tbody.removeChild(row);
		this.updateCnk();
	}
}

CnkManager.prototype.addCnk = function() {
    var selectedIndex = this.cnkFound.selectedIndex;
	var cnkVal = this.cnkFound.options[selectedIndex].value;
	
	//cnkVal opsplitsen
	var loc = cnkVal.search("\\|");
	var cnkNumber = '';
	var cnkDescription = '';
	var cnkName = '';
	if (loc == -1) {
		cnkNumber = trim(cnkVal);
	} else {
		cnkNumber = trim(cnkVal.substring(0, loc));
		var remaining = trim(cnkVal.substring(loc + 1));
		var loc2 = remaining.search("\\|");
		if (loc2 == -1) {
			cnkName = trim(remaining);
		} else {
			cnkName = trim(remaining.substring(0, loc2));		}
			cnkDescription = trim(remaining.substring(loc2 + 1));
	}
	//alert("CNK-number: " + cnkNumber);
	//alert("CNK-name: " + cnkName);
	//alert("CNK-description: " + cnkDescription);
	
	//Bepaal hoeveel rijen nu aanwezig zijn
	var nbrOfRows = this.tbody.getElementsByTagName("tr").length;

	//Voeg nieuwe rij toe aan lijst CNK-nummers
	var newRow = document.createElement("tr");
	newRow.setAttribute("id", "cnk" + nbrOfRows);

	var numberCell = document.createElement("td");
	numberCell.className="veldnaam";
	var fontCell = document.createElement("font");
	fontCell.setAttribute("color", "black");
	fontCell.appendChild(document.createTextNode(cnkNumber));
	numberCell.appendChild(fontCell);	
	newRow.appendChild(numberCell);

	var descriptionCell = document.createElement("td");
	var input = document.createElement("input");
	input.setAttribute("type", "text");
	input.setAttribute("name", "authorDescription");
	//input.setAttribute("disabled", "true");
	input.setAttribute("size", "80");
	input.setAttribute("value", cnkDescription);
	descriptionCell.appendChild(input);

	var hidden = document.createElement("input");
	hidden.setAttribute("type", "hidden");
	hidden.setAttribute("name", "dbDescription");
	hidden.setAttribute("value", cnkDescription);
	descriptionCell.appendChild(hidden);

	var hidden2 = document.createElement("input");
	hidden2.setAttribute("type", "hidden");
	hidden2.setAttribute("name", "dbName");
	hidden2.setAttribute("value", cnkName);
	descriptionCell.appendChild(hidden2);

	newRow.appendChild(descriptionCell);
	
	var deleteCell = document.createElement("td");
	var deleteInput = document.createElement("input");
	deleteInput.setAttribute("type", "image");
	deleteInput.setAttribute("name", "remove_cnk");
	deleteInput.setAttribute("src", "images/trash.gif");
	//onclick-attribuut werkt niet in IE
	deleteInput.onclick = function() {
		removeCnk(this.cnkFoundId, this.cnkLijstId, this.cnksAsStringId, nbrOfRows);
		return false;
	};
	deleteInput.setAttribute("alt", "Verwijder CNK-nummer");
	deleteCell.appendChild(deleteInput);
	newRow.appendChild(deleteCell);
	
	this.tbody.appendChild(newRow);
	
	this.updateCnk();
	
	return cnkName;
}

