

Effect.TypeWriter = Class.create();
Object.extend(Object.extend(Effect.TypeWriter.prototype, Effect.Base.prototype), {
	initialize: function(element, name) {
		var options = arguments[2] || {};
    this.element = $(element);
    this.oldName = this.element.innerHTML.substring();
		this.oldLetterCount = this.oldName.length;
 		this.newName = name;
		this.newLetterCount = this.newName.length;
    this.letterCount = this.oldLetterCount + this.newLetterCount;
//   	alert("this.oldName = " + this.oldName + ", this.oldLetterCount = " + this.oldLetterCount + ", this.newName = " + this.newName + ", this.newLetterCount = " + this.newLetterCount + ", this.letterCount = " + this.letterCount);
    this.start(options);
  },
  update: function(position) {
		var letterPosition = position * this.letterCount;
		if (letterPosition < this.oldLetterCount) {
			var tempName = this.oldName.substring(0,this.oldLetterCount - letterPosition);
		} else {
			var tempName = this.newName.substring(0,letterPosition - this.oldLetterCount);
		}
		if (tempName=="")
			tempName = "&nbsp;";
		if (this.element.innerHTML.substring() != tempName)
			Element.update(this.element,tempName)
  }
});

Effect.BlindRight = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Move(element, Object.extend({
    x: elementDimensions.width,
    y: false,
    mode: 'relative',
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({
        width: elementDimensions.width + 'px',
        height: elementDimensions.height + 'px'
      }).show();
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || { }));
};

Effect.BlindLeft = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Move(element, Object.extend({
    x: -1*elementDimensions.width,
    y: false,
    mode: 'relative',
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({
        width: elementDimensions.width + 'px',
        height: elementDimensions.height + 'px'
      }).show();
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || { }));
};