var tools = [{ 'Name': '.NET Reflector', 'Url': 'http://sharptoolbox.com/tools/net-reflector', 'Rating': 5, 'Description': 'Who could live without .NET Reflector\x3f' },
{ 'Name': 'ReSharper', 'Url': 'http://sharptoolbox.com/tools/resharper', 'Rating': 5, 'Description': '' },
{ 'Name': 'Visual Studio', 'Url': 'http://sharptoolbox.com/tools/visual-studio', 'Rating': 4, 'Description': 'Do I really need to tell you why VS is useful\x3f' },
{ 'Name': 'PageMethods', 'Url': 'http://sharptoolbox.com/tools/pagemethods', 'Rating': 4, 'Description': 'Innovative tool for ASP.NET' },
{ 'Name': 'Composite UI Application Block', 'Url': 'http://sharptoolbox.com/tools/composite-ui-application-block', 'Rating': 4, 'Description': 'Invaluable for your composite Windows Forms apps' }
];

var SharpToolbox_Favorites_TableId = 'MySharpToolboxFavorites';
var SharpToolbox_Favorites_MaxTools = 10;
var SharpToolbox_Favorites_MaxNameLength = 17;
function SharpToolbox_Favorites_JavascriptEscape(s) {
  return s.replace('\'', '\\\'').replace('"', '&quot;').replace('\r\n', '<br />').replace('\n', '<br />');
}
function SharpToolbox_Favorites_NotOK(table) {
  var div = document.createElement('div');
  div.style.fontWeight = 'bold';
  div.innerHTML = 'Please leave the link to <a href="http://sharptoolbox.com">SharpToolbox.com</a> intact';
  table.parentNode.insertBefore(div, table);
}
function SharpToolbox_Favorites_Check(table) {
  var tfoot = table.tFoot;
  if (tfoot == null)
    return SharpToolbox_Favorites_NotOK(table);
  if (tfoot.nodeName.toLowerCase() != 'tfoot')
    tfoot = tbody.nextSibling.nextSibling;
  if (tfoot.nodeName.toLowerCase() != 'tfoot')
    return SharpToolbox_Favorites_NotOK(table);
  var as = tfoot.getElementsByTagName('a');
  if (as.length != 1)
    return SharpToolbox_Favorites_NotOK(table);
  var link = as[0];
  if (link == null)
    return SharpToolbox_Favorites_NotOK(table);
  if (link.href.toLowerCase().indexOf('http://sharptoolbox.com') != 0)
    return SharpToolbox_Favorites_NotOK(table);
  var text = link.innerHTML.replace(/^\s+|\s+$/g, '');
  if ((text != '.NET tools by SharpToolbox.com') && (text != 'Outils .NET par SharpToolbox.com'))
    return SharpToolbox_Favorites_NotOK(table);
  return true;
}
function SharpToolbox_Favorites_AddRow(tbody, html1, html2, name, description) {
  var row = document.createElement('tr');
  name = SharpToolbox_Favorites_JavascriptEscape(name);
  description = SharpToolbox_Favorites_JavascriptEscape(description);
  if (typeof event != 'undefined')
    row.onmouseover = function() { SharpToolbox_Favorites_ShowTooltip(event, name, description); return false; };
  else
    row.onmouseover = function(event) { SharpToolbox_Favorites_ShowTooltip(event, name, description); return false; };
  row.onmouseout = function() { SharpToolbox_Favorites_HideTooltip(); };

  var col1 = document.createElement('td');
  col1.className = 'ToolNameCell';
  col1.innerHTML = html1;
  row.appendChild(col1);

  var col2 = document.createElement('td');
  col2.className = 'ToolRatingCell';
  col2.innerHTML = html2;
  row.appendChild(col2);

  tbody.appendChild(row);
}
function SharpToolbox_Favorites_ClipName(s) {
  if (s.length <= SharpToolbox_Favorites_MaxNameLength)
    return s;
  return s.substr(0, SharpToolbox_Favorites_MaxNameLength)+'&#8230;';
}
function SharpToolbox_Favorites_WriteTools() {
  var table = document.getElementById(SharpToolbox_Favorites_TableId);
  if (!SharpToolbox_Favorites_Check(table))
    return false;
  var tbody = table.getElementsByTagName('tbody')[0];
  var trs = tbody.getElementsByTagName('tr');
  if (tools.length > 0) {
    for (i = 0; i < Math.min(tools.length, SharpToolbox_Favorites_MaxTools); i++) {
      var tool = tools[i];
      var linkHtml = '<a href="' + tool.Url + '">' + SharpToolbox_Favorites_ClipName(tool.Name) + '</a>';
      var ratingHtml = tool.Rating != null ? '<img src="http://z.sharptoolbox.com/style/' + tool.Rating + 'on5.png" alt="'+tool.Rating+'/5" />' : '<span style="font-style: italic">(no rating)</span>';
      SharpToolbox_Favorites_AddRow(tbody, linkHtml, ratingHtml, tool.Name, tool.Description);
    }
    trs[1].style.display = 'none';
  } else {
    trs[1].style.display = 'block';
  }
  trs[0].style.display = 'none';
}
 
/*
Tooltip code based on a script from www.dhtmlgoodies.com. Alf Magne Kalleland.
(c) www.dhtmlgoodies.com, October 2005
*/
var SharpToolbox_Favorites_tooltip = false;
var SharpToolbox_Favorites_tooltipShadow = false;
var SharpToolbox_Favorites_shadowSize = 4;
var SharpToolbox_Favorites_tooltipMaxWidth = 250;
var SharpToolbox_Favorites_tooltipMinWidth = 100;
var SharpToolbox_Favorites_iframe = false;
var SharpToolbox_Favorites_tooltip_is_msie = (navigator.userAgent.indexOf('MSIE') >= 0 && navigator.userAgent.indexOf('opera') == -1 && document.all) ? true : false;

