/*
** Evonux 2005-2009
** Evonux JavaScript Tools (EJST) - local version
**
** tested: IE 6.0/7.0, Firefox 2.0/3.0, Safari 2.0/3.0, Konqueror
**         Mac OS X, Windows XP/Vista, Linux
**
** All rights reserved
*/

if (Evonux && Evonux.IncludeRegister('THIS'))
  Evonux.Exit();

if (!Evonux) Evonux = {};

Evonux.Page = new Class({
    lastnews_time: Evonux.LASTNEWS_DISPLAY_DURATION,
    lastnews_height: 80, // px
    lastnews_lg: 0,
    lastnews_rank: 0,
    lastnews_ul: null,

    banner: null,
    banner_rank: 0,
    banner_duration: 6500,

    rollmenu_timer: null,

    /*
    ** Inits complex display
    */
    initialize: function()
    {
	//this.TransformText();
	//this.MakeLinksDynamic();
	//this.ScheduleSize();
	//new Evonux.Schedule({node:$('menu').getElement('div.schedule')});
	window.addEvent('resize', this.AdjustSizes.bind(this));
	setTimeout(function () {this.AdjustSizes();}.bind(this), 1500);

	// If intro is displayed, adds an event that makes it disappear on click
	// anywhere on the page
	if ($('intro'))
	{
	  $('intro').addEvent('click', this.RemoveIntro.bind(this));
	  //this.AnimateIntro();
	}
	// Main menu
	//this.MagnifyMainMenu();
	this.MainMenuSubLaunch();
	// Captcha renew
	//this.CaptchaRenew();
    },

    /*
    ** Animates part of intro
    */
    AnimateIntro: function(e)
    {
	
    },
    /*
    ** Removes intro if exists
    */
    RemoveIntro: function(e)
    {
	var intro = $('intro');
	if (!intro) return false;

	var anim_intro = new Fx.Styles(intro, {wait:false, duration: 1000});
	anim_intro.start({
	    'height': 0
	});
    },

    /*
    ** Optimizes selected menu
    */
    MagnifyMainMenu: function()
    {
	var m = $('wrap').getElement('div.menu table td.selected');
	if (!m) return false;

	var a = m.getElement('a'),
	    before = new Element('img'),
	    after = new Element('img');
	before.src = Evonux.PIC_DIR +'/menu-top-bg-selected-left.png';
	after.src = Evonux.PIC_DIR +'/menu-top-bg-selected-right.png';
	
	before.injectBefore(a);
	after.injectAfter(a);
    },

    /*
    ** Prepares motions for submenus (of main menu)
    */
    MainMenuSubLaunch: function()
    {
	var menu_elt = $('wrap').getElements('div.menu td'),
	    ul, a;
	for (var k = 0; k < menu_elt.length; k++)
	{
	  ul = menu_elt[k].getElement('ul');
	  a = menu_elt[k].getElement('a'); // First one = main one
	  if (!ul)
	  {
	    a.addEvent('mouseenter', this.MainMenuSubHide.bind(this));
	    continue;
	  }
	  a.addEvent('mouseenter', this.MainMenuSubShow.bind(this));
	  $(document.body).addEvent('click', this.MainMenuSubHide.bind(this));
	}
	$('wrap').getElement('div.menu').addEvent('mouseleave', function () {this.rollmenu_timer = setTimeout(this.MainMenuSubHide, 1000);}.bind(this));
	$('wrap').getElement('div.menu').addEvent('mouseenter', function () {clearTimeout(this.rollmenu_timer);}.bind(this));
    },
    /*
    ** Shows/Hides submenu
    */
    MainMenuSubShow: function(e)
    {
	var e = new Event(e),
	    target = $(e.target);
	while (target.getTag() != 'td')
	{
	  target = target.getParent();
	  if (target.getTag() == 'body') return;
	}
	// Hides all other submenus
	this.MainMenuSubHide(e);
	// Shows current submenu (with motion)
	var ul = target.getElement('ul'),
	    height;
	if (ul.getStyle('display') != 'none') return; // nothing to do
	ul.setStyles({
	    'display': 'block',
	    'opacity': 1
	});
	if (!ul.evonux_height)
	{
	  ul.evonux_height = ul.getStyle('height');
	  ul.setStyle('width', ul.getStyle('width'));
	  if ((window.ie6 || window.ie7) && target.hasClass('selected'))
	    ul.setStyle('margin-left', -1 * parseInt(target.getStyle('width')));
	}
	ul.setStyles({
	    'opacity': 0,
	    'height': 0,
	    'padding-top': ul.evonux_height
	});
	var anim_ul = new Fx.Styles(ul, {wait:false, duration: 300});
	anim_ul.start({
	    'opacity' : 1,
	    'height': ul.evonux_height,
	    'padding-top': 0
	});
    },
    MainMenuSubHide: function(e)
    {
	// Hides all other submenus
	var ul = $('wrap').getElements('div.menu ul');
	for (var k = 0; k < ul.length; k++)
	  ul.setStyle('display', 'none');
    },

    /*
    ** Launches partners motion
    */
    AnimateSponsors: function()
    {
	var ul = $$('div#wrap div.footer ul.spns li ul'),
	    ul_sponsor = ul[0],
	    ul_pro_str = ul[1],
	    ul_client = ul[2],
	    ul_partner = ul[3];
	// Checks that there are enough partners to animate
	if (ul.length <= 0) return false;
	var li_sponsor = ul_sponsor ? ul_sponsor.getElements('li') : null,
	    li_pro_str = ul_pro_str ? ul_pro_str.getElements('li') : null,
	    li_client = ul_client ? ul_client.getElements('li') : null,
	    li_partner = ul_partner ? ul_partner.getElements('li') : null;
	if ((!li_sponsor || li_sponsor.length <= 1) &&
	    (!li_pro_str || li_pro_str.length <= 1) &&
	    (!li_client || li_client.length <= 1) &&
	    (!li_partner || li_partner.length <= 1)) return false;
	// Initis values and inits to hidden all partners
	if (li_sponsor)
	{
	  this.sponsor_lg = li_sponsor.length;
	  this.sponsor_li = li_sponsor;
	  for (var k = 1; k < li_sponsor.length; k++)
	    li_sponsor[k].setStyle('opacity', 0);
	}
	if (li_pro_str)
	{
	  this.pro_str_lg = li_pro_str.length;
	  this.pro_str_li = li_pro_str;
	  for (var k = 1; k < li_pro_str.length; k++)
	    li_pro_str[k].setStyle('opacity', 0);
	}
	if (li_client)
	{
	  this.client_lg = li_client.length;
	  this.client_li = li_client;
	  for (var k = 1; k < li_client.length; k++)
	    li_client[k].setStyle('opacity', 0);
	}
	if (li_partner)
	{
	  this.partner_lg = li_partner.length;
	  this.partner_li = li_partner;
	  for (var k = 1; k < li_partner.length; k++)
	    li_partner[k].setStyle('opacity', 0);
	}
	// Does launch motion
	setTimeout(this.AnimateSponsors_do.bind(this), this.sponsor_time);
    },
    /*
    ** Goes on with partners motion
    */
    AnimateSponsors_do: function()
    {
	var cur_rank, next_rank,
	    anim_li0, anim_li1;
	// Sponsor
	if (this.sponsor_lg > 1)
	{
	  cur_rank = this.sponsor_rank;
	  next_rank = this.sponsor_rank + 1;
	  if (next_rank + 1 > this.sponsor_lg) next_rank = 0;
	  anim_li0 = new Fx.Styles(this.sponsor_li[cur_rank], {wait:false, duration: 500});
	  anim_li1 = new Fx.Styles(this.sponsor_li[next_rank], {wait:false, duration: 500});
	  anim_li0.start.delay(0, anim_li0, {
	      'opacity': 0
	  });
	  anim_li1.start.delay(0, anim_li1, {
	      'opacity': 1
	  });
	  this.sponsor_rank = next_rank;
	}
	// Professional structure
	if (this.pro_str_lg > 1)
	{
	  cur_rank = this.pro_str_rank;
	  next_rank = this.pro_str_rank + 1;
	  if (next_rank + 1 > this.pro_str_lg) next_rank = 0;
	  anim_li0 = new Fx.Styles(this.pro_str_li[cur_rank], {wait:false, duration: 500});
	  anim_li1 = new Fx.Styles(this.pro_str_li[next_rank], {wait:false, duration: 500});
	  anim_li0.start.delay(100, anim_li0, {
	      'opacity': 0
	  });
	  anim_li1.start.delay(100, anim_li1, {
	      'opacity': 1
	  });
	  this.pro_str_rank = next_rank;
	}
	// Client
	if (this.client_lg > 1)
	{
	  cur_rank = this.client_rank;
	  next_rank = this.client_rank + 1;
	  if (next_rank + 1 > this.client_lg) next_rank = 0;
	  anim_li0 = new Fx.Styles(this.client_li[cur_rank], {wait:false, duration: 500});
	  anim_li1 = new Fx.Styles(this.client_li[next_rank], {wait:false, duration: 500});
	  anim_li0.start.delay(200, anim_li0, {
	      'opacity': 0
	  });
	  anim_li1.start.delay(200, anim_li1, {
	      'opacity': 1
	  });
	  this.client_rank = next_rank;
	}
	// Partners
	if (this.partner_lg > 1)
	{
	  cur_rank = this.partner_rank;
	  next_rank = this.partner_rank + 1;
	  if (next_rank + 1 > this.partner_lg) next_rank = 0;
	  anim_li0 = new Fx.Styles(this.partner_li[cur_rank], {wait:false, duration: 500});
	  anim_li1 = new Fx.Styles(this.partner_li[next_rank], {wait:false, duration: 500});
	  anim_li0.start.delay(300, anim_li0, {
	      'opacity': 0
	  });
	  anim_li1.start.delay(300, anim_li1, {
	      'opacity': 1
	  });
	  this.partner_rank = next_rank;
	}

	setTimeout(this.AnimateSponsors_do.bind(this), this.sponsor_time);
    },

    /*
    ** Transforms texts into images with nice font
    */
    TransformText: function()
    {
	// HEADER
	//  - Menu
	Evonux.Text.ToImg({node:$$('div#wrap div.menu a.title'), font:1}); // , shadow:'rgb(0,0,0)'
	// LOCAL MENU
	//  - Home news
	Evonux.Text.ToImg({node:$$('div#wrap div.local-menu div.last-news h1')[0], font:0});
	Evonux.Text.ToImg({node:$$('div#wrap div.local-menu div.last-news a.title'), font:0});
	// CONTENT
	//  - headers
	Evonux.Text.ToImg({node:$$('div#wrap div.content h1'), font:0});
	Evonux.Text.ToImg({node:$$('div#wrap div.content h2'), font:0});
	//  - local menu
	Evonux.Text.ToImg({node:$$('div#wrap div.local-menu ul.menu a'), font:0});
	//  - news
	Evonux.Text.ToImg({node:$$('div#wrap ul.newslist a.title'), font:0});
	//  - search
	Evonux.Text.ToImg({node:$$('div#wrap ul.search-result a.title'), font:0});
	// FOOTER
	//  - sponsors
	Evonux.Text.ToImg({node:$$('div#wrap div.footer ul.spns li h1'), font:0});
    },

    /*
    ** Adjusts size of content so footer is at least at the bottom of the page
    */
    AdjustSizes: function()
    {
	if ($('wrap').getElement('div.breakingnews')) return;

	$('wrap').getElement('div.content').setStyle('padding-bottom', 0);
	var window_height = window.getHeight(),
	    wrap_size = $('wrap').getSize(),
	    content_size = $('wrap').getElement('div.content').getSize(),
	    delta = window_height - wrap_size.size.y - 30;
	$('wrap').getElement('div.content').setStyle('padding-bottom', delta > 0 ? delta : 0);
    },

    /*
    ** Launches banners cycle
    */
    BannersInit: function()
    {
	this.banner = $('wrap').getElement('div.header div.banner').getChildren();
	for (var k = 0; k < this.banner.length; k++)
	  this.banner[k].setStyles({
	      'position': 'absolute',
	      'width': 468,
	      'height': 95,
	      'margin-top': (k > 0 ? 95 : 0)
	  });
	if (this.banner.length <= 1) return false;
	this.banner_rank = 0;
	setTimeout(this.NextBanner.bind(this), this.banner_duration);
    },
    /*
    ** Displays next banner
    */
    NextBanner: function()
    {
	var next_rank = (this.banner_rank < this.banner.length - 1 ? this.banner_rank + 1 : 0),
	    cur_ban = this.banner[this.banner_rank],
	    next_ban = this.banner[next_rank],
	    anim_cur = new Fx.Styles(cur_ban, {wait:false, duration: 500}),
	    anim_next = new Fx.Styles(next_ban, {wait:false, duration: 500});
	anim_cur.start({
	    'margin-top': [0,-95]
	});
	anim_next.start({
	    'margin-top': [95,0]
	});

	this.banner_rank = next_rank;
	setTimeout(this.NextBanner.bind(this), this.banner_duration);
    },

    /*
    ** Makes urgent job offers dynamic
    */
    JobOffersInit: function()
    {
	var jou = $('wrap').getElement('div.local-menu div.last-news div.joboffer-urgent');
	if (!jou) return;

	jou.setStyle('display', 'none');
	setTimeout(this.NextJobOffer.bind(this), this.joboffer_interval);
    },
    NextJobOffer: function()
    {
	// Undisplays unwanted offer
	var jou = $('wrap').getElement('div.local-menu div.last-news div.joboffer-urgent'),
	    o = jou.getElements('a');
	if (o.length > 1)
	{
	  o[1 - this.joboffer_rank].setStyle('display', 'none');
	  o[this.joboffer_rank].setStyle('display', 'block');
	  this.joboffer_rank = 1 - this.joboffer_rank;
	}
	jou.setStyles({'display': 'block',
		       'opacity': 0});
	var anim_jou = new Fx.Styles(jou, {wait:false, duration: 500});
	anim_jou.start({
	    'opacity': [0,0.95]
	});
	setTimeout(this.HideJobOffers.bind(this), this.joboffer_duration);
    },
    HideJobOffers: function()
    {
	var jou = $('wrap').getElement('div.local-menu div.last-news div.joboffer-urgent');
	var anim_jou = new Fx.Styles(jou, {wait:false, duration: 500});
	anim_jou.start({
	    'opacity': [0.95,0]
	});
	setTimeout(this.NextJobOffer.bind(this), this.joboffer_interval);
    },

    /*
    ** Transforms all links so that page will not be reloaded but just its content will
    */
    MakeLinksDynamic: function()
    {
	var a = $('wrap').getElements('a').extend($('footer').getElements('a')),
	    href,
	    prefix = 'http://'+ Evonux.SITE_URL + Evonux.SITE_ROOT;
	for (var k = 0; k < a.length; k++)
	{
	  href = a[k].getAttribute('href');
	  if (href.substr(0, 7) == 'http://' &&
	      href.substr(0, prefix.length) != prefix) continue;
	  a[k].addEvent('click', this.LoadLink.bind(this));
	}
    },
    /*
    ** Asks server to load a dynamic link
    */
    LoadLink: function(e)
    {
	var e = new Event(e),
	    a = e.target;
	e.stop();
	while (a.tagName.toLowerCase() != 'a' && a.tagName.toLowerCase() != 'body') a = a.parentNode;

	var ajax_option = {
	    method: 'get',
	    onSuccess: this.LoadLink_do.bind(this)
	};
	new Ajax(a.getAttribute('href') +'?__dyn', ajax_option).request();
	return false;
    },
    /*
    ** Asks server to load a dynamic link
    */
    LoadLink_do: function(text, xml)
    {
	var xml = new Evonux.XML(xml).GetArray(),
	    bd = $('content').getElement('div.txt'),
	    desc = $('header').getElement('div.title'),
	    state = parseInt(xml['state']),
	    content = xml['content'] ? xml['content'][0] : '',
	    title = xml['title'] ? xml['title'][0] : '',
	    title2 = xml['title2'] ? xml['title2'][0] : '',
	    description = xml['description'] ? xml['description'][0] : '';

	if (!state)
	{
	  alert($tc1('you_cannot_access_this_page'));
	  return false;
	}

	Evonux.SetTitle(title2);
	desc.setHTML(description);
	bd.empty();
	bd.setHTML(content);

	this.ExecScripts();

	// Dynamise links
	var a = bd.getElements('a'),
	    href,
	    prefix = 'http://'+ Evonux.SITE_URL + Evonux.SITE_ROOT;
	for (var k = 0; k < a.length; k++)
	{
	  href = a[k].getAttribute('href');
	  if (href.substr(0, 7) == 'http://' &&
	      href.substr(0, prefix.length) != prefix) continue;
	  a[k].addEvent('click', this.LoadLink.bind(this));
	}

	this.AdjustSizes();

	return true;
    },
    /*
    ** Asks server to load a dynamic link
    */
    ExecScripts: function()
    {
	var bd = $('content').getElement('div.txt'),
	    script = bd.getElements('script');

	for (var k = 0; k < script.length; k++)
	  eval(script[k].innerHTML);
	return true;
    },

    /*
    ** Adjusts size of schedule mini navigator if this kind of page is loaded
    */
    ScheduleSize: function()
    {
	var body = $(document.getElementsByTagName('body')[0]);
	if (!body.hasClass('schedule')) return;
	window.resizeTo(600,200);
    },

    /*
    ** Launches main news motion
    */
    AnimateLastNews: function()
    {
	var ul = $$('div#content div.news div.last ul');
	// Checks that there are enough pieces of news to animate
	if (ul.length <= 0) return false;
	var li = ul[0].getElements('li');
	if (li.length <= 2) return false;
	this.lastnews_lg = li.length;
	this.lastnews_ul = ul[0];
	// Does launch motion
	setTimeout(this.AnimateLastNews_do.bind(this), this.lastnews_time);
    },
    /*
    ** Launches main news motion
    */
    AnimateLastNews_do: function()
    {
	var anim_ul = new Fx.Styles(this.lastnews_ul, {wait:false, duration: 500});
	anim_ul.start({
	    'margin-top': - this.lastnews_height * this.lastnews_rank
	});

	this.lastnews_rank++;
	var time = this.lastnews_time;
	if (this.lastnews_rank >= this.lastnews_lg - 1)
	{
	  time *= 2;
	  this.lastnews_rank = 0;
	}
	setTimeout(this.AnimateLastNews_do.bind(this), time);
    },

    /*
    ** Cv put msg (error field)
    */
    CvPutMsg: function(msg)
    {
	if (!msg)
	{
	  msg = '<div style="text-align:center;"><img src="'+ Evonux.PIC_DIR +'/pic_loading.gif" alt="..." /></div>';
	  $('cvputform').getElement('div.errorfield').innerHTML = msg;
	}
	else
	{
	  alert(msg);
	  $('cvputform').getElement('div.errorfield').innerHTML = msg;
	}
    },
    /*
    ** Cv put : all is OK, form is hidden
    */
    CvPutEnd: function(cv_code)
    {
	$('cvputform').innerHTML = '<h1>CV #'+ cv_code +'</h1><p>'+ $tc1('cv_put_end_msg') +'</p>';
	this.AdjustSizes();
    },

    /*
    ** Mission put msg (error field)
    */
    MissionPutMsg: function(msg)
    {
	if (!msg)
	{
	  msg = '<div style="text-align:center;"><img src="'+ Evonux.PIC_DIR +'/pic_loading.gif" alt="..." /></div>';
	  $('missionputform').getElement('div.errorfield').innerHTML = msg;
	}
	else
	{
	  alert(msg);
	  $('missionputform').getElement('div.errorfield').innerHTML = msg;
	}
    },
    /*
    ** Mission put : all is OK, form is hidden
    */
    MissionPutEnd: function(mission_code)
    {
	$('missionputform').innerHTML = '<h1>MISSION #'+ mission_code +'</h1><p>'+ $tc1('mission_put_end_msg') +'</p>';
	this.AdjustSizes();
    },
    /*
    ** Mission put : rewrites step1 box to specify to user he's logged in
    */
    MissionSetLogged: function(username, url)
    {
	$('missionputform').getElement('div.mission-step1 div.cnt').innerHTML = '<p style="margin-top:20px; margin-bottom:20px;">'+ $tc1('mission_you_are_already_logged_in').replace('[[[USERNAME]]]', username) +'</p><div style="text-align:center;"><button onclick="window.location = \''+ url +'\';" class="button">'+ $tc1('signout') +'</button></div>';
	this.AdjustSizes();
    },

    /*
    ** Makes Captcha able to renew by clicking it
    */
    CaptchaRenew: function()
    {
	var c = $('scuimg');
	if (!c) return false;
	c.addEvent('click', function () {$('scuimg').src = Evonux.PIC_DIR +'/getimgcaptcha.jpg?_n='+ Evonux.GetNb();});
	c.setStyle('cursor', 'pointer');
    },

    /*
    ** Sends contact form
    */
    ContactFormSend: function()
    {
	var form = $('contactform');
	form.send({
	    onSuccess: this.ContactFormSend_do.bind(this)
	});
	return false;
    },
    ContactFormSend_do: function(text, xml)
    {
	var xml = new Evonux.XML(xml).GetArray();
	alert(xml['msg'][0]);
    }
});

var evx_page, audioplayer_listener;
window.addEvent('domready', function () {
    evx_page = new Evonux.Page();
});

// ------------------------------------------------
