var rate;
var middleRate = 1.5;

var topDivSize = 173;
var middleDivSize = 173;
var bottomDivSize = 465;
var containerSize = 533;

var freq = 15;

var linkArray = new Array();

//Check browser for IE
var detect = navigator.userAgent.toLowerCase();
var ie = detect.indexOf('msie') + 1;
if(!ie){rate = 5;}else{rate=1.5;freq = 15}

var currentDiv = '';
var sliderIsActive = false;
var showDivId = '';
var showAllDivId = '';

PeriodicalExecuter.prototype.registerCallback = function() {
    this.intervalID = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
}

PeriodicalExecuter.prototype.stop = function() {
    clearInterval(this.intervalID);
}

function checkElement(e){
		if(currentDiv == ''){
			return false;
		}

		var targ;
			if (!e) var e = window.event;
			if (e.target) targ = e.target;
			else if (e.srcElement) targ = e.srcElement;
			if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;

			if(targ == '')return false;

			if(targ.id){
				if(targ.id.length > 3 && targ.id.indexOf('hs_')!=0){
					showAllDiv('hs_text1', topDivSize, 'hs_text2', middleDivSize, containerSize);
					$('hs_header1').onmouseover = function onmouseover(event) {};
					$('hs_header2').onmouseover = function onmouseover(event) {};
					$('hs_header3').onmouseover = function onmouseover(event) {};
				}
			} else {
				showAllDiv('hs_text1', topDivSize, 'hs_text2', middleDivSize, containerSize);
				$('hs_header1').onmouseover = function onmouseover(event) {};
                                $('hs_header2').onmouseover = function onmouseover(event) {};
                                $('hs_header3').onmouseover = function onmouseover(event) {};
			}
}

var modCount = new Array();
modCount[0] = 0;
modCount[1] = 0;
modCount[2] = 0;


function timerFunction(){

	var period1 = (modCount[0]++%4)+1;
	var period2 = (modCount[1]++%4)+5;
	var period3 = (modCount[2]++%4)+9;

	fade('hs_image1', 'hs_text1', period1, 1, 4, 0, $('hs_text1').style.height);
	setTimeout('fade(\'hs_image2\', \'hs_text2\', ' + period2 + ', 5, 8, 1, \'' + $('hs_text2').style.height + '\')',800);
	setTimeout('fade(\'hs_image3\', \'hs_text3\', ' + period3 + ', 9, 12, 2, \'' + $('hs_text3').style.height + '\')',1600);
}

var timer = new PeriodicalExecuter(timerFunction, 4);


function rotateSmallImages(period, min, max, id){
		var value1 = ++period;
		var value2 = ++period;
		var value3 = ++period;

		if(value1 > max){
			value1 = min;
			value2 = min+1;
			value3 = min+2;
		} else if(value2 > max){
			value2 = min;
			value3 = min+1;
		} else if(value3 > max){
			value3 = min;
		}

	var smCount = 1;
	var linkValue = ('hs_link' + id) + smCount;
	var linkText = ('hs_linktext' + id) + smCount;
	var smValue = ('hs_textimage' + id) + smCount++;

	$(linkValue).href = linkArray[parseInt(id + "" + value1 + '1')];
	$(linkText).innerHTML = linkArray[parseInt(id + "" + value1 + '2')];
	$(smValue).src = 'imx/portal/' + value1 + '_sm.jpg';

	linkValue = ('hs_link' + id) + smCount;
	linkText = ('hs_linktext' + id) + smCount;
	smValue = ('hs_textimage' + id) + smCount++;

	$(linkValue).href = linkArray[parseInt(id + "" + value2 + '1')];
	$(linkText).innerHTML = linkArray[parseInt(id + "" + value2 + '2')];
	$(smValue).src = 'imx/portal/' + value2 + '_sm.jpg';

	linkValue = ('hs_link' + id) + smCount;
	linkText = ('hs_linktext' + id) + smCount;
	smValue = ('hs_textimage' + id) + smCount++;

	$(linkValue).href = linkArray[parseInt(id + "" + value3 + '1')];
	$(linkText).innerHTML = linkArray[parseInt(id + "" + value3 + '2')];
	$(smValue).src = 'imx/portal/' + value3 + '_sm.jpg';
}


