/* CONFIG */
menuClassName = "navbar";

function closeSub(menu) {
	for (var i=0; i<menu.childNodes.length; i++)
		if (menu.childNodes[i].nodeName.toLowerCase()=="li") {
			li = menu.childNodes[i];
			li.onmouseover = li.onactivate = li.onfocus = function() { if (this.subMenu) this.subMenu.className = this.subMenu.className.replace(/subMenu-off/g,"subMenu-on") };
			li.onmouseout = li.ondeactivate = li.onblur = function() { if (this.subMenu) closeSub(this.subMenu) };
			for (j=0; j<li.childNodes.length; j++)
				if (li.childNodes[j].nodeName.toLowerCase()=="ul" || li.childNodes[j].nodeName.toLowerCase()=="ol") closeSub(li.subMenu = li.childNodes[j]);
		}
	menu.className = menu.className.replace(/\s?subMenu-on/g,"")+" subMenu-off";
}

function createmap() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
		 
	  map.setCenter(new GLatLng(42.786441, 12.686934),9);	  
	  map.addControl(new GSmallZoomControl());
	  map.addControl(new GMapTypeControl());
	    var point = new GPoint(12.686934, 42.786441);

		
		var mark = new GMarker(point);
			GEvent.addListener(mark, "mouseover", function() {
                       mark.openInfoWindowHtml("<p><strong>Agrileisuretime</strong> <br /> terraia,47/A - Spoleto (Pg)</p>");
                     });
		map.addOverlay(mark);	
      }
}	

// ------------------------------------- crossfader
if (bartelme == undefined) var bartelme = {};
bartelme.newsticker = Class.create();
bartelme.newsticker.prototype = {
	initialize: function()
	{
		// Get elements
		this.interval = 10000;
		this.container = $("crossfade");
		this.messages  = $A(this.container.getElementsByTagName("li"));
		this.number_of_messages = this.messages.length;
		if (this.number_of_messages == 0)
		{
			this.showError();
			return false;
		}
		this.current_message = 0;
		this.previous_message = null;
		// Create toggle button
		
		this.hideMessages();
		this.showMessage();
		// Install timer
		this.timer = setInterval(this.showMessage.bind(this), this.interval);
  	},
	showMessage: function()
	{
		Effect.Appear(this.messages[this.current_message]);
		setTimeout(this.fadeMessage.bind(this), this.interval-2000);
		if (this.current_message < this.number_of_messages-1)
		{
			this.previous_message = this.current_message;
			this.current_message = this.current_message + 1;
		} else {
			this.current_message = 0;
			this.previous_message = this.number_of_messages - 1;
		}
	},
	fadeMessage: function()
	{
		Effect.Fade(this.messages[this.previous_message]);
	},
	hideMessages: function()
	{
		this.messages.each(function(message)
		{
			Element.hide(message);
		})
	},
	
	showError: function()
	{
		if (this.container.getElementsByTagName("ul").length == 0)
		{
			this.list = document.createElement("ul");
			this.container.appendChild(this.list);
		} else {
			this.list = this.container.getElementsByTagName("ul")[0];
		}
		this.errorMessage = document.createElement("li");
		this.errorMessage.className = "error";
		this.errorMessage.innerHTML = "Could not retrieve data";
		this.list.appendChild(this.errorMessage);
	}
}


if ('undefined' == typeof Node)
    Node = { ELEMENT_NODE: 1, TEXT_NODE: 3 };

MSG_BLANK              = ' &egrave; un campo obbligatorio!';
MSG_NOT_A_VALID_EMAIL  = ' non &egrave; un indirizzo valido';
MSG_NOT_A_DATE         = ' non &egrave; una data.';
MSG_NOT_AN_INTEGER     = ' non &egrave; un numero intero.';

REGEX_AUTO_FIELD = /^[^_]+(_Req)?(_(Int|Email|Date))?$/;
REGEX_BLANK = /^\s*$/;
REGEX_EMAIL = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
REGEX_DAY = /^(0?[1-9]|[1-2][0-9]|3[01])$/;
REGEX_MONTH = /^(0?[1-9]|1[0-2])$/;
REGEX_TYPED_FIELD = /_(Int|Email|Date)(_([0-9.]+))?(_([0-9.]+))?$/;
REGEX_YEAR = /^[0-9]{2,4}$/;

function addFormChecks() {
    var forms = document.forms;
    for (var index = 0; index < forms.length; ++index) {
        var form = forms.item(index);
        Event.observe(form, 'submit', checkForm);
    }
	 
} // addFormChecks

