
$.fn.idle = function(time)
{
    var o = $(this);
    o.queue(function()
    {
       setTimeout(function()
       {
          o.dequeue();
       }, time);
    });
    return this;             
}
 
$.preLoadImages = function(arguments)
{
  for(var i = 0; i<arguments.length; i++)
  {
    jQuery("<img>").attr("src", arguments[i]);
  } 
}

function updateDateField(timeStamp, prefix){
	var tmpDate = new Date(timeStamp);
	var tmpYear = tmpDate.getFullYear();
	var tmpMonth = tmpDate.getMonth();
	var tmpDay = tmpDate.getDate();

	selectOption("#"+prefix+"Year option", tmpYear);
	selectOption("#"+prefix+"Month option", tmpMonth+1);
	selectOption("#"+prefix+"Day option", tmpDay);
	
	
}


function getDateFieldTimeStamp(prefix){ 
	var tmpYear = $("#"+prefix+"Year option:selected").val();
	var tmpMonth = parseInt($("#"+prefix+"Month option:selected" ).val()) -1 ;
	var tmpDay = $("#"+prefix+"Day option:selected" ).val();
	
	var tmpDate = new Date(Date.UTC(tmpYear, tmpMonth, tmpDay, 0, 0, 0, 0));
	return tmpDate.getTime();
 
}

function selectOption(jqstring, checkValue){
	var op = $(jqstring);
	for(var i=0; i<op.length; i++){
		if($(op[i]).attr("value") == checkValue) { 
			$(op[i]).attr("selected", "selected");
		}
	}
}

function ElementScroller () {  
	this.currentElement = 0;
	this.oldElement = 0;
	this.scrollBy = 1;
	this.selector = "";
	this.speed = 500;
	this.animating = false;
	this.test = 0;
	this.numElements = 0;
	this.autoScroll = false;
	this.autoScrollSpeed = 10000;
	this.autoScrollInterval = null;
	
	this.init = function (selector, scrollBy, speed, autoScroll, autoScrollSpeed){
		this.selector = selector;
		if(scrollBy){
			this.scrollBy = scrollBy;
		}
		if(speed){
			this.speed = speed;
		}
		if(autoScroll){
			this.autoScroll = autoScroll;
		}
		if(autoScrollSpeed){
			this.autoScrollSpeed = autoScrollSpeed;
		}
		this.numElements = $(this.selector).length; 
		
		if(autoScroll){
			this.startAutoScroll();
		}
	}
	
	this.startAutoScroll = function (){
		
		var t = this; 
		this.autoScrollInterval = window.setInterval(function(){t.switchElement("next");}, 	this.autoScrollSpeed);
	}
	
	this.stopAutoScroll = function(){
		window.clearInterval(this.autoScrollInterval);
		this.animating = false;
	}
	
	this.switchElement = function (mod){
		 
		if(this.animating == false) {
			if(this.autoScroll){
				this.stopAutoScroll();
			}
			this.animating = true; 
			
			this.oldElement = this.currentElement; 
			switch(mod){
				case "previous":
					this.currentElement-=this.scrollBy;
					if(this.currentElement < 0) {
						if(this.scrollBy == 1){
							this.currentElement = this.numElements -(this.scrollBy);
						} else {
							this.currentElement = this.numElements -(this.scrollBy - (this.scrollBy - this.numElements%this.scrollBy));
						}
					}
					break;
				case "next":
				default:
					this.currentElement+=this.scrollBy;
					if(this.currentElement >= this.numElements) {
						this.currentElement = 0;
					}
					break;
				 
			}  
			
			var selector = this.selector;
			var speed = this.speed;
			var ce = this.currentElement;
			var scrollBy = this.scrollBy;
			
			var es = this;
	 
			$(this.selector).slice(this.oldElement, this.oldElement+this.scrollBy).fadeOut(this.speed, function(){
				$(selector).slice(ce, ce+scrollBy).fadeIn(speed, function(){es.animating = false;}); 
				

				if(es.autoScroll){
					es.startAutoScroll();
				}
				
			}); 
			
		}  
		 
	}
	
} 


