var debugDiv;
function d(m){
  if( !debugDiv ){
    debugDiv = document.getElementById( 'debug' );
  }
  debugDiv.innerHTML += m + "<br/>";
}

function sh_chartBaseToBase(from, to, amt, pad) {
  var BaseStr = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXUZ';
  var tmp=parseInt(amt);
  if(from != 10)
    tmp=parseInt(amt, from);

  if(to != 10){
    var s='';
    while(tmp/to){
      s = BaseStr.charAt(tmp%to)+s;
      tmp = (tmp - tmp%to)/to;
    }
    while(s.length<pad)s=BaseStr.charAt(0)+s;
    return s;
  } else
    return tmp;
}

function sh_chartGetMouseXY(e) // works on IE6,FF,Moz,Opera7
{ 
  var mousex, mousey;
  if (!e) e = window.event;

  if (e)
  { 
    if (e.pageX || e.pageY)
    { // this doesn't work on IE6!! (works on FF,Moz,Opera7)
      mousex = e.pageX;
      mousey = e.pageY;
      algor = '[e.pageX]';
      if (e.clientX || e.clientY) algor += ' [e.clientX] '
    }
    else if (e.clientX || e.clientY)
    { // works on IE6,FF,Moz,Opera7
      mousex = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
      mousey = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
      algor = '[e.clientX]';
      if (e.pageX || e.pageY) algor += ' [e.pageX] '
    }  
    return [mousex, mousey]
  }
  return null;
}

