function PicWheel(name,limit,ci,width,height) {
  this.name = name;
  this.i = obj.length;
  obj[this.i] = this;
  this.layerid = 'ul_' + (objid++);
  this.width = width;
  this.height = height;
  this.aktiv = null;
  this.scf = 0.8;
  this.picwheelelems = new Array();
  this.limit = limit;
  this.ci = (ci != null || ci <= limit ? parseInt(ci) : Math.floor(limit/2));
  this.pos = 0;
  this.init = init;
  this.add = add;
  this.width0 = calcWidth(this.scf,this.limit,Math.floor(this.limit/2),this.width+15);
}

function PicWheelElem (nr, name, pic, link) {
  this.nr = nr;
  this.name = name;
  this.pic = pic;
  this.link = link;
}

function mysort (a, b) {
  return (a.nr < b.nr ? -1 : (a.nr > b.nr ? 1 : 0));
}

function calcWidth(b,n,i,w) {
  return Math.floor(((Math.pow(b,(i+2))-2*b+Math.pow(b,(n-i+1)))/(b-1))*w);
}

function scale (thisobj) {
  var j = thisobj.ci;
  var i = thisobj.ci;

  var f = 1;
  var w = parseInt(f*thisobj.width);
  var h = parseInt(f*thisobj.height);

  var d = parseInt((thisobj.width0 - calcWidth(thisobj.scf,thisobj.limit,i-thisobj.pos,thisobj.width+15))/thisobj.limit);

  document.getElementById(thisobj.layerid + '_li_' + j).style.width = (w+15) + 'px';
  document.getElementById(thisobj.layerid + '_li_' + j).style.height = (h+15) + 'px';
  document.getElementById(thisobj.layerid + '_img_' + j).style.width = w + 'px';
  document.getElementById(thisobj.layerid + '_img_' + j).style.height = h + 'px';
  document.getElementById(thisobj.layerid + '_li_' + j).style.top = Math.ceil((thisobj.height-h)/2) + 'px';
  document.getElementById(thisobj.layerid + '_img_' + j).style.filter = 'Alpha(opacity=100)';
  document.getElementById(thisobj.layerid + '_li_' + j).style.fontSize = (f*90 > 0 ? f*90 : 1)+'%';
  document.getElementById(thisobj.layerid + '_li_' + j).style.visibility = 'visible';
  j--;

  f = Math.pow(thisobj.scf,(i-j+1));
  while (j >= thisobj.pos) {
    w = parseInt(f*thisobj.width);
    h = parseInt(f*thisobj.height);
    document.getElementById(thisobj.layerid + '_li_' + j).style.width = parseInt(w+15+d) + 'px';
    document.getElementById(thisobj.layerid + '_li_' + j).style.height = (h+15) + 'px';
    document.getElementById(thisobj.layerid + '_li_' + j).style.top = Math.ceil((thisobj.height-h)/2) + 'px';
    document.getElementById(thisobj.layerid + '_img_' + j).style.width = w + 'px';
    document.getElementById(thisobj.layerid + '_img_' + j).style.height = h + 'px';
    document.getElementById(thisobj.layerid + '_li_' + j).style.fontSize = (f*90 > 0 ? f*90 : 1)+'%';
    document.getElementById(thisobj.layerid + '_img_' + j).style.filter = 'Alpha(opacity=' + (f*100) + ')';
    document.getElementById(thisobj.layerid + '_li_' + j).style.visibility = 'visible';
    j--;
    f = Math.pow(thisobj.scf,(i-j+1));
  }

  j = i+1;
  f = Math.pow(thisobj.scf,(j-i+1));

  while (j < thisobj.pos+thisobj.limit) {
    w = parseInt(f*thisobj.width);
    h = parseInt(f*thisobj.height);
    document.getElementById(thisobj.layerid + '_li_' + j).style.width = parseInt(w+15+d) + 'px';
    document.getElementById(thisobj.layerid + '_li_' + j).style.height = (h+15) + 'px';
    document.getElementById(thisobj.layerid + '_li_' + j).style.top = Math.ceil((thisobj.height-h)/2) + 'px';
    document.getElementById(thisobj.layerid + '_img_' + j).style.width = w + 'px';
    document.getElementById(thisobj.layerid + '_img_' + j).style.height = h + 'px';
    document.getElementById(thisobj.layerid + '_li_' + j).style.fontSize = (f*90 > 0 ? f*90 : 1)+'%';
    document.getElementById(thisobj.layerid + '_img_' + j).style.filter = 'Alpha(opacity=' + (f*100) + ')';
    document.getElementById(thisobj.layerid + '_li_' + j).style.visibility = 'visible';
    j++;
    f = Math.pow(thisobj.scf,(j-i+1));
  }
}

