String.prototype.trim = function () {
	var str = this;
	while (str && str.length > 0 && str.substring (0, 1) == ' ') str = str.substring (1, str.length);
	while (str && str.length > 0 && str.substring (str.length - 1, str.length) == ' ') str = str.substring (0, str.length - 1);
	return str;
}

function  f_activate(elm,activate){
	if(elm!=null && (""+typeof(elm)).toLowerCase()=='string')
		elm = document.getElementById(elm);
	if(elm==null)
		return;
	var id = elm.id;
	if(id==null || id.length==0)
		return;
	if(id.lastIndexOf('_')==-1)
		return;
	id = id.substring(0,id.lastIndexOf('_'));

	//If we are not in a scrollable element
	var isInScrollable = false;
	if(activate){
		var p = elm;
		while(p!=null){
			if(p.scrollable!=null){
				isInScrollable = true;
				break;
			}
			p = p.parentNode;
		}
	}
	
	var activeClassName = 'f_activated';
	var re = new RegExp(activeClassName,'ig');
	var e = null;
	var c = 0;
	
	while((e = document.getElementById(id+'_'+c))!=null){
		var cn = e.className;
		if(cn==null)
			cn = '';
		cn = cn.replace(re,'').trim();
		if(activate)
			cn += ' '+activeClassName;
		e.className = cn;
		
		if(activate && !isInScrollable){
			var p = e;
			while(p!=null){
				if(p.scrollable!=null){
					p.scrollable.scrollTo(e);
					break;
				}
				p = p.parentNode;
			}
		}
		c++;	
	}
}

function f_scrollTo(id){
	var elm = document.getElementById(id);
	if(elm==null)
		return;
	var p = elm;
	while(p!=null){
		if(p.scrollable!=null){
			p.scrollable.scrollTo(elm);
			break;
		}
		p = p.parentNode;
	}
}

function Scrollable(id) {
	
	this.container = null;
	this.scrollDiv = null;
	this.elements = new Array();
	this.scrollWidth = 0;
	this.viewportWidth = 0;
	this.maxX = 0;
	
	this.init = function(id){
		this.container = document.getElementById(id);
		if(this.container!=null){
			this.container.scrollable = this;
			
			var arrows = this.container.getElementsByTagName('img');
			var leftArrow = null;
			var rightArrow = null;
			if(arrows!=null){
				leftArrow = arrows[0];
				rightArrow = arrows[arrows.length-1];
			}
			if(leftArrow==null || rightArrow==null)
				return;
			
			
			this.addListener('mousedown',leftArrow,this.scrollLeft);
			this.addListener('mouseup',leftArrow,this.scrollStop);
      this.addListener('mousedown',rightArrow,this.scrollRight);
			this.addListener('mouseup',rightArrow,this.scrollStop);
			
			//Get the list of elements
			var divs = this.container.getElementsByTagName('div');
			if(divs!=null){
				this.scrollDiv = null;
				for(var i=0;i<divs.length;i++){
					if(divs[i].className!=null && divs[i].className.toLowerCase()=='imgwrapper2'){
						this.scrollDiv = divs[i];
						break;
					}
				}

				if(this.scrollDiv!=null){
					var c = this.scrollDiv.childNodes;
					if(c!=null){
						for(var i=0;i<c.length;i++){
							if(c[i].nodeName.indexOf('#')==-1){
								this.elements.push(c[i]);
							}
						}
					}
					
					if(this.elements.length==1)
						return;
					
					var objWidth = this.elements[1].offsetLeft-this.elements[0].offsetLeft;
					this.scrollWidth = objWidth*this.elements.length;
										
					for(var i=0;i<this.elements.length;i++){
						var x = this.elements[i].offsetLeft+this.elements[i].scrollWidth;
						this.maxX = Math.max(this.maxX,x);
					}
					
					//Opera fix
					this.scrollDiv.style.width = this.scrollWidth+'px';
					
					//Is ie
					if(!(navigator.userAgent.toLowerCase().indexOf("msie") != -1 && navigator.userAgent.toLowerCase().indexOf("opera") == -1)){
						//alert(this.elements.length);
						this.maxX -= this.elements.length;
					}
					
					this.viewportWidth = this.scrollDiv.parentNode.offsetWidth;
					this.maxX -= this.viewportWidth;
				}
			}
		}
	}
	
	this.addListener = function(type,elm,listener){
		if (elm.attachEvent)
			elm.attachEvent('on'+type, bind(listener,this));
    else if(elm.addEventListener)
			elm.addEventListener(type, bind(listener,this), false);
	}

	this.scrollLeft = function(evt){
		this.scrollStart(1);
	}
	
	this.scrollRight = function(evt){
		this.scrollStart(-1);
	}
	
	this.scrollStart = function(dir){
		if(this.elements.length==1)
			return;
		
		window.clearInterval(this.iid);
		this.dir = dir;
		this.scroll();
		this.iid = window.setInterval(bind(this.scroll,this),100);
	}
	
	this.scrollStop = function(evt){
		window.clearInterval(this.iid);
		this.dir = 0;
	}
	
	this.getScrollPos = function(){
		var x = this.scrollDiv.style.left;
		if(x==null)
			x = '';
		x = x.toLowerCase().replace('px','');
		x = x*1;
		return x;
	}
	
	this.scroll = function(){
		var x = this.getScrollPos();
		
		x = x+(10*this.dir);
		
		if(x>0 || x<-this.maxX)
			return;
		
		this.scrollDiv.style.left = x+'px';
	}
	
	this.scrollTo = function(elm){
		if(elm==null)
			return;
		//Check that it is in element
		var scrollElement = null;
		var p = elm;
		while(p!=null){
			if(p.parentNode!=null && p.parentNode==this.scrollDiv){
				scrollElement = p;
				break;
			}
			p = p.parentNode;
		}
		if(scrollElement==null)
			return;
				
		var found = false;
		for(var i=0;i<this.elements.length;i++){
			if(this.elements[i]==scrollElement){
				found = true;
				break;
			}
		}
		if(!found)
			return;
		
		var x = scrollElement.offsetLeft;
		if(x<0)
			return;
		if(x>(this.scrollWidth-this.viewportWidth))
			x = this.maxX;
	
		this.scrollToPlayHead = 0.0;
		this.startScrollTo = this.getScrollPos();
		this.endScrollTo = -x;
		this.scrollToDistance = this.endScrollTo-this.startScrollTo;
				
		if(this.scrollToDistance!=0){
			this.scrollStop();
			this.iid = window.setInterval(bind(this.animateScrollTo,this),100);
		}
	}
	
	this.animateScrollTo = function(){
		if(this.getScrollPos()==this.endScrollTo){
			this.scrollStop();
			return;
		}
		else {
			this.scrollToPlayHead = Math.min(this.scrollToPlayHead+25,Math.abs(this.scrollToDistance));
			var i = this.scrollToPlayHead/Math.abs(this.scrollToDistance);
			var x = Math.round(scrollToAnimation(Math.abs(i*this.scrollToDistance),this.startScrollTo,this.scrollToDistance,Math.abs(this.scrollToDistance)));
			this.scrollDiv.style.left = x+'px';			
		}
	}
	
	this.init(id);
}

//Exponential ease in/out
function _scrollToAnimation(t, b, c, d){
	if (t == 0)
		return b;
	
	if (t == d)
		return b + c;
	
	if ((t /= d / 2) < 1)
		return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
	
	return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;
}
//Sine ease in/out
function scrollToAnimation(t, b, c, d){
	return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
}

function bind(observer, observerThis) {
	return function (evt) { return observer.call (observerThis, evt||window.event); }
}