/**
* REMINDER
* Progressively change functions so they use document.getElementById() func
* instead of document.<form name>
* as forms must not have a "name" value according to xHTML STRICT DOCTYPE
*/

/**
* Errors checking
* Searching for <span class="error">,
*  Modifying parent node className
*  Setting appropriate left margin to other fields
*/
function formErrorCheck()
{
	var labels = document.getElementsByTagName("label");
	if (labels) {
		var labelWidth = labels[0].offsetWidth;
		if (document.all && !window.sidebar) {
			//  this check should recognise only IE
			labelWidth += 3;
		}
	}
	for (i=0; i<document.getElementsByTagName("form").length; i++) {
		var errorSpans = document.forms[i].getElementsByTagName("span");
		if (errorSpans) {
			for (j=0; j<errorSpans.length; j++) {
				if (errorSpans[j].className == "error") {
					var parentObject = errorSpans[j].parentNode;
					parentObject.className += " errorBlock";
					for (k=0; k<parentObject.childNodes.length; k++) {
						if (parentObject.childNodes[k].nodeName == "INPUT"
						|| parentObject.childNodes[k].nodeName == "SELECT") {
							parentObject.childNodes[k].style.marginLeft = labelWidth +"px";
						}
					}
					//  check if this node is in a tab
					if (field = parentObject.parentNode) {
						if (field.className == "options") {
							var tabId = field.id;
							var tabs = document.getElementById("optionsLinks");
							var tabElements = tabs.getElementsByTagName("li");
							for (l=0; l<tabElements.length; l++) {
								if (tabElements[l].className.match(new RegExp(tabId+"\\b"))) {
									var errorTab = tabElements[l].childNodes;
									errorTab[0].className = "error";
									var thisForm = document.forms[0].id;
									showSelectedOptions(thisForm,tabId);
								}
							}
						}
					}
				}
			}
		}
	}
}
/**
* Allows to create/modify a field value within a form before submitting it.
* Launches the above function depending on the status of a trigger checkbox

* @param   string   formName Obviously the form name you want to submit
* @param   string   fieldToUpdate The element name you want to modify
* @param   string   fieldValue
* @param   bool      doCreate If you want to create a hidden input element instead of modifying an existing one
*
* @return  void Submit the form
*/
function formSubmit(formId, fieldName, fieldValue, doCreate)
{
	var selectedForm = document.getElementById(formId);
	if (typeof doCreate != "undefined" && doCreate == 1) {
		newInput = document.createElement("input");
		newInput.setAttribute('name', fieldName);
		newInput.setAttribute('value', fieldValue);
		newInput.setAttribute('type', 'hidden');
		selectedForm.appendChild(newInput);
	} else {
		if (fieldName) {
			var elm = selectedForm.elements[fieldName];
			elm.value = fieldValue;
		}
	}
	selectedForm.submit();
}

//  Allows to reset a form
function formReset(formId)
{
	var selectedForm = document.getElementById(formId);
	if (!selectedForm) {
		return;
	}
	selectedForm.reset();
}

//  Allows to show/hide a block of options (defined within a fieldset) in any form
function showSelectedOptions(formId, option)
{
	var selectedForm = document.getElementById(formId);
	if (!selectedForm) return true;
	var elms = selectedForm.getElementsByTagName("fieldset");
	for (i=0; i<elms.length; i++) {
		if (elms[i].className.match(new RegExp("options\\b"))) {
			if (elms[i].id == option) {
				elms[i].style.display = "block";
			} else {
				elms[i].style.display = "none";
			}
		}
	}

	var items = document.getElementById("optionsLinks").getElementsByTagName("li");
	for (i=0; i<items.length; i++) {
		if (items[i].className.match(new RegExp(" current\\b"))) {
			items[i].className = items[i].className.replace(new RegExp(" current\\b"), "");
		}
		if (items[i].className.match(new RegExp(option +"\\b"))) {
			items[i].className +=" current";
		}
	}
}

