var gradualFader={}

gradualFader.baseopacity=0.8 //set base opacity when mouse isn't over element (decimal below 1)
gradualFader.increment=0.08 //amount of opacity to increase after each iteration (suggestion: 0.04 or greater)
gradualFader.baseopacityy=0;

document.write('<style type="text/css">\n') //write out CSS to enable opacity on "gradualfader" class
document.write('.gradualfader{filter:progid:DXImageTransform.Microsoft.alpha(opacity='+gradualFader.baseopacity*100+'); -moz-opacity:'+gradualFader.baseopacity+'; opacity:'+gradualFader.baseopacity+';}\n')
document.write('</style>')

gradualFader.setopacity=function(obj, value){ //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)
    var targetobject=obj
    if (targetobject && targetobject.filters && targetobject.filters[0]){ //IE syntax
        if (typeof targetobject.filters[0].opacity=="number") //IE6
            targetobject.filters[0].opacity=value*100
        else //IE 5.5
            targetobject.style.filter="alpha(opacity="+value*100+")"
        }
    else if (targetobject && typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax
        targetobject.style.MozOpacity=value
    else if (targetobject && typeof targetobject.style.opacity!="undefined") //Standard opacity syntax
        targetobject.style.opacity=value
    targetobject.currentopacity=value
}

gradualFader.fadeupdown=function(obj, direction){
    var targetobject=obj
    var fadeamount=(direction=="fadeup")? gradualFader.increment : -gradualFader.increment
    if (targetobject && (direction=="fadeup" && targetobject.currentopacity<1 || direction=="fadedown" && targetobject.currentopacity>this.baseopacity)){
        this.setopacity(obj, targetobject.currentopacity+fadeamount)
        window["opacityfader"+obj._fadeorder]=setTimeout(function(){gradualFader.fadeupdown(obj, direction)}, 25)
    }
}

gradualFader.clearTimer=function(obj){
if (typeof window["opacityfader"+obj._fadeorder]!="undefined")
    clearTimeout(window["opacityfader"+obj._fadeorder])
}

gradualFader.isContained=function(m, e){
    var e=window.event || e
    var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
    while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
    if (c==m)
        return true
    else
        return false
}

gradualFader.fadeinterface=function(obj, e, direction){
    if (!this.isContained(obj, e)){
        gradualFader.clearTimer(obj)
        gradualFader.fadeupdown(obj, direction)
    }
}

gradualFader.collectElementbyClass=function(classname){ //Returns an array containing DIVs with specified classname
    var classnameRE=new RegExp("(^|\\s+)"+classname+"($|\\s+)", "i") //regular expression to screen for classname within element
    var pieces=[]
    var alltags=document.all? document.all : document.getElementsByTagName("*")
    for (var i=0; i<alltags.length; i++){
        if (typeof alltags[i].className=="string" && alltags[i].className.search(classnameRE)!=-1)
            pieces[pieces.length]=alltags[i]
    }
    return pieces
}

gradualFader.init=function(){
    var targetobjects=this.collectElementbyClass("gradualfader")
    for (var i=0; i<targetobjects.length; i++){
        targetobjects[i]._fadeorder=i
        this.setopacity(targetobjects[i], this.baseopacity)
        targetobjects[i].onmouseover=function(e){gradualFader.fadeinterface(this, e, "fadeup")}
        targetobjects[i].onmouseout=function(e){gradualFader.fadeinterface(this, e, "fadedown")}
    }
}

gradualFader.init_fade_up=function()
{
 var targetobjects=this.collectElementbyClass("gradualfader")
 for (var i=0; i<targetobjects.length; i++)
 {
  this.setopacity(targetobjects[i], this.baseopacityy)
  gradualFader.fadeupdown(targetobjects[i], "fadeup");
  targetobjects[i].onmouseover=function()
  {
   var targetobjects1=document.getElementsByTagName("div");
   for (var j=0; j<targetobjects1.length; j++)
   {
    gradualFader.fadeupdown(targetobjects1[j], "fadedown");
    gradualFader.fadeupdown(this, "fadeup");
    }
   gradualFader.init();
   }
  }
 }