function fade(elementForImage, elementForBR, period, min, max, id, height){

	if(sliderIsActive || currentDiv != ''){
		modCount[id]--;
		return;
	}

	var current = period;
	var next = ++period;
	var nextBack = ++period;

	if(next > max && nextBack > max){
		next = min;
		nextBack = min+1;
	} else if(nextBack > max){
		nextBack = min;
	}

	rotateSmallImages(next, min, max, (id+1));
	new Effect.Opacity(elementForImage, {duration:1.5, from:1.0, to:0.0, afterFinish: function() {
												$(elementForImage).src = 'imx/portal/' + next + '_lg.jpg';
												$(elementForImage).setOpacity('1');
												$(elementForBR).style.backgroundImage = 'url(imx/portal/' + nextBack + '_lg.jpg)';
											}
								}
						);
	$('hs_link' + (id+1)).href = linkArray[parseInt((id+1) + "" + next + '1')];
}

function showDiv(div1, size1, div2, size2, container_size, id){

	if(!sliderIsActive && currentDiv != id){
	
		//stop fades
		sliderIsActive = true;
		timer.stop();
		
		currentDiv = id;

		$('hs_header1').onmouseover = function onmouseover(event) {showDiv('hs_text1', bottomDivSize, 'hs_text2', 0, containerSize, 1);};
                $('hs_header2').onmouseover = function onmouseover(event) {showDiv('hs_text2', bottomDivSize, 'hs_text1', 0, containerSize, 2);};
                $('hs_header3').onmouseover = function onmouseover(event) {showDiv('hs_text2', 0, 'hs_text1', 0, containerSize, 3);};

		var isPX1 = true;
		var isPX2 = true;
		
		var div1Size;
		var div2Size;

		var diff1;
		var diff2;

		if($(div1).style.height.indexOf('px') > -1){
			div1Size = 1*$(div1).style.height.substring(0, $(div1).style.height.length-2);
			diff1 = Math.abs(div1Size-size1);
		} else {
			div1Size = 1*$(div1).style.height.substring(0, $(div1).style.height.length-1);
			diff1 = Math.abs(div1Size-((size1/container_size)*100));
			isPX1 = false;
		}
		
		if($(div2).style.height.indexOf('px') > -1){
			div2Size = 1*$(div2).style.height.substring(0, $(div2).style.height.length-2);
			diff2 = Math.abs(div2Size-size2);
		} else {
			div2Size = 1*$(div2).style.height.substring(0, $(div2).style.height.length-1);
			diff2 = Math.abs(div2Size-((size2/container_size)*100));
			isPX2 = false;
		}

		var multiplier1=1;
		var multiplier2=1;
		
		var multiplier1 = (diff2 == 0) ? 1 : (diff1/diff2);
		var multiplier2 = (diff1 == 0) ? 1 : (diff2/diff1);
		
		if(multiplier1<1)multiplier1=1;
		if(multiplier2<1)multiplier2=1;

		var changeRate = rate;

		if((div1Size == 0 || div2Size == 0 ) && size1==0 && size2==0){
			//3 going up alone
			changeRate = rate*middleRate;
			
		} else if((div1Size == 0 && div2Size == 0 )){
			//3 going down alone
			changeRate = rate*middleRate;
			if(size1>0){
				$(div1).style.display = '';
			} else {
				$(div2).style.display = '';
			}
		} else if(div1Size == 0 && size1 != 0 && div2Size != 0 && size2 == 0){
			//1 or 2 are moving full
			changeRate = rate*middleRate;
			if(size1>0){
				$(div1).style.display = '';
			} else {
				$(div2).style.display = '';
			}
		}
		
		if(isPX1){
			showDivId = setInterval('changeHeight(\'' + div1 + '\', ' + size1 + ', ' + multiplier1 + ', \'' + div2 + '\', ' + size2 + ', ' + multiplier2 + ', ' + changeRate +')',freq);
		}else{
			showDivId = setInterval('changeHeightPerc(\'' + div1 + '\', ' + size1 + ', ' + multiplier1 + ', \'' + div2 + '\', ' + size2 + ', ' + multiplier2 + ', ' + container_size + ')',freq);
		}
	}
}

