var d = document;

Object.extend(Element, {
	getWidth: function(element) {
	   	element = $(element);
	   	return element.offsetWidth;
	},
	setWidth: function(element,w) {
	   	element = $(element);
    	element.style.width = w +"px";
	},
	setHeight: function(element,h) {
   		element = $(element);
    	element.style.height = h +"px";
	},
	setTop: function(element,t) {
	   	element = $(element);
    	element.style.top = t +"px";
	},
	setSrc: function(element,src) {
    	element = $(element);
    	element.src = src;
	},
	setHref: function(element,href) {
    	element = $(element);
    	element.href = href;
	},
	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	}
});

// funzione per google map
function createMarker(point) {
  var marker = new GMarker(point);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("<span style='font-size:11px;'>Institute of Constructivist Psychology<br />via Martiri della Libertà, 13<br />Padova</span>");
  });
  return marker;
}

function load() {
	if (GBrowserIsCompatible()) {
		var map = new GMap2(document.getElementById("map"));
		map.setCenter( new GLatLng(45.410327, 11.875992), 16 );
		map.addControl( new GSmallMapControl() );
		// map.openInfoWindowHtml( map.getCenter(), document.createTextNode("Institute of Constructivist Psychology<br />via Martiri della Libertà, 13\nPadova") );

		var icon = new GIcon();
		icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
		icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
		icon.iconSize = new GSize(12, 20);
		icon.shadowSize = new GSize(22, 20);
		icon.iconAnchor = new GPoint(6, 20);
		icon.infoWindowAnchor = new GPoint(5, 1);

		// Add 10 markers to the map at random locations
		var bounds = map.getBounds();
		var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();
		var lngSpan = northEast.lng() - southWest.lng();
		var latSpan = northEast.lat() - southWest.lat();
		var point = new GLatLng(45.410327, 11.875992);
		var marker = new GMarker(point, icon);
		map.addOverlay( createMarker(point) );
	}
}

function layout() {

	marginHeight = 0;
	if ($('colonnasx')) {

		// altezza minima
		/*
		dimPagina = getPageSize();
		dimPagina[3] = parseInt(dimPagina[3] - 445);
		if (dimPagina[3] > $('colonnasx').style.height) {
			$('colonnasx').style.height = dimPagina[3] + "px";
			onresize = function() { layout(); }
		}
		*/

		// altezza
		if (self.innerHeight) {
			if ($('colonnasx').scrollHeight < parseInt($('colonnadx').scrollHeight + 62)) {
				marginHeight = $('colonnadx').scrollHeight - ($('colonnasx').scrollHeight) + 50;
				onresize = function() { layout(); }
			}
		} else {
			if ($('colonnasx').clientHeight < ($('colonnadx').clientHeight + 40)) {
				marginHeight = $('colonnadx').clientHeight - ($('colonnasx').clientHeight) + 60;
				onresize = function() { layout(); }
			}
		}

		if (marginHeight != 0) {



			marginHeight = Math.round(marginHeight) + 'px';
			$('foot').style.marginTop = marginHeight;
		}
	}

	if (getCookie('navPagina')=='mostra' && $('nav_pagina')) {
		openNav();
	}
}
onload = function() { layout(); }

function espandi_div(div, link) {
	if ($(link)) {
		$(link).className = $(link).className == 'espandi' ? 'compatta' : 'espandi';
	}

	if ($(div)) {
		new Effect.toggle(div, 'slide', { duration: 0.3 });
	}

	// reimposto l'altezza della colonna sx
	marginHeight = 0;
	if (self.innerHeight) {
		marginHeight = $('colonnasx').scrollHeight;
	} else {
		marginHeight = $('colonnasx').clientHeight;
	}
	$('foot').style.marginTop = marginHeight;

	setTimeout(layout, 300);
}

function openNav() {
	if ($('ul_nav_pagina')) {
		new Effect.toggle('ul_nav_pagina', 'blind', { duration: 0.5 });
	}
	if ($('ul_nav_pagina').visible()) {
		$('nav_pagina').getElementsByTagName('img')[0].src = $('nav_pagina').getElementsByTagName('img')[0].src.replace('meno.gif', 'piu.gif');
		setCookie('navPagina', 'nascondi', 30);
	} else {
		$('nav_pagina').getElementsByTagName('img')[0].src = $('nav_pagina').getElementsByTagName('img')[0].src.replace('piu.gif', 'meno.gif')
		setCookie('navPagina', 'mostra', 30);

		// ridimensiono la pagina
		if ( ($('colonnadx').getHeight() + $('nav_pagina').getHeight() + 60) > $('colonnasx').getHeight()) {
			var h = ($('colonnasx').getHeight() + $('nav_pagina').getHeight() + 60);
			$('colonnasx').setStyle({ height: h + 'px' });
 		}
	}

}

