function refreshMenu(filter){
	$.ajax({
		type: 'POST',
		url: serverUrl + 'menuAjax' + extension,
		data: {filter: filter},
		success: function(html){
			$('.container').empty();
			$('.container').html(html);
			initMenu();
		}
	});
}

function loadDataTablesCategoriesPlugins(dTable){
	if (dTable == undefined)
		return;
	if (dTable.length == 0)
		return;
	var nodes = dTable.fnGetNodes();
	var editableNodes = [];
	var pos = 0;
	
	for (var i in nodes){
	    var node = nodes[i];
	    if ($(node).hasClass("editable"))
	    	editableNodes[pos++] = node;
	}
	
	var updateCategoryUrl = 'updateCategoryJson' + extension;
	
	$(".categoryName", editableNodes).editable(updateCategoryUrl, {
		"callback": function(json, aPos ) {
			var aPos = dTable.fnGetPosition(this);
			json = eval('(' + json + ')');
			if (json.code == 0){
				$.jGrowl('',{
					theme: 	'success',
					header: json.message,
					life:	5000,
					sticky: false
				});
				dTable.fnUpdate(json.list[0], aPos[0], aPos[1]);
				changeTypeCategory();
				refreshMenu();
			} else {
				dTable.fnUpdate(json.list[0], aPos[0], aPos[1]);
				$.jGrowl('',{
					theme: 	'error',
					header: json.message,
					life:	5000,
					sticky: false
				});
			}
		},
		style : "inherit", 
		indicator : "<img src='images/loading.gif'>", 
		"submitdata": function (value, settings ) {
			//var row = $(this).parent().parent().children().index(this.parentNode);
			//var column = $(this).parent().children().index(this);

			// refresh header ?
			return { 
				"row": this.parentNode.getAttribute('id'), 
				"column": 'name'
			};
		},
		"height": "14px"
	});
	
	$(".categoryFrenchName", editableNodes).editable(updateCategoryUrl, {
		"callback": function(json, aPos ) {
			var aPos = dTable.fnGetPosition(this);
			if (json == undefined){
				$.jGrowl('',{
					theme: 	'error',
					header: getText('Error'),
					life:	5000,
					sticky: false
				});
			} else {
				json = eval('(' + json + ')');
				if (json.code == 0){
					$.jGrowl('',{
						theme: 	'success',
						header: json.message,
						life:	5000,
						sticky: false
					});
					dTable.fnUpdate(json.list[0], aPos[0], aPos[1]);
					changeTypeCategory();
					refreshMenu();
				} else {
					dTable.fnUpdate(json.list[0], aPos[0], aPos[1]);
					$.jGrowl('',{
						theme: 	'error',
						header: json.message,
						life:	5000,
						sticky: false
					});
				}
			}
		},
		style : "inherit", 
		indicator : "<img src='images/loading.gif'>", 
		"submitdata": function (value, settings ) {
			//var row = $(this).parent().parent().children().index(this.parentNode);
			//var column = $(this).parent().children().index(this);

			// refresh header ?
			return { 
				"row": this.parentNode.getAttribute('id'), 
				"column": 'frenchName'
			};
		},
		"height": "14px"
	});
	
	$(".categoryStatus", editableNodes).editable(updateCategoryUrl, {
		loadurl: 'getCategoryStatusJson' + extension,
		loaddata: function(value, settings) { 
			return {
				type: "category",
				value: this.parentNode.getAttribute('id')};
		},
		indicator : "<img src='images/loading.gif'>", 
		type: 'select',
		submit: "OK", 
		cancel: getText("Cancel"),
		style: "inherit", 
		placeholder: "",
		"callback": function(json, y ) {
			var aPos = dTable.fnGetPosition(this);
			json = eval('(' + json + ')');
			if (json.code == 0){
				$.jGrowl('',{
					theme: 	'success',
					header: json.message,
					life:	5000,
					sticky: false
				});
				dTable.fnUpdate(json.list[0], aPos[0], aPos[1]);
				refreshMenu();
			} else {
				$.jGrowl('',{
					theme: 	'error',
					header: json.message,
					life:	5000,
					sticky: false
				});
			}
		},
		"submitdata": function(value, settings ) {
			return { 
				"row": this.parentNode.getAttribute('id'), 
				"column": 'status'
			};
		},
		"height": "10px"
	});
	
	$(".categoryIcon", editableNodes).editable('uploadCategoryIconAjax.html', {
		indicator : "<img src='images/loading.gif'>", 
		type: 'ajaxupload',
		submit: getText("Upload"),
		cancel: getText("Cancel"),
		style: "inherit", 
		placeholder: "",
		"callback": function(sValue, y ) {
			if (sValue == undefined){
				$.jGrowl('',{
					theme: 	'error',
					header: getText('Error'),
					life:	5000,
					sticky: false
				});
			} else {
				$.jGrowl('',{
					theme: 	'success',
					header: getText('Updated'),
					life:	5000,
					sticky: false
				});
				refreshMenu();
			}
		},
		"height": "10px"
	});

	$(".categoryParent", editableNodes).editable(updateCategoryUrl, {
		loadurl: 'getParentsCategoriesJson.html',
		loaddata: function(value, settings) { 
			return {id: this.parentNode.getAttribute('id')};
		},
		indicator : "<img src='images/loading.gif'>", 
		type: 'select',
		submit: "OK", 
		cancel: getText("Cancel"),
		style: "inherit", 
		placeholder: "",
		"callback": function(json, y ) {
			var aPos = dTable.fnGetPosition( this );
			json = eval('(' + json + ')');
			if (json.code == 0){
				$.jGrowl('',{
					theme: 	'success',
					header: json.message,
					life:	5000,
					sticky: false
				});
				dTable.fnUpdate(json.list[0], aPos[0], aPos[1]); 
				refreshMenu();
			} else {
				$.jGrowl('',{
					theme: 	'error',
					header: json.message,
					life:	5000,
					sticky: false
				});
			}
		},
		"submitdata": function(value, settings ) {
			return { 
				"row": this.parentNode.getAttribute('id'), 
				"column": 'parent'
			};
		},
		"height": "10px"
	});
}

