/**
 * Luotu: 23.9.2008 Marko Behm
 * Tarvitsee toimiakseen:
 * - ajax-popup.js
 *
 * Käyttö:
 * Form-actioniksi: "javascript: ajaxPOST('formin-id');"
 * Formille action-niminen hiddenfield, johon ajettavan actionin absoluuttinen url
 *
 * Esimerkki:
 * <form method="post" id="form" action="javascript: ajaxPOST('form');">
 *		<input type="hidden" name="action" value="{$www_base}siteshop/admin/shop/new">
 *
 * Muokattu:
 * 20.5.2009: Lisätty automaattinen ajon lopettaja, jos ajo kestää liian kauan.
*/

var timer;

/** Suorittaa ajax-postauksen käyttäen apunaan ajax-popuppia */
function ajaxPOST(form_id){

	if ($(form_id)){
		var action;
		
		if(arguments[1])
			target = arguments[1]; 
		else
			target = undefined;
		
		action = ajaxPOSTcreateUrl(form_id);

		if (action){
			loadContent(action, target);
		}
	}
	else{
		alert('Antamallasi id:llä ei löytynyt lomaketta. ('+form_id+')');
	}
}

/* Ladataan content */
function loadContent(url, target){

	if (url.indexOf('/-/') < 1){									// Muokataan ajaxille lähtevää requestia. Huomioidaan su3-parametrit
		if (url.charAt(url.length-1) == '/')
			url = url+'-/';
		else
			url = url+'/-/';
	}

	if (url.charAt(url.length-1) != '/'){
		url = url+'/';
	}

	url = url+createRandomValue();									// Lisätään urliin dummy-parametri, jotta selaimet eivät onnistu kutsun cacheamisessa


	var aUrl = splitUrl(url);										// Pilkkoo linkin actioniin ja parametreihin
	action = aUrl[0];
	params = aUrl[1];

	if (target == undefined && $('ajax_popup')){					// Asetetaan oletuksena popup latauksen targetiksi
		target = $('ajax_popup').id;
	}

	showLoading(target);

	var ajax = new Ajax.Updater(									// Suoritettaan request
		{success: target},
		action,
		{method: 'post', parameters: params, evalScripts: true, onSuccess:function(){removeLoading();}}
	);
}

/** Luo päiväyksestä uniikin arvon, jotta voidaan estää ajaxin cachettuminen */
function createRandomValue(){
	var Stamp = new Date();
	var tim   = Stamp.getHours()+'-'+Stamp.getMinutes()+'-'+Stamp.getSeconds();

	return 'ajaxcache/'+tim;
}

/* Vahvistetaan latauksen suoritus */
function confirmLoadContent(target,msg){
	if (confirm(msg)){
		loadContent(target);
	}
}

/* Vahvistetaan lomakkeen submittaus */
function confirmSubmit(formname, msg){
	var aForm = document.getElementsByName(formname);
	var form = aForm[0];

	if (confirm(msg) && form.name){
		form.submit();
	}
}

/* Pilkkoo annetun siteupdate-linkin actioniin ja parametreihin */
function splitUrl(action){
	var aUrl = new Array();

	var part1 = action.substr(0,action.indexOf('/-/'));				// Puretaan action takaisin palasiksi
	var part2 = action.substr(action.indexOf('/-/'));

	if (part2.indexOf('/-/') === 0){								// Siivotaan parametrit
		part2 = part2.substr(3);
		var values = new Array();
		var param = '';

		values = part2.split('/');

		for (i=0; i < values.length; i++){

			if (i%2){
				if (i < (values.length-1)){
					param = param + encodeURIComponent(values[i]) + '&';
				}
				else{
					param = param + encodeURIComponent(values[i]);
				}
			}
			else{
				param = param + values[i] + '=';
			}
		}
	}
	aUrl[0] = part1;
	aUrl[1] = param;

	return aUrl;
}

