/*

main.js (AJAX requests and swf handling)

Created by Stefano Ceschi Berrini
Improved by Matteo Mantovani

*/
SWFAddress.onInternalChange = function() {
	//loadAJAXcontent(webpath+SWFAddress.getPath());	
	SWFAddress.onChange = function() {
		$$('.fc-tbx').each(function(el) {el.destroy();});
		
		var new_path = SWFAddress.getPath();
		var lang = SWFAddress.getPathNames()[0];
		if (lang=='it' || lang=='en' || lang=='cn' || lang=='ru') {
			cat = SWFAddress.getPathNames()[1];
			subcat = SWFAddress.getPathNames()[2];
			
		} else {
			lang = firstlang;
			new_path = firstlang + '/'+ new_path;
			cat = SWFAddress.getPathNames()[0];
			subcat = SWFAddress.getPathNames()[1];
		}
		
		var lnk = (SWFAddress.getPath() != "") ? webpath + new_path : loc;
		var swfPars = lnk.replace(webpath, "");
		
		embedSWF(lang);
		if(swfPars != "") {
			SWFAddress.setValue(swfPars);
		}
		loadAJAXcontent(lnk);
	}
	SWFAddress.onInternalChange = null;
	SWFAddress.onChange();
}

function setAllLinks() {
	$$('a').each(function(el) {
		if(!el.cached && !el.hasClass('external') && !el.hasClass('close')) {
			el.cached = true;
			el.addEvent('click',function(event) {
				event.stop();
				var page = el.href;
				var value = page.replace(webpath,"");
				value = (value == "") ? value = " " : value;
				if (el.hasClass('lang')) {
					//$$('#top .lang.selected').removeClass('selected');
					//el.addClass('selected');
					
					var lang = value.substring(0,2);
					//if(lang != " " || lang == "en" || lang == "ru" || lang == "cn")
					//	embedSWF(lang);	
				}
				if(el.hasClass('langhome')) {
					value = currlang+"/";
				}
				SWFAddress.setValue(value);
			});
		}
	});
	
	checkMenu();
}


function embedSWF(lang) {
	var swfPath = "";
	var flashvars = {};
	var params = {};
	switch(lang) {
		case "en":
			swfPath = webpath+"flash/hotel.swf";
			flashvars.xml_param = webpath+"flash/main_en.xml";
		break;
		case "ru":
		case "cn":
			swfPath = webpath+"flash/"+lang+"/hotel.swf";
			flashvars.xml_param = webpath+"flash/main_"+lang+".xml";
		break;
		default:
			swfPath = webpath+"flash/hotel.swf";
			flashvars.xml_param = webpath+"flash/main.xml";
	}
	params.allowfullscreen = "true";
	params.salign = "tl";
	//var attributes = {};
	//attributes.id = "hotel";
	//attributes.name = "hotel";
	flashvars.webpath = webpath;
	flashvars.sec_param = cat;
	flashvars.subsec_param = subcat;

	if (swfToLoad || lang != currlang) {
		currlang = (lang) ? lang : firstlang;
		$$('#top .lang.selected').removeClass('selected');
		$('lang_'+currlang).addClass('selected');
		setFacebookILike(lang);
		
		//alert(flashvars.xml_param);
		//swfobject.embedSWF("flash/hotel.swf", "flash-container", "1000", "460", "9.0.0", "expressInstall.swf", {xml_param: "flash/main.xml"}, {allowfullscreen: "true", wmode: "window", salign: "tl"}, {id: "hotel"});
		//alert(swfPath);
		//var cloned = $('flash-container').clone();
		//$('flash-container').destroy();
		//cloned.id = "flash-container";
		swfobject.embedSWF(swfPath, "flash-container", "1000", "460", "9.0.0", webpath+"flash/expressInstall.swf", flashvars, params);
		flashplayer = swfobject.getFlashPlayerVersion().major;
		
		switch(currlang) {
			case "it":
				$('sitemaplink').innerHTML = 'Mappa';
				$('sitemaplink').set('href',webpath+'it/mappa/');
				$('creditslink').innerHTML = 'Crediti';
				$('creditslink').set('href',webpath+'it/credits/');
			break;
			case "en":
				$('sitemaplink').innerHTML = 'Map';
				$('sitemaplink').set('href',webpath+'en/map/');
				$('creditslink').innerHTML = 'Credits';
				$('creditslink').set('href',webpath+'en/credits/');
			break;	
			case "ru":
				$('sitemaplink').innerHTML = 'Карта';
				$('sitemaplink').set('href',webpath+'ru/map/');
				$('creditslink').innerHTML = 'Состав исполнителей';
				$('creditslink').set('href',webpath+'ru/credits/');
			break;	
			case "cn":
				$('sitemaplink').innerHTML = '地图';
				$('sitemaplink').set('href',webpath+'cn/map/');
				$('creditslink').innerHTML = '网页设计';
				$('creditslink').set('href',webpath+'cn/credits/');
			break;
		}
		
		if (!swfToLoad) {
			loadAJAXmenu();
		}
		
		swfToLoad = false;
	}
}


