////////// Menu
function init_nav() {
		var nav = $('navigation');
		if (nav) {
				nav.getElements("LI").each(function (el) {
								el.addEvent("mouseover", 
														function (ev) { this.addClass("hover"); });
								el.addEvent("mouseout", 
														function (ev) { this.removeClass("hover"); });

						});
		}
}

////////// Ajax
var _ajax_original_content = null;
var _ajax_original_title = null;

function _get_ajax_url(a) {
		var url = a.href;
		if (url[0]=="/") return "/ajax"+url;
		else {
				var r = /(http:\/\/[^\/]+)(\/.*)/;
				var m = url.match(r);
				return m[1]+"/ajax"+m[2];
		}
}

function _add_back_link(content) {
		var a = new Element("A", {'href':window.location, 'class':'ajax_backlink'});
		if (_ajax_original_title)
				a.innerHTML = "&larr; Retour à : "+_ajax_original_title;
		else
				a.innerHTML = "&larr; Retour au contenu principal de la page";
		function _handler(ev) { 
				ev = new Event(ev); ev.stop(); 
				content.innerHTML = _ajax_original_content; 
				init_tabs(); 
				$$('#content A.ajax').each(function (a) {
								a.addEvent("click", do_ajax);
						});
				_ajax_original_content=null;
				window.location='#';
		}
		a.addEvent("click", _handler);
// 		var title = content.getElement("h1");
// 		if (title) {
// 				var top_a = a.clone();
// 				top_a.addEvent("click", _handler);
// 				top_a.injectAfter(title);
// 		} 
		a.setStyle("margin-top", "1em");
		a.injectInside(content);
}

function do_ajax(ev) {
		ev = new Event(ev);
		ev.stop();
		var url = _get_ajax_url(this);
		if (!_ajax_original_content) {
				_ajax_original_content = $('content').innerHTML;
				var title = $('content').getElement("h1");
				if (title)
						_ajax_original_title = title.innerHTML;
		}
		var req = new Request.HTML({'url':url, 'update':'content',
																'onComplete':function () { /* if (dtr_init) dtr_init($('content')); */ _add_back_link($('content')); document.location='#top'; } });
		req.get();
}

function init_ajax() {
		$$('A.ajax').each(function (a) {
						a.addEvent("click", do_ajax);
				});
}


////////// Home/Entreprises

function init_home_entreprises() {
		var div = $('home_entreprises');
		if (!div) return;
		var panes = div.getElements(".pane");
		function _init_tabs(pane) {
				var links = pane.getElements("A");
				links[0].addEvent("click", function (ev) { ev = new Event(ev); ev.stop(); panes[1].addClass("shown"); panes[0].removeClass("shown"); });
				links[1].addEvent("click", function (ev) { ev = new Event(ev); ev.stop(); panes[0].addClass("shown"); panes[1].removeClass("shown"); });
		}
		_init_tabs(panes[0]);
		_init_tabs(panes[1]);
}


////////// misc. forms
function _init_programme_autosubmit(form) {
		//var form = $('offers_filter');
		if (!form || !form['programme'] || !form.autosubmit) return;
		for (var i=0; i<form['programme'].length; i++) {
				var input = form['programme'][i];
				input.addEvent("change", function () { this.form.submit(); });
		}

}

function init_programme_selection(form, autosubmit) {
		if (!form) return;
		form.autosubmit = autosubmit;
		for (var i=0; i<form['type'].length; i++) {
				var input = $(form['type'][i]);
				input.addEvent("change", function () { 
								var req = new Request.HTML({'url':form.action+"?ajax=1&type="+this.value,
																						'onComplete':function() { _init_programme_autosubmit(form);},
																						'update':form.getElement(".programme_selection")});
								req.send();
						});
		}
		_init_programme_autosubmit(form);
}

function init_programme_selections() {
		init_programme_selection($('offers_filter'), true);
		init_programme_selection($('cv_filter'));
}


function _init_tabs(div) {
		var buttons = div.getElement(".buttons").getElements("a");
		var panes = div.getElements(".pane");
		function _doit(button) {
				var i = buttons.indexOf(button);
				panes.each(function(el) { el.removeClass("shown"); });
				buttons.each(function(el) { $(el.parentNode).removeClass("selected"); });
				panes[i].addClass("shown");
				if (!Browser.Engine.trident4) // ie6
						$(buttons[i].parentNode).addClass("selected");
		}
		for (var i=0;i<buttons.length;i++) {
				var button = buttons[i];
				button.addEvent("click", function(ev) { ev = new Event(ev); ev.stop(); _doit(this); });
				if (Browser.Engine.trident4) { // buggy ie6 multiclass
						$(button.parentNode).removeClass("selected");
				} else {
						button.addEvent("mouseover", function(ev) { $(this.parentNode).addClass("hover"); });
						button.addEvent("mouseout", function(ev) { $(this.parentNode).removeClass("hover"); });
				}
		}
}

