/***************************************************************************/
/*  createItem : Créer un nouvel item                                      */
/***************************************************************************/
//alert(navigator.appName);
function createItem(itemId,parentId,label,vis,fileName){
	//new item
	if(label=="#new_page#") {
		label = "page_"+itemId;
		fileName = "page_"+itemId;
	}
       //toogle parent fileName
	if(parentId!="0") {
		var parent = document.getElementById(parentId);
		if(!has_children(parent)) {
			ch1 = parent.firstChild.nextSibling.nextSibling.nextSibling;
			ch2 = ch1.nextSibling;
			ch3 = ch1.nextSibling.nextSibling.nextSibling.nextSibling;
			parent.removeChild(ch1);
			parent.removeChild(ch2);
			parent.removeChild(ch3);	
		}
	}

       var item=document.createElement("div");
       item.setAttribute("id", itemId);
       item.setAttribute("parentId", parentId);
       item.setAttribute("style", "position:relative;left:15px");

       //label
       var label_text=document.createTextNode("   Libellé: ");
       var label_input=document.createElement("input");
       label_input.setAttribute("name", itemId+"_label_value");
       label_input.setAttribute("id", itemId+"_label_value");
       label_input.setAttribute("type", "text");
       label_input.setAttribute("size", "25");
       label_input.setAttribute("value", label);
       //fileName
       var fileName_text=document.createTextNode("   Id: ");
       var fileName_input=document.createElement("input");
       fileName_input.setAttribute("name", itemId+"_filename_value");
       fileName_input.setAttribute("id", itemId+"_filename_value");
       fileName_input.setAttribute("type", "text");
       fileName_input.setAttribute("size", "25");
       fileName_input.setAttribute("value", fileName);
       fileName_input.onkeypress=function(e){ return checkKeyPressed(e); }
       //fileName_input.setAttribute("style", "margin:0;height:8px");

	   //visible dans le menu d'utilisateur
	   //var visible_text=document.createTextNode("Visible ? ");
       var visible_checkbox=document.createElement("input");
       visible_checkbox.setAttribute("name", itemId+"_visible_value");
       visible_checkbox.setAttribute("type", "checkbox");
       //visible_checkbox.setAttribute("style", "margin:0;height:8px");
	if(vis=="1") {
		visible_checkbox.setAttribute("checked", "checked");
	}	

       //bouton remove
       var remove_btn=document.createElement("img");
       remove_btn.setAttribute("src","/img/delete.png");
       remove_btn.setAttribute("alt","Supprimer");
       remove_btn.setAttribute("title","Supprimer");
       remove_btn.onclick=function(){ removeItem(this.parentNode); }
       //remove_btn.setAttribute("onClick","removeItem(this.parentNode)");
       //remove_btn.setAttribute("style", "margin:0;height:8px");
       remove_btn.setAttribute("style", "margin-left:5px;cursor:pointer");

       //bouton add child
       var add_child_btn=document.createElement("img");
       add_child_btn.setAttribute("src","/img/add_child.png");
       add_child_btn.setAttribute("alt","Ajouter sous-rubrique");
       add_child_btn.setAttribute("title","Ajouter sous-rubrique");
       add_child_btn.onclick=function(){ addChild(this.parentNode); }	
       //add_child_btn.setAttribute("onClick","addChild(this.parentNode)");
       //add_child_btn.setAttribute("style", "margin:0;height:8px");
       add_child_btn.setAttribute("style", "margin-left:5px;cursor:pointer");

       //bouton insert item
       var insert_btn=document.createElement("img");
       insert_btn.setAttribute("src","/img/insert2.png");
       insert_btn.setAttribute("alt","Insérer rubrique");
       insert_btn.setAttribute("title","Insérer rubrique");
       insert_btn.onclick=function(){ insertItem(this.parentNode); }
       //insert_btn.setAttribute("onClick","insertItem(this.parentNode)");
       //insert_btn.setAttribute("style", "margin:0;height:8px");
       insert_btn.setAttribute("style", "margin-left:5px;cursor:pointer");

       //bouton up item
       var up_btn=document.createElement("img");
       up_btn.setAttribute("src","/img/up.png");
       up_btn.setAttribute("alt","Déplacement vers le haut");
       up_btn.setAttribute("title","Déplacement vers le haut");
       up_btn.onclick=function(){ upItem(this.parentNode); }
       //up_btn.setAttribute("onClick","upItem(this.parentNode)");
       //up_btn.setAttribute("style", "margin:0;height:8px");
       up_btn.setAttribute("style", "margin-left:5px;cursor:pointer");

       //bouton down item
       var down_btn=document.createElement("img");
       down_btn.setAttribute("src","/img/down.png");
       down_btn.setAttribute("alt","Déplacement vers le bas");
       down_btn.setAttribute("title","Déplacement vers le bas");
       down_btn.onclick=function(){ downItem(this.parentNode); }
       //down_btn.setAttribute("onClick","downItem(this.parentNode)");
       //down_btn.setAttribute("style", "margin:0;height:8px");
       down_btn.setAttribute("style", "margin-left:5px;cursor:pointer");


       //item.appendChild(visible_text);
       item.appendChild(visible_checkbox);
       item.appendChild(label_text);
       item.appendChild(label_input);
       item.appendChild(fileName_text);
       item.appendChild(fileName_input);
       item.appendChild(add_child_btn);
       item.appendChild(insert_btn);
       item.appendChild(remove_btn);
       item.appendChild(up_btn);
       item.appendChild(down_btn);

	//fix bug IE
        if(vis=="1") {
		if(navigator.appName=='Microsoft Internet Explorer')
		{
			visible_checkbox.checked=true;
		}
	}

return item;
}

