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 pescare le dimensioni della pagina e della finestra
function getPageSize(){
	var xScroll, yScroll;
	var d = document;

	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;
}

// adatto il contenuto alla pagina
function layout() {
	// altezza
	if ($('contenuto')) {
		var togli = 0;
		var dim_pagina = getPageSize(); // pageWidth,pageHeight,windowWidth,windowHeight

		if (self.innerHeight) {
			if ($('contenuto').scrollHeight) {
				if ($('intestazione'))
					togli += $('intestazione').scrollHeight;

				if ($('menu'))
					togli += $('menu').scrollHeight;

				var marginTop = togli;

				if ($('menubasso'))
					togli += $('menubasso').clientHeight + 10;

				var marginBottom = $('menubasso').scrollHeight;

				var dim = parseInt(dim_pagina[1] - togli)
				$('contenuto').style.height = dim + "px";
				$('contenuto').style.marginTop = marginTop + "px";
				$('contenuto').style.marginBottom = marginBottom + "px";

				onresize = function() { setTimeout(layout, 200); }
			}
			if (self.innerHeight<600) {
				$('concept').style.display="none";
			} else {
				$('concept').style.display="block";
			}
		} else {
			if ($('contenuto').clientHeight) {
				if ($('intestazione'))
					togli += $('intestazione').clientHeight;

				if ($('menu'))
					togli += $('menu').clientHeight;

				var marginTop = togli;

				if ($('menubasso'))
					togli += $('menubasso').clientHeight + 20;

				var marginBottom = $('menubasso').scrollHeight;

				var dim = parseInt(dim_pagina[1] - togli)
				$('contenuto').style.height = dim + "px";
				$('contenuto').style.marginTop = marginTop + "px";
				$('contenuto').style.marginBottom = marginBottom + "px";

				onresize = function() { setTimeout(layout, 200); }
			}
			if ($('contenuto').clientHeight<600) {
				$('concept').style.display="none";
			} else {
				$('concept').style.display="block";
			}
		}
		
		// gestisco la larghezza del calendario
		if ($('cal_giorno')) {
			if ($('navigazione')) {
				var w = parseInt(dim_pagina[2] - 300);
				$('cal_giorno').style.width = w + "px";
			}
		}

		if ($('anagrafica')) {
			if ($('navigazione')) {
				if (dim_pagina[2]<1024) {
					var w = parseInt(dim_pagina[2] - 450);
					$('anagrafica').style.width = w + "px";
				}
				if (dim_pagina[2]<800) {
					var w = parseInt(dim_pagina[2] - 380);
					$('anagrafica').style.width = w + "px";
					var h = parseInt(dim_pagina[1] - togli - 50);
					$('anagrafica').style.height = h + "px";
				}
			}
		}

		if ($('intestazione_doc')) {
			var w = parseInt(dim_pagina[2] - 400);
			$('intestazione_doc').style.width = w + "px";
		}

	}
}

function initMenu() {
	var li_ = document.getElementsByTagName('li');
	for (var i=0;li = li_[i];i++)
		if(li.className && li.className=="more") {
			for (j=0; j<li.childNodes.length; j++)
				if (li.childNodes[j].nodeName.toLowerCase()=="ul") li.subMenu = li.childNodes[j];
			li.subMenu.className = "subMenu-off";
			li.onmouseover = li.onactivate = li.onfocus = function() { this.subMenu.className = "subMenu-on" };
			li.onmouseout = li.ondeactivate = li.onblur = function() { this.subMenu.className = "subMenu-off" };
		}
}

onload = function(e) {
	var d = document;
	initMenu();
	gmenu();
	layout();
//	document.oncontextmenu = function() { return false; } // blocco il tasto destro
}

// stampo un messaggio di errore dentro ad un div
function errore(request, div) {
	if ($(div)) {
		$(div).innerHTML = "Errore nella chiamata Ajax";
	}
}

// mostro il div di caricamento
function showCaricamento() {
	if ($('loading')) {
		Element.show('loading');
	}
}

function controllaCampo(nameField,defaultValue,link) {
	if (document.getElementsByTagName("input")[nameField].value == defaultValue) {
		document.getElementsByTagName("input")[nameField].value = '';
	} else if (document.getElementsByTagName("input")[nameField].value == '') {
		document.getElementsByTagName("input")[nameField].value = defaultValue;
	}

	if (link==1) {
		openCalendar(nameField,this,this);
	}
}