window.addEvent('domready',function() {
	embedSWF(currlang);
	
	if (notfound == false) {
		setAllLinks();
	}
	
	$$('.toblank').each(function(el) {
		el.set('target','_blank');
	});
	
	setGalleryMouseEvents();
});


function loadAJAXcontent(page) {
	if (Browser.Engine.name=='trident' && Browser.Engine.version==4) { //IE6 no ajax request!
		window.location = page;
		return;	
	}
    
	var content_effect = new Fx.Morph($('content'), {duration:300});
	content_effect.start({
		'opacity': 0
	}).chain(function() {
		$('wrapper').setStyle('background','#FFFFFF url('+webpath+'images/loader-content.gif) no-repeat center center');
		page = (page.indexOf(webpath) > -1) ? page : webpath+page;
		var HTMLRequest = new Request.HTML({
			url: page,
			method: 'get',
			evalScripts: true,
			onSuccess:function(responseTree, responseElements, responseHTML, responseJavaScript) {
				$('content').destroy();
				var cnt = new Element('div');
				cnt.innerHTML = responseHTML;
				cnt.inject($('wrapper'),'top');
				$('content').setStyle('opacity',0);
				var content_effect1 = new Fx.Morph($('content'), {duration:300});
				
				$('wrapper').setStyle('background-image','');
				content_effect1.start({'opacity':1});
						
				//cat = SWFAddress.getPathNames()[1];
				//subcat = SWFAddress.getPathNames()[2];
				
				loadPage();
				setAllLinks();
			},
			onFailure:function() {
				alert('page loading error - retry or refresh the page please!');
			}
		});
		HTMLRequest.send('ajaxrequest=true');
	});
}



/* ******************************

Coded by Matteo Mantovani

****************************** */

function loadAJAXmenu() {
	if (flashplayer) return;
	
	var content_effect = new Fx.Morph($('main_menu'), {duration:'normal'});
	content_effect.start({
		'opacity': 0
	}).chain(function() {
		var HTMLRequest = new Request.HTML({
			url: webpath+'menu.php',
			method: 'get',
			evalScripts: true,
			onSuccess:function(responseTree, responseElements, responseHTML, responseJavaScript) {
				$('main_menu').destroy();
				$('flash-container').innerHTML += responseHTML;
				$('main_menu').setStyle('opacity',0);
				
				var content_effect1 = new Fx.Morph($('main_menu'), {duration:'normal'});
				content_effect1.start({'opacity':1});
				
				setAllLinks();
			},
			onFailure:function() {
				alert('menu loading error!');
			}
		});
		HTMLRequest.send('lang='+currlang+'&cat='+cat+'&subcat='+subcat);
	});
}


function setFacebookILike(lang) {
	var language = 'it_IT';
	if (lang == 'en') {
		language = 'en_GB';
	} else if (lang == 'cn') {
		language = 'zh_CN';
	} else if (lang == 'ru') {
		language = 'ru_RU';
	}
	$('facebook_ilike').set('src', 'http://www.facebook.com/plugins/like.php?locale='+language+'&href=http://www.altezzonhotel.com/'+lang+'/&send=false&layout=button_count&width=140&height=20&show_faces=false&action=like&colorscheme=light');
}


