
temp =[];
tempobj3=[];

bannerInitTime=[];
bannerFadeLocks=[];

slideshow_width = [];
slideshow_height = [];
pause = [];
speed = [];
fadeimages = [];
fadedelays = [];
bannerBehavior = [];
bannerUniqueToPage = [];
bannerDontShow = [];
prevBannerDontShow = [];
bannerControllers = [];
BAN_STACK=[];
BAN_STACK[0]=[];
BAN_STACK[0][0]=[];
BAN=[];

function setOpacity(i,step,obj,val){
	if(obj.filters){
		obj.filters.alpha.opacity=val;
	}else if(obj.style.MozOpacity){
		obj.style.MozOpacity=val;
	}else{
		obj.style.opacity=val;
	}
}

function setClip(i,step,obj,val,val2,t){

	// rect (top, right, bottom, left)

	var h = slideshow_height[i];
	var w = slideshow_width[i];

	if(t==3){
		r = Math.floor(w * (step/100));
		l = 0;
	}else if(t==4){
		r = w;
		l = w - Math.floor(w * (step/100));
	}else if(t==5){
		var g = Math.floor(w / 10);
		l = g * val;
		r = l + Math.floor(g * (step/100));	
	}

	//alert((step/100));

	obj.style.clip = "rect(0px,"+r+"px,"+h+"px,"+l+"px)";

}

function doBannerTransition(i,cur,dir){

	var t = bannerBehavior[i];

	if(t == 0 || t == 1 || t == 2){
		setOpacity(i,BAN['P'][i][dir],BAN['C'][i][dir],(BAN['P'][i][dir]/BAN.divisor)); // The problem here is the z-index... and a lack of a pre-loader...
		setOpacity(i,BAN['P'][i][cur],BAN['C'][i][cur],(BAN['P'][i][cur]/BAN.divisor));
		return;
	}

	if(t == 3){
		setClip(i,BAN['P'][i][cur],BAN['C'][i][cur],(BAN['P'][i][cur]/BAN.divisor),0,t);
	}else if(t == 4){
		setClip(i,BAN['P'][i][cur],BAN['C'][i][cur],(BAN['P'][i][cur]/BAN.divisor),0,t);	
	}else if(t == 5){
		for(var y = 0; y < 10; y++){
			setClip(i,BAN['P'][i][cur],BAN['C'][i][cur].childNodes[y],y,0,t);		
		}	
	}

}


function prepTransition(i,dir,cur){

	var t = bannerBehavior[i];

	// pr("prepTransition i("+i+") dir("+dir+") cur("+cur+") t("+t+")");

	if(t == 0 || t == 1){
		setOpacity(i,0,BAN['C'][i][dir],0);
		setOpacity(i,0,BAN['C'][i][cur],100);
		return;
	}

	if(t == 2){ // cross fade
		setOpacity(i,0,BAN['C'][i][dir],0);
		setOpacity(i,0,BAN['C'][i][cur],100);	
		return;	
	}

	if(t == 3 || t == 4){
		setOpacity(i,0,BAN['C'][i][dir],100);
		setOpacity(i,0,BAN['C'][i][cur],100);
		setClip(i,100,BAN['C'][i][dir],100,0,t);
		setClip(i,100,BAN['C'][i][cur],100,0,t);
	}else if(t == 5){

		setClip(i,100,BAN['C'][i][dir],100,0,3);
		setOpacity(i,0,BAN['C'][i][dir],100);

		BAN['C'][i][dir].childNodes[0].style.display = 'block';
		BAN['C'][i][dir].childNodes[0].style.position = 'absolute';
		BAN['C'][i][dir].childNodes[0].style.overflow = 'hidden';

		setClip(i,100,BAN['C'][i][cur].childNodes[0],0,0,t);
		setOpacity(i,0,BAN['C'][i][cur],100);

		BAN['C'][i][cur].childNodes[0].style.display = 'block';
		BAN['C'][i][cur].childNodes[0].style.position = 'absolute';
		BAN['C'][i][cur].childNodes[0].style.overflow = 'hidden';

		var c1 = BAN['C'][i][cur].childNodes[0].className;
		var clone = (c1 == 'banner')? BAN['C'][i][cur].childNodes[0].cloneNode(true): BAN['C'][i][cur].childNodes[0].childNodes[0].cloneNode(true);

		for(var y = 1; y < 11; y++){
			var newNode = clone.cloneNode(true);
			newNode.id = 'banCtrl-'+y;
			newNode.style.position = 'absolute';
			newNode.style.top = "0px";
			BAN['C'][i][cur].appendChild(newNode);			
			setClip(i,100,BAN['C'][i][cur].childNodes[y],y,0,t);
		}
	}
}