/***************************************************************************/
/*  nbItems : Récupérer le nombre d items                                  */
/***************************************************************************/
function get_nbItems(){
	var allDiv=document.getElementsByTagName("div");
    var allDivL=allDiv.length;
	var i, ret=0;
    for(i=0;i<allDivL;i++)
    {
     	if(allDiv[i].getAttribute('parentId')!=null)
        	ret++;

    }
return ret;
}

/***************************************************************************/
/*  get_next_itemId : Récupérer item suivant                            */
/***************************************************************************/
function get_next_itemId(){
	var allDiv=document.getElementsByTagName("div");
    var allDivL=allDiv.length;
	var i, ret=0, currId;
    for(i=0;i<allDivL;i++)
    {
     	if(allDiv[i].getAttribute('parentId')!=null)
        {
            currId=parseInt(allDiv[i].getAttribute('id'));
        	if(currId>ret)
            	ret=currId;
        }

    }
    ret=ret+1;
return (ret>(get_last_itemId()+1))?ret:(get_last_itemId()+1);
}

/***************************************************************************/
/*  get_form : Récupérer le form                          */
/***************************************************************************/
function get_form(){
	return document.getElementById("update_menu");
}

/***************************************************************************/
/*  get_root : Récupérer la racine dans le formulaire                            */
/***************************************************************************/
function get_root(){
	return document.getElementById("0");
}

/***************************************************************************/
/*  get_parentId : Récupérer le parentId                            */
/***************************************************************************/
function get_parentId(item){
	return item.getAttribute('parentId');
}

/***************************************************************************/
/*  removeItem : SUPPRIMER un item                                         */
/***************************************************************************/
function removeItem(item)
{
  var parentId = get_parentId(item);
  var parent = item.parentNode;
	//il a des enfants?
  if(has_children(item))
  {
   	alert("Cette rubrique a des sous-rubriques!\nSuppression impossible!");
    return;
  }
  // delete dans la base si existe
  var page=item.getAttribute('id');
  if (confirm('Confirmer?'))
  {
  	//sendReq('ajax/delete','toBeDeleted', page);
  	// handleResponse();
  	// delete item dans le menu
  	item.parentNode.removeChild(item);
	//parent
	if(parentId!="0") {
		var parent = document.getElementById(parentId);
		if(!has_children(parent)) {

       //fileName
       var fileName_text=document.createTextNode("   Id: ");
       var fileName_input=document.createElement("input");
       fileName_input.setAttribute("name", page+"_filename_value");
       fileName_input.setAttribute("id", page+"_filename_value");
       fileName_input.setAttribute("type", "text");
       fileName_input.setAttribute("size", "25");
       fileName_input.setAttribute("value", "page_"+parentId);
       //fileName_input.setAttribute("style", "margin:0;height:8px");

       //bouton remove
       var remove_btn=document.createElement("img");
       remove_btn.setAttribute("src","/img/delete.png");
       remove_btn.setAttribute("alt","Supprimer");
       remove_btn.setAttribute("title","Supprimer");
       remove_btn.onclick=function(){ removeItem(this.parentNode); }
       //remove_btn.setAttribute("onClick","removeItem(this.parentNode)");
       //remove_btn.setAttribute("style", "margin:0;height:8px");
       remove_btn.setAttribute("style", "margin-left:5px;cursor:pointer");

       parent.insertBefore(remove_btn,parent.firstChild.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling);
       ch1 = parent.firstChild.nextSibling.nextSibling.nextSibling;
       parent.insertBefore(fileName_text,ch1);
       ch1 = parent.firstChild.nextSibling.nextSibling.nextSibling.nextSibling;
       parent.insertBefore(fileName_input,ch1);	
		}
	}
  }
}

