//Määritä feidiefektin nopeus (s)
var fade_speed = 0.8;

var fade_speed_ms = fade_speed * 1000;		//Älä muuta tätä
var fade_speed_overlay = fade_speed / 2;	// Älä muuta tätä
var fade_speed_overlay_ms = fade_speed * 1000;	// Älä muuta tätä

/* Tekee ajax requestin ja kutsuu changeContent-metodia, joka vaihtaa vanhan bannerin uuteen */
function makeAjaxCall(base, group_id, interval, repeat, show_count){
	new Ajax.Request(base + 'sitebanner/ajax/view/-/group_id/' + group_id, { asynchronous: true, onSuccess: function(response) {
		changeContent(response, group_id, interval, repeat, show_count, base);
	} });
}

/* Ajax-requestin callback funktio. Ottaa vastaan ajaxin responsen, ja tekee tarvittavat temput bannereiden feidaamiselle. */
function changeContent(response, group_id, interval, repeat, show_count, base) {
	
	//Group-divi, eli bannereiden parentti
	var elem_group = document.getElementById('sitebanner_group_' + group_id);
	
	/* Haetaan group-divin alta kaikki banneri-divit */
	var aChild = getGroupChild(group_id);
	
	/* Jos groupissa ei ole vielä divejä, kyseessä on ryhmän ensimmäinen banneri */
	if(aChild.length <= 0)
	{
		//Laitetaan responsen sisältö group-diviin, huom tässä vaiheessa bannerilla vielä display:none
		elem_group.innerHTML = elem_group.innerHTML + response.responseText;
		
		//Tsekataan groupiin kuuluvat banneri-divit uudelleen, jotta saadaan äsken lisätty divi mukaan listaan.
		var aChild = getGroupChild(group_id);
		
		//Feidataan näkyviin
		new Effect.Appear(aChild[0].id, { duration: fade_speed });
	}
		
	/* Jos kyseessä on vanhan bannerin vaihtaminen uuteen */
	else
	{
		// Asetetaan overlay bannerin päälle feidaamalla ja vaihdetaan sen takana uusi ja vanha banneri keskenään
		overlay_id = 'sitebanner_banner_overlay_' + group_id;
		new Effect.Appear(overlay_id, { duration: fade_speed_overlay } );
		
		/* Määritellään bannerinvaihto-funkkarin kutsu */
		var delayBannerChange = function () { changeBanner(elem_group, response); };
		
		/* Ja kutsutaan sitä ajastetusti - vaihdetaan sillä hetkellä, kun overlay on feidaantunut kokonaan */
		var changebannerTimer = setTimeout(delayBannerChange, 400);
		
		/* Feidataan overlay pois tieltä - uusi banneri tulee näkyviin */
		var fadeOverlayTime = setTimeout("fadeOverlay('"+overlay_id+"',"+fade_speed_overlay+")", 400);
	}
		
	/* Jos ryhmän bannereita on tarkoitus vaihtaa ajastetusti, kutsutaan ajastin-funkkaria */
	show_count = show_count-1;
	
	if(repeat && show_count > 0){
		setTimer(group_id, interval, repeat, show_count, base);
	}
}

/* Vaihtaa group-divin sisällä vanhan bannerin uuteen ja heivaa vanhan pois document flowsta */
function changeBanner(elem_group, response){
 	
 	//Haetaan tämän hetkisen bannerin iidee
 	group_id = parseGroupId(elem_group.id);
	
	var aCurrent = getGroupChild(group_id);
	
	var current_id = aCurrent[0].id;
	
	//Asetetaan uusi banneri parentin sisään, tällä hetkellä vielä display:none
	elem_group.innerHTML = elem_group.innerHTML + response.responseText;
	
	//Haetaan uuden bannerin iidee
	var aCurrent = getGroupChild(group_id);
	var next_id = aCurrent[1].id;
	
	
	$(current_id).hide();
	$(next_id).show();
	
	//Heivataan vanha banneri
	removeBanner(elem_group.id, current_id);
	
	return true;
}

/* Feidaa overlay-divin piilon */
function fadeOverlay( id, fade_speed_overlay ){
	new Effect.Fade(id, { duration: fade_speed_overlay });
}

/* Heivaa annetun pois document flowsta */
function removeBanner(elem_id, current_id){
	parent_elem = document.getElementById(elem_id);
	current_elem = document.getElementById(current_id);
	parent_elem.removeChild(current_elem);
}

/* Asettaa ajastuksen seuraavaa ajax-kutsua varten. */
function setTimer(group_id, interval, repeat, show_count, base){
	var timeout = interval * 1000;
	var timer = setTimeout("makeAjaxCall('" + base + "', " + group_id + ", " + interval + ", " + repeat + ", " + show_count + ")", timeout);
}

/* Palauttaa group-elementin id:n perusteella ryhmän id:n */
function parseGroupId(elem_id){
	var start_pos = elem_id.lastIndexOf('_');
	return elem_id.substr(start_pos+1);
}

/* Palauttaa arrayn kaikista ryhmään kuuluvista banneri-diveistä */
function getGroupChild(group_id){

	elem_group = document.getElementById('sitebanner_group_'+group_id);
	
	/* haetaan kaikki divi-elementit group-elementin sisältä */
	var childDivElements = elem_group.getElementsByTagName('div');
	
	/* suodatetaan pois elementit, joilla ei ole 'sitebanner_banner'-luokkaa */
	var aChild = new Array();
	var counter = 0;
	
	for(i=0;i<childDivElements.length;i++){
		if(childDivElements[i].className.indexOf('sitebanner_banner_overlay') == -1 ){
			aChild[counter] = childDivElements[i];
			counter++;
		}
	}
	
	return aChild;
}

/**
* TYÖKALUVALIKKOIHIN LIITTYVÄT FUNKKARIT
**/

var closingTools = 0;
var openNodeId = false;
var toolsTimer;

/* Näyttää tietyn työkaluvalikon */
function showTools(id) {
	setToolsTimeout(0);
	changeNode(id);
}

/* Asettaa ajastuksen työkalu-valikon sulkemiseksi */
function setToolsTimeout(action) {
	if(action == 1){
		toolsTimer = window.setTimeout('hideCurrentTools();', 500);
		closingTools = 1;
	}
	else if(closingTools == 1){
		window.clearTimeout(toolsTimer);
		closingTools = 0;
	}
}

/* Vaihtaa aukiolevan työkalu-valikon */
function changeNode(id) {
	hideCurrentTools();
	openNode(id);
}

/* Avaa annetun työkalu-valikon */
function openNode(id) {
	e = document.getElementById('sitebanner_tools_'+id);
	e.style.display = 'block';
	openNodeId = id;
}

/* Piilottaa tämän hetkisen työkalu-valikon */
function hideCurrentTools(){
	if(openNodeId){
		e = document.getElementById('sitebanner_tools_'+openNodeId);
		e.style.display = 'none';
		openNodeId = false;
	}
}
