﻿var __stepFade = 10;
var __colorFade = '#FFFFFF';

function getBgColorClass(strCssClass){
  var strColor = new String();
  if (!document.styleSheets[0].rules){
    for (var i = 0; i < document.styleSheets.length; i++){
      for (var j = 0; j < document.styleSheets[i].cssRules.length; j++){
        if (document.styleSheets[i].cssRules[j].selectorText == ("."+ strCssClass)){
          strColor = document.styleSheets[i].cssRules[j].style.backgroundColor;
          strColor = strColor.substring(4,strColor.length-1);
          return (strColor);
        }
      }
    }
  }
  else {
    for (var i = 0; i < document.styleSheets.length; i++){
      for (var j = 0; j < document.styleSheets[i].rules.length; j++){
        if (document.styleSheets[i].rules[j].selectorText == ("."+ strCssClass)){
          strColor = document.styleSheets[i].rules[j].style.backgroundColor;
          strColor = parseInt("0x"+ strColor.substr(1,2), 16) +','+ 
                     parseInt("0x"+ strColor.substr(3,2), 16) +','+
                     parseInt("0x"+ strColor.substr(5,2), 16);
          return (strColor);
        }
      }
    }
  }
  return ("255,255,255");
}

function toHex(dec) {
  var hexChars = "0123456789ABCDEF";
  if (dec > 255) return null;
  var i = dec % 16; var j = (dec - i) / 16; var result = "";
  result += hexChars.charAt(j); result += hexChars.charAt(i);
  return result;
}

function fadeIN(strForm, strObj, strEstilo){
  var cssCor, originColor;
  var stepFade = __stepFade;
  var cor_r, cor_g, cor_b;
  var origin_r = parseInt(__colorFade.substr(1,2), 16);
  var origin_g = parseInt(__colorFade.substr(3,2), 16);
  var origin_b = parseInt(__colorFade.substr(5,2), 16);
  var param_r, param_g, param_b;
  if (fadeIN.arguments.length == 3 || fadeIN.arguments.length == 4){
    cssCor = getBgColorClass(strEstilo).split(',');
    if (fadeIN.arguments.length == 4){
      originColor = fadeIN.arguments[3];
      origin_r = parseInt(fadeIN.arguments[3].substr(1,2), 16);
      origin_g = parseInt(fadeIN.arguments[3].substr(3,2), 16);
      origin_b = parseInt(fadeIN.arguments[3].substr(5,2), 16);
    }
    else {
      originColor = __colorFade;
    }
    cor_r = parseInt(cssCor[0], 10); param_r = ((origin_r - cor_r) / stepFade);
    cor_g = parseInt(cssCor[1], 10); param_g = ((origin_g - cor_g) / stepFade);
    cor_b = parseInt(cssCor[2], 10); param_b = ((origin_b - cor_b) / stepFade);
  }
  else {
    originColor = fadeIN.arguments[10];
    origin_r = parseInt(originColor.substr(1,2), 16);
    origin_g = parseInt(originColor.substr(3,2), 16);
    origin_b = parseInt(originColor.substr(5,2), 16);
    stepFade = fadeIN.arguments[6];
    cor_r = fadeIN.arguments[3]; param_r = fadeIN.arguments[7];
    cor_g = fadeIN.arguments[4]; param_g = fadeIN.arguments[8];
    cor_b = fadeIN.arguments[5]; param_b = fadeIN.arguments[9];
  }
  if (stepFade > 0){
    if (param_r >= 0) cor_r = ((cor_r + param_r) < origin_r) ? (cor_r + param_r) : origin_r;
    else              cor_r = ((cor_r + param_r) > origin_r) ? (cor_r + param_r) : origin_r;
    if (param_g >= 0) cor_g = ((cor_g + param_g) < origin_g) ? (cor_g + param_g) : origin_g;
    else              cor_g = ((cor_g + param_g) > origin_g) ? (cor_g + param_g) : origin_g;
    if (param_b >= 0) cor_b = ((cor_b + param_b) < origin_b) ? (cor_b + param_b) : origin_b;
    else              cor_b = ((cor_b + param_b) > origin_b) ? (cor_b + param_b) : origin_b;
    if (strForm != '')
      eval('document.forms["'+ strForm +'"].'+ strObj +'.style.backgroundColor = "#'+ toHex(Math.round(cor_r)) + toHex(Math.round(cor_g)) + toHex(Math.round(cor_b)) +'";');
    else
      document.getElementById(strObj).style.backgroundColor = "#"+ toHex(Math.round(cor_r)) + toHex(Math.round(cor_g)) + toHex(Math.round(cor_b));
    setTimeout("fadeIN('"+strForm +"', '"+ strObj +"', '"+ strEstilo +"', "+ cor_r +', '+ cor_g +', '+ cor_b +", "+ (stepFade - 1) +","+ param_r +","+ param_g +","+ param_b +", '"+ originColor +"')",8);
  }
}