/* STELLE ------------------------------- */
function accendiStella(id, val_hover) {
	// esiste la stella ?
	var campo = id + val_hover.toString();
	if ($(campo)) {
		// accendo tutte le stelle precedenti
		for (i=1;i<=val_hover;i++) {
			var campo = id + i.toString();
			if ($(campo).src.indexOf("yellow_star_blue_outline.gif") == -1) {
				$(campo).src = "immagini/yellow_star_lite.gif";
			}
		} // for
	} // if
}

function spegniStella(id, val_hover) {
	// esiste la stella ?
	var campo = id + val_hover.toString();
	if ($(campo)) {
		// accendo tutte le stelle precedenti
		for (i=1;i<=val_hover;i++) {
			var campo = id + i.toString();
			if ($(campo).src.indexOf("yellow_star_blue_outline.gif") == -1) {
				$(campo).src = "immagini/clear_star_blue_outline.gif";
			}
		} // for
	} // if
}

function impostaStella(id, input, val_hover) {
	var campo = id + val_hover.toString();
	if ($(campo)) {
		// accendo tutte le stelle precedenti
		for (i=1;i<=val_hover;i++) {
			var campo = id + i.toString();
			$(campo).src = "immagini/yellow_star_blue_outline.gif";
		} // for
		for (i=val_hover+1;i<=5;i++) {
			var campo = id + i.toString();
			$(campo).src = "immagini/clear_star_blue_outline.gif";
		} // for

		if ($(input)) {
			$(input).value = val_hover;
		}
	} // if
}

/* CALENDARIO --------------------------- */
// visualizzo il calendario di selezione data in un div
function showDivCalendario(field, top, left, doAfter) {
	if(!doAfter) var doAfter;
	if (isNaN(top)) {
		var real_top = top.offsetTop + top.offsetHeight + 230;
	} else {
		var real_top = top;
	}
	if (isNaN(left)) {
		var real_left = left.offsetLeft + left.offsetWidth + 135;
	} else {
		var real_left = left;
	}
	if (IE) {
		real_left = event.clientX;
		real_top = event.clientY;
	}
	openCalendar(field, real_top, real_left, doAfter);
}

var day;
var month;
var year;
var clock_set = 0;

// Apriamo la finestra di apertura del calendario
function openCalendar(field, top, left, doAfter) { // form, field, type
	var d = document;
	if(!doAfter) var doAfter;
	if ($("divCalendario")) {
		$("divCalendario").style.top = top + "px";
		$("divCalendario").style.left = left + "px";
	} else {
		// creo il div
		divCal = document.createElement("div");
		divCal.setAttribute("id", "divCalendario");
		divCal.style.top = "100px";
		divCal.style.left = "100px";

		divCalTitolo = document.createElement("div");
		divCalTitolo.setAttribute("id", "calendar_titolo");

		divCalTitolo.innerHTML = "Calendario";

		imgClose = document.createElement("img");
		imgClose.setAttribute("id", "img_close");
		imgClose.setAttribute("src", "immagini/close.gif");
		imgClose.onclick = function () { d.getElementsByTagName("body")[0].removeChild($("divCalendario")); }
		divCalTitolo.appendChild(imgClose);

		divCalData = document.createElement("div");
		divCalData.setAttribute("id", "calendar_data");

		divCal.appendChild(divCalTitolo);
		divCal.appendChild(divCalData);
		document.getElementsByTagName("body")[0].appendChild(divCal);
	}
	new Draggable('divCalendario', { endeffect: function(element) { var toOpacity = typeof element._opacity == 'number' ? element._opacity : 0.9; new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity}); }, revert:false});

	dateField = $(field);
	dateType = "date";

	initCalendar(doAfter);
}