function loadDeleteCategory(){
	
	$('.deleteCategory').click(function(){
		var id = searchIdFromHref($(this).attr('href'));
		var pos = this;
		$.ajax({
		   type: "POST",
		   url: this.href,
		   success: function(json){
			  if (json.code == 0){
				  $.jGrowl('',{
						theme: 	'success',
						header: json.message,
						life:	5000,
						sticky: false
					});
				  var row = $(pos).parent().parent().parent().children().index(pos.parentNode.parentNode);
				  dTable.fnDeleteRow(row);
				  changeTypeCategory();
				  refreshMenu();
			  }
			  else {
				  $.jGrowl('',{
						theme: 	'error',
						header: json.message,
						life:	10000,
						sticky: false
					});
				  $('#' + id).css('color', 'red').css('text-decoration', 'blink');
			  }
		   },
		   error : function(msg){
			   $.jGrowl('',{
					theme: 	'error',
					header: getText('Error'),
					life:	10000,
					sticky: false
				});
		   }
		 });
		return false;
	}).confirm({
		  msg: getText('Delete') + ' ? ',
		  timeout: 5000,
		  buttons: {
		    ok: getText('Yes'),
		    cancel: getText('No'),
		    separator: ' '
		  }
	});
}

function changeTypeCategory(){
	var type = $('#categoryType').val();
	$.ajax({
	   type: "POST",
	   url: 'getCategoriesJson' + extension,
	   dataType: 'json',
	   data: {type: type, onlyParents: 'true', withBlank: 'true'},
	   success: function(json) {
		  if (json.code != 0){
			  $.jGrowl('',{
					theme: 	'error',
					header: json.message,
					life:	5000,
					sticky: false
			  }); 
		  } else {
			  var options = '';
		      for (var i = 0; i < json.list.length; i = i + 3) {
		        options += '<option value="' + json.list[i] + '">';
		        if (json.list[i+2] != "")
		        	options += json.list[i+2] + '</option>';
		        else
		        	options += json.list[i+1] + '</option>';
		      }
		      $('#categoryParent').html(options);
		  }
	   },
	   error : function(res){
		   $.jGrowl('',{
				theme: 	'error',
				header: getText('Error'),
				life:	5000,
				sticky: false
			});
	   }
	});
}

function goToUploadPage(categoryType, categoryId){
	var backCall = function(){
		uploadPage(categoryType, categoryId);
	};
	selectPage('uploadPage', backCall);
	return false;
}

