function NiftierCheck()
{ return (document.getElementById && document.createElement);
}

function Niftier(selector, bgcolor, border, dimension, info)
{ var elements = $A( GetElementsBySelector(selector) );
  elements.each( function(node) { DoNiftier(node, bgcolor, border, dimension, info); } );
}

function DoNiftier(div, bgcolor, border, dimension, info)
{ if (div)
  { var dim = parseInt(dimension);

//    border = 5;

    var tl = info.match(/tl|top|left|all/i);
    var tr = info.match(/tr|top|right|all/i);

    var bl = info.match(/bl|bottom|left|all/i);
    var br = info.match(/br|bottom|right|all/i);

    if (tl || tr || bl || br)
    {
      var parent = div.parentNode;

      var container = document.createElement('div');
      parent.insertBefore(container, div);
      parent.removeChild(div);

      if (tl || tr)
      { var td = document.createElement('div');
        td.className = 'clearfix';
        td.style.fontSize = '1px';

        var tcd = document.createElement('div');
        tcd.style.borderTop = '1px solid '+border;
        tcd.style.backgroundColor = bgcolor;

        var tcdspacer = document.createElement('div');
        tcdspacer.style.height = dim;
        tcdspacer.style.overflow = 'hidden';
        tcd.appendChild(tcdspacer);

        td.appendChild(tcd);

        if (tl)
        { var tld = document.createElement('div');
          tld.className = 'tld';

          tld.style.height = dim;
          tld.style.width = dim + 1;

          tcd.style.marginLeft = dim + 1;

          Rounded(tld, bgcolor, border, dim, 'tl');

          var fc = td.firstChild;
          td.insertBefore(tld, fc);
        } else
        { tcd.style.borderLeft = '1px solid '+border;
        }

        if (tr)
        { var trd = document.createElement('div');
          trd.className = 'trd';

          trd.style.height = dim;
          trd.style.width = dim + 1;

          tcd.style.marginRight = dim + 1;

          Rounded(trd, bgcolor, border, dim, 'tr');

          var fc = td.firstChild;
          td.insertBefore(trd, fc);
        } else
        { tcd.style.borderRight = '1px solid '+border;
        }

        div.style.borderTop = 'none';
        div.style.paddingTop = 0;

        container.appendChild(td);
      }

      div.style.background = bgcolor;
      div.style.borderLeft = '1px solid '+border;
      div.style.borderRight = '1px solid '+border;
      div.style.paddingLeft = dim;
      div.style.paddingRight = dim;
      div.style.margin = 0;

      container.appendChild(div);

      if (bl || br)
      { var bd = document.createElement('div');
        bd.className = 'clearfix';
        bd.style.fontSize = '1px';

        var bcd = document.createElement('div');
        bcd.style.borderBottom = '1px solid '+border;
        bcd.style.backgroundColor = bgcolor;

        var bcdspacer = document.createElement('div');
        bcdspacer.style.height = dim;
        bcdspacer.style.overflow = 'hidden';
        bcd.appendChild(bcdspacer);

        bd.appendChild(bcd);

        if (bl)
        { var bld = document.createElement('div');
          bld.className = 'bld';

          bld.style.height = dim;
          bld.style.width = dim + 1;

          bcd.style.marginLeft = dim + 1;

          Rounded(bld, bgcolor, border, dim, 'bl');

          var fc = bd.firstChild;
          bd.insertBefore(bld, fc);
        } else
        { bcd.style.borderLeft = '1px solid '+border;
        }

        if (br)
        { var brd = document.createElement('div');
          brd.className = 'brd';

          brd.style.height = dim;
          brd.style.width = dim + 1;

          bcd.style.marginRight = dim + 1;

          Rounded(brd, bgcolor, border, dim, 'br');

          var fc = bd.firstChild;
          bd.insertBefore(brd, fc);
        } else
        { bcd.style.borderRight = '1px solid '+border;
        }

        div.style.borderBottom = 'none';
        div.style.paddingBottom = 0;

        container.appendChild(bd);
      }
    }
  }
}

function Rounded(div, bgcolor, border, dim, pre)
{ for (var i=0; i<dim; i++)
  { var x = document.createElement('span');
    x.className = 'x'+dim+pre+i;
    x.style.backgroundColor = bgcolor;
    x.style.borderColor = border;
//    x.style.borderWidth = '2';
    div.appendChild(x);
  }
}

function GetElementsBySelector(selector)
{ if (selector.indexOf(' ') > 0) // descendant selector like "tag#id tag or tag#id tag.class"
  { var s = selector.split(' ');
    var fs = $( s[0].split('#')[1] );
    //var fs = document.getElementById(s[0].split('#')[1]);
    if (!fs) return [ ];
    if (s[1].indexOf('.') > 0) // descendant selector like "tag#id tag.class"
    { var ss = s[1].split('.')[1];
      return document.getElementsByClassName(ss, fs);
    } else
    { return fs.getElementsByTagName(s[1]);  // descendant selector like "tag#id tag"
    }
  } else if (selector.indexOf('#') > 0) // id selector like "tag#id"
  { var s = selector.split('#');
    return [ $(s[1]) ];
  } else if (selector.indexOf('.') > 0) // class selector like "tag.class"
  { var s = selector.split('.')[1];
    return document.getElementsByClassName(s);
  } else // tag selector like "tag"
  { return document.getElementsByTagName(selector);
  }
}