// Initializes calendar window.
function initCalendar(doAfter) {
	if(!doAfter) var doAfter;

	var month_names = new Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre");
	var day_names = new Array("Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom");

	if (!year && !month && !day) {
		/* Called for first time */
		if (dateField.value) {
			value = dateField.value;
			date        = value.split("-");
			day         = parseInt(date[2],10);
			month       = parseInt(date[1],10) - 1;
			year        = parseInt(date[0],10);
		}
		if (isNaN(year) || isNaN(month) || isNaN(day) || day == 0) {
			dt      = new Date();
			year    = dt.getFullYear();
			month   = dt.getMonth();
			day     = dt.getDate();
		}
	} else {
		/* Moving in calendar */
		if (month > 11) {
		   month = 0;
		   year++;
		}
		if (month < 0) {
		   month = 11;
		   year--;
		}
	}

	if ($) {
		cnt = $("calendar_data");
	} else if (d.all) {
		cnt = d.all["calendar_data"];
	}
	cnt.innerHTML = "";
	str = ""

	//heading table
	str += '<table class="calendar"><tr><th width="50%"><a href="javascript:month--; initCalendar();"><img src="immagini/b_left.gif" alt="&laquo;" title="Mese precedente" /></a> ' + month_names[month] + ' <a href="javascript:month++; initCalendar();"><img src="immagini/b_right.gif" alt="&raquo;" title="Mese successivo" /></a></th>';
	str += '<th width="50%"><a href="javascript:year--; initCalendar();"><img src="immagini/b_left.gif" alt="&laquo;" title="Anno precedente" /></a> ' + year + ' <a href="javascript:year++; initCalendar();"><img src="immagini/b_right.gif" alt="&raquo;" title="Anno successivo" /></a></th></tr></table>';

	str += '<table class="calendar"><tr>';
	for (i = 0; i < 7; i++) {
		str += "<th>" + day_names[i] + "</th>";
	}
	str += "</tr>";

    var firstDay = new Date(year, month, 1).getDay();
    var lastDay = new Date(year, month + 1, 0).getDate();
	if (firstDay == 0) firstDay = 7;
    str += "<tr>";

    dayInWeek = 0;
    for (i = 0; i < firstDay - 1; i++) {
        str += "<td>&nbsp;</td>";
        dayInWeek++;
    }
    for (i = 1; i <= lastDay; i++) {
        if (dayInWeek == 7) {
            str += "</tr><tr>";
            dayInWeek = 0;
        }

        dispmonth = 1 + month;

        if (dateType == 'datetime' || dateType == 'date') {
            actVal = formatNum2(i, 'day') + "/" + formatNum2(dispmonth, 'month') + "/" + formatNum4(year);
        } else {
            actVal = "" + formatNum2(i, 'day') + "/" + formatNum2(dispmonth, 'month') + "/" + formatNum4(year);
        }
        if (i == day) {
            style = ' class="selected"';
        } else {
            style = '';
        }
        str += "<td" + style + "><a href=\"javascript:returnDate('" + actVal + "', '" + doAfter + "');\">" + i + "</a></td>"
        dayInWeek++;
    }
    for (i = dayInWeek; i < 7; i++) {
        str += "<td>&nbsp;</td>";
    }

    str += "</tr></table>";

    cnt.innerHTML = str;

}

/* Formattiamo un numero a 2 cifre
 * @param   int number to format. */
function formatNum2(i, valtype) {
    f = (i < 10 ? '0' : '') + i;
    if (valtype && valtype != '') {
        switch(valtype) {
            case 'month':
                f = (f > 12 ? 12 : f);
                break;

            case 'day':
                f = (f > 31 ? 31 : f);
                break;

            case 'hour':
                f = (f > 24 ? 24 : f);
                break;

            default:
            case 'second':
            case 'minute':
                f = (f > 59 ? 59 : f);
                break;
        }
    }

    return f;
}

/* formattiamo un numero a 4 cifre */
function formatNum4(i) {
    return (i < 1000 ? i < 100 ? i < 10 ? '000' : '00' : '0' : '') + i;
}

/**
 * Ritorniamo la data dal calendario
 * @param   string     date text
 */
function returnDate(data, doAfter) {
	txt = data;
	dateField.value = txt;
	document.getElementsByTagName("body")[0].removeChild($("divCalendario"));

	if (doAfter) { setTimeout( function() { eval(doAfter) }, 100); }
}

/* controllo la correttezza della scrittura dell'ora */
function formattaOra(id) {
	if (id && $(id)) {
		ora = $F(id);

		if (ora.length == 5) {
			// controllo il terzo carattere
			if (ora.charAt(2) != ":") {
				// lo cambio con i : (due punti)
				car = ora.charAt(2);
				ora = ora.replace(car, ":");
				$(id).value = ora;
			}
		} else if (ora.length == 4) {
			// controllo se č presente un carattere di separazione
			ore = ora.substring(0,2);
			min = ora.substring(2,4);
			$(id).value = ore + ":" + min;
		} else if (ora.length == 3) {
			// controllo se č presente un carattere di separazione
			ore = ora.substring(0,1);
			min = ora.substring(1,3);
			$(id).value = "0" + ore + ":" + min;
		} else if (ora.length == 2) {
			// imposto i minuti a :00
			$(id).value = ora + ":00";
		} else if (ora.length == 1) {
			$(id).value = "0" + ora + ":00";
		} else if (ora.length != 0) {
			// errore nell'inserimento
			alert("Controllare la correttezza del valore inserito", "Data non valida", "error");
		}
	}
}
/* --------------------------- CALENDARIO */