function eventPager () {
    this.mode = "all" // other options: 1,2,3
    this.page = 1;
    this.identifier = "esc";
    this.buttons = [];
    this.perPage = 6;
    this.tabClickCallback = "";
   

    this.init = function(perPage, identifier, buttons, tabClickCallback) {
    	if(identifier != ""){
    		this.identifier = identifier;
    	}
    	if(tabClickCallback != undefined){
    		this.tabClickCallback = tabClickCallback;
    	}
    	this.buttons.push(this.identifier+"All");
    	for(var i=0; i<buttons.length; i++){
    		this.buttons.push(this.identifier + buttons[i]);
    	}
   	 	this.items = this.getTotalItems();
	    if(perPage){
	    	this.perPage = perPage;
	    }
	    this.setPager();

	    for(var i =0; i < this.buttons.length; i++){
	    	var tabClickCallback = this.tabClickCallback;
			$("#"+this.buttons[i]).click(function(){
				var tmpID =$(this).attr("id");
				var mode = "";
				var regExp = /[0-9]+/;
				var result = tmpID.match(regExp)
				if(result!= null){
					mode = result[0];
				} 
				eventPager.switchMode(mode, tabClickCallback);
			});
	    }
    }


    this.setPager = function(){
		var totalPages = Math.ceil(this.items/this.perPage);
		var html = "";
		var objAry = [];
		for(var i=1; i<= totalPages; i++) {
			var CSSclass = "pagerItem ";
			if(i == this.page) {
				CSSclass += "current";
			}
			objAry.push($("<span>").attr("class", CSSclass).html(i)); 
		}
		$("."+this.identifier+"Pager").empty();
		$(objAry).appendTo("."+this.identifier+"Pager"); 
		$("."+this.identifier+"Pager span").click(function(){
			eventPager.gotoPage(parseInt($(this).html()));
		})
		 
    }
        
    this.gotoPage = function(page) {
        var myPage = parseInt(page);
        if(myPage != this.page){
            this.page = myPage;
        	$("."+this.identifier+"Box").hide();

    		if(this.mode == "all"){
    			var selector = "."+this.identifier+"Box";
    		} else {
    			var selector = '.dif'+this.mode; 
    		}
    		var factor = (this.page-1)*this.perPage;
			for(var i= factor; i<factor+this.perPage; i++){ 
				$(selector).eq(i).show();
			}
			this.setPager();
        }
    } 
    
    this.switchMode = function(mode, tabClickCallback){  
	 	this.page = 1;
		switch(mode){
		/*  @TODO cambiare */
		case "1":
		case "2":
		case "3":
		case "4":
		case "5":
		case "6":
		case "7":
		case "8":
		case "9":
		case "10":
			this.mode = mode; 
		 	this.changeButtons(this.identifier+mode);
			
		break;
		default:
			this.mode = "all";
		 	this.changeButtons(this.identifier+"All");
		break;
		} 

		this.items = this.getTotalItems();
		$("."+this.identifier+"Box").hide();
		if(this.mode == "all"){
			var selector = "."+this.identifier+"Box";
		} else {
			var selector = '.dif'+this.mode; 
		}

		$(selector).slice(0,  this.perPage ).show();
		this.setPager();
		if(tabClickCallback != ""){
			window[tabClickCallback]();
		}
    }

    this.changeButtons = function (name) {
		for(var i=0; i<this.buttons.length; i++){
			var curBut = this.buttons[i];
			if (curBut == name){
				$("#"+curBut).removeClass("buttonTab-wrapper-disabled")
			} else {
				$("#"+curBut).addClass("buttonTab-wrapper-disabled")
			}
		}
    }

    this.getTotalItems = function () {
        var searchClass = "."+this.identifier+"Box";
		if(this.mode != "all"){
			var searchClass = '.dif'+this.mode;
		}
		var totalItems =  $(searchClass).length;
		return totalItems;
    }
}

