
// !!!!!!!!!!!!!!!!!!!!		ATTENTION		!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
//	the functions in this script depend on the following scripts
//
//		MBF_ObjectSrcParsing.js
//
//		MBF_BasicEvtHandling.js
//
//	they should be loaded into the page before this script
//
// !!!!!!!!!!!!!!!!!!!!		END ATTENTION	!!!!!!!!!!!!!!!!!!!!!!!!!!!!


function getAnimationSequenceData(targ, closeFrameIndex, sequence, seqType,frameRateIndex, imgFrames){
	
	//alert('gASD: getting animation sequence');
	
	if(targ.className.search(seqType) != -1){
		
		//alert('gASD: custom seq');
		
		var seqStart = targ.className.indexOf(seqType);
		closeFrameIndex = seqStart - 1;
		
		//alert('gASD: seqStart = ' + targ.className.charAt(seqStart+5));
		
		var seqEnd = targ.className.indexOf('}',seqStart + 5);
		var frameListString = targ.className.substring(seqStart + 5, seqEnd);
		
		//alert('gASD: frameListString ' + frameListString);
		
		var commaArray = new Array();
		var ca = 0;
		for(var c = 0; c < frameListString.length; c++){
			if(frameListString.charAt(c) == ','){
				commaArray.push(c);
			}
		}
		//alert('gASD: commaArray length ' + commaArray.length);
		
		if(commaArray.length > 0){
			sequence.push(frameListString.substring(0, commaArray[0]));
			
			//alert('gASD: first frame ' + sequence[0]);
			
			var aI = 1;
			for (var s = 1; s < commaArray.length; s++){
				sequence.push(frameListString.substring(commaArray[s-1] + 1, commaArray[s]));
				
				//alert('gASD: next frame ' + sequence[aI]);
				
				aI++
			}
			sequence.push(frameListString.substring(commaArray[commaArray.length - 1] + 1, seqEnd));
			
			//alert('gASD: last frame ' + sequence[aI]);
															   
		}
		else {
			sequence.push(frameListString);
		}
	}
	else {
		
		//alert('gASD: default sequnce');
		
		closeFrameIndex = targ.className.indexOf(']',frameRateIndex);
		
		for (var ds = 0; ds <= imgFrames; ds++){
			sequence[ds] = ds;
			
			//alert('gASD: frame at ' + ds + ' is ' + sequence[ds]);
		}
	}
	return closeFrameIndex;
}

//==============================================================================================================================
//	IMG EVENT HANDLERS
//==============================================================================================================================

//========================================================================================
//	IMG MOUSEOVER SIMPLE
//========================================================================================


function imgMouseover(evt){
	
	//for a basic mouseover we must first get th event structure and target
	
	var e = grabEvent(evt);
	
	var targ = getEventTargetForNav(e);
	//alert('iMO: mouseover for ' + targ.src);
	
	//check to see if this button maintains a links other buttons
	//and call their event handlers if necessary
	
	callLinkedMouseovers(targ);
	
	//clear mousedown animation
	
	stopMousedownAnim(targ);
	
	var imgName = getNameForObj(targ);
	//alert('iMO: ' + imgName);
	
	var imgLang = getLangForObj(targ);
	//alert('iMO: ' + imgLang);
	
	targ.setAttribute('src',imgName + imgLang + "over.png");
	//alert('iMO: ' + targ.src);
}

//========================================================================================
//	IMG MOUSEOVER ANIMATED
//========================================================================================

var currentMouseoverFrame = 0;
var imgMouseoverCycleOn = false;