function showAllDiv(div1, size1, div2, size2, container_size){

	if(sliderIsActive && currentDiv != '' && showAllDivId == ''){
		showAllDivId = setInterval('showAllDiv(\'' + div1 + '\', ' + size1 + ', \'' + div2 + '\', ' + size2 + ', ' + container_size + ')',freq);
		return;
	} else if(sliderIsActive){
		return;
	}
	
	sliderIsActive = true;
	clearInterval(showAllDivId);
	showAllDivId = '';
	currentDiv = '';

	var isPX1 = true;
	var isPX2 = true;

	var div1Size;
	var div2Size;

	var diff1;
	var diff2;

	if($(div1).style.height.indexOf('px') > -1){
		div1Size = 1*$(div1).style.height.substring(0, $(div1).style.height.length-2);
		diff1 = Math.abs(div1Size-size1);
	} else {
		div1Size = 1*$(div1).style.height.substring(0, $(div1).style.height.length-1);
		diff1 = Math.abs(div1Size-((size1/container_size)*100));
		isPX1 = false;
	}

	if($(div2).style.height.indexOf('px') > -1){
		div2Size = 1*$(div2).style.height.substring(0, $(div2).style.height.length-2);
		diff2 = Math.abs(div2Size-size2);
	} else {
		div2Size = 1*$(div2).style.height.substring(0, $(div2).style.height.length-1);
		diff2 = Math.abs(div2Size-((size2/container_size)*100));
		isPX2 = false;
	}
	
	var multiplier1 = (diff2 == 0) ? 1 : (diff1/diff2);
	var multiplier2 = (diff1 == 0) ? 1 : (diff2/diff1);
		
	if(multiplier1<1)multiplier1=1;
	if(multiplier2<1)multiplier2=1;

	var changeRate = rate;

	$(div1).style.display = '';
	$(div2).style.display = '';

	if(isPX1){
		showDivId = setInterval('changeHeight(\'' + div1 + '\', ' + size1 + ', ' + multiplier1 + ', \'' + div2 + '\', ' + size2 + ', ' + multiplier2 + ', ' + changeRate + ')',freq);
	}else{
		showDivId = setInterval('changeHeightPerc(\'' + div1 + '\', ' + size1 + ', ' + multiplier1 + ', \'' + div2 + '\', ' + size2 + ', ' + multiplier2 + ', ' + container_size + ')',freq);
	}

	timer = new PeriodicalExecuter(timerFunction, 5);
}

function changeHeight(div1 ,size1, multiplier1, div2, size2, multiplier2, changeRate){
	
	var div1change;
	var div2change;
	
	var div1IsDone = false;
	var div2IsDone = false;
	
	div1 = $(div1);
	div2 = $(div2);
	
	var div1Size;
	var div2Size;

	if(div1.style.height.indexOf('px') > -1){
		div1Size = 1*div1.style.height.substring(0, div1.style.height.length-2);
	} else {
		div1Size = 1*div1.style.height.substring(0, div1.style.height.length-1);
	}

	if(div2.style.height.indexOf('px') > -1){
		div2Size = 1*div2.style.height.substring(0, div2.style.height.length-2);
	} else {
		div2Size = 1*div2.style.height.substring(0, div2.style.height.length-1);
	}

	if(div1Size <= size1){
		var increase = div1Size + changeRate*multiplier1;
		
		if(increase >= size1){
			div1change = size1 + 'px';
			div1IsDone = true;
		} else {
			div1change = increase + 'px';
		}
	} else {
		var decrease = div1Size - changeRate*multiplier1;
		if(decrease <= size1){
			div1change = size1 + 'px';
			div1IsDone = true;
			
		} else {
			div1change = decrease + 'px';
		}
	}

	if(div2Size <= size2){
		var increase = div2Size + changeRate*multiplier2;
		
		if(increase >= size2){
			div2change = size2 + 'px';
			div2IsDone = true;
		} else {
			div2change = increase + 'px';
		}
	} else {
		var decrease = div2Size - changeRate*multiplier2;
		if(decrease <= size2){
			div2change = size2 + 'px';
			div2IsDone = true;
			
		} else {
			div2change = decrease + 'px';
		}
	}

	div1.style.height = div1change;
	div2.style.height = div2change;

	if(div1IsDone && div2IsDone){
		if(div1.style.height == '0px'){
			div1.style.display = 'none';
		}
		if(div2.style.height == '0px'){
			div2.style.display = 'none';
		}
		clearInterval(showDivId)
		showDivId = '';
		sliderIsActive = false;
	}
}