function resetBanController(x){

	var pos = BAN['I'][x];
	var conCon = document.getElementById("banCtrl"+x);
	var l = conCon.childNodes[0].childNodes.length-1;
	var clone = conCon.childNodes[0].childNodes[1].cloneNode(true);

	for(var y=1; y <= l; y++){
		conCon.childNodes[0].removeChild(conCon.childNodes[0].childNodes[1]);
	}

	var l = BAN['i'][x].length;
	for(var y=l; y > 0; y--){
		var newNode = clone.cloneNode(true);
		newNode.id = 'banCtrl-'+y;
		newNode.className = 'banCtrlA';
		conCon.childNodes[0].appendChild(newNode);
	}

}

function onloadBan(i,x){

	BAN['imgL'][i][x] = true;

	// alert("onloadBan("+i+") ("+x+")");
}


function insertimage(obj,x,i){

	var t = bannerBehavior[i];

	var fi = BAN['i'][i][x];

	if(typeof(fi) == 'undefined'){
		distro_error("BAN['i']["+i+"]["+x+"]");
	}

	// pr("IMAGE("+fi[0]+")");

	var is_link = (fi[1]!='')? 1: 0;
	var tc = (is_link)? '<a href="'+fi[1]+'" target="'+fi[2]+'">' : '';
	var w = (fi[3] > 0)? ' width="'+fi[3]+'px" ': '';
	var h = (fi[4] > 0)? ' height="'+fi[4]+'px" ': '';
	var r = (fi[5] > 0)? ' rel="nofollow" ': '';
	var c = (fi[6] > 0 && fi[7] > 0 && fi[8] > 0)? ' onclick="try{return callTransition(this,0,0,'+fi[7]+','+fi[8]+',0,0,0);}catch(e){}" ': '';
	tc += '<img class="banner" "'+w+'" "'+c+'" "'+h+'" "'+r+'" src="'+fi[0]+'" onload="onloadBan('+i+','+x+')" border="0">';
	tc = (is_link)? tc+'</a>' : tc;

	if(typeof(obj.childNodes[0]) != 'undefined'){
		var img = (typeof(obj.childNodes[0].childNodes[0]) != 'undefined')? obj.childNodes[0].childNodes[0]: obj.childNodes[0];
		if(img.src == fi[0] && t != 5){
			// pr("LOAD RETURN ("+img.src+"=="+fi[0]+")");
			return;
		}
	}

	BAN['imgL'][i][x] = false;

	obj.innerHTML = tc;
}

function fadepic(i){

	var dir = BAN['D'][i];
	var cur = (dir)? 0: 1;

	if(typeof(BAN['imgL'][i][BAN['I'][i]]) == 'undefined' || !BAN['imgL'][i][BAN['I'][i]]){
		return;	
	}

	// If I do a wipe... then make it simple... and just duplicate the overlaying image several times... and wipe... no "HTML 5" required...

	if(BAN['P'][i][dir]<100){
		BAN['P'][i][dir]+=10;
		if(BAN['P'][i][cur]>0){
			BAN['P'][i][cur]-=10;
		}

		doBannerTransition(i,cur,dir);

		return;
	}

	clearInterval(temp[i]);

	var show = (parseInt(bannerDontShow[i]))? 0: 1;
	
	if(show){
		tempobj3[i] = setTimeout('rotateimage('+i+')',pause[i]);
	}

	bannerFadeLocks[i] = false;

	setController(i);

}

function setController(i){

	if(bannerControllers[i] == 1){
		var num = parseInt(BAN['I'][i]);
		var l = BAN['i'][i].length;
		num = ((num+2) > l)? 1: num+2;
		var k = 'banCtrl-'+ num;
		var p = document.getElementById(k).className = 'banCtrlB';
	}

}


function rotateimage(i){

	if(bannerFadeLocks[i]){
		return;
	}

	var t = bannerBehavior[i];

	if(bannerControllers[i] == 1){
		// reset all the controllers...
		for(var z in BAN['i'][i]){
			var k = 'banCtrl-' + (parseInt(z)+1);
			var p = document.getElementById(k).className = 'banCtrlA';
		}
	}

	//	bannerInitTime[i] = Date.now(); // this is not supported in IE 7

	bannerFadeLocks[i] = true;

	var dir = BAN['D'][i] = (BAN['D'][i])? 0: 1;

	var cur = (dir)? 0: 1;

	//pr("dir("+dir+") cur("+cur+")");

	BAN['C'][i][dir].style.zIndex = 10;
	BAN['C'][i][cur].style.zIndex = 20;

	BAN['I'][i]=(BAN['I'][i]<BAN['i'][i].length-1)? BAN['I'][i]+1 : 0;

	//pr("INSERT BAN['C'][i][dir]("+BAN['C'][i][dir]+") BAN['I'][i]("+BAN['I'][i]+") i("+i+")");

	insertimage(BAN['C'][i][dir],BAN['I'][i],i);

	BAN['P'][i][dir] = 0;

	prepTransition(i,dir,cur);

	BAN['C'][i][dir].style.visibility = 'visible';

	temp[i]=setInterval("fadepic("+i+")",speed[i]);

}