function ImageScroller () {
	this.currentPic = 0;
	this.mode = "src";
	this.selector = "#picGallery img";
	this.placeHolder = "#imgGall";
	
	this.init = function(mode, selector, placeHolder){
		if(mode){
			this.mode = mode;
		}
		if(selector){
			this.selector = selector;
		}
		if(placeHolder){
			this.placeHolder = placeHolder;
		}
		var numElements = $(this.selector).length;
		if(numElements < 2){
			this.active = false;
			$("#eventScroller").hide();
		}
	}
	
		
	this.changePic = function(mod){ 
		this.numPics = $(this.selector).length; 
		var speed = 500;
		switch(mod){
		case "next":
			this.currentPic++;
			if(this.currentPic > this.numPics-1) {
				this.currentPic = 0;
			}
			break;
		case "previous":
			this.currentPic--;
			if(this.currentPic < 0) {
				this.currentPic = this.numPics-1;
			}
			break;
			 
		}
		
		var selector = this.selector;
		var currentPic = this.currentPic;
		var mode = this.mode;
		$(this.placeHolder).fadeOut(speed, function(){
			switch (mode){
				case 'src':
					$(this).attr("src", $(selector).eq(currentPic).attr("src"));
					break;
				case 'background':
					var bg = "url("+$(selector).eq(currentPic).attr("src")+")"; 
					$(this).css("background-image", bg);
					break;
			}  
			$(this).fadeIn(speed);
		});
	}
	
}

function restoreAttractionList(){ 
	$("#ticketSingle").hide();
	$(".ticketRow").show();
	$(".ticketPager").show();
}

function restoreExcursionsList() {
	$("#escSingle").hide();
	$("#escContainer").show(); 
	$("#escursioni").removeClass("autoHeight").addClass("fourRows");
	
}

function restoreRestaurantList() {
	$("#restSingle").hide();
	$("#escContainer").show(); 
	
}

function findNextSiblingWithClass(element, direction, myClass, identifierClass){  
	if(direction == "previous"){
		var newElement = element.prev(identifierClass);
	} else {
		var newElement = element.next(identifierClass);
	}
	 
	var tmpLength = newElement.length;
	
	if(tmpLength == 0){
		return false;
	} else {
		if(newElement.hasClass(myClass)){
			return newElement;
		} else {
			return findNextSiblingWithClass(newElement, direction, myClass, identifierClass);
		}
	}
		 
	
}

function changeSingleExc(element, direction){
	var objID = $("#ID_escursioni").attr("title"); 
	var curDiv = $("#escBox"+objID);
	if(direction == "previous"){
		var nextDiv = curDiv.prev();
		 
	} else {
		var nextDiv = curDiv.next();
		 
	}
	var nextDivId = nextDiv.attr("id");  
	if(nextDivId != undefined){
		var href= nextDiv.find("a.exploreLink").attr("href");
		if(href!= undefined){
			window.location = href;
		}
	}
	return false;
}
function changeSingleRest(element, direction){
	var objID = $("#ID_ristoranti").attr("title"); 
	var curDiv = $("#rescTr"+objID);
	if(direction == "previous"){
		var nextDiv = curDiv.prev();
		 
	} else {
		var nextDiv = curDiv.next();
		 
	}
	var nextDivId = nextDiv.attr("id");  
	if(nextDivId != undefined){
		var href= nextDiv.find("a.restLink").attr("href");
		if(href!= undefined){
			window.location = href;
		}
	}
	return false;
}

function changeSingleEvent(element, direction){
	var container = element.parents("#ticketSingle"); 
	var id = $("#ticketSingleContent").data("version_ID");
	
	if (eventPager.mode != "all"){
		var elementClasses = $("#event"+id).attr("class");
		var pattern = /dif[0-9]+/;
		var result = elementClasses.match(pattern);
		var specificClass = "."+result[0];
		//var specificClass = "."+$("#")
		var nextDiv = findNextSiblingWithClass($("#event"+id), direction, specificClass, ".eventFloat");
		 
	} else {
		if(direction == "previous"){
			var nextDiv = $("#event"+id).prev();
			 
		} else {
			var nextDiv = $("#event"+id).next();
			 
		}
	}
	if(nextDiv){
		var nextDivId = nextDiv.attr("id");
		if(nextDivId != undefined){
			var pattern = /[0-9]+/;
			var result = nextDivId.match(pattern);
			if (result!= null){
				var eventId = result[0];
				loadAttraction(eventId);
			}
		}
	}
	
	return false;
}

