/*
	Marquee 1.1 for MoreCSS 1.0 BETA 3
	Developed by yellowgreen designbüro published under MIT License.
	
	http://morecss.yellowgreen.de/documentation/plugins/marquee/
	http://morecss.yellowgreen.de/documentation/information/legal/
*/



// Register properties and preparing properties
MoreCSS.properties["marquee"] = "marquee";
MoreCSS.applyOnLoad["marquee"] = "marquee";

// Start property
MoreCSS.marquee = function(element, properties, propertyValue, pseudoClass, caller, mode) {
	var direction = MoreCSS.getPropertyValue(properties, "marquee", "up");
	var marqueeMode = MoreCSS.getPropertyValue(properties, "marquee-mode", "normal");
   	var container = MoreCSS.getPropertyValue(properties, "marquee-container", "");
   	var content = MoreCSS.getPropertyValue(properties, "marquee-content", "");
   	var speed = parseFloat(MoreCSS.getPropertyValue(properties, "marquee-speed", 15));
   	var steps = parseFloat(MoreCSS.getPropertyValue(properties, "marquee-steps", 1));
   	
   	if(document.getElementById(container) && document.getElementById(content)) {
   		document.getElementById(container).style.overflow = "hidden";
		document.getElementById(content).innerHTML = MoreCSS.trim(document.getElementById(content).innerHTML);

   		if(direction == "left" || direction == "right") {
   			document.getElementById(content).style.whiteSpace = "nowrap";
   			document.getElementById(content).style.display = (MoreCSS.browser() == "MSIE") ? "block" : "inline";
		}
		
	   	var containerWidth = document.getElementById(container).offsetWidth;
   		var containerHeight = document.getElementById(container).offsetHeight;
   		var contentWidth = document.getElementById(content).offsetWidth;
   		var contentHeight = document.getElementById(content).offsetHeight;
  	 	var scrollRangeWidth = (contentWidth - containerWidth < 0) ? 0 : contentWidth - containerWidth;
  	 	var scrollRangeHeight = (contentHeight - containerHeight < 0) ? 0 : contentHeight - containerHeight;
  	 	
		if(mode == "prepare") {
			eval('if(typeof ' + content + '_marquee == "undefined") ' + content + '_marquee = new marqueeObject();');
		} else {
			if(direction != "stop") eval(content + '_marquee.prepareScrolling(direction, marqueeMode, speed, steps);'); else eval(content + '_marquee.scrollStop();');
    	}
    }
    
    function marqueeObject() {
    	var instance = this;
    	this.scrollPosition = 0;
    	
    	this.prepareScrolling = function(direction, marqueeMode, speed, steps) { this.interval = setInterval(function() { scrolling(direction, marqueeMode, speed, steps); }, speed); };
    	this.scrollStop = function() { clearInterval(this.interval); };

		function scrolling(direction, marqueeMode, speed, steps) {
			if(scrollRangeHeight > 0) {
				if(direction == "up") {
					instance.scrollPosition = instance.scrollPosition - steps;
					if(instance.scrollPosition < -scrollRangeHeight) if(marqueeMode == "normal") { instance.scrollPosition = -scrollRangeHeight; clearInterval(instance.interval); } else
						if(instance.scrollPosition < -scrollRangeHeight - containerHeight) instance.scrollPosition = containerHeight;
					document.getElementById(content).style.marginTop = instance.scrollPosition + "px";
				}
				
				if(direction == "down") {
					instance.scrollPosition = instance.scrollPosition + steps;
					if(instance.scrollPosition > 0) if(marqueeMode == "normal") { instance.scrollPosition = 0; clearInterval(instance.interval); } else
						if(instance.scrollPosition > containerHeight) instance.scrollPosition = -contentHeight;
					document.getElementById(content).style.marginTop = instance.scrollPosition + "px";
				}
			}
			
			if(scrollRangeWidth > 0) {
				if(direction == "left") {
					instance.scrollPosition = instance.scrollPosition - steps;
					if(instance.scrollPosition < -scrollRangeWidth) if(marqueeMode == "normal") { instance.scrollPosition = -scrollRangeWidth; clearInterval(instance.interval); } else
						if(instance.scrollPosition < -scrollRangeWidth - containerWidth) instance.scrollPosition = containerWidth;
					document.getElementById(content).style.marginLeft = instance.scrollPosition + "px";
				}

				if(direction == "right") {
					instance.scrollPosition = instance.scrollPosition + steps;
					if(instance.scrollPosition > 0) if(marqueeMode == "normal") { instance.scrollPosition = 0; clearInterval(instance.interval); } else
						if(instance.scrollPosition > containerWidth) instance.scrollPosition = -contentWidth;
					document.getElementById(content).style.marginLeft = instance.scrollPosition + "px";
				}
			}
		}
    }
};