function checkMenu() {
	if (flashplayer) return;
	
	$$('.menu li.selected').each(function(el) {
		el.removeClass('selected');
	});
	var cat_link = $(cat+'_link');
	var subcat_link = $(subcat+'_link');
	if (cat_link) cat_link.addClass('selected');
	if (subcat_link) subcat_link.addClass('selected');
	
	var gallery_cat = 'home';
	if (subcat) {
		gallery_cat = subcat;
	} else if (cat) {
		gallery_cat = cat;
	}
	
	setSlideshow(true, menu_gallery[gallery_cat]);
}


var mouseout_timer = 0;
function setGalleryMouseEvents() {
	if (flashplayer) return;
	
	$('flash-container').addEvents({
		mouseover: function() {
			clearTimeout(mouseout_timer);
			var cat_link = $(cat+'_link');
			if (cat_link) {
				var submenu = cat_link.getElement('ul');
				if (submenu) {
					submenu.set('morph', {duration: 300, transition: 'quad:out'});
					submenu.morph({'opacity': 1});
				}
			}
  		},
		mouseout: function() {
			clearTimeout(mouseout_timer);
			var cat_link = $(cat+'_link');
			if (cat_link) {
				var submenu = cat_link.getElement('ul');
				if (submenu) {
					submenu.set('morph', {duration: 300, transition: 'quad:out'});
					var fun = function() {
						submenu.morph({'opacity': 0});
					}
					mouseout_timer = fun.delay(2000);
				}
			}
  		}
	});
}


var loadBg = function(value) {
	var image = new Element('img', {
		 src: value
	});
	image.fade('hide');
	image.inject($('header_gallery'));
	image.addEvent('load', function() {
		resizeBackground(this);
		this.set('tween', {
			duration: 'long',
			transition: 'quad:in:out',
			onComplete: function(el) {
				var bg_images = $('header_gallery').getElements('img');
				for (var i=0; i<bg_images.length-1; i++) {
					bg_images[0].destroy();
				}
			}
		});
		this.fade('in');
	});
}

var resizeBackground = function(bg_image) {
	var gallery = $('header_gallery');
	if (typeof(bg_image) == 'undefined') bg_image = gallery.getElement('img');
	
	var frame_size = gallery.getComputedSize();
	var min_dim = {'height': frame_size.height, 'width': frame_size.width};
	
	if (bg_image) {
		var dim = bg_image.getDimensions();
		var new_dim = fillSize(min_dim.width, min_dim.height, dim.width, dim.height);
		
		bg_image.setStyles({'height':new_dim.height, 'width':new_dim.width});
		bg_image.setProperties({'height':new_dim.height, 'width':new_dim.width});
	}
}
		
var fillSize = function(maxW, maxH, currW, currH) {
	var max_ratio = maxH / maxW;
	var curr_ratio = currH / currW;
	
	if (curr_ratio <= max_ratio) {
		// più orizzontale
		// ridimensiono in altezza
		currH = maxH;
		currW = Math.round(currH / curr_ratio);
	} else {
		// più verticale
		// ridimensiono in larghezza
		currW = maxW;
		currH = Math.round(currW * curr_ratio);
	}
		
	return {width:currW, height:currH};
}

var slideshow = false;
var slideshow_image = 0;
var slideshow_timer = 0;
var slideshow_delay = 5;
var slideshow_images = [];
	
var setSlideshow = function(value, images) {
	if (value) {
		if (slideshow) {
			setSlideshow(false);
		}
		if (images) {
			slideshow_images = images;
			nextSlide();
			slideshow = true;
		}
	} else {
		clearTimeout(slideshow_timer);
		slideshow_image = 0;
		slideshow = false;
	}
}

var nextSlide = function() {
	var image_url = slideshow_images[slideshow_image];
	if (image_url) {
		loadBg(webpath+image_url);
		
		slideshow_timer = nextSlide.delay(slideshow_delay * 1000);
		
		slideshow_image++;
		if (slideshow_image >= slideshow_images.length) {
			slideshow_image = 0;
		}
	}
}