//  Mandatory function when using showConfigOptions() above
//  Dynamically creates links to display selected block of options
function createAvailOptionsLinks(formId, titleTag)
{
	var selectedForm = document.getElementById(formId);
	if (typeof titleTag == "undefined") var titleTag = 'h3';
	if (!selectedForm) return true;
	if (!document.getElementById("optionsLinks")) {
		alert('The Div container with id set to "optionsLinks" wasn\'t found' );
		return true;
	}
	var elms = selectedForm.getElementsByTagName("fieldset");
	var optionsLinks = '<ul>';
	for (i=0; i<elms.length; i++) {
		if (elms[i].className.match(new RegExp("options\\b"))) {
			optionsLinks += "<li class=\""+elms[i].id+"\"><a href='javascript:showSelectedOptions(\""+formId +"\",\""+elms[i].id +"\")'>"+elms[i].getElementsByTagName(titleTag)[0].innerHTML +"</a></li>";
		}
	}
	optionsLinks += "</ul>";
	document.getElementById("optionsLinks").innerHTML += optionsLinks;
}

function relocate_select(obj, value){
	if( obj ){
		for( i=0; i<obj.options.length; i++ ){
			if( obj.options[i].value==value )
			obj.options[i].selected = true;
			else
			obj.options[i].selected = false;
		}
	}

}

function orderItems(down)
{
	sl = document.frmBlockMgr.item.selectedIndex;
	if (sl != -1) {
		oText = document.frmBlockMgr.item.options[sl].text;
		oValue = document.frmBlockMgr.item.options[sl].value;
		if (sl > 0 && down == 0) {
			document.frmBlockMgr.item.options[sl].text = document.frmBlockMgr.item.options[sl-1].text;
			document.frmBlockMgr.item.options[sl].value = document.frmBlockMgr.item.options[sl-1].value;
			document.frmBlockMgr.item.options[sl-1].text = oText;
			document.frmBlockMgr.item.options[sl-1].value = oValue;
			document.frmBlockMgr.item.selectedIndex--;
		} else if (sl < document.frmBlockMgr.item.length-1 && down == 1) {
			document.frmBlockMgr.item.options[sl].text = document.frmBlockMgr.item.options[sl+1].text;
			document.frmBlockMgr.item.options[sl].value = document.frmBlockMgr.item.options[sl+1].value;
			document.frmBlockMgr.item.options[sl+1].text = oText;
			document.frmBlockMgr.item.options[sl+1].value = oValue;
			document.frmBlockMgr.item.selectedIndex++;
		}
	} else {
		alert("you must select an item to move");
	}

	return false;
}

function doSubBlock()
{
	blocksVal = "";
	for (i=0;i<document.frmBlockMgr.item.length;i++) {
		if (i!=0) { blocksVal += ","; }
		blocksVal += document.frmBlockMgr.item.options[i].value;
	}
	document.frmBlockMgr["_items"].value = blocksVal;

	return true;
}

//  same fns again for faq & section managers!
function orderModule(down)
{
	sl = document.fm.item.selectedIndex;
	if (sl != -1) {
		oText = document.fm.item.options[sl].text;
		oValue = document.fm.item.options[sl].value;
		if (sl > 0 && down == 0) {
			document.fm.item.options[sl].text = document.fm.item.options[sl-1].text;
			document.fm.item.options[sl].value = document.fm.item.options[sl-1].value;
			document.fm.item.options[sl-1].text = oText;
			document.fm.item.options[sl-1].value = oValue;
			document.fm.item.selectedIndex--;
		} else if (sl < document.fm.item.length-1 && down == 1) {
			document.fm.item.options[sl].text = document.fm.item.options[sl+1].text;
			document.fm.item.options[sl].value = document.fm.item.options[sl+1].value;
			document.fm.item.options[sl+1].text = oText;
			document.fm.item.options[sl+1].value = oValue;
			document.fm.item.selectedIndex++;
		}
	} else {
		alert("you must select an item to move");
	}
	return false;
}

function doSub()
{
	val = '';
	for (i=0;i<document.fm.item.length;i++) {
		if (i!=0) {
			val += ",";
		}
		val += document.fm.item.options[i].value;
	}
	document.fm[".items"].value = val;
	return true;
}

var delimiter = ":";

function MoveOption (MoveFrom, MoveTo, ToDo)
{
	var SelectFrom = eval('document.main_form.'+MoveFrom);
	var SelectTo = eval('document.main_form.'+MoveTo);
	var SelectedIndex = SelectFrom.options.selectedIndex;
	var container;
	if (ToDo=='Add') {
		container=eval('document.main_form.' + ToDo + MoveTo);
	}
	if (ToDo=='Remove') {
		container=eval('document.main_form.' + ToDo + MoveFrom);
	}
	if (SelectedIndex == -1) {
		alert("Please select a permission(s) to move.");
	} else {
		for (i=0; i<SelectFrom.options.length; i ++) {
			if (SelectFrom.options[i].selected) {
				var name = SelectFrom.options[i].text;
				var ID = SelectFrom.options[i].value;
				SelectFrom.options[i] = null;
				SelectTo.options[SelectTo.options.length]= new Option (name,ID);
				i=i-1;
				/*if (ToDo=='Add'||ToDo=='Remove') {
				container.value=container.value+name+'^' + ID + delimiter;
				}*/
			}
		}
	}
}

