var ie=(document.all&&document.getElementById)?1:0;
var ns=(!document.all&&document.getElementById)?1:0;

var onLoadFuncs = new Array();

var imgArr = new Array();
var imgIndx = 0;
var numImgs = 0;
var linkId = "banner_link";
var imgId = "banner_img";
var bufferId = "banner_img_buffer";
var opacity = 99;

var debugContainer;

var NONE = 0;
var UP = 1;
var DOWN = 2;
var LEFT = 3;
var RIGHT = 4;

var horizontalMovement = 0;
var horizontalMovementAmount = 0;

var verticalMovement = 0;
var verticalMovementAmount = 0;

function objImage(url, src, alt, horizontalMovement, horizontalMovementAmount, verticalMovement, verticalMovementAmount, flipTime, fadeTime){
	this.url = url;
	this.src = src;
	this.alt = alt;
	this.horizontalMovement = horizontalMovement;
	this.horizontalMovementAmount = horizontalMovementAmount;
	this.verticalMovement = verticalMovement;
	this.verticalMovementAmount = verticalMovementAmount;
	this.flipTime = flipTime;
	this.fadeTime = fadeTime;
}

function ceilingTest(value){
	return (value <= numImgs) ? value : 0;
}

function doFade(){
	fade();
}

function rotate(obj){
	imgIndx = ceilingTest(++imgIndx);

	var tmp = bufferId;
	bufferId = imgId;
	imgId = tmp;

	var mainImg = document.getElementById(imgId);
	var bufferImg = document.getElementById(bufferId);

	mainImg.style.zIndex = 2;
	bufferImg.style.zIndex = 1;

	setOpacity(bufferId, 99);

	var link = document.getElementById(linkId);
	if (isSet(link)){
		link.href = imgArr[imgIndx].url;
	}

	rotateBuffer();

	setTimeout("doFade()", imgArr[imgIndx].flipTime);
}


function rotateBuffer(){
	var indx = ceilingTest(imgIndx+1);
	var img = document.getElementById(bufferId);

	setImagePosition(img, imgArr[indx]);
	img.src = imgArr[indx].src;
	img.alt = imgArr[indx].alt;
}

function setImagePosition(obj, img){
	obj.style.top = img.verticalMovement == UP ? "0px" : "-" + img.verticalMovementAmount + "px" ;
	obj.style.left = img.horizontalMovement == LEFT ? "0px" : "-" + img.horizontalMovementAmount + "px" ;
}

function setOpacity(id, value){
	opacity = value;
	var obj = document.getElementById(id);
	obj.style.filter = "alpha(opacity=" + opacity + ")";
	obj.style.opacity = opacity / 100;
}

function setTop(percentDone){
	if (imgArr[imgIndx].verticalMovement == NONE){
		return null;
	}

	var scale = imgArr[imgIndx].verticalMovementAmount / 100;
	var top;

	if (imgArr[imgIndx].verticalMovement == UP){
		top = (100 - percentDone) * scale;
		top -= top * 2;
	}else{
		top = 0 - (percentDone * scale);
	}

	return top;
}

function setLeft(percentDone){
	var obj = document.getElementById(imgId);

	if (imgArr[imgIndx].horizontalMovement == NONE){
		return null;
	}

	var scale = imgArr[imgIndx].horizontalMovementAmount / 100;
	var left;

	if (imgArr[imgIndx].horizontalMovement == LEFT){
		left = (100 - percentDone) * scale;
		left -= left * 2;
	}else{
		left = imgArr[imgIndx].horizontalMovement - (percentDone * scale);	
	}

	return left;
}

function fade(){
	var top = opacity == 1 ? imgArr[imgIndx].horizontalMovementAmount : setTop(opacity);
	var left = opacity == 1 ? imgArr[imgIndx].verticalMovementAmount : setLeft(opacity);
	var obj = document.getElementById(imgId);


	if (top != null){
		obj.style.top = top + "px";
	}

	if (left != null){
		obj.style.left = left + "px";
	}

	setOpacity(imgId, --opacity);
	if (opacity > 0){
		setTimeout("fade()", imgArr[imgIndx].fadeTime);
		return;
	}

	rotate();
}

function debug(str, append){
	if (isSet(debugContainer)){
		if (isSet(append)){
			debugContainer.innerHTML = str + "<br/>" + debugContainer.innerHTML;
		}else{
			debugContainer.innerHTML = str + "<br/>";	
		}
	}
}

function preload(){
	var imgs = new Array();
	for (var i=0; i<imgArr.length; i++){
		loadImage(imgArr[i].src);
	}
}

function loadImage(src){
	var img = new Image();
	img.src = src;
}

window.onload = function(){
	debugContainer = document.getElementById("debug");
	numImgs = imgArr.length-1;
	setOpacity(imgId, 99);

	if (imgArr.length > 1){
		setTimeout("fade()", imgArr[imgIndx].flipTime);
	}

	var buffer = document.getElementById(bufferId);
	buffer.style.display = "block";
	setImagePosition(buffer, imgArr[ceilingTest(imgIndx+1)]);

	for (i=0; i<onLoadFuncs.length; i++){
		onLoadFuncs[i]();
	}
}



/////////////////////////////////////////////////
//					DOM Utils
function createElement(typ){
	return(document.createElement(typ))
};

function removeElement(obj){
	if(ie){
		obj.removeNode(1);
	}else if(ns){
		obj.parentNode.removeChild(obj);
	}
}


function appendChild(obj,child){
	obj.appendChild(child);
};



/////////////////////////////////////////////////
//					General Utils
function isSet(val){
	val+="";
	if(val=="undefined"||val=="null"){
		return(0);
	}
	return(1);
}