var op = navigator.userAgent.indexOf("Opera") != -1;
var op8 = navigator.userAgent.indexOf("Opera 8")!=-1;
var ie = navigator.appName == "Microsoft Internet Explorer" &&  !op;
var ie6 = ie && navigator.appVersion.indexOf("MSIE 7")==-1;
var netscape = navigator.appName.substring(0,8) == "Netscape";
var NameFields, OriginFields, tbxValue, MainTitles, BeginRows = 0;
var MyHierarchy, MyHeadScrollable;
var posAbsolute;
var positionTop = 545;
var decalage, decalage2;

//http://css.alsacreations.com/Tutoriels-JavaScript/bonnes-pratiques-javascript#event
addLoadEvent(function()
{
    decalage = (op8 ? -80 : 460);
    decalage2 = (op8 ? -120 : 420);
    posAbsolute = GetScrollPos()>positionTop;
    cbxDried = lang == "FR" ? "produit sec" : "getrocknet";	
    H1Titles = document.getElementsByTagName("h1");
    MainTitles = getElementsByClassName(H1Titles, "title1");

    MyImgRight = document.getElementById("ImgRightCdr");
    MyImgRight.parentNode.removeChild(MyImgRight);
    document.body.appendChild(MyImgRight);

    MyHierarchy = document.getElementById("Hierarchy");
    MyHierarchy.parentNode.removeChild(MyHierarchy);
    document.body.appendChild(MyHierarchy);
    
    MyHeadScrollable = document.getElementById("HeadScrollable");
    
    if(ie6)
    {
        MyImgRight.style.position = "absolute";
        MyHierarchy.style.position = "absolute";
    }

    window.onresize = window_resized;
    window_resized();
    
  	window.onscroll = placeTop;
    placeTop();
    
    //préchargement des images
    ImgPreloader = document.createElement("div")
    ImgPreloader.setAttribute("id","ImgPreloader");
    ImgPreloader.style.position = "absolute";
    ImgPreloader.style.top = "-5000px";
    document.body.appendChild(ImgPreloader);
    
    //on doit passer par une variable "contenu" parce les commentaires sautent à chaque affectation de innerHTML
    var reg2=new RegExp("(.*?)(<!--)(.*?)(-->)(.*)", "g");    
	var reg1=new RegExp("(<!--_)(.*?)(-->)", "g");
    for(var i=0; i<H1Titles.length;i++)
	{   
	    contenu = H1Titles[i].innerHTML;
        contenu=contenu.replace(reg1,"<img class=\"hide2\" id=\"img_$2\" src=\"/Images/min.gif\" onclick=hideCategory(\"_$2\") />");	
 	    if(H1Titles[i].className=="title1")
 	    {
 	        var cat = new Category(H1Titles[i].id, "/Images/"+contenu.replace(reg2,"$3"));
            Categories.push(cat);
            img = document.createElement("img")
            img.setAttribute("src",cat.ImgName);
            ImgPreloader.appendChild(img);
        }
 	    H1Titles[i].innerHTML = contenu;
   }
    
    // Opera ne comprends pas la position absolue dans une position fixed.
    if(op8)
        document.getElementById("forOp8").style.position = "relative"; // ie n'aime pas cette position relative. On la met seulement pour Opera 8
    
    MyTables = getElementsByClassName(document.getElementsByTagName("table"), "Item");
    //pour ff : si toutes les lignes sont masqué puis réaffichés, les colonnes perdent leurs largeures, on en insère donc une toujours visible. 
    if(netscape && false)
    {
        BeginRows = 1;
        for(var i=0; i<MyTables.length;i++)
            getChildNodes(MyTables[i])[0].innerHTML = "<tr style=\"height:0\"><td class=\"Pictos\" style=\"border-color:white\"></td><td class=\"Name\" style=\"border-color:white\"></td><td class=\"Origin\" style=\"border-color:white\"></td><td class=\"Guaranty\" style=\"border-color:white\"></td><td class=\"ElementWeight\" style=\"border-color:white\"></td><td class=\"UnitPrice\" style=\"border-color:white\"></td><td class=\"UnitPriceMinQty\" style=\"border-color:white\"></td><td class=\"QuantityPrice\" style=\"border-color:white\"></td><td class=\"QuantityPriceMinQty\" style=\"border-color:white\"></td></tr>" + getChildNodes(MyTables[i])[0].innerHTML;    
    }
});

