Events.add(window, 'load', init);
Events.add(window, 'popstate', stateChangeHandler);

var scrollpane 	= null;
var loged 		= false;

function init(e)
{
	URL.baseTitle = 'R La Cave';
	
	if(Host.isFirefox){
		searchfield = $('searchfield');
		breadcrumb 	= $('breadcrumb');
		master 		= $('master');
		row0		= $('row0');
		row1		= $('row1');
		row2		= $('row2');
		slide		= $('slide');
		homepage	= $('homepage');
		searchbox	= $('searchbox');
		logbox		= $('logbox');
	}
	
	Events.add(searchfield, 'keyup', searchHandler, false);
	Events.add($('nav-compte'), 'click', accountClick, false);
	
	if($('row0')){
		
		if( URL.getComponents()[0] != 'compte' ) {
			Events.add(breadcrumb, 'click', breadcrumbClick, false);
			Events.add(master, 'click', masterClick, false);
		}
		
		scrollpane = new ScrollPane($('master'), $('row0'));
		scrollpane.offset = 50;
		scrollpane.layout();
	}
	
	if($('detail-page')){
		var sp = new ScrollPane($('detail-page'), $('detail-slide'));
		sp.layout();
	}
	
	if($('inscription')){
		var sp2 = new ScrollPane($('inscription'), $('inscription-slide'));
		sp2.offset = 80;
		sp2.layout();
	}
	
	if($('contact')){
		var spcontact = new ScrollPane($('contact'), $('contact-slide'));
		spcontact.offset = 80;
		spcontact.layout();
	}
	
	if($('millesime-alt-slide')){
		scrollpane2 = new ScrollPane($('millesime-alt'), $('millesime-alt-slide'));
		scrollpane2.layout();
	}
	
	Ajax.load('/js/compte/panier/get/', badgeUpdate, badgeUpdate, true);
	
	if(Host.isFirefox) stateChangeHandler(null);
	
	if(Host.isTouch){
		//document.body.addEventListener('touchstart', function(e){e.preventDefault();});
	}
	
	if(Host.isIE8) fixInputPlaceHolders();
}

function searchHandler(e){
	var s = searchfield.value;
	if(s.length <= 2) return;
	Ajax.load('/search.php?q='+s, searchResult, searchResult, true);
}

function accountClick(e){
	if(!loged){
		Events.cancel(e);
		logbox.style.display = 'block';
		Tween.set(logbox, {top:64+5, opacity:0});
		Tween.to(logbox, .25, {top:64, opacity:1});
		logbox.getElementsByTagName('input')[0].focus();
	
		Events.add(document.body, 'mousedown', stageClickHandler, true);
	}
}

function stageClickHandler(e){
	var p = Events.target(e);
	while(p != document.body && p.parentNode){
		if(p == logbox || p == searchbox){
			return;
		}
		p = p.parentNode;
	}
	
	Events.cancel(e);
	Events.remove(document.body, 'mousedown', stageClickHandler, true);
	
	if(logbox.style.display == 'block')
		Tween.to(logbox, .25, {top:64+5, opacity:0, onComplete:hidePopOver, onCompleteParams:[logbox]});
		
	if(searchbox.style.display == 'block')
		Tween.to(searchbox, .25, {top:54+5, opacity:0, onComplete:hidePopOver, onCompleteParams:[searchbox]});
}

function hidePopOver(pover){
	pover.style.display = 'none';
}

function masterClick(e)
{
	var target = Events.target(e);
	
	if(target.nodeName == 'BUTTON') return;
	
	Events.cancel(e);
	
	if(target == master) return;
	
	if(target.nodeName == 'A'){
		URL.setState(target.href, target.innerText);
		stateChangeHandler(null);
	}
}

function breadcrumbClick(e){
	Events.cancel(e);
	var target = Events.target(e);
	
	if(target.nodeName == 'A'){
		URL.setState(target.href, target.innerText);	
	}else{
		URL.setState('', '');
	}
	stateChangeHandler(null);
}

function searchResult(data)
{
	if(searchbox.style.display != 'block'){
		searchbox.style.display = 'block';
		Tween.set(searchbox, {top:54+5, opacity:0});
		Tween.to(searchbox, .25, {top:54, opacity:1});
		Events.add(document.body, 'mousedown', stageClickHandler, true);	
	}
	
	var ul = document.createElement('UL');
	var s = '';
	$('search-body').innerHTML = '';
	
	if(data.length == 0){
		s = '<li>Aucun résultat</li>';
	}else{
		
		for(var i = 0; i < data.length; i++){
			
			s += '<a href="'+ data[i].url +'" onclick="gotoPath(\''+ data[i].url.substr(1) +'\');return false;">';
			s += '<li><h5>' + data[i].designation.toCamel() + '</h5>';
			s += '<h6>' + data[i].url.substring(1, data[i].url.length-1).split('/').join(' / ').split('_').join(' ') + '</h6>';
			s += '</li>';
			s += '</a>';
		}
	}
	
	ul.innerHTML = s;
	$('search-body').appendChild(ul);
}

function hideSearchBox(){
	searchbox.style.display = 'none';
}

function stateChangeHandler(e){
	if(!$('row0')) return;
	var components = URL.getComponents();
	
	if(components[0] == 'compte') return;
	
	if(components.length == 0){
		homepage.style.display = 'block';
		$('detail-infos').style.display = 'none';
		slideToLevel(0);
	}else{
		Ajax.load('/data/' + noAccent( components.join('_') ) + '.xml', rowLoadHandler, rowLoadHandler, false);
	}
	
	buildBreadCrumb(components);
}

function noAccent(str){
	if(Host.isChrome || Host.isOpera || Host.isFirefox) str = utf8decode(str);
	str = str.split('é').join('e');
	str = str.split('ô').join('o');
	str = str.split(' ').join('_');
	return str;
}