function imgMouseoverAnimate(evt){
	
	var e = grabEvent(evt);
	
	var targ = getEventTargetForNav(e);
	//alert('iMOA: ' + targ.src);
	
	callLinkedMouseovers(targ);
	
	stopMousedownAnim(targ);
	
	var imgName = getNameForObj(targ);
	//alert('iMOA: name again ' + imgName);
	
	var imgLang = getLangForObj(targ);
	//alert('iMOA: ' + imgLang);
	
	var animIndex = targ.className.indexOf('overAnim');
	//alert('iMOA: ' + animIndex);
	
	var openFrameIndex = targ.className.indexOf('[',animIndex);
	var frameRateIndex = targ.className.indexOf('-',openFrameIndex);
	var imgFrames = targ.className.substring(openFrameIndex + 1, frameRateIndex);
	
	//alert('iMOA: ' + imgFrames);
	
	var sequence = new Array();
	var closeFrameIndex = getAnimationSequenceData(targ, closeFrameIndex, sequence, 'oSeq', frameRateIndex, imgFrames); 
	
	//alert('iMOA: close frame index ' + closeFrameIndex);
	
	var frameRate = targ.className.substring(frameRateIndex + 1, closeFrameIndex);
	//alert('iMOA: ' + frameRate);
	
	if (navigator.appVersion.indexOf("MSIE") == -1){
		imgMouseoverCycle = setInterval(overCycle, frameRate, targ,imgFrames,imgName,imgLang,sequence);
		imgMouseoverCycleOn = true;
	}
	else if (navigator.appVersion.indexOf("MSIE") != -1){
		imgMouseoverCycle = setInterval(function(){overCycle(targ,imgFrames,imgName,imgLang,sequence)}, frameRate);
		imgMouseoverCycleOn = true;
	}
}

function overCycle(img,frames,name,lang,sequence){
		
	if(currentMouseoverFrame < frames){
		
		//alert('oC: img frame is ' + sequence[currentMouseoverFrame]);
		
		img.setAttribute('src',name + lang + "over-" + sequence[currentMouseoverFrame] + ".png");
		currentMouseoverFrame++;
		
		//alert('oC: overCycle frame ' + currentMouseoverFrame);
	}
	else {
		
		//alert('oC: img frame is exceeded by currentMouseoverFrame');
		
		currentMouseoverFrame = 0;
		img.setAttribute('src',name + lang + "over-" + sequence[currentMouseoverFrame] + ".png");
		currentMouseoverFrame++;
	}
}

//========================================================================================
//	IMG MOUSEDOWN SIMPLE
//========================================================================================

function imgMousedown(evt){
	
	var e = grabEvent(evt);
	
	if(e.button != 2){
	
		var targ = getEventTargetForNav(e);
		//alert('iMD: mousedown for ' + targ);
		
		callLinkedMousedowns(targ);
		
		stopMouseoverAnim(targ);
		
		var imgName = getNameForObj(targ);
		//alert('iMD: ' + imgName);
		
		var imgLang = getLangForObj(targ);
		//alert('iMD ' + imgLang);
		
		targ.setAttribute('src',imgName + imgLang + "down.png");
		//alert('iMD: done');
	}
	else {
		imgOut(evt);
	}
}

//========================================================================================
//	IMG MOUSEDOWN ANIMATED
//========================================================================================

var currentMousedownFrame = 0;
var imgMousedownCycleOn = false;

function imgMousedownAnimate(evt){
	
	var e = grabEvent(evt);
	
	if(evt.button != 2){
	
		var targ = getEventTargetForNav(e);
		//alert('iMDA: ' + targ.src);
		
		callLinkedMousedowns(targ);
		
		stopMouseoverAnim(targ);
		
		var imgName = getNameForObj(targ);
		//alert('iMDA: ' + imgName);
		
		var imgLang = getLangForObj(targ);
		//alert('iMDA: ' + imgLang);
		
		var animIndex = targ.className.indexOf('downAnim');
		//alert('iMDA: ' + animIndex);
		
		var openFrameIndex = targ.className.indexOf('[',animIndex);
		var frameRateIndex = targ.className.indexOf('-',openFrameIndex);
		var imgFrames = targ.className.substring(openFrameIndex + 1, frameRateIndex);
		//alert('iMDA: num frames ' + imgFrames);
		
		var sequence = new Array();
	
		var closeFrameIndex = getAnimationSequenceData(targ, closeFrameIndex, sequence, 'dSeq', frameRateIndex,imgFrames); 
		
		var frameRate = targ.className.substring(frameRateIndex + 1, closeFrameIndex);
		//alert('iMDA: frame rate' + frameRate);
		
		if (navigator.appVersion.indexOf("MSIE") == -1){
			imgMousedownCycle = setInterval(downCycle, frameRate, targ,imgFrames,imgName,imgLang,sequence);
			imgMousedownCycleOn = true;
		}
		else if (navigator.appVersion.indexOf("MSIE") != -1){
			imgMousedownCycle = setInterval(function(){downCycle(targ,imgFrames,imgName,imgLang,sequence)}, frameRate);
			imgMousedownCycleOn = true;
		}
	}
	else {
		imgOut(evt);
	}
}

