var currBGImage = 0;
var bgIsFading = false;
var downArrow = 0;
var upArrow = 0;
var curSideContent = 0;
var curBottomContent = 0;
var curTopContent = 0;
var calendarBooking = 0;
var bottomContentDiv = 0;
var topContentDiv = 0;

var bgFadeDelay = 15000;
var numImages = 18;

var startDisplayContent = '';

var pageTracker;

//functions
var fadeImg, fadeNewImgIn, closeTopContent, addFormListener, slideSideContentIn, closeBottomContent, slideSideContent, slideSideContentIn, setBookingSite, Calendar, slideMenuPanel;

function nextImage()
{
	if (bgIsFading)
	{
		return;
	}
	bgIsFading = true;
	if ((currBGImage + 1) <= numImages) 
	{
		currBGImage++;
	}
	else
	{
		currBGImage = 0;
	}
	fadeImg($('bgimage'),'./images/bg/bg'+currBGImage+'.jpg');
}

var myTimer = nextImage.delay(bgFadeDelay);


window.addEvent('resize', function(){
	var windowSize = window.getSize();
	var windowRatio = windowSize.x/windowSize.y;
	var bgImageRatio = 1.5;
	if (windowRatio > bgImageRatio)
	{
		$('bgimage').setStyle('width', '100%');
		$('bgimage').setStyle('height', 'auto');
	}
	else
	{
		$('bgimage').setStyle('width', 'auto');
		$('bgimage').setStyle('height', '100%');
	}
});

fadeImg = function(img,newImgSrc)
{
	var myImage = new Asset.images([newImgSrc],{onComplete: function(){
		fadeNewImgIn(img,newImgSrc);
	},onLoad: function(){
		fadeNewImgIn(img,newImgSrc);
	}});
	var fx = new Fx.Tween(img,{
		duration: 500,
		onComplete: function(){ 
			fadeNewImgIn(img,newImgSrc);	
		}
	});
	fx.start('opacity',0);
};

function prevImage()
{
	if (bgIsFading)
	{
		return;
	}
	bgIsFading = true;
	if (currBGImage > 0) 
	{
		currBGImage--;
	}
	else
	{
		currBGImage = numImages;
	}
	fadeImg($('bgimage'),'./images/bg/bg'+currBGImage+'.jpg');
}

fadeNewImgIn = function(img,newImgSrc)
{
	if (!bgIsFading)
	{
		img.src=newImgSrc;
		img.fade('in');
		$clear(myTimer);
		myTimer = nextImage.delay(bgFadeDelay);
	}
	bgIsFading = false;
};

function slideTopMenuPanel(name)
{
	if (curSideContent)
	{
		slideSideContent(curSideContent);
	}
	if (curBottomContent)
	{
		closeBottomContent();
	}
	if (curTopContent === name)
	{
		closeTopContent();
	}
	else
	{
		new Request({method: 'get', url: './scripts/ajaxScript.php',data:{'do':'getContent','with':name,'id':Date()},onSuccess: function(responseText, responseXML) 
		{
			topContentDiv = $('topContentDiv');
	
			if (curTopContent)
			{		
				topContentDiv.set('tween',{duration: 400, transition: Fx.Transitions.Sine.easeOut, onComplete: function(){
						var topContent = new Element('div',{'id':'topContent','html':JSON.decode(responseText)});
						topContentDiv.setStyle('visibility','hidden');
						topContentDiv.setStyle('height',2000);
						$('topContent').dispose();
						topContent.inject(topContentDiv);
						var newSize = topContent.getSize().y;
						topContentDiv.setStyle('height',0);
						topContentDiv.setStyle('visibility','visible');
						topContentDiv.set('tween',{duration: 400,transition: Fx.Transitions.Sine.easeOut});
						topContentDiv.tween('height',0,newSize);
					}
				});
				topContentDiv.tween('height',0);
				curTopContent = name;
			}
			else
			{
				var topContent = new Element('div',{'id':'topContent','html':JSON.decode(responseText)});
				topContentDiv.setStyle('visibility','hidden');
				topContent.inject(topContentDiv);
				var newSize = topContent.getSize().y;
				topContentDiv.setStyle('height',0);
				topContentDiv.setStyle('visibility','visible');
				topContentDiv.set('tween',{duration: 400,transition: Fx.Transitions.Sine.easeOut});
				topContentDiv.tween('height',0,newSize);
				upArrow.setStyle('visibility','hidden');
				curTopContent = name;
			}				
		}}).send();
	}
}