function move(thisobj) {
  document.getElementById(thisobj.layerid).removeChild(document.getElementById(thisobj.layerid).firstChild);
  var newli = document.createElement('li');
  document.getElementById(thisobj.layerid).insertBefore(newli,document.getElementById(thisobj.layerid).lastChild);

  thisobj.pos++;
  thisobj.ci++;

  var k = thisobj.pos+thisobj.limit-1;
  var j = k % thisobj.picwheelelems.length;

  var newid = document.createAttribute("id");
  var id = thisobj.layerid + '_li_' + k;
  newid.nodeValue = id;
  newli.setAttributeNode(newid);

  document.getElementById(id).onmouseover = function () {
    clear(thisobj);
    thisobj.ci = k;
    scale(thisobj);
  };
  document.getElementById(id).onfocus = function () {
    clear(thisobj);
    thisobj.ci = k;
    scale(thisobj);
  };
  document.getElementById(id).onmouseout = function () {
    set(thisobj);
  };
  document.getElementById(id).onblur = function () {
    set(thisobj);
  };
  document.getElementById(id).innerHTML = (thisobj.picwheelelems[j].link != '' ? '<a href="' + thisobj.picwheelelems[j].link + '">' : '') + '<img id="' + thisobj.layerid + '_img_' + k + '" src="' + thisobj.picwheelelems[j].pic + '" border="0" width="' + thisobj.width + '" height="' + thisobj.height + '" alt="' + thisobj.picwheelelems[j].name + '" />' + (thisobj.picwheelelems[j].link != '' ? '</a>' : '') + '<br/>' + thisobj.picwheelelems[j].name;

  scale(thisobj);
  if (thisobj.picwheelelems.length > 1) {
    set(thisobj);
  }
}

function set (thisobj) {
  clear(thisobj);
  thisobj.aktiv = window.setInterval('move(obj[' + thisobj.i + '])', 2000);
}

function clear (thisobj) {
  if (null != thisobj.aktiv) {
    window.clearInterval(thisobj.aktiv);
  }
}

function showPics(thisobj) {
  var str = '';
  var k = 0;
  for (var i = thisobj.pos; i < thisobj.pos+thisobj.limit; i++) {
    var j = i % thisobj.picwheelelems.length;
    str += '<li id="' + thisobj.layerid + '_li_' + k + '" onmouseout="set(obj[' + thisobj.i + ']);" onmouseover="clear(obj[' + thisobj.i + ']);obj[' + thisobj.i + '].ci=' + k + ';scale(obj[' + thisobj.i + ']);" onblur="set(obj[' + thisobj.i + ']);" onfocus="clear(obj[' + thisobj.i + ']);obj[' + thisobj.i + '].ci=' + k + ';scale(obj[' + thisobj.i + ']);">' + (thisobj.picwheelelems[j].link != '' ? '<a href="' + thisobj.picwheelelems[j].link + '">' : '') + '<img id="' + thisobj.layerid + '_img_' + k + '" src="' + thisobj.picwheelelems[j].pic + '" border="0" width="' + thisobj.width + '" height="' + thisobj.height + '" alt="' + thisobj.picwheelelems[j].name + '" />' + (thisobj.picwheelelems[j].link != '' ? '</a>' : '' ) + '<br/>' + thisobj.picwheelelems[j].name + '</li>';
    k++;
  }
  str += '<span></span>';
  document.getElementById(thisobj.layerid).innerHTML = str;
}

function add(nr, name, pic, link) {
  this.picwheelelems.push(new PicWheelElem (nr, name, pic, link));
}

function init() {
  this.picwheelelems.sort(mysort);
  document.write((this.name != '' ? '<fieldset class="fs_picwheel"><legend>' + this.name + '</legend>' : '') + '<ul id="' + this.layerid + '" class="picwheel"></ul>'+ (this.name != '' ? '</fieldset>' : ''));
  showPics(obj[this.i]);
  scale(obj[this.i]);
  if (this.picwheelelems.length > 1) {
    set(obj[this.i]);
  }
}

var obj = new Array();
var objid = 0;