function loadAttraction(id){
	//alert (id);
	$("#ticketContainer").fadeTo(0, 0.3);
	$("#ticketLoading").show(); 
	var url = "tko"+id+"-read?noCache=" + Math.random(); 
	$.getJSON(url, function(data){ 
 
		$("#ticketContainer").fadeTo(0, 1);
		$(".ticketRow").hide();
		$(".ticketPager").hide();
		//$("#ticketSingle .ticketSingleContent").html(data);
		$("#ticketLoading").hide(); 
		var title =  data.title ; 
		 
		var dates = data.dates;
		var descr = data.descr;
		var price = data.price;
		var mainPicture = data.mainPicture;

		$("#ticketSingleContent .eventTitle").html(title); 
		$("#ticketSingleContent .eventDate").html(dates); 
		$("#ticketSingleContent .descr").html(descr); 
		$("#ticketSingleContent .eventPic").css("background-image", "url("+mainPicture+")");
		$("#ticketSingleContent .price").html(price + " €");
		$("#ticketSingleContent").data("version_ID", id);
		//  f_finnCart_addVersion_
		$("#ticketSingleContent select.quantitySelect").attr("name", "f_finnCart_addVersion_"+id);
		

		$("#ticketSingle").show();
		
	    //alert("Data Loaded: " + title.html());
	 });
}

function setCookieBookForm ( type) {
	if(type == "guide1"){
		var arrivalDate = getDateFieldTimeStamp("from");		 
	} else if (type == "guide2"){
		var arrivalDate = $("#arrivalDate").val();		 
	} else {
		var arrivalDate = getDateFieldTimeStamp("arrivalDate");
	}
	

	var Overnights = $("#Overnights").val();
	var RoomType = $("#RoomType").val();
	var NumberPerson = $("#NumberPerson").val();
	var Board = $("#Board").val();
	
	var cookie = arrivalDate+"-"+Overnights+"-"+RoomType+"-"+NumberPerson+"-"+Board;
	
	document.cookie = "tirolBookForm="+cookie;
	
}

function convertJscriptMonthForDate(month) {
	month  = parseInt(month) + 1;
	if(month <10) {
		month = "0"+month;
	}
	return month;
}

function twoCharsDay (day){
	if(day <10) {
		day = "0"+day;
	}
	return day;
}

function manageBookForm (theForm, formType){
	if(formType == "guide1" ){
		var arrivalDate = getDateFieldTimeStamp("from");
		var departureDate = getDateFieldTimeStamp("to");
		
		var Overnights = Math.round((departureDate - arrivalDate) / (3600 * 24 * 1000));
		$("#Overnights").val(Overnights);
	} else if ( formType == "guide2") {
		var arrivalDate = parseInt( $("#arrivalDate").val());
	} else { 
		var arrivalDate = getDateFieldTimeStamp("arrivalDate");
		
	} 
	var sendDate = new Date(arrivalDate); 
	var convertedDate = sendDate.getFullYear() + "-" + convertJscriptMonthForDate(sendDate.getMonth()) + "-" + twoCharsDay(sendDate.getDate());
 
	$("#Checkin").val(convertedDate); 
}

function readCookieBookForm(){
	var allcookies = document.cookie;
	var pos = allcookies.indexOf("tirolBookForm=");
	if(pos!= -1){ 
		var start = pos + 14; 
		var end = allcookies.indexOf(";", start);
		if(end == -1) {end = allcookies.length;} 
		var value = allcookies.substring(start, end);  
		
		var array = value.split("-");
		
		

		 
		return array;
	} 
	return false;
}

