// Blue Discus Systems - BDS Dynamic Web Effects Lite(tm) - Base Module - Version 2.1.3
//
// Copyright 2005 Blue Discus Systems LLC - www.BlueDiscusSystems.com
//
// License is granted to freely use these Java Scripts for personal or commercial use.
// You may NOT, however, sell these Java Scripts except if written permission is provided
//		to you by Blue Discus Systems LLC.
//
// Contact: garyz@BlueDiscusSystems.com
//
// We would appreciate it if you would credit Blue Discus Systems for these scripts
//     and provide a link to our main website at www.BlueDiscusSystems.com
// 

var BDS_ActiveEffects = new Array();
var BDS_AbortEffects = new Array();
var BDS_PauseEffects = new Array();

function BDS_GetActiveEffectCount() { //Returns count
	var cnt = 0;
	var i = 0;
	if (BDS_ActiveEffects.length > 0) {
		for (i=0; i<(BDS_ActiveEffects.length); i++) {
			if (BDS_ActiveEffects[i] != '') {
				cnt +=1;;
			}
		}
	}
	return cnt;
}

function BDS_GetPausedEffectCount() { //Returns count
	var cnt = 0;
	var i = 0;
	if (BDS_PauseEffects.length > 0) {
		for (i=0; i<(BDS_PauseEffects.length); i++) {
			if (BDS_PauseEffects[i] != '') {
				cnt +=1;;
			}
		}
	}
	return cnt;
}

function BDS_GetAbortedEffectCount() { //Returns count
	var cnt = 0;
	var i = 0;
	if (BDS_AbortEffects.length > 0) {
		for (i=0; i<(BDS_AbortEffects.length); i++) {
			if (BDS_AbortEffects[i] != '') {
				cnt +=1;;
			}
		}
	}	
	return cnt;
}

function BDS_RegisterEffect(baseName) { // returns tokenName
	var tokenName = "";
	var i = 0;
	var j = 0
	var done = false;
	while (done==false) {
		i += 1;
		tokenName = baseName + '_' + i;
		if (BDS_EffectActive(tokenName)==false) {
			if (BDS_ActiveEffects.length > 0) {
				for (j=0; j<(BDS_ActiveEffects.length); j++) {
					if (BDS_ActiveEffects[j] == '') {
						done = true;
						BDS_ActiveEffects[j] = tokenName;
						break;
					}
				}
			}
			if (done == false) {
				BDS_ActiveEffects[BDS_ActiveEffects.length] = tokenName;
				done = true;
			}
		}
	}
	return tokenName;
}

function BDS_EffectActive(tokenName) { // returns boolean
	var active = false;
	var i = 0;
	if (BDS_ActiveEffects.length > 0) {
		for (i=0; i<(BDS_ActiveEffects.length); i++) {
			if (BDS_ActiveEffects[i] == tokenName) {
				active = true;
				break;
			}
		}
	}
	return active;
}

function BDS_EffectPaused(tokenName) { // returns boolean
	var pause = false;
	var i = 0;
	if (BDS_PauseEffects.length > 0) {
		for (i=0; i<(BDS_PauseEffects.length); i++) {
			if (BDS_PauseEffects[i] == tokenName) {
				pause = true;
				break;
			}
		}
	}
	return pause;
}

// Called internally when aborted and finished. - Should also call for external control (via nextPgm)
function BDS_RemoveEffect(tokenName) { //also removes from BDS_AbortEffects & BDS_PauseEffects, if applicable
	var i = 0;
	if (BDS_ActiveEffects.length > 0) {
		for (i=0; i<(BDS_ActiveEffects.length); i++) {
			if (BDS_ActiveEffects[i] == tokenName) {
				BDS_ActiveEffects[i] = ''; //.slice does not work!
				break;
			}
		}
	}
	if (BDS_AbortEffects.length > 0) {
		for (i=0; i<(BDS_AbortEffects.length); i++) {
			if (BDS_AbortEffects[i] == tokenName) {
				BDS_AbortEffects[i] = ''; //.slice does not work!
				break;
			}
		}
	}
	if (BDS_PauseEffects.length > 0) {
		for (i=0; i<(BDS_PauseEffects.length); i++) {
			if (BDS_PauseEffects[i] == tokenName) {
				BDS_PauseEffects[i] = ''; //.slice does not work!
				break;
			}
		}
	}
}