$(function()
{
    $("td.Pictos a, div.CategoryPictos a").each(
        function(){
            $(this).removeAttr("title");
            var id;
            switch($(this).attr("class"))
            {
                case('pictoInfo'):
                    id='ctl00_cphMain_textInfosdocs';
                    break;
                case('pictoNutri'):
                    id='ctl00_cphMain_textNutri';
                    break;
            }
            $(this).mousemove(function(event){ShowLabel(this,event||window.event,id,{margintop: 'center', width: '300'});});
        }
    );
});

function hideCategory(tag)
{
	ElmtToHide = document.getElementById(tag);
	if (ElmtToHide.style.display == 'none')
	{
		ElmtToHide.style.display = 'block';
		document.getElementById('img'+tag).src = '/Images/min.gif';
	}
	else
	{ 
		ElmtToHide.style.display = 'none';
		document.getElementById('img'+tag).src = '/Images/max.gif';
	}
}

var lastItem;
var H1Titles;
function placeTop() 
{
    if (ie6)
	{
		MyHeadScrollable.style.pixelTop=Math.max(GetScrollPos()-positionTop,0);
        MyHierarchy.style.pixelTop = GetScrollPos();
		MyImgRight.style.pixelTop= GetScrollPos() + 80;
	}	
	else
	{
	    if(GetScrollPos()>positionTop && posAbsolute)
	    {	        
	        MyHeadScrollable.style.position = 'fixed';
	        MyHeadScrollable.style.left = (document.body.clientWidth/2 - MyHeadScrollable.offsetWidth/2) - (netscape ? 1:0) + "px";
	        posAbsolute = false;
	    }    
	    if(GetScrollPos()<positionTop && !posAbsolute)
	    {
	        MyHeadScrollable.style.position = 'absolute';
	        MyHeadScrollable.style.left = -(netscape ? 1:0) + "px";
	        posAbsolute = true;	        
	    }
	}
	
    for(var i=0; i<H1Titles.length;i++)
        if(H1Titles[i].offsetTop>GetScrollPos()-decalage)
        {
            var newItem = document.getElementById("_" + H1Titles[i].id);
            if(lastItem)
                lastItem.style.border = "1px solid White";
            newItem.style.border = "1px solid #666";
            lastItem = newItem;
            break;
        }
    
    var lastTitle;
    for(var i=0; i<MainTitles.length;i++)
    {
        //+200 pour que la bonne image s'affiche quand on clique sur une rubrique de la hirrarchie
        if(MainTitles[i].offsetTop>GetScrollPos()-decalage+200)
        {
            MyImgRight.style.backgroundImage = lastTitle ? "url("+GetCategory(lastTitle.id)+")" : "none";
            break;
        }
        if(MainTitles[i].style.display != "none")
            lastTitle = MainTitles[i];
    }
  
    if(lastItem.offsetTop>MyHierarchy.offsetHeight + MyHierarchy.scrollTop -50)
        MyHierarchy.scrollTop += lastItem.offsetHeight;
    else if(lastItem.offsetTop<MyHierarchy.scrollTop +30)
        MyHierarchy.scrollTop -= lastItem.offsetHeight;
}

function GetScrollPos()
{
    return document.documentElement.scrollTop;
}

function GetMyHierarchyScrollPos()
{
    return MyHierarchy.scrollTop;
}

function Category(id, imgName)
{
    this.Id = id;
    this.ImgName = imgName;
}

var Categories =  new Array();

function GetCategory(id)
{
    for(var i=0; i<Categories.length;i++)
        if(Categories[i].Id == id)
            return Categories[i].ImgName;
}