function loadFields(){
	$(".categoryLinkImage, #addCategoryImg, #hideCategoryImg").tipTip({
		delay: 0,
		edgeOffset: 7,
		defaultPosition: "top"
	});
	
	$('#categoryType').change(function(){
		changeTypeCategory();
	});
	
	$('#categoryParent').click(function(){
		if ($('#categoryType').val() == ""){
			$.jGrowl('',{
				theme: 	'error',
				header: getText("selectType"),
				life:	5000,
				sticky: false
			});
		}
	});
	
	$(".categoryLinkImage").tipTip({
		delay: 0,
		edgeOffset: 7,
		defaultPosition: "top"
	});
	
	$(".uploadsFilesInCategory").tipTip({
		delay: 0,
		edgeOffset: 7,
		defaultPosition: "top"
	});
	
	$(".deleteCategory").tipTip({
		delay: 0,
		edgeOffset: 7,
		defaultPosition: "top"
	});
}

function listCategories(action){
	
	if (action != undefined){
		if (action == 'createGategory'){
			setTimeout("$('#addCategory').trigger('click');", 600);
		}
	}
	
	/*******************
	 * MAIN DATATABLE
	 ******************/
	
	if ($("#head").children().length == 9){
		var dataTableParam = {
			"aoColumns": [
			    { "sType": 'html', "sClass": "center", "bSortable": false }, // Links
			    { "sType": 'numeric', "sClass": "center", "bSortable": false }, // Icon
				{ "sType": 'html' }, // Name
				{ "sType": 'html' }, // FrenchName
				{ "sType": 'numeric', "sClass": "center" }, // NbFiles
				{ "sType": 'num-html', "sClass": "center" }, // Size
				{ "sType": 'html', "sClass": "center" }, // Type
				{ "sType": 'numeric', "sClass": "center" }, // Status
				{ "sType": 'html', "sClass": "center" }  // Parent
				], 
			"bSortClasses": false,
			"oLanguage": getDatatableLanguage(),
			"iDisplayLength": config.tableDisplayResults
		};
	} else {
		var dataTableParam = {
				"aoColumns": [
				    { "sType": 'html', "sClass": "center", "bSortable": false }, // Links
				    { "sType": 'numeric', "sClass": "center", "bSortable": false }, // Icon
					{ "sType": 'html' }, // Name
					{ "sType": 'html' }, // FrenchName
					{ "sType": 'numeric', "sClass": "center" }, // NbFiles
					{ "sType": 'num-html', "sClass": "center" }, // Size
					{ "sType": 'html', "sClass": "center" }, // Type
					{ "sType": 'html', "sClass": "center" }  // Parent
					], 
				"bSortClasses": false,
				"oLanguage": getDatatableLanguage(),
				"iDisplayLength": config.tableDisplayResults
			};
	}
	dTable = $('#categories').dataTable(dataTableParam);
	loadDataTablesCategoriesPlugins(dTable);
	loadDeleteCategory();
	loadFields();
	
	/******************
	 *  ADD CATEGORY
	 *****************/
	
	$("#addCategoryImg, #hideCategoryImg").tipTip({
		delay: 0,
		edgeOffset: 7,
		defaultPosition: "top"
	});
	
	$("#validCategory").button();
	
	var json = {
		"Images": getText("Images"),
		"Videos": getText("Videos"),
		"Wallpapers": getText("Wallpapers")
	};
	var options = '';
	for (key in json) {
        options += '<option value="' + key + '">' + json[key] + '</option>';
    }
    $('#categoryType').html(options);
    
	$('#addCategory').click(function(){
		if ($('#hideCategoryImg').is(":visible") == true){ // click -
			$("#newCategory, #validCategory").fadeOut();
			$("#hideCategoryImg").hide();
			$('#newCategoryBox').removeClass('newCategoryBoxShadow');
			$('#newCategoryTitle').fadeOut();
			$("#addCategoryImg").show();
		} else { // click +
			$("#newCategory, #hideCategoryImg, #validCategory").fadeIn();
			$('#newCategoryBox').addClass('newCategoryBoxShadow');
			$('#newCategoryTitle').fadeIn();
			$("#addCategoryImg").hide();
			changeTypeCategory();
			$.ajax({
			   type: "POST",
			   url: 'userCategoryInfoJson' + extension,
			   dataType: 'json',
			   success: function(json) {
				  $.jGrowl('',{
						header: json.message,
						life:	15000,
						sticky: false
				  });
			   }
			});
		}
	});
	
	$('#validCategory').click(function(){
		var englishName = $('#categoryEnglishName').val();
		var frenchName = $('#categoryFrenchName').val();
		var type = $('#categoryType').val();
		var parentId = $('#categoryParent').val();
		$.ajax({
		   type: "POST",
		   url: 'addCategoryAjax' + extension,
		   dataType: 'html',
		   data: {
				englishName: englishName,
				frenchName: frenchName,
				type: type, 
				parentId: parentId
			},
		   success: function(res) {
				var ulMessage = $(res);
				if (ulMessage.attr('id') == 'actionerror'){
					$.jGrowl('',{
						theme: 	'error',
						header: $(ulMessage).find('li').find('span').text(),
						life:	5000,
						sticky: false
					});
				}
				if (ulMessage.attr('id') == 'actionmessage'){
					$.jGrowl('',{
						theme: 	'success',
						header: $(ulMessage).find('li').find('span').text(),
						life:	5000,
						sticky: false
					});
					dTable.fnDestroy();
					$('#categoriesWapper').html(res);
					dTable = $('#categories').dataTable(dataTableParam);
					loadDataTablesCategoriesPlugins(dTable);
					$('.dataTables_filter input').val(englishName).keyup().css('color', 'red').css('font-weight', 'bold').css('text-decoration', 'blink');
				  	dTable.fnFilter(englishName);
				  	loadFields();
				  	loadDeleteCategory();
				  	changeTypeCategory();
				  	refreshMenu();
				  	$('.dataTables_filter input').keypress(function(){
						setTimeout(function(){}, 500);
						console.log('reloaded');
						loadFields();
					  	loadDeleteCategory();
					});
				}
//				  dTable.fnAddData([
//	        			"<a href=\"listFiles.html?type=\"" + type + "\"><img class=\"categoryLinkImage\" style=\"vertical-align: bottom; height: 20px;\" src=\"images/dataTable/forward_enabled.png\"></a>",
//	        			"",
//	        			englishName,
//	        			frenchName,
//	        			"0",
//	        			"0 Ko",
//	        			"<a onclick=\"selectPage('listCategories', listCategories, 'category=" + englishName + "');return false;\" class=\"switchType\" href=\"/Photonization/listCategories.html?type=" + type + "\">" + type + "</a>",
//	        			"",
//	        			parentId
//	        		]);
		   },
		   error : function(res){
			   $.jGrowl('',{
					theme: 	'error',
					header: getText('Error'),
					life:	5000,
					sticky: false
				});
		   }
		});
	});
	
	removeAjaxEvents = function(){
		dTable.fnDestroy();
		$('.switchType').unbind();
		$("#tiptip_holder").remove();
	};
};