function SharpToolbox_Favorites_ShowTooltip(e, name, description) {
  var bodyWidth = Math.max(document.body.clientWidth, document.documentElement.clientWidth) - 20;

  if (!SharpToolbox_Favorites_tooltip) {
    SharpToolbox_Favorites_tooltip = document.createElement('div');
    SharpToolbox_Favorites_tooltip.id = 'SharpToolbox_Favorites_tooltip';
    SharpToolbox_Favorites_tooltipShadow = document.createElement('div');
    SharpToolbox_Favorites_tooltipShadow.id = 'SharpToolbox_Favorites_tooltipShadow';

    document.body.appendChild(SharpToolbox_Favorites_tooltip);
    document.body.appendChild(SharpToolbox_Favorites_tooltipShadow);

    if (SharpToolbox_Favorites_tooltip_is_msie) {
      SharpToolbox_Favorites_iframe = document.createElement('iframe');
      SharpToolbox_Favorites_iframe.frameborder = '5';
      SharpToolbox_Favorites_iframe.style.backgroundColor = '#FFFFFF';
      SharpToolbox_Favorites_iframe.src = '#';
      SharpToolbox_Favorites_iframe.style.zIndex = 100;
      SharpToolbox_Favorites_iframe.style.position = 'absolute';
      document.body.appendChild(SharpToolbox_Favorites_iframe);
    }
  }

  SharpToolbox_Favorites_tooltip.style.display = 'block';
  SharpToolbox_Favorites_tooltipShadow.style.display = 'block';
  if (SharpToolbox_Favorites_tooltip_is_msie)
    SharpToolbox_Favorites_iframe.style.display = 'block';

  var st = Math.max(document.body.scrollTop, document.documentElement.scrollTop);
  if (navigator.userAgent.toLowerCase().indexOf('safari') >= 0)
    st = 0;
  var leftPos = e.clientX + 10;

  SharpToolbox_Favorites_tooltip.style.width = null; // Reset style width if it's set 
  var div = document.createElement('div');
  div.style.cssText = 'font-weight:bold;margin-bottom:0.5em';
  div.innerHTML = name;
  while (SharpToolbox_Favorites_tooltip.hasChildNodes())
    SharpToolbox_Favorites_tooltip.removeChild(SharpToolbox_Favorites_tooltip.firstChild);
  SharpToolbox_Favorites_tooltip.appendChild(div);
  div = document.createElement('div');
  div.innerHTML = description;
  SharpToolbox_Favorites_tooltip.appendChild(div);
  SharpToolbox_Favorites_tooltip.style.left = leftPos + 'px';
  SharpToolbox_Favorites_tooltip.style.top = e.clientY + 10 + st + 'px';

  SharpToolbox_Favorites_tooltipShadow.style.left = leftPos + SharpToolbox_Favorites_shadowSize + 'px';
  SharpToolbox_Favorites_tooltipShadow.style.top = e.clientY + 10 + st + SharpToolbox_Favorites_shadowSize + 'px';

  if (SharpToolbox_Favorites_tooltip.offsetWidth > SharpToolbox_Favorites_tooltipMaxWidth) {
    // Exceeding max width of tooltip?
    SharpToolbox_Favorites_tooltip.style.width = SharpToolbox_Favorites_tooltipMaxWidth + 'px';
  }

  var tooltipWidth = SharpToolbox_Favorites_tooltip.offsetWidth;
  if (tooltipWidth < SharpToolbox_Favorites_tooltipMinWidth)
    tooltipWidth = SharpToolbox_Favorites_tooltipMinWidth;

  SharpToolbox_Favorites_tooltip.style.width = tooltipWidth + 'px';
  SharpToolbox_Favorites_tooltipShadow.style.width = SharpToolbox_Favorites_tooltip.offsetWidth + 'px';
  SharpToolbox_Favorites_tooltipShadow.style.height = SharpToolbox_Favorites_tooltip.offsetHeight + 'px';

  if ((leftPos + tooltipWidth) > bodyWidth) {
    SharpToolbox_Favorites_tooltip.style.left = (SharpToolbox_Favorites_tooltipShadow.style.left.replace('px', '') - ((leftPos + tooltipWidth) - bodyWidth)) + 'px';
    SharpToolbox_Favorites_tooltipShadow.style.left = (SharpToolbox_Favorites_tooltipShadow.style.left.replace('px', '') - ((leftPos + tooltipWidth) - bodyWidth) + SharpToolbox_Favorites_shadowSize) + 'px';
  }

  if (SharpToolbox_Favorites_tooltip_is_msie) {
    SharpToolbox_Favorites_iframe.style.left = SharpToolbox_Favorites_tooltip.style.left;
    SharpToolbox_Favorites_iframe.style.top = SharpToolbox_Favorites_tooltip.style.top;
    SharpToolbox_Favorites_iframe.style.width = SharpToolbox_Favorites_tooltip.offsetWidth + 'px';
    SharpToolbox_Favorites_iframe.style.height = SharpToolbox_Favorites_tooltip.offsetHeight + 'px';
  }
}

function SharpToolbox_Favorites_HideTooltip() {
  if (SharpToolbox_Favorites_tooltip) {
    SharpToolbox_Favorites_tooltip.style.display = 'none';
    SharpToolbox_Favorites_tooltipShadow.style.display = 'none';
    if (SharpToolbox_Favorites_tooltip_is_msie)
      SharpToolbox_Favorites_iframe.style.display = 'none';
  }
}