closeTopContent = function() 
{
	topContentDiv.set('tween',{duration: 400, transition: Fx.Transitions.Sine.easeOut, onComplete: function(){
			$('topContent').dispose();
			curTopContent = 0;
		}
	});
	topContentDiv.tween('height',0);
};

slideMenuPanel = function(name)
{
	if (curSideContent)
	{
		slideSideContent(curSideContent);
	}
	
	if (curTopContent)
	{
		closeTopContent();
	}
	
	if (curBottomContent === name)
	{
		closeBottomContent();
	}
	else
	{
		new Request({method: 'get', url: './scripts/ajaxScript.php',data:{'do':'getContent','with':name,'id':Date()}, onException: function(headerName, value){}, onFailure: function(data){}, onSuccess: function(responseText, responseXML) 
		{
			bottomContentDiv = $('bottomContentDiv');
	
			if (curBottomContent)
			{		
				bottomContentDiv.set('tween',{duration: 400, transition: Fx.Transitions.Sine.easeOut, onComplete: function(){
						var bottomContent = new Element('div',{'id':'bottomContent','html':JSON.decode(responseText)});
						bottomContentDiv.setStyle('visibility','hidden');
						bottomContentDiv.setStyle('height',2000);
						downArrow.inject(bottomContent);
						$('bottomContent').dispose();
						bottomContent.inject(bottomContentDiv);
						var newSize = bottomContent.getSize().y;
						bottomContentDiv.setStyle('height',0);
						bottomContentDiv.setStyle('visibility','visible');
						bottomContentDiv.set('tween',{duration: 400,transition: Fx.Transitions.Sine.easeOut, onComplete:function(){SqueezeBox.assign($$('a[rel=boxed]'));}});
						bottomContentDiv.tween('height',0,newSize);
						
						if (name ==='checkin' || name==='kontakt')
						{
							addFormListener();
						}
						
					}
				});
				bottomContentDiv.tween('height',0);
				curBottomContent = name;
			}
			else
			{
				var bottomContent = new Element('div',{'id':'bottomContent','html':JSON.decode(responseText)});
				bottomContentDiv.setStyle('visibility','hidden');
				downArrow.inject(bottomContent);
				bottomContent.inject(bottomContentDiv);
				var newSize = bottomContent.getSize().y;
				bottomContentDiv.setStyle('height',0);
				bottomContentDiv.setStyle('visibility','visible');
				bottomContentDiv.set('tween',{duration: 400,transition: Fx.Transitions.Sine.easeOut, onComplete:function(){SqueezeBox.assign($$('a[rel=boxed]'));}});
				bottomContentDiv.tween('height',0,newSize);
				upArrow.setStyle('visibility','hidden');
				curBottomContent = name;
				if (name ==='checkin' || name==='kontakt')
				{
					addFormListener();
				}
			}
			
			
						
		}}).send();
	}
};

addFormListener = function()
{
					$('sendButton').addEvent('click',function (){
						var name = $('contactForm').name.value;
						var mail = $('contactForm').email.value;
						var request = $('contactForm').request.value;
						$('formSendImage').src = './images/spinner.gif';
						$('sendButton').disabled = true;
						var values = [name, mail, request];
						new Request({method: 'get', url: './scripts/ajaxScript.php',data:{'do':'sendMessage','with':values,'id':Date()},onComplete:function(){
							$('formSendImage').src = './images/ok.png';
							$('sendButton').disabled = false;
						}}).send();
						
				});
};

closeBottomContent = function() 
{
	bottomContentDiv.set('tween',{duration: 400, transition: Fx.Transitions.Sine.easeOut, onComplete: function(){
			$('bottomContent').dispose();
			upArrow.setStyle('visibility','visible');
			curBottomContent = 0;
		}
	});
	bottomContentDiv.tween('height',0);
};

