// JavaScript Document
// Created by Sebastien Hoffmann - CableOrganizer.com
// Last Modified: 6/25/2008

/**********************************************************
 * First Section - Functions for the User Page index.html *
 **********************************************************/
/*
FUNCTION creatXMLHttp
*/
function createXMLHttp(){

if (typeof XMLHttpRequest != "undefined"){
	return new XMLHttpRequest();
}else if (window.ActiveXObject){

var aVersions = [ "MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp" ];

for (var i = 0; i<aVersions.length; i++){
	try {
		var getSQLresults = new ActiveXObject(aVersions[i]);
		return getSQLresults;
	} catch (oError) {
		// DO NOTHING
	}
}
}
throw new Error("XMLhttp object could not be created");
}

/*
FUNCTION loadCategories
Get all the categories from the database and populate the DropDown list Category
*/
function loadCategories(){
	
	var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=loadCategory";
	var getSQLresults = createXMLHttp();

	getSQLresults.open("get", preBuiltURL, true);
	getSQLresults.onreadystatechange = function () {
	
		if (getSQLresults.readyState == 4){
				
			if (getSQLresults.status == 200){
				if (getSQLresults.responseText == 0){
					document.getElementById('CategoryDropDownList').innerHTML = "<div class=\"ups-header\" style=\"display:block\">an error occured fetching results</div>";
				}else{
				
					document.getElementById('CategoryDropDownList').innerHTML = getSQLresults.responseText;
				}
				;
			}else{
				alert ("An Error Occured : \n" + getSQLresults.statusText);
			}
		}
	};
	getSQLresults.send(null);
}


/*
FUNCTION loadLettersFirstTime
Display the list of letters the first time the page is loaded (ALL categories are considered)
*/
function loadLettersFirstTime(){
	

	var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=loadLetters&cat=0";
	var getSQLresults = createXMLHttp();

	getSQLresults.open("get", preBuiltURL, true);
	getSQLresults.onreadystatechange = function () {
	
		if (getSQLresults.readyState == 4){
				
			if (getSQLresults.status == 200){
				if (getSQLresults.responseText == 0){
					document.getElementById('LetterList').innerHTML = "<div class=\"ups-header\" style=\"display:block\">an error occured fetching results</div>";
				}else{
					document.getElementById('LetterList').innerHTML = getSQLresults.responseText;
					showLetter('*');
				}
				;
			}else{
				alert ("An Error Occured : \n" + getSQLresults.statusText);
			}
		}
	};
	getSQLresults.send(null);

}


/*
FUNCTION showLetter
Display the list of word definitions according to the selected letter and category
*/
function showLetter(letter){
	
	var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=loadWords&";
	var dropdownIndex = document.selectGlossary.category.selectedIndex;
	var dropdownValue = document.selectGlossary.category[dropdownIndex].value;

	// Add the category to the URL
	preBuiltURL = preBuiltURL + "cat=" + encodeURI(dropdownValue);
	
	// Add the letter selected to the URL
	preBuiltURL = preBuiltURL + "&letter=" + encodeURI(letter);
	
	var getSQLresults = createXMLHttp();

	getSQLresults.open("get", preBuiltURL, true);
	getSQLresults.onreadystatechange = function () {
	
		if (getSQLresults.readyState == 4){
				
			if (getSQLresults.status == 200){
				if (getSQLresults.responseText == 0){
					document.getElementById('showDefinitions').innerHTML = "<div class=\"ups-header\" style=\"display:block\">an error occured fetching results</div>";
				}else{
					document.getElementById('showDefinitions').innerHTML = getSQLresults.responseText;
				}
				;
			}else{
				alert ("An Error Occured : \n" + getSQLresults.statusText);
			}
		}
	};
	getSQLresults.send(null);
}


/*
FUNCTION changeCategory
Display the list of letters according to the selected category
*/
function changeCategory(){
	
	// Clear the definitions area first
	document.getElementById('showDefinitions').innerHTML = "";
	
	var dropdownIndex = document.selectGlossary.category.selectedIndex;
	var dropdownValue = document.selectGlossary.category[dropdownIndex].value;
	var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=loadLetters&cat=" + encodeURI(dropdownValue);

	var getSQLresults = createXMLHttp();

	getSQLresults.open("get", preBuiltURL, true);
	getSQLresults.onreadystatechange = function () {
	
		if (getSQLresults.readyState == 4){
				
			if (getSQLresults.status == 200){
				if (getSQLresults.responseText == 0){
					document.getElementById('LetterList').innerHTML = "<div class=\"ups-header\" style=\"display:block\">an error occured fetching results</div>";
				}else{
					document.getElementById('LetterList').innerHTML = getSQLresults.responseText;
				}
				;
			}else{
				alert ("An Error Occured : \n" + getSQLresults.statusText);
			}
		}
	};
	getSQLresults.send(null);
}


/*
FUNCTION changeCategory
Display the list of letters according to the selected category
*/
function toggleFormSubmitDefinition(){
	
	var blockForm = document.getElementById('formSubmitDefinition');
	
	if (blockForm.style.display == "none"){
		blockForm.style.display = "block";
	}
	else{
		blockForm.style.display = "none";
	}
}