// Call to resume effect - Also called internally.
function BDS_ResumeEffect(tokenName) { 
	var i = 0;
	if (BDS_PauseEffects.length > 0) {
		for (i=0; i<(BDS_PauseEffects.length); i++) {
			if (BDS_PauseEffects[i] == tokenName) {
				BDS_PauseEffects[i] = ''; //.slice does not work!
				break;
			}
		}
	}
}

function BDS_ReleaseAllPausedEffects() { 
	var i = 0;
	if (BDS_PauseEffects.length > 0) {
		for (i=0; i<(BDS_PauseEffects.length); i++) {
			BDS_PauseEffects[i] = '';
		}
	}
}

function BDS_EffectAborted(tokenName) { // returns boolean
	var aborted = false;
	var i = 0;
	if (BDS_AbortEffects.length > 0) {
		for (i=0; i<(BDS_AbortEffects.length); i++) {
			if (BDS_AbortEffects[i] == tokenName) {
				aborted = true;
				break;
			}
		}
	}
	return aborted;
}

function BDS_KillEffect(tokenName) {
	var j = 0;
	var done = false;
	if (BDS_EffectAborted(tokenName)==false) {
		if (BDS_EffectActive(tokenName)==true) {
			if (BDS_AbortEffects.length > 0) {
				for (j=0; j<(BDS_AbortEffects.length); j++) {
					if (BDS_AbortEffects[j] == '') {
						done = true;
						BDS_AbortEffects[j] = tokenName;
						break;
					}
				}
			}
			if (done == false) {
				BDS_AbortEffects[BDS_AbortEffects.length] = tokenName;
				done = true;
			}
		}
	}
}

function BDS_WaitKillEffect(tokenName, nextPgm) {
	BDS_KillEffect(tokenName);
	BDS_WaitForAbortedEffect(tokenName, nextPgm);
}

// Called internally
function BDS_WaitForAbortedEffect(tokenName, nextPgm) {
	var cmd = "BDS_WaitForAbortedEffect('"+tokenName+"', '"+nextPgm+"')";
	if (BDS_EffectActive(tokenName)) {
		eval(nextPgm);
	} else {
		setTimeout(cmd,10);
	}
}

function BDS_PauseEffect(tokenName) {
	var j = 0;
	var done = false;
	if (BDS_EffectAborted(tokenName)==false) {
		if (BDS_EffectActive(tokenName)==true) {
			if (BDS_EffectPaused(tokenName)==false) {
				if (BDS_PauseEffects.length > 0) {
					for (j=0; j<(BDS_PauseEffects.length); j++) {
						if (BDS_PauseEffects[j] == '') {
							done = true;
							BDS_PauseEffects[j] = tokenName;
							break;
						}
					}
				}
				if (done == false) {
					BDS_PauseEffects[BDS_PauseEffects.length] = tokenName;
					done = true;
				}
			}
		}
	}
}

// Use to set Resume and Wait till resumed (kind of)
function BDS_WaitResumedEffect(tokenName, nextPgm) {
	var cmd = "BDS_WaitForResumedEffect('"+tokenName+"', '"+nextPgm+"')";
	BDS_ResumeEffect(tokenName);
	setTimeout(cmd,150);
}

// Called internally
function BDS_WaitForResumedEffect(tokenName, nextPgm) {
	var cmd = '';
	cmd = 'BDS_WaitForResumedEffect("'+tokenName+'", '+nextPgm+')';
	if (nextPgm.substring(0,1) != '"') {
		cmd = 'BDS_WaitForResumedEffect("'+tokenName+'", "'+nextPgm+'")';
	}
	if (BDS_EffectPaused(tokenName)==false) {
		eval(nextPgm);
	} else {
		setTimeout(cmd,30);
	}
}

function BDS_BaseEffectActive(baseName) { // returns boolean
	var active = false;
	var testName = '';
	var i = 0;
	if (BDS_ActiveEffects.length > 0) {
		for (i=0; i<(BDS_ActiveEffects.length); i++) {
			testName = BDS_GetBaseEffect(BDS_ActiveEffects[i]);
			if (testName == baseName) {
				active = true;
				break;
			}
		}
	}
	return active;
}

