/********************************************************/
/* @author Gillo Malpart                                */
/* Inspired from mootools.net                           */
/* This js file requires the mootools-1.2.4-core JS API */
/********************************************************/

// The general configuration of the visitor browser
var _visitorConfig = [];
// Default language is english
_visitorConfig.browserLanguage = _enLang;
_visitorConfig.isAppleDevice = Browser.Platform.ipod;

// The knob status
var _lastKnobStatus = _knobDown;

// The original zIndex of last element that was set to foreground (default is 2)
var _lastForegroundElement_zIndex = '2';


/* Generic utils */
function fadeIn()
{
  if($(arguments[0]) != null)
  {
   // Force the opacity to 0 (just in case)
   $(arguments[0]).setStyle('opacity','0');
   $(arguments[0]).setStyle('display','block');
   $(arguments[0]).set('tween', {duration: '500'});
   $(arguments[0]).tween('opacity', '0', '1');
  }
}

function fadeOut()
{
  hideDiv(arguments[0]);
}

function displayDiv()
{
  if($(arguments[0]) != null)
  {
    if(arguments[0].indexOf('content')>=0)
    {
      fadeIn(arguments[0]);
    }
    else
    {
      $(arguments[0]).setStyle('display','block');
      $(arguments[0]).setStyle('opacity','1');
    }
  }
}

function hideDiv()
{
  if($(arguments[0]) != null)
  {
    $(arguments[0]).setStyle('opacity','0');
    $(arguments[0]).setStyle('display','none');
  }
}

function go2Foreground(triggerElement,targetElement)
{
  if($(targetElement) != null)
  {
    _lastForegroundElement_zIndex =  $(targetElement).getStyle('z-index');
    $(targetElement).setStyle('z-index','99');
  }
}

function go2OriginalZIndex(triggerElement,targetElement)
{
  if($(targetElement) != null)
  {
    $(targetElement).setStyle('z-index',_lastForegroundElement_zIndex);
  }
  _lastForegroundElement_zIndex =  '2'; // Default is 2
}