/*
FUNCTION sendEmailDefinition
Send an email to the web design department
*/
function sendEmailDefinition(){
	
	var isCompleted = document.formRequestDefinition.formCompleted.value;
	
	if (isCompleted == "true"){
		// The form has been filled correctly, the PHP request can be send
		var name = document.getElementById("nameSubmitter").value;
		var email = document.getElementById("emailSubmitter").value;
		var word = document.getElementById("wordSubmitted").value;
	
		var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=sendEmail";
		preBuiltURL = preBuiltURL + "&name=" + encodeURI(name);
		preBuiltURL = preBuiltURL + "&email=" + encodeURI(email);
		preBuiltURL = preBuiltURL + "&word=" + encodeURI(word);
	
		var getSQLresults = createXMLHttp();
	
		getSQLresults.open("get", preBuiltURL, true);
		getSQLresults.onreadystatechange = function () {
		
			if (getSQLresults.readyState == 4){
				if (getSQLresults.status == 200){
					if (getSQLresults.responseText == 0){
						document.getElementById('formSubmitDefinition').innerHTML = "<div class=\"ups-header\" style=\"display:block\">an error occured fetching results</div>";
					}else{
						document.getElementById('formSubmitDefinition').innerHTML = getSQLresults.responseText;
					}
					;
				}else{
					alert ("An Error Occured : \n" + getSQLresults.statusText);
				}
			}
		};
		getSQLresults.send(null);
	}
}