function BDS_BaseEffectAborted(baseName) { // returns boolean
	var active = false;
	var testName = '';
	var i = 0;
	if (BDS_AbortEffects.length > 0) {
		for (i=0; i<(BDS_AbortEffects.length); i++) {
			testName = BDS_GetBaseEffect(BDS_AbortEffects[i]);
			if (testName == baseName) {
				active = true;
				break;
			}
		}
	}
	return active;
}

function BDS_BaseEffectPaused(baseName) { // returns boolean
	var active = false;
	var testName = '';
	var i = 0;
	if (BDS_PauseEffects.length > 0) {
		for (i=0; i<(BDS_PauseEffects.length); i++) {
			testName = BDS_GetBaseEffect(BDS_PauseEffects[i]);
			if (testName == baseName) {
				active = true;
				break;
			}
		}
	}
	return active;
}

function BDS_KillBaseEffect(baseName) {
	if (BDS_BaseEffectActive(baseName)) {
		var i = 0;
		var testName = "";
		if (BDS_ActiveEffects.length > 0) {
			for (i=0; i<(BDS_ActiveEffects.length); i++) {
				testName = BDS_GetBaseEffect(BDS_ActiveEffects[i]);
				if (testName == baseName) {
					if (BDS_EffectAborted(BDS_ActiveEffects[i])==false) {
						if (BDS_EffectActive(BDS_ActiveEffects[i])==true) {
							BDS_KillEffect(BDS_ActiveEffects[i]);
						}
					}
				}
			}
		}
	}
}

function BDS_WaitKillBaseEffect(baseName, nextPgm) {
	BDS_KillBaseEffect(baseName);
	BDS_WaitForAbortedBaseEffect(baseName, nextPgm);
}

// Called internally
function BDS_WaitForAbortedBaseEffect(baseName, nextPgm) {
	var cmd = "BDS_WaitForAbortedBaseEffect('"+baseName+"', '"+nextPgm+"')";
	if (BDS_BaseEffectActive(baseName)) {
		eval(nextPgm);
	} else {
		setTimeout(cmd,10);
	}
}

function BDS_PauseBaseEffect(baseName) {
	if (BDS_BaseEffectActive(baseName)) {
		var i = 0;
		var testName = "";
		if (BDS_ActiveEffects.length > 0) {
			for (i=0; i<(BDS_ActiveEffects.length); i++) {
				testName = BDS_GetBaseEffect(BDS_ActiveEffects[i]);
				if (testName == baseName) {
					if (BDS_EffectAborted(BDS_ActiveEffects[i])==false) {
						if (BDS_EffectPaused(BDS_ActiveEffects[i])==false) {
							BDS_PauseEffect(BDS_ActiveEffects[i]);
						}
					}
				}
			}
		}
	}
}

function BDS_ResumeBaseEffect(baseName) {
	if (BDS_BaseEffectPaused(baseName)) {
		var i = 0;
		var testName = "";
		if (BDS_PauseEffects.length > 0) {
			for (i=0; i<(BDS_PauseEffects.length); i++) {
				testName = BDS_GetBaseEffect(BDS_PauseEffects[i]);
				if (testName == baseName) {
					BDS_ResumeEffect(BDS_PauseEffects[i]);
				}
			}
		}
	}
}

function BDS_WaitResumedBaseEffect(baseName, nextPgm) {
	var cmd = "BDS_WaitForResumedBaseEffect('"+baseName+"', '"+nextPgm+"')";
	BDS_ResumeBaseEffect(baseName);
	setTimeout(cmd,150);
}

// Called internally
function BDS_WaitForResumedBaseEffect(baseName, nextPgm) {
	var cmd = "BDS_WaitForResumedBaseEffect('"+baseName+"', '"+nextPgm+"')";
	if (BDS_BaseEffectActive(baseName)) {
		eval(nextPgm);
	} else {
		setTimeout(cmd,10);
	}
}

function BDS_GetBaseEffect(tokenName) { //returns baseName
	var baseName="";
	var tokenParts = new Array();
	tokenParts = tokenName.split('_',2);
	baseName = tokenParts[0];
	return baseName;
}

function BDS_GetEffectSuffix(tokenName) { //returns suffix
	var suffix="";
	var tokenParts = new Array();
	tokenParts = tokenName.split('_',2);
	suffix = tokenParts[1];
	return suffix;
}