var meniu = "[]".evalJSON(true);
var meniu_json = "";
var k=0;

var current_edit = 0;
var current_edit_option = "";
var current_edit_i = 0;
var current_edit_j = 0;
var nr_culori = 5;

var a_meniu_culori;
a_meniu_culori = new Array();
a_meniu_culori[0] = "cec8b5";
a_meniu_culori[1] = "d4a7a7";
a_meniu_culori[2] = "a6d1d4";
a_meniu_culori[3] = "bdd4a6";
a_meniu_culori[4] = "cccb96";
a_meniu_culori[5] = "cc96c4";  


url = 'http://'+ document.location.host +'/ajax_menu.php';
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function json_escape_bad_chars(s) {
 if(!s.match){s=String(s);}
 var m = {'\b':"\\b", '	':"\\t", '\n':"\\n", '\f':"\\f", '\r':"\\r", '"':"\\\"", '\\':"\\\\"};
	if (/["\\\x00-\x1f]/.test(s)) {
	  return s.replace(/([\x00-\x1f\\"])/g, function (a, b) {var c = m[b];if (c) {return c;}c = b.charCodeAt();return "\\u00" + Math.floor(c / 16).toString(16) + (c % 16).toString(16);});
	}
	return s;
}

function outputMenuJSON(ob_id)
{
	meniu_json = Object.toJSON(meniu);
	$(ob_id).update(Object.toJSON(meniu_json));
}

function addEvent(obj, type, fn) {
	if( obj.attachEvent ) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function(){obj["e"+type+fn]( window.event );};
			obj.attachEvent( "on"+type, obj[type+fn] );
	} else {
			obj.addEventListener( type, fn, true );
	};
}

function initMenuSortable()
{
	if( $('menu') )//daca exista
	{
		Sortable.create('menu',{//categorii
			tag:'div',
			ghosting:false,
			constraint:'vertical',	 					
			starteffect:function(element){
				if(current_edit == 1)
				{
					if(current_edit_option == "subcategory") changeSubcategorieValue("save", current_edit_i, current_edit_j);			
					if(current_edit_option == "category") changeCategorieValue("save", current_edit_i);
				}	
			},
			onChange:function(element){
				var x = new Array();
				var i2;										
				var a_ordine = Sortable.sequence(element.parentNode);
				$('output').update(a_ordine);							
			}		
		});	
	}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function initMenuSubcategorySortable(ob_id, i)
{
	Sortable.create(ob_id,{
		tag:'li',
		ghosting:false,
		constraint:'vertical',	 					
		index:i,//custom - save i					
		starteffect:function(element){
			if(current_edit == 1)
			{
				if(current_edit_option == "subcategory") changeSubcategorieValue("save", current_edit_i, current_edit_j);			
				if(current_edit_option == "category") changeCategorieValue("save", current_edit_i);
			}	
		},
		onChange:function(element){																																									
			
			var a_ordine = Sortable.sequence(element.parentNode)
			$('output').update( this.index +' : '+a_ordine);								
		}
		
	});
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function initMenus() {
	/*Activate/deactivate menus*/
	
	$$('.smenu').each(function(s,index){
		addEvent(s,'click',function(){
			if($('smenu'+s.id.replace('a','')).visible()){
				//do nothing
			} else {
				$$('.smenu').each(function(s,index){
					if($('smenu'+s.id.replace('a','')).visible()) {
						//$('smenu'+s.id).hide(); //Prototype Method
						Effect.BlindUp($('smenu'+s.id.replace('a','')), {duration:0.5}); //ScriptAculoUs Method
					}
				});
				//$('smenu'+s.id).show(); //Prototype Method
				Effect.BlindDown($('smenu'+s.id.replace('a','')), {duration:0.5}); //ScriptAculoUs Method
			}
		});
	});
	
	
	/*All menu hiden by default*/
	/*
	$$('.smenu').each(function(s,index){
		if($('smenu'+s.id.replace('a','')).visible()) {
			$('smenu'+s.id.replace('a','')).hide();
		}
	});
	*/
	
	/*effects on menu*/
	
	$$('dl#menu dt').each(function(s,index){
		addEvent(s,'hover',function(){
			new Effect.Highlight(s, {duration:0.5, startcolor:'#333333', endcolor:'#999999', restorecolor:'#999999'});
		});
	});
	
}

addEvent(window, 'load', initMenus);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



function saveMenu()
{
	if(current_edit == 1)
	{
		if(current_edit_option == "subcategory") changeSubcategorieValue("save", current_edit_i, current_edit_j);			
		if(current_edit_option == "category") changeCategorieValue("save", current_edit_i);
	}

	//outputMenuJSON('output');		
	
	//prelucrare meniu
	
	meniu_json = Object.toJSON(meniu);
	var meniu_tmp = new Array();		
			
	var s="";
	var a_ordine_submeniu;	
	var i_nou, j_nou;
	var a_ordine_meniu = Sortable.sequence("menu");
	
	for(var i=0; i<a_ordine_meniu.length; i++)
	{
		i_nou = a_ordine_meniu[i];
		s +=" "+i_nou+"{"; //log
		
		meniu_tmp[i] = Object.clone(meniu[i_nou]); //introduc in meniu_tmp
		a_ordine_submeniu = Sortable.sequence("subcateg"+i_nou);		
		meniu_tmp[i].subcategorii = new Array();
		for(var j=0; j<a_ordine_submeniu.length; j++)
		{
			j_nou= parseInt(a_ordine_submeniu[j].substring(10, a_ordine_submeniu[j].length));//pozitia primoridala - il folosim ca index element lista
			s += j_nou+", ";//log
			
			meniu_tmp[i].subcategorii[j] = Object.clone(meniu[i_nou].subcategorii[j_nou]); //introduc in meniu_tmp			
		}
		//s += " "+a_ordine_submeniu+" ";
		s +="} ";//log
		
		Sortable.destroy("subcateg"+i_nou);
	}	
	Sortable.destroy("menu");
	
	
	$('container_meniu').update("");	

	meniu_json = Object.toJSON(meniu_tmp);
	$('output').update("Save: "+s+ "<br><br>"+meniu_json);	
	
	if(mode == 'edit' && $('meniu_control')) $('meniu_control').style.display = "none";
	
	new Ajax.Request(url, {
	  asynchronous: true,
	  evalJSON:true,
	  encoding: 'UTF-8',
	  parameters: {url: location_url, data: meniu_json },
	  method: 'post',	  
	  onSuccess: function(transport) {
		  	ret = parseInt(transport.responseText);
			if(ret == 1)
			{				
				loadMenu(mode);
				alert("Salvat cu succes!");  
			}else
			{
				alert("Eroare, datele nu au fost salvate!");  
			}
	  }
	});
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function destroy_category(id, i)
{
	$(id).remove(id);
	meniu[i] = undefined;
	
	meniu_json = Object.toJSON(meniu);
$('output').update(Object.toJSON(meniu_json));		
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function destroy_subcategory(id, i, j)
{
	$(id).remove();
	meniu[i].subcategorii[j] = undefined;
	
	meniu_json = Object.toJSON(meniu);
$('output').update(Object.toJSON(meniu_json));		
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function changeObType(ob_id, ob_dest_type)//modifica la nivel de output si returneaza valoarea modificata
{	
	
	var ob_tmp;
	var saved_value = "";
	
	////////////////////////////////	
	
	if($(ob_id))
	{
		var ob_from_type = $(ob_id).tagName.toLowerCase();	
		switch(ob_from_type)
		{
			case "div": 
			case "span": 
				saved_value = $(ob_id).innerHTML; 
				break;
			case "input": 
			case "textarea": 
				saved_value = $(ob_id).value; 
				break;
		}
	
		////////////////////////////////
		
		switch(ob_dest_type)
		{
			case "div": 
				ob_tmp = new Element('div', { id:ob_id });
				break;
			case "span": 
				ob_tmp = new Element('span', { id:ob_id });
				break;
			case "input":
				ob_tmp = new Element('input', { id:ob_id , name: ob_id, 'class':"innertext", value:saved_value , disabled: false, autocomplete:"off" });
				break;
			case "textarea": 
				ob_tmp = new Element('textarea', { id:ob_id , name: ob_id, 'class':"innertext", value:saved_value , disabled: false, autocomplete:"off" });	
				break;
		}
		////////////////////////////////			
		
		try
		{
			$(ob_id).replace(ob_tmp);//inlocuiesc obiectul in DOM
			$(ob_id).update(saved_value);//modific 
		}catch(e)
		{
			//NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7
			//alert(e);
		}
	}
	
	return saved_value;
	//////////////////////////////////////////////
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function changeSubcategorieValue(option, i, j)
{	
	var prefix = 'li_cat'+i+'subcat'+j;	
	
	if(option == "edit")
	{
		
		if(current_edit == 1)
		{
			if(current_edit_option == "subcategory") changeSubcategorieValue("save", current_edit_i, current_edit_j);			
			if(current_edit_option == "category") changeCategorieValue("save", current_edit_i);
		}
		
		changeObType(prefix+'_titlu', 'input');
		changeObType(prefix+'_pret', 'input');
		changeObType(prefix+'_descriere', 'textarea');
		
		current_edit_i = i;
		current_edit_option = "subcategory";
		current_edit_j = j;
		current_edit = 1;
		
		$('li_cat'+i+'subcat'+j+'_titlu').focus();	
		$('li_cat'+i+'subcat'+j+'_saveicon').style.display="block";
	}
	
	if(option == "save")
	{
		current_edit = 0;		
		
		meniu[i].subcategorii[j].titlu = json_escape_bad_chars( changeObType(prefix+'_titlu', 'span') ); 
			$(prefix+'_titlu').addClassName('subcategorie_titlu');					
		meniu[i].subcategorii[j].pret = json_escape_bad_chars( changeObType(prefix+'_pret', 'span') ); 
			$(prefix+'_pret').addClassName('subcategorie_pret');
		meniu[i].subcategorii[j].descriere = json_escape_bad_chars( changeObType(prefix+'_descriere', 'span') ); 
			$(prefix+'_descriere').addClassName('subcategorie_descriere');		
		
		if($('output')) meniu_json = Object.toJSON(meniu);
		$('output').update(Object.toJSON(meniu_json));		
		$('li_cat'+i+'subcat'+j+'_saveicon').style.display="none";		
	}
	
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function changeCategorieValue(option, i)
{
	var prefix = 'categorie'+i+'_titlu';	
	
	if(option == "edit")
	{		
		if(current_edit == 1)
		{
			if(current_edit_option == "subcategory") changeSubcategorieValue("save", current_edit_i, current_edit_j);			
			if(current_edit_option == "category") changeCategorieValue("save", current_edit_i);
		}
		
		changeObType(prefix, 'input');		
		
		current_edit_i = i;
		current_edit_option = "category";
		current_edit_j = 0;
		current_edit = 1;
		
		$('categorie'+i+'_titlu').focus();
		$('categorie'+i+'_saveicon').style.display="block";
		$('categorie'+i+'_culoare').style.display="block";
	}
	
	if(option == "save")
	{
		current_edit = 0;				
		meniu[i].titlu = json_escape_bad_chars( changeObType(prefix, 'span') ); $(prefix).addClassName('categorie_titlu');					
		
		if($('output')) meniu_json = Object.toJSON(meniu);
		$('output').update(Object.toJSON(meniu_json));
		$('categorie'+i+'_saveicon').style.display="none";
		$('categorie'+i+'_culoare').style.display="none";
	}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function add_subcategory(ob_id, i)
{	
	if(current_edit == 1)
	{
		if(current_edit_option == "subcategory") changeSubcategorieValue("save", current_edit_i, current_edit_j);			
		if(current_edit_option == "category") changeCategorieValue("save", current_edit_i);
	}
	
	k++;		
	var j = meniu[i].subcategorii.length;	
	var subcategorie = {"titlu": "", "descriere": "", "pret": " "};		
	meniu[i].subcategorii.push(subcategorie);				
	
	var parent = document.getElementById(ob_id);		
	parent.innerHTML += make_new_subcategory(subcategorie, i, j);	
	
	$('output').update(Object.toJSON(meniu_json));
	
	////////////////////////////////////////////////////////////////////
		
	initMenuSubcategorySortable(ob_id, i);	
		
	changeSubcategorieValue("edit", i, j);
	$('li_cat'+i+'subcat'+j+'_titlu').focus();	
	
	///////////////////////////////////////////////////////////
	/*
	if(mode == 'edit') initMenuSortable();
	*/
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function add_category(titlu)//output
{
	if(current_edit == 1)
	{
		if(current_edit_option == "subcategory") changeSubcategorieValue("save", current_edit_i, current_edit_j);			
		if(current_edit_option == "category") changeCategorieValue("save", current_edit_i);
	}
	
	var s_meniu = '';	
	var i= meniu.length;
	
	var categorie = {"titlu":titlu, "culoare":'0', "subcategorii":new Array()};		
	
	meniu.push(categorie);

	s_meniu += '	<div id="div_cat_'+ i +'" class="maincat">';		
	if(mode == "view")
	{
		s_meniu += '		<dt class="smenu" id="a'+ i +'" >';//dt	
		s_meniu += '			<span id="categorie'+i+'_titlu" class="categorie_titlu" >'+ titlu +'</span>';	
	}
	if(mode == "edit")
	{
		s_meniu += '		<dt class="smenu" id="a'+ i +'" ondblclick="changeCategorieValue(\'edit\','+i+');" >';//dt	
		s_meniu += '			<span id="categorie'+i+'_titlu" class="categorie_titlu" >'+ titlu +'</span>';
		s_meniu += createCulori(0, i);
		s_meniu += '			<img src="/templates/default/images/dynamic_menu/delx.jpg" onclick="if(confirm(\'Esti sigur ca vrei sa stergi categoria?\')) destroy_category(\'div_cat_'+ i +'\','+ i +' );" title="Sterge categoria" alt="Sterge categoria" />';		
		s_meniu += '			<img id="categorie'+i+'_saveicon" class="display_none" src="/templates/default/images/dynamic_menu/savex.jpg" onclick="changeCategorieValue(\'save\','+i+');" title="Salveaza modificarile" alt="Salveaza modificarile"/>';
	}
	s_meniu += '		</dt>';//dt
	s_meniu += '		<dd id="smenu'+ i +'">';//dd
	s_meniu += '			<ul id="subcateg'+ i +'">';										
	s_meniu += '			</ul>';	

	if(mode == "edit") s_meniu += '			<div class="subcategorie_add"><a href="javascript:add_subcategory(\'subcateg'+i+'\','+i+');" id="adauga_subcategorie" name="add" ><img src="/templates/default/images/dynamic_menu/adauga-produs-bt.png" border="0" title="Adauga produs" alt="Adauga produs"></a></div>';	
	s_meniu += '		</dd>';//dd		
	s_meniu += '	</div>';				
	$('menu').innerHTML += s_meniu;		
	
	
	$('output').update(Object.toJSON(meniu));						
	initMenus();//initializez efect meniu	
	
	
	
	/////////////////////////////////////////////////////////////////////////////////////////////
			if(mode == 'edit')
			{						
				for(var i=0; i<meniu.length; i++)//subcategorii
				{								
					initMenuSubcategorySortable('subcateg'+i, i);					
				}								
			}
			
			/////////////////////////////////////////////////////////////////////////////////////////////
			
			if(mode == 'edit') initMenuSortable();			
			
			//--------------------------------------------------	  	
		
	
	meniu_json = Object.toJSON(meniu);
	$('output').update(meniu_json);				
	
	return s_meniu;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function make_new_subcategory(subcategorie, i, j)//output
{	
	var prefix = 'li_cat'+i+'subcat'+j;
	var s_meniu = '';	
	var culoare = 0;
	if(meniu[i].culoare) culoare = meniu[i].culoare;
	
	s_meniu += '<li id="'+prefix+'">';
	s_meniu += '	<div class="subcategorie">';
	if(mode == "view") s_meniu += '		<div id="'+prefix+'_body" class="subcategorie_left'+culoare+'" >';
	if(mode == 'edit') s_meniu += '		<div id="'+prefix+'_body" class="subcategorie_left'+culoare+'" ondblclick="changeSubcategorieValue(\'edit\','+i+', '+j+');">';
	
	s_meniu += '			<span id="'+ prefix +'_titlu" class="subcategorie_titlu" >' + subcategorie.titlu + '</span>';				
	s_meniu += '			<span id="'+ prefix +'_pret" class="subcategorie_pret" >' + subcategorie.pret+'</span> <br>';			
	s_meniu += '			<span id="'+ prefix +'_descriere" class="subcategorie_descriere" >'+ subcategorie.descriere+'</span>';
	s_meniu += '		</div>';
	if(mode == 'edit')
	{
	s_meniu += '		<div class="subcategorie_right_top">';
	s_meniu += '		</div>';
	s_meniu += '		<div class="subcategorie_right">';
		s_meniu += '			<img src="/templates/default/images/dynamic_menu/delx.jpg" onclick="destroy_subcategory(\''+prefix+'\','+i+','+j+')" title="Sterge produsul" alt="Sterge produsul"/><br>';		
		s_meniu += '			<img id="'+ prefix +'_saveicon" class="display_none" src="/templates/default/images/dynamic_menu/savex.jpg" onclick="changeSubcategorieValue(\'save\','+i+', '+j+');" title="Salveaza modificarile" alt="Salveaza modificarile"/>';
	s_meniu += '		<div class="subcategorie_right_bottom">';
	s_meniu += '		</div>';
	s_meniu += '		</div>';
}
	s_meniu += '	</div>';	
	s_meniu += '</li>';					
	
	return s_meniu;
}

function changeColorCategorie(index_selectat, index_categorie)
{
	meniu[index_categorie].culoare = index_selectat;
	$('a'+index_categorie).className = 'smenu'+index_selectat;
	for(var j=0; j<meniu[index_categorie].subcategorii.length; j++)//chanege subcategory color scheme
	{
		$('li_cat'+index_categorie+'subcat'+j+'_body').className = 'subcategorie_left'+index_selectat;
	}
	$('categorie'+index_categorie+'_culoare').style.background = "#"+a_meniu_culori[index_selectat];
}

function createCulori(index_selectat, index_categorie)//i=culoare selectata
{
	var s='';
	s += '<select id="categorie'+index_categorie+'_culoare" class="display_none" onchange="changeColorCategorie(this.selectedIndex, '+index_categorie+' )" style="background-color:#'+a_meniu_culori[ meniu[index_categorie].culoare ]+'; float:left; " >';
	for(var i=0; i<=nr_culori; i++)//0=default
	{
		if(i == index_selectat)
		{
			s += '<option value="'+i+'" selected="selected" style="background-color:#'+a_meniu_culori[i]+'">&nbsp;</option>';
		}else
		{
			s += '<option value="'+i+'" style="background-color:#'+a_meniu_culori[i]+'" >&nbsp;</option>';
		}
	}
	s += '</select>';
	return s;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function createMenu(mode)
{
	
			var i=0, j=0; 
			var s_meniu = '';
			var categorie, subcategorie;
							
			s_meniu += '<dl id="menu">';//dl							
			
			for(i=0; i<meniu.length; i++)//categorii
			{				
				categorie = meniu[i]; //categorie curenta		
				s_meniu += '	<div id="div_cat_'+ i +'" class="maincat">';				
				if(mode == "view")
				{
					s_meniu += '		<dt class="smenu'+categorie.culoare+'" id="a'+ i +'" >';//dt
					s_meniu += '			<span id="categorie'+i+'_titlu" class="categorie_titlu" >'+ categorie.titlu + '</span>';				
				}
				if(mode == "edit")
				{
					s_meniu += '		<dt class="smenu'+categorie.culoare+'" id="a'+ i +'" ondblclick="changeCategorieValue(\'edit\','+i+');" >';//dt
					s_meniu += '			<span id="categorie'+i+'_titlu" class="categorie_titlu" >'+ categorie.titlu + '</span>';				
					s_meniu += createCulori(categorie.culoare, i);
					s_meniu += '			<img src="/templates/default/images/dynamic_menu/delx.jpg" title="Sterge categoria" alt="Sterge categoria" onclick="if(confirm(\'Esti sigur ca vrei sa stergi categoria?\')) destroy_category(\'div_cat_'+ i +'\','+ i +' );" />';					
					s_meniu += '			<img id="categorie'+i+'_saveicon" class="display_none" src="/templates/default/images/dynamic_menu/savex.jpg" onclick="changeCategorieValue(\'save\','+i+');" title="Salveaza modificarile" alt="Salveaza modificarile"/>';
				}
				s_meniu += '		</dt>';//dt
				s_meniu += '		<dd id="smenu'+ i +'">';//dd
				s_meniu += '			<ul id="subcateg'+ i +'">';
				//$('output').update(Object.toJSON(categorie));			
				
				for(j=0; j<meniu[i].subcategorii.length; j++)//subcategorii
				{					
					k++;				
					subcategorie = meniu[i].subcategorii[j];//subcategorie curenta
					s_meniu += make_new_subcategory(subcategorie, i, j);				
				}
							
				s_meniu += '			</ul>';						
				if(mode == 'edit') s_meniu += '			<div class="subcategorie_add"><a href="javascript:add_subcategory(\'subcateg'+i+'\','+i+');" id="adauga_subcategorie" name="add" ><img src="/templates/default/images/dynamic_menu/adauga-produs-bt.png" border="0" title="Adauga produs" alt="Adauga produs"></a></div>';
				s_meniu += '		</dd>';//dd
				s_meniu += '	</div>';						
			}
			s_meniu += '</dl>';//dl
						
			$('container_meniu').update(s_meniu);										
			
			//--------------------------------------------------
			initMenus();//initializez efect meniu
	
			//sortare subcategorii///////////////////////////////////////////////////////////////////////////////////////////
			if(mode == 'edit')
			{						
				for(var i=0; i<meniu.length; i++)//subcategorii
				{			
					////
					initMenuSubcategorySortable('subcateg'+i, i);
				}								
			}
			
			//sortare categorii///////////////////////////////////////////////////////////////////////////////////////////
			
			if(mode == 'edit') initMenuSortable();			
			
			//--------------------------------------------------	  			
			
			if(mode == 'edit' && $('meniu_control')) $('meniu_control').style.display = "block";
		  		
	
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////

function loadMenu(mode)
{
	new Ajax.Request(url, {
		  asynchronous: true,
		  evalJSON:true,
		  encoding: 'UTF-8',
		  method: 'post',
		  parameters: {url: location_url},
		  onSuccess: function(transport) 
		  {
			raspuns = transport.responseText;
			if(raspuns == "")
			{
				meniu = "[]".evalJSON(true);
			}else
			{
				meniu = transport.responseText.evalJSON(true);
				//var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(transport.responseText.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + transport.responseText + ')');
				//alert(my_JSON_object);
			}
			
			createMenu(mode);
		  }
	});
}
