//----------------------
// tooltip initialize a elements
//----------------------

var al = al ? al : {};

al.atooltip =  function(f, index){ 
		var a = f.getElement("a");
	    var div = f.getElement("div");
	    a.store('tip:title', 'Comment'); 
	    a.store('tip:text', div);
};





//-----------------------------
//RPC-EVENT-HANDLER
//
//example:
//
//var rpcOnSuccess = function(data){
//if (data.reply.@reply) {
//alert("OK"); 	
//}else {
//	  alert("error: " + data.reply.message);
//}
//};
//
//	element1.addEvent('click', al.createRpcEventHandler(element1.get('href'),"8elete na gini to request?", rpcOnSuccess));
//
//getParams = {a: 2, b: 'koko'};
//element2.addEvent('click', al.createRpcEventHandler(element2.get('href'),null, rpcOnSuccess,null,getParams));	
//-----------------------------


al.createRpcEventHandler = function(url, confirmMsg, rpcOnSuccess, rpcOnFailure, getParams){
	if (! $chk(getParams)){
			getParams = new Object();
	}

	if (! $chk(rpcOnSuccess)){
		rpcOnSuccess = function(e){};
	}

	if (! $chk(rpcOnFailure)){
		rpcOnFailure = function(e){};
	}

	var rpcHandler = function(e){
		 new Event(e).stop(); 
		 if ($chk(confirmMsg)){
			 if(!confirm(confirmMsg)) { 
					return; 	
			 };
		 }

		var jsonRequest = new Request.JSON({
			url: url, 
			onSuccess: rpcOnSuccess,
			onFailure: rpcOnFailure
			}).get(getParams);
	}
	return rpcHandler;
}




//----------------------
//DELETE SUPPORT
//----------------------

al.createDeleteHanlder = function(myurl,rpcOnSuccess,rpcOnFailure,configmMsg){
 if (! $chk(configmMsg)){
	 configmMsg = "Are you sure you want to delete this?";
 }
 return al.createRpcEventHandler(myurl,configmMsg,rpcOnSuccess,rpcOnFailure,null);
};


al.onDeleteSuccessMsg = function(element, message){
	element.removeProperty('class');
	element.setProperty('class', 'successMessage');
	element.set('text',message);
};

al.onDeleteFailureMsg = function(element, message){
	element.removeProperty('class');
	element.setProperty('class', 'errorMessage');
	element.set('text',message);
};  










//----------------------------
// CRUD
//----------------------------

var CrudAUtil = {
	
	onFailureAjaxClosure  :	function(panel) {
		panel = $(panel);
		function handler(){
			panel.set('text', 'The request failed.');
			CrudAUtil.ajaxLoadingMsgStop(panel);
		}
	return handler;
},

normalizeFormAction : function(f) 
{
	var myaction = CrudAUtil.appendUrlGridFalse(f.action);
	var inputs = f.getElements('input');
	inputs.each(function(item, index){
		if (item.value == "") myaction += ("&" + item.name + "=");
	});
	inputs = f.getElements('select');
	inputs.each(function(item, index){
		if (item.value == "") myaction += ("&" + item.name + "=");
	});
	f.action = myaction;
},


applyEventClosure : function(form){
	function applyEvent(){
		var applyInputs = $(form).getElements('input[name=applyHidden]');
		$each(applyInputs, function(i, index){
			i.set('value','true');
		});
	};
	
	return applyEvent;
},

ajaxizeForm : function(panelId,formClass, succesEdit) {
	var selector = "#"  + panelId  + " form." + formClass;
	$each($$(selector), function(f, index){
		if (!$chk(f)){
			return;
		}
		
		if ($chk(succesEdit)) {
			f.addEvent('submit', CrudAUtil.editSubmitEventClosure(panelId,formClass, succesEdit));
		} else {
			f.addEvent('submit', CrudAUtil.editSubmitEventClosure(panelId,formClass));
		}
		var applyButtons  = f.getElements('input[class=applyme]');
		if ($chk(applyButtons)) {
			$each(applyButtons, function(b, index){
				b.addEvent('click', CrudAUtil.applyEventClosure(f));
			});
		};
	});
},

appendUrlGridFalse : function(url) 
{
	if (url.test(/\?/)){
		return url + "&grid=false";
	} else {
		return url + "?grid=false";
	}
},



editSubmitEventClosure : function(panelId, formClass, succesEditFunction){
	
	
	var succesEdit;
	if($chk(succesEditFunction)) {
		succesEdit = succesEditFunction;
	} else {
		succesEdit =  function(){window.location.reload();};
	}
		
	function editSubmitEvent(event){
		var e =  Event(event);
		e.stop();
		var apply = false;
		var f = $(e.target);

		if  (typeof(tinyMCE) != "undefined" &&   $chk(tinyMCE)) {
			var weditors = f.getElements('textarea[class=weditor]');
			if ($chk(weditors)) {
				$each(weditors, function(l, index){
					var ed = tinyMCE.get(l.getProperty('id'));
					if ($chk(ed)){
						l.set('html',ed.getContent());
					}
				});
			}
		}
		
		var applyInputs = f.getElements('input[name=applyHidden]');
		if ($chk(applyInputs)) {
			$each(applyInputs, function(l, index){
				if (l.getProperty("value") == 'true') {
					apply = true;
					l.setProperty("value",'false');
				}
			});
		}
		CrudAUtil.normalizeFormAction(f);
		CrudAUtil.ajaxLoadingMsgStart(panelId);
		//f.set('send',CrudAUtil.ajaxReqOK(panelId,formClass,apply, succesEdit));
		//this.send();
		var sop = {
		data: f, 
		url: f.get('action')
		};
		var sender = new Request.HTML();
		sender.onSuccess=CrudAUtil.ajaxReqOK(panelId,formClass,apply, succesEdit);
		sender.onFailure=CrudAUtil.onFailureAjaxClosure(panelId);
		sender.send(sop);
		
	};
	return editSubmitEvent;
},

ajaxReqOK : function(panelId, formClass, apply, succesEdit) {
	onSuccess = function(tree, elements, txt, jscript){
				var panel = $(panelId);
				CrudAUtil.ajaxLoadingMsgStop(panel);
				if (apply) {
					panel.set('html', txt);
					$exec(jscript);
					CrudAUtil.ajaxizeForm(panelId,formClass,succesEdit);
				}else {
					var h = this.getHeader("X-AF-Has-Errors");
					if ($chk(h) && h == "true") {
						panel.set('html', txt);
						$exec(jscript);
						CrudAUtil.ajaxizeForm(panelId,formClass,succesEdit);
					} else {
						panel.setStyle('visibility', 'hidden');
						succesEdit();
					}
				}
			};

	return onSuccess;
},


ajaxLoadingMsgStart : function(panel){
	panel = $(panel);
	if (!$chk(panel)) {
		alert("ajaxLoadingMsgStart panel not found");
		return;
	}
	panel.addClass('ajax-loading-2');

	var par = panel.getParent();
	if (!$chk(panel))
		return;
	par.addClass('ajax-loading-1');
},
	
ajaxLoadingMsgStop : function(panel){
	panel = $(panel);
	if (!$chk(panel)) {
		alert("ajaxLoadingMsgStop panel not found");
		return;
	}
	panel.removeClass('ajax-loading-2');

	var par = panel.getParent();
	if (!$chk(panel))
		return;
	par.removeClass('ajax-loading-1');
	
}
	
};