function downCycle(img,frames,name,lang,sequence){
	
	//alert('dC: downCycle frame ' + currentMousedownFrame);
	
	if(currentMousedownFrame < frames){
		
		//alert('dC: img frame is ' + sequence[currentMousedownFrame]);
		
		img.setAttribute('src',name + lang + "down-" + sequence[currentMousedownFrame] + ".png");
		currentMousedownFrame++;
	}
	else {
		
		//alert('dC: img frame is exceeded by currentMouseoverFrame');
		
		currentMousedownFrame = 0;
		img.setAttribute('src',name + lang + "down-" + sequence[currentMousedownFrame] + ".png");
		currentMousedownFrame++;
	}
}

//========================================================================================
//	IMG MOUSEOUT
//========================================================================================

function imgOut(evt){
	
	var e = grabEvent(evt);
	
	var targ = getEventTargetForNav(e);
	//alert('iMOut: mouseout for ' + targ);
	
	callLinkedMouseouts(targ);

	stopMouseoverAnim(targ);
	
	stopMousedownAnim(targ);
	
	var imgName = getNameForObj(targ);
	//alert('iMOut: ' + imgName);
	
	var imgLang = getLangForObj(targ);
	//alert('iMOut: ' + imgLang);
	
	targ.setAttribute('src',imgName + imgLang + "default.png");
	//alert('iMOut: ' + targ.src);
	
}

function stopMouseoverAnim(targ){
	if((targ.className.search('overAnim') != -1) && (imgMouseoverCycleOn)){
		
		//alert('sMOA: stopping imgMouseoverCycle');
		
		clearInterval(imgMouseoverCycle);
		currentMouseoverFrame = 0;
		imgMouseoverCycleOn = false;
	}
	else {
		//alert('sMOA: no mouseover cycle to stop');
	}
}

function stopMousedownAnim(targ){
	if((targ.className.search('downAnim') != -1) && (imgMousedownCycleOn)){
		
		//alert('sMDA: stopping imgMousedownCycle');
		
		clearInterval(imgMousedownCycle);
		currentMousedownFrame = 0;
		imgMousedownCycleOn = false;
	}
	else {
		//alert('sMDA: no mousedown cycle to stop');
	}
}

//==============================================================================================================================
//	LINKED IMGS EVENT HANDLERS
//==============================================================================================================================

function getLinkedRefs(targ){
	
	//some buttons can be maitain links to other buttons, so that when their state changes the other's should too
	//in this situation the end of the button's className should be -linked[idOfLinkedButton]
	//we pull this id out of the string and return it for use in a document.getElementById() call
	
	//linked[eighth,quarter,half,whole]
	//{6,14,19}
	
	var linkedIndex = targ.className.indexOf('linked');
	var openLinked = targ.className.indexOf('[',linkedIndex); 
	var closeLinked = targ.className.indexOf(']',openLinked);
	var linkedString = targ.className.substring(openLinked + 1, closeLinked);
	var commaArray = new Array();
	for (var i = 0; i < linkedString.length; i++){
		if(linkedString.charAt(i) == ','){
			commaArray.push(i);
			
			//alert('gLRs: comma at index '+ i);
		}
	}
	var refArray = new Array();
	if(commaArray.length > 0){
		refArray[0] = linkedString.substring(0, commaArray[0]);
		
		//alert('gLRs: first linked ref is '+ refArray[0]);
		
		var ri = 1;
		for(var ci = 1; ci < commaArray.length;ci++){
			var refString = linkedString.substring(commaArray[ci - 1] + 1,commaArray[ci]);
			refArray.push(refString);
			
			//alert('gLRs: next linked ref is '+ refArray[ci]);
			
			ri++;
		}
		refArray[ri] = linkedString.substring(commaArray[commaArray.length-1] + 1, closeLinked);
		
		//alert('gLRs: last linked ref is ' + refArray[ri]);
	}
	else {
		refArray[0] = linkedString;
		
		//alert('gLRs: only linked ref is ' + refArray[0]);
	}
	return refArray;
}