var firstTime = true;

function window_resized()
{
    displayHierarchy();
    displayImgRight();
    if(!posAbsolute && !ie6)
        MyHeadScrollable.style.left = (document.body.clientWidth/2 - MyHeadScrollable.offsetWidth/2) - (netscape ? 1:0) + "px";
}

function displayImgRight()
{
    MyImgRight.style.display = "block";
    var posright = (document.body.clientWidth-800)/2 - MyImgRight.offsetWidth;
    MyImgRight.style.right = posright + "px";
    if(posright<0)
        MyImgRight.style.display = "none";  
}

function displayHierarchy()
{
    //correction pour ie6, sinon la hierrarchie dépasse du bas et on peut scroller à l'infini.
    MyHierarchy.style.height = (op ? window.innerHeight : (document.documentElement.clientHeight + 20)) - (ie6 ? 20 :0) + "px";
    MyHierarchy.style.display = "block";
    if(firstTime)
    {
        MyHierarchy.style.width = (MyHierarchy.offsetWidth + 20) + "px";
        firstTime = false;
    }
    if((document.body.clientWidth-800)/2< MyHierarchy.offsetWidth)
        MyHierarchy.style.display = "none";  
}

var finalPosition, startPosition, step;
function GotoItem(sender)
{
    var Item = document.getElementById(sender.id.substring(1));
    finalPosition =Item.offsetTop + decalage2;
    startPosition = Math.max(GetScrollPos(),positionTop);
    step = Math.floor(Math.abs(finalPosition - startPosition)/20);
    if(finalPosition> startPosition)
		ScrollTTB(startPosition);
	else
		ScrollBTT(startPosition);	
}

function ScrollTTB(i)
{
	i+=step;
	if(i<finalPosition)
	{
        scrollTo(0,i);
		setTimeout("ScrollTTB("+i+")",30);
	}
	else
    	scrollTo(0,finalPosition);
}

function ScrollBTT(i)
{
	i-=step;
	if(i>finalPosition)
	{
        scrollTo(0,i);
		setTimeout("ScrollBTT("+i+")",30);
	}
	else
    	scrollTo(0,finalPosition);
}


function getElementsByClassName(collection, classname)
{
    var elements = new Array();
    for(var i=0; i<collection.length;i++)
        if (collection[i].className == classname)
            elements[elements.length] = collection[i];
    return elements;
}
function getElementsByTagName2(collection, tagname)
{
    var elements = new Array();
    for(var i=0; i<collection.length;i++)
        if (collection[i].tagName.toLowerCase() == tagname)
            elements[elements.length] = collection[i];
    return elements;
}

function getNodesType1(collection)
{
    var elements = new Array();
    for(var i=0; i<collection.length;i++)
        if (collection[i].nodeType == 1)
            elements[elements.length] = collection[i];
    return elements;
}

//http://developer.mozilla.org/en/docs/Whitespace_in_the_DOM
function getChildNodes(node)
{
    var collection = node.childNodes;
    return !ie ? getNodesType1(collection) :collection;
}

// http://www.arraystudio.com/as-workshop/disable-form-submit-on-enter-keypress.html
function disableEnterKey(e)
{
    var key = window.event ? window.event.keyCode : e.which;
    return key != 13;
}

var instance_fonction = 0;

var cbxDriedChecked = false;
var cbxDried;
function cbxDried_click()
{
    cbxDriedChecked = document.getElementById("cbxDried").checked;
    instance_fonction++;
    tbxValue = document.getElementById("tbxSearch").value.toLowerCase();    
    CallLoop(instance_fonction,0);
    if(ie6)
        document.documentElement.scrollTop=positionTop;
}


function tbxSearch_keyup(sender)
{
    instance_fonction++;
    tbxValue = sender.value.toLowerCase();
    CallLoop(instance_fonction,0);
    //correction bug IE 6 : quand on se situe en bas et qu'on filtre, il faut remonter
    if(ie6)
        document.documentElement.scrollTop=positionTop;
}

