loadMeUp = startMeUp = '';



////////////// GENERAL FUNCTIONS ///////

function clearDefault(thefield){
	if (thefield.defaultValue==thefield.value)
	thefield.value = ""
}



////////// SHORTHAND ////////////
function getId(id) {
	return document.getElementById(id);
}




///////////// PRELOAD IMAGES ////////////////

preloadArray = new Array();
function addPreload(imgSrc) { preloadArray[preloadArray.length] = imgSrc; }
var preloadFlag = false;
function preloadImages() {
	if (document.images) {
		for (i=0; i<preloadArray.length; i++) eval("preloadImage"+i+" = newImage('"+preloadArray[i]+"');");
		preloadFlag = true;
	}
}
function newImage(arg) {
	if (document.images) {
		rslt = new Image();
		rslt.src = arg;
		return rslt;
	}
}



///////////////// FORM VALIDATION /////////////////


function writeAddress(a,b,s) {
	e1=a+'@'+b;
	e2='<b>'+a+'</b>'+'@'+b;
	s = (s) ? 'style='+s : '';
	document.write('<a '+s+' href=mailto:'+e1+'>'+e2+'</a>');
}

function getCookie(name) { // use: getCookie("name");
	var re = new RegExp(name + "=([^;]+)");
	var value = re.exec(document.cookie);
	return (value != null) ? unescape(value[1]) : null;
}

today = new Date();
var expiry = new Date(today.getTime() + 365 * 24 * 60 * 60 * 1000); // plus 1 year

function setCookie(name, value, sessionCookie) { // use: setCookie("name", value);
	if (sessionCookie) {
		expires = '';
	} else {
		expires = "expires=" + expiry.toGMTString();
	}
	document.cookie=name + "=" + escape(value) + "; path=/; " + expires;
}
// standard form validation
function checkForm(f, holdSubmit) {
	pass = true;
	for(i=0;i<f.length;i++) {
		el = f[i];
		if (note = el.getAttribute("validationNotice")) {
			if (isVisible(el)) {
				if (el.type=='text' || el.type=='password' || el.type=='textarea') {
					el.value = trim(el.value);
					if (!el.value) pass = false;
					if (pass && (el.name=='email' || el.name=='new_email' || el.name=='yourEmail' || el.name=='e_signup' || el.name.toLowerCase().indexOf('email')!='-1')) {
						if (!eCheck(el.value)) {
							note = "Please provide a valid email address.";
							pass = false;
						}
					}
				} else if (el.options) {
					if (!el.options[el.selectedIndex].value && (!el.options[el.selectedIndex].text || el.options[el.selectedIndex].text.indexOf('--Select')==0 || el.options[el.selectedIndex].text=='--Please Select--' || el.options[el.selectedIndex].text=='None')) {
						pass = false;
					}
				} else if (el.type=='checkbox') {
					if (!el.checked) {
						pass = false;
					}
				} else if (el.type=='radio') {
					radioPass = false;
					radioEls = f[el.name];
					for(r=0;r<radioEls.length;r++) {
						rEl = radioEls[r];
						if (rEl.checked) {
							radioPass = true;
							break;
						}
					}
					if (!radioPass) pass = false;
				}
				if (!pass) {
					alert(note);
					el.focus();
					break;
				}
			}
		}
		// check for special fields
		if (el.name=='subject' && el.value.indexOf('@') != -1 && el.value.indexOf('.') != -1) {
			pass = false;
			alert("Please enter a text subject in the subject field, not an e-mail address.");
			el.focus();
			break;
		}
	}
	if (!pass) {
		// do not post the form
		return false;
	} else if (!holdSubmit && f.action.indexOf('javascript')==-1) {
		// ensure fields are not disabled
		for(i=0;i<f.length;i++) {
			el = f[i];
			el.disabled = false;
		}
		// attempt to disable the submit button
		if (sb = document.getElementById('submitButton')) {
			sb.disabled = true;
		}
		if (db = document.getElementById('donationButtons')) {
			setOpacity('',30,db);
		}
		// post the form
	} else return true;
}


function trim(str) {
	if (!str) return str;
	while(str.charAt(0)==' '|| str.charAt(0)=="\n" || str.charAt(0)=="\t") str = str.substr(1);
	while(str.charAt(str.length-1) ==' '|| str.charAt(str.length-1)=="\n" || str.charAt(str.length-1)=="\t") str = str.substr(0,str.length-1);
	return str;
}