function setCookie(c_name, value, expiredays) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate);
}

function getCookie(c_name) {
	if (document.cookie.length > 0) {
		c_start = document.cookie.indexOf(c_name + "=");
		if (c_start!=-1) {
			c_start = c_start + c_name.length+1;
			c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1)
				c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start,c_end))
		}
	}
	return null
}

function doRicerca() {
	if ($('cerca')) var val = $F('cerca');

	var url = "xml/xml_cerca.php";
	var pars = "txt=" + val;
	var MyAjax = new Ajax.Updater(
		{success: 'colonnasx'},
		url,
		{
			method: 'post',
			parameters: pars,
			onFailure: errore('colonnasx')
		}
	);
}

function showFAQ(id, txt) {
	if (id) {
		var url = "xml/xml_mostra_faq.php";
		var pars = "id=" + id;
		if (txt)
			pars += "&txt=" + txt;
		var MyAjax = new Ajax.Updater(
			{success: 'colonnasx'},
			url,
			{
				method: 'post',
				parameters: pars,
				onFailure: errore('colonnasx')
			}
		);
	}
}

function doOtherFunction(e) {
	eval();
}

// chiamata di gestione dell'errore Ajax
function errore(request, div) {
	if ($(div)) {
		$(div).innerHTML = "Errore nella chiamata Ajax";
	}
}

function showHelp(id) {
	switch (id) {
		case 1:
			var titolo = "Come posso registrarmi?";
			var testo = "Semplice cippa lippa! Clicca <a href=''>qui</a>!";
			break;
		case 2:
			var titolo = "Come si utilizza il forum?";
			var testo = "Nullam eleifend diam at est. Curabitur nisl. Integer ligula leo, pharetra mattis, volutpat a, congue malesuada, tortor. Vestibulum sit amet arcu. Praesent ac massa. Maecenas scelerisque vestibulum orci. Mauris lacus. Pellentesque at diam venenatis felis ultricies pulvinar. Donec tempus arcu ut pede. Pellentesque pellentesque adipiscing mi. Nulla in pede vel tellus mollis consequat. Nullam eu erat vel mauris elementum tristique. Praesent at dolor id eros ullamcorper lobortis. Mauris dictum lacus at metus. Vestibulum dapibus luctus ipsum. Integer mollis, leo ac fringilla tempor, ipsum arcu sodales nulla, sit amet feugiat eros tortor sit amet lectus. Phasellus vel quam. Duis et quam et augue accumsan lacinia.";
			break;
		default:
			var titolo = "";
			var testo = "";
			break;
	}
	var objBody = d.getElementsByTagName("body").item(0);
	var objOverlay = d.createElement("div");
	objOverlay.setAttribute('id','overlay');
	objOverlay.style.display = 'none';
	objOverlay.style.zIndex = '1';
	objOverlay.onclick = function () { hideHelp(); }

	objBody.appendChild(objOverlay);

	var arrayPageSize = getPageSize();
	var arrayPageScroll = getPageScroll();
	Element.setHeight('overlay', arrayPageSize[1]);
	new Effect.Appear('overlay', { duration: 0.2, from: 0.0, to: 0.8 });

	var objDiv = d.createElement("div");
	objDiv.setAttribute('id','divhelp');

	var objTitolo = d.createElement("h3");
	objTitolo.innerHTML = titolo;
	objDiv.appendChild(objTitolo);

	var objClose = d.createElement("img");
	objClose.setAttribute('id','closeHelp');
	objClose.setAttribute('src','immagini/close_help.gif');
	objClose.onclick = function () { hideHelp(); }
	objDiv.appendChild(objClose);

	var objPar = d.createElement("p");
	objPar.innerHTML = testo;
	objDiv.appendChild(objPar);

	objBody.appendChild(objDiv);

	var cTop = Math.round((arrayPageScroll[1] + arrayPageSize[3] - ((arrayPageScroll[1] + arrayPageSize[3]) * 45 / 100)) / 2);
	Element.setTop('divhelp', cTop);
	Element.show('divhelp');
	new Draggable('divhelp');
}