function fadeOUT(strForm, strObj, strEstilo){
  var cssCor = (fadeOUT.arguments.length == 3 || fadeOUT.arguments.length == 4) ? getBgColorClass(strEstilo) : fadeOUT.arguments[10];
  var stepFade = __stepFade;
  var cor_r, cor_g, cor_b, param_r, param_g, param_b, cor_r_out, cor_g_out, cor_b_out;
  cssCor = cssCor.split(',');
  cor_r_out = parseInt(cssCor[0], 10);
  cor_g_out = parseInt(cssCor[1], 10);
  cor_b_out = parseInt(cssCor[2], 10);
  if (fadeOUT.arguments.length == 3 || fadeOUT.arguments.length == 4){
    if (fadeOUT.arguments.length == 4){
      cor_r = parseInt(fadeOUT.arguments[3].substr(1,2), 16);
      cor_g = parseInt(fadeOUT.arguments[3].substr(3,2), 16);
      cor_b = parseInt(fadeOUT.arguments[3].substr(5,2), 16);
    }
    else{
      cor_r = parseInt(__colorFade.substr(1,2), 16);
      cor_g = parseInt(__colorFade.substr(3,2), 16);
      cor_b = parseInt(__colorFade.substr(5,2), 16);
    }
    param_r = ((cor_r_out - cor_r) / stepFade);
    param_g = ((cor_g_out - cor_g) / stepFade);
    param_b = ((cor_b_out - cor_b) / stepFade);
  }
  else {
    stepFade = fadeOUT.arguments[6];
    cor_r = fadeOUT.arguments[3]; param_r = fadeOUT.arguments[7];
    cor_g = fadeOUT.arguments[4]; param_g = fadeOUT.arguments[8];
    cor_b = fadeOUT.arguments[5]; param_b = fadeOUT.arguments[9];
  }
  if (stepFade > 0){
    if (param_r < 0) cor_r = ((cor_r + param_r) > cor_r_out) ? (cor_r + param_r) : cor_r_out;
    else             cor_r = ((cor_r + param_r) < cor_r_out) ? (cor_r + param_r) : cor_r_out;
    if (param_g < 0) cor_g = ((cor_g + param_g) > cor_g_out) ? (cor_g + param_g) : cor_g_out;
    else             cor_g = ((cor_g + param_g) < cor_g_out) ? (cor_g + param_g) : cor_g_out;
    if (param_b < 0) cor_b = ((cor_b + param_b) > cor_b_out) ? (cor_b + param_b) : cor_b_out;
    else             cor_b = ((cor_b + param_b) < cor_b_out) ? (cor_b + param_b) : cor_b_out;
    if (strForm != '')
      eval('document.forms["'+ strForm +'"].'+ strObj +'.style.backgroundColor = "#'+ toHex(Math.round(cor_r)) + toHex(Math.round(cor_g)) + toHex(Math.round(cor_b)) +'";');
    else
      document.getElementById(strObj).style.backgroundColor = "#"+ toHex(Math.round(cor_r)) + toHex(Math.round(cor_g)) + toHex(Math.round(cor_b));
    setTimeout("fadeOUT('"+strForm +"', '"+ strObj +"', '"+ strEstilo +"', "+ cor_r +', '+ cor_g +', '+ cor_b +", "+ (stepFade - 1) +","+ param_r +","+ param_g +","+ param_b +",'"+ cssCor.join(',') +"')",8);
  }
}

function theFadeTR(objCheck, strClassName, colorFade){
  var objTR = SearchTR(objCheck);
  objTR.id = (objTR.id) ? objTR.id : objCheck.id +"TR";
  if (objCheck.checked){ if (colorFade != '') fadeIN('', objTR.id, strClassName);}
  else {                 if (colorFade != '') fadeOUT('', objTR.id, strClassName);}
}

function theFadeTD(objCheck, strClassName, strClassNoChange, colorFade){
  var objTR = SearchTR(objCheck);
  var oDate = new Date();
  var strID = 'TD'+ oDate.getFullYear() + 
              (((oDate.getMonth()+1) <10)   ? "0"+(oDate.getMonth()+1)     : (oDate.getMonth()+1)) + 
              ((oDate.getDate()<10)         ? "0"+ oDate.getDate()         : oDate.getDate()) + 
              ((oDate.getHours()<10)        ? "0"+ oDate.getHours()        : oDate.getHours()) + 
              ((oDate.getMinutes()<10)      ? "0"+ oDate.getMinutes()      : oDate.getMinutes()) +
              ((oDate.getSeconds()<10)      ? "0"+ oDate.getSeconds()      : oDate.getSeconds()) +
              ((oDate.getMilliseconds()<10) ? "0"+ oDate.getMilliseconds() : oDate.getMilliseconds());
  if (objCheck.checked){
    for (var i=0; i < objTR.cells.length; i++){
      objTR.cells[i].id = (objTR.cells[i].id) ? objTR.cells[i].id : strID + "_" + i;
      if (objTR.cells[i].className == '' || objTR.cells[i].className != strClassNoChange){
        if (colorFade != '') fadeIN('', objTR.cells[i].id, strClassName, colorFade);
      }
    }
  }
  else{
    for (var i=0; i < objTR.cells.length; i++){
      objTR.cells[i].id = (objTR.cells[i].id) ? objTR.cells[i].id : strID;
      if (objTR.cells[i].className == '' || objTR.cells[i].className != strClassNoChange){
        if (colorFade != '') fadeOUT('', objTR.cells[i].id, strClassName, colorFade);
      }
    }
  }
}

function SearchTR(Element){
  if (document.all){ while (Element.tagName!="TR") {Element=Element.parentElement;}}
  else {             while (Element.tagName!="TR") {Element=Element.parentNode;}}
  return (Element);
}
