/**
 *	Application object
 *
 *	@author Evgeni Baldzisky
 *	@version 0.2 beta
 *	@since 29.04.2008
 */

MooTools.include('Fx.Elements');
MooTools.include('Fx.Transitions');
MooTools.include('Fx.Styles');
MooTools.include('Fx.Slide');
MooTools.include('Ajax');
MooTools.include('Tips');

Svincs.include('trace');

var slide = [];		// register
var allLoaded = 0;	// checker for loaded resourses

var currentTab = 0;
var lastTab = 0;

var defaultBg = 'img/bg/overview.jpg';

/**
 *	Register API
 */
window.addEvent('load',function (ev){
	// Animation bject
	var AnimationOptions = {
		mode: 'horizontal',
		transition: Fx.Transitions.Quad.easeOut,
		duration: 1500,
		wait: false
	}

		slide[0] = [
			new Fx.Slide('overview',AnimationOptions),	// slide object
			$('logo'),									// open button
			null,										// cloce button
			$('overview_res'),							// reservation button
			$('overview_bg'),							// background container
			$('overview'),								// content element
			[],											// tab's ids {sectionName_PageName_btn}
			'overview.html',							// content file name
			'img/bg/overview.jpg'						// background file path

		];
		slide[1] = [
			new Fx.Slide('auction',AnimationOptions),
			$('auction_btn'),
			$('auction_close'),
			$('auction_res'),
			$('auction_bg'),
			$('auction'),
			[],
			'auction.html',
			'img/bg/auction.jpg'
		];
		slide[2] = [
			new Fx.Slide('venue',AnimationOptions),
			$('venue_btn'),
			$('venue_close'),
			$('venue_res'),
			$('venue_bg'),
			$('venue'),
			[
				"base_venue_btn",
				"winery_venue_btn",
				"accommodation_venue_btn"
			],
			'venue.html',
			'img/bg/venue.jpg'
		];
		slide[3] = [
			new Fx.Slide('activities',AnimationOptions),
			$('activities_btn'),
			$('activities_close'),
			$('activities_res'),
			$('activities_bg'),
			$('activities'),
			[
				"base_activities_btn",
				"dinner_activities_btn",
				"activ_activities_btn"
			],
			'activities.html',
			'img/bg/activities.jpg'
		];
		slide[4] = [
			new Fx.Slide('reservations',AnimationOptions),
			$('reservations_btn'),
			$('reservations_close'),
			null,
			$('reservations_bg'),
			$('reservations'),
			[],
			'reservations.html',
			'img/bg/reservations.jpg'
		];
		// create dysplay object

		slide[0][0].show();

		slide[1][0].show();
		slide[1][0].hide();

		slide[2][0].show();
		slide[2][0].hide();

		slide[3][0].show();
		slide[3][0].hide();

		slide[4][0].show();
		slide[4][0].hide();

		// load end add events
		slide.each(function(el,index){
			if(el[1]){
				el[1].addEvent('click',function(event){return false;});
				el[1].onclick = function(){return false;}
			}
			if(el[2]){
				el[2].addEvent('click',function(){return false;});
				el[2].onclick = function(){return false;}
			}
			if(el[3]){
				el[3].addEvent('click',function(){return false;});
				el[3].onclick = function(){return false;}
			}
// 			el[0].element.oldPosition = el[0].element.getStyle('marginLeft').toInt();
// 			el[0].addEvent('onUpdate',function(el){
// 				refreshPage(index);
// 			});
// 			el[0].addEvent('closeComplete',function(element){
// 				openBtnShow(index);
// 			});
// 			el[0].addEvent('openComplete',function(el){
// 				//window.tmpEvent();
// 			});
// 			el[6].each(function (btn){
// 				$(btn).addEvent('click',function(){
// 					el[6].each(function (id){
// 						$(id).removeClass('active_sub_btn');
// 					});
// 					$(btn).addClass('active_sub_btn');
// 					return changeContent(index,btn);
// 				});
// 				if(btn.match(/^base/)){
// 					$(btn).addClass('active_sub_btn');
// 				}
// 				$(btn).onclick = function(){return false;}
// 			}); 
			Loader(el[7],index);
			ImageLoader(el[8],el[4]);
		});
});