slideSideContent = function(name)
{
	if (curBottomContent)
	{
		slideMenuPanel(curBottomContent);
	}
	if (curTopContent)
	{
		closeTopContent();
	}
	if (curSideContent)
	{
		$('sideContent_'+curSideContent).set('tween',{duration: 400, transition: Fx.Transitions.Sine.easeOut, onStart: function(){
				$(curSideContent).set('tween',{duration: 400, transition: Fx.Transitions.Sine.easeOut});
				$(curSideContent).tween('left',0);
				if (curSideContent !== name)
			{
				slideSideContentIn(name);
				curSideContent = name;
			}
			else
			{
				curSideContent = 0;
			}
			}
		
		});
		$('sideContent_'+curSideContent).tween('left',-500);
		calendarBooking.set('tween',{duration: 400, transition: Fx.Transitions.Sine.easeOut});
		calendarBooking.tween('width',0);
	}
	else
	{
		slideSideContentIn(name);
	}
};

slideSideContentIn = function(name)
{
	$('sideContent_'+name).set('tween',{duration: 400, transition: Fx.Transitions.Sine.easeOut, onStart: function(){
				$(name).set('tween',{duration: 400, transition: Fx.Transitions.Sine.easeOut, onComplete: function(){
					if (name==='calendar')
					{
						calendarBooking.set('tween',{duration: 400, transition: Fx.Transitions.Sine.easeOut});
						calendarBooking.tween('width',170);
						setBookingSite();
					}
				}
				});
				$(name).tween('left',500);
			}
		});
		$('sideContent_'+name).tween('left',0);
		curSideContent = name;
};

window.addEvent('domready', function() {
//		startDate = new Calendar({ date: 'd.m.Y' });
//		endDate = new Calendar({ date2: 'd.m.Y' });

    	upArrow = $('uparrow');
    	downArrow = new Element('a',{'href':'#','id':'downarrow'});
    	downArrow.addEvent('click',function(){
    			closeBottomContent();
    	});
    	var downArrowImg = new Element('img',{'src':'./images/menuarrow_down.png'});
    	downArrowImg.inject(downArrow);
    	
    	var sideContent = $('sideContent');
    	
    	var calendar = $('calendar');
    	calendar.addEvent('click', function(){
   			slideSideContent(this.id);
   			pageTracker._trackPageview(this.href);
   			return false;
		});
		var weather = $('weather');
    	weather.addEvent('click', function(){
    		slideSideContent(this.id);
    		pageTracker._trackPageview(this.href);
   			return false;
		});
		var map = $('map');
    	map.addEvent('click', function(){
   			slideSideContent(this.id);
   			pageTracker._trackPageview(this.href);
   			return false;
		});
		
		new Request({method: 'get', url: './scripts/readRSS.php',data:{'rssURL':'http://www.google.'+(lang==='de'?'de':'com')+'/ig/api?weather=Vienna,Austria','id':Date()},onSuccess: function(responseText, responseXML) 
			{
				var weather = JSON.decode(responseText);
				
				for (var i=0; i<3; i++)
				{
					$('day'+i).innerHTML = weather[i].weekday;
					$('weatherImg'+i).src = './images/weather/'+weather[i].icon;
					$('weatherImg'+i).title = weather[i].condition;
					$('weatherImg'+i).alt = weather[i].condition;
					$('max'+i).innerHTML = weather[i].high+(lang==='de'?'  &deg; C':'  &deg; F');
					$('min'+i).innerHTML = weather[i].low+(lang==='de'?'  &deg; C':'  &deg; F');
				}
				$('sideContent_weather').addEvent('click',function(){
					window.open('http://'+(lang==='de'?'de.':'')+'weather.yahoo.com/austria/vienna/vienna-551801/');
				});
			}
		}).send();
		
		new Calendar('startDate').display();
		new Calendar('endDate',$('startDate')).display();
		
		calendarBooking = new Element('a',{'href':'#',id:'calendarBooking',html:'<p>'+bookOnlineText+'</p>','class':'boxed','rel':'{handler:"iframe",size:{x:850,y:600}}'});
		calendarBooking.inject($('sideContent_calendar'));
		
		SqueezeBox.assign($$('a.boxed'), {
			parse: 'rel'
		});
		
		$('DatesForm').addEvent('submit', function(el) {
    		el.stop();
    		var pars = $('DatesForm').toQueryString();
    		SqueezeBox.open('http://www.bookassist.com/conduit/bookassist.do?'+pars, {
    			handler: 'iframe',
    			size:{x:850,y:600}
    		});
		});
		
		window.addEvent('scroll',function(){
			window.scrollTo(0,0);
		});
		
		if (startDisplayContent.length > 0)
		{
			slidePanel(startDisplayContent);
		}
		
		 var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    new Asset.javascript(gaJsHost + "google-analytics.com/ga.js", {
        onload: function() {
            pageTracker = _gat._getTracker("UA-11659650-5");
/*              var pageTracker = _gat._getTracker("UA-17929628-1"); */
            pageTracker._setDomainName("none"); 
			pageTracker._setAllowLinker(true);  
            pageTracker._initData();
            pageTracker._trackPageview();
        }
    });
		
//		$('availability').getElements('form')[0].setAttribute('target','_blank');
		
	});
	