function callLinkedMouseovers(targ){
	if(targ.className.search('linked') != -1){
		
		//if it does get the array of linked refernces (ids)
		//and use them to create an array of objs
		
		var linkedRefs = getLinkedRefs(targ);
		var linkedObjs = new Array();
		
		for(var lRef = 0; lRef < linkedRefs.length; lRef++){
			
			linkedObjs.push(document.getElementById(linkedRefs[lRef]));
			//alert(linkedObjs[lRef]);
		}
		
		//we need to divide the linked objs into those which have simple mouseovers
		//and those which are animated
		
		numLinkedMouseoverCycles = 0;
		var norms = new Array();
		var anims = new Array();
		
		for (var lObj = 0; lObj < linkedObjs.length; lObj++){
			
			//go through all the objects and put them in to the right array, keeping track of how many animations to run
			
			if(linkedObjs[lObj].className.search('overNorm') != -1){
				norms.push(linkedObjs[lObj]);
			}
			else if(linkedObjs[lObj].className.search('overAnim') != -1){
				numLinkedMouseoverCycles++;
				anims.push(linkedObjs[lObj]);	
			}
		}
		//alert('cLMOs: num linked cycles is ' + numLinkedMouseoverCycles);
		
		//call the event handlers for all the objs
		
		for (var n = 0; n < norms.length; n++){
			imgMouseoverLinked(norms[n]);
		}
		for (var a = 0; a < anims.length; a++){
			imgMouseoverAnimateLinked(anims[a],a);
		}
	}
}

function callLinkedMousedowns(targ){
	if(targ.className.search('linked') != -1){
		
		//if it does get the array of linked refernces (ids)
		//and use them to create an array of objs
		
		var linkedRefs = getLinkedRefs(targ);
		var linkedObjs = new Array();
		
		for(var lRef = 0; lRef < linkedRefs.length; lRef++){
			
			linkedObjs.push(document.getElementById(linkedRefs[lRef]));
		}
		
		//we need to divide the linked objs into those which have simple mousedowns
		//and those which are animated
		
		numLinkedMousedownCycles = 0;
		var norms = new Array();
		var anims = new Array();
		
		for (var lObj = 0; lObj < linkedObjs.length; lObj++){
			
			//go through all the objects and put them in to the right array, keeping track of how many animations to run
			
			if(linkedObjs[lObj].className.search('downNorm') != -1){
				norms.push(linkedObjs[lObj]);
			}
			else if(linkedObjs[lObj].className.search('downAnim') != -1){
				numLinkedMousedownCycles++;
				anims.push(linkedObjs[lObj]);	
			}
		}
		//alert('cLMDs: num linked cycles is ' + numLinkedMousedownCycles);
		
		//call the event handlers for all the objs
		
		for (var n = 0; n < norms.length; n++){
			imgMousedownLinked(norms[n]);
		}
		for (var a = 0; a < anims.length; a++){
			imgMousedownAnimateLinked(anims[a],a);
		}
	}
}

function callLinkedMouseouts(targ){
	if(targ.className.search('linked') != -1){
			
		//if it does get the array of linked refernces (ids)
		//and use them to create an array of objs
		
		var linkedRefs = getLinkedRefs(targ);
		var linkedObjs = new Array();
		
		for(var lRef = 0; lRef < linkedRefs.length; lRef++){
			
			linkedObjs.push(document.getElementById(linkedRefs[lRef]));
		}
		
		//investigate whether each obj has a simple or animated mouseover
		//and call the appropriate linked response
		
		for (var lObj = 0; lObj < linkedObjs.length; lObj++){
			
			imgOutLinked(linkedObjs[lObj]);
		}
	}
}

//========================================================================================
//	LINKED IMG MOUSEOVER SIMPLE
//========================================================================================

