
function calendarManager () {
    this.date = new Date(); 
	this.firstDayThisMonth = "";
    
    this.firstDayMonth = new Date();
    this.month = 0; 

    this.startDate = null;
    this.endDate = null;
    
    this.currXml = "";


    this.states = {
    	"hiking":0,
    	"events":0,
    	"attr":0
    }

    this.dateChosen = false;
    this.guideCreationEnabled = false;

    this.init = function( ) {
		this.firstDayMonth = new Date ( Date.UTC(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0)  );
		//this.firstDayMonth = new Date ( this.date.getFullYear(),4, 1  );


		this.firstDayThisMonth = this.firstDayMonth ;
		
	

		this.populateMonth(this.firstDayMonth);
		this.populateDays(this.firstDayMonth);
		
		
    }

    this.periodAction = function(timeStamp){
      //  alert(timeStamp);
		if(this.startDate!= null && this.endDate == null){
			 this.closePeriod (timeStamp);
		} else { 
			this.initiatePeriod (timeStamp, true);
		}
    }

    this.checkFutureDate = function(timeStamp){
		var now = new Date();
		var nowDawn = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0, 0));
		var nowDawnTime = nowDawn.getTime();
		var check  = new Date(parseInt(timeStamp));
		var checkDawn = new Date(Date.UTC(check.getFullYear(), check.getMonth(), check.getDate(), 0, 0, 0, 0));
		
		var checkTime = checkDawn.getTime();
		if(checkTime  < nowDawnTime){
			return false;
		}
		return true;
    }

    this.initiatePeriod = function(timeStamp, reset){
        if(this.checkFutureDate(timeStamp)){
			this.startDate = parseInt(timeStamp);
			$(".boxDayInner").removeClass("boxDayInnerStart").removeClass("boxDayInnerMid");
			$(".boxDayInner hr."+timeStamp).parent().addClass("boxDayInnerStart");
			if(reset == false){
				if(this.endDate!= null && this.startDate > this.endDate) {
					this.endDate = this.startDate;  
					updateDateField(this.endDate, "to");
				}
				this.colourMidBoxes();
			} else {		 
				this.endDate = null;
			}
			updateDateField(this.startDate, "from");
        } else {
            if(reset == false){
        		// updateDateField(this.date.getTime(), "from");
            }
        }
 
    }

    this.closePeriod = function(timeStamp){
    	if(this.checkFutureDate(timeStamp)){
	        if(parseInt(timeStamp) < this.startDate){
				this.endDate = this.startDate;
				this.startDate = parseInt(timeStamp);
				updateDateField(this.startDate, "from");
	        } else {
				this.endDate = parseInt(timeStamp);
	        }
			$(".boxDayInner hr."+timeStamp).parent().addClass("boxDayInnerStart");
			this.colourMidBoxes();
			this.dateChosen = true;
			updateDateField(this.endDate, "to");
    	}


    }

    this.colourMidBoxes = function () {
    	var boxes = $(".boxDayInner");
		for(var i = 0; i < boxes.length; i++){
			var attr = parseInt($(boxes[i]).children("hr").attr("class"));
		//	alert(attr  + " start " + this.startDate + " end ");
			if(attr > this.startDate && attr< this.endDate ){
				$(boxes[i]).addClass("boxDayInnerMid");
			}
			
		}
    }

    this.populateDays = function (myDate){
    	
    	var dayOfWeek = myDate.getDay();
		if(dayOfWeek == 0){
			dayOfWeek = 7;
		}
    	var populateDate = new Date(myDate.getTime() - (dayOfWeek-1)*24*3600*1000);
		var tmpDate = new Date();

		$(".boxDayInner").removeClass("boxDayInnerStart").removeClass("boxDayInnerMid");
		for(var i = 0; i<42 ; i++) {
			tmpDate.setTime(populateDate.getTime() + (i)*24*3600*1000);
			var myClass = "";
			
			if(this.startDate !== null && (tmpDate.getTime() == this.startDate || tmpDate.getTime() == this.endDate) ){
				myClass ="boxDayInnerStart";
			} else if(tmpDate.getTime()>this.startDate && tmpDate.getTime() < this.endDate ){
				myClass ="boxDayInnerMid";

			}
			$("#boxD"+i + " div").html('<span class="boxDayDate">' + tmpDate.getDate() + "</span><br/>" + this.returnNameDayShort(tmpDate.getDay()) + '<hr style="display:none;" class="'+tmpDate.getTime()+'" />').addClass(myClass);
			$("#boxD"+i).removeClass("boxDayGrey");
			if(tmpDate.getMonth() != myDate.getMonth()) {
				$("#boxD"+i).addClass("boxDayGrey");
			}  
		}
    }

    this.populateMonth = function (myDate) {
		var string = "";
		string+= MonthsLang[myDate.getMonth()+1] + " ";
		string+= myDate.getFullYear();
		$("#monthName").html(string);
    }

    this.returnNameDayShort = function (day){
		switch(day){
			case 0:
				day = 7;
				break;
			default:
				break;
		}
		return DaysLang[day];
    }

    this.changeMonth = function(direction){
		var sign = 1;
		if(direction == "previous"){
			sign = -1;
		}
		var tmpNewMonth = this.firstDayMonth.getMonth() + sign;

		var tmpYear = this.firstDayMonth.getFullYear();
		if(tmpNewMonth <0){
			tmpYear--;
			tmpNewMonth = 11;
		} 
		if(tmpNewMonth >= 12){
			tmpYear++;
			tmpNewMonth = 0;
		}

		

		//alert(tmpNewMonth);
	//	var tmpNewFirstDay = new Date (tmpYear, tmpNewMonth, 1);
		var tmpNewFirstDay = new Date (Date.UTC(tmpYear,tmpNewMonth, 1, 0, 0, 0, 0) );
		
		if(tmpNewFirstDay.getTime() <  this.firstDayThisMonth.getTime()){ 
			return;
		} else if (tmpNewFirstDay.getTime() - this.firstDayThisMonth.getTime() > 365*24*3600*1000  ){ 
			return;
		} else {
			this.firstDayMonth = tmpNewFirstDay;
			this.populateMonth(tmpNewFirstDay);
			this.populateDays(tmpNewFirstDay);
		}

		
    }

    this.startBuildGuide = function() { 
		if(this.startDate != null && this.endDate != null){
			this.fadeWideBlocks(); 

			var targetOffset = $("#wB2").offset().top;
			$('html,body').animate({
			        scrollTop: targetOffset
			}, 1000);
			$("#wB2").fadeTo(100, 1);
			this.loadEvents();
			this.loadAttractions();
			this.toggleInputActivation("on");
			
			
			
		}
    }
    
    this.loadEvents = function(){
    	var startDate = this.startDate;
    	var endDate = this.endDate;
    	var myCm = this;
    	
    	$("#guideLoading").fadeIn(50 , function () {
    		$("#eventsBox .mainContent").html("");
    		$.get(  "eal0-a",   { startDate: startDate, endDate: endDate }, function(data){   
    			myCm.parseJsonEvents(data);
    			
				
				
			}, "json"); 
    		
		});
    	
    }
    
    this.cutTitle = function(string, length){
    	if(string.length < length){
    		return string;
    	}
    	var cut = string.substr(0, length);
    	var pos = cut.lastIndexOf(" ");
    	if(pos != -1){
    		var cut = cut.substr(0, pos);
    	}
    	return cut+"...";
    }
    
    this.popupAttraction = function(id){
    	var myCm = this; 
    	$("#guideLoading1").show(100, function(){
    		$.get(  "aao"+id+"-a",   {  }, function(data){  
				$("#guideDetailsPopup .guideDetailsPopupContent").html(data); 
				
				$("#guideLoading1").hide(100, function(){
 
	            	$("#colorboxAnchor").colorbox({ inline:true, href:"#guideDetailsPopup"}).click(); 
	        	});
	    		
				
			}, "html"); 

        	
    	}); 
    	 
    	
    }
    this.popupExcursion = function(id){
    	var myCm = this; 
    	$("#guideLoading0").show(100, function(){
    		$.get(  "eao"+id+"-a",   {  }, function(data){  
				$("#guideDetailsPopup .guideDetailsPopupContent").html(data); 
				
				$("#guideLoading0").hide(100, function(){
 
	            	$("#colorboxAnchor").colorbox({ inline:true, href:"#guideDetailsPopup"}).click(); 
	        	});
	    		
				
			}, "html"); 

        	
    	}); 
    	 
    	
    }
     
    
    this.popupEvent = function(id){
    	var myCm = this; 
    	$("#guideLoading").show(100, function(){
    		

    		$("#guideDetailsPopup .guideDetailsPopupTitle").html($("#eventHolder ."+id+" p.title").html());
    		$("#guideDetailsPopup .guideDetailsPopupText").html($("#eventHolder ."+id+" div.descr").html());
    		$("#guideDetailsPopup img").attr("src", $("#eventHolder ."+id+" img").attr("src")); 

        	$("#guideLoading").hide(100, function(){
 
        		$("#colorboxAnchor").colorbox({ inline:true, width:"660px", height:"436px", href:"#guideDetailsPopup"}).click();  // width:"660px", height:"436px",
        		
        	});
    		
    	});
    	 
    	
    }
    
 
    this.parseJsonEvents = function(json) { 
    	var myCm = this; 
    	var finalData = "";
    	var error = false;
    	if(error == false){ 
    		var myDiv;
    		for(var i=0; i<json.length; i++){ 
    		 
        		var extraClass="";
        		if(i >3){
        			extraClass = "hidden";
        		} 

        		var title = json[i].Title;
        		var imageUrl = json[i].Image;
        		var finalDate = json[i].Date;
        		
        		if(imageUrl != false){
        			image = imageUrl+"&w=38&h=38";
        		} else {
        			image = "/img/eventiIcon.jpg";
        		}        		 
        		
        		if (title.length < 32){
        			finalDate = "<br/>"+finalDate;
        		} else if(title.length > 40){
        			title = myCm.cutTitle(title, 40);
        		}
        		
        		var element = '<div class="guideEvent '+extraClass+'" id="'+json[i].Id+'"><div class="eventChck"><input type="checkbox"/></div><div class="eventInfo"><img src="/img/eventInfo.gif" alt="" /></div>';
        		element += '<div class="eventImg"><img src="'+image+'" alt="" /></div><p class="evDesc"><span>'+title+'</span> '+finalDate+'</p>';
        		element += '<div class="clearBoth"></div></div>';
        		  
        		
        		
        		finalData+=(element + "\r\n");
        		
        		/* eventHolder start */
        		var title = json[i].Title;
        		var descrizione = "<strong>"+eventDescription+"</strong>: "+ json[i].Description +"<br/>";
        		var luogo = "<strong>"+eventLuogo+"</strong>: "+ json[i].Location +"<br/>"; 
        		var organizzatore = "<strong>"+eventOrganizzatore+"</strong>: <br/>"+ json[i].Organizer +"<br/>"; 
        		if (json[i].Email != null){
        			 organizzatore += '<a href="mailto:'+json[i].Email+'">'+json[i].Email+'</a><br/>';
        		}
        		if (json[i].Telephone != null){
        			 organizzatore += ''+json[i].Telephone+'<br/>';
        		}
        		if (json[i].Site != null){
        			 organizzatore += '<a href="'+json[i].Site+'" target="_blank">'+json[i].Site+'</a><br/>';
        		}
        		 

        		var dates = "<strong>"+eventDates+"</strong>: <br/>"; 
        		for(var j=0; j<json[i].Dates.length; j++){ 
        			dates+= json[i].Dates[j]+"<br/>";
        		}
        		 

        		if(imageUrl != false){
        			image =imageUrl+"&w=271"; 
        		}  
        		 
        		myDiv += '<div class="'+json[i].Id+'"><p class="title">'+title+'</p><img src="'+image+'" alt="" /><div class="descr">'+luogo +   descrizione   + organizzatore + dates + '</div>';
        		 
        		//event Holder end */
        		 
           	}  
        	$(myDiv).appendTo("#eventHolder"); 
    		
    	} else {
    		
    	}
    	//alert(finalData);
    	
    	$("#eventsBox .mainContent").append(finalData);
    	$("#eventsBox .eventInfo").click(function(){
    		myCm.popupEvent($(this).parents(".guideEvent").attr("id"));
    	});
    	
    	$("#eventsBox .eventChck input").removeAttr("checked").click(function(){
    		myCm.activateCheckbox($(this));
    	});
    	
    	$("#guideLoading").fadeOut(100 , function () {
			
		});
    }
    

    this.loadAttractions = function(){
    	var myCm = this;
    	var startDate = this.startDate;
    	var endDate = this.endDate;
    	$("#attrBox .mainContent").html("");
		$("#guideLoading1").fadeIn(50 , function () {
			$.get(  "aal0-a",   { startDate: startDate, endDate: endDate }, function(data){  
				$("#attrBox .mainContent").append(data);
				$("#attrBox .eventChck input").removeAttr("checked").click(function(){  
					myCm.activateCheckbox($(this));
		    	});

		    	$("#attrBox .eventInfo").click(function(){
		    		var tmpId = $(this).parents(".guideEvent").attr("id");
		    		var tmpResult = tmpId.match(/[0-9]+/); 
		    		myCm.popupAttraction(tmpResult[0]);
		    	});
				$("#guideLoading1").fadeOut(100, function() { 
				});
				
			}, "html"); 
 
			 
			
			
		}); 
    	
    }

    this.fadeWideBlocks = function () {
        this.guideCreationEnabled = false;
    	$("#wB2,#wB3").fadeTo(0, 0.4, function(){});
    }

    this.boxNavigate = function(e, direction, section) {
    	if(this.dateChosen){
	    	var blocks = 4;
	    	var divClass = "guideEvent";
	    	if(section == "hiking"){
	    		divClass ="escOn";
	    	}
	    	var boxes = e.parents(".guideEventBox").find("."+divClass); 
	    	boxLength = boxes.length; 
	    	if(direction == "forward"){
	     		if(this.states[section] + blocks < boxLength){
	    			boxes.slice( (this.states[section]) , (this.states[section]+blocks) ).hide();
	    			this.states[section] = this.states[section] + (blocks);
	    			boxes.slice(this.states[section], this.states[section]+blocks).show();
	     		}
	    	} else {
	
	     		if(this.states[section] - blocks >= 0){
	    			boxes.slice( (this.states[section]) , (this.states[section]+blocks) ).hide();
	    			this.states[section] = this.states[section] - (blocks);
	    			boxes.slice(this.states[section], this.states[section]+blocks).show();
	     		}
	    	}
    	}
    }

    this.boxReset = function(section){
    	var divClass = "guideEvent";
    	if(section == "hiking"){
    		divClass ="escOn";
    		$("#"+section+"Box .guideEvent").hide();
    	}  
    	$("#"+section+"Box ."+divClass).slice(0,4).show(); 
    	this.states[section] = 0;
    	
    		
    }

    this.escSelect = function (type){
    	type = parseInt(type);
    	switch(type) {
    		case 0:
    			var divClass = ".guideEvent";
    			$("#hikingBox "+ divClass).addClass("escOn");
    			 
    			break;		
    		case 1:
    		case 2:
    		case 3: 
    			for(var i=1; i<=3; i++){
    				
    				if( i != type ){
    					$("#hikingBox "+ ".dif"+i).removeClass("escOn");
    				} else {
    					$("#hikingBox "+ ".dif"+i).addClass("escOn");
    				}
    			}
    			break;
    	}
    	this.boxReset("hiking");
    	
    }




    this.checkGuideCreation = function () {
    	var checkedInputs = $("#wB2 input:checked").length ;
    	if(checkedInputs > 0){
			this.guideCreationEnabled = true;
			$("#wB3").fadeTo(0, 1, function(){});
    	} else {
    		this.guideCreationEnabled = false;
			$("#wB3").fadeTo(0, 0.4, function(){});
    	}
    	
    }

    this.createGuide = function(){
		if(this.guideCreationEnabled == true){
			$("#buildGuide");
			var Ids = [];
			$("#hikingBox .eventChck input:checked").each(function(){
				// esc
				Ids.push($(this).parents(".guideEvent").attr("id"));
				
			});
			$("#eventsBox .eventChck input:checked").each(function(){
				// no prefix
				Ids.push($(this).parents(".guideEvent").attr("id"));
			});
			$("#attrBox .eventChck input:checked").each(function(){
				// attr
				Ids.push($(this).parents(".guideEvent").attr("id"));
			});
			
			//alert(Ids.toString()); 
			
			var location = "gud0-ok?startDate="+this.startDate+"&endDate="+this.endDate;
			for(var i=0; i<Ids.length; i++){
				location+= "&element"+i+"="+Ids[i];
			}
			//alert(location);
			
			window.location = location;
		} else {
			//alert("cannot_create_guide_no_items_selected");
		}

    }

    this.toggleInputActivation = function(state){
		if(state == "off"){
			$("#wB2 .eventChck input, #escType").attr("disabled", "disabled");
		} else {
			$("#wB2 .eventChck input, #escType").removeAttr("disabled");
		}
    }
    
    this.activateCheckbox = function(cb){

		if(this.dateChosen){
			if($(cb).attr("checked")  ){
				$(cb).parents(".guideEvent").children("p").removeClass("evDesc").addClass("evDescHL"); 
			} else { 
				$(cb).parents(".guideEvent").children("p").removeClass("evDescHL").addClass("evDesc");
			}
			this.checkGuideCreation();
		}
    }
}