setBookingSite = function()
{
	var destinationURL = 'http://www.bookassist.com/conduit/bookassist.do?action=c_1&hotel_id=2277&guide_id=811&service_model=2&user_language='+lang+'&ca=center&dw=800&cb=ffffff';
	
	var startCalDate = $('startDate').cal.active;
	var endCalDate = $('endDate').cal.active;
	
	if (startCalDate)
	{
		destinationURL += '&inday='+startCalDate.getDate()+'&inmonthyear='+(startCalDate.getFullYear()+'-'+(startCalDate.getMonth()+1));
	}
	if (endCalDate)
	{
		destinationURL += '&outday='+endCalDate.getDate()+'&outmonthyear='+(endCalDate.getFullYear()+'-'+(endCalDate.getMonth()+1));
	}
	calendarBooking.href = destinationURL;
/*
	var startCalDate = $('startDate').cal.active;
	var endCalDate = $('endDate').cal.active;
	
	new Request({url: destinationURL, onSuccess: function(responseText, responseXML) 
		{
			alert(responseText);
			var bookingSite = new Element('div',{'html':responseText});
			new ReMooz(bookingSite, {
				centered: true, // Zoom the center of the screen
				origin: element.getElement('bgimage') // Take the image inside as origin for the zooming element
			});
		}
		}).get({'inday':'\''+startCalDate.getDate()+'\'',
				'inmonthyear':(startCalDate.getFullYear()+'-'+startCalDate.getMonth()),
				'outday':endCalDate.getDate(),
				'outmonthyear':(endCalDate.getFullYear()+'-'+endCalDate.getMonth()),
				'action':'c_1',
				'hotel_id':'2277',
				'guide_id':'811',
				'service_model':'2',
				'user_language':lang,
				'ca':'center',
				'dw':'400',
				'cb':'ffffff'});
				
*/
};
	