function imgMouseoverLinked(obj){
	
	stopLinkedMousedownAnimation(obj);
	
	var imgName = getNameForObj(obj);
	//alert('iMOL: ' + imgName);
	
	var imgLang = getLangForObj(obj);
	//alert('iMOL: ' + imgLang);
	
	obj.setAttribute('src',imgName + imgLang + "over.png");
	//alert('iMOL: ' + obj.src);
}

//========================================================================================
//	LINKED IMG MOUSEOVER ANIMATED
//========================================================================================

var numLinkedMouseoverCycles = 0;
var linkedMouseoverCycles = new Array();
var currentLinkedMouseoverFrames = new Array();
var mouseoverLinkedCyclesOn = false;

function imgMouseoverAnimateLinked(obj,index){
	
	//alert('iMOAL: this cycle is linked num ' + index);
	
	stopLinkedMousedownAnimation(obj);
	
	var imgName = getNameForObj(obj);
	//alert('iMOAL: ' + imgName);
	
	var imgLang = getLangForObj(obj);
	//alert('iMOAL: ' + imgLang);
	
	var animIndex = obj.className.indexOf('overAnim');
	//alert('iMOAL: ' + animIndex);
	
	var openFrameIndex = obj.className.indexOf('[',animIndex);
	var frameRateIndex = obj.className.indexOf('-',openFrameIndex);
	var imgFrames = obj.className.substring(openFrameIndex + 1, frameRateIndex);
	//alert('iMOAL: num imgFrames ' + imgFrames);
	
	var sequence = new Array();
	var closeFrameIndex = getAnimationSequenceData(obj, closeFrameIndex, sequence, 'oSeq', frameRateIndex,imgFrames); 
	
	//alert('iMOAL: close frame index ' + closeFrameIndex);
	
	var frameRate = obj.className.substring(frameRateIndex + 1, closeFrameIndex);
	//alert('iMOAL: framerate ' + frameRate);
	
	if (navigator.appVersion.indexOf("MSIE") == -1){
		currentLinkedMouseoverFrames[index] = 0;
		linkedMouseoverCycles[index] = setInterval(overLinkedCycle, frameRate, obj,imgFrames,imgName,imgLang,index,sequence);
		mouseoverLinkedCyclesOn = true;
	}
	else if (navigator.appVersion.indexOf("MSIE") != -1){
		currentLinkedMouseoverFrames[index] = 0;
		linkedMouseoverCycles[index] = setInterval(function(){overLinkedCycle(obj,imgFrames,imgName,imgLang,index,sequence)}, frameRate);
		mouseoverLinkedCyclesOn = true;
	}
}

function overLinkedCycle(img,frames,name,lang,index,sequence){
	
	//alert('oLC: overLinkedCycle frame ' + currentLinkedMouseoverFrames[index]);
	
	if(currentLinkedMouseoverFrames[index] < frames){
		img.setAttribute('src',name + lang + "over-" + sequence[currentLinkedMouseoverFrames[index]] + ".png");
		currentLinkedMouseoverFrames[index]++;
	}
	else {
		currentLinkedMouseoverFrames[index] = 0;
		img.setAttribute('src',name + lang + "over-" + sequence[currentLinkedMouseoverFrames[index]] + ".png");
		currentLinkedMouseoverFrames[index]++;
	}
}

//========================================================================================
//	LINKED IMG MOUSEDOWN SIMPLE
//========================================================================================

function imgMousedownLinked(obj){
	
	stopLinkedMouseoverAnimation(obj);
	
	var imgName = getNameForObj(obj);
	//alert('iMDL: ' + imgName);
	
	var imgLang = getLangForObj(obj);
	//alert('iMDL: ' + imgLang);
	
	obj.setAttribute('src',imgName + imgLang + "down.png");
	//alert('iMDL: done');
}

//========================================================================================
//	LINKED IMG MOUSEDOWN ANIMATED
//========================================================================================

var numLinkedMousedownCycles = 0;
var linkedMousedownCycles = new Array();
var currentLinkedMousedownFrames = new Array();
var mousedownLinkedCyclesOn = false;