/***************************************************************************/
/*  insertItem : INSERER un item                                           */
/***************************************************************************/
function insertItem(item)
{
  var itemId=item.getAttribute('id');
  var where=item.nextSibling;
  var new_item=createItem(get_next_itemId(),get_parentId(item),"#new_page#","0","");
  if(where!=null)
  	item.parentNode.insertBefore(new_item,where);
  else
  	item.parentNode.appendChild(new_item);

}

/***************************************************************************/
/*  addItem : AJOUTER un Item                                              */
/***************************************************************************/
function addItem(itemId,parentId,label,vis,fileName)
{
	if(itemId=="0")
       		itemId=get_next_itemId();
	var newIt = createItem(itemId,parentId,label,vis,fileName);
    	get_form().insertBefore(newIt,document.getElementById("br"));	
}

/***************************************************************************/
/*  addChild : AJOUTER un item ENFANT                                      */
/***************************************************************************/
function addChild(item)
{
  var itemId=item.getAttribute('id');
  var new_item=createItem(get_next_itemId(),itemId,"#new_page#","0","");
  item.appendChild(new_item);
}

function has_children(item){
 	return (item.lastChild.nodeName=="DIV");
}

function is_last(item){
 	if(item.getAttribute('parentId')!="0")
    {
     	return ((item.parentNode.lastChild.getAttribute("id")==item.getAttribute("id"))?1:0);
    }
return 0;
}

function get_nbChildren(item){
	return (item.childNodes.length-5);
}

