
function handleResponseError(response)
{
	if(response.dojoType == 'cancel') {
		//onsole.debug('Request cancelled');
		return 'Request cancelled';
	}else if(response.dojoType == 'timeout'){
		//onsole.debug('Request timed out');
		return 'Request timed out';
	}else{
		//onsole.error(response);
		return 'Request data not found';
	}
}

function submitAjax(aForm, handlerBefore, handlerAfter)
{
	if(!aForm)
	{
		return false;
	}

	if( aForm instanceof Object)
	{
		if( aForm.tagName === undefined || aForm.tagName.toLowerCase() != 'form')
		{
			return false;
		}
	}
	else if( aForm.length)
	{
		aForm = dojo.byId(aForm);
		
		if(!aForm)
		{
			return false;
		}
	}
	else
	{
		return false;
	}

	if( handlerBefore && handlerBefore instanceof Function && handlerBefore(aForm) === false )
	{
		return false;
	}

	//	zablokuj formularz do czasu otrzymania odpowiedzi
	var i;
	var rememberToEnable = new Array();
		
	for(i=0; i<aForm.elements.length; i++)
	{
		if( aForm.elements[i].disabled !== undefined && aForm.elements[i].disabled === false)
		{
			rememberToEnable.push(aForm.elements[i]);
		}
	}

	dojo.xhrPost({
		form:	aForm,
		handleAs:	"text",
		handle:	function(response, ioArgs)
				{
					if(response instanceof Error)
					{
						handleResponseError(response);
					}
					else
					{
						if( handlerAfter && handlerAfter instanceof Function)
						//	odpowiedz przetwarzana przez funkcje JS
						{
							handlerAfter(response);
						}
						else
						//	przetwarzanie odpowiedzi sterowane z serwera jako parametry zawarte w JSON
						{
							processJsonResponse(response);
						}
					}

					var i=0;
					
					for(i=0; i<rememberToEnable.length; i++)
					{
						rememberToEnable[i].disabled = false;
						//onsole.log('wlacz '+rememberToEnable[i].id);
					}
				}
		});

		var i=0;
		
		for(i=0; i<rememberToEnable.length; i++)
		{
			rememberToEnable[i].disabled = true;
			//onsole.log('wylacz '+rememberToEnable[i].id);
		}
	
	return false;
}

function sendAjaxRequest(url,content,handlerAfter)
{
	if( !(content instanceof Object))
	{
		content = null;
	}
	
	dojo.xhrPost({
		url			: url,
		content		: content,
		handleAs	: "text",
		handle		: function(response, ioArgs)
				{
					if(response instanceof Error)
					{
						handleResponseError(response);
					}
					else
					{
						if( handlerAfter && handlerAfter instanceof Function)
						//	odpowiedz przetwarzana przez funkcje JS
						{
							handlerAfter(response);
						}
						else
						//	przetwarzanie odpowiedzi sterowane z serwera jako parametry zawarte w JSON
						{
							processJsonResponse(response);
						}
					}
				}
		});
}