function banCtrl(obj,no,instance){
	//alert('banControl no('+no+') instance('+instance+')');

	var lock = (bannerFadeLocks[instance])? 1: 0;

	if(!no){
		bannerFadeLocks[instance] = (lock)? 0: 1;
		var p = document.getElementById('banCtrlX-'+instance).style.backgroundPosition = (lock)? '-24px 0px': '-24px -18px';

		clearInterval(temp[instance]);
		clearTimeout(tempobj3[instance]);

		if(lock){
			rotateimage(instance);
		}
	}else{
		bannerFadeLocks[instance] = 0;		

		clearInterval(temp[instance]);
		clearTimeout(tempobj3[instance]);

		var s = obj.id.split("-");

		var no = s[1];

		no = no - 3;

		if(no < 0){
			no = BAN['i'][instance].length + no;
		}

		BAN['I'][instance] = no;

		rotateimage(instance);
	}

	obj.focus();
	return false;
}


function startit(clear,caller_index,caller_id){

	var mod = MODS_LOADED['H'][RECORD_INDEX][RECORD_ID];



	for(var x in mod['g']){
		bannerBehavior[x]=parseInt(mod['g'][x]);
	}

	for(var x in mod['u']){
		bannerUniqueToPage[x]=parseInt(mod['u'][x]);
	}

	for(var x in mod['x']){
		prevBannerDontShow[x] = parseInt(bannerDontShow[x]);
		bannerDontShow[x]=parseInt(mod['x'][x]);
	}

	for(var x in mod['c']){
		bannerControllers[x]=parseInt(mod['c'][x]);
	}

	// I NEED SOME SORT OF STACK REFRENCE...
	// IF THERE IS NO INSERT INTO... THEN LOADED BANNERS CANNOT DISPLAY...

	if(!clear){

		slideshow_height = [];
		slideshow_width = [];
		pause = [];
		speed = [];
		fadedelays = [];
		BAN['C'] = [];
		BAN['D'] = [];
		BAN['P'] = [];
		BAN['CON'] = [];
		BAN['COV'] = [];
		BAN['imgL'] = [];
		BAN['i'] = [];

		for(var x in mod['h']){

			slideshow_height[x]=mod['h'][x];
			slideshow_width[x]=mod['w'][x];
			pause[x]=mod['p'][x];
			speed[x]=mod['s'][x];
			fadedelays[x]=mod['d'][x];
			
			var aC = document.getElementById("canvas"+x+"a");
			var bC = document.getElementById("canvas"+x+"b");

			if(aC && aC.filters){
				BAN.divisor = 1;
			}else if(aC && aC.style.MozOpacity){
				BAN.divisor = 101;
			}else{
				BAN.divisor = 100;
			}

			BAN['C'][x] = [];
			BAN['C'][x][0] = bC;
			BAN['C'][x][1] = aC;
			BAN['D'][x] = 0;
			BAN['I'] = [];
			BAN['I'][x] = 0;
			BAN['P'][x] = [];
			BAN['P'][x][0] = 100;
			BAN['P'][x][1] = 1;
			BAN['CON'][x] = document.getElementById("banCov"+x);
			BAN['COV'][x] = document.getElementById("banCon"+x);
			BAN['imgL'][x] = [];
			BAN['i'][x] = [];
		}

		for(x in mod){
			BAN[x] = mod[x];
		}
	}

	for(var x in bannerDontShow){

		var show = (parseInt(bannerDontShow[x]))? 0: 1;

		if(typeof(BAN['CON'][x]) == 'undefined' || !BAN['CON'][x]){ // in some cases the mod is loading but the template is not set to receive it.
			continue;
		}

		var l = (typeof(BAN['i'][x]) == 'undefined')? 0: BAN['i'][x].length-1;

		if(show){
			BAN['CON'][x].style.display = 'block';		
			BAN['COV'][x].style.display = 'block';

		}else{
			BAN['CON'][x].style.display = 'none';		
			BAN['COV'][x].style.display = 'none';

			BAN['P'][x][BAN['D'][x]] = 0;
			setOpacity(x,0,BAN['C'][x][BAN['D'][x]],0);
			BAN['C'][x][BAN['D'][x]].style.zIndex = 0;	
		}

		// if it is an insert into rotation... then it goes into the core stack...
		// else it goes into its own private stack...

		if(typeof(BAN_STACK[RECORD_INDEX]) == 'undefined'){
			BAN_STACK[RECORD_INDEX] = [];
		}

		if(typeof(BAN_STACK[RECORD_INDEX][RECORD_ID]) == 'undefined'){
			BAN_STACK[RECORD_INDEX][RECORD_ID] = [];
		}

		var S_IND = RECORD_INDEX;
		var S_ID = RECORD_ID;
		if(bannerUniqueToPage[x]){
			var S_IND = 0;
			var S_ID = 0;
		}

		if(typeof(BAN_STACK[S_IND][S_ID]['i']) == 'undefined'){
			BAN_STACK[S_IND][S_ID]['i'] = [];
		}

		if(typeof(BAN_STACK[S_IND][S_ID]['i'][x]) == 'undefined'){
			BAN_STACK[S_IND][S_ID]['i'][x] = [];
		}

		for(var y in mod['i'][x]){
			BAN_STACK[S_IND][S_ID]['i'][x][y] = mod['i'][x][y];
		}

		BAN['i'][x] = BAN_STACK[S_IND][S_ID]['i'][x];

		if(show && bannerControllers[x]){
			resetBanController(x);
		}

		// if there is a controller... I need to reset it...

		// I SHOULD BE CLEARING ALL TIME OUTS AND RELEASING OR SETTING LOCKS... I DEFINATELY BURNT OUT SOMEWHERE AROUND HERE A WHILE BACK...

		clearTimeout(tempobj3[x]);		

		if(!show){
			continue;
		}

		if(clear){

			// THIS IS ALL THE LOGIC FOR LOADING ITEMS SPECIFIC TO THE PAGE... IT PROBABLY LACKS A MASTER ARRAY...

			// I AM ALWAYS RESETTING...

			var is_reset = false;
			if(bannerUniqueToPage[x] || typeof(BAN['i'][x]) == 'undefined'){
				// alert("BANNER RESET("+x+") UNIQUE("+bannerUniqueToPage[x]+")");
				is_reset = true;
				BAN['i'][x]=[];
				//clearTimeout(tempobj3[x]);
			}

			for(var y in mod['i'][x]){
				var is_set = 0;
				for(var z in BAN['i'][x]){
					if(BAN['i'][x][z][0] == mod['i'][x][y][0]){
						is_set = 1;
						break;
					}
				}
				if(!is_set){
					BAN['i'][x][y]=mod['i'][x][y];
				}
			}

			if(BAN['i'][x].length < 2){

				// clearTimeout(tempobj3[x]);

				// IT MUST BE INSERTED... BUT... I NEED TO FIX THE DIRECTION...

				insertimage(BAN['C'][x][BAN['D'][x]],0,x);

				BAN['P'][x][BAN['D'][x]] = 100;
				setOpacity(x,100,BAN['C'][x][BAN['D'][x]],100);
				BAN['C'][x][BAN['D'][x]].style.zIndex = 100;

				bannerFadeLocks[x] = false;

				continue;

			}else if(is_reset){

				if(bannerBehavior[x] != 2){
					BAN['I'][x] = 0;
				}

			}else{ // the banner may have been closed... and hidden... now it needs to be visible

				// Obviously Temporary... Hard reset to opacity in case it was previously hidden...

				BAN['C'][x][0].style.visibility = 'visible';
				BAN['C'][x][1].style.visibility = 'visible';

				//setOpacity(x,100,BAN['C'][x][0],100);
				//setOpacity(x,100,BAN['C'][x][1],100);
				// SO... IF IT WAS PREVIOUSLY HIDDEN... I WANT IT TO FADE IN IMMEDIATELY??? NO....
				// I WANT IT TO SHOW IMMEDIATELY AND DELAY THE TRANSITION... !!!! YES !!!!
			}

			if(bannerBehavior[x] == 2 || bannerBehavior[x] == 1 || bannerBehavior[x] == 0){
				//clearTimeout(tempobj3[x]);
				var thisPause = 200;

				if(bannerBehavior[x] == 2 && parseInt(prevBannerDontShow[x]) == 1){

					thisPause = pause[x];

					var dir = (BAN['D'][x])? 1: 0;

					setOpacity(x,100,BAN['C'][x][dir],100);
					
					setController(x);

					insertimage(BAN['C'][x][dir],BAN['I'][x],x);

				}

				tempobj3[x] = setTimeout('rotateimage('+x+')',thisPause);
			}else{
				//clearTimeout(tempobj3[x]);
				var thisPause = (is_reset)? 200: pause[x];
				tempobj3[x] = setTimeout('rotateimage('+x+')',thisPause);
			}

		}else{

			BAN['I'][x] = l;

			var t = bannerBehavior[x];

			if(t == 2 || t == 3 || t == 4 || t == 5){

				tempobj3[x] = setTimeout('rotateimage('+x+')',pause[x]);

			}else{

				rotateimage(x);
			
			}
		}
	}

}