function CallLoop(instance_en_cours, i)
{
    if(instance_en_cours!=instance_fonction)
        return;
    loop(MainTitles[i], false, "none");
    i++;
    if(i<MainTitles.length)
        setTimeout("CallLoop("+instance_en_cours+","+i+")",0);
    else
        placeTop();
}

function loop(title, foundInCategory, visibilityNoneOrVisibleIfParentVisible)
{
    //ff séléctionne un retour chariot comme neoud de type text, on séléctionne donc le prochain noeud de type balise. 
    var container = title.nextSibling;
    while(container.nodeType!=1)
	    container = container.nextSibling;
    var children = getChildNodes(container);
    var begin = 1;
    if(children[1].tagName.toLowerCase() == "table")
        begin = 2;
    //on parcours tous les titres
    for(var j=begin; j<children.length; j+=2)
    {
		if(GetContentToLower(children[j]).indexOf(tbxValue) !=-1 && visibilityNoneOrVisibleIfParentVisible == "none")
			visibilityNoneOrVisibleIfParentVisible = "";
		loop(children[j], foundInCategory || (!cbxDriedChecked && GetContentToLower(title).indexOf(tbxValue)!=-1), visibilityNoneOrVisibleIfParentVisible);
	}
    var hasVisibleRows = false;
    var hasVisibleTitles = false;
    if(begin == 2)
    {
        var node = children[1].childNodes[0];
        while(node.nodeType!=1)
            node = node.nextSibling;
        var rows = getChildNodes(node);
        // si ff, on ne prends pas la première car elle a été ajouté dynamiquement
        for(var k=BeginRows; k<rows.length;k++)
        {
            var row = rows[k];
            node = row.childNodes[1];
            while(node.nodeType!=1 || node.className!="Name")
                node = node.nextSibling;
            var NameField = GetContentToLower(node);
            if(NameField.indexOf("enpr")!=-1)
                node = node;
            node = node.nextSibling;
            while(node.nodeType!=1)
                node = node.nextSibling;
            var OriginIso = node.getAttribute("title").toLowerCase();
            var OriginField = GetContentToLower(node);
            if (!foundInCategory && 
                ((NameField.indexOf(tbxValue) == -1 && OriginIso.indexOf(tbxValue) == -1 && OriginField.indexOf(tbxValue) == -1)||
                    (cbxDriedChecked && NameField.indexOf(cbxDried) == -1)))
                row.style.display = visibilityNoneOrVisibleIfParentVisible;
            else
            {
                row.style.display = '';
                hasVisibleRows = true;
            }
        }
        if(hasVisibleRows || foundInCategory)
            children[1].style.display = '';                
        else
            children[1].style.display = 'none';
    }
    if(!hasVisibleRows)    
        for(var j=begin; j<children.length;j++)
        {
            var current = children[j];
            if(current.tagName.toLowerCase() == "h1" && current.style.display.toLowerCase() != 'none')
            {
                hasVisibleTitles = true;
                break;
            }
        }
    if(!hasVisibleTitles && !hasVisibleRows)
    {
        title.style.display = 'none';
        //on masque aussi les pictogramme de categorie
        node = title.nextSibling;
        while(node.nodeType!=1)
            node = node.nextSibling;
        node=node.childNodes[0];
        while(node.nodeType!=1)
            node = node.nextSibling;
        node.style.display = 'none'; 
        document.getElementById("_"+title.id).style.display = 'none';   
    }
    else
    {
        title.style.display = '';
        //on affiche aussi les pictogramme de categorie
        node = title.nextSibling;
        while(node.nodeType!=1)
            node = node.nextSibling;
        node=node.childNodes[0];
        while(node.nodeType!=1)
            node = node.nextSibling;
        node.style.display = '';        
        document.getElementById("_"+title.id).style.display = '';   
    }
}


function GetContentToLower(node)
{
    return (node.innerText || node.innerText=="" ? node.innerText : node.textContent).toLowerCase();
}


