// JavaScript Document

/**
 * Trim elimina gli spazi bianchi dall'inizio e dalla fine di una stringa
 * @param {String} str: valore a cui togliere gli spazi
 */
function Trim(str) 
{
	return str.replace(/\s+$|^\s+/g,""); 
	//return str.gsub(/\s+$|^\s+/,""); 
} 

/**
 * itera tutti gli elementi di un form e li metto in un hash
 * setta come chiave l'id del campo del form e come valore il value del campo del form.
 *
 * @param String idform id del form da iterare
 * @return HashMap myhash: mappa(id,value) del form
 */
function getFormFields(idform) {
	var myhash = new Hash();
	
	var form = $(idform);
	if( form ) {
		var key = "";
		var elements  = form.getElements();
		for(i=0; i < elements.length; i++) {
			var values = new Array();
			switch(elements[i].type) {

				case "reset":
				case "button":
				case "submit": { break; }
		    	case "radio": {
		    		
					try { key = elements[i].id; } catch(e) {  }
					if( key.blank() ) try { key = elements[i].name; } catch(e) { }
					if( !key.blank() && myhash.keys().indexOf(key) == -1) {
						var radios = document.getElementsByName(key);
						for(k=0; k<radios.length; k++) {
							if(radios[k].checked) {
								myhash.set(key, radios[k].value);
								break;
							}
						}
					}
					break;
				}
		    	default: 	{
		    		try { key = elements[i].id; } catch(e) {  }
					if( key.blank() ) try { key = elements[i].name; } catch(e) { }
					
					if( !key.blank() ) {
						if(  myhash.keys().indexOf(key) != -1) values = myhash.get(key);
						values.push($F(elements[i]));
						myhash.set(key, values);			
					}
		    	}
		    }
			key = "";
		}
	}
	
	return myhash;
}
 
 /**
  * checkAll: seleziona/deseleziona tutti i checkbox del form "form"
  * @param (Object) form da cui prendere i campi 
  */
 function checkAll(form)
 {
 	for (i = 0; i < form.elements.length; i++) 
 	{
 		var e = form.elements[i]; //elemento i-esimo del form
 		if (e.type == 'checkbox' ) 
 		{ // se e e' un checkbox
 			if( e.name.indexOf ('all') == -1 )
 				e.checked = form.allbox.checked; //se allbox e' selezionato seleziona e altrimenti lo deseleziona
 			else if( e.name != 'allbox' && form.allbox.checked)
 				e.checked = !form.allbox.checked;
 		}
 	}
 }

/**
 * aggiunge la classe selected all'elemento passato
 * 
 * @param objToSelect: id elemento da impostare selected
 * @return
 */
function addSelectedClass(objToSelect)
{
	if( !Object.isUndefined(objToSelect) || objToSelect != null )
	{
		var tmp = $(objToSelect);
		//alert($(objToSelect));
		$(objToSelect).addClassName('selected');
	}
}

/**
 * rimuove la classe selected a tutti gli elementi
 * 
 * @return void
 */
function removeSelectedClass()
{
	var objToDeSelect = $$(".selected");
	if( !Object.isUndefined(objToDeSelect) || objToDeSelect != null )
	{
		objToDeSelect.each(function(s) { s.removeClassName('selected'); });
	}
}

function selectMenu(curr_page, curr_subpage)
{
	try
	{
		removeSelectedClass();
		addSelectedClass(curr_page);
		addSelectedClass(curr_subpage);
	}
	catch( e ){}
}

/**
 * 
 * @param curr_subpage
 * @return
 */
function removeSubsection(curr_subpage)
{
	if( curr_subpage == '' || curr_subpage == null )
	{
		var subsec = $("subsections");
		var displ = "block";

		if( !Object.isUndefined(subsec) || subsec != null )
		{
			displ = (subsec.style.display == "none") ? "block" : "none";
		}
	
		$("subsections").style.display = displ;
	}
}

/**
 * CheckLength: controlla che la lunghezza del "testo" sia al massimo "maxchar".
 *		Conta il numero di caratteri immessi nel campo "testo".
 *		In "chr" scrive il numero di caratteri che possono essere ancora digitati.
 *		Se si tenta di immettere piu' di "maxchars" caratteri, i caratteri in piu' 
 *		vengono cancellati. 
 */
