//Delegate method
delegate = function(instance, method) {
	return function() {
		return method.apply(instance, arguments);
	}
}

toggleCheckBoxes = function(element, state)
{
  var f = $(element);
  var c = f.getInputs('checkbox');
  
  c.each(function(element){
    element = $(element);
    element.checked = state;
    return element;
  })
}

toggleSlide = function(target, duration){
	
	var d = duration || 0.4;
	
	if($(target).style.display!='')
		new Effect.BlindDown(target,{duration:d});
	else{
		new Effect.BlindUp(target, {duration:d});
	}
	return false;
}

confirmAction = function(str){

	str = str || "Confirmez-vous l'action ?";
	
	return confirm(str);
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); };
addToTextfield = function(oSel, node, list){
	
	var sChar	= ",";
	var opts	= oSel.options;
	var sel		= [];
	var n 		= node;
	var tmp		= n.value.trim().split(",").compact();
 	var vals	= [];

	for(var i=0; i<tmp.length;i++)
		if(tmp[i] != '' && tmp[i] != sChar)
			vals.push(tmp[i]);
	
	delete(tmp);
	
	for(var i=0; i < opts.length; i++){
		var val	= list[opts[i].value];
		var index = vals.indexOf(val);
		if(opts[i].selected && index < 0)
			vals.push(val);
		else if(!opts[i].selected && index > -1){
			vals.splice(index,1);
		}
	}

	n.value = vals.join(sChar).replace(/^,*|,*|,*$/,'');
}

function getList(id, scriptName, ctnResponse, ctnResult, loading_text, loaded_text, error_text){

	if(id){		
		Element.update(ctnResult, loading_text);
		//$(ctnResponse).toggle();
		Element.toggleClassName(ctnResult, 'inplaceeditor-saving');
		new Ajax.Request(scriptName,
			{
				parameters:'id='+id, 
				onComplete:function(o){
		      Element.toggleClassName(ctnResult, 'inplaceeditor-saving');
					Element.update(ctnResult, loaded_text);
					Element.update(ctnResponse, o.responseText);
					//new Effect.Appear(ctnResponse);
					//new Effect.ScrollTo(ctnResponse);
					$(ctnResponse).focus();
				}
			}
		)
	}else{
		Element.update(ctnResult, error_text);
		$(ctnResponse).toggle();
	}
}

function createSortable(id, mode, scriptName, ctnResult){
	var listIdPreffix = "list_";
	var targetID = listIdPreffix + id;
	Sortable.create(targetID,{
		//constraint:false,
		onUpdate:function()
			{
				//$(targetID).hide();
				Element.update(ctnResult, 'Connexion...');
				//new Effect.Opacity(output,{from:0,to:0,duration:0}); 
				var req = new Ajax.Updater(ctnResult, scriptName,
					{
						onComplete:function(request)
						{
							//$(targetID).toggle();
							//$(targetID).show();
							new Effect.Highlight(targetID);
							//new Effect.Opacity(ctnResult,{from:0,to:1})
						},
						parameters:"section_id="+id+"&mode="+mode+"&"+Sortable.serialize(targetID, {name:"list_in"})
					}
				)
			}
		}
	)
}


togglePictosBlock = function(from, target){

	if(typeof(from) != "object") from = $(from);
	
	//Save classes for next call
	if(!from.classes)
		from.classes = from.className.split(" ");
	//Then switch their position
	from.classes = from.classes.reverse();
	from.className = from.classes[from.classes.length-1];
	//Call slide function to switch block display
	toggleSlide(target);
}
// Allow menu slide up and down, and save display state via php session and ajax updater
toggleMenu = function(target){

	var state = $(target).style.display != '';
	new Ajax.Updater([], 'php/ajax/Menu/', {onFailure:function(){alert('unable to register menu state');},onComplete:function(request){return toggleSlide(target);}, parameters:"state="+state});
}


function sortableCross(target, containment){

	Sortable.create(target,
		{
			tag:'li',
			constraint:false,
			containment:containment,
			dropOnEmpty:true
			
		}
	)
}