function checkForm(e) {
    // Compatibilità con MSIE e gli altri...
    e = e || window.event;
    var form = e.target || e.srcElement;
	
    var errors = '';
    var faulty = null;
	
	for (var index = 0; index < form.elements.length; ++index) {
        var field = form.elements.item(index);
        // Verifica sintassi
        if (!field.id.match(REGEX_AUTO_FIELD))
            continue;
        var value = getFieldValue(field);
        // Campo obbligatorio?
        if (field.id.match(/_Req/) && value.match(REGEX_BLANK)) {
            errors += '<li>' + getFieldName(field) + MSG_BLANK + '</li>';
            faulty = faulty || field;
            continue;
        }
	// Campo tipizzato?
	var match = field.id.match(REGEX_TYPED_FIELD);
	if (match) {
	    var type = match[1];
	    var error = checkTypedField(value, type);
	    if (error) {
		errors += '<li>' +getFieldName(field) + error + '</li>';
		faulty = faulty || field;
	    }
	}
    }
    if (!faulty)
        return;
		if (!$('error')) {		 
  			new Insertion.Bottom("box", '<ul id=\"error\">' + errors + '</ul>');
		}
		else {
			$('error').replace('<ul id=\"error\">' + errors + '</ul>');			
		}
	Event.stop(e);
    faulty.focus();
	
} // checkForm

function checkTypedField(value, type) {
    // Valori predefiniti
    var val;
    if ('Int' == type) {
        try {
            val = parseInt(value, 10);
	    if (String(val) != value & value!="")
	    	throw val;
        } catch (e) {
            return MSG_NOT_AN_INTEGER;
        }
    }
	
	if ('Email' == type) {
		var address= value;
		if (!address.match(REGEX_EMAIL)) {
        	return MSG_NOT_A_VALID_EMAIL;
		}     
    }
  
      if ('Date' == type) {
        var comps = value.split('/');
        if (3 != comps.length || !comps[0].match(REGEX_DAY) ||
            !comps[1].match(REGEX_MONTH) ||
            !comps[2].match(REGEX_YEAR))
            return MSG_NOT_A_DATE;
    }
    return null;
} // checkTypedField

function getFieldName(field) {
    var label = getLabelFor(field);
    if (!label)
        return field.name;
    var text = '';
    var node = label.firstChild;
    // Percorso in profondità, eliminata la ricorsione, del frammento sotto l'etichetta
    while (true) {
        if (Node.ELEMENT_NODE == node.nodeType && node.hasChildNodes())
            node = node.firstChild;
        else if (Node.TEXT_NODE == node.nodeType)
            text += node.nodeValue;
        if (node.nextSibling)
            node = node.nextSibling;
        else {
            node = node.parentNode;
            if (node == label)
                break;
            node = node.nextSibling;
        }
    }
    return text;
} // getFieldName

function getFieldValue(field) {
    if ('INPUT' == field.tagName)
        return field.value;
	if ('TEXTAREA' == field.tagName)
        return field.value;
    if ('SELECT' == field.tagName) {
        var value = '';
        if (-1 < field.selectedIndex) {
            var opt = field.options[field.selectedIndex];
            value = opt.value;
            if (!value && !('value' in opt))
                value = opt.text;
        }
        return value;
    }
    return '';
} // getFieldValue

function getLabelFor(field) {
    var labels = document.getElementsByTagName('label');
    for (var index = 0; index < labels.length; ++index) {
        var label = labels.item(index);
        if (label.htmlFor == field.id)
            return label;
    }
    return null;
} // getLabelFor
//
//function initCalendar () {
//	var dpck = new DatePicker({
//          relative	: 'date-from_Req',
//          language	: 'it'
//         });
//		 var dpck2 = new DatePicker({
//          relative	: 'date-to_Req',
//          language	: 'it'
//         });	
//}


function banner() {
	new Effect.Highlight('banner', { startcolor: '#73982F',
endcolor: '#394A13', afterFinish: function() { setTimeout(banner, 1000); } });
} 



window.onload = function() {
	if(tags_ = document.getElementsByTagName('ul')) {
		for(i=0; i<tags_.length; i++) 
			if (tags_[i].className==menuClassName) closeSub(tags_[i]);
	}
	addFormChecks();
	if ($('map')) {	createmap(); }
	if($("crossfade")) { new bartelme.newsticker(); }
	//if($("date-from_Req"))	{ initCalendar (); }
	
	if ($('banner')) {
		banner();	
	}
}