function setCookie(c_name,value,domain,path,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
";domain="+domain+
";path="+path+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function getCookie(c_name,path)
{
  if (document.cookie.length>0)
  {
    var c_start=document.cookie.indexOf(c_name + "=");
    if (c_start!=-1)
    {
     c_start=c_start + c_name.length+1;
     c_end=document.cookie.indexOf(";",c_start);
     if (c_end==-1) c_end=document.cookie.length;
       return unescape(document.cookie.substring(c_start,c_end));
    }
  }
  return null;
}

/* UTILS FOR MENU */
function updateMenuOverlay(menu_div, name)
{
  var el = $(menu_div);
  var offset = 0;
  switch(name)
  {
    case _homeEntry:
         offset = -80;
         break;
    case _newsEntry:
         offset = -160;
         break;
    case _listenEntry:
         offset = -240;
         break;
    case _concertsEntry:
         offset = -320;
         break;
    case _thebandEntry:
         offset = -400;
         break;
    case _eshopEntry:
         offset = -480;
         break;
    case _mediaEntry:
         offset = -560;
         break;
    case _linksEntry:
         offset = -640;
         break;
    case _contactEntry:
         offset = -720;
         break;
    default:
      offset = 0;
  }
  el.setStyle('background-position','0'+' '+ offset);
}


/* UTILS FOR SCROLLING */
// The slider instance
var slider = "";

/* attach the slider once the dom is ready */
window.addEvent('domready', function(event){
    switchLanguage();
  // Initiate the slider for the central content
	var el = $(_centerContentDiv);
	var scrollPosition = 0;
	var updateScrollPosition = function(){
        var size = el.getStyle('height').toInt();

         var offset = 0-((size*scrollPosition)/100);
         el.setStyle('top', offset+'px');
	};

	$$(_sliderAdvancedDiv).each(function(el, i){
	    slider = new Slider(el, el.getElement('.knob'), {
			steps: 100,  // Steps from 0 to 100
			wheel: false, // Using the mousewheel is possible too
			mode: 'vertical'      ,
			onChange: function(){
				scrollPosition = this.step;
				// and update the output to the new value
				updateScrollPosition();
			}
		}).set(0);
	});



});


var slideEffectCenterDown = function()
{
   updateKnobRendering(_knobDown);
   if(arguments[0] == null)
   {
     slider.set(slider.step+1);
   }
   else
   {
     slider.set(slider.step+arguments[0]);
   }
}

var slideEffectCenterUp = function()
{
  updateKnobRendering(_knobUp);
  if(arguments[0] == null)
   {
     slider.set(slider.step-1);
   }
   else
   {
     slider.set(slider.step-arguments[0]);
   }
}

/* Attach the mouse listener */
document.addEvent('mousewheel', function(event) {
	event = new Event(event);

	/* Mousewheel UP */
	if (event.wheel > 0) {
          slideEffectCenterUp(1);
	}
	/* Mousewheel DOWN*/
	else if (event.wheel < 0) {
          slideEffectCenterDown(1);
	}
});

/* Attach the mouse listener FF only*/
document.addEvent('DOMMouseScroll', function(event) {
	event = new Event(event);

	/* Mousewheel UP */
	if (event.wheel > 0) {
          slideEffectCenterUp(1);
	}
	/* Mousewheel DOWN*/
	else if (event.wheel < 0) {
          slideEffectCenterDown(1);
	}
});


/* Attach the keyboard listener */
document.addEvent('keydown', function(event) {
	event = new Event(event);
	switch(event.key)
	{
         case 'up':
                  slideEffectCenterUp(1);
                  break;
         case 'down':
                  slideEffectCenterDown(1);
                  break;
         case '"':
                  slideEffectCenterDown(10);
                  break;
         case '!':
                  slideEffectCenterUp(10);
                  break;
        }
});

/*document.addEvent('keyup', function(event) {
  // Nothing to do
});
*/


/* The timer for slide effect of the central content */
var periodicalSlide;

var launchPeriodicalSlideDown = function()
{
  periodicalSlide = slideEffectCenterDown.periodical(200);
}

var launchPeriodicalSlideUp = function()
{
  periodicalSlide = slideEffectCenterUp.periodical(200);
}

var detachPeriodicalSlide = function()
{
    $clear(periodicalSlide);
}



/* Utils for the knob */
function updateKnobRendering(evt)
{
  switch(evt)
  {
    case 'down':
         if(_lastKnobStatus != _knobDownHover)
         {
            offset = 0;
            _lastKnobStatus = _knobDown;
         }
          break;
    case 'up':
         if(_lastKnobStatus != _knobUpHover)
         {
            offset = -29;
            _lastKnobStatus = _knobUp;
         }
         break;
    case 'hover':
         if(_lastKnobStatus == _knobDown)
         {
            offset = -58;
            _lastKnobStatus = _knobDownHover;
         }
         else if(_lastKnobStatus == _knobUp)
         {
            offset = -87;
            _lastKnobStatus = _knobUpHover;
         }
         break;
    case 'out':
        if(_lastKnobStatus == _knobDownHover)
         {
            offset = 0;
            _lastKnobStatus = _knobDown;
         }
         else if(_lastKnobStatus == _knobUpHover)
         {
            offset = -29;
            _lastKnobStatus = _knobUp;
         }
         break;
    default:
            offset = 0;
            _lastKnobStatus = _knobDown;
  }
   var el = $('knob');
   el.setStyle('background-position','0'+' '+ offset);
}


/* Utils for i18n management */

function switchLanguage()
{
  // Get the cookie for language
  var currentLanguage = getCookie(_soulmateLanguage);
  // If no argument has been passed, and the cookie already exists, don't need to write again the cookie...
  if((arguments[0] == null) && (currentLanguage != null))
  {
    // Nothing to do...
  }
  else
  {
    // Check if an argument has been passed to this method. If so, switch the language
    if(arguments[0] != null)
    {
      currentLanguage = arguments[0];
    }
    // If a language is not defined yet (no argument and no cookie), use the browser language
    if(currentLanguage == null)
    {
      currentLanguage = _visitorConfig.browserLanguage;
    }
    if((currentLanguage != _enLang) && (currentLanguage != _frLang))
    {
      currentLanguage = _enLang;
    }
    // Update or create the language cookie
    setCookie(_soulmateLanguage,currentLanguage,"www.soulmatemusic.fr","/");
  }
  loadNewLanguageContent();
}

function loadNewLanguageContent()
{
  var currentLanguage = Cookie.read(_soulmateLanguage);
  switch(currentLanguage)
  {
     case _frLang:
      // hide all EN divs,
      _enDivs.each(hideDiv);
      // Hide all news in english language
       var news = $(_centerContentDiv).getElements('div[class=*news_en]');
       if(news != null)
       {
         news.each(hideDiv);
       }
       // and display all FR divs
      _frDivs.each(displayDiv);
      // Display all news in french language
      news = $(_centerContentDiv).getElements('div[class=*news_fr]');
      if(news != null)
      {
        news.each(displayDiv);
      }

      break;
     case _enLang: // Default is english
     default:
        // hide all FR divs, and display all EN divs
        _frDivs.each(hideDiv);
         var news = $(_centerContentDiv).getElements('div[class=*news_fr]');
         if(news != null)
         {
          news.each(hideDiv);
          }

        _enDivs.each(displayDiv);
        // Display all news in english language
        news = $(_centerContentDiv).getElements('div[class=*news_en]');
        if(news != null)
        {
         news.each(displayDiv);
        }
  }

}

/**
 * DHTML email validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */

function email_check(str) {

		var at="@";
		var dot=".";
		var lat=str.indexOf(at);
		var lstr=str.length;
		var ldot=str.indexOf(dot);
		if (str.indexOf(at)==-1){
                   return false;
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
                   return false;
                }
		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
                   return false;
		}

		 if (str.indexOf(at,(lat+1))!=-1){
                   return false;
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
                   return false;
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		   return false;
		 }

		 if (str.indexOf(" ")!=-1){
		  return false;
		 }
		 return true;
	}