/** Asettaa läpinäkyvän alueen ja ilmoittaa että sisältöä ladataan. Klikkaus sulkee näkymän. */
function showLoading(target){
	
	timer = setTimeout("cancelLoading()",10000);					// Katkaistaan sivunlataus jos se kestää liian kauan

	if (target == 'ajax_popup'){
		var loading_overlay = document.createElement('DIV');
		$(target).appendChild(loading_overlay);

		loading_overlay.setAttribute('id','loading_overlay');
		loading_overlay.onclick = function(){removeLoading()};
		new Effect.Appear('loading_overlay', { duration: 0, from: 0.0, to: 0.7 });
		loading_overlay.innerHTML = '';

		var loading_overlay_title = document.createElement('DIV');
		loading_overlay_title.setAttribute('id','loading_overlay_title');
		loading_overlay_title.innerHTML = '<b class="loading">&nbsp; Ladataan...</b>';
		$(target).appendChild(loading_overlay_title);
	}
}

/** Katkaisee sivunlataamisen jos palvelin vastaa liian hitaasti */
function cancelLoading(){
	//alert("Järjestelmä vastaa liian hitaasti. \nKoeta myöhemmin uudestaan.");
	removeLoading();
}

/** Sulkee ladataan-ilmoituksen. */
function removeLoading(){
	clearTimeout(timer);
	
	if ($('ajax_popup') && $('loading_overlay'))
		$('ajax_popup').removeChild($('loading_overlay'));
	if ($('ajax_popup') && $('loading_overlay_title'))
		$('ajax_popup').removeChild($('loading_overlay_title'));
}

/** Luo annetusta lomakkeesta requestin */
function ajaxPOSTcreateUrl(form_id){
	var action = '';
	var param = '';
	var elem = document.getElementById(form_id).elements;

	for(var i = 0; i < elem.length; i++){

		// Lomakkeen action
		if (elem[i].type == 'hidden' && elem[i].name == 'action' && elem[i].value){
			// Viimeinen merkki ei saa olla kauttaviiva
			var value = elem[i].value;

			if (value.charAt(value.length-1) == "/"){
				value = value.substr(0,value.length-1);
			}

			action = value;

			// Asetetaan popupille tieto, että suljettaessa päivittää koko koko sivun
			setReload();
		}

		// Muut parametrit
		else{
//			alert(elem[i].name + ' ja ' + elem[i].value);

			if ((elem[i].type == 'text' || elem[i].type == 'hidden') && elem[i].value){
				param = param + elem[i].name + '/' + encodeURIComponent(elem[i].value) + '/';
			}
			else if (elem[i].type == 'textarea' && elem[i].value){
				param = param + elem[i].name + '/' + encodeURIComponent(elem[i].value) + '/';
			}
			else if (elem[i].type == 'checkbox' && elem[i].value && elem[i].checked){
				param = param + elem[i].name + '/' + encodeURIComponent(elem[i].value) + '/';
			}
			else if (elem[i].type == 'radio' && elem[i].value && elem[i].checked){
				param = param + elem[i].name + '/' + encodeURIComponent(elem[i].value) + '/';
			}
			else if (elem[i].type == 'select-one' && elem[i].value){
				param = param + elem[i].name + '/' + encodeURIComponent(elem[i].value) + '/';
			}
		}
	}

	if (action && param)
		action = action + '/-/' + param;
	else if (!action)
		action = false;

	return action;
}


// Tällä voidaan näyttää kaikki lomakkeella olevat elementit
function DisplayFormValues() {
	var str = '';
	var elem = document.getElementById('form').elements;
	for(var i = 0; i < elem.length; i++)
	{
		str += "<b>Type:</b>" + elem[i].type + "&nbsp&nbsp";
		str += "<b>Name:</b>" + elem[i].name + "&nbsp;&nbsp;";
		str += "<b>Value:</b><i>" + elem[i].value + "</i>&nbsp;&nbsp;";
		str += "<BR>";
	}
	document.getElementById('test').innerHTML = str;
}

/** Ladataan ulkopuolinen css/js-tiedosto */
function loadObj(file){
	var fileref = "";

	if (file.indexOf(".js")!=-1){
		fileref=document.createElement('script');
		fileref.setAttribute("type","text/javascript");
		fileref.setAttribute("src", file+'?'+createRandomValue());
	}
	else if (file.indexOf(".css")!=-1){
		fileref=document.createElement("link");
		fileref.setAttribute("rel", "stylesheet");
		fileref.setAttribute("type", "text/css");
		fileref.setAttribute("href", file+'?'+createRandomValue());
	}

	if (fileref!=""){
		document.getElementsByTagName("head").item(0).appendChild(fileref);
	}
}
