if(window.YAHOO) {
  var windowHeight = YAHOO.util.Dom.getViewportHeight;
  var windowWidth =  YAHOO.util.Dom.getViewportWidth;
  var cookieYUI = YAHOO.util.Cookie;
  var $ = YAHOO.util.Dom.get;
  var $$ = YAHOO.util.Selector.query;
}

var $lambda = function (value){
  return (typeof value == 'function') ? value : function(){
    return value;
  };
};

var $E = function() {
  var results = [];
    var args = Array.prototype.slice.call(arguments);

    args.forEach(function(selector) {
    results = results.concat($$(selector));
  });

  return results;
};

String.prototype.supplant = function (o) {
    return this.replace(/{([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
};

String.prototype.capitalize = function() {
  return this.replace(/\b[a-z]/g, function(match){
    return match.toUpperCase();
  });
};

String.prototype.toInt = function(base) {
  return parseInt(this, base || 10);
};

Function.prototype.bind = function(bind, arguments) {
  var self = this;

  return function() {
    self.apply(bind, arguments);
  }
};

if (!Array.prototype.forEach) {
  Array.prototype.forEach = function(fn, bind) {
    for (var i = 0, l = this.length; i < l; i++){
      if(i in this) { fn.call(bind, this[i], i, this);}
    }
  };
}

if (!Array.prototype.map) {
  Array.prototype.map = function(fn, bind) {
    var results = [];
    for (var i = 0, l = this.length; i < l; i++) {
      if(i in this) { results[i] = fn.call(bind, this[i], i, this);}
    }
    return results;
  };
}

if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(elt /*, from*/) {
      var len = this.length >>> 0;
      var from = Number(arguments[1]) || 0;

      from = (from < 0) ? Math.ceil(from) : Math.floor(from);
      if (from < 0) from += len;

      for (; from < len; from++) {
          if (from in this && this[from] === elt) return from;
      }
      return -1;
  };
}

if (!Array.prototype.filter) {
  Array.prototype.filter = function(fun /*, thisp*/){
      var len = this.length >>> 0;
    if (typeof fun != "function") throw new TypeError();

    var res = new Array();
    var thisp = arguments[1];
    for (var i = 0; i < len; i++) {
      if (i in this) {
        var val = this[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, this)) res.push(val);
      }
    }
      return res;
  };
}

function modal(id, params)
{
  var self = this;
  this.id = id;
  this.params = params || {};
  this.url = document.getElementById(this.id).href;

  /* récupère le contenu à afficher */
  this.init = function()
  {
    var request = YAHOO.util.Connect.asyncRequest('GET', this.url, { success : this.show } );
  }

  this.show = function(o)
  {
    if(o.responseText !== undefined)
    {
      self.content = o.responseText;
      self.modal = new YAHOO.widget.Panel(self.id + "_modal",
             {
               width : self.params.width + "px",
              height : self.params.height + "px",
              fixedcenter : true,
               constraintoviewport : true,
              underlay : "none",
              close : false,
              visible : true,
              draggable : false,
              modal : true,
              zindex : 1000
             } );
    }
    self.modal.setBody(self.content);
    self.modal.render(document.body);

    self.close_link = YAHOO.util.Selector.query('#' + self.id + '_modal a.ModalClose');

    YAHOO.util.Event.addListener(self.close_link, "click", self.hide);
  }
  this.hide = function()
  {
    self.modal.hide();
  }
  this.init();
}

function openModal(id,width,height)
{
  new modal(id, {width:width, height:height});
}


// JavaScript Document
var isIE=navigator.appName.indexOf("Explorer")!=-1;
var isNN6=!document.all && document.getElementById;
var isNN4=!isIE && !isNN6;
var browser=navigator.appName;
var b_version=navigator.appVersion;
var navig_version=parseFloat(b_version);
var nbrFilters=4;


function initGenLoader(){
  var myHeight = windowHeight();
  var loaderheight = YAHOO.util.Dom.getStyle($('genloader'), 'height').toInt();
  document.getElementById("genloader_shadow").style.height=YAHOO.util.Dom.getDocumentHeight() + "px";
  document.getElementById("genloader").style.top = YAHOO.util.Dom.getViewportHeight() / 2 + loaderheight + "px";
}

function displayGenLoader(){
  if(document.getElementById("genloader") && document.getElementById("genloader_shadow")) {
    document.getElementById("genloader").style.display ='block';
    document.getElementById("genloader_shadow").style.display ='block';
  }
}

function hideGenLoader(){
  if(document.getElementById("genloader") && document.getElementById("genloader_shadow")) {
    document.getElementById("genloader").style.display ='none';
    document.getElementById("genloader_shadow").style.display ='none';
  }
}

/**
 * Recuperer la position de l'objet passé en paramètre
 * @param {Object} obj : objet passé en paramètre
 */
function findPos(obj){
   var curleft = curtop = 0;
   if (obj && obj.offsetParent){
       curleft = obj.offsetLeft;
       curtop = obj.offsetTop;
       while (obj = obj.offsetParent){
     curleft += obj.offsetLeft;
     curtop += obj.offsetTop;
       }
   }
   return [curleft,curtop];
}
/**
 *  Positionnner un objet par rapport a un autre
 *  @param {Object} parent_id : id du conteneur
 *  @param {Object} child_id : id du contenu
 *  @param {Integer} pas obligatoire: longueur ajoutée sur le paramètre top
 *  @param {Integer} pas obligatoire: longueur ajoutée sur le paramètre left
 */
function positionBox(parent_id,child_id,more_top,more_left){
  if( more_top == null || more_top == '')
    more_top =0;
  if( more_left == null || more_left == '')
    more_left =0;
  if( ($(parent_id) != null) && ($(child_id) != null)) {
      var parent_id1 = document.getElementById(parent_id);
      var pos1 = findPos(parent_id1);
    $(child_id).style.top = ( pos1[1]+ more_top )+ "px";
       $(child_id).style.left = (pos1[0]+ more_left) + "px";
    $(child_id).style.display= 'block';
  }
  return true;

}
function openPopup(URL,winName,width_pop,height_pop,scroll)
{
  var top_pop, left_pop;
  var b_version1=navigator.appVersion;
  var navig_version1=b_version1.indexOf("MSIE 6.0");

  if(navigator.appName=="Microsoft Internet Explorer") {
    top_pop = window.screenTop;
    left_pop = window.screenLeft;
  } else {
    top_pop = window.screenY;
    left_pop = window.screenX;
  }
  if(scroll=='') scroll ='no';

  top_pop = top_pop + (windowHeight() - height_pop) / 2;
  left_pop = left_pop + (windowWidth() - width_pop) / 2;
  window.open(URL,winName,'toolbar=no ,resizable=yes,directories=no, location=no, width='+width_pop+', height='+height_pop+', top='+top_pop+ ', left='+left_pop+ ',status=no, scrollbars='+scroll+', menubar=no');
}

/**
 * fonction qui cache ou montre un bloc
 * @param {Object} idElement
 * @param (Object) displ : pour savoir si on met l'élément inline ou block
 */
function cacheBlock(id) {
  var el = $(id);
  if(el){
    el.style.display = (el.style.display == 'block' ? 'none' : 'block' );
    return true;
  }
}

/**
 * @param {String} targ
 * @param {String} selObj
 * @param {String} restore
 */
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}


/**
 * @name FilterManager
 */

var FilterManager = function(conditions) {
  this.conditions = conditions || [];
};

FilterManager.prototype.add_condition = function(condition) {
  this.conditions.push(condition);
  return this.sort_conditions();
};

FilterManager.prototype.sort_conditions = function() {
  return this.conditions
  .sort(function(a, b){
    return a.priority > b.priority;
  })
  .filter(function(condition){
    return condition.expression() === true;
  });
};

FilterManager.prototype.run_condition = function() {
  this.sort_conditions();
  return this.sort_conditions()[0].value();
};

function initCookies(){
  if(!cookieYUI)
    cookieYUI=YAHOO.util.Cookie;
  if(cookieYUI.getSub("EuropagesCook","Filter")!=null)
      cookieYUI.removeSub("EuropagesCook","Filter");
}

function updateFilterCookie(filter_id){
  cookieYUI.setSub("Europages", "FilterID", filter_id, {path : '/', domain : location.hostname.split(/\.(.*)/)[1]});
}


/*Envoie du form nameForm et mise à jour du cookie via num (utiliser dans la pagination et Filter )
@param {string}: nameForm
TODO update this
*/
function submitSearchForm(nameForm, mode){
  displayGenLoader();

  if(mode)
    updateFilterCookie(mode)
  else
    cookieYUI.removeSub("Europages","FilterID")

  document.forms[nameForm].submit();
}
/*Si submit valide, appel de submitSearchForm
@param {String} id de l'input
@param {String} event.keyCode
*/
function validSearchForm(id,keycode){
   if(keycode=='13' && document.getElementById(id).value!=''){
     if(id.indexOf("querystring")!=-1)
       submitSearchForm(document.getElementById(id).form.name, "by_type");
     else
       submitSearchForm(document.getElementById(id).form.name, null);
   }
  return false;
}

function initFilters(){
  $$('a.keyword').forEach(function(element){
    YAHOO.util.Event.on(element, 'click', function(){
      updateFilterCookie('by_type');
    });
  });

  $$('.yui-accordion-toggle').forEach(function(element) {
    YAHOO.util.Event.on(element, 'click', function(){
      YAHOO.util.Dom.removeClass($('filtersform'), 'unfolded');
    });
  });

  YAHOO.util.Event.on($('less_choices'), 'click', function(){
    YAHOO.util.Dom.removeClass($('filtersform'), 'unfolded');
  });

  YAHOO.util.Event.on($('more_choices'), 'click', function(){
    YAHOO.util.Dom.addClass($('filtersform'), 'unfolded');
  });

  var filter_id = cookieYUI.getSub("Europages","FilterID");
  var manager = new FilterManager([
    {
      'expression' : $lambda($E('.by_type')[0] == null),
      'value' : $lambda('by_country'),
      'priority' : 1,
      'description' : 'Type filter does not exists so open the country filter'
    },
    {
      'expression' : $lambda($E('.by_type')[0] != null),
      'value' : $lambda('by_type'),
      'priority' : 1,
      'description' : 'Type filter exists so open it'
    },
    {
      'expression' : $lambda(!Europages.international_query),
      'value' : $lambda('by_country'),
      'priority' : 0,
      'description' : 'An national query was done so open the country filter'
    }
  ]);

  if(!Europages.international_query || filter_id == null || $E('.by_type')[0] == null) {
    updateFilterCookie(manager.run_condition());
  }
}

function attachBusinessSectorEvents() {
  if( $('content_report2') && $('link_report1') ){
    YAHOO.util.Event.addListener($('link_report1'), "click", function(){
      $('content_report2').style.display='block';$('link_report1').style.display='none';
    });
    YAHOO.util.Event.addListener($('link_report2'), "click",  function(){
      $('content_report2').style.display='none';$('link_report1').style.display='block';
    });
  }
}

function onloadCommon() {
  initGenLoader();
  YAHOO.util.Event.on(window, 'resize', initGenLoader);
  YAHOO.util.Event.on(window, 'submit', displayGenLoader);

}

function onloadBusinessSector() {
  onloadCommon();
  attachBusinessSectorEvents();
  onloadFooter();
}

function onloadSearchPage(){
	onloadCommon();
	if($('filtersform')){initFilters();}
	if($('block_unit6') && $('box_unit6')) {positionBox('block_unit6','box_unit6');}
}

// carousel module edito
var TINY={};

function T$(i){return document.getElementById(i)}
function T$$(e,p){return p.getElementsByTagName(e)}

TINY.slider=function(){
    function slide(n,p){this.n=n; this.init(p)}
    slide.prototype.init=function(p){
        var s=T$(p.id), u=this.u=T$$('ul',s)[0], c=T$$('li',u), l=c.length, i=this.l=this.c=0;
        if(p.navid&&p.activeclass){this.g=T$$('li',T$(p.navid)); this.s=p.activeclass}
        this.a=p.auto||0; this.p=p.resume||0; this.v=p.vertical||0; s.style.overflow='hidden';
        for(i;i<l;i++){if(c[i].parentNode==u){this.l++}}
        if(this.v){;
            u.style.top=0; this.h=p.height||c[0].offsetHeight; u.style.height=(this.l*this.h)+'px'
        }else{
            u.style.left=0; this.w=p.width||c[0].offsetWidth; u.style.width=(this.l*this.w)+'px'
        }
        this.pos(p.position||0,this.a?1:0)
    },
    slide.prototype.auto=function(){
        this.u.ai=setInterval(new Function(this.n+'.move(1,1)'),this.a*1000)
    },
    slide.prototype.move=function(d,a){
        var n=this.c+d, i=d==1?n==this.l?0:n:n<0?this.l-1:n; this.pos(i,a)
    },
    slide.prototype.pos=function(p,a){
        clearInterval(this.u.ai); clearInterval(this.u.si);
        var o=this.v?parseInt(this.u.style.top):parseInt(this.u.style.left),
        t=this.v?p*this.h:p*this.w, d=t>Math.abs(o)?1:-1; t=t*-1; this.c=p;
        if(this.g){for(var i=0;i<this.l;i++){this.g[i].className=i==p?this.s:''}}
        this.u.si=setInterval(new Function(this.n+'.slide('+t+','+d+','+a+')'),20)
    },
    slide.prototype.slide=function(t,d,a){
        var o=this.v?parseInt(this.u.style.top):parseInt(this.u.style.left);
        if(o==t){
            clearInterval(this.u.si); if(a||(this.a&&this.p)){this.auto()}
        }else{
            var v=o-Math.ceil(Math.abs(t-o)*.15)*d+'px';
            this.v?this.u.style.top=v:this.u.style.left=v
        }
    };
    return{slide:slide}
}();

// recently added bloc homepage
var SLIDETIMER = 3;
var SLIDESPEED = 4;
var SCROLLTIMER = 3;
var SCROLLSPEED = 7;
var STARTINGOPACITY = 70;

// handles section to section scrolling of the content //
function slideContent(id,prefix,timer) {
  var div = document.getElementById(id);
  var slider = div.parentNode;
  clearInterval(slider.timer);
  slider.section = parseInt(id.replace(/\D/g,''));
  slider.target = div.offsetTop;
  slider.style.top = slider.style.top || '0px';
  slider.current = slider.style.top.replace('px','');
  slider.direction = (Math.abs(slider.current) > slider.target) ? 1 : -1;
  slider.style.opacity = STARTINGOPACITY * .01;
  slider.style.filter = 'alpha(opacity=' + STARTINGOPACITY + ')';
  slider.timer = setInterval( function() { slideAnimate(slider,prefix,timer) }, SLIDETIMER);
}

function slideAnimate(slider,prefix,timer) {
  var curr = Math.abs(slider.current);
  var tar = Math.abs(slider.target);
  var dir = slider.direction;
  if((tar - curr <= SLIDESPEED && dir == -1) || (curr - tar <= SLIDESPEED && dir == 1)) {
    slider.style.top = (slider.target * -1) + 'px';
	slider.style.opacity = 1;
	slider.style.filter = 'alpha(opacity=100)';
    clearInterval(slider.timer);
	if(slider.autoscroll) {
	  setTimeout( function() { autoScroll(slider.id,prefix,timer) }, timer * 1000);
	}
  } else {
	var pos = (dir == 1) ? parseInt(slider.current) + SLIDESPEED : slider.current - SLIDESPEED;
    slider.current = pos;
    slider.style.top = pos + 'px';
  }
}

// handles manual scrolling of the content //
function scrollContent(id,dir) {
  var div = document.getElementById(id);
  clearInterval(div.timer);
  var sections = div.getElementsByTagName('div');
  var length = sections.length;
  var limit;
  if(dir == -1) {
    limit = 0;
  } else {
    if(length > 1) {
      limit = sections[length-1].offsetTop;
    } else {
      limit = sections[length-1].offsetHeight - div.parentNode.offsetHeight + 20;
    }
  }
  div.style.opacity = STARTINGOPACITY * .01;
  div.style.filter = 'alpha(opacity=' + STARTINGOPACITY + ')';
  div.timer = setInterval( function() { scrollAnimate(div,dir,limit) }, SCROLLTIMER);
}

function scrollAnimate(div,dir,limit) {
  div.style.top = div.style.top || '0px';
  var top = div.style.top.replace('px','');
  if(dir == 1) {
	if(limit - Math.abs(top) <= SCROLLSPEED) {
	  cancelScroll(div.id);
	  div.style.top = '-' + limit + 'px';
	} else {
	  div.style.top = top - SCROLLSPEED + 'px';
	}
  } else {
	if(Math.abs(top) - limit <= SCROLLSPEED) {
	  cancelScroll(div.id);
	  div.style.top = limit + 'px';
	} else {
	  div.style.top = parseInt(top) + SCROLLSPEED + 'px';
	}
  }
}

// cancel the scrolling on mouseout //
function cancelScroll(id) {
  var div = document.getElementById(id);
  div.style.opacity = 1;
  div.style.filter = 'alpha(opacity=100)';
  clearTimeout(div.timer);
}

// initiate auto scrolling //
function autoScroll(id,prefix,timer,restart) {
  var div = document.getElementById(id);
  div.autoscroll = (!div.autoscroll && !restart) ? false : true;
  if(div.autoscroll) {
    var sections = div.getElementsByTagName('div');
    var length = sections.length;
    div.section = (div.section && div.section < length) ? div.section + 1 : 1;
    slideContent(prefix + '-' + div.section,prefix,timer);
  }
}

// cancel automatic scrolling //
function cancelAutoScroll(id) {
  var div = document.getElementById(id);
  div.autoscroll = false;
}

function checkInputDomainHeadingsList(){
	var nbrNodes =  $$("input[class=check]").length;
	var compteur=0;
	for(curNodes=0;curNodes<nbrNodes;curNodes++){
		if($$("input[class=check]")[curNodes].checked){
			compteur++;
			curNodes=nbrNodes;
		}
	}
	if(document.getElementById("button_find")){
    	if(compteur>0){
    		document.getElementById("button_find").style.display = "block";
    	}else{
    		document.getElementById("button_find").style.display = "none";
    	}
	}
}