function sh_chartParseCaption(strCaption){
  var strRet='',
    arrSplit = strCaption.split(/#/g),
    atVar = (strCaption.charAt(0)=='#'),
    start = 0;
  
  if(atVar && arrSplit[0] == '')start=1;
  
  for(var i=start;i<arrSplit.length;i++,atVar=!atVar){
    varName="";
    varPlacement="";
    if(atVar)
    { 
      if((io=arrSplit[i].indexOf(","))==-1){
        varName=arrSplit[i];
        varPlacement="?";
      } else {
        varName=arrSplit[i].substr(0,io);
        varPlacement=arrSplit[i].substr(io+1);
      }
      // 1 - series
      // 2 - value
      // 3 - label
      // 4 - Note
      // 5 - units
      
      switch(varName.toLowerCase()){
        case "series": // 1
          if(varPlacement == '?' || (arguments.length>1 && arguments[1] && arguments[1] != ''))
            strRet += varPlacement.replace(/\?/g,arguments[1]);
          break;
        case "value": // 2
          if(varPlacement == '?' || (arguments.length>2 && arguments[2] && arguments[2] != ''))
            strRet += varPlacement.replace(/\?/g,arguments[2]);
          break;
        case "label": // 3
          if(varPlacement == '?' || (arguments.length>3 && arguments[3] && arguments[3] != ''))
            strRet += varPlacement.replace(/\?/g,arguments[3]);
          break;
        case "note": // 4
          if(varPlacement == '?' || (arguments.length>4 && arguments[4] && arguments[4] != ''))
            strRet += varPlacement.replace(/\?/g,arguments[4]);
          break;
        case "units": // 5
          if(varPlacement == '?' || (arguments.length>5 && arguments[5] && arguments[5] != ''))
            strRet += varPlacement.replace(/\?/g,arguments[5]);
          break;
        default: // ??
          strRet += '#' + varName + (varPlacement=='?'?'':','+varPlacement)+'#';
          break;
      }
    }else{
      strRet += arrSplit[i];
    }
  }
  
  return strRet;
}

function sh_chartReplaceAll(str, findText, replaceText) {
  var s=str,c=0,p;
  if((p=replaceText.indexOf(findText))>-1)
    return s;
  else
    while(s.indexOf(findText)>-1)
      s = s.replace(findText, replaceText);
  return s;
}

function sh_chartGet(e){
  var d=document;
  if(d.getElementById && d.getElementById(e))return d.getElementById(e);
  if(d.all && d.all[e])return d.all[e];
  if(d.forms && d.forms.length > 0){
    for(var i=0;i<d.forms.length;i++)
      if(d.forms[i][e])return d.forms[i][e];
  }
  return null;
}

function sh_chartHandleMouseOver( ID, ev ){
  if( !ev )ev = window.event;

  if( ID.indexOf('_') > -1 ){
    var cii = ID.substr(0, ID.indexOf('_'));
    charts[cii].handleMouseOver( ID.substr( ID.indexOf('_')+1 ), ev );
  }
}

if(!charts){
  var charts = new Array();
}
function SH_Chart(ID, chartValue, chartLink, divName, mapName){
  this.ID = ID;

  this.chartLink = chartLink;
  this.divName = divName;
  this.mapName = mapName || ('sh_chart_IMGMAP' + ID);
  this.value = (chartValue ? chartValue : sh_chart);

  this.handleMouseOut = function(){
    var _T=this;

    if(_T.div_el){
      _T.div_el.style.display='none';
    }
  };
  this.handleMouseOver = function( id, ev ){
    var _T = this,
        v = _T.value.coords[id].u,
        b = function(i,s){if(i>-1)s=v[i];return sh_chartReplaceAll(unescape(s),'+',' ')};
    
    if( !_T.div_el ){
      _T.div_el=sh_chartGet('sh_chartFloaterDiv'+_T.ID);
    }
    if(_T.div_el && v){
      var mouse = sh_chartGetMouseXY(ev);
      _T.div_el.style.top= (mouse[1] + 10) + "px";
      _T.div_el.style.left= (mouse[0] + 5) + "px";

      // 0 - series
      // 1 - value
      // 2 - label
      // 3 - Note

      if(!_T.value.MouseOverCaption && typeof sh_chartMouseOverCaption != 'undefined'){
        _T.value.MouseOverCaption = sh_chartMouseOverCaption;
      }
      if(!_T.value.MouseOverCaption){
        _T.value.MouseOverCaption = "<div>#Series#&nbsp;#Label#</div><div>#Units,?:&nbsp;#&nbsp;#Value#</div>#Note,<div>Note:?</div>#";
      }

      if(!_T.value.coords[id].caption){
        _T.value.coords[id].caption=sh_chartParseCaption(_T.value.MouseOverCaption, b(0), b(1), b(2), b(3), b(-1,_T.value.units));
      }

      _T.div_el.innerHTML = _T.value.coords[id].caption;
      _T.div_el.style.display='';
    }
  };

  this.addAreaMouseovers = function(){
    if(document.getElementsByTagName){
      var areas=document.getElementsByTagName("AREA"),
          _T = this;
      for(var i=0; i<areas.length; i++){
        if( areas[i].parentNode.name == _T.mapName ){
          areas[i].onclick=new Function("return false;");
          areas[i].onmouseover=function(ev){sh_chartHandleMouseOver(this.id.replace('sh_chartArea',''),ev)};
          areas[i].onmouseout=function(){charts[_T.ID].handleMouseOut();};
        }
      }
    }
  };
  this.create = function(){
    var _T = this,
        shDiv=sh_chartGet(_T.divName);

    if(!shDiv){setTimeout("charts[" + _T.ID + "].create()",300);return null}
    s='<map name="'+_T.mapName+'">';
    
    var coords = _T.value.coords;
    for(var i=0;i<coords.length;i++)
      s+='<area id="sh_chartArea'+_T.ID+'_'+i+'" shape="'+coords[i].s+'" coords="'+coords[i].c+'" '+
          'onclick="return false" href="/" '+
          'onmouseover="sh_chartHandleMouseOver(\''+_T.ID+'_'+i+'\',event)" '+
          'onmouseout="charts[' + _T.ID + '].handleMouseOut();">';
    //alert(s);

    if(_T.value.backgroundColor == _T.value.fontColor)
      if(_T.value.backgroundColor == 0)_T.value.backgroundColor=16777215;
      else if(_T.value.backgroundColor < 100000)_T.value.backgroundColor=16777215;
      else _T.value.backgroundColor=parseInt(_T.value.backgroundColor/2);
    
    s+='</map>';
    s+='<div id="sh_chartFloaterDiv'+_T.ID+'" style="background-color:#'+sh_chartBaseToBase(10,16,_T.value.backgroundColor,6)+
              ';font-family:'+_T.value.fontFamily+',sans-serif;color:#'+sh_chartBaseToBase(10,16,_T.value.fontColor,6)+
              ';border:1px solid black;left:0px;top:0px;position:absolute'+
              ';font-size:10pt;z-index:300;display:none;padding:3px"></div>';
              //';font-size:'+sh_chart.fontSize+'pt;z-index:300;display:none;padding:3px"></div>';
    s+='<img src="'+_T.chartLink+'" border="0" usemap="#'+_T.mapName+'">';

    shDiv.innerHTML = s;
    // FireFox has a problem with inline events for area's
    if(!window.event)setTimeout("charts[" + _T.ID + "].addAreaMouseovers()",500);
  };
}