function checkDuplicates (AddListContainer, RemoveListContainer)
{
	var AddList = eval('document.main_form.'+AddListContainer);
	var RemoveList = eval('document.main_form.'+RemoveListContainer);
	var TempAddList = AddList.value;
	var TempRemoveList = RemoveList.value;
	if (TempAddList>''&&TempRemoveList>'') {
		TempAddList = TempAddList.substring(0,TempAddList.length-1);
		TempRemoveList = TempRemoveList.substring(0,TempRemoveList.length-1);
		var AddArray = TempAddList.split(delimiter);
		var RemoveArray = TempRemoveList.split(delimiter);
		for (i=0; i<AddArray.length; i++) {
			for (j=0; j<RemoveArray.length; j++) {
				if (AddArray[i]==RemoveArray[j]) {
					AddArray[i]='';
					RemoveArray[j]='';
					break;
				}
			}
		}
		AddList.value='';
		for (i=0; i<AddArray.length; i++) {
			if (AddArray[i]>'') {
				AddList.value = AddList.value + AddArray[i] + delimiter;
			}
		}
		RemoveList.value='';
		for (i=0; i<RemoveArray.length; i++) {
			if (RemoveArray[i]>'') {
				RemoveList.value = RemoveList.value + RemoveArray[i] + delimiter;
			}
		}
	}
}

function lockChanges()
{
	checkDuplicates('AddfrmRolePerms','RemovefrmRolePerms');
}

// simple confirm box, incl list of any child node(s) of selected node(s)
function confirmDelete(item, formName)
{
	var evalFormName = eval('document.' + formName)
	var flag = false;
	var childrenPresent = false;
	var childNodes = new Array();
	var toDelete = '';
	var msg = '';
	var childrenString = '';
	for (var cont = 0; cont < evalFormName.elements.length; cont++) {
		var elType = evalFormName.elements[cont].type
		if (elType == 'checkbox' && evalFormName.elements[cont].checked == true && evalFormName.elements[cont].name != ''){
			flag = true;
			var elementString = evalFormName.elements[cont].name;
			var openBracket = elementString.indexOf("[") + 1;
			var closeBracket = elementString.lastIndexOf("]");
			nodeId = elementString.substring(openBracket,closeBracket);
			toDelete += nodeArray[nodeId][2] + ", ";
			if (!contains(nodeId,childNodes)){
				childNodes[childNodes.length] =  nodeId;
			}

			for(id in nodeArray)
			{
				if ( nodeArray[id][0] > nodeArray[nodeId][0] && nodeArray[id][1] < nodeArray[nodeId][1]  && nodeArray[id][4] == nodeArray[nodeId][4]){
					if (!contains(id,childNodes)){
						childNodes[childNodes.length] = id;
						childrenPresent = true;
					}
				}
			}
		}
	}
	toDelete = toDelete.substring(0,toDelete.lastIndexOf(","));
	msg = "Are you sure you wish to permanently delete the " + item + "(s): " + toDelete + "?\n(If you anticipate using a " + item + " later, simply mark it \"disabled\" instead; it will no longer be displayed but can easily be reactivated later.)\n";

	if (childrenPresent == true){
		for(b=0;b<childNodes.length;b++){
			var indent = '';
			for(g=1;g<nodeArray[childNodes[b]][3];g++){
				indent = indent + "\t";
			}
			childrenString = childrenString + indent + "-" + nodeArray[childNodes[b]][2] + "\n";
		}
		msg = msg + "\nCAUTION: One or more of the " + item + "s you selected contains subordinate " + item + "s. If you proceed, all of the following " + item + "s will be deleted:\n\n" + childrenString + "\nAre you sure you want to do this?";
	}

	if (flag == false) {
		alert('You must select an element to delete')
		return false
	}
	var agree = confirm(msg);
	if (agree)
	return true;
	else
	return false;
}

