//NAB Photography Javascript
//Copyright (c) 2009 Nathan Brown
//www.nabphoto.com
//Portions Copyright {Nathan Brown, Michael Leigeber, Alexander Richardson}


var stageTimer;
var stageTag;
var stageStep = 4;
var stageCurO = 0;
var stageMaxO = 50;
var stageSpeed = 50;
var stageOnFinish = null;

function doStage(tag, delayStart, onComplete) {
    stageCurO = 0;
    stageTag = tag;

    if (delayStart > 0) {
        setTimeout("doStage('" + tag + "',0,'" + onComplete + "')", delayStart);
        return;
    }

    if (onComplete != null)
        stageOnFinish = onComplete;

    stageTimer = setInterval("doOpacity()", stageSpeed);
}

function doOpacity() {
    if (stageCurO < 15)
        stageCurO += 1;
    else
        stageCurO += stageStep;

    var t = document.getElementById(stageTag);
    
    if (stageCurO >= stageMaxO) {
        clearInterval(stageTimer);
        stageCurO = stageMaxO;
        setOpacity(t, stageCurO);

        if (stageOnFinish != null)
            eval(stageOnFinish);

        return;
    }
    setOpacity(t, stageCurO);
}

function setOpacity(tag, value) {
    if (tag.filters != null)
        tag.filters[0].opacity = value;
    else
        tag.style.opacity = (value / 100);
}

//Color Fading
function colorFade(id,element,start,end,steps,speed) {
  var startrgb,endrgb,er,eg,eb,step,rint,gint,bint;
  var target = document.getElementById(id);
  steps = steps || 20;
  speed = speed || 20;
  clearInterval(target.timer);
  endrgb = colorConv(end);
  er = endrgb[0];
  eg = endrgb[1];
  eb = endrgb[2];
  if(!target.r) {
    startrgb = colorConv(start);
    r = startrgb[0];
    g = startrgb[1];
    b = startrgb[2];
    target.r = r;
    target.g = g;
    target.b = b;
  }
  rint = Math.round(Math.abs(target.r-er)/steps);
  gint = Math.round(Math.abs(target.g-eg)/steps);
  bint = Math.round(Math.abs(target.b-eb)/steps);
  if(rint == 0) { rint = 1 }
  if(gint == 0) { gint = 1 }
  if(bint == 0) { bint = 1 }
  target.step = 1;
  target.timer = setInterval(function() { animColor(id, element, steps, er, eg, eb, rint, gint, bint) }, speed);
}

//Color Animation
function animColor(id,element,steps,er,eg,eb,rint,gint,bint) {
  var target = document.getElementById(id);
  var color;
  if(target.step <= steps) {
    var r = target.r;
    var g = target.g;
    var b = target.b;
    if(r >= er) {
      r = r - rint;
    } else {
      r = parseInt(r) + parseInt(rint);
    }
    if(g >= eg) {
      g = g - gint;
    } else {
      g = parseInt(g) + parseInt(gint);
    }
    if(b >= eb) {
      b = b - bint;
    } else {
      b = parseInt(b) + parseInt(bint);
    }
    color = 'rgb(' + r + ',' + g + ',' + b + ')';
    if(element == 'background') {
      target.style.backgroundColor = color;
    } else if(element == 'border') {
      target.style.borderColor = color;
    } else {
      target.style.color = color;
    }
    target.r = r;
    target.g = g;
    target.b = b;
    target.step = target.step + 1;
  } else {
    clearInterval(target.timer);
    color = 'rgb(' + er + ',' + eg + ',' + eb + ')';
    if(element == 'background') {
      target.style.backgroundColor = color;
    } else if(element == 'border') {
      target.style.borderColor = color;
    } else {
      target.style.color = color;
    }
  }
}

// convert the color to rgb from hex //
function colorConv(color) {
  var rgb = [parseInt(color.substring(0,2),16), 
    parseInt(color.substring(2,4),16), 
    parseInt(color.substring(4,6),16)];
  return rgb;
}


var slideTag;
var slideInt;
var slidePos;
var slideDest;
var slideSpeed;
var slideOnFinish = null;

function slideStart(tag, dest, onComplete) {
    slideTag = document.getElementById(tag);
    slideDest = dest;

    slidePos = document.body.clientWidth + 10;

    if (onComplete != null)
        slideOnFinish = onComplete;    

    slideSpeed = new Array(4);

    slideSpeed[0] = new Array(2);
    slideSpeed[0][0] = slidePos * .45;
    slideSpeed[0][1] = 70;

    slideSpeed[1] = new Array(2);
    slideSpeed[1][0] = slidePos * .20;
    slideSpeed[1][1] = 65;

    slideSpeed[2] = new Array(2);
    slideSpeed[2][0] = slidePos * .10;
    slideSpeed[2][1] = 60;

    slideSpeed[3] = new Array(2);
    slideSpeed[3][0] = 10;
    slideSpeed[3][1] = 55;

    slideTag.style.left = slidePos + "px";
    slideTag.style.visibility = "";

    slideInt = setInterval("slideDo()", 30);
}

function slideDo() {
    
    if (slidePos > slideSpeed[0][0])
        slidePos -= slideSpeed[0][1];
    else {
        if (slidePos > slideSpeed[1][0])
            slidePos -= slideSpeed[1][1];
        else {
            if (slidePos > slideSpeed[2][0])
                slidePos -= slideSpeed[2][1];
            else {
                slidePos -= slideSpeed[3][1];
            }
        }
    }

    if (slidePos <= slideDest) {
        clearInterval(slideInt);
        slidePos = slideDest;
        slideTag.style.left = slidePos + "px";

        if (slideOnFinish != null)
            eval(slideOnFinish);
    }

    slideTag.style.left = slidePos + "px";
}

function slideStartOut(tag, pos) {
    slideTag = document.getElementById(tag);

    slideDest = document.body.clientWidth + 10;
    slidePos = pos;

    slideSpeed = new Array(4);

    slideSpeed[0] = new Array(2);
    slideSpeed[0][0] = slidePos * .45;
    slideSpeed[0][1] = 70;

    slideSpeed[1] = new Array(2);
    slideSpeed[1][0] = slidePos * .20;
    slideSpeed[1][1] = 65;

    slideSpeed[2] = new Array(2);
    slideSpeed[2][0] = slidePos * .10;
    slideSpeed[2][1] = 60;

    slideSpeed[3] = new Array(2);
    slideSpeed[3][0] = 10;
    slideSpeed[3][1] = 55;

    slideTag.style.left = slidePos + "px";
    slideTag.style.visibility = "";

    slideInt = setInterval("slideDoOut()", 30);
}

function slideDoOut() {

    if (slidePos < slideSpeed[0][0])
        slidePos += slideSpeed[0][1];
    else {
        if (slidePos < slideSpeed[1][0])
            slidePos += slideSpeed[1][1];
        else {
            if (slidePos < slideSpeed[2][0])
                slidePos += slideSpeed[2][1];
            else {
                slidePos += slideSpeed[3][1];
            }
        }
    }

    if (slidePos >= slideDest) {
        clearInterval(slideInt);
        slidePos = slideDest;
        slideTag.style.visibility = "hidden";
    }

    slideTag.style.left = slidePos + "px";
}