function CheckLength(testo,chr,maxchars)
{
  chars=testo.value; //testo digitato
  if (chars.length > maxchars)
  {// i caratteri digitati sono piu' di maxchars
    testo.value=chars.substr(0,maxchars);//si cancellano i caratteri che eccedono
    testo.blur();
  }
  chr.value=maxchars-testo.value.length;//si scrive il numero di caratteri che si possono ancora digitare
}

function getParentForm(el)
{
	while (el.parentNode != null && el.tagName != "FORM")
		el = el.parentNode;
	return (el.getAttribute('name')) ? el.getAttribute('name') : el
			.getAttribute('id');
}

function loadValidation(formId, func)
{
	//Object.isArray(formId)
	for (i = 0; i < formId.length; i++){
		// Put all your code in your document ready area
		$j("#"+formId[i]+"").find("[class^=validate]").validationEngine({
			//success :  function(){eval(funcName+"('"+urltarget+"','"+divId+"',"+params+",'"+formId+"','"+failureFunc+"',"+insertion+")");},
			success :  function(){eval(func);},
			failure : function() {},
			idForm : "#"+formId[i]
		});
	}
}


    // gestione preview immagini in sequenza
    __stop = true;
	__delay = 1000;
	__obj = null;
	__imagesArray = null;
	__counter=0;
	__timeout = null;
	function previewScrollingStart(imagesList, el) {
		__stop = false;
		__imagesArray = imagesList.split(",");
		__obj = el;
		__timeout = setTimeout('previewScroll()', __delay);
		return true;
	}

	function previewScroll() {

		if(__imagesArray != null && __obj != null) {
			var str = __imagesArray[__counter];
			__obj.src = "http://media.a-tono.com/"+str;
			__counter++;
			if(__imagesArray.length == __counter) __counter=0;
			if(!__stop) __timeout = setTimeout('previewScroll()', __delay);
		}
	}

	function previewScrollingStop() {
		__stop = true;
		__counter = 0;
		__imagesArray = null;
		__obj = null;
		clearTimeout(__timeout);
		return true;
	}
	

/*
 *	nascondiElem: nasconde dei div , l'effetto e' quello di chiudere dei div
 *			Input: elemCorrente e' l'id del div da nascondere
 */
function nascondiElem(elemCorrente) 
{
	if (document.getElementById) 
	{
		questoElem = document.getElementById(elemCorrente).style; //recupero lo stato del div
		
		questoElem.display == "none"; 
		
		return false;
	}
	else return true;
}

/*
 *	mostraElem: mostra/nasconde dei div nascosti, l'effetto e' quello di aprire/chiudere dei div
 *			Input: elemCorrente e' l'id del div da mostrare
 */
function mostraElem(elemCorrente) 
{
	//intShow=setInterval("mostraElem()",10000);
	if (document.getElementById) 
	{
		questoElem = document.getElementById(elemCorrente).style; //recupero lo stato del div
		
		if (questoElem.display == "block") questoElem.display = "none"; //se il div e' mostrato(menu aperto), lo nascondo(div chiuso)
		else	questoElem.display = "block"; // altrimenti lo mostro
		
		return false;
	}
	else return true;
}

/*
 *	mostraNascondi: mostra il div 'divMostra' nasconde i div 'divNascondi', l'effetto e' quello di aprire/chiudere dei menu
 *			Input:
 *				- divMostra e' l'id del div da mostrare
 *			    - divNascondi e' un Array di id dei div da nascondere
 */
function mostraNascondi(divMostra, divNascondi) 
{
	if (document.getElementById) 
	{
		
		if (document.getElementById(divMostra).style.display == "block") document.getElementById(divMostra).style.display = "none"; //se divMostra e' mostrato lo nascondo.. 
		else	document.getElementById(divMostra).style.display = "block"; //..altrimenti lo mostro
		
		for (i = 0; i<divNascondi.length; i++)
			if ( divNascondi[i] != divMostra ) document.getElementById(divNascondi[i]).style.display = "none"; //nascondo gli altri div
			
		return false;
	}
	else return true;
}

function removeSelectedBarClass()
{
	var objToDeSelect = $$(".selectedBar");
	if( !Object.isUndefined(objToDeSelect) || objToDeSelect != null )
	{
		objToDeSelect.each(function(s) { s.removeClassName('selectedBar'); });
	}
}

