//on page load (as soon as its ready) call ToolTip_init
$(document).ready(ToolTip_init);

function ToolTip_init(){

  $("a.sToolTip")
    .hover(function(){sToolTipshow(this.href,this.id,this.name,this,"div","sToolTip_content");addReflections();},function(){$('#sToolTip').hide()})
    //.click(function(){document.location = this.href;return false})
    ;  
}

function sToolTipshow(url,linkId,title,oElm,strTagName, strClassName){
  //oElm : lien survol� (�l�ment <a>)
  
  if(title == false)title="&nbsp;";
  
  //oElm2 : <span class="sToolTip_content"> devant suivre le <a>
  var oElm2;
  //Cas particulier selon le navigateur
  if(oElm.nextSibling.nodeType == 3){
    oElm2 =  oElm.nextSibling.nextSibling;
  }else if (oElm.nextSibling.nodeType == 1){
    oElm2 = oElm.nextSibling;
  }  
  
  oElm2=document.getElementById(strClassName+'_'+linkId);
  
  //oElm1 : image principale
  var oElm1 = null;
  if(getElementsByClassName(oElm,"img","reflected").length == 1){
  	//<img class="reflected">
    oElm1 = getElementsByClassName(oElm,"img","reflected")[0];
  }else if(getElementsByClassName(oElm,"img","").length == 1){
  	//<img class="">
    oElm1 = getElementsByClassName(oElm,"img","")[0];
  }else if(oElm.getElementsByTagName('img').length > 0) {
  	//<img>
  	oElm1 = oElm.getElementsByTagName('img')[0];	
  }else {
  	//<a> tout seul
  	oElm1 = oElm;
  }
  
  var clickElementy =  getAbsoluteTop(linkId); //set y position
  var clickElementx =  getAbsoluteLeft(oElm1); //set x position
  
  //alert("Lien = " + getAbsoluteLeft(oElm) + "\nImage = " + getAbsoluteLeft(oElm1));
  
  var delta_y = 10;

  var mid = Math.round(oElm1.offsetWidth/2); // moiti� de la longueur de l'image
  //alert(oElm1.offsetWidth + " /2 = "+ mid);
  clickElementx += mid;

  var re = new RegExp("reflected");
  //Cas particulier reflected : Soit on d�tecte la classe, soit on d�tecte la structure (<div><img /><canvas /></div>) si la classe a �t� remplac�e (fade/nofade)
  if((oElm1.className.match(re) || oElm1.parentNode.tagName.toLowerCase() == 'div') && navigator.appName != 'Microsoft Internet Explorer') {
    clickElementy += oElm1.height - delta_y ; //set y position
    //clickElementx -= 68; //set x position - distance 0 -> v
  }

	//Remplacement du contenu de la div flottante par le contenu du <span class="sToolTip_content">
  var innerOld = $('#sToolTip')[0].innerHTML;
  $('#sToolTip')[0].innerHTML = oElm2.innerHTML;
  $('#sToolTip').addClass(strClassName);
  $('#sToolTip').show();

  clickElementy -= getElementHeight('sToolTip') + oElm1.offsetHeight - delta_y; //set y position

  clickElementx -= getElementWidth('sToolTip')/2
 	clickElementx += 5; //set x position - distance 0 -> v
  //clickElementx -= 63; //set x position - distance 0 -> v
  
  
  if (navigator.appName == 'Microsoft Internet Explorer') {
    clickElementy += oElm1.offsetHeight - delta_y; //set y position
    //clickElementx -= 20 ; //set x position
  }
  
  if (navigator.appName == 'Netscape') {
	if (linkId.match('sTooltip_brand_most_rated')) {
		clickElementy = clickElementy + oElm1.offsetHeight - delta_y;
	}
  }
  
  $('#sToolTip').css({left: clickElementx+"px", top: clickElementy+"px"}); 
  
  //Reflexion � l'affichage de la tooltip [belor]
  //Reflection.add($('#sToolTip img')[0]);
}

// GETELEMENTSBYCLASSNAME
function getElementsByClassName(oElm, strTagName, strClassName){
  var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
  var arrReturnElements = new Array();
  strClassName = strClassName.replace(/\-/g, "\\-");
  var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
  var oElement;
  for(var i=0; i<arrElements.length; i++){
    oElement = arrElements[i];      
    if(oRegExp.test(oElement.className)){
      arrReturnElements.push(oElement);
    }   
  }
  return (arrReturnElements)
}
// FIN GETELEMENTSBYCLASSNAME 

function getElementWidth(objectId) {
  w = document.getElementById(objectId);
  return w.offsetWidth;
}

function getElementHeight(objectId) {
  h = document.getElementById(objectId);
  return h.offsetHeight;
}

function getAbsoluteLeft(object) {
  // Get an object left position from the upper left viewport corner
  o = object;
  oLeft = o.offsetLeft;            // Get left position from the parent object
  while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element
    oParent = o.offsetParent    // Get parent object reference
    oLeft += oParent.offsetLeft // Add parent left position
    o = oParent
  }
  return oLeft
}

function getAbsoluteTop(objectId) {
  // Get an object top position from the upper left viewport corner
  o = document.getElementById(objectId)
  oTop = o.offsetTop            // Get top position from the parent object
  while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
    oParent = o.offsetParent  // Get parent object reference
    oTop += oParent.offsetTop // Add parent top position
    o = oParent
  }
  return oTop
}

function parseQuery ( query ) {
   
   var Params = new Object ();
   if ( ! query ) return Params; // return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) continue;
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;  
   }
   return Params;  
}

function addReflectionsToolTip(objectId) {  
  var oElm = document.getElementById(objectId);
  var rimages = getElementsByClassName(oElm,'img','reflectTip');
  for (i=0;i<rimages.length;i++) {
    var rheight = null;
    var ropacity = null;
    
    var classes = rimages[i].className.split(' ');
    for (j=0;j<classes.length;j++) {
      if (classes[j].indexOf("rheight") == 0) {
        var rheight = classes[j].substring(7)/100;
      } else if (classes[j].indexOf("ropacity") == 0) {
        var ropacity = classes[j].substring(8)/100;
      }
    }
    Reflection.add(rimages[i], { height: rheight, opacity : ropacity});
  }

}