function hideHelp() {
	new Effect.Fade('overlay', { duration: 0.2});
	d.getElementsByTagName("body")[0].removeChild($("divhelp"));
	setTimeout(function(){ d.getElementsByTagName("body")[0].removeChild($("overlay")) }, 250);
}

// funzione per pescare le dimensioni della pagina e della finestra
function getPageSize(){
	var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY) {
		xScroll = d.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (d.body.scrollHeight > d.body.offsetHeight){ // all but Explorer Mac
		xScroll = d.body.scrollWidth;
		yScroll = d.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = d.body.offsetWidth;
		yScroll = d.body.offsetHeight;
	}

	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (d.documentElement && d.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = d.documentElement.clientWidth;
		windowHeight = d.documentElement.clientHeight;
	} else if (d.body) { // other Explorers
		windowWidth = d.body.clientWidth;
		windowHeight = d.body.clientHeight;
	}

	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		var pageHeight = windowHeight;
	} else {
		var pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){
		var pageWidth = windowWidth;
	} else {
		var pageWidth = xScroll;
	}

	var arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
	return arrayPageSize;
}

// Funzione per conoscere lo scroll verticale e orizzontale
function getPageScroll(){
	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (d.documentElement && d.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = d.documentElement.scrollTop;
	} else if (d.body) { // all other Explorers
		yScroll = d.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll)
	return arrayPageScroll;
}



/* FORUM -------------------------------- */

// visualizza il login
function showLogin() {
	if ($('login').style.display && $('login').style.display == 'none') {
		new Effect.Grow('login', {duration: 0.3, direction: 'center', moveTransition: Effect.Transitions.exponential});
	} else {
		new Effect.Shrink('login', {duration: 0.3, direction: 'top-right', moveTransition: Effect.Transitions.exponential});
	}
}

// effettuo il login via ajax
function doLogin() {
	if ($('username')) {
		usr = $F('username');
		pwd = $F('password');

		var url = "xml/xml_doLogin.php";
		var pars = "usr="+usr+"&pwd="+pwd;
		var MyAjax = new Ajax.Updater(
			{success: 'area'},
			url,
			{
				method: 'post',
				parameters: pars,
				onFailure: errore('contenuto')
			}
		);
	}
}

// effettuo il logout via ajax
function doLogout() {
	var url = "xml/xml_doLogout.php";
	var pars = "";
	var MyAjax = new Ajax.Updater(
		{success: 'area'},
		url,
		{
			method: 'post',
			parameters: pars,
			onFailure: errore('contenuto'),
			onSuccess: refresh()
		}
	);
}

function checkUnique() {
	var url = "xml/xml_forum_unique.php";
	var pars = "nome=" + $F('username');
	if ($('id_utente')) {
		pars += "&id=" + $F('id_utente');
	}
	var MyAjax = new Ajax.Request(
		url,
		{
			method: 'post',
			parameters: pars,
			onComplete: checkUniqueResponse,
			onLoading: checkUniqueCaricamento
		}
	);
}

function checkUniqueCaricamento() {
	$('check_unique').className = "loading";
	$('check_unique').innerHTML = "Controllo username in corso...";
	$('check_unique').show();
}

function checkUniqueResponse(originalRequest) {
	$('check_unique').className = originalRequest.responseText.toString();
	testo = "";
	if (originalRequest.responseText.toString() == "ok") {
		testo = "Username disponibile!";
	} else if (originalRequest.responseText.toString() == "error") {
		testo = "Username non disponibile, provane un'altro";
	}
	$('check_unique').innerHTML = testo;
	$('check_unique').show();
}


function cercaUtente (src,idGrup) {
	var url = 'xml/xml_forum_cerca_utente.php';
	var pars = 'src='+src+'&idGruppo='+idGrup;
	var myAjax = new Ajax.Updater (
		'div_utenti',
		url,
		{
			method:'get',
			parameters:pars
		}
	);
}

function inserisciUtente (riga,mouse) {
	var tabella = document.getElementById('elenco_utenti_forum').rows;
	var riga = tabella[riga];
	if (mouse=='on') {
		riga.className = "mouseover";
	} else {
		riga.className = "";
	}
}