function changeHeightPerc(div1 ,size1, multiplier1, div2, size2, multiplier2, container_size){

	var div1TargetPerc = (size1/container_size)*100;
	var div2TargetPerc = (size2/container_size)*100;

	var div1change;
	var div2change;
	
	var div1IsDone = false;
	var div2IsDone = false;
	
	div1 = $(div1);
	div2 = $(div2);
	
	var div1Perc;
	var div2Perc;

	if(div1.style.height.indexOf('px') > -1){
		div1Perc = (1*div1.style.height.substring(0, div1.style.height.length-2))/container_size*100;
	} else {
		div1Perc = 1*div1.style.height.substring(0, div1.style.height.length-1);
	}

	if(div2.style.height.indexOf('px') > -1){
		div2Perc = (1*div2.style.height.substring(0, div2.style.height.length-2))/container_size*100;
	} else {
		div2Perc = 1*div2.style.height.substring(0, div2.style.height.length-1);
	}

	if(div1Perc <= div1TargetPerc){
		var increase = div1Perc + rate*multiplier1;
		
		if(increase >= div1TargetPerc){
			div1change = div1TargetPerc + '%';
			div1IsDone = true;
		} else {
			div1change = increase + '%';
		}
	} else {
		var decrease = div1Perc - rate*multiplier1;
		if(decrease <= div1TargetPerc){
			div1change = div1TargetPerc + '%';
			div1IsDone = true;
			
		} else {
			div1change = decrease + '%';
		}
	}

	if(div2Perc <= div2TargetPerc){
		var increase = div2Perc + rate*multiplier2;
		
		if(increase >= div2TargetPerc){
			div2change = div2TargetPerc + '%';
			div2IsDone = true;
		} else {
			div2change = increase + '%';
		}
	} else {
		var decrease = div2Perc - rate*multiplier2;
		if(decrease <= div2TargetPerc){
			div2change = div2TargetPerc + '%';
			div2IsDone = true;
			
		} else {
			div2change = decrease + '%';
		}
	}

	div1.style.height = div1change;
	div2.style.height = div2change;

	if(div1IsDone && div2IsDone){
		if(div1.style.height == '0%'){
			div1.style.display = 'none';
		}
		if(div2.style.height == '0%'){
			div2.style.display = 'none';
		}
		clearInterval(showDivId)
		showDivId = '';
		sliderIsActive = false;
	}
}

function LoadVscroll(){
	if(!ie){$('hs_text1').style.height = topDivSize + 'px';}else{$('hs_text1').style.height = topDivSize/containerSize*100 + '%';}
	$('hs_text1').style.display = '';
	if(!ie){$('hs_text2').style.height = middleDivSize + 'px';}else{$('hs_text2').style.height = middleDivSize/containerSize*100 + '%';}
	$('hs_text2').style.display = '';
	if(!ie){$('hs_text3').style.height = bottomDivSize + 'px';}else{$('hs_text3').style.height = '100%';}
	$('hs_text3').style.display = '';

	new Effect.Opacity('hs_image1', {duration:0.0, from:1.0, to:1.0});
	new Effect.Opacity('hs_image2', {duration:0.0, from:1.0, to:1.0});
	new Effect.Opacity('hs_image3', {duration:0.0, from:1.0, to:1.0});
}