var CRUDA = {
		

//prosoxi formClass i clasis tis formas tou edit (den ginete ajax ean den iparxi)
init : function(panelId, formClass, editLinkClass){
	var _editSuccesFunction;
	var _formClass;
	var _editLinkClass;

	if ($chk(formClass)) {
		_formClass = formClass;
	} else {
		_formClass = "saveform";
	}
	
	if ($chk(editLinkClass)) {
		_editLinkClass = editLinkClass;
	} else {
		_editLinkClass = "editlink";
	}
	
	
	function initPanel(editSuccesFunction)
	{
		_editSuccesFunction = editSuccesFunction;
		var selector = "#"  + panelId  + " a." + _editLinkClass;
		$each($$(selector), function(l, index){
			l.addEvent('click', editMeEventClosure(l.getProperty("href")));
		}); 
	}
	
	function onCompleteAjax(){
		CrudAUtil.ajaxLoadingMsgStop(panelId);
		CrudAUtil.ajaxizeForm(panelId, _formClass, _editSuccesFunction);
	};

	
	function editMeEventClosure(murl){
		var rurl = CrudAUtil.appendUrlGridFalse(murl);
		function editMeEvent(e)
	    {
			new Event(e).stop();
	    	var panel = $(panelId);
	    	CrudAUtil.ajaxLoadingMsgStart(panel);
			var req = new Request.HTML({url:rurl, 
				update: panel,
				onFailure: CrudAUtil.onFailureAjaxClosure(panel),
				onComplete: onCompleteAjax,
				evalScripts: true,
				evalResponse: true
			});
			req.send();
	    }
	    return editMeEvent;
	}
	
	return initPanel;
	//return editMeEventClosure;
}









};




////////////////////////////////////////////////////////////////////////////
//SELECT BOX FILL
////////////////////////////////////////////////////////////////////////////
al.util = al.util ? al.util : {};

al.util.pushSelectOption = function(select_element, key,value,selected_key){
	//console.debug(select_element +  " add option " + key + " : " + value );
	
	var opt =  new Element('option',{ value: key } );
	if (key == selected_key) {
		opt.setProperty('selected','selected');
	} 
	opt.set('text',value);
	opt.inject(select_element);

};

al.selectBoxFillNamedData = function(select_box_to_fill_id, data, selected_value_key) {

	var sb = $(select_box_to_fill_id);
//	alert(select_box_to_fill_id);
//	alert(selected_value_key);
		
	if (! $chk(data)){
		alert("error response from server");
	}
	
	sb.empty();
	var names = data.listing.names;
		
	if (data.listing.names !== undefined){
		var names = data.listing.names;
		if (names.length === undefined){
//			alert("webservice returned single value");
			var key = names['@id'];
			var value = names['@name'];
			al.util.pushSelectOption(sb,key,value,selected_value_key);
		} else {
//			alert("webservice returned list of length " + names.length);
			for (var i=0;i<names.length;i++){
				var key = names[i]['@id'];
				var value = names[i]['@name'];
//				alert("setting key "+key+" value "+value);
				al.util.pushSelectOption(sb,key,value,selected_value_key);
			}
		}
	}else{
//		alert("data.listing.names undefined");
	}

};

