/*

Copyright Justin Whitford 2006.

  http://www.whitford.id.au/

Perpetual, non-exclusive license to use this code is granted

on the condition that this notice is left in tact.

*/



if (!Array.prototype.indexOf)

{

  Array.prototype.indexOf = function(elt /*, from*/)

  {

    var len = this.length;



    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;

  };

}



var delim = '»';

var trailLength = 6;

var chunks;

var DAY = 24 * 60 * 60 * 1000;

var position = 0;

var repeat = false;



function doCrumbs(){

  if(cookieTest('xxx')){

    crumbList = new CrumbList();

    if(getCookie('foundItems')){

      var foundItemsMem=getCookie('foundItems').split(delim);

    }

    if(getCookie('repeat')){

      repeat=getCookie('repeat');

      if(repeat=="true"){

        repeat=true;

      }else{

        repeat=false;

        setCookie('repeat',repeat,1);

      }

    }

    if(getCookie('trailLinks')){

      var staleLinkCrumbs = getCookie('trailLinks').split(delim);

      var staleTextCrumbs = getCookie('trailText').split(delim);

      for(i=0	;i<staleLinkCrumbs.length;i++){

        crumbList.add(staleLinkCrumbs[i],staleTextCrumbs[i]);

      }

    }

    crumbList.add(document.location,document.title);

    if(crumbList.text[crumbList.text.length-1]=="Home"){

      for(i=crumbList.links.length;i!=1;i--){

        crumbList.remove();

      }

    } 

    var foundItems = [];

    var index = crumbList.text.indexOf(crumbList.text[crumbList.text.length-1]);

    if(repeat==true){

      while (index != -1)

      {

      foundItems.push(index);

      index = crumbList.text.indexOf(crumbList.text[crumbList.text.length-1], ++index);

      }

    }

    if(foundItems.length > 1){

      repeat=false;

    }

    if(repeat==true){

     if (foundItemsMem!=null){

       if(foundItemsMem[0]!=0){

         for(i=0;i<foundItemsMem.length;i++){

         j=crumbList.links.indexOf(foundItemsMem[i]);

         if(j!=-1){

           crumbList.links.splice(j,1);

           crumbList.text.splice(j,1);

         }

        }

       }

     }

    setCookie('trailLinks',crumbList.links.join(delim),1);

    setCookie('trailText',crumbList.text.join(delim),1);

    repeat=false;

    }

    foundItems = [];

    index = crumbList.text.indexOf(crumbList.text[crumbList.text.length-1])

    while (index != -1)

    {

      foundItems.push(index);

      index = crumbList.text.indexOf(crumbList.text[crumbList.text.length-1], ++index);

    }

    if(foundItems.length > 1){

      crumbList.text.pop();

      crumbList.links.pop();

      position = foundItems[0];

      repeat = true;

      var tempArray= [];

      if(position+1<crumbList.links.length){

        for(i=position+1;i<crumbList.links.length;i++){

          tempArray.push(crumbList.links[i]);

        }

      setCookie('foundItems',tempArray.join(delim),1);

      }else{

        tempArray[0]=-1

      setCookie('foundItems',tempArray,1);

      }

    }

    else{

       position = crumbList.links.length - 1;

       var pos = true;

    }

   if(crumbList.links.length>trailLength){

     crumbList.links.shift();

     crumbList.text.shift();

     position=crumbList.links.length -1;

   }

   setCookie('trailLinks',crumbList.links.join(delim),1);

   setCookie('trailText',crumbList.text.join(delim),1);

   setCookie('repeat',repeat,1);

   crumbList.output();

  }

}





function CrumbList(){

  this.links=new Array();

  this.text=new Array();

  this.add = crumbListAdd;

  this.output = crumbListShow;

  this.remove = crumbListRemove;

}

  function crumbListAdd(href,text){

    this.links[this.links.length]=href;

    this.text[this.text.length]=text;

  }

  function crumbListRemove(){

    this.links.shift();

    this.text.shift();

    repeat=false;

  }

  function crumbListShow(){

    for(i=0;i<this.links.length;i++){

      if(i==position){

        document.write( ((i==0)?"":" » ") + this.text[i] );

      }else{

        document.write(

          ((i==0)?"":" » ")

          +"<a href='" + this.links[i] + "'>"

          + this.text[i] + "</a>"

        );

      }

    }

  }





function getCookie(name) {

  var returnVal = null;

    for(i=0;i<chunks.length;i++){

    var chunk = chunks[i].split("=");

    returnVal = (chunk[0] == name)

      ?unescape(chunk[1])

      :returnVal;

  }

  return returnVal;

}



function setCookie(name, value, days) {

  if (value != null && value != "" && days > 0){

    var expiry=

      new Date(new Date().getTime() + days * DAY);

    document.cookie=

      name +"="+ escape(value) +"; expires="

      + expiry.toGMTString();

    chunks = document.cookie.split("; ");

  }

}



function cookieTest(name){

  try{

    setCookie(name,'true',1);

    chunks = document.cookie.split("; ");

    return (getCookie(name)=='true');

  }catch(e){

    return false;

  }

}