function manageCookieBookForm(){
	var datesAreSet = false;	
	var result = readCookieBookForm();	
	if(result != false){ 
		 
		
		var arrivalDateTs = parseInt(result[0]);
		var Overnights = parseInt(result[1]);
		if(arrivalDateTs > 0 && Overnights > 0){
			datesAreSet = true;
		 	updateDateField(arrivalDateTs, "arrivalDate"); 
			$("#Overnights option[value='"+Overnights+"']").attr('selected', 'selected');
		 	
		 	
		}
		var RoomType = parseInt(result[2]);
		var NumberPerson = parseInt(result[3]);
		var Board =  parseInt(result[4]);
		$("#RoomType option[value='"+RoomType+"']").attr('selected', 'selected');
		$("#NumberPerson option[value='"+NumberPerson+"']").attr('selected', 'selected');
		$("#Board option[value='"+Board+"']").attr('selected', 'selected');

		 
		
	} 
	if(datesAreSet == false){
	
		var now = new Date();
	 	updateDateField(now.getTime(), "arrivalDate");
	 	//updateDateField(now.getTime() + 7*3600*24*1000, "departureDate");
	}
}
function populateRedirectForm(){ 	
	var result = readCookieBookForm();
	var setDates = false;
	if(result != false){ 
		 
		
		var arrivalDateTs = parseInt(result[0]);
		var departureDateTs = parseInt(result[1]);
		if(arrivalDateTs > 0 && departureDateTs > 0){
			setDates = true;
		 	
		 	var arrD = new Date(arrivalDateTs);
		 	var myDay = String(arrD.getDate()); 
		 	if(myDay.length == 1){
		 		myDay = "0"+ String(myDay);
		 	} 
		 	$("#arrivalDateDay").val(myDay);
		 	
		 	var myMonth = String(arrD.getMonth() + 1); 
		 	if(myMonth.length == 1){
		 		myMonth = "0"+ String(myMonth);
		 	} 
		 	$("#arrivalDateMonth").val(myMonth);
		 	$("#arrivalDateYear").val(arrD.getFullYear());
			
		 	
		 	var daysDiff = parseInt(departureDateTs - arrivalDateTs)/ (24*3600*1000);
		 	if(daysDiff<0){
		 		daysDiff = -daysDiff;
		 	}
		 	$("#GetParStays").val(daysDiff);
		 	
		}
		var Room0 = parseInt(result[2]);
		var PersonsinRoom0 = parseInt(result[3]);
		
		$("#Room0").val(Room0);
		if(Room0 == 2){
			$("#BoardType").val(1);
		} else {
			$("#BoardType").val(2);
		}
		$("#PersonsinRoom0").val(PersonsinRoom0);

		 
		
	} 
	if(setDates == false){
	 
		var arrD = new Date();
	 	var myDay = String(arrD.getDate()); 
	 	if(myDay.length == 1){
	 		myDay = "0"+ String(myDay);
	 	} 
	 	$("#arrivalDateDay").val(myDay);
	 	
	 	var myMonth = String(arrD.getMonth() + 1); 
	 	if(myMonth.length == 1){
	 		myMonth = "0"+ String(myMonth);
	 	} 
	 	$("#arrivalDateMonth").val(myMonth);
	 	$("#arrivalDateYear").val(arrD.getFullYear());
	 	$("#GetParStays").val(7);
	}
}

function markFieldError(field, activate){
	if(field instanceof Array){
		for(var i=0; i<field.length; i++){
			markFieldError(field[i], activate);
		}
	} else {
		if(activate == false){ // reset a campo pulito
			if ( $.browser.msie && $.browser.version == "6.0" ) {
				$(field).css("background-color", "white").css("color", "#808080");
			} else 	if ( $.browser.msie && $.browser.version == "7.0" ) {
				$(field).css("border", "1px solid #E4E4E4"); 	
			} else {
				$(field).css("outline", "none");	
			}
		} else { // segnare errore
			if ( $.browser.msie && $.browser.version == "6.0" ) {
				$(field).css("background-color", "#BB2224").css("color","white"); 
			} else 	if ( $.browser.msie && $.browser.version == "7.0" ) {
				$(field).css("border", "1px solid #BB2224"); 
			} else {
				$(field).css("outline", "1px solid #BB2224");	
			}
		}
	}
}

function contattiErrorShow () {
	this.contatti = "";
	
	this.showErrors = function (errors, validElements){
		 
		markFieldError(["#finnform_contatti input","#finnform_users input","#finnform_contatti select","#finnform_users select"], false) ; 

		 
		$("#terminiError").hide();
		for (var i=0; i<errors.length; i++){ 
			var elementID = errors[i].element.id;
			markFieldError("#"+elementID, true); 
			if(elementID == 'f_contatti_accettoTermini'){
				$("#terminiError").show();
			}
			if(elementID == 'f_users_accettoTermini'){
				$("#terminiError").show();
			}
		} 
	}
}