// loader tresourses
function Loader(url,index){
	allLoadedChecker(1);

	var ajax = new Ajax(url, {method: 'get'});
		ajax.addEvent('onComplete', function(res) {
			addContents(res.text,index);
			allLoadedChecker(-1);
		});
		ajax.addEvent('onFailure', function(err){
			trace('There was a problem with the request ('+url+').(Code:'+err.status+')');
			allLoadedChecker(-1);
		});
		ajax.request();
}
function ImageLoader(url,target){
	allLoadedChecker(1);
	var img = new Image();
		img.id = target.id+'_bg';
		target.appendChild(img);

		img = $(target.id+'_bg');
		img.addEvent('load',function(){
			allLoadedChecker(-1);
		});
		img.addEvent('error',function(e){
			trace('Error :: Can not load background resource ('+url+')');
			if(defaultBg){
				img.src = defaultBg;
			}else{
				allLoadedChecker(-1);
			}
		});
		img.src = url;
}
function allLoadedChecker(i){
	allLoaded += 1*i;
	if(allLoaded == 0){
		runApplication();
	}
}
function runApplication(){
	//$('auction_btn').addClass('btn_right');

	bgOpen(0,function(){
		$('preloader_bg').setStyle('visibility','hidden');
	});

	var main = $('main');
	main.effect('opacity',{duration: 1000}).start(0,1);
}
window.tmpEvent = function (){};
function openPage(i){
	if(i == currentTab) return;

	lastTab = currentTab;
	currentTab = i;
	var tmp = -1;
	for(var o=0;o<slide.length;o++){
		if(slide[o][1] != null){
			slide[o][1].removeClass('btn_hover');
			slide[o][1].removeClass('btn_right');
		}
		if(slide[o][0].open || slide[o][0].elementState){
			bgClose(o);
		}
		if(slide[o][0].open || slide[o][0].elementState){
			slide[o][0].stop();
			slide[o][0].elementState = false;
			slide[o][0].hide();
			slide[o][0].fireEvent('onComplete',slide[o][0].element);
		}
		if(o != i && o < i){
			slide[o][1].addClass('btn_right');
		}
	}
	if(i == 0){
		//slide[i+1][1].addClass('btn_right');
	}
	window.tmpEvent = function (){
		if(tmp > -1){
			bgClose(tmp);
		}
		bgOpen(i);
	}
	bgOpen(i);

	myReffresh = (-1)*slide[i][0].element.getStyle('marginLeft').toInt(); // UPDATE //

	if(i > 0){
		slide[i][0].elementState = true;
		slide[i][0].slideIn();
		openBtnHide(i);
	}else{
		slide[i][0].element.setStyle('opacity',0);
		slide[i][0].elementState = true;

		slide[i][0].show();
		slide[i][0].fireEvent('onComplete',slide[i][0].element);

		slide[i][0].element.effect('opacity', {duration: 1300}).start(0,1);
	}
	
	
	//if tab is activities - view 1st baloon
		if(i==3){
			if (document.getElementById('baloon_state'))	{
				var bl=document.getElementById('baloon_state');
				bl.style.display ='none';
				}	else	{
					return false;
				}
			}
	return false;
}
function closePage(i){
	for(var o=0;o<slide.length;o++){
		if(slide[o][1] != null){
			slide[o][1].removeClass('btn_hover');
			slide[o][1].removeClass('btn_right');
		}
	}
	//bgClose(i);
	slide[i][0].slideOut();
	slide[i][1].addClass('btn_hover');
	//or lastTab
	openPage(0);
	return false;
}