function validateEmailAddress(email_input){
         var inp = $(email_input);
	var emailID=$(email_input).getElement('.'+_email_input_form);
	if ((emailID.value==null)||(emailID.value=="") || (email_check(emailID.value)==false)){
		emailID.focus();
		// Display email address error
		$(email_input).getElement('.'+_email_syntax_error).setStyle('display','block');
		return;
        }
        else
        {
          // In case the error was already displayed, hide it
          $(email_input).getElement('.'+_email_syntax_error).setStyle('display','none');
        }
	// Perform email address registering
        var success = registerToNewsLetter(emailID.value);
        if(success)
        {
           // If ok, hide inputs and display success message
       	   emailID.value="";
       	   $(email_input).getElement('.'+_newsletter_register_title).setStyle('display','none');
       	   $(email_input).getElement('.'+_email_input_form).setStyle('display','none');
           $(email_input).getElement('.'+_newsletter_register_button).setStyle('display','none');
           $(email_input).getElement('.'+_newsletter_register_error).setStyle('display','none');
           $(email_input).getElement('.'+_email_syntax_error).setStyle('display','none');
           $(email_input).getElement('.'+_newsletter_register_ok).setStyle('display','block');
        }
        else
        {
	  // If not ok, display generic error
	  $(email_input).getElement('.'+_newsletter_register_error).setStyle('display','block');
         }

	return;
}

function registerToNewsLetter(email_address)
{
  var registerRequest = new Request({ url: _website_url + '/global/newsletter_registration.php', async: false , method: 'get'});
  registerRequest.send('email='+email_address);
  return true;
}

 var last_selected_left_item_fr = 'left_item_fr_0';
 function select_left_fr()
 {
   // hide the old selected item
   var selected_item_content = last_selected_left_item_fr + '_content';
   var selected_item_right_content = last_selected_left_item_fr + '_right_content';
   $(last_selected_left_item_fr).removeClass('left_menu_item_selected');
   $(selected_item_content).removeClass('left_item_content_selected');
   if($(selected_item_right_content) != null)
   {
      $(selected_item_right_content).removeClass('left_item_right_content_selected');
   }

   // display the new one
   last_selected_left_item_fr = arguments[0];
   selected_item_content = last_selected_left_item_fr + '_content';
   selected_item_right_content = last_selected_left_item_fr + '_right_content';
   $(last_selected_left_item_fr).addClass('left_menu_item_selected');
   $(selected_item_content).addClass('left_item_content_selected');
   if($(selected_item_right_content) != null)
   {
      $(selected_item_right_content).addClass('left_item_right_content_selected');
   }
  }
  
 var last_selected_left_item_en = 'left_item_en_0';
 function select_left_en()
 {
   // hide the old selected item
   var selected_item_content = last_selected_left_item_en + '_content';
   var selected_item_right_content = last_selected_left_item_en + '_right_content';
   $(last_selected_left_item_en).removeClass('left_menu_item_selected');
   $(selected_item_content).removeClass('left_item_content_selected');
    if($(selected_item_right_content) != null)
   {
      $(selected_item_right_content).removeClass('left_item_right_content_selected');
   }

   // display the new one
   last_selected_left_item_en = arguments[0];
   selected_item_content = last_selected_left_item_en + '_content';
   selected_item_right_content = last_selected_left_item_en + '_right_content';
   $(last_selected_left_item_en).addClass('left_menu_item_selected');
   $(selected_item_content).addClass('left_item_content_selected');
   if($(selected_item_right_content) != null)
   {
      $(selected_item_right_content).addClass('left_item_right_content_selected');
   }
  }
  

  
  function open_lyrics_window(url,lyrics)
  {
    lyrics_window = window.open(url,lyrics,'height=700,width=850,location=no,scrollbars=yes');
    if(window.focus)
    {
      lyrics_window.focus();
    }
  }