function isVisible(el) {
	// check if an element is visible using inline css "display" check
	elCheck = el;
	while(elCheck != document) {
		if (elCheck.style.display=='none') return false;
		elCheck = elCheck.parentNode;
	}
	return true;
}

function eCheck(e) {
	eOk = true;
	if (!detectChar('@', e)) eOk = false;
	if (!detectChar('.', e)) eOk = false;
	name = e.substr(0, e.indexOf('@'));
	domain = e.substr(e.indexOf('@')+1, e.length);
	if (!name.length) eOk = false;
	d1 = domain.substr(0, domain.indexOf('.'));
	d2 = domain.substr(domain.indexOf('.')+1, domain.length);
	if (!d1.length) eOk = false;
	if (!d2.length) eOk = false;
	if (d2.substr(d2.length-1, 1) == '.') eOk = false;
	domainType = 1;
	dList = new Array('hotmail.com', 'yahoo.com', 'mindspring.net', 'excite.com');
	for (i2=0; i2<dList.length; i2++) {
		if (domain.toLowerCase() == dList[i2]) {
			domainType = 0;
			break;
		}
	}
	return (eOk);
}
	
function detectChar(chr, str1) {
	str2 = str1.replace(chr, "");
	if (str1.length > str2.length) return true;
	return false;
}



// limit length of textareas				
function checkLength(el) {
	ml = el.getAttribute('maxChars')*1;
	if (el.value.length > ml) {
		el.value = el.value.substr(0,ml);
		alert("Sorry! You've reached the maximum message length. Please keep your message under "+ml+" characters.");
	}
}

// limit number of addresses
function checkAddressLimit(el) {
	ml = el.getAttribute('addressLimit')*1;
	str = el.value;
	breach = false;
	for(i=0;i<ml;i++) {
		if (str.indexOf('@') > 0) {
			str = str.replace('@','[AT]');
		} else break;
	}
	if (str.indexOf('@') > 0) {
		// breached limit
		str = str.substr(0,str.indexOf('@'));
		breach = true;
	}
	for(i=0;i<ml;i++) {
		str = str.replace('[AT]','@');
	}
	if (breach) {
		el.value = str;
		alert("Sorry! You can only enter up to "+ml+" addresses at a time.");
	}
}

function check_key(key_event, the_key, action) {
	if (!void13) {
		if (!key_event) key_event = event.keyCode;
		if (key_event == the_key) // execute action
		eval(action);
	}
}





////////////////// AJAX ////////////////////

execAfterAjaxCall = '';
function ajaxCall(requestURL,elId,inputType,params) {
	ajaxCallInProgress = true;
	var xmlHttp;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e) {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) {
				alert("Sorry, this feature requires a browser that supports AJAX. To continue, please download the latest version of Google Chrome from www.google.com/chrome");
				return false;
			}
		}
	}
	if (params) { // POST REQUEST
		xmlHttp.open("POST", requestURL, true);
		//Send the proper header information along with the request
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", params.length);
		xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.onreadystatechange = function() {
			if(xmlHttp.readyState == 4) {
				ajaxResult = xmlHttp.responseText;
				if (inputType) el = document.getElementById(elId);
				if (inputType=='wysiwyg') {
					fooDoc = (document.all) ? el.document : el.contentWindow.document;
					fooDoc.body.innerHTML = ajaxResult;
				} else if (inputType) el.value = ajaxResult;
				else {
					el = document.getElementById(elId);
					el.innerHTML = ajaxResult;
				}
				if (execAfterAjaxCall) {
					eval(execAfterAjaxCall);
					execAfterAjaxCall = '';
				}
			}
		}
		xmlHttp.send(params);
	} else { // GET REQUEST
		xmlHttp.onreadystatechange=function() {
			if(xmlHttp.readyState==4) {
				ajaxResult = xmlHttp.responseText;
				if (inputType) el = document.getElementById(elId);
				if (inputType=='wysiwyg') {
					fooDoc = (document.all) ? el.document : el.contentWindow.document;
					fooDoc.body.innerHTML = ajaxResult;
				} else if (inputType) el.value = ajaxResult;
				else {
					el = document.getElementById(elId);
					el.innerHTML = ajaxResult;
				}
				if (execAfterAjaxCall) {
					eval(execAfterAjaxCall);
					execAfterAjaxCall = '';
				}
			}
		}
		xmlHttp.open("GET",requestURL,true);
		xmlHttp.send(null);
	}
}







/////////// SIMPLE DHTML ///////////