$.editable.addInputType('ajaxupload', {
	/* create input element */
	element : function(settings) {
		settings.onblur = 'ignore';
		var input = $('<input type="file" id="upload" name="upload" />');
		$(this).append(input);
		return (input);
	},
	content : function(string, settings, original) {
		console.log('');
	},
	plugin : function(settings, original) {
		var form = this;
		var id = original.parentNode.getAttribute('id');
		form.attr("enctype", "multipart/form-data");
		$("button:submit", form).bind('click', function() {
			$.ajaxFileUpload( {
				url : settings.target + "?id=" + id,
				secureuri : false,
				fileElementId : 'upload',
				dataType : 'html',
				success : function(data, status) {
					if (data != undefined && (data.substring(0,3) == ("err") || data.substring(0,3) == ("Err")))
						$(original).html(data);
					else {
						if (data != undefined && data != "error.png"){
							$.jGrowl('',{
								theme: 	'success',
								header: getText('Updated'),
								life:	5000,
								sticky: false
							});
							refreshMenu();
						}
						else 
							$.jGrowl('',{
								theme: 	'error',
								header: getText('Error'),
								life:	5000,
								sticky: false
							});
						$(original).html('<img width="24px;" src="' + data + '?q=' + imgRefreshCpt++ + '" />');
					}
				},
				error : function(data, status, e) {
					$.jGrowl('',{
						theme: 	'error',
						header: getText('Error'),
						life:	5000,
						sticky: false
					});
				}
			});
			return (false);
		});
	}
}); 
