(function($j) {
	var updateUpDown = function(sortable){
		$j('li:not(.ui-sortable-helper)', sortable)
			.removeClass('first').removeClass('last')
			.find('.up, .down').removeClass('disabled').end()
			.filter(':first').addClass('first').find('.up').addClass('disabled').end().end()
			.filter(':last').addClass('last').find('.down').addClass('disabled').end().end();
	};
	
	var moveUpDown = function(){
		var link = $j(this),
			dl = link.parents('li'),
			prev = dl.prev('li'),
			next = dl.next('li');
	
		if(link.is('.up') && prev.length > 0)
			dl.insertBefore(prev);
	
		if(link.is('.down') && next.length > 0)
			dl.insertAfter(next);
	
		updateUpDown(dl.parent());
	};

	var addItem = function(){
		var sortable = $j(this).parents('.ui-sortable');
		var options = '<span class="options"><a class="up">up</a><a class="down">down</a></span>';
		var tpl = '<dl class="sort"><dt>{name}' + options + '</dt><dd>{desc}</dd></dl>';
		var html = tpl.replace(/{name}/g, 'Dynamic name :D').replace(/{desc}/g, 'Description');
		
		sortable.append(html).sortable('refresh').find('a.up, a.down').bind('click', moveUpDown);
		updateUpDown(sortable);
	};
	
	var emptyTrashCan = function(item){
		item.remove();
	};
	
	var sortableChange = function(e, ui){
		alert('change!');
		if(ui.sender){
			var w = ui.element.width();
			ui.placeholder.width(w);
			ui.helper.css("width",ui.element.children().width());
		}
	};
	
	var sortableUpdate = function(e, ui){
		alert('update!');
		if(ui.element[0].id == 'trashcan'){
			emptyTrashCan(ui.item);
		} else {
			updateUpDown(ui.element[0]);
			if(ui.sender) {
				updateUpDown(ui.sender[0]);
			} 
			/* update on move : */
			
			if($j(ui.element[0]).children().index(ui.item[0]) >= 0) {
				$j("span#messages").html( "<img src=\"images/ajax-loader.gif\" border=\"\" />");
				executeUpdate(ui.element[0].id);
			}
		}
	};
	
	var executeUpdate = function(columnId) {
		var columnnr = columnId.substring(columnId.length-1, columnId.length);
		var objectArray = $j("#"+columnId).sortable('toArray');
		var objectidArray = [];
		var objectidString = "";
		//console.dir(objectArray);
		
		if(objectArray.length > 0 ) {
			for(var idx in objectArray) {
				objectidArray[idx] = objectArray[idx].substring(objectArray[idx].indexOf("_") + 1, objectArray[idx].length);
				objectidString += objectArray[idx].substring(objectArray[idx].indexOf("_") + 1, objectArray[idx].length) + "#";
			}
			
			var url = "/" + _contextpath + "/ds";
			var postdata = {action: "GVAdminUpdatePosition" , 
							portalid: _portalId,
							column : columnnr,
							objectid: objectidArray,
							objectidstring: objectidString};
	
			$j.getJSON( url, postdata, function(data) { 
			
				for(idx in data.items) {
					$j("#objectid_" + data.items[idx]).appendTo("#col" + columnnr);
				}
				$j("#"+columnnr).sortable('refresh');
				setTimeout(function() { $j("span#messages").html( "<b>positions in column " + columnnr + " updated</b>") }, 500);
			});
		}
	}

})(jQuery);