function eliminaEvento(id,tipo) {
	var answer = confirm ("Sei sicuro di voler eliminare questo evento?");
	if (answer) {
		var tabella;
		if (tipo=='scuola') {
			elimina('wb_note_scuola','id_nota',id);
			elimina('wb_note_scuola_gruppi','id_nota_scuola',id,'home.php');
		} else {
			if (tipo=='gruppo') {
				elimina('wb_note','id_nota',id);
				elimina('wb_note_gruppi','id_nota',id,'home.php');
			} else {
				elimina('wb_note','id_nota',id,'home.php');
			}
		}
	}
}

function eliminaAttivita(id) {
	var conferma = confirm("Sei sicuro di voler eliminare questa attivitā?");
	if (conferma) {
		elimina('wb_attivita','id_nota',id,'attivita.php');
	}
}

function elimina(table,field,id,redirect) {
	if (redirect != 'NULL') {
		var url = 'xml/xml_elimina.php';
		var pars = 'tabella='+table+'&campo='+field+'&id='+id;
		var myAjax = new Ajax.Request (url, { method:'post', parameters:pars, onComplete:function () { window.location = redirect; }});
	} else {
		var url = 'xml/xml_elimina.php';
		var pars = 'tabella='+table+'&campo='+field+'&id='+id;
		var myAjax = new Ajax.Request (url, { method:'post', parameters:pars });
	}
}

function compatibilitaEventi(tab,id) {
	var data = $('data').value;
	var inizio = document.getElementsByTagName("input")["inizio"].value;
	var fine = document.getElementsByTagName("input")["fine"].value;
	if (data != "dd/mm/yyyy" && inizio != "hh:mm" && fine != "hh:mm") {
		var url = "xml/xml_verifica_compatibilita_eventi.php";
		var dataArr = data.split("/");
		if (tab==0) {
			var tabella = 'note';
		} else if (tab==1) {
			var tabella = 'note_scuola';
		}
		var pars = 'table='+tabella+'&data='+dataArr[2]+"-"+dataArr[1]+"-"+dataArr[0]+'&inizio='+inizio+'&fine='+fine+'&id='+id;
		var myAjax = new Ajax.Request (url, { method:'get', parameters:pars, onComplete:compatibilitaEventiAnswer });
	}
}

function compatibilitaEventiAnswer(originalRequest) {
	if (originalRequest.responseText == "failed") {
		alert("ATTENZIONE: un altro evento registrato si sovrappone a questo.");
		$('data').value="dd/mm/yyyy";
		document.getElementsByTagName("input")["inizio"].value="hh:mm";
		document.getElementsByTagName("input")["fine"].value="hh:mm";
	}
}

function suggestDocente(src) {
	if (src=="") {
		$('select').style.display = "none";
		$('idDocente').value = "";
	} else {
		var url = 'xml/xml_suggest_docente.php';
		var pars = 'src='+src;
		var myAjax = new Ajax.Updater ('select',url,{ method:'get',parameters:pars, onComplete:function () { $('select').style.display = "block"; }});
	}
}

function selectDocente(nome,id) {
	$('docente').value = nome;
	$('idDocente').value = id;
	$('select').style.display = "none";
}

function confermaNotaDelGruppo(id) {
	var chiediConf = confirm("Questa opzione farā si che gli utenti di un gruppo dei quali tu sei capogruppo visualizzino la nota. Continuare e quindi scegliere il gruppo?");
	if (chiediConf) {
		window.location = "eventi_associa_gruppo.php?id="+id;
	}
}

function associaNotaAGruppo(idNota,idGruppo,gruppo) {
	var conferma = confirm("Stai per associare la nota al gruppo "+gruppo.replace("\'","'")+". Continuare?");
	if (conferma) {
		var url = 'inserisci.php';
		var pars = 'tabella=note_gruppi&nota='+idNota+'&gruppo='+idGruppo;
		var myAjax = new Ajax.Request (url, { method:'post', parameters:pars, onComplete: function () { window.location = 'eventi_vedi.php?id='+idNota+'&tipo=gruppo'; } });
	}
}

function showGruppiFilto(div) {
	if (div=='0' && $('gruppi').style.display == "none") {
		new Effect.SlideUp($('filtro'));
		new Effect.SlideDown($('gruppi'));
	} else if (div=='1' && $('filtro').style.display == "none") {
		new Effect.SlideUp($('gruppi'));
		new Effect.SlideDown($('filtro'));
	}
}

function salvaAssocia() {
	var chiediConf = confirm("Questa opzione farā si che gli utenti di un gruppo dei quali tu sei capogruppo visualizzino la nota. Continuare e quindi scegliere il gruppo?");
	if (chiediConf) {
		$('tabella').value = "note2";
		document.modulo.submit();
	}
}