function addSelectedBarClass(objToSelect)
{
	if( !Object.isUndefined(objToSelect) || objToSelect != null )
	{
		var tmp = $(objToSelect);
		//alert($(objToSelect));
		$(objToSelect).addClassName('selectedBar');
	}
}
/**
 * Aggiunge la classe selected all'elemento passato e
 * rimuove la classe selected da tutti gli elementi presenti
 * nella barra.
 * 
 * @param objToSelect - id elemento da selezionare
 * @return
 */
function clickBar(objToSelect, box)
{
	try
	{
		removeSelectedBarClass();
		if( $(box).style.display == "block")  addSelectedBarClass(objToSelect);
	}
	catch( e ){}
}

function displayMessage(text)
{
	if( !Object.isUndefined(text) && !text.blank() )
	{
		$("notifications").innerHTML="<p>"+text+"</p>";
		$("notifications").slideDown();	
		var id = setTimeout("Effect.SlideUp($('notifications'))", 6000);
		$("notifications").onmouseover = function(e) { clearTimeout(id); };	
		$("notifications").onmouseout = function(e) {  $("notifications").slideUp(); };
	}
}

/* scroll orizzontale e verticale del contenuto di un elemento */

var scrollStep=1;
var timerScroll="";

	function scrollDiv(id, direction)
	{
		clearTimeout(timerScroll);
		var div = document.getElementById(id);
		switch( direction )
		{
			case 'up'	: div.scrollTop  -= scrollStep; break;
			case 'down' : div.scrollTop  += scrollStep; break;
			case 'left'	: div.scrollLeft -= scrollStep; break;
			case 'right': div.scrollLeft += scrollStep; break;
		}
		timerScroll=setTimeout("scrollDiv('"+id+"','"+direction+"')",0.5);
	}

	function toTop(id)
	{
	document.getElementById(id).scrollTop=0;
	}
	
	function toLeft(id)
	{
	document.getElementById(id).scrollLeft=0;
	}
	
	function toBottom(id)
	{
		document.getElementById(id).scrollTop=document.getElementById(id).scrollHeight;
	}
	
	function toRight(id)
	{
		document.getElementById(id).scrollLeft=document.getElementById(id).scrollWidth;
	}
		
	function stopMe()
	{
		clearTimeout(timerScroll);
	}
	
	function loadImage(el) {
		//alert(el.value);
		$('imageChanged').value ="T";
		$('currentImage').src = el.value;
	}

/* 
*	aggiunge la classe highlighted al padre di un input checkbox selezionato 
*	la rimuove se deselezionato 
*/
function highlightElem(objToSelect)
{
	/*if(this.checked){this.up().addClassName('highlighted');}else{this.up().removeClassName('highlighted');}*/
	if( objToSelect.checked )
	{
		objToSelect.up().addClassName('highlighted');
	}
	else
	{
		objToSelect.up().removeClassName('highlighted');
	}
}

/* aggiunge la classe firstChild al primo li di un ul */
function addFirstChildClass(id)
{
	var firstEl = $$('#' + id +' > li').first();
	firstEl.addClassName('firstChild');
}

/* aggiunge la classe lastChild all'ultimo li di un ul */
function addLastChildClass(id)
{
	var lastEl = $$('#' + id +' > li').last();
	lastEl.addClassName('lastChild');
}

/* seleziona il testo contenuto in un elemento */
function selectCode(a)
{
	// Get ID of code block
	var e = a.parentNode.parentNode.getElementsByTagName('DIV')[1];

	// Not IE
	if (window.getSelection)
	{
		var s = window.getSelection();
		// Safari
		if (s.setBaseAndExtent)
		{
			s.setBaseAndExtent(e, 0, e, e.innerText.length - 1);
		}
		// Firefox and Opera
		else
		{
			var r = document.createRange();
			r.selectNodeContents(e);
			s.removeAllRanges();
			s.addRange(r);
		}
	}
	// Some older browsers
	else if (document.getSelection)
	{
		var s = document.getSelection();
		var r = document.createRange();
		r.selectNodeContents(e);
		s.removeAllRanges();
		s.addRange(r);
	}
	// IE
	else if (document.selection)
	{
		var r = document.body.createTextRange();
		r.moveToElementText(e);
		r.select();
	}
}

