/** class Quote
 *
 */

function Quote() {
	if (arguments.length) {
		this.layer 			= arguments[0];     
		this.C_Height 		= arguments[1].C_Height;
		this.C_Width 		= arguments[1].C_Width;
		this.C_TopOffset 	= arguments[1].C_TopOffset;
		this.C_LeftOffset 	= arguments[1].C_LeftOffset;	
		this.C_Spacing 		= arguments[1].C_Spacing;
		this.C_Direction 	= arguments[1].getDirection();
		this.C_EndSpace     = 0;
		this.C_AbovePosition = 0;

		this.pixelsRolled 	= 0;  
		this.isRolling 		= false;
		this.isFirstRoll 	= null;
		this.reperPosition  = null;
		this.reper          = null;
		this.reperTop       = null;
		this.isInit         = false;
	}

	/**
	 * Restore initial position and size
	 */
	this.init = function init() {
		setObjectStyleProperty(this.layer, "position", "absolute");

		var list = this.layer.getElementsByTagName("img");
		if (list && list.length)
			this.reper = list.item(list.length - 1);

		this.pixelsRolled = 0;             
		this.isRolling 	  = false;

		this.isInit = true;                                                                    
	}                                                            
}


/** Class QuoteUp
 * Extends Quote
 *
 */
function QuoteUp(layer, headline) {
	// Call super , Quote, constructor;
	this.super_(layer, headline);

	this.topOff 		= 0;
	this.clipTop 		= 0;
	this.clipBottom 	= this.C_Height;              
	this.clipRight		= this.C_Width;
	this.top 			= this.C_TopOffset + this.C_Height;    
	this.pixelsRolled 	= 0; 

	this.super_init = this.init;    
	this.init = function init() {
		if (!this.isInit) {
			this.super_init();	    		    	
			setObjectStyleProperty(this.layer, "width", this.C_Width);
			setObjectStyleProperty(this.layer, "clip", "rect(0px auto 0px auto)");

			// Browsers bug 
			this.C_Spacing  = parseInt(this.C_Spacing) + 1;
			this.C_EndSpace = parseInt(this.C_EndSpace) + 1;	    

			this.C_AbovePosition = parseInt(this.C_TopOffset) -
				parseInt(this.C_Spacing) -
				parseInt(this.C_EndSpace);								   								   
		}
		setObjectStyleProperty(this.layer, "visibility", "hidden");
		this.topOff 		= 0;
		this.clipTop 		= -5;
		this.clipBottom 	= this.C_Height;
		this.top 			= this.C_TopOffset + this.C_Height + 5;
		this.isRolling      = false;
	}

	/**
	 * Roll the line inside the headline's rectangle
	 */
	this.rollLine = function() {
		setObjectStyleProperty(this.layer, "visibility", "visible");
		this.isRolling = true;		
		this.top--;
		var rect = "rect(auto auto auto auto)"

			// When quote starts roll from bottom.
			if (this.topOff <= this.C_Height ) {
				this.topOff++;                        
				rect = 'rect(auto auto ' + this.topOff + 'px  auto)';                        
			} 
		// When quote has the bottom above header bottom line.            
			else { 
				this.clipBottom++;
				this.clipTop++;                
				rect = 'rect(' + this.clipTop + 'px auto ' + this.clipBottom + 'px auto)';          
			}

		// Reset quote position if it's bottom line is above headline top.
		//this.reperPosition  = this.getQuoteBottomPosition();
		if (this.reperPosition == this.C_TopOffset - this.C_Spacing - this.C_EndSpace)
			this.init();        

		setObjectStyleProperty(this.layer, "clip", rect);
		setLayerPosition(this.layer, "top", this.top);             
	}

	this.isAbove = function() {
		this.reperPosition = parseInt(this.getQuoteBottomPosition());	  
		if (this.reperPosition != null && 
				this.reperPosition == this.C_TopOffset + this.C_Height - this.C_Spacing - this.C_EndSpace)	
			return true

				return false;
	}

	this.getQuoteBottomPosition = function() {    	
		return findObjectTopOffset(this.reper);                        
	}  

	this.isOnTop = function () {
		if (this.reperTop == null)
			this.reperTop = this.layer.getElementsByTagName("img").item(0); 

		if ( findObjectTopOffset(this.reperTop) == this.C_TopOffset)
			return true;

		return false;
	}
}
QuoteUp.prototype = new Quote;
QuoteUp.prototype.super_ = Quote;


/** Class QuoteLeft
 * Extends Quote
 *
 */
function QuoteLeft(layer, headline) {
	// Call super , Quote, constructor;
	this.super_(layer, headline);

	this.clipLeft		= 0;
	this.clipRight      = 0;
	this.left			= 0;
	this.leftPosition   = null;
	this.leftOff        = 0;

	this.super_init = this.init;    
	this.init = function init() {
		if (!this.isInit) {
			this.super_init();	    	
			setObjectStyleProperty(this.layer, "height", this.C_Height);	
			setObjectStyleProperty(this.layer, "clip", "rect(auto 0px  auto 0px)");

			// Browsers bug 
			this.C_Spacing  = parseInt(this.C_Spacing)+ 1;
			this.C_EndSpace = parseInt(this.C_EndSpace) + 1;	    

			this.C_AbovePosition = parseInt(this.C_LeftOffset) +
				parseInt(this.C_Width) - 
				parseInt(this.C_Spacing) - 
				parseInt(this.C_EndSpace);	    						   	    						    
		}

		setObjectStyleProperty(this.layer, "visibility", "hidden");
		this.leftOff 		= 0;
		this.clipLeft 		= this.C_Width - 5;
		this.clipRight 		= 0;
		this.left 			= this.C_LeftOffset + this.C_Width + 5; 
		this.isRolling      = false; 
	}

	/**
	 * Roll the line inside the headline's rectangle
	 */
	this.rollLine = function() {
		setObjectStyleProperty(this.layer, "visibility", "visible");
		this.isRolling = true;
		this.left--;
		var rect = "rect(auto auto auto auto)"

			// When quote starts roll from bottom.
			if (this.leftOff <= this.C_Width ) {
				this.leftOff++;                        
				rect = 'rect(auto ' + this.leftOff + 'px auto  auto)';                        
			} 
		// When quote has the bottom above header bottom line.            
			else { 
				this.clipRight++;
				this.clipLeft++;
				rect = 'rect(auto ' + this.clipLeft + 'px auto ' + this.clipRight + 'px)';          
			}

		// Reset quote position if it's bottom line is above headline top.
		//this.leftPosition = this.getQuoteLeftPosition();
		if (this.leftPosition == this.C_LeftOffset - parseInt(this.C_Spacing) - parseInt(this.C_EndSpace)) 
			this.init();        

		setObjectStyleProperty(this.layer, "clip", rect);
		setLayerPosition(this.layer, "left", this.left);             
	}    

	this.isAbove = function() {
		this.leftPosition = this.getQuoteLeftPosition();
		if (this.leftPosition != null && 
				this.leftPosition == this.C_LeftOffset + this.C_Width   - this.C_Spacing - this.C_EndSpace)	{   			 

			return true
		}

		return false;	
	}                          

	this.getQuoteLeftPosition = function() {    	           	
		return findObjectLeftOffset(this.reper);
	}   

	this.isOnTop = function () {
		if (this.reperTop == null)
			this.reperTop = this.layer.getElementsByTagName("img").item(0); 

		if ( findObjectLeftOffset(this.reperTop) == this.C_LeftOffset)
			return true;

		return false;
	} 
}
QuoteLeft.prototype = new Quote;
QuoteLeft.prototype.super_ = Quote;