// used by confirmDelete(); sees if array already contains a value
function contains(tmpVal, tmpArray)
{
	for (j=0; j < tmpArray.length; j++) {
		if (tmpArray[j] == tmpVal) {
			return true;
		}
	}
	return false;
}

/**
* Checks/unchecks all tables, modified from phpMyAdmin
*
* @param   string   the form name
* @param   boolean  whether to check or to uncheck the element
*
* @return  boolean  always true
*/
function setCheckboxes(the_form, element_name, do_check)
{
	var elts      = (typeof(document.forms[the_form].elements[element_name]) != 'undefined')
	? document.forms[the_form].elements[element_name]
	: '';
	var elts_cnt  = (typeof(elts.length) != 'undefined')
	? elts.length
	: 0;
	//var applyToWholeForm =
	//alert(element_name)


	if (elts_cnt) {
		for (var i = 0; i < elts_cnt; i++) {
			elts[i].checked = do_check;
		}
		//  tick all checkboxes per form
	} else if (element_name == false) {
		var f = document.forms[the_form];
		for (var c = 0; c < f.elements.length; c++)
		if (f.elements[c].type == 'checkbox') {
			f.elements[c].checked = do_check;
		}

	} else {
		elts.checked        = do_check;
	}
	return true;
}

/**
* Launches the above function depending on the status of a trigger checkbox
*
* @param   string   the form name
* @param   string   the element name
* @param   boolean   the status of triggered checkbox
*
* @return  void
*/
function applyToAllCheckboxes(formName, elementName, isChecked)
{
	if (isChecked) {
		setCheckboxes(formName, elementName, true)
	} else {
		setCheckboxes(formName, elementName, false)
	}
}


var doBeforeSoumettre = new Array();
function soumettre () {

	// Execution de fonctions avant de soumettre un formulaire
	if (typeof doBeforeSoumettre !== undefined ) {
		//debugger;
		try  {
			for (var i=0; i<doBeforeSoumettre.length; i++) {
				doBeforeSoumettre[i].apply();
			}
		}		
		catch( e ){
			alert('Une fonction qui devrait s executer avant la soummission du formulaire a leve une exeption : ' + e.message);
		}
	}
	
	if(document.getElementById('makeCall')){
		//document.getElementById('localconnectionDialog').focus();
		//alert(document.getElementById('makeCall').value);
		if(document.getElementById('makeCall').value == 1){
			//alert('soumettre2');
			/*var lg = tabOnglet.length;
			for(var i=0;i<lg;i++){
			alert(tabOnglet[i]);
			document.getElementById(tabOnglet[i]).style.display = 'block';
			}*/
			outputMsgToFlash();
		}
	}

	if((document.getElementById('makeCall') && document.getElementById('makeCall').value == 0) || !document.getElementById('makeCall')) {
		//alert('soumettre3');

		if(document.getElementById('checkBox')){
			checkBox('focus');
		}
		if(document.getElementById('checkBox')){
			checkBox('focus')
		}
		if( validateForm( 'main_form' ) ){
			var oSelect = document.getElementById('main_form').getElementsByTagName("SELECT");
			for(var i=0;i<oSelect.length;i++){
				if(oSelect[i].multiple==true){
					oSelect[i].name = oSelect[i].name+'[]';
					if(oSelect[i].className=='selector'){
						NbCol1 = oSelect[i].length;
						// On lance une boucle pour selectionner tous les items
						for(a=0; a<NbCol1; a++){
							oSelect[i].options[a].selected = true;
						}
					}
				}
			}
			var oInput = document.getElementById('main_form').getElementsByTagName("INPUT");
			for(var i=0;i<oInput.length;i++){
				//alert(oInput[i].name);
				if(oInput[i].type=="checkbox"){
					oInput[i].name = oInput[i].name+'[]';
				}
			}
			
			//alert("focus : "+document.getElementById('logo').value);
			document.main_form.submit();
		}
	}
}
function ToggleMenu (elmnt){
	var oSSrub = getElementsByClassName(document.getElementById('menu_back'), "ul", "ulssrub");
	for( var i=0; i<oSSrub.length; i++ ){
		if (oSSrub[i].style.display !='none'){
			Effect.toggle(oSSrub[i].id,'blind');
		};
	}
	Effect.toggle(elmnt,'blind');
	return false;
}
//FLASH TO JS and viseversa
function getDocRoot() {
	if (navigator.appName.indexOf("Microsoft") != -1)
	return window;
	else
	return document;
}
function outputMsgToFlash()
{
	var root = getDocRoot();
	//alert(root);
	//alert('onValidSwf');
	// invoke method 'swfOnValid' in the Flash movie:
	root.framework.swfOnValid();
}
function onValidSwf(str,end) {
	//alert(end);
	//document.getElementById(nom).value = str;
	//alert(str+' '+nom+' '+end);
	//alert(end);	
	if(end == true){
		document.getElementById('makeCall').value = 0;
		fillChamp(str);
		//soumettre ();
	}
}
//
function fillChamp(str) {
	//alert(obj);
	var objJson = str.parseJSON();
	for (var i in objJson) {
		if(document.getElementById(i)){
			//alert(i);
			//alert(objJson[i]);
			document.getElementById(i).value = objJson[i];
		}

	}	
}
//

