function slideshow_ajax() {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    var _vr =  ['MSXML2.XMLHttp.5.0','MSXML2.XMLHttp.4.0','MSXML2.XMLHttp.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];
    for (var i=0;i<_vr.length;i++) try {		  
	  var q = new ActiveXObject(_vr[i]);
	  if (q!=undefined&&q!=null) return q;
    } catch (e) {  };
  };
  return undefined;
};
			   
function slideshow_css(_obj,_name) {
  if (_obj.currentStyle) return _obj.currentStyle[_name];
  else if (window.getComputedStyle) { 
    var compStyle = window.getComputedStyle(_obj,"");
    return compStyle.getPropertyValue(_name);
  } else return undefined;
};
		
function slideshow_effect(old_obj,value,effect,_base) {
  this.old = old_obj;
  this.value = value;
  this.effect = effect;
  this.base = _base;
  this.setOp = function(toObj,op) {
    if (document.all) toObj.style.filter = 'alpha(opacity='+op.toString()+')';
	else toObj.style.opacity = (op/100).toString();
  }
  this.setValue = function(toObj,val) {
	if (toObj.nodeName=='B') toObj.style.backgroundImage = 'url('+val+')';
	else toObj.innerHTML = val;
  }
  this.setPos = function(toObj,oLeft,oTop) {
    if (oLeft!=null) toObj.style.left = parseInt(oLeft).toString()+'px';
    if (oTop!=null) toObj.style.top = parseInt(oTop).toString()+'px';
  }
  var _this = this;
  this.doFade = function(toObj,st) {
    _this.opacity += st;
	if (_this.opacity<0) _this.opacity = 0; if (_this.opacity>100) _this.opacity = 100;
	_this.setOp(toObj,_this.opacity);
    if (_this.opacity>0&&_this.opacity<100) setTimeout(function() { _this.doFade(toObj,st); },100);
    else if (toObj!=_this.obj) {
      toObj.parentNode.removeChild(toObj);
	  setTimeout(function() { _this.doFade(_this.obj,20); },0);
	} else {
	  _this.base.busy--;
	  if (_this.base.busy==0) _this.base.end();
	}
  }
  this.doMove = function() {
    _this.steps--;
	if (!_this.steps) {
	  _this.old.parentNode.removeChild(_this.old);
	  _this.setPos(_this.obj,_this.beginX,_this.beginY);
	  _this.base.busy--;
	  if (_this.base.busy==0) _this.base.end();
	} else {
	  if (_this.offsetX) { _this.posX += _this.offsetX; _this.posX2 += _this.offsetX; }
	  if (_this.offsetY) { _this.posY += _this.offsetY; _this.posY2 += _this.offsetY; }
	  _this.setPos(_this.old,_this.posX2,_this.posY2);
	  _this.setPos(_this.obj,_this.posX,_this.posY);
	  setTimeout(_this.doMove,70);
	}
  }
  if (effect=='random') {
    var aa = new Array('fade','fromb','fromt','froml','fromr');
    effect = aa[parseInt(Math.random()*aa.length)];
  }
  switch (effect) {
    case 'fade':
	  this.obj = this.old.cloneNode(false);	
	  this.setOp(this.obj,0); this.setValue(this.obj,this.value);
	  this.old.parentNode.insertBefore(this.obj,this.old);
	  this.opacity = 100;
	  this.doFade(this.old,-20);
	  break;
	case 'fromb':
	case 'fromr':
	case 'froml':
	case 'fromt': 
	  this.steps = 10;
	  this.offsetX = ((effect=='froml'||effect=='fromr')?this.old.offsetWidth/this.steps:0)*((effect=='fromr')?-1:1);
	  this.offsetY = ((effect=='fromt'||effect=='fromb')?this.old.offsetHeight/this.steps:0)*((effect=='fromb')?-1:1);
	  this.posX2 = this.beginX = parseInt(slideshow_css(this.old,'left'));
	  this.posY2 = this.beginY = parseInt(slideshow_css(this.old,'left'));
	  this.posX = ((effect=='froml')?this.posX2-this.old.offsetWidth:((effect=='fromr')?this.old.offsetWidth+this.posX2:this.posX2));
	  this.posY = ((effect=='fromt')?this.posY2-this.old.offsetHeight:((effect=='fromb')?this.old.offsetHeight+this.posY2:this.posY2));
	  if (!this.offsetX) this.offsetX = null;
	  if (!this.offsetY) this.offsetY = null;
	  this.obj = this.old.cloneNode(false);	
	  this.setValue(this.obj,this.value); this.setPos(this.obj,this.posX,this.posY);
	  this.old.parentNode.insertBefore(this.obj,this.old);
	  this.doMove();
	  break;
    default:
	  if (this.old.nodeName=='B') this.old.style.backgroundImage = 'url('+this.value+')';
	  else this.old.innerHTML = this.value;
	  _this.base.busy--;
	  if (_this.base.busy==0) _this.base.end();
  }
}
function slideshow_event(onObj,eve,func) {
  if (onObj.addEventListener) { onObj.addEventListener(eve,func,false); }
  else if (onObj.attachEvent) onObj.attachEvent('on'+eve,func);
  else {
    eve = 'on'+eve;
    var oldevent = onObj[eve];
    if (typeof(oldevent)=='function') onObj[eve] = function(e) { var r = oldevent(e); if (r===true||r==undefined||r===1) return func(e); else return false; }; else onObj[eve] = func;
  }
}
function slideshow(target_a) { 
  this.target = target_a;
  this.timeout = parseInt(target_a.getAttribute('timeout'))*1000;
  if (this.timeout==0) this.timeout = 30000;
  this.image_effect = target_a.getAttribute('image_effect');
  this.text_effect = target_a.getAttribute('text_effect');
  this.random = parseInt(target_a.getAttribute('random'));
  this.images = parseInt(target_a.getAttribute('images'));
  this.sid = target_a.getAttribute('sid');
  this.busy = 0;
  this.timer = 0;
  this.loader = undefined;
  this.loaderImage = new Image();
  this.loaderTimeout = 0;
  this.loaderObject = undefined;
  this.image_effect_object = undefined;
  this.text_effect_object = undefined;
  this.data = '';
  var _this = this;
  this.clearTimer = function() { clearTimeout(_this.timer); _this.timer = 0; return false; }
  this.abort = function() {
    clearTimeout(_this.loaderTimeout); _this.loaderTimeout = 0;
	if (_this.loaderObject!=undefined) _this.loaderObject.abort(); _this.loaderObject = undefined;
	if (_this.loader!=undefined) if (_this.loader.parentNode) _this.loader.parentNode.removeChild(_this.loader);
	_this.loader = undefined;
  }
  this.begin = function() {
    _this.loaderObject = slideshow_ajax();
	if (!_this.loaderObject) return false;
    _this.loader = document.createElement('U');
	_this.target.appendChild(_this.loader);
    _this.loaderObject.onreadystatechange = _this.do_data;
    _this.loaderObject.open('GET','?slideshow_next='+_this.images.toString()+'&sid='+_this.sid+'&random='+_this.random.toString(),true);
    _this.loaderObject.send(null);
	_this.loaderTimeout = setTimeout(_this.abort,20000);
	return true;
  }
  this.end = function() {
    _this.busy = 0;	 
	if (_this.data) if (_this.data.length==3) _this.target.title = _this.data[2];
	_this.timer = setTimeout(_this.doShow,_this.timeout);
	return false;
  }
  this.do_data = function() {
    if (_this.loaderObject.readyState == 4) {
      if (_this.loaderObject.status==200) {
	    _this.data = _this.loaderObject.responseText.split("\t");
        clearTimeout(_this.loaderTimeout); _this.loaderTimeout = 0;
	    _this.loaderObject = undefined;
		if (_this.data.length==3) _this.loaderImage.src = '?slideshow='+_this.data[0];
		else { _this.abort(); _this.end(); }
      } else { _this.abort(); _this.end(); }
	}
  }
  this.doEffect = function() {
    _this.abort();
    _this.image_effect_object = new slideshow_effect(_this.target.getElementsByTagName('B')[0],_this.loaderImage.src,_this.image_effect,_this);
    _this.text_effect_object = new slideshow_effect(_this.target.getElementsByTagName('I')[0],_this.data[1],_this.text_effect,_this);
  }
  
  this.doShow = function() {
    if (_this.busy>0) return false;
	_this.clearTimer();
    _this.busy = 2;
	if (!_this.begin()) return _this.end();
  }
  slideshow_event(this.loaderImage,'load',this.doEffect);
  slideshow_event(target_a,'click',this.doShow);
  this.timer = setTimeout(this.doShow,this.timeout);
}

function slideshow_init() {
  var a = document.getElementsByTagName('A');
  for (var i=0;i<a.length;i++) if (a[i].className.substr(0,9)=='slideshow') a[i].slideshow = new slideshow(a[i]);
}

slideshow_event(window,'load',slideshow_init);