var myReffresh = 0;
function refreshPage(i){
	return false;
	var obj = slide[i][0];
	var open_obj = null;

	if(!obj.open){

		slide.each(function(ele){
			if(ele[0].open){
				open_obj = ele[0];
				return;
			}
		});

		var current_offset = myReffresh + obj.element.getStyle('marginLeft').toInt();

		if(open_obj != null){

			open_obj.element.setStyle(open_obj.margin, open_obj.element.getStyle(open_obj.margin).toInt() - current_offset);
			open_obj.wrapper.setStyle(open_obj.layout, open_obj.wrapper.getStyle(open_obj.layout).toInt() - current_offset);

			if(obj.element.getStyle('marginLeft').toInt() < 5){

				open_obj.stop();
				open_obj.elementState = false;
				open_obj.hide();
				open_obj.fireEvent('onComplete',open_obj.element);
			}
		}
		myReffresh = (-1)*obj.element.getStyle('marginLeft').toInt();
	}
}
function bgOpen(i,completeRun){
	if(slide[i][4]){
		var eff = slide[i][4].effect('opacity', {duration: 800});
			if(completeRun){
				eff.addEvent('onComplete',completeRun);
			}
			eff.start(0,1);
	}
}
function bgClose(i,completeRun){
	if(slide[i][4]){
		var eff = slide[i][4].effect('opacity', {duration: 800});
			if(completeRun){
				eff.addEvent('onComplete',completeRun);
			}
			eff.start(1,0);
	}
}
function openBtnShow(i){
	if(i > 0 && slide[i][1]){
		slide[i][1].effect('opacity', {duration: 100}).start(0,1);
	}
}
function openBtnHide(i){
	if(i > 0 && slide[i][1]){
		slide[i][1].effect('opacity', {duration: 100}).start(1,0);
	}
}
function addContents(txt,index){
	slide[index][5].tabs = {};

	txt = txt.replace(/[\t\n\r]+/g,'');

	var arr = txt.match(/<!-- [^ ]+ -->/g);
	arr.each(function(el,i){
		arr[i] = arr[i].replace(/(<!-- )|( -->)/g,'');

		var res = txt.match(new RegExp("<!-- "+arr[i]+" -->(.+)<!-- END "+arr[i]+" -->"));

		if(res != null && res[1]){
			slide[index][5].tabs[arr[i].toLowerCase()] = res[1];
		}
	});
	slide[index][5].getFirst().setHTML(slide[index][5].tabs.base);
}
function changeContent(index,el){
	var spl = el.split('_');
	var target = slide[index][5].getFirst()

	var effect = target.effect('opacity', {duration: 500});
		effect.addEvent('onComplete',function(){
			if(target.getStyle('visibility') == 'hidden'){
				target.setHTML(slide[index][5].tabs[spl[0]]);
				effect.start(0,1);

				createToolTips();
			}
		});
		effect.start(1,0);

	return false;
}
function createToolTips(){
		var mytips = new Tips($$('.sub_link'), {
			initialize:function(){
				this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 500, wait: false}).set(0);
			},
			onShow: function(toolTip) {
				this.fx.start(1);
			},
			onHide: function(toolTip) {
				this.fx.start(0);
			},
			fixed: true,
			className: 'baloon',
			offsets : {
				x : 150,
				y : -5
			}
		});
}

// Target new browser/popup window 
function fuzzyClassName(tag,fClass)	{
	var el = (tag == "*" && document.all) ? document.all : document.getElementsByTagName(tag);
	var o=new Array();
	for (var i=0;i<el.length;i++)	{
		if (el[i].className.indexOf(fClass)!=-1)	{
			o.push(el[i]);
		}
	}
	return o;
}
function popup(){
	var els=fuzzyClassName("a","popup:");
	for (var i=0;i<els.length;i++)	{
		els[i].onclick = function ()
		{
		alert("popup");
			this.removeAttribute("target");
			var cc=this.className;var cs=cc.substr(cc.indexOf("popup:")+6,cc.length);
			var dma=(cs.substr(1,cs.indexOf(")")-1)).split(",");
			var extras="";	window.open(this.href+extras,'popupwindow','width='+dma[0]+',height='+dma[1]+',resizable=1,scrollbars=1,true,true');
			return false;
			alert(popup);
				}
			}
		}