function tempDialog()
{
	//folocald.write("div_localconnection_dialog");
}

function alertDelete(str)
{
	if(confirm('Delete selected items ?')) {
		document.location.href = str;
	}
}

function soumettreAuService(service)
{
	mainForm = document.getElementById('main_form');
	mainForm.action = service;
	soumettre();
}

function soumettreSansValidationAuService(service)
{
	mainForm = document.getElementById('main_form');
	mainForm.action = service;
	mainForm.submit();;
}

/*
*
*  Gets a string of the selected values of a multipleSelect(id) separated by ',', and set the hidden field to that string
*
*/
function getMultipleSelected(id) {
	var selectedList;
	var selectBox;

	selectedList = "";
	selectBox = document.getElementById(id + '_select');
	for (var i=0; i<selectBox.options.length; i++) {
		if (selectBox.options[i].selected==true) {
			selectedList += "," + selectBox.options[i].value ;
		}
	}

	//alert(selectedList);
	document.getElementById(id).value = selectedList;
}


function soumettreWithMultipleValues(){
	if(document.getElementById('auteur')){
		getMultipleSelected('auteur');
	}
	if(document.getElementById('taxonomie')){
		getMultipleSelected('taxonomie');
	}
	if(document.getElementById('destinataire')){
		getMultipleSelected('destinataire');
	}
	soumettre();
}

/*
* Pour forcer les FCK a etre editables
*/
function FCKeditor_OnComplete( editorInstance )
{
	if (navigator.appName=="Microsoft Internet Explorer"){
		editorInstance.onselectionchange = makeFCKEditable;
	}else{
		editorInstance.Events.AttachEvent( 'OnSelectionChange', makeFCKEditable) ;
	}
}
function makeFCKEditable (editorInstance) {
	editorInstance.MakeEditable();
}

function changeFilter(url){
	obj = document.getElementById('fleche-filter');
	//alert(obj.src);
	if(obj.src == url+'css/admin/images/btn/btn-filter-down.gif'){
		obj.src = url+'css/admin/images/btn/btn-filter-up.gif';
	}else{
		obj.src = url+'css/admin/images/btn/btn-filter-down.gif';
	}
}
function navigateURL(zurl,strobj){
	if(isCompatible()){
		var obj = eval(strobj);
		obj.startRequest(zurl);
	}else{
		document.location.href = zurl;
	}
}
function isCompatible(){
	var sAgent = navigator.userAgent.toLowerCase() ;

	// Internet Explorer
	if ( sAgent.indexOf("msie") != -1 && sAgent.indexOf("mac") == -1 && sAgent.indexOf("opera") == -1 )
	{
		var sBrowserVersion = navigator.appVersion.match(/MSIE (.\..)/)[1] ;
		return ( sBrowserVersion >= 5.5 ) ;
	}

	// Gecko
	if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 )
	return true ;

}
function PopupCentrerFilemanager(page) {
	var hauteur = screen.height*0.8;
	var largeur = screen.width*0.8;
	var top=(screen.height-hauteur)/2;
	var left=(screen.width-largeur)/2;
	window.open(page,"","top="+top+",left="+left+",width="+largeur+",height="+hauteur+",'toolbar=no,location=no,scrollbar=no,status=no,menubar=no'");
}
Array.prototype.in_array = function(val) {
	for (var i in this) {
		if (this[i] == val) return true;
	}
	return false;
};
function PopupCentrer(page,largeur,hauteur,options) {
	var top=(screen.height-hauteur)/2;
	var left=(screen.width-largeur)/2;
	window.open(page,"","top="+top+",left="+left+",width="+largeur+",height="+hauteur+","+options);
}