//-----------------------------------------------------------------------------
//
// Copyright (c) 2002 by Computors Limited. All Rights Reserved.
//
// No part of this publication or software may be reproduced, transmitted,   
// transcribed, stored in a retrieval system, or translated into any      
// language without the prior written authorization of Computors Limited. 
//
// This is a licensed product of Computors Limitied.
//
// Program    : fadeeffect.js
// Description: Image Fade effects
//
// History
// Version   Date     Author      Comments
// --------  -------  ----------  ---------------------------------------------
// 01.00.00  18Mar04  A.D.Smith   Initial Version.
//
//-----------------------------------------------------------------------------
var UA = navigator.userAgent.toLowerCase();
var isIE = (UA.indexOf('msie') >= 0) ? true : false;
var isNS = (UA.indexOf('mozilla') >= 0) ? false : false;

var effect = 1;
var animate = 1;
var inprogress = 0;
var nextseq = 0;
var imageseq = 1;
//var currentrate = 0;
var fadeDirection = "in";
var imglistcount = 1;
imglist = new Array();
desclist = new Array();
imglink = new Array();

var imagename = "";
var fgobj = "";
var bgobj = "";
var descobj = "";
var startdelay = 20000;
var startrate = 25;
var startincr = 3;
var fadeoutdelay = 5000;
var fadeoutrate = 25;
var fadeoutincr = 3;
var fadeindelay = 5000;
var fadeinrate = 25;
var fadeinincr = 3;
var selectorname = "";
var seloffclass = "";
var selonclass = "";

var limitcheck = 0.0;
var opacity = 0.0;

function doFadeIn() {

  // Debug
  if (jscriptdebug) {
    document.getElementById('debug_value1').value = "doFadeIn - fadeinincr: " + fadeinincr;
  }

  fadeDirection = "in";

  if (effect == 0) {return;}

  if (isIE) {
      limitcheck = 100.0;
      opacity = fgobj.filters.item('DXImageTransform.Microsoft.alpha').opacity;
  } else if (isNS) {
      limitcheck = 1.0;
      opacity = fgobj.style.MozOpacity
  } else {
      limitcheck = 1.0;
      opacity = fgobj.style.opacity;
  }

  // Debug
  if (jscriptdebug) {
    document.getElementById('debug_value2').value = "Opacity: " + opacity;
    document.getElementById('debug_value3').value = "Limit Check: " + limitcheck;
  }

  if (opacity < limitcheck) {
    inprogress = 1;

    if (isIE) {
      fgobj.filters.item('DXImageTransform.Microsoft.alpha').opacity = (opacity + fadeinincr);
    } else if (isNS) {
      fgobj.style.MozOpacity = ((opacity * 1.0) + (fadeinincr / 101.0));
    } else {
      fgobj.style.opacity = ((opacity * 1.0) + (fadeinincr / 101.0));
    }

    setTimeout("doFadeIn()",fadeinrate)
  } else {
    // Debug
    //document.getElementById('debug_process').value = "switch to doFadeOut";

    if (descobj) {descobj.innerHTML = desclist[imageseq];}
    if (selectorname) {switchclass(imageseq);}

    if (animate == 1) {
      imageseq++;
      if (imageseq == imglistcount) {
        imageseq = 1;
      }
      bgobj.style.backgroundImage = "url('" + imglist[imageseq] + "')";
      setTimeout("doFadeOut()",fadeoutdelay)
    } else {
      fadeDirection = "out";
      inprogress = 0;
      if (nextseq > 0) {
        switchimg(nextseq)
      }
    }
//    currentrate = fadeinrate;
  }
}