function rowLoadHandler(data){
	var components = URL.getComponents();
	switch(components.length){
		case 0:
		break;
		case 1:
			row1.innerHTML = data;
			slideToLevel(1);
		break;
		case 2:
			row2.innerHTML = data;
			slideToLevel(2);
		break;
	}
}

function buildBreadCrumb(components){
	if(!breadcrumb) return;
	var b = [];	
	var utf = Host.isChrome || Host.isOpera || Host.isFirefox;
	for(var i = 0; i < components.length; i++){
		b[i] = '<a href="/'+ components.slice(0, i+1).join('/') +'/">' + (utf ? utf8decode(components[i]) : components[i].split('_').join(' ')) + '</a>'; 
	}
	
	breadcrumb.innerHTML = '<a href="/"><img src="/img/home.png"/></a>' + (b.length ? b.join('') : '');
	
	b = breadcrumb.getElementsByTagName('a');
	b[b.length-1].className = 'last';
}

function slideToLevel(i){
	Tween.to(slide, .5, {left:-i * 480, ease:'in-out'});
	if(scrollpane) scrollpane.setContent($('row'+i));
}

function gotoPath(u){
	if(!row0){
		document.location = URL.basePath + u;
	}else{
		URL.setState(u, 'Votre recherche');
		stateChangeHandler(null);
		hideSearchBox();
	}
}

function showWine(id)
{
	homepage.style.display = 'none';
	$('detail-infos').style.display = 'block';
	
	var img = '/img/b/b' + id + '.png';
	
	if($('bt-img').src.indexOf(img) == -1) $('bt-img').src = img;
	
	Ajax.load('/js/wine/' + id + '/', wineInfosHandler, wineInfosHandler, true);
}

function wineInfosHandler(data){
	data = data[0];
	
	var h1 = $('detail-infos').getElementsByTagName('h1')[0];
	var h2 = $('detail-infos').getElementsByTagName('h2')[0];
	
	h1.innerHTML = data.label.toCamel();
	h2.innerHTML = data.aoc.toCamel();
	
	data.references.sort(function(a, b){if(a.millesime < b.millesime) return 1; if(a.millesime > b.millesime) return -1; return 0;});
	
	var firstWine = data.references[0];
	
	$('millesime-year').innerHTML = firstWine.millesime;
	$('millesime-type').innerHTML = contenanceToString( firstWine.contenance );
	$('millesime-price').innerHTML = firstWine.prix.replace('.', ',');
	
	$('millesime-infos').getElementsByTagName('a')[0].onclick = function(){addToCart(firstWine.id); return false;};
	
	var ul = $('millesime-alt-slide').getElementsByTagName('ul')[0];
	ul.innerHTML = '';
	var li;
	for(var i = 1; i < data.references.length; i++){
		li = document.createElement('li');
		li.innerHTML = '<span><strong>' + data.references[i].millesime + '</strong>, ' + contenanceToString(data.references[i].contenance) + ' <strong>' + data.references[i].prix + '</strong></span><button onclick="addToCart('+data.references[i].id+');">AJOUTER</button>';
		ul.appendChild(li);
	}
	
	scrollpane2.layout();
}

function badgeUpdate(data){
	if(data == null) return;
	var items = data.items;
	var l = items.length;
	var total = 0;
	for(var i = 0; i < l; i++){
		total += items[i].qty*1;
	}
	
	if(total == 0){
		$('panier-badge').style.display = 'none';
	}else{
		$('panier-badge').style.display = 'block';
		$('panier-badge').innerHTML = total;
	}
	
	if(data.loged){
		loged = true;
	}
}

function addToCart(id){
	Ajax.load('/js/compte/panier/add/' + id + '/1/', badgeUpdate, badgeUpdate, true);
}

function passwremind()
{
	log_form = $('log-body').innerHTML;
	$('log-body').innerHTML = '';
	
	Tween.set($('log-body'), {height:272});
	Ajax.load('/_reminder.html', showReminder, showReminder, false);
}

function showReminder(data){
	$('log-body').innerHTML = data;
	Tween.to($('log-body'), .15, {height:220});
}

function cancel_reminder(){
	$('log-body').innerHTML = log_form;
	Tween.to($('log-body'), .06, {height:272});
}

function utf8decode(utftext){
	utftext = unescape(utftext);
	var string = "";
	var i = 0;
	var c = c1 = c2 = 0;

	while ( i < utftext.length ) {
		c = utftext.charCodeAt(i);
		if (c < 128){
			string += String.fromCharCode(c);
			i++;
		}else if((c > 191) && (c < 224)){
			c2 = utftext.charCodeAt(i+1);
			string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
			i += 2;
		}else{
			c2 = utftext.charCodeAt(i+1);
			c3 = utftext.charCodeAt(i+2);
			string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
			i += 3;
		}
	}

	return string.replace(/_/g, ' ');
}

function contenanceToString(contenance){
	switch(contenance){
		case '0.75':
			return 'Bouteille 75cl';
		break;
		case '1.5':
			return 'Magnum 1,5L';
		break;
		case '3':
			return 'Jéroboam 3L';
		break;
		case '4.5':
			return 'Réhoboam 4,5L';
		break;
		case '6':
			return 'Mathusalem 6L';
		break;
		case '9':
			return 'Salmanazar 9L';
		break;
		case '12':
			return 'Balthazar 12L';
		break;
		case '15':
			return 'Nabuchodonosor 15L';
		break;
		default:
			return contenance + ' L';
		break;
	}
}

function useSameAddress()
{
	if($('same_address').checked){
		window.location = '/compte/panier/livraison/sameaddress/';
	}else{
		window.location = '/compte/panier/livraison/';
	}
}
