/** GENERAL UTILITIES **/

/**
 * This function will reset a field value on click and then remove the event associated.
 * Bind to field element with something like
 * 
 * <script type="text/javascript">
 * 		window.addEvent("domready", function(){
 * 			$(inputId").addEvent("click", resetFieldValue);
 * 		});
 * </script>
 */
function resetFieldValue(){ 
	this.set("value", "");
	this.removeEvent("click", resetFieldValue);
}

/**
 * Funzione che permette la navigazione "a pallini" in un teaser generico.
 * @param teaserGroupId
 * @param teaserSlideId: oggetto da visualizzare
 * @param togglerId
 * @param bulletCurrent
 * @param bullet
 * @return
 */
function showItemTeaserSlide(teaserGroupId, teaserSlideId, togglerId, bulletCurrent, bullet){
	//alert(teaserGroupId);
	var elementToShow = $(teaserSlideId);
	var elementToHide = null;
	$$("div#" + teaserGroupId + " .teaserItemSlide").each(function(item, index){
		
		if (item.hasClass("visibleSlide")) elementToHide = item;
		
	});
	
	//alert(elementToShow);
	if (!elementToShow.hasClass("visibleSlide")){
		
//		elementToShow.morph('.visibleSlide');
//		elementToHide.morph('.hiddenSlide');
		
//		var myEffectHide = new Fx.Morph(elementToHide, {duration: 1000, transition: Fx.Transitions.linear});
//		var myEffectShow = new Fx.Morph(elementToShow, {duration: 1000, transition: Fx.Transitions.linear});
//		
//		myEffectHide.start({
//		    'opacity': [1,0]
//		}).chain(function(){
//			myEffectShow.start({
//			    'opacity': [0,1]
//			});
//		}).chain(function(){
//			elementToShow.removeClass("hiddenSlide");
//			elementToShow.addClass("visibleSlide");
//			
//			elementToHide.removeClass("visibleSlide");
//			elementToHide.addClass("hiddenSlide");
//	
//		});


		elementToShow.removeClass("hiddenSlide");
		elementToShow.addClass("visibleSlide");
		
		elementToHide.removeClass("visibleSlide");
		elementToHide.addClass("hiddenSlide");
		
		// update togglers
		$$("div#" + teaserGroupId + " .itemTeaserToggler").each(function(item, index){
			if (item.get("id") == togglerId){
				item.getElement("img").set("src", bulletCurrent);
			} else {
				item.getElement("img").set("src", bullet);
			}
		});
	}
} 

function autorun(teaserGroupId, bulletCurrent,bullet){
	var currentSelect;
	var count = 0;
	$$('div#itemTeaserGroup-'+teaserGroupId+' a.itemTeaserToggler').each(function(el){
		el.getChildren().each(function(e){
			count = count+1;
			if(e.get('src')== bulletCurrent){
				currentSelect = count;
			}
		});
	});
	if(currentSelect+1 > count){
		currentSelect=0;
	}
	
	showItemTeaserSlide(
			"itemTeaserGroup-"+teaserGroupId, 
			"itemTeaser-"+teaserGroupId+"-"+currentSelect, 
			"itemTeaserToggler-"+teaserGroupId+"-"+currentSelect, 
			bulletCurrent, 
			bullet);

	setTimeout("autorun('"+teaserGroupId+"','"+bulletCurrent+"','"+bullet+"')",4000);
}
function autorun2(teaserGroupId, bulletCurrent,bullet){
	var currentSelect;
	var count = 0;
	$$('div#itemTeaserGroup-'+teaserGroupId+' a.itemTeaserToggler').each(function(el){
		el.getChildren().each(function(e){
			count = count+2;
			if(e.get('src')== bulletCurrent){
				currentSelect = count;
			}
		});
	});
	if(currentSelect+1 > count){
		currentSelect=0;
	}
	
	showItemTeaserSlide(
			"itemTeaserGroup-"+teaserGroupId, 
			"itemTeaser-"+teaserGroupId+"-"+currentSelect, 
			"itemTeaserToggler-"+teaserGroupId+"-"+currentSelect, 
			bulletCurrent, 
			bullet);

	setTimeout("autorun2('"+teaserGroupId+"','"+bulletCurrent+"','"+bullet+"')",4000);
}
function truncate(longString, chars){
	longString = trim(longString);
	
	var len = chars;

	if (longString.length > len) {
	    longString = longString.substring(0, len);
	    longString = longString.replace(/\w+$/, '');
		longString = longString + "...";
	}
	
	return longString;
    
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
