﻿		function pInt(str){return parseInt(str.replace(/[^0-9\-]/g,''));};
		
		function dir2dir(dir){
			if(dir == "right"){
				return "rtl";
			}
			return "ltr";
		}
		
		var frm = function(par, pos , width,ind){
			this.parent = par;
			this.index = ind;
			this.img= document.createElement("IMG");
			this.element = document.createElement("DIV");
			this.element.style.position = "absolute";
			this.element.style.width = width + "px";
			this.element.style.height = "100%";
			this.element.style.left = this.parent.iLeft + "px";
			this.element.style.top = "0px";
			this.element.style.textAlign = pos;
			this.element.style.direction = dir2dir(pos);
			this.element.style.overflow = "hidden";
			this.element.style.background = "transparent";
			this.parent.element.appendChild(this.element);
			this.img.src = this.parent.imgs[this.parent.imgPointer];
			this.img.title = this.img.alt = this.parent.titles[this.parent.imgPointer];
			this.img.style.height = "100%";
			this.img.style.width = this.parent.frameWidth + "px";
			this.element.appendChild(this.img);
			this.afterMove = false;
			this.move = function(dir){
				var add = parseInt(this.parent.add);
				var nw = pInt(this.element.style.width);
				var diffs = [];
				if(nw > 0){
					switch(dir){
						case "left":
							add *= -1;
						break;
						case "right":
							add *= 1;
						break;
						default:
							add *= 0;
						break;
					}
					this.element.style.left = (pInt(this.element.style.left) + add) + "px";
					switch(compareBoundingRecatanles(this.parent.element,this.element,diffs)){
						case "in":
							if(pInt(this.element.style.width) < this.parent.frameWidth){
								if(diffs['right'] < diffs['left']){
									nw += diffs['right'];
								}else{
									nw += diffs['left'];
									this.element.style.left = (pInt(this.element.style.left) - diffs['left'] ) + "px";
								}
								if(nw > this.parent.frameWidth){
									if(add > 0){
										this.element.style.left = (pInt(this.element.style.left) + (nw - this.parent.frameWidth) ) + "px";
									}
									nw = this.parent.frameWidth;
								}
								this.element.style.width = nw + "px";
							}
						break;
						case "left":
							this.element.style.left = (pInt(this.element.style.left) - diffs['left'] ) + "px";
							nw += diffs['left'];
							if(nw < 0){
								nw = 0;
							} else if(nw > this.parent.frameWidth){
								nw = this.parent.frameWidth;
							}
							this.element.style.width = nw + "px";
							this.element.style.textAlign = "right";
							this.element.style.direction = dir2dir("right");
						break;
						case "right":
							nw +=  diffs['right'];
							if(nw < 0){
								nw = 0;
							} else if(nw > this.parent.frameWidth){
								nw = this.parent.frameWidth;
							}
							this.element.style.width = nw + "px";
							this.element.style.textAlign = "left";
							this.element.style.direction = dir2dir("left");
						break;
					}
				}else{
					if(this.index == 0){
						var t = this;
						this.parent.frms[1].afterMove = function(){
								try{
									var pLeft = (pInt(this.element.style.left) - this.parent.frameSpace);
									if(pLeft > 0){
										t.element.style.width = pLeft + "px";
									}
								}catch(e){alert(e.message);}
							}
					}else{
						var pLeft = (this.parent.totalWidth - pInt(this.parent.frms[this.index - 1].element.style.left)) - (this.parent.frameWidth + this.parent.frameSpace);
						if(pLeft > 0){
							this.element.style.width = pLeft + "px";
							this.element.style.left = (this.parent.totalWidth - pLeft) + "px";
						}
					}
				}
				if(this.afterMove != false){
					this.afterMove();
				}
				this.afterMove = false;
				if((this.index == 0  && pInt(this.element.style.left) > this.parent.frameSpace) || (((this.index + 1) == this.parent.frms.length) && (pInt(this.element.style.left) + this.parent.frameWidth + this.parent.frameSpace) < this.parent.totalWidth)){
					this.parent.afterMove = function(){this.rotate(dir);}
				}
			}
		}
		
		
		function ofaat(holder,iimgs,frameWidth,frameSpace,steps,fps,ititles,ilinks){
			var myOfaat = this;
			this.element = gid(holder);
			this.frms = [];
			this.frameWidth = frameWidth;
			this.frameSpace = frameSpace;
			this.totalWidth = pInt(this.element.style.width);
			this.imgs = iimgs;
			if(ititles != undefined){
				this.titles = ititles;
			}else{
				this.titles = new Array(this.imgs.length);
			}
			if(ilinks != undefined){
				this.links = ilinks;
			}else{
				this.links = new Array(this.imgs.length);
			}
			this.imgPointer = 0;
			this.fps = fps;
			this.iLeft = 0;
			this.t1 = this.totalWidth - this.frameSpace;
			this.t2 = parseInt(this.t1 / (this.frameSpace + this.frameWidth));
			this.t3 = (this.t1 % (this.frameSpace + this.frameWidth))/2;
			this.add = steps;
			this.addInit = steps;
			this.afterMove = false;
			this.nextPointer = function(minus){
				if(minus){
					this.imgPointer--;
					this.imgPointer += this.imgs.length;
				}else{
					this.imgPointer++;
				}
				this.imgPointer %= this.imgs.length;
			}
			this.nextPointer(1);
			this.rotate = function(dir){
				this.afterMove = false;

				var w = [];
				var x = [];
				var l = this.frms.length;

				for(var i = 0; i < l; i++){
					w[i] = pInt(this.frms[i].element.style.width);
					x[i] = pInt(this.frms[i].element.style.left);
				}
				
				
				if(dir == "left"){
					this.nextPointer();
					for(var i = 0; i < (l - 1); i++){
						this.frms[i].element.style.width = w[i + 1] + "px";
						this.frms[i].element.style.left = x[i + 1] + "px";
					}
					this.frms[(l - 1)].element.style.left = this.totalWidth + "px";
					this.frms[(l - 1)].element.style.width = "0px";
				}else{
					this.nextPointer(true);
					this.frms[0].element.style.width = "0px";
					this.frms[0].element.style.left = "0px";
					for(var i = 1; i < l; i++){
						this.frms[i].element.style.width = w[i - 1] + "px";
						this.frms[i].element.style.left = x[i - 1] + "px";
					}
				}
				var il = imgs.length;
				for(var i = 0; i < l; i++){
					var p = (this.imgPointer + il - i) % il ;
					//alert(p);
					this.frms[l - i - 1].img.src = this.imgs[p];
					this.frms[l - i - 1].img.alt = this.frms[l - i - 1].img.title = this.titles[p];
				}
			}
			this.frms[0] = new frm(this,"right",this.t3,0);
			this.iLeft += (this.t3 + this.frameSpace);
			this.nextPointer();
			for(var x = 0; x < this.t2; x++){
				this.frms[x + 1] = new frm(this,"center",this.frameWidth,x + 1);
				this.nextPointer();
				this.iLeft += (this.frameWidth + this.frameSpace);
			}
			this.frms[this.t2 + 1] = new frm(this,"left",this.t3,this.t2 + 1);
			this.to = false;
			this.dirr = false;
			this.dbg = function(){
				return false;
				try{
					var str = [];
					var j = 0;
					for(var i in this){
						try{
							var x = this[i].toString();
							if(x.match(/^function/)){
							}else{
								str[j] = i + ": " + x;
								j++;
							}
						}catch(e1){alert("e1: " + e1.message);}			
					}
					gid("dbg").innerHTML = str.join("<br/>\r\n");
				}catch(e2){alert("e2");}			
				try{
					gid("dbg").innerHTML += this.element.innerHTML.replace(/\</g,"<br/>\r\n&lt;").replace(/\;/g,";<br/>\r\n\t");
				}catch(e){}			
			}
			this.move =function(dir){
				if(this.to){
					clearTimeout(this.to);
				}
				if(!this.to){
					this.dirr = dir;
					this.add = this.addInit;
				}
				this.to = setTimeout(function (){myOfaat.move(dir);},this.fps);
				if(dir != this.dirr){
					clearTimeout(this.to);
					this.dirr = dir;
					this.to = setTimeout(function (){myOfaat.move(dir);},this.fps);
				}
				for(var f in this.frms){
					this.frms[f].move(dir);
				}
				if(this.afterMove != false){
					this.afterMove();
				}
				this.afterMove = false;
				var lastStep = pInt(this.frms[0].element.style.width) - this.t3;
				if(Math.abs(lastStep) < this.add){
					if(lastStep != 0){
						clearTimeout(this.to);
						var tmp = this.add;
						if(dir == "right"){
							this.add = lastStep * (-1);
						}else{
							this.add = lastStep;
						}
						this.move(dir);
						this.add = tmp;
					}
					clearTimeout(this.to);
					this.dirr = false;
					this.to = false;
				}else{
				//	this.add *= 1.03; //= this.addInit + Math.sqrt(Math.abs(lastStep));
				}
				//this.dbg();
			}
			//this.dbg();
		}
		
		function compareBoundingRecatanles(outer,inner,diffs){
			var bo = outer.getBoundingClientRect();
			var bi = inner.getBoundingClientRect();
			diffs['left'] = bi.left - bo.left;
			diffs['right'] = bo.right - bi.right;
			if(bi.left >= bo.left && bi.right <= bo.right){
				return "in";
			}else if(bi.left < bo.left && bi.right > bo.right){
				return "out";
			}else if(bi.left >= bo.left && bi.right > bo.right){
				return "right";
			}else if(bi.left < bo.left && bi.right <= bo.right){
				return "left";
			}else{
				return "Huh?";
			}
		}