function imgMousedownAnimateLinked(obj,index){
	
	stopLinkedMouseoverAnimation(obj);
	
	var imgName = getNameForObj(obj);
	//alert('iMDAL: ' + imgName);
	
	var imgLang = getLangForObj(obj);
	//alert('iMDAL: ' + imgLang);
	
	var animIndex = obj.className.indexOf('downAnim');
	//alert('iMDAL: ' + animIndex);
	
	var openFrameIndex = obj.className.indexOf('[',animIndex);
	var frameRateIndex = obj.className.indexOf('-',openFrameIndex);
	var imgFrames = obj.className.substring(openFrameIndex + 1, frameRateIndex);
	//alert('iMDAL: ' + imgFrames);
	
	var sequence = new Array();
	var closeFrameIndex = getAnimationSequenceData(obj, closeFrameIndex, sequence, 'dSeq', frameRateIndex,imgFrames); 
	
	//alert('iMDAL: close frame index ' + closeFrameIndex);
	
	var frameRate = obj.className.substring(frameRateIndex + 1, closeFrameIndex);
	//alert('iMDAL: ' + frameRate);
	
	if (navigator.appVersion.indexOf("MSIE") == -1){
		currentLinkedMousedownFrames[index] = 0;
		linkedMousedownCycles[index] = setInterval(downLinkedCycle, frameRate, obj,imgFrames,imgName,imgLang,index,sequence);
		mousedownLinkedCyclesOn = true;
	}
	else if (navigator.appVersion.indexOf("MSIE") != -1){
		currentLinkedMousedownFrames[index] = 0;
		linkedMousedownCycles[index] = setInterval(function(){downLinkedCycle(obj,imgFrames,imgName,imgLang,index,sequence)}, frameRate);
		mousedownLinkedCyclesOn = true;
	}
}

function downLinkedCycle(img,frames,name,lang,index,sequence){
	
	//alert('dLC: downLinkedCycle frame ' + currentLinkedMousedownFrames[index]);
	
	if(currentLinkedMousedownFrames[index] < frames){
		img.setAttribute('src',name + lang + "down-" + sequence[currentLinkedMousedownFrames[index]] + ".png");
		currentLinkedMousedownFrames[index]++;
	}
	else {
		currentLinkedMousedownFrames[index] = 0;
		img.setAttribute('src',name + lang + "down-" + sequence[currentLinkedMousedownFrames[index]] + ".png");
		currentLinkedMousedownFrames[index]++;
	}
}

//========================================================================================
//	LINKED IMG MOUSEOUT
//========================================================================================

function imgOutLinked (obj){
	
	stopLinkedMouseoverAnimation(obj);
	
	stopLinkedMousedownAnimation(obj);
	
	var imgName = getNameForObj(obj);
	//alert('iOutL: ' + imgName);
	
	var imgLang = getLangForObj(obj);
	//alert('iOutL: ' + imgLang);
	
	obj.setAttribute('src',imgName + imgLang + "default.png");
	//alert('iOutL: ' + obj.src);
	
}

function stopLinkedMouseoverAnimation(obj){
	if((obj.className.search('overAnim') != -1) && (mouseoverLinkedCyclesOn)){
		
		//alert('sLMOA: stopping linkedMouseoverCycles');
		
		for (var lc = 0; lc < numLinkedMouseoverCycles; lc++){
			clearInterval(linkedMouseoverCycles[lc]);
			currentLinkedMouseoverFrames[lc] = 0;
		}
		
		//alert('sLMOA: stopped');
		
		mouseoverLinkedCyclesOn = false;
	}
}
	
function stopLinkedMousedownAnimation(obj){
	if((obj.className.search('downAnim') != -1) && (mousedownLinkedCyclesOn)){
		
		//alert('sLMDA: stopping mousedownLinkedCycles');
		
		for (var lc = 0; lc < numLinkedMousedownCycles; lc++){
			clearInterval(linkedMousedownCycles[lc]);
			currentLinkedMousedownFrames[lc] = 0;
		}
		
		//alert('sLMDA: stopped');
		
		mousedownLinkedCyclesOn = false;
	}
}

