/**
 * @fileoverview roundcorners.js - Ecken von Bildern abrunden
 *
 * @author Sascha H?depohl sascha@ravenworks.de
 * @version $Id: roundcorners.js,v 1.8 2007/03/27 10:40:58 sascha Exp sascha $
 */


if (typeof Array.prototype.contains != 'function') {
  Array.prototype.contains = function(element) {
    for (var i = 0; i < this.length; i++) {
      if (this[i]==element) {
        return true;
      }
    }        
    return false
  };
}

if (typeof Array.prototype.forEach != 'function') {
  Array.prototype.forEach = function(f) {
    var i, j, l = this.length;
    for (i = 0; i < l; ++i) {
      if ((j = this[i])) {
        f(j);
      }
    }
  };
}

if (typeof document.getElementsByClassName != 'function') {
  document.getElementsByClassName = function(tagname, classname) {
    var a, i, result = new Array();
    var elements = document.getElementsByTagName(tagname);
    for (i = 0; i < elements.length; ++i) {
      if (a = elements[i].getAttributeNode('class')) {
        if (a.value.split(' ').contains(classname)) {
          result.push(elements[i]);
        }
      }
    }
    return result;
  }
}

if (typeof isIE != 'function') {
  function isIE() {
    var ua = navigator.userAgent;
    return (ua.indexOf('MSIE') != -1);
  }
}

/**
 * -----------------------------------------------------------------------------------
 */
var RoundCorners = {

  prefix : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAB3RJTUUH1wMQDR",

  ol : "EjLTBqSQAAAGFJREFUGNONz7EVQDAUQNEXzrGA3na2skBqrSkswQyap1EQCbn1+8n/QZWyHYjAAqyYt6uj2j1GM+Gs9tl/knBS2+JSyYstX2479vy54pEa6va6uqABYgjhqI0XaqlDbXsCTrZ77zXc9doAAAAASUVORK5CYII=",
  or : "IwgqN4VAAAAGNJREFUGNOVzqENgDAARNErJF0Ag+oITMEOTNCtWABdyz50BszHVFRAcpx+P7kAJEmLpFXSJmmWMyACGai87CuagGLhFozAbuEuKBbuLlULtyD/wRG4BgeHEG5Jh4XbTlsC6QGLxnjQJ0gkyAAAAABJRU5ErkJggg==",
  ul : "MvFrBE4AAAAFxJREFUGNOV0LENg1AQRMG1kdwAuUugClqhKzdATOoq3AS/iyEHjI4Xz0mrC94p9kwy3MFjFQcrXlUM0x3c0FcxLOiqGD6XB44tfyc5r2Haf+kBFytbkjnJN8lvA8IVef9EzbjbAAAAAElFTkSuQmCC",
  ur : "Mmb2z8RAAAAFxJREFUGNOVkEENgDAQBBdIMMCHVyVUBR5QUFe4qChwMXxKQhqgy7wnudmTTIDQyyf+kRc3YQR2V04AjjgBR1MGBiBTaIkbN75OZyqeVqersaYDgqRY/rhKmt/STsGVduCkBRt7AAAAAElFTkSuQmCC",

  classNames : Array(),
  styles : Array(),

  init : function() {
    if (arguments.length > 0) {
      for (var i = 0; i < arguments.length; i++) {
        if (arguments[i].indexOf(':') > 0) {
          var a = arguments[i].split(':');
          if (a.length == 3) {
            this.styles[a[0]] = new Array();
            this.styles[a[0]]['key'] = a[1];
            this.styles[a[0]]['value'] = a[2];
          }
          this.classNames.push(a[0]);
        } else {
          this.classNames.push(arguments[i]);
        }
      }
    } else {
      this.classNames.push("round");
    }
    RoundCorners.findImages();
  },

  findImages : function() {
    for (var i = 0; i < this.classNames.length; i++) {
      document.getElementsByClassName('img', this.classNames[i]).forEach(RoundCorners.checkLoad);
    }
  },

  checkLoad : function(img) {
    if (img.complete) {
      RoundCorners.addCorners(img);
    } else {
      RoundCorners.addImageLoadHandler(img);
    }
  },

  addCorners : function(imgobject) {
    var container = document.createElement('div');
    var image_width = parseInt(imgobject.width);
    var image_height = parseInt(imgobject.height);
    var parent = imgobject.parentNode;
    parent.replaceChild(container, imgobject);
    container.appendChild(imgobject);

    if (isIE()) {
      if (image_height % 2 != 0) {
        image_height--;
      }
    }

    var img_classes = imgobject.getAttributeNode('class').value.split(' ');
    for (var i = 0; i < img_classes.length; i++) {
      if (this.styles[img_classes[i]]) {
        var cssclass = this.styles[img_classes[i]]
        if (cssclass['key'] == 'cssFloat') {
          container.style.cssFloat = cssclass['value'];
          container.style.styleFloat = cssclass['value'];
        }
      }
    }

    with (container.style) {
      position = 'relative';
      width = image_width + 'px';
      height = image_height + 'px';
      overflow = 'hidden';
      borderStyle="none";
    }
    imgobject.style.borderStyle = 'none';

    container.appendChild(RoundCorners.corner('o', 'l'));
    container.appendChild(RoundCorners.corner('o', 'r'));
    container.appendChild(RoundCorners.corner('u', 'l'));
    container.appendChild(RoundCorners.corner('u', 'r'));
  },

  corner : function(v, h) {
    var filename = 'corner_' + v + h + '.png';
    var e;
    if (isIE()) {
      e = document.createElement('span');
      e.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + filename + "')";
    } else {
      e = document.createElement('img');
      switch (v + h) {
        case 'ol': e.src = this.prefix + this.ol; break;
        case 'or': e.src = this.prefix + this.or; break;
        case 'ul': e.src = this.prefix + this.ul; break;
        case 'ur': e.src = this.prefix + this.ur; break;
      }
    }
    with (e.style) {
      position = 'absolute';
      width = '11px';
      height = '11px';
      borderStyle = 'none';
    }
    if (v == 'o') { e.style.top = '0px'; } else { e.style.bottom = '0px'; }
    if (h == 'l') { e.style.left = '0px'; } else { e.style.right = '0px'; }
    return e;
  },

  addImageLoadHandler : function(imgobject) {
    // hier haben wir eigentlich eine Racecondition
    imgobject.onload = RoundCorners.imageLoadHandler;
  },

  imageLoadHandler : function(e) {
		e = e || window.event;
		if (isIE()) {
			RoundCorners.addCorners(e.srcElement);
		} else {
			RoundCorners.addCorners(e.currentTarget);
		}
  }

};