function init_tabs() {
		$$("DIV.tabs").each(_init_tabs);
}


NUM_IMAGE_SETS = 3;
NUM_IMAGES_PER_SET = 2;
NUM_CYCLES = NUM_IMAGES_PER_SET * NUM_IMAGE_SETS;
CYCLE_INTERVAL = 1800;
FADE_DURATION = 1600;
FADE_FPS = 30;

var HomeAnimator = new Class({
				initialize : function (background_image, visuals) {
						this.background_image = background_image;
						this.visuals = visuals;
						this.images = [];
						this.index = null; // which pole
						this.cycle = 0; // choose image in set
				},

				_get_vis_index : function (i, index) {
						if (i>=this.index)
								return i+1;
						else
								return i;
				},

				start : function (index, images) {
						this.index = index;
						this.set_images(images);
						this.background_image.tween("opacity", 0);
						this.cycle_images();
						this.periodicalId = this.cycle_images.periodical(CYCLE_INTERVAL, this);
				},
				_init_images: function () {
						this.cycle = 0;
						for (var i=0; i<NUM_IMAGE_SETS; i++) { 
								// only 3 visuals (4th is the current pole, managed in css, via .active)
								var div = this.visuals[this._get_vis_index(i)]; 
								var imgs = div.getElements("img");
								for (var j=0;j<imgs.length;j++) {
										var img=imgs[j];
										img.fx.cancel();
										img.fx.set("opacity", 0);
										img.src = this.images[i][j];
										img.fx.start("opacity", 1);
								}
						}
				},
				cycle_images: function () {
						if (this.index == null) return;
						function _check_cycle(i, j, cycle) {
								var c = cycle-3, n=0;
								if (c>0) n = 7<<c;
								else n = 7>>-c;
								return ((n&(1<<i))?1:0)^j;
								//return j==cycle;
						}

						for (var i=0; i<NUM_IMAGE_SETS; i++) { 
								// only 3 visuals (4th is the current pole, managed in css, via .active)
								var div = this.visuals[this._get_vis_index(i)]; 
								var imgs = div.getElements("img");
								for (var j=0;j<imgs.length;j++) {
										var img=imgs[j];
										img.fx.cancel();
										if (_check_cycle(i, j, this.cycle)) {
												img.fx.start("opacity", 1);
										} else {
												img.fx.start("opacity", 0);
										}
								}
						}
						this.cycle = (this.cycle + 1) % NUM_CYCLES;
				},
				stop : function () {
						this.visuals.each(function (div) { 
										//div.empty();
										div.getElements("img").each(function(img) {
														img.fx.cancel();
														img.fx.onComplete = function() {};
														img.fx.set("opacity", 0);
												});
// 										var img = div.getElement("img");
// 										if (!img) return;
								});
						this.index = null;
						this.background_image.tween("opacity", 1);
				},
				set_images : function (images) {
						$clear(this.periodicalId);
						this.images = images;
						this._init_images();
				}
		});

function init_home_poles_animation() {
		var image_names = ["admin", "commerce", "comm", "sante"];
		var test = $$("body.home .content .promo");
		if (!test || !test[0]) return;		
		var div = test[0];
		var background_image = div.getElement("img");
		var visuals = div.getElements(".visual");
		var lis = div.getElements("li");
		var animator = new HomeAnimator(background_image, visuals);

		background_image.set("tween", {'duration':500, 'fps':20});

		function _make_images(name) {
				var ans = [];
				for (var i=0; i<NUM_IMAGE_SETS; i++) {
						ans.push(["/media/images/"+name+"-img"+(i*2+1)+".gif",
											"/media/images/"+name+"-img"+(i*2+2)+".gif"]);
				}
				return ans;
		}
		
		function _start_pole_animation(index) {
				animator.start(index, _make_images(image_names[index]));
		}
		function _stop_pole_animation(index) {
				animator.stop();
		}

		function _handler_pole_over(ev) {
				this.addClass("active");
				_start_pole_animation(this.index);
		}
		function _handler_pole_leave(ev) {
				this.removeClass("active");
				_stop_pole_animation(this.index);
		}
		function _init_home_pole_animation(li, index) {
				li.index = index;
				li.addEvent("mouseover", _handler_pole_over);
				li.addEvent("mouseleave", _handler_pole_leave);
				var visual = visuals[index];
				visual.empty();
				for (var i=0;i<NUM_IMAGES_PER_SET;i++) {
						var img = new Element("img", {});
						img.fx = new Fx.Tween(img, {'duration':FADE_DURATION, 
																				'fps':FADE_FPS});
						img.fx.set("opacity", 0);
						img.injectInside(visual);
				}
		}
		for (i=0; i<lis.length; i++) {
				_init_home_pole_animation(lis[i], i);
		}		
}


