/*
** Evonux 2005-2008
** Evonux JavaScript Tools (EJST) - local version
**
** tested: IE 6.0/7.0, Firefox 2.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({
    content: 'content',
    contentimg: 'content_img',
    contentimg2: 'content_img2',
    header:'header',
    menu:'menu',
    wrap:'wrap',
    detail:'detail',
    bgimg:'bgimg',
    mfx: null,
    /*
    ** Inits complex display
    */
    initialize: function()
    {
	if ($('home-menu'))
	  this.IntroHomeMenu.delay(1000, this);

	// Activates submenu elements (if needeed)
	var sm_a = $$('ul.sm a'), sm_ul = $$('ul.sm');
	for (var k = 0; k < sm_a.length; k++)
	  sm_a[k].addEvent('click', this.DisplaySubMenu.bind(this));
	for (var k = 0; k < sm_ul.length; k++)
	{
	  // Displays img
	  sm_ul[k].getElements('img').setStyle('display', 'block');
	  
	  this.mfx = new Fx.Elements($$('ul.sm'), {wait:false});
	  sm_ul[k].addEvents({
	      'mouseenter': function () {evx_page.SwitchSubMenu('out')},
	      'mouseleave': function () {evx_page.SwitchSubMenu('in')}
	  });
	}
    },

    /*
    ** Displays or hides loading icon
    */
    Loading: function(on)
    {
	var loading = $('loading');
	if (!loading) return false;
	if (arguments.length < 1) on = true;
	loading.setStyle('display', (on ? 'block' : 'none'));
    },


    Load: function(oid)
    {
	this.request_oid = oid;
	new Ajax(Evonux.SITE_ROOT+'/dyn.php', {
	    method: 'get',
	    data: 'a=page&id='+ oid +'&askmenu='+ (!$('menu') || $('menu').getElements('li').length <= 0 ? '1' : '0'),
	    onComplete: this.LoadComplete.bind(this)
	}).request();
    },

    LoadComplete: function (txt,xml)
    {
	this.Loading(false);
	var r = new Evonux.XML(xml).GetArray();

	// Checks whether home page menu has to be removed
	if ($('home-menu'))
	  this.RemoveHomeMenu();
	// Main menu
	if (r.menu)
	    this.ShowMenu(r.menu[0]);
	else // selects appropriate menu section regarding requested oid
	    this.updateMenu();
	// Main content
	if (r.content)
	{
	  $(this.header).removeClass('black');
	  this.updateContent(r.content);
	  this.HideDetailTab();
	}
	// Main content IMG
	if (r.contentimg)
	{
	  this.updateContentImg(r.contentimg);
	  // Detail tab
	  if (r.detail && r.detail[0].length)
	    this.ShowDetailTab(r.detail[0]);
	  else
	    this.HideDetailTab();
	  $(this.header).addClass('black');
	}
	// submenu
	if (r.submenu)
	  this.ShowSubMenu(r.submenu[0]);
	// bg img
	if (r.bgimg)
	  this.ShowBgImg(r.bgimg[0]);
	else
	  if ($(this.bgimg)) $(this.bgimg).remove();

	// alert msg
	if (r.msg)
	    alert(r.msg[0]);
	this.request_oid = 0;
    },

    /*
    ** Makes main menu appear
    */
    IntroHomeMenu: function()
    {
	var ul = $('home-menu');
	if (!ul) return false;
	var li = ul.getElements('li'),
	    anim_li = new Array();
	
	ul.setStyles({
	    'display': 'block'
	});
	for (var k = 0; k < li.length; k++)
	{
	  li[k].setStyles({
	      'opacity': 0
	  });
	  anim_li[k] = new Fx.Styles(li[k], {wait:false, duration: 1000});
	  anim_li[k].start.delay(k * 500, anim_li[k], {
	      'opacity': [0, 1],
	      'margin-left': [(k%2 ? -150 : 200), (k%2 ? 50 : 0)]
	  });
	  li[k].addEvent('mouseenter', this.__homemenu_on.bind(this));
	  li[k].addEvent('mouseleave', this.__homemenu_off.bind(this));
	}
    },
    /*
    ** Makes main menu disappear
    */
    RemoveHomeMenu: function()
    {
	var ul = $('home-menu'),
	    anim_ul = new Fx.Styles(ul, {wait:false, duration: 1500});
	anim_ul.start({
	    'opacity': 0
	});
	setTimeout(function () {
	    ul.remove();
	}, 1500);
    },
    /*
    ** Home menu item hover event
    */
    __homemenu_on: function(e)
    {
	var e = new Event(e),
	    li = $(e.target);
	while (li.getTag() != 'li' && li.getTag() != 'body')
	  li = li.getParent();
	if (li.getTag() == 'body') return false;

	var anim_li = new Fx.Styles(li, {wait:false, duration: 500}),
	    anim_a = new Fx.Styles(li.getElement('a'), {wait:false, duration: 500});
	anim_li.start({
	    'padding-left': 100
	});
	anim_a.start({
	    'color': String.rgbToHex('rgb(224,187,123)')
	});
    },
    /*
    ** Home menu item un-hover event
    */
    __homemenu_off: function(e)
    {
	var e = new Event(e),
	    li = e.target;
	while (li.getTag() != 'li' && li.getTag() != 'body')
	  li = li.getParent();
	if (li.getTag() == 'body') return false;

	var anim_li = new Fx.Styles(li, {wait:false, duration: 500}),
	    anim_a = new Fx.Styles(li.getElement('a'), {wait:false, duration: 500});
	anim_li.start({
	    'padding-left': 0
	});
	anim_a.start({
	    'color': String.rgbToHex('rgb(255,255,255)')
	});
    },

    /*
    ** Makes main menu appear
    */
    ShowMenu: function(m)
    {
	var m = m, k;
	$(this.menu).innerHTML = '';
	// Displays each item
	for (k = 0; k < m.item.length; k++)
	{
	  var selected = false;
	  if (m.item[k].label)
	  {
	    var li = new Element('li');
	    if (m.item[k].selected == '1') // selected ?
	    {
	      li.addClass('selected');
	      selected = true;
	    }
	    var a = new Element('a',{'class':'title', 'href':m.item[k].url}).setHTML(m.item[k].label).injectInside(li);
	    a.addEvent('click', this.OpenMenu.bind(this));
	    // Subitems (links)
	    if (m.item[k].subitem)
	      for (var h = 0; h < m.item[k].subitem.length; h++)
	      {
		if (m.item[k].subitem[h].label)
		{
		  var a = new Element('a',{'class':'link'}).setHTML(m.item[k].subitem[h].label);
		  a.addEvent('click', this.OpenMenu.bind(this));
		  a.setProperty('href', m.item[k].subitem[h].url);
		  if (!selected) a.setStyle('display','none');
		  a.injectInside(li);
		}
	      }
	    li.injectInside($(this.menu));
	  }
	}
	$(this.menu).style.display = 'block';
    },
    /*
    ** 
    */
    OpenMenu: function(e)
    {
	var e = new Event(e).stop(),
	    re_oid = /\/p([0-9]+)\//i;
	// Grabs oid
	re_oid.exec(e.target.getAttribute('href'));
	var oid = RegExp.$1;
	// Opens page...
	this.Load(oid);
	// ...and updates menu
	this.SubMenuClose();
	this.SwitchMenu(e.target);
	return false;
    },
    /*
    ** Selects appropriate menu section
    */
    updateMenu: function()
    {
	if (!this.request_oid) return;

	var links = $$('#'+this.menu+' a'),
	    re_oid = /\/p([0-9]+)\//i,
	    link_oid;
	for (var k = 0; k < links.length; k++)
	{
	  re_oid.exec(links[k].getAttribute('href'));
	  link_oid = RegExp.$1;
	  if (link_oid == this.request_oid)
	  {
	    if (links[k].hasClass('title'))
	    {
	      this.SwitchMenu(links[k]);
	      return;
	    }
	    if (links[k].hasClass('link'))
	    {
	      this.SwitchMenu(links[k]);
	      this.updateMenuSection(links[k]);
	      return;
	    }
	  }
	}
    },
    /*
     * Set the H2 of current menu section
     */
    updateMenuSection: function(obj)
    {
	var txt = obj.innerHTML;
	while (obj.tagName.toLowerCase() != 'li') obj = obj.parentNode;
	var h2 = obj.getElement('h2');
	if (h2) h2.setHTML(txt);
	else
	    {
		h2 = new Element('h2').setHTML(txt);
		h2.injectAfter(obj.getElement('a.title'));
	    }
    },

    SwitchMenu: function (obj)
    {
	while (obj.tagName.toLowerCase() != 'li') obj = obj.parentNode;
	this.SubMenuClose();
	if (obj.hasClass('selected'))
	{
	  // CLOSE SUB MENU !!!
	  if ($(this.menu).getElement('li.selected h2'))
	    $(this.menu).getElement('li.selected h2').remove();
	}
	else
	{
	  // Closing open menu
	  $$('#'+this.menu+' .selected a.link').setStyle('display','none');
	  if ($(this.menu).getElement('li.selected h2'))
	    $(this.menu).getElement('li.selected h2').remove();
	  $$('#'+this.menu+' .selected').removeClass('selected');
	  // Opening new menu
	  obj.addClass('selected');
	  obj.getElements('a').setStyle('display','block');
	}
    },

    updateContent: function (c)
    {
	if ($(this.content))
	  $(this.content).setHTML(c);
	else
	{
	  // removes images
	  if ($(this.contentimg))
	    $(this.contentimg).remove();
	  if ($(this.contentimg2))
	    $(this.contentimg2).remove();
	  // removes submenus
	  this.SubMenuClose();
	  
	  new Element('div',{id:'content'}).setHTML(c).injectInside($(this.wrap));
	}
    },
    updateContentImg: function (src)
    {
	var img_wrap = $(this.contentimg), img2_wrap = $(this.contentimg2),
	    img = (img_wrap ? img_wrap.getElement('img') : null), img2 = (img2_wrap ? img2_wrap.getElement('img') : null);
	// Initializes images objects
	if (!img_wrap)
	{
	  // Removes content
	  if ($(this.content)) $(this.content).remove();
	  // Builds image
	  var img = new Element('img', {
	      'style': {
		  'opacity': 0
	      }
	  });
	  img_wrap = new Element('div', {
	      id: 'content_img'
	  }).injectInside($(this.wrap));
	  img_wrap.adopt(img);
	}
	if (!img2_wrap)
	{
	  img.addEvent('load', this.updateContentImg2to1.bind(this));
	  var img2 = new Element('img', {
	      'events': {
		  'load': this.updateContentImg1to2.bind(this)
	      },
	      'style': {
		  'opacity': 0
	      }
	  });
	  img_wrap2 = new Element('div', {
	      id: 'content_img2'
	  }).injectInside($(this.wrap));
	  img_wrap2.adopt(img2);
	}
	// Fills image
	this.Loading();
	if (img_wrap.getStyle('opacity') <= 0.1)
	{
	  if (img.getAttribute('src') == src)
	    img.fireEvent('load');
	  else
	    img.setAttribute('src', src);
	}
	else
	{
	  if (img2.getAttribute('src') == src)
	    img2.fireEvent('load');
	  else
	    img2.setAttribute('src', src);
	}
    },
    /*
    ** The following 2 methods perform a nice transition from displayed
    ** image to next displayed image
    */
    updateContentImg2to1: function (e)
    {
	this.Loading(false);
	var img = $(this.contentimg),
	    img2 = $(this.contentimg2);
	if (window.ie7)
	{
	  img.setStyle('visibility', 'visible');
	  img2.setStyle('visibility', 'hidden');
	}
	else
	{
	  var anim_img = new Fx.Styles(img, {wait:false, duration: 1000, fps:15}),
	      anim_img2 = new Fx.Styles(img2, {wait:false, duration: 1000, fps:15});
	  anim_img.start({
	      'opacity': 1
	  });
	  anim_img2.start({
	      'opacity': 0
	  });
	}
    },
    updateContentImg1to2: function (e)
    {
	this.Loading(false);
	var img = $(this.contentimg),
	    img2 = $(this.contentimg2);
	if (window.ie7)
	{
	  img.setStyle('visibility', 'hidden');
	  img2.setStyle('visibility', 'visible');
	}
	else
	{
	  var anim_img = new Fx.Styles(img, {wait:false, duration: 1000, fps:15}),
	      anim_img2 = new Fx.Styles(img2, {wait:false, duration: 1000, fps:15});
	  anim_img.start({
	      'opacity': 0
	  });
	  anim_img2.start({
	      'opacity': 1
	  });
	}
    },

    ShowSubMenu: function(sm)
    {
	// Checking for submenu position
	var n = $$('#'+ this.wrap +' ul.sm');
	var ml = 238;
	for (var i = 0; i < n.length; i++)
	    ml += n[i].getStyle('width').toInt();
	//ml += i; // adding 2px margin-left
	
	if (i > 2) return;

	// Std links
	if (sm.type[0] == '0')
	{
	  // Creates ul
	  var ul = new Element('ul',{'class':'submenu sm'}).setStyle('margin-left',ml);
	  // Adds li
	  for (var k = 0; k < sm.item.length; k++)
	  {
	    var li = new Element('li'),
		a = new Element('a', {'href':sm.item[k].url}).setHTML(sm.item[k].label).injectInside(li);
	    a.addEvent('click', this.DisplaySubMenu.bind(this));
	    li.injectInside(ul);
	  }
	  var w = 230;
	}
	else
	// Img link
	{
	  // Creates ul
	  var ul = new Element('ul',{'class':'submenupic sm'}).setStyle('margin-left', ml);
	  // Adds li
	  for (var k = 0; k < sm.item.length; k++)
	  {
	    var li = new Element('li'),
		a = new Element('a',{'href':sm.item[k].url}).injectInside(li);
	    a.addEvent('click', this.DisplaySubMenu.bind(this));
	    var img = new Element('img', {'src':sm.item[k].imgsrc,'alt':sm.item[k].label}).injectInside(a);
	    li.injectInside(ul);
	  }
	  var w = 215;
	}
	
	ul.injectInside($(this.wrap));
	ul.effect('width', {duration: 500, transition: Fx.Transitions.Quad.easeOut}).start(w).chain(function () {
	    // Displays img
	    ul.getElements('img').setStyle('display', 'block');

	    evx_page.mfx = new Fx.Elements($$('ul.sm'), {wait:false});

	    ul.addEvents({
		'mouseenter': function () {evx_page.SwitchSubMenu('out')},
		'mouseleave': function () {evx_page.SwitchSubMenu('in')}
	    });
	});
    },
    
    /*
    ** Displays a submenu (black bg) item
    */
    DisplaySubMenu: function(e)
    {
	var e = new Event(e),
	    target = e.target,
	    re_oid = /\/[a-z]+([0-9]+)\//i,
	    oid;
	e.stop();
	if (!target.getTag) target = $(target);
	if (target.getTag() != 'a') target = target.getParent();
	re_oid.exec(target.getAttribute('href'));
	oid = RegExp.$1;

	this.SubMenuCloseNext(target);
	this.Load(oid);
	return false;
    },

    // close all submenus
    SubMenuClose: function()
    {
	$$('#'+this.wrap+' ul.sm').each (function (el) {el.remove()});
    },

    // close next submenu
    SubMenuCloseNext: function(obj)
    {
	while (obj.tagName.toLowerCase() != 'ul') obj = obj.parentNode;
	var e = $$('#'+this.wrap+' ul.sm');
	var ok = false;
	for (var i = 0; i < e.length; i++)
	    {
		if (e[i] == obj) ok = true;
		if ((e[i] != obj) && ok) e[i].remove();
	    }
    },
    
    SwitchSubMenu: function(way)
    {
	var n = $$('ul.sm').length;
	var e = {};
	// Prepares for hiding submenus down...
	if (way == 'in')
	{
	  for (var i = 0; i < n; i++)
	    e[i] = {'margin-top':585, 'height':45};
	}
	// .. or prepares  for displaying submenus up
	else
	{
	  for (var i = 0; i < n; i++)
	    e[i] = {'margin-top':217, 'height':412};
	}
	// Performs animation
	if (n > 0) this.mfx.start(e);
    },
    

    // Show detail tab...
    ShowDetailTab: function(d)
    {
	if (d.length)
	{
	  if (!$(this.detail))
	  {
	    var detail = new Element('div', {id:'detail'});
	    var content = new Element('div', {'class':'detail_content'});
	    var c = new Element('div', {styles:{'margin':4,'width':492}});
	    var img = new Element('img',{id:'detail_tab','class':'detail','src':Evonux.PIC_DIR +'/tab_detail_'+ Evonux.LANG +'.png'});
	    
	    detail.addEvent('click', this.SwitchTab.bind(this));
	    c.setHTML(d);
	    c.injectInside(content);
	    content.injectInside(detail);
	    img.injectInside(detail);
	    detail.setStyle('display','block');
	    detail.injectInside($(this.wrap));
	    Evonux.Dom.PngTransparency(false,'detail');
	    this.tab_fx = false;
	  }
	  else
	    $(this.detail).getElement('div.detail_content div').setHTML(d);
	}
    },

    HideDetailTab: function()
    {
	if ($(this.detail))
	{
	  var e = $(this.detail).getElement('.detail_content');
	  if (e.hasClass('open'))
	  {
	    this.tab_fx.start(0).chain(function () {
		$(evx_page.detail).remove();
	    });
	  }
	  else
	    $(this.detail).remove();
	}
	
    },

    SwitchTab: function()
    {
	var e = $(this.detail).getElement('.detail_content');
	if (!this.tab_fx)
	  this.tab_fx = $(this.detail).getElement('.detail_content').effect('width',{duration:400,transition:Fx.Transitions.Sine.easeOut, wait:true});
	if (e.hasClass('open'))
	    this.tab_fx.start(0);
	else
	    this.tab_fx.start(500);
	e.toggleClass('open');
    },

    ShowBgImg: function(src)
    {
	var bgimg;
	if (!$(this.bgimg))
	    {
		bgimg = new Element('div', {id:'bgimg'}).injectInside($(this.wrap));
		new Element('img',{'src':src}).injectInside(bgimg);
	    }
	else
	    {
		bgimg = $(this.bgimg);
		bgimg.empty();
		new Element('img',{'src':src}).injectInside(bgimg);
	    }
	Evonux.Dom.PngTransparency(false,'bgimg');
    },

    ContactFormSubmit: function()
    {
	if ($('contact'))
	  $('contact').send({'onSuccess':this.LoadComplete.bind(this)});
    }
});

var evx_page;

window.addEvent('domready', function () {evx_page = new Evonux.Page();});
//window.addEvent('resize', function () {evx_page.Resize();});