function doFadeOut() {

  // Debug
  if (jscriptdebug) {
    document.getElementById('debug_value1').value = "doFadeOut - fadeoutincr: " + fadeoutincr;
  }

  fadeDirection = "out";

  if (effect == 0) {return;}
  
  if (isIE) {
      limitcheck = 0;
      opacity = fgobj.filters.item("DXImageTransform.Microsoft.Alpha").opacity;
  } else if (isNS) {
      limitcheck = 0;
      opacity = fgobj.style.MozOpacity
  } else {
      limitcheck = 0;
      opacity = fgobj.style.opacity
  }

  // Debug
  if (jscriptdebug) {
    document.getElementById('debug_value2').value = "Opacity: " + opacity;
    document.getElementById('debug_value3').value = "Limit Check: " + limitcheck;
  }

  if (opacity > limitcheck) {
    inprogress = 1;

    if (isIE) {
      fgobj.filters.item('DXImageTransform.Microsoft.alpha').opacity = (opacity - fadeoutincr);
    } else if (isNS) {
      fgobj.style.MozOpacity = ((opacity * 1.0) - (fadeoutincr / 101.0));
    } else {
      fgobj.style.opacity = ((opacity * 1.0) - (fadeoutincr / 101.0));
    }

    setTimeout("doFadeOut()",fadeoutrate)
  } else {
    // Debug
    //document.getElementById('debug_process').value = "switch to doFadeIn";

    if (descobj) {descobj.innerHTML = desclist[imageseq];}
    if (selectorname) {switchclass(imageseq);}

    if (animate == 1) {
      imageseq++;
      if (imageseq == imglistcount) {
        imageseq = 1;
      }
      fgobj.src = imglist[imageseq];
      setTimeout("doFadeIn()",fadeindelay)
    } else {
      fadeDirection = "out";
      inprogress = 0;
      if (nextseq > 0) {
        switchimg(nextseq)
      }
    }
//    currentrate = fadeoutrate;
  }
}

function switchimg(imgno) {
  imageseq = imgno;
  animate = 0;

  if (inprogress == 0) {
    nextseq = 0;
    if (fadeDirection == "in") {
      bgobj.style.backgroundImage = "url('" + imglist[imageseq] + "')";
//      if (descobj) {descobj.innerHTML = desclist[imageseq - 1];}
      setTimeout("doFadeOut()",0)
    } else {
      fgobj.src = imglist[imageseq];
//      if (descobj) {descobj.innerHTML = desclist[imageseq - 1];}
      setTimeout("doFadeIn()",0)
    }

    // Set Link
    if (document.getElementById('fglink')) {
      document.getElementById('fglink').href = imglink[imgno];
    }
  } else {
    nextseq = imgno;
  }
}
function switchclass(imgno) {
  for (var i=1; i<imglistcount; i++) {
    selobj = document.getElementById(selectorname + "_" + i);
    selobj.className = seloffclass;
  }
  thisselobj = document.getElementById(selectorname + "_" + imgno);
  thisselobj.className = selonclass;
}

function effectstart() {
  effect = 1;
  animate = 1;
  if (fadeDirection == "in") {
    setTimeout("doFadeOut()",0)
  } else {
    setTimeout("doFadeIn()",0)
  }
}

function effectend() {
  effect = 1;
  animate = 0;
  switchimg(imageseq)
}

function effectaddimg(newimgname,newimgdesc) {
  imglist[imglistcount] = newimgname;
  desclist[imglistcount] = newimgdesc;
  imglistcount++;
}

function effectinit(fgid,bgid,descid,esd,esr,esi,efod,efor,efoi,efid,efir,efii,selector,selon,seloff) {
  // Read Params
  fgobj = document.getElementById(fgid);
  bgobj = document.getElementById(bgid);
  if (descid != "") {descobj = document.getElementById(descid);}
  startdelay = esd;
  startrate = esr;
  startincr = esi;
  fadeoutdelay = efod;
  fadeoutrate = efor;
  fadeoutincr = efoi;
  fadeindelay = efid;
  fadeinrate = efir;
  fadeinincr = efii;
  selectorname = selector;
  selonclass = selon;
  seloffclass = seloff;

  // Setup
  effect = 1;
  animate = 1;
  fadeDirection = "in";
//  currentrate = startrate;

  // Debug
//  if (jscriptdebug) {alert("Function: doFadeOut");}



  if (isIE) {
    opacity = 100;
    if (fgobj) {
      fgobj.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=100)";
    }
  } else if (isNS) {
    opacity = 1.0;
    fgobj.style.MozOpacity = opacity;
  } else {
    opacity = 1.0;
    fgobj.style.opacity = opacity;
  }
  bgobj.style.backgroundImage = "url('" + imglist[imageseq+1] + "')";
  fgobj.src = imglist[imageseq];
  if (descobj) {descobj.innerHTML = desclist[imageseq];}
  imageseq++;
  setTimeout("doFadeOut()",startdelay)

  // Debug
  //document.write('<p><input type="text" name="debug_opacity" value=""></p>');
  //document.write('<p><input type="text" name="debug_limitcheck" value=""></p>');
}