function init_openables() {
		function _init_openables(div) {
				var open_button = div.getElement(".open_button");
				var close_button = div.getElement(".close_button");
				if (open_button)
						open_button.addEvent("click", 
																 function (ev) { 
																		 new Event(ev).stop(); 
																		 div.addClass("open"); });
				if (close_button)
						close_button.addEvent("click", 
																	function (ev) { 
																			new Event(ev).stop(); 
																			div.removeClass("open"); });
		}
		$$(".openable_container").each(_init_openables);
}

function init_autolabels(parent) {
    function _set_input_default(input, initial_text) {
				if (!input) return;
				function _hint() {
						if (input.value && input.value!=initial_text) return;
						input.addEvent("focus", function () {if (this.value == initial_text) this.value = '';this.removeClass("inactive");});
						input.addEvent("blur", function () {if (this.value == '') {this.value = initial_text;this.addClass("inactive");}});
						input.value = initial_text;
						input.addClass("inactive");
				}

				function _reset(ev) {
						function _later() {
								if (input.value==initial_text) return;
								input.value = initial_text;
								input.addClass("inactive");
						}
						_later.delay(500);
				}
                                
				function _pre_submit() {
						if (input.value==initial_text) {
								input.value = '';
						}
				}
                                
				_hint();
				$(input.form).addEvent("submit", _pre_submit);
				$(input.form).addEvent("presubmit", _pre_submit);
				$(input.form).addEvent("reset", _reset);
    }
		parent = parent || document.body;
    parent.getElements("INPUT.autolabel, TEXTAREA.autolabel").each(function(input) {
						var label = input.title;
						input.title = '';
						_set_input_default(input, label);
				});
}

function preload_images() {
		// hardcoded
		new Asset.images([
											// hovers espace entreprise
											'/media/images/espace-head-b.jpg',
											'/media/images/espace-deposer.jpg',
											'/media/images/espace-consulter-1-b.jpg',
											'/media/images/espace-consulter-2-b.jpg',
											'/media/images/espace-consulter-3-b.jpg',
											'/media/images/espace-consulter-4-b.jpg',
											'/media/images/espace-consulter-5-b.jpg',
											'/media/images/content/footer-a-ouest-b.png',
											'/media/images/content/footer-a-phone-b.gif',
											'/media/images/content/footer-a-alter-b.gif',
											'/media/images/content/footer-a-class-b.gif',
											'/media/images/content/footer-a-cif-b.gif',
											'/media/images/content/footer-a-25-b.gif',
											'/media/images/content/footer-a-est-b.png',

											// home poles
											'/media/images/admin-div.gif',
											'/media/images/comm-div.gif',
											'/media/images/commerce-div.gif',
											'/media/images/pole1-ov.png',
											'/media/images/pole2-ov.png',
											'/media/images/pole3-ov.png',
											'/media/images/pole4-ov.png',
											'/media/images/sante-div.gif'
//
//											'/media/images/admin-img1.gif',
//											'/media/images/admin-img2.gif',
//											'/media/images/admin-img3.gif',
//											'/media/images/admin-img4.gif',
//											'/media/images/admin-img5.gif',
//											'/media/images/admin-img6.gif',
//											'/media/images/comm-img1.gif',
//											'/media/images/comm-img2.gif',
//											'/media/images/comm-img3.gif',
//											'/media/images/comm-img4.gif',
//											'/media/images/comm-img5.gif',
//											'/media/images/comm-img6.gif',
//											'/media/images/commerce-img1.gif',
//											'/media/images/commerce-img2.gif',
//											'/media/images/commerce-img3.gif',
//											'/media/images/commerce-img4.gif',
//											'/media/images/commerce-img5.gif',
//											'/media/images/commerce-img6.gif',
//											'/media/images/sante-img1.gif',
//											'/media/images/sante-img2.gif',
//											'/media/images/sante-img3.gif',
//											'/media/images/sante-img4.gif',
//											'/media/images/sante-img5.gif',
//											'/media/images/sante-img6.gif'

											]);
}

//window.addEvent("domready", init_tooltips);
//window.addEvent("domready", init_menu);



window.addEvent("domready", preload_images);
window.addEvent("domready", init_nav);
window.addEvent("domready", init_ajax);
window.addEvent("domready", init_home_entreprises);
window.addEvent("domready", init_programme_selections);
window.addEvent("domready", init_tabs);
window.addEvent("domready", init_openables);
window.addEvent("domready", init_home_poles_animation);
window.addEvent("domready", init_autolabels);