function toggleVis(elId) {
	el = document.getElementById(elId);
	if (el) {
		el.style.display = (el.style.display=='block') ? 'none' : 'block';
	}
}





////////////////// FADE IN & OUT ////////////////////

fadeStepInt = 10;
randFadeId = Math.ceil(Math.random()*1000);
function fadeOut(elId,execAfter,el) {
	if (el) {
		if (!el.id) el.setAttribute('id','fadeEl'+randFadeId++);
		elId = el.id;
	} else {
		el = document.getElementById(elId);
	}
	fadeEl = el;
	fadeEl.elId = elId;
	if (execAfter) fadeOutExecAfter = execAfter;
	fadeEl.alpha = 100;
	setOpacity(fadeEl.id,fadeEl.alpha);
	setTimeout(fadeOutStep,fadeStepInt);
}

fadeOutExecAfter = fadeInExecAfter = '';
function fadeOutStep() {
	fadeEl.alpha -= 10;
	setOpacity(fadeEl.id,fadeEl.alpha);
	if (fadeEl.alpha <= 0) {
		if (fadeOutExecAfter) {
			eval(fadeOutExecAfter);
			fadeOutExecAfter = '';
		}
	} else setTimeout(fadeOutStep,fadeStepInt);
}

function fadeIn(elId,execAfter,el) {
	if (elId) {
		el = document.getElementById(elId);
	} else {
		if (!el.id) el.id = 'fadeEl'+randFadeId++;
		elId = el.id;
	}
	fadeEl = el;
	fadeEl.elId = elId;
	if (execAfter) fadeInExecAfter = execAfter;
	fadeEl.alpha = 0;
	setOpacity(fadeEl.id,fadeEl.alpha);
	setTimeout(fadeInStep,10);
}

function fadeInStep() {
	fadeEl.alpha += 5;
	setOpacity(fadeEl.id,fadeEl.alpha);
	if (fadeEl.alpha >= 100) {
		if (fadeInExecAfter) {
			eval(fadeInExecAfter);
			fadeInExecAfter = '';
		}
	} else setTimeout(fadeInStep,10);
}

function setOpacity(elId,alpha,el) {
	if (!el) el = document.getElementById(elId);
	if (document.all) el.style.filter = 'alpha(opacity=' + alpha + ')';	
	else el.style.opacity = (alpha)/100;
}



//////////////// TICKER TITLE ////////////////////



function tickerTitle(tickerElId,str) {
	tickerEl = document.getElementById(tickerElId);
	tickerEl.setAttribute('goalStr',str);
	tickerEl.innerHTML = '';
	tickTitle();
}
function tickTitle() {
	tickerEl.innerHTML = tickerEl.getAttribute('goalStr').substr(0,(tickerEl.innerHTML.length+1));
	if (tickerEl.innerHTML.length < tickerEl.getAttribute('goalStr').length) {	
		setTimeout('tickTitle();',80);
	}
}






///////////////// TOGGLE /////////////////



function toggleEl(elId) {
	el = document.getElementById(elId);
	el.style.display = (el.style.display=='block') ? 'none' : 'block';
}


function seeMore(elId) {
	document.getElementById(elId+'_hidden').style.display = (document.getElementById(elId+'_hidden').style.display=='inline') ? 'none' : 'inline';
	document.getElementById(elId+'_toggle').innerHTML = (document.getElementById(elId+'_hidden').style.display=='inline') ? "less &laquo;" : "more &raquo;";
	document.getElementById(elId+'_elipses').style.display = (document.getElementById(elId+'_hidden').style.display=='inline') ? "none" : "inline";
}





///////////////// NUMBER FORMATTING /////////////////


function number_format(number, decimals, dec_point, thousands_sep) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival
    // +      input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +   improved by: davook
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Jay Klehr
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // +   improved by: Theriault
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
    // *     example 7: number_format(1000.55, 1);
    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');
    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);
    // *     returns 9: '1'
    // *    example 10: number_format('1.20', 2);
    // *    returns 10: '1.20'
    // *    example 11: number_format('1.20', 4);
    // *    returns 11: '1.2000'
    // *    example 12: number_format('1.2000', 3);
    // *    returns 12: '1.200'
    var n = !isFinite(+number) ? 0 : +number, 
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}




//////////////// ONLOAD SEQUENCE //////////////

// called when HTML loaded
pageLoaded = false;
function executeOnHTMLLoad() {
	eval(loadMeUp);
}





pageLoaded = false;
onload = function() {
	pageLoaded = true;
	preloadImages();
	eval(startMeUp);
}