/***************************************************************************/
/*  item2XML :                     */
/***************************************************************************/
function item2XML(item)
{
	var label, fileName;
	var it="", elt;
    var hasChildren = has_children(item);
    if(hasChildren)
    	it+="<items";
    else
    	it+="<item";
    if(item.firstChild.checked==true)
    	it+="_v";
    it+=" ";
    it+="id='"+item.getAttribute('id')+"' ";
    it+="parentId='"+item.getAttribute('parentId')+"' ";
    label=item.firstChild.nextSibling.nextSibling.value;
    label=label.replace(/"/g,"'");
    it+='label="'+label+'" ';
    if(!hasChildren) {
    	fileName=item.firstChild.nextSibling.nextSibling.nextSibling.nextSibling.value;
    	it+='fileName="'+fileName+'" ';
    }
    it+="vis='"+((item.firstChild.checked==true)?1:0)+"'>";
    if(hasChildren)
    {
       elt=item.firstChild.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling;
       while(elt!=null)
       {
           //alert(elt.getAttribute('id'));
           it+=item2XML(elt);
           elt=elt.nextSibling;
       }
    }
    if(hasChildren)
    	it+="</items";
    else
    	it+="</item";
    if(item.firstChild.checked==true)
    	it+="_v";
    it+=">";
return it;
}

/***************************************************************************/
/*  menu2XML :                     */
/***************************************************************************/
function menu2XML()
{
	var i, m2xml="";
    var elts=get_form().childNodes;
    var nelts=elts.length;
    m2xml+='<root>';
    for(i=0;i<nelts;i++)
    {
      	if(elts[i].nodeName=="DIV" && elts[i].getAttribute("id")!="0")
        {
    		if(elts[i].getAttribute('parentId')!=null)
            {
				m2xml+=item2XML(elts[i]);
            }
		}
    }
    m2xml+='<\/root>';
//alert(m2xml);
return m2xml;
}

/***************************************************************************/
/*  checkAndSubmit : Vérifier le menu et le soumettre                      */
/***************************************************************************/
function checkAndSubmitMenu()
{
	//SUBMIT
    var itemsIds = getFilesNames();
    var fileName;
    //alert(itemsIds.length);
    //itemsIds.showItemsIds();
    fileName = itemsIds.isDoubleIds();
    if(fileName) { alert ("L\'id : " + fileName+" est en double!"); return false;}
    get_form().itemsXML.value=menu2XML();
 	get_form().submit();
return true;
}

function back_to_menu()
{
  location.href = "cms/";
}

function is_first_item(item){
	var itemId=item.getAttribute('id');
	if(item.getAttribute('parentId')=="0"){
		var allDiv=document.getElementsByTagName("div");
    		var allDivL=allDiv.length;
		var i;
    		for(i=0;i<allDivL;i++)
    		{
     			if(allDiv[i].getAttribute('parentId') == "0")
				return (allDiv[i].getAttribute("id") == itemId);
		}
	}
	else
return(item.parentNode.firstChild.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.getAttribute("id")==itemId);
}

function is_last_item(item){
	var itemId=item.getAttribute('id');
	if(item.getAttribute('parentId')=="0"){
		return (document.getElementById("br").previousSibling.previousSibling.getAttribute("id") == itemId);
	}
	else
		return(item.parentNode.lastChild.getAttribute("id")==itemId);
}

function upItem(item){
	if(is_first_item(item)) return;
	var where=item.previousSibling;
	var new_item = item.cloneNode(true);
	cloneItemEvents(new_item);
  	item.parentNode.insertBefore(new_item,where);
	item.parentNode.removeChild(item);
}

function downItem(item){
	if(is_last_item(item)) return;
	var where=item.nextSibling.nextSibling;
	var new_item = item.cloneNode(true);
	cloneItemEvents(new_item);
  	item.parentNode.insertBefore(new_item,where);
	item.parentNode.removeChild(item);
}

function cloneItemEvents(item){
	var hasChildren = has_children(item);
	var theItem=item.firstChild.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling;
	var theFolder=item.firstChild.nextSibling.nextSibling.nextSibling;
	//setItemEvents(theItem,hasChildren);

	//recursively
	if(hasChildren) {
		setItemEvents(theFolder,hasChildren);	
		elt=item.firstChild.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling;	
		//alert("debug"+elt.getAttribute('id'));	
		while(elt!=null)
       		{
           		//alert(elt.getAttribute('id'));
           		cloneItemEvents(elt);
			//alert("debug1");	
			if(elt!=null) { elt=elt.nextSibling; }
			//alert("debug2");
       		}
    	} else {
		setItemEvents(theItem,hasChildren);
	}
}

function setItemEvents(theItem,hasChildren){
	var theItemT=theItem;
    	//bouton add child
       	theItemT.onclick=function(){ addChild(this.parentNode); }

       	//bouton insert item
       	theItemT.nextSibling.onclick=function(){ insertItem(this.parentNode); }	
	theItemT=theItemT.nextSibling.nextSibling;
	if(!hasChildren){
       		//bouton remove
       		theItemT.onclick=function(){ removeItem(this.parentNode); }
		theItemT=theItemT.nextSibling;
	}

       	//bouton up item
       	theItemT.onclick=function(){ upItem(this.parentNode); }

       	//bouton down item
       	theItemT.nextSibling.onclick=function(){ downItem(this.parentNode); }
}

function checkKeyPressed(evt)
{
  evt = (evt) ? evt : (window.event) ? event : null;
  if (evt)
  {
    var charCode = (evt.charCode) ? evt.charCode :
                   ((evt.keyCode) ? evt.keyCode :
                   ((evt.which) ? evt.which : 0));
    if ((charCode >= 97 && charCode <= 122) || (charCode >= 48 && charCode <= 57) || charCode == 8 || charCode == 95) return true;
return false;
  }    
}

function getFilesNames()
{

    var i, filename;
    var ItemsIds = new Array();
    var allDiv=document.getElementsByTagName("div");
    var allDivL=allDiv.length;
    for(i=0;i<allDivL;i++)
    {
     	if(allDiv[i].getAttribute('parentId')!=null && !has_children(allDiv[i]))
        {
            ItemsIds.push(allDiv[i].firstChild.nextSibling.nextSibling.nextSibling.nextSibling.value);
        }

    }
return ItemsIds;
}

Array.prototype.isDoubleIds = function(p_val)
{
    var fileName, i , l;
    l = this.length;

    for(i = 0; i < l; i++)
    {
	fileName = this[0];
//alert(fileName);
	this.shift();
//alert(this.length);
      	if(this.in_array(fileName))
        {
    	    return fileName;
	}
	l = this.length;
    }
    return false;   

}

Array.prototype.in_array = function(p_val) {
	for(var i = 0, l = this.length; i < l; i++) {
		if(this[i] == p_val) {
			return true;
		}
	}
	return false;
}

Array.prototype.showItemsIds = function() {
	for(var i = 0, l = this.length; i < l; i++) {
		alert(this[i]);
	}
	return false;
}

