var selected;
var panesheight;
var scrollEffect;

Effect.Scroll = Class.create();
Object.extend(Object.extend(Effect.Scroll.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || {});
    this.start(options);
  },
  setup: function() {
    this.originalLeft = this.element.scrollLeft || 0;
    this.originalTop  = this.element.scrollTop  || 0;
    if(this.options.mode == 'absolute') {
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.scrollLeft = Math.round(this.options.x  * position + this.originalLeft);
    this.element.scrollTop = Math.round(this.options.y  * position + this.originalTop);
  }
});

function getPaneId(element) {
	return element.id.split('-')[0] + '-pane';
}

function getPaneHeight(elementid) {
	return panesheight.get(elementid);
}

function slidePanes(elementid) {

	var currentheight = getPaneHeight(elementid);
	
	panesheight.each(function(pane) {
	
		if(pane.value < 600) {
			currentheight = 600;
		}
	
		new Effect.Morph(pane.key,{ style:{ height:currentheight + 'px' }});
	
	});

}

function onMenuItemSelected(event) {

	var marginleft = 320; /* cf main.css > #scroller */

	if (scrollEffect && scrollEffect.state == 'running') {
		return;
	}

	if (!event) {
		var event = window.event;
	}
	var eventTarget = window.event ? event.srcElement : event.target;
	
	var idFragment = null;

	idFragment = getPaneId(selected);

	/* --- last selected opacity to 0.0 --- */
	
	// new Effect.Opacity(idFragment, {duration:0.25, to:0.0});
	$(idFragment).style.visibility = 'hidden';
	$(idFragment).style.overflow = 'hidden';
	
	if(idFragment == 'accueil-pane') {
		transitions.stop();
	}
	
	/* --- --- */

	var menuDelta = eventTarget.offsetTop - selected.offsetTop;
	selected = eventTarget;

	idFragment = getPaneId(eventTarget);
	
	if(idFragment != 'revuepresse-pane') {
		
		$('sandballez_dailymotion_2009').style.display = 'none';
		$('temoignane_video_amehasle').style.display = 'none';
		$('temoignane_video_grandquartier').style.display = 'none';
		$('temoignane_video_privadis').style.display = 'none';
		
		$('virgin17_sandballez_2008').style.display = 'none';
		$('virgin17_sandballez_2009_01').style.display = 'none';
		$('virgin17_sandballez_2009_02').style.display = 'none';
		$('sandballez_270508_france3').style.display = 'none';
		$('sandballez_300508_tvbreizh').style.display = 'none';
		$('sandballez_palmaressportrennais_tv35_1').style.display = 'none';
		$('sandballez_palmaressportrennais_tv35_2').style.display = 'none';
		
	}
	else {
		$('sandballez_dailymotion_2009').style.display = 'block';
		$('temoignane_video_amehasle').style.display = 'block';
		$('temoignane_video_grandquartier').style.display = 'block';
		$('temoignane_video_privadis').style.display = 'block';
		
		$('virgin17_sandballez_2008').style.display = 'block';
		$('virgin17_sandballez_2009_01').style.display = 'block';
		$('virgin17_sandballez_2009_02').style.display = 'block';
		$('sandballez_270508_france3').style.display = 'block';
		$('sandballez_300508_tvbreizh').style.display = 'block';
		$('sandballez_palmaressportrennais_tv35_1').style.display = 'block';
		$('sandballez_palmaressportrennais_tv35_2').style.display = 'block';
		
	}
	
	/* --- slide & last selected opacity to 0.0 --- */
	
	slidePanes(idFragment);
	// new Effect.Opacity(idFragment, {duration:0.25, to:1.0});
	$(idFragment).style.overflow = 'visible';
	$(idFragment).style.visibility = 'visible';	
	
	if(idFragment == 'accueil-pane') {
		transitions.start();
	}
	
	/* --- --- */
	
	var target = $(idFragment);
	
	var scroller = $('content');
	var scrollDelta = getLeftLocation(target) - getLeftLocation(scroller) - scroller.scrollLeft - marginleft;
	if (!scrollEffect) {
		scrollEffect = new Effect.Scroll('content');
	}
	
	scrollEffect.start({ x: scrollDelta, y: 0, duration: 0.25 });
	
}

function initScrolling() {

	panesheight = new Hash();

	var menus = new Array();
	
	menus.push('mresources');
	menus.push('morganisation');
	menus.push('mevent');
	menus.push('mprogram');
	
	var panes = new Array();
	
	menus.each(function(menu) {
	
		var menuItems = $(menu).immediateDescendants();
	
		menuItems.each(function(menuItem) {
	
			menuItem.firstDescendant().onmouseover = function() { this.className = menu + 'hover'; };
			menuItem.firstDescendant().onmouseout = function() { this.className = ''; };	
			menuItem.firstDescendant().onclick = onMenuItemSelected;
		
			var paneid = getPaneId(menuItem.firstDescendant());
		
			panes.push(paneid);
			panesheight.set(paneid, $(paneid).offsetHeight);
			
		});
		
	});
	
	/* particular case: accueil */
	
	var accueilpane = $('accueil-menu');
	
	accueilpane.style.cursor = 'pointer';
	accueilpane.onclick = onMenuItemSelected;
	
	var paneid = getPaneId(accueilpane);
		
	panes.push(paneid);
	panesheight.set(paneid, $(paneid).offsetHeight);
	
	selected = accueilpane;
	
	/* --- fade all elements --- */
	
	var selectedid = getPaneId(selected);
	
	panes.each(function(paneItem) {
	
		if(paneItem != selectedid) {
		
			// new Effect.Opacity(paneItem, {duration:0.25, to:0.0});
			$(paneItem).style.visibility = 'hidden';
			$(paneItem).style.overflow = 'hidden';
		
		}
		
	});
	
	/* --- slide first pane --- */
	
	slidePanes(selectedid);
	
}

function getLeftLocation(element) {
	var x = 0;

	do {
		x += element.offsetLeft;
	} while (element = element.offsetParent)

	return x
}

function init() {
	initScrolling();
}

// install our scrolling handler in the menu
window.onload = init;