/*
FUNCTION formCheck
Check that the field in the form are not empty
*/
function formCheck(formobj, sessionVar){

	// name of mandatory fields
	var fieldRequired = Array("nameSubmitter", "emailSubmitter", "wordSubmitted");
	// field description to appear in the dialog box
	var fieldDescription = Array("Name field is empty", "Email field is empty", "Word Definition is empty");
	// dialog message
	var alertMsg = "Please review the following errors:\n\n";
	var l_Msg = alertMsg.length;
	
	for (var i = 0; i < fieldRequired.length; i++){

		var obj = document.formRequestDefinition.elements[fieldRequired[i]];
		
		if (obj){
		
			if (obj.type == null){
			
				var blnchecked = false;
				for (var j = 0; j < obj.length; j++){
					if (obj[j].checked){
						blnchecked = true;
					}
				}
				if (!blnchecked){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				continue;
			}

			switch(obj.type){
			case "select-one":
				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].value == "none"){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "select-multiple":
				if (obj.selectedIndex == -1){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "text":
			if (obj.value == "" || obj.value == null){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "textarea":
				if (obj.value == "" || obj.value == null){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			default:
			}
		}
	}
	
	obj = document.formRequestDefinition.elements["verifCode"];

	if (obj.value == "" || obj.value == null){
		obj.value = "zzz";
	}

	if (obj.value != sessionVar) {
			alertMsg += "\n The Verification Code you entered doesn't match.\n";
			obj.value = "";
	}
	
	// Extra step to check that the Email Address is valid, if provided
	var emailValue = document.formRequestDefinition.elements["emailSubmitter"];
	if (emailValue.value != ""){
		var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if (filter.test(emailValue.value)){
		}
		else{
			alertMsg += "\n The email address you entered is not correct.";
		}
	}
	
	
	if (alertMsg.length == l_Msg){
		//return true;
		document.formRequestDefinition.elements["formCompleted"].value = true;
	}else{
		alert(alertMsg);
		//return false;
		document.formRequestDefinition.elements["formCompleted"].value = false;
	}

}



/********************************************************************
 * Second Section - Functions for the admin page admin-glossary.htm *
 ********************************************************************/

/*
FUNCTION getContentRTE
Make sure hidden and iframe values are in sync before submitting form
*/
function getContentRTE() {
	//updateRTE('rte1'); //use this when syncing only 1 rich text editor ("rtel" is name of editor)
	updateRTEs(); //uncomment and call this line instead if there are multiple rich text editors inside the form
	//alert("Submitted value: "+ document.addDefForm.rteAdd.value);
	//alert("Submitted value: "+ document.editDefForm.rteEdit.value)
	return false; //Set to false to disable form submission, for easy debugging.
}

/*
FUNCTION updateListDefinitions
Show the list of the current definitions from the database
*/
function updateListDefinitionCategory(type) {
	
	if (type == 'def') {
		// Clear the area first
		document.getElementById('blockDefinitionList').innerHTML = "";
	}
	if (type == 'cat') {
		// Clear the area first
		document.getElementById('blockCategoryList').innerHTML = "";
	}
	
	var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=updateListDefinitionCategory&type=";
	preBuiltURL = preBuiltURL + encodeURI(type);
	
	var getSQLresults = createXMLHttp();
	
	getSQLresults.open("get", preBuiltURL, true);
	getSQLresults.onreadystatechange = function () {
		
		if (getSQLresults.readyState == 4){
					
			if (getSQLresults.status == 200){
				if (type == 'def') {
					if (getSQLresults.responseText == 0){
						document.getElementById('blockDefinitionList').innerHTML = "<div class=\"ups-header\" style=\"display:block\">an error occured fetching results</div>";
					}else{
						document.getElementById('blockDefinitionList').innerHTML = getSQLresults.responseText;
						selectCurrentWordInList();
					}
					;
				}
				if (type == 'cat') {
					if (getSQLresults.responseText == 0){
						document.getElementById('blockCategoryList').innerHTML = "<div class=\"ups-header\" style=\"display:block\">an error occured fetching results</div>";
					}else{
						document.getElementById('blockCategoryList').innerHTML = getSQLresults.responseText;
					}
					;
				}
			}else{
				alert ("An Error Occured : \n" + getSQLresults.statusText);
			}
		}
	};
	getSQLresults.send(null);
}


/*
FUNCTION addDefinitionConfiguration
Load the form for adding a definition
*/
function addDefinitionConfiguration() {

	document.getElementById('status').value = 'add';

	// Hide all the other DIV
	document.getElementById('editDefinitionBlock').style.display = "none";
	document.getElementById('deleteDefinitionBlock').style.display = "none";
	
	// Show the DIV for the ADD
	var obj = document.getElementById('addDefinitionBlock');
	if (obj.style.display == "none") {
		obj.style.display = "block";
	}
}

/*
FUNCTION editDefinitionConfiguration
Load the form for editing a definition
*/
function editDefinitionConfiguration() {

	document.getElementById('status').value = 'edit';

	// Hide all the other DIV
	document.getElementById('addDefinitionBlock').style.display = "none";
	document.getElementById('deleteDefinitionBlock').style.display = "none";
	
	// Show the DIV for the ADD
	var obj = document.getElementById('editDefinitionBlock');
	if (obj.style.display == "none") {
		obj.style.display = "block";
	}
}

/*
FUNCTION deleteDefinitionConfiguration
Load the form for deleting a definition
*/
function deleteDefinitionConfiguration() {

	document.getElementById('status').value = 'delete';

	// Hide all the other DIV
	document.getElementById('editDefinitionBlock').style.display = "none";
	document.getElementById('addDefinitionBlock').style.display = "none";
	
	// Show the DIV for the ADD
	var obj = document.getElementById('deleteDefinitionBlock');
	if (obj.style.display == "none") {
		obj.style.display = "block";
	}
}


/*
FUNCTION publishAllDefinitionConfiguration
Actions when the button PUBLISH ALL is pressed
*/
function publishAllDefinitionConfiguration(){
	
	var answer = confirm("Are you sure you want to publish the entire glossary?");
	if (answer){
		publishDefinition('all', 'no');
	}else{
		// Answer was NO - Do Nothing
	}
}


/*
FUNCTION addCategoryConfiguration
Load the form for adding a category
*/
function addCategoryConfiguration() {

	document.getElementById('categorystatus').value = 'add';

	// Hide all the other DIV
	document.getElementById('editCategoryBlock').style.display = "none";
	document.getElementById('deleteCategoryBlock').style.display = "none";
	
	// Show the DIV for the ADD
	var obj = document.getElementById('addCategoryBlock');
	if (obj.style.display == "none") {
		obj.style.display = "block";
	}
}

/*
FUNCTION editCategoryConfiguration
Load the form for editing a category
*/
function editCategoryConfiguration() {

	document.getElementById('categorystatus').value = 'edit';

	// Hide all the other DIV
	document.getElementById('addCategoryBlock').style.display = "none";
	document.getElementById('deleteCategoryBlock').style.display = "none";
	
	// Show the DIV for the ADD
	var obj = document.getElementById('editCategoryBlock');
	if (obj.style.display == "none") {
		obj.style.display = "block";
	}
}

/*
FUNCTION deleteCategoryConfiguration
Load the form for deleting a category
*/
function deleteCategoryConfiguration() {

	document.getElementById('categorystatus').value = 'delete';

	// Hide all the other DIV
	document.getElementById('editCategoryBlock').style.display = "none";
	document.getElementById('addCategoryBlock').style.display = "none";
	
	// Show the DIV for the ADD
	var obj = document.getElementById('deleteCategoryBlock');
	if (obj.style.display == "none") {
		obj.style.display = "block";
	}
}

/*
FUNCTION setupDefinitionTab
Setup the Definition Tab configuration
*/
function setupDefinitionTab(){
	// Load the definition list
	updateListDefinitionCategory('def');
	// Load the add definition configuration
	addDefinitionConfiguration();
}

/*
FUNCTION setupDefinitionTab
Setup the Definition Tab configuration
*/
function setupCategoryTab(){
	// Load the definition list
	updateListDefinitionCategory('cat');
	// Load the add category configuration
	addCategoryConfiguration();
}

/*
FUNCTION blockTyping
Bock the typing in the 'Link to the definition' text area
*/
function blockTyping(){
	getEvent=event.keyCode;
	if (getEvent == "13"){alert("cant type");}
	else{}
}

/*
FUNCTION showEditInformation
If the user is in Edit status, display the information for the selected word in the form fields
*/
function showEditInformation(){
	
	var status = document.getElementById('status').value;
	if (status == "edit"){
		var len = document.getElementById('definition_list').length;
		var chosenWord = "";

		for (var i = 0; i < len; i++) {
			if (document.getElementById('definition_list')[i].selected) {
				chosenWord =  document.getElementById('definition_list')[i].value;
			} 
		}

		// Get category for that word
		getCategoryForWord(chosenWord);
		
		// Also get the person who changed it last and the date of last modification
		getNameAndDateForWord(chosenWord);

		document.getElementById('wordToEdit').value = chosenWord;
		
		var nameFile = replaceAll(chosenWord, " ", "");
		nameFile = replaceAll(nameFile, "®", "");
		nameFile = replaceAll(nameFile, "°", "");
		nameFile = replaceAll(nameFile, "©", "");
		nameFile = replaceAll(nameFile, "™", "");
		nameFile = replaceAll(nameFile, "µ", "");
		nameFile = replaceAll(nameFile, "é", "");
		nameFile = replaceAll(nameFile, "±", "");
		nameFile = replaceAll(nameFile, "?", "");
		nameFile = replaceAll(nameFile, ".", "");
		nameFile = replaceAll(nameFile, "!", "");
		nameFile = replaceAll(nameFile, ",", "");
		nameFile = replaceAll(nameFile, ";", "");
		nameFile = replaceAll(nameFile, ":", "");
		nameFile = replaceAll(nameFile, "'", "");
		nameFile = replaceAll(nameFile, "\"", "");
		nameFile = replaceAll(nameFile, "/", "_");
		nameFile = replaceAll(nameFile, "(", "");
		nameFile = replaceAll(nameFile, ")", "");
		nameFile = replaceAll(nameFile, "'", "''");
		nameFile = replaceAll(nameFile, "&", "");

		nameFile = nameFile.toLowerCase();
		document.getElementById('linkToEdit').value = "http://cableorganizer.com/glossary/definitions/" + nameFile + ".html";

		var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=getEditInformation&word=";
		preBuiltURL = preBuiltURL + escape(chosenWord);

		var getSQLresults = createXMLHttp();
		
		getSQLresults.open("get", preBuiltURL, true);
		getSQLresults.onreadystatechange = function () {
			
			if (getSQLresults.readyState == 4){
				if (getSQLresults.status == 200){
					if (getSQLresults.responseText == 0){
						alert("Sorry, an error occured fetching results");
					}else{
						//alert("results are here");
						var arrayResults = new Array();
						arrayResults = getSQLresults.responseText.split('|||');
						// Give the ID Word in the hidden input
						document.getElementById('IDEditingWord').value = arrayResults[0];
						// Get the result string and display the information in the fields
						document.getElementById('rteEdit').contentWindow.document.body.innerHTML = arrayResults[1];
					}
					;
				}else{
					alert ("An Error Occured : \n" + getSQLresults.statusText);
				}
			}
		};
		getSQLresults.send(null);
	}
	
	else if(status == "delete"){
		getDeleteWord();
	}
}

/*
FUNCTION getCategory
Get the category(ies) for the selected word to edit and highlight the category(ies) in the list
*/
function getCategoryForWord(wordToGet){

		var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=getCategoryEdit&word=";
		preBuiltURL = preBuiltURL + escape(wordToGet);

		var getSQLresults = createXMLHttp();
		
		getSQLresults.open("get", preBuiltURL, true);
		getSQLresults.onreadystatechange = function () {
			
			if (getSQLresults.readyState == 4){
				if (getSQLresults.status == 200){
					if (getSQLresults.responseText == 0){
						alert("Sorry, an error occured fetching results");
					}else{
						//alert("Get category results");
						// Unselect all the catgories selected from previous requests
						var len = document.getElementById('category_assigned_edit').length;
						for (var bb = 0; bb < len; bb++){
							document.getElementById('category_assigned_edit')[bb].selected = false;
						}
						
						// Get the result string and display the information in the fields
						var resultsCategories = getSQLresults.responseText;
						var allCategories = new Array();
						allCategories = resultsCategories.split('|');
						
						for (var t = 0; t < allCategories.length; t++){
							for (var x = 0; x < len; x++) {
								if (document.getElementById('category_assigned_edit')[x].value == allCategories[t]) {
									document.getElementById('category_assigned_edit')[x].selected = true;
								} 
							}
						}
						//alert("categories selected");
					}
					;
				}else{
					alert ("An Error Occured : \n" + getSQLresults.statusText);
				}
			}
		};
		getSQLresults.send(null);
}


/*
FUNCTION getNameAndDateForWord
Get the name and date of last modification for this definition
*/
function getNameAndDateForWord(wordToGet){
	
		var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=getNameAndDate&word=";
		preBuiltURL = preBuiltURL + escape(wordToGet);

		var getSQLresults = createXMLHttp();
		
		getSQLresults.open("get", preBuiltURL, true);
		getSQLresults.onreadystatechange = function () {
			
			if (getSQLresults.readyState == 4){
				if (getSQLresults.status == 200){
					if (getSQLresults.responseText == 0){
						alert("Sorry, an error occured fetching results");
					}else{
						// Get the result string and display the information in the fields
						var resultsNameAndDate = getSQLresults.responseText;
						var arrayNameAndDate = new Array();
						arrayNameAndDate = resultsNameAndDate.split('|');
						
						document.getElementById('nameLastModification').innerHTML = arrayNameAndDate[0];
						document.getElementById('dateLastModification').innerHTML = arrayNameAndDate[1];
					}
					;
				}else{
					alert ("An Error Occured : \n" + getSQLresults.statusText);
				}
			}
		};
		getSQLresults.send(null);
}

/*
FUNCTION saveEditedInformation
Save all the new information about the edited word into the database
*/
function saveEditedInformation(){
	
	if (document.getElementById('wordToEdit').value == ""){
		alert("Please select a word to edit first!");
	}else{
		//Check that at least one category is selected
		var selectedEditCategories = getEditSelectedCategories('edit');
		if (selectedEditCategories == ""){
			alert("Please select at least one category for this definition.");
		}else {
		
			// Synchronize the RTEs
			getContentRTE();
		
			// Recover all the data from the fields
			var idWord = document.getElementById('IDEditingWord').value;
			var dataWord = document.getElementById('wordToEdit').value;
			var dataDefinition = document.editDefForm.rteEdit.value;
			var idAdmin = document.getElementById('loginName').value;
			var currentTime = new Date();
			var currentDate = currentTime.getFullYear() + "-" + (currentTime.getMonth()+1) + "-" + currentTime.getDate();
		
			var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=updateEditedWord";
			preBuiltURL = preBuiltURL + "&idWord=" + encodeURI(idWord);
			preBuiltURL = preBuiltURL + "&dataWord=" + escape(dataWord);
			preBuiltURL = preBuiltURL + "&dataDefinition=" + escape(dataDefinition);
			preBuiltURL = preBuiltURL + "&idAdmin=" + encodeURI(idAdmin);
			preBuiltURL = preBuiltURL + "&currentDate=" + encodeURI(currentDate);
			preBuiltURL = preBuiltURL + "&categories=" + escape(selectedEditCategories);
		
			var getSQLresults = createXMLHttp();
				
			getSQLresults.open("get", preBuiltURL, true);
			getSQLresults.onreadystatechange = function () {
					
				if (getSQLresults.readyState == 4){
					if (getSQLresults.status == 200){
						if (getSQLresults.responseText == 0){
							alert("Sorry, an error occured fetching results");
						}else{
							// Alerts the user if the word has been correctly edited in the database
							alert(getSQLresults.responseText);
							updateListDefinitionCategory('def');
						}
						;
					}else{
						alert ("An Error Occured : \n" + getSQLresults.statusText);
					}
				}
			};
			getSQLresults.send(null);
		}
	}
}


/*
FUNCTION selectCurrentWordInList
After the word list has been refreshed, reselect the word that is currently edited
*/
function selectCurrentWordInList() {
	
	var status = document.getElementById('status').value;
	var wordEdited = document.getElementById('wordToEdit').value;
	
	if (status == 'edit' && wordEdited != null && wordEdited != ""){
		var len = document.getElementById('definition_list').length;

		for (var i = 0; i < len; i++) {
			if (document.getElementById('definition_list')[i].value == wordEdited) {
				document.getElementById('definition_list')[i].selected = true;
			} 
		}
	}
}


/*
FUNCTION getEditSelectedCategories
Return the ID of the categories selected for the current definition edited
*/
function getEditSelectedCategories(section){
	
	var listCategories = "";
	var plug = "";
	
	if (section == "edit"){
		var lengthList = document.getElementById('category_assigned_edit').length;
		for (var i = 0; i < lengthList; i++){
			if (document.getElementById('category_assigned_edit')[i].selected){
				listCategories = listCategories + plug + document.getElementById('category_assigned_edit')[i].value;
				plug = "|";
			}
		}
	}
	if (section == "add"){
		var lengthList = document.getElementById('category_assigned_add').length;
		for (var i = 0; i < lengthList; i++){
			if (document.getElementById('category_assigned_add')[i].selected){
				listCategories = listCategories + plug + document.getElementById('category_assigned_add')[i].value;
				plug = "|";
			}
		}
	}
	
	return listCategories;
}


/*
FUNCTION getDeleteWord
Get the word selected to delete and 
*/
function getDeleteWord(){
	
	var len = document.getElementById('definition_list').length;
	var chosenWord = "";
		
	for (var i = 0; i < len; i++) {
		if (document.getElementById('definition_list')[i].selected) {
			chosenWord =  document.getElementById('definition_list')[i].value;
		} 
	}
	
	if (chosenWord == ""){
		document.getElementById('contentDelete').innerHTML = "No word is selected on the List of Definitions. Please select a word first.";
	}else{
		document.getElementById('contentDelete').innerHTML = "Are you sure you want to delete the definition: <strong><span class=\"style1\">" + chosenWord + "</span></strong><br /><br /><a href=\"javascript:;\" onclick=\"confirmDeleteWord();\"><img src=\"http://images.cableorganizer.com/glossary/buttonConfirm.gif\" /></a>";
	}
}

/*
FUNCTION confirmDeleteWord
The delete action has been confirmed, remove the word from the database (turn Flag to 0)
*/
function confirmDeleteWord(){
	
	var idAdmin = document.getElementById('loginName').value;
	var currentTime = new Date();
	var currentDate = currentTime.getFullYear() + "-" + (currentTime.getMonth()+1) + "-" + currentTime.getDate();
	var len = document.getElementById('definition_list').length;
	var chosenWord = "";
		
	for (var i = 0; i < len; i++) {
		if (document.getElementById('definition_list')[i].selected) {
			chosenWord =  document.getElementById('definition_list')[i].value;
		} 
	}
	
	var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=deleteSelectedWord";
	preBuiltURL = preBuiltURL + "&word=" + escape(chosenWord);
	preBuiltURL = preBuiltURL + "&idAdmin=" + encodeURI(idAdmin);
	preBuiltURL = preBuiltURL + "&currentDate=" + encodeURI(currentDate);
	
	var getSQLresults = createXMLHttp();
			
	getSQLresults.open("get", preBuiltURL, true);
	getSQLresults.onreadystatechange = function () {
				
		if (getSQLresults.readyState == 4){
			if (getSQLresults.status == 200){
				if (getSQLresults.responseText == 0){
					alert("Sorry, an error occured fetching results");
				}else{
					if (getSQLresults.responseText == "OK") {
						// Confirm that the word has been deleted
						document.getElementById('contentDelete').innerHTML = "The definition <strong><span class=\"style1\">" + chosenWord + " </span></strong> has been deleted from the database.";
						updateListDefinitionCategory('def');
					}
					else {
						document.getElementById('contentDelete').innerHTML = "Sorry the word couldn't be deleted.";
					}
				}
				;
			}else{
				alert ("An Error Occured : \n" + getSQLresults.statusText);
			}
		}
	};
	getSQLresults.send(null);
}


/*
FUNCTION saveNewWordInformation
Save the new word into the database
*/
function saveNewWordInformation(){
	
	// Synchronize the RTEs
	getContentRTE();
	
	if (document.getElementById('wordToAdd').value == "" || document.addDefForm.rteAdd.value == ""){
		alert("Please make sure the Word and Definition fields are not empty.");
	}else{
		//Check that at least one category is selected
		var selectedAddCategories = getEditSelectedCategories('add');
		if (selectedAddCategories == ""){
			alert("Please select at least one category for this definition.");
		}else {
		
			// Recover all the data from the fields
			var dataWord = document.getElementById('wordToAdd').value;
			var dataDefinition = document.addDefForm.rteAdd.value;
			var idAdmin = document.getElementById('loginName').value;
			var currentTime = new Date();
			var currentDate = currentTime.getFullYear() + "-" + (currentTime.getMonth()+1) + "-" + currentTime.getDate();
		
			var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=insertNewWord";
			preBuiltURL = preBuiltURL + "&dataWord=" + escape(dataWord);
			preBuiltURL = preBuiltURL + "&dataDefinition=" + escape(dataDefinition);
			preBuiltURL = preBuiltURL + "&idAdmin=" + encodeURI(idAdmin);
			preBuiltURL = preBuiltURL + "&currentDate=" + encodeURI(currentDate);
			preBuiltURL = preBuiltURL + "&categories=" + escape(selectedAddCategories);
			//alert(preBuiltURL);
		
			var getSQLresults = createXMLHttp();
				
			getSQLresults.open("get", preBuiltURL, true);
			getSQLresults.onreadystatechange = function () {
					
				if (getSQLresults.readyState == 4){
					if (getSQLresults.status == 200){
						if (getSQLresults.responseText == 0){
							alert("Sorry, an error occured fetching results");
						}else{
							// Alerts the user if the word has been correctly edited in the database
							alert(getSQLresults.responseText);
							if (getSQLresults.responseText == "Thank you, the word has been added to the database."){
								updateListDefinitionCategory('def');
								publishDefinition('one', 'yes');
							}
						}
						;
					}else{
						alert ("An Error Occured : \n" + getSQLresults.statusText);
					}
				}
			};
			getSQLresults.send(null);
		}
	}
}

/*
FUNCTION clearAllAddFields
After a word has been added, empty all the fields to recreate a new word
*/
function clearAllAddFields() {
	
	// Word 
	document.getElementById('wordToAdd').value = "";
	
	// Definition
	document.getElementById('rteAdd').contentWindow.document.body.innerHTML = "";
	
	// Category list
	var len = document.getElementById('category_assigned_add').length;
	for (var i = 0; i < len; i++) {
		document.getElementById('category_assigned_add')[i].selected = false;
	}
}

/*
FUNCTION saveNewCategoryInformation
Save the new category into the database
*/
function saveNewCategoryInformation(){
	
	var newCategory = document.getElementById('categoryToAdd').value;

	if (newCategory == ""){
		alert("Please make sure you have entered a category.");
	}else{
		
			var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=insertNewCategory";
			preBuiltURL = preBuiltURL + "&cat=" + escape(newCategory);
		
			var getSQLresults = createXMLHttp();
				
			getSQLresults.open("get", preBuiltURL, true);
			getSQLresults.onreadystatechange = function () {
					
				if (getSQLresults.readyState == 4){
					if (getSQLresults.status == 200){
						if (getSQLresults.responseText == 0){
							alert("Sorry, an error occured fetching results");
						}else{
							// Alerts the user if the word has been correctly edited in the database
							alert(getSQLresults.responseText);
							if (getSQLresults.responseText == "Thank you, the category has been added to the database."){
								updateListDefinitionCategory('cat');
								updateBlockListCategories();
								document.getElementById('categoryToAdd').value = "";
							}
						}
						;
					}else{
						alert ("An Error Occured : \n" + getSQLresults.statusText);
					}
				}
			};
			getSQLresults.send(null);
		
	}
}


/*
FUNCTION updateBlockListCategories
Update the list of categories for the Add and Edit Tab of definitions
*/
function updateBlockListCategories(){
	
	// Remove current data
	document.getElementById('blockListCategoryAdd').innerHTML = "";
	document.getElementById('blockListCategoryEdit').innerHTML = "";
	
	var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=updateBlockCategories";
	var getSQLresults = createXMLHttp();
				
	getSQLresults.open("get", preBuiltURL, true);
	getSQLresults.onreadystatechange = function () {
					
		if (getSQLresults.readyState == 4){
			if (getSQLresults.status == 200){
				if (getSQLresults.responseText == 0){
					alert("Sorry, an error occured fetching results");
				}else{
					// Split the results in two and assign them to the right block
					var resultsBlockCategories = getSQLresults.responseText;
					var arrayBlockCategories = new Array();
					arrayBlockCategories = resultsBlockCategories.split('|||');
					
					document.getElementById('blockListCategoryAdd').innerHTML = arrayBlockCategories[0];
					document.getElementById('blockListCategoryEdit').innerHTML = arrayBlockCategories[1];
				}
				;
			}else{
				alert ("An Error Occured : \n" + getSQLresults.statusText);
			}
		}
	};
	getSQLresults.send(null);
}

/*
FUNCTION showEditCategoryInformation
If the user is in Edit status, display the information for the selected word in the form fields
*/
function showEditCategoryInformation(){
	
	var status = document.getElementById('categorystatus').value;
	
	if (status == "edit"){
		var len = document.getElementById('category_list').length;
		var chosenCategory = "";
		
		for (var i = 0; i < len; i++) {
			if (document.getElementById('category_list')[i].selected) {
				chosenCategory =  document.getElementById('category_list')[i].value;
			} 
		}

		document.getElementById('categoryToEdit').value = chosenCategory;
		
		// Get the id of the category
		var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=getIDSelectedCategory";
		preBuiltURL = preBuiltURL + "&cat=" + escape(chosenCategory);
		
		var getSQLresults = createXMLHttp();
				
		getSQLresults.open("get", preBuiltURL, true);
		getSQLresults.onreadystatechange = function () {
					
			if (getSQLresults.readyState == 4){
				if (getSQLresults.status == 200){
					if (getSQLresults.responseText == 0){
						alert("Sorry, an error occured fetching results");
					}else{
						document.getElementById('IDEditingCategory').value = getSQLresults.responseText;
					}
					;
				}else{
					alert ("An Error Occured : \n" + getSQLresults.statusText);
				}
			}
		};
		getSQLresults.send(null);
	}
	
	else if(status == "delete"){
		getDeleteCategory();
	}
}

/*
FUNCTION getDeleteCategory
Get the word selected to delete and 
*/
function getDeleteCategory(){
	
	var len = document.getElementById('category_list').length;
	var chosenCategory = "";
		
	for (var i = 0; i < len; i++) {
		if (document.getElementById('category_list')[i].selected) {
			chosenCategory =  document.getElementById('category_list')[i].value;
		} 
	}
	
	if (chosenCategory == ""){
		document.getElementById('contentDeleteCategory').innerHTML = "No word is selected on the List of Definitions. Please select a word first.";
	}else{
		document.getElementById('contentDeleteCategory').innerHTML = "Are you sure you want to delete the category: <strong><span class=\"style1\">" + chosenCategory + "</span></strong><br /><br /><a href=\"javascript:;\" onclick=\"confirmDeleteCategory();\"><img src=\"http://images.cableorganizer.com/glossary/buttonConfirm.gif\" /></a>";
	}
}

/*
FUNCTION confirmDeleteCategory
The delete action has been confirmed, remove the category from the database (only if no word has this category assigned)
*/
function confirmDeleteCategory(){
	
	var len = document.getElementById('category_list').length;
	var chosenCateory = "";
		
	for (var i = 0; i < len; i++) {
		if (document.getElementById('category_list')[i].selected) {
			chosenCateory =  document.getElementById('category_list')[i].value;
		} 
	}
	
	var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=deleteSelectedCategory";
	preBuiltURL = preBuiltURL + "&cat=" + escape(chosenCateory);
	
	var getSQLresults = createXMLHttp();
			
	getSQLresults.open("get", preBuiltURL, true);
	getSQLresults.onreadystatechange = function () {
				
		if (getSQLresults.readyState == 4){
			if (getSQLresults.status == 200){
				if (getSQLresults.responseText == 0){
					alert("Sorry, an error occured fetching results");
				}else{
					if (getSQLresults.responseText == "OK") {
						// Confirm that the word has been deleted
						document.getElementById('contentDeleteCategory').innerHTML = "The category <strong><span class=\"style1\">" + chosenCateory + " </span></strong> has been deleted from the database.";
						updateListDefinitionCategory('cat');
						updateBlockListCategories();
					}
					else {
						document.getElementById('contentDeleteCategory').innerHTML = "Sorry the definition couldn't be deleted. Make sure no word is assigned to that definition.";
					}
				}
				;
			}else{
				alert ("An Error Occured : \n" + getSQLresults.statusText);
			}
		}
	};
	getSQLresults.send(null);
}

/*
FUNCTION saveEditedCategoryInformation
Save all the new information about the edited category into the database
*/
function saveEditedCategoryInformation(){
	
	if (document.getElementById('categoryToEdit').value == ""){
		alert("Please select a category to edit first!");
	}else{
		
			// Recover all the data from the fields
			var idCateogry = document.getElementById('IDEditingCategory').value;
			var dataCategory = document.getElementById('categoryToEdit').value;
		
			var preBuiltURL = "http://cableorganizer.com/glossary/getGlossary.php?action=updateEditedCategory";
			preBuiltURL = preBuiltURL + "&idCat=" + encodeURI(idCateogry);
			preBuiltURL = preBuiltURL + "&dataCat=" + escape(dataCategory);
		
			var getSQLresults = createXMLHttp();
				
			getSQLresults.open("get", preBuiltURL, true);
			getSQLresults.onreadystatechange = function () {
					
				if (getSQLresults.readyState == 4){
					if (getSQLresults.status == 200){
						if (getSQLresults.responseText == 0){
							alert("Sorry, an error occured fetching results");
						}else{
							// Alerts the user if the word has been correctly edited in the database
							alert(getSQLresults.responseText);
							updateListDefinitionCategory('cat');
							updateBlockListCategories();
						}
						;
					}else{
						alert ("An Error Occured : \n" + getSQLresults.statusText);
					}
				}
			};
			getSQLresults.send(null);
	}
}

/*
FUNCTION publishDefinition
Call the php script to generate the definition page
*/
function publishDefinition(type, add) {
	
	if (type == "one"){
		if (add == "no"){
			var idWord = document.getElementById('IDEditingWord').value;
			var preBuiltURL = "http://cableorganizer.com/glossary/generatePage.php?idWord=" + encodeURI(idWord) + "&type=edit";
		}
		if (add == "yes"){
			var idWord = document.getElementById('wordToAdd').value;
			var preBuiltURL = "http://cableorganizer.com/glossary/generatePage.php?idWord=" + escape(idWord) + "&type=add";
			//alert(preBuiltURL);
			clearAllAddFields();
		}
	}
	if (type == "all"){
		var idWord = "all";
		var preBuiltURL = "http://cableorganizer.com/glossary/generatePage.php?idWord=" + encodeURI(idWord) + "&type=edit";;
	}


	var getSQLresults = createXMLHttp();
				
	getSQLresults.open("get", preBuiltURL, true);
	getSQLresults.onreadystatechange = function () {
	
		if (getSQLresults.readyState == 4){
			if (getSQLresults.status == 200){
				if (getSQLresults.responseText == 0){
					alert("Sorry, an error occured fetching results");
				}else{
					// Alerts the user if the word has been published and the page generated
					alert(getSQLresults.responseText);
				}
				;
			}else{
				alert ("An Error Occured : \n" + getSQLresults.statusText);
			}
		}
	};
	getSQLresults.send(null);
}


/*
FUNCTION replaceAll
Replace ALL the occurence of strA by strB  in the text put in parameter
*/
function replaceAll(text, strA, strB) 
{
    while ( text.indexOf(strA) != -1)
    {
        text = text.replace(strA,strB);
    }
    return text;
}

// Déclaration de la fonction de Callback
// + ----------------------------------------------------------------------------------
// + afficherResultats
// + Affiche ou non le conteneur en fonction du résultat de la recherche
// + ----------------------------------------------------------------------------------
function afficherResultats(obj) {
     // Construction des noeuds
     var tabResult = obj.responseXML.getElementsByTagName('resultat');
     document.getElementById('zoneResultats').innerHTML = '';
     if (tabResult.length > 0) {
          // On définit la hauteur de la liste en fonction du nombre de rsultats et de la hauteur de ligne
          if (tabResult.length > 10){
			  var hauteur = 190;
		  }else{
		  	var hauteur = tabResult.length * 19;
		  }
          with(document.getElementById('zoneResultats').style) {
               visibility = 'visible';
               height = hauteur + 'px';
          };
          for (var i = 0; i < tabResult.length; i++) {
               resultat = tabResult.item(i); 
               var egt = document.createElement('li');
               var lnk = document.createElement('a');
               var texte = document.createTextNode(resultat.getAttribute('titre'));
               lnk.appendChild(texte);
               lnk.setAttribute('href', resultat.getAttribute('url'));
               lnk.setAttribute('title', resultat.getAttribute('titre'));
               egt.appendChild(lnk);
               document.getElementById('zoneResultats').appendChild(egt);
          }
     }
     else {
          document.getElementById('zoneResultats').style.visibility = 'hidden';
     }
}
// Déclaration de la fonction qui lance la recherche
function loadData() {
     // Création de l'objet
     var XHR = new XHRConnection();
     XHR.appendData("foo", document.getElementById('foo').value);
     // On soumet la requête
     // Signification des paramètres:               
     //      + On indique à l'objet qu'il faut appeler le fichier search.php
     //      + On utilise la méthode POST, adaptée l'envoi d'information
     //      + On indique quelle fonction appeler lorsque l'opération a été effectuée
	 var linktoPHP = "http://cableorganizer.com/glossary/getGlossary.php?action=search&request=" + document.getElementById('foo').value;
     XHR.sendAndLoad(linktoPHP, "POST", afficherResultats);
}