function associaUtenteAGruppo (idUtente,idGruppo,src) {
	var url = 'xml/xml_forum_associa_utente_a_gruppo.php';
	var pars = 'idUtente='+idUtente+'&idGruppo='+idGruppo;
	var myAjax = new Ajax.Request (
		url,
		{
			method: 'get',
			parameters: pars,
			onComplete: function() { cercaUtente(src,idGruppo); }
		}
	);
}

function showUtentiGruppo(id_gruppo, id_td, id_a) {
	if ($(id_td)) {
		if ($(id_a) && $(id_a).className == 'espandi') {
			// pesco gli utenti del gruppo id_gruppo
			var attuale = id_a.innerHTML;
			var url = "xml/xml_forum_utenti_gruppi.php";
			var pars = "id=" + id_gruppo;
			var myAjax = new Ajax.Updater (
				id_td,
				url,
				{
					method: 'get',
					parameters: pars
				}
			);
		} else {
			// nascondo tutto tranne il link
			$(id_td).removeChild($(id_td).getElementsByTagName("ul")[0]);
			$(id_a).className = "espandi";
		}
	}
}

function selezionaRicerca (id,nome,tipo) {
	if (tipo=='autorizzazione') {
		$('src_autorizzazione').value = nome;
		$('src_autorizz_id').value = id;
		$('autorizzazione').style.display = 'none';
		$('src_username').value = '';
		var src = id;
	} else if (tipo=='username') {
		$('src_autorizzazione').value = '';
		$('src_autorizz_id').value = '';
		var src = nome;
	}
	var url = 'xml/xml_cerca_utenti.php';
	var pars = 'src='+src+'&tipo='+tipo;
	var myAjax = new Ajax.Request (
		url,
		{
			method:'get',
			parameters:pars,
			onComplete:selezionaRicercaAnswer
		}
	);
}

function selezionaRicercaAnswer(originalRequest) {
	var risposta = originalRequest.responseText;
	var righeTabella = $('elenco').rows.length;
	for (var i=righeTabella-1;i>=0;i--) {
		$('elenco').deleteRow(i);
	}
	var rispArray = risposta.split(";");
	for (var i=0;i<rispArray.length;i++) {
		var subStringArr = rispArray[i].split(",");

		var tr = $('elenco').appendChild(document.createElement("tr"));
		if (risposta == 'La ricerca non ha portato nessun risultato.') {
			var td = document.createElement("td");
			td.colSpan = "3";
			td.appendChild(document.createTextNode(risposta));
			tr.appendChild(td);
		} else {
			var td = document.createElement("td");
			td.innerHTML = '<a href="utente-forum/'+subStringArr[3]+'.html" title="Vedi dati utente">'+subStringArr[0]+'</a>';
			tr.appendChild(td);

			var td = document.createElement("td");
			td.appendChild(document.createTextNode(subStringArr[1]));
			tr.appendChild(td);

			var td = document.createElement("td");
			td.appendChild(document.createTextNode(subStringArr[2]));
			tr.appendChild(td);
		}
	}
}

function swapStellaWatch(stella) {
	if (stella.src.indexOf('noprefer') == -1) {
		stella.src = "immagini/b_noprefer.gif";
	} else {
		stella.src = "immagini/b_prefer.gif";
	}
}

/**
 * stella -> id dell'immagine (this)
 * id_argo -> id argomento
 * id_utente -> id tipologia, ovvero l'id dello studente o del docente
 * tipologia -> studente o docente?
 */
function changeStellaWatch(stella, id_argo) {
	var url = 'xml/xml_utente_watchlist.php';
	var pars = 'id_argo='+id_argo;

	if (stella.src.indexOf('noprefer') == -1) {
		stella.src = "immagini/b_noprefer.gif";
		// salvo l'id dell'argomento e l'id dello studente
		var myAjax = new Ajax.Request (
		url,
			{
				method:'post',
				parameters:pars,
				onFailure: function(transport) {
					alert("Errore di comunicazione con il server: " + transport.responseText.stripTags());
				},
				onComplete:function () {
					stella.title = "Aggiungi alla tua WatchList";
				}
			}
		);
	} else {
		stella.src = "immagini/b_prefer.gif";
		var myAjax = new Ajax.Request (
		url,
			{
				method:'post',
				parameters:pars,
				onFailure: function(transport) {
					alert("Errore di comunicazione con il server: " + transport.responseText.stripTags());
				},
				onComplete:function () {
					stella.title = "Aggiungi alla tua WatchList";
				}
			}
		);
	}
}