function processJsonResponse(resp)
{//lert(resp);
	var _REGEXP_JSON = "{.*}";
	var jsonCode = resp.match(_REGEXP_JSON);		console.log('jsonCode extracted');
	var jsonResp = dojo.fromJson(jsonCode);			console.log(jsonResp);
	var output = '';

	//	odpowiedz zawiera 'status' (ok, error, info,...)
	//	tresc odpowiedzi 'msg'
	
	//	jesli w odpowiedzi nie ma JSON to wyjscie
	if( !jsonResp)
	{
		jsonResp = {
			'msg':'Wykonanie polecenia zwróciło niepoprawny komunikat',
			'status':'error',
			'responseInDialog': 'dialogErrorMessage'
		};
	}
	
	//	parametr bool 'rawMessage' - umiesci tresc bez znacznikow <div class='msg status'></div> 
	if( jsonResp.rawMessage !== undefined && jsonResp.rawMessage === true)
	{
		output = jsonResp.msg;
	}
	else
	{
		output = "<div class=\"msg "+jsonResp.status+"\">"+jsonResp.msg+"</div>";
	}
	
	//	parametr string 'redirectHref' - przekieruje do strony o podanym adresie
	if( jsonResp.redirectHref !== undefined && jsonResp.redirectHref)
	{
		function redirector(){ window.location.href=jsonResp.redirectHref; }
		
		if( jsonResp.duration !== undefined && jsonResp.duration)
		{
			setTimeout( redirector, jsonResp.duration);
		}
		else
		{
			redirector();
		}
	}
	//	parametr string 'responseElementId' - nazwa elementu html, w ktorym ma byc umieszczona odpowiedz
	if( jsonResp.responseElementId !== undefined && jsonResp.responseElementId) {
		
		displayResponseInElement(output, jsonResp.responseElementId, jsonResp.duration);
	
	} else if( jsonResp.responseInDialog !== undefined && jsonResp.responseInDialog !== false)
	//	parametr 'responseInDialog' - wyswietli odpowiedz w oknie Dialog (bool lub string dialogId)
	{
		var dlg = null;
		
		if( jsonResp.responseInDialog.length !== undefined && jsonResp.responseInDialog.length > 0)
		{
			dlg = dijit.byId(jsonResp.responseInDialog);
		}
		
		if(!dlg)
		{
			dlg = new dijit.Dialog();
		}
		
		dlg.setContent(output);
		dlg.show();
		
		if( jsonResp.duration !== undefined && jsonResp.duration)
		{
			setTimeout( function(){ dlg.hide(); }, jsonResp.duration);
		}
	}
	//	parametr string 'token'
	
	return jsonResp;
}

function displayResponseInElement(output, responseElementId, duration)
{
	var elmnt;

	elmnt = dojo.byId(responseElementId);

	if (elmnt) {
		if (duration !== undefined && duration) {
			hideIt = function()
			{
				setTimeout(
					function()
					{
						var hi = new dojo.fadeOut({node:elmnt, duration:800, onEnd:function(){ setInnerHtml(elmnt, '');}});
						hi.play();
					},
					duration
				);
			};
		}
		else
		{
			hideIt = function(){};
		}

		var fo = new dojo.fadeOut({
			node:elmnt,
			duration:50,
			onEnd:function()
			{
				setInnerHtml(elmnt, output);
				var fi = new dojo.fadeIn({node:elmnt, duration:300, onEnd:hideIt});//
				fi.play();
			}
		});
		
		fo.play();
	}
}

function retrieveUrl(url, handler)
{
	if( !handler || ! handler instanceof Function) {	return false;	}
	
	dojo.xhrGet({
		url:	url,
		handleAs:	"text",
		handle:	handler
	});
}

function retrieveUrlFade( url, destId, handleOnLoadEnd)
{
	var fo = new dojo.fadeOut({
		node:destId,
		duration:100
	});
	fo.play();
	
	retrieveUrl(
		url,
		function(resp)
		{
			setInnerHtml(destId, resp);
			var fi = new dojo.fadeIn({
				node:destId,
				duration:200
			});
			fi.play();
					
			if (handleOnLoadEnd instanceof Function) {
				handleOnLoadEnd();
			}
		}
	);
}

function retrieveUrlShowProgress( url, destId, handleOnLoadEnd)
{
	setInnerHtml(destId, '<div class="in-progress"></div>');
	retrieveUrlFade(url, destId, handleOnLoadEnd);
}

function refresh(elemId)
{
	if( elemId === undefined) { return false; }
	
	//	jesli elemId jest stringiem
	if( elemId.length && elemId.length > 0)
	{
		var elem = dojo.byId(elemId);
		if( !elem) { return false; }
	}
	else if( elemId.id === undefined)
	{
		return false;
	}
	else
	{
		elem = elemId;
	}
	
	if( !elem.attributes || !elem.attributes.href || elem.attributes.href == '') { return false; }
	
	retrieveUrlShowProgress( elem.attributes.href.value, elem.id);
}