Calendar = function(name)
{
	$(name).cal = this;
	this.name = name;
	this.date = 0;
	
	var todaysDate = new Date();
	
	this.month = todaysDate.getMonth();
	this.year = todaysDate.getFullYear();
	
	this.valid = [];
	this.active = 0;
	if (arguments.length === 2)
	{
		this.otherCal = arguments[1].cal;
		arguments[1].addEvent('click',function(event){$(name).cal.display();});
	}
	else
	{
		this.otherCal = {'active':0};
	}
	
	this.isValidDate = function (day)
		{	
			var daysDate = new Date(this.year, this.month, day);
			if (daysDate >= new Date(todaysDate.getFullYear(), todaysDate.getMonth(), todaysDate.getDate()) && daysDate > this.otherCal.active)
			{	
				this.valid.push(day);
				return true;
			}
			else
			{
				return false;
			}
		};
	
	this.display = function()
		{
			this.valid = [];
			if (this.active.valueOf() <= this.otherCal.active.valueOf())
			{
				this.active = 0;
			}
			if ($$('#'+name+' .dashboard').length)
			{
				$$('#'+name+' .dashboard').dispose();
			}
			var div = new Element('div').injectInside($(name)); // a wrapper div to help correct browser css problems with the caption element
			div.set('class','dashboard');
			
			var caption = new Element('div',{'class':'caption'});
			var nextLink = new Element('a',{'class':'next','href':'javascript: this.fireEvent("click");'}).appendText('\x3e'); // >
			
			if (new Date(this.year, this.month-1, 0) > new Date(todaysDate.getFullYear(), todaysDate.getMonth()-1, 0)) 
			{
				var prevLink = new Element('a',{'class':'prev','href':'javascript: this.fireEvent("click");'}).appendText('\x3c'); // <
			
				prevLink.addEvent('click', function(event) { 
						var month = $(name).cal.month-1;
						if (month < 0)
						{
							month = 11;
							$(name).cal.year--;
						}
						$(name).cal.month = month;
						$(name).cal.display();
						return false;
					});
				prevLink.injectInside(caption);
			}
			
			nextLink.addEvent('click', function(event) { 
					var month = $(name).cal.month+1;
					if (month > 11)
					{
						month = 0;
						$(name).cal.year++;
					}
					$(name).cal.month = month;
					$(name).cal.display();
					return false;
				});
			
			caption.adopt(new Element('span',{'class':'month'}).appendText(monthNames[this.month]+' '));			
			caption.adopt(new Element('span').appendText(this.year));
			nextLink.injectInside(caption);
			
			caption.injectInside(div);
			
			var table = new Element('table').injectInside(div);
					
			// 2. day names		
			var thead = new Element('thead').injectInside(table);
	
			var theader = new Element('tr').injectInside(thead);
			
			var i = 0;
			
			for (i = 0; i <= 6; i++) {
				var th = dayNames[i];
				theader.adopt(new Element('th', { 'title': th }).appendText(th.substr(0, 2)));
			}
	
			// 3. day numbers
			var tbody = new Element('tbody').injectInside(table);
			var tr = new Element('tr').injectInside(tbody);
	
			var startDay = new Date(this.year, this.month, 1);
			var offset = (startDay.getDay() + 6) % 7; // day of the week (offset)
			var last = new Date(this.year, this.month + 1, 0).getDate(); // last day of this month
			var prev = new Date(this.year, this.month, 0).getDate(); // last day of previous month
			var inactive = []; // active dates set by other calendars
			var hilited = [];
			
			var d = new Date();
			var today = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime(); // today obv 
			
			for (i = 1; i < 43; i++) { // 1 to 42 (6 x 7 or 6 weeks)
				if ((i - 1) % 7 === 0) { tr = new Element('tr').injectInside(tbody); } // each week is it's own table row
	
				var td = new Element('td').injectInside(tr);
							
				var day = i - offset;
				var date = new Date(this.year, this.month, day);
				
				var cls = '';
				
				if ((this.active.valueOf() === new Date(this.year,this.month,day).valueOf())) { cls = 'active'; } // active
				else if ((day > last) || day < 1) { cls = 'inactive'; } // inactive
				else if (this.isValidDate(day)) { cls = 'valid'; } // valid
				else if (day >= 1 && day <= last) { cls = 'invalid';} // invalid
	
				if (date.getTime() === today) { cls = cls + ' ' + 'today'; } // adds class for today
	
				if (hilited.contains(day)) { cls = cls + ' ' + 'hilite'; } // adds class if hilited
	
				td.addClass(cls);
	
				if (this.valid.contains(day)) { // if it's a valid - clickable - day we add interaction
					
					td.addEvents({
						'click': function(event) { 
							var calendar = $(name).cal;
							calendar.active = new Date(calendar.year, calendar.month, event.target.innerHTML);
							$(name).fireEvent('click');
							calendar.display();
							setBookingSite();
						},
						'mouseover': function(event) {
							event.target.className += ' active';
							event.stop();
						},
						'mouseout': function(event) { 
						//	alert(elmt.innerHTML);
							event.target.className = event.target.className.replace(' active',''); 
							event.stop();
						}
					});
				}
	
				if ((day>=last) && (i%7 !== 0))
				{
					td.appendText(day);
					break;
				}
				// pad calendar with last days of prev month and first days of next month
				if (day < 1) { day = prev + day; }
				else if (day > last) { 
					day = day - last;
				}
	
				td.appendText(day);
			}
		};
	return this;
};

function slidePanel(name)
{
	switch(name)
	{
		case 'presse':
		case 'imprint':
		case 'agb':
			slideTopMenuPanel(name);
			break;
		case 'calendar':
		case 'weather':
		case 'map':
			slideSideContentIn(name);
			break;
			
		case 'location':
		case 'news':
		case 'aboutus':
		case 'service':
		case 'preise':
		case 'checkin':
		case 'residence':
		case 'kontakt':
			slideMenuPanel(name);
			break;
	}
}
