// JavaScript Document

var fadeDefaultTime = 0.5;
var fadeDefaultIntervalCount = 10;
var fadeDefaultIntervalSlice = fadeDefaultTime / fadeDefaultIntervalCount * 1000;

var fadeControlLock = false;

function fadeIn (elementId,afterJS,intervalCount,intervalSlice,opacityFinal,opacityStart) {
	var element = document.getElementById(elementId);
	if (!element.fadeControl)
		element.fadeControl = {};
	if (element.fadeControl.running) {
		if (element.fadeControl.fadeOut)
			element.fadeControl.invert = true;
	} else {
		element.fadeControl.running	= true;
		element.fadeControl.invert	= false;
		element.fadeControl.fadeIn	= true;
		element.fadeControl.fadeOut	= false;
		element.fadeControl.abort	= false;
		element.fadeControl.counter	= 0;
		element.fadeControl.afterJS = (!afterJS || afterJS < 1 ? '' : afterJS);
		element.fadeControl.intervals = (intervalCount == undefined || intervalCount < 0 ? fadeDefaultIntervalCount : intervalCount);
		element.fadeControl.timeSlice = (intervalSlice == undefined || intervalSlice < 0 ? fadeDefaultIntervalSlice : intervalSlice);
		element.fadeControl.startOpacity  = (opacityStart == undefined || opacityStart < 0 ? element.fadeControl.opacity || 0 : opacityStart);
		element.fadeControl.targetOpacity = (opacityFinal == undefined || opacityFinal < 0 ? 100 : opacityFinal);
		element.fadeControl.intervalStep  = (element.fadeControl.targetOpacity - element.fadeControl.startOpacity) / element.fadeControl.intervals;
		element.style.opacity = element.fadeControl.startOpacity / 100;
		element.style.filter  = "alpha(opacity=" + element.fadeControl.startOpacity + ")";
		element.style.visibility = "visible";
		fadeInLoop(elementId);
	}
}

function fadeInLoop (elementId) {
	var element = document.getElementById(elementId);
	if (element.fadeControl.abort) {
		element.fadeControl.running = false;
		element.fadeControl.abort = false;
		return;
	}
	if (!element.fadeControl.invert) {
		if (++element.fadeControl.counter == element.fadeControl.intervals) {
			element.fadeControl.opacity = element.fadeControl.targetOpacity;
			element.style.visibility = "inherit";
			element.style.opacity = (element.fadeControl.opacity < 100 ? element.fadeControl.opacity / 100 : 1);
			element.style.filter = (element.fadeControl.opacity < 100 ? "alpha(opacity=" + element.fadeControl.opacity + ")" : '');
			eval(element.fadeControl.afterJS);
			element.fadeControl.running = false;
			element.fadeControl.abort = false;
		} else {
			var opacity = Math.max(1,Math.round(element.fadeControl.startOpacity + (element.fadeControl.counter * element.fadeControl.intervalStep)));
			element.style.opacity = opacity / 100;
			element.style.filter = "alpha(opacity=" + opacity + ")";
			element.fadeControl.opacity = opacity;
			window.setTimeout("fadeInLoop('" + elementId + "')", element.fadeControl.timeSlice);
		}
	} else {
		element.fadeControl.invert = false;
		element.fadeControl.fadeIn = false;
		element.fadeControl.fadeOut = true;
		var temp = element.fadeControl.startOpacity;
		element.fadeControl.startOpacity = element.fadeControl.targetOpacity;
		element.fadeControl.targetOpacity = temp;
		element.fadeControl.counter = element.fadeControl.intervals - element.fadeControl.counter;
		fadeOutLoop(elementId);
	}
}

function fadeOut (elementId,afterJS,intervalCount,intervalSlice,opacityFinal,opacityStart) {
	var element = document.getElementById(elementId);
	if (!element.fadeControl)
		element.fadeControl = {};
	if (element.fadeControl.running) {
		if (element.fadeControl.fadeIn)
			element.fadeControl.invert = true;
	} else {
		element.fadeControl.running	= true;
		element.fadeControl.invert	= false;
		element.fadeControl.fadeIn	= false;
		element.fadeControl.fadeOut	= true;
		element.fadeControl.abort	= false;
		element.fadeControl.counter	= 0;
		element.fadeControl.afterJS = (!afterJS || afterJS < 1 ? '' : afterJS);
		element.fadeControl.intervals = (intervalCount == undefined || intervalCount < 0 ? fadeDefaultIntervalCount : intervalCount);
		element.fadeControl.timeSlice = (intervalSlice == undefined || intervalSlice < 0 ? fadeDefaultIntervalSlice : intervalSlice);
		element.fadeControl.startOpacity  = (opacityStart == undefined || opacityStart < 0 ? element.fadeControl.opacity || 100 : opacityStart);
		element.fadeControl.targetOpacity = (opacityFinal == undefined || opacityFinal < 0 ? 0 : opacityFinal);
		element.fadeControl.intervalStep  = (element.fadeControl.startOpacity - element.fadeControl.targetOpacity) / element.fadeControl.intervals;
		element.style.opacity = element.fadeControl.startOpacity / 100;
		element.style.filter  = "alpha(opacity=" + element.fadeControl.startOpacity + ")";
		element.style.visibility = "visible";
		fadeOutLoop(elementId);
	}
}

function fadeOutLoop (elementId) {
	var element = document.getElementById(elementId);
	if (element.fadeControl.abort) {
		element.fadeControl.running = false;
		element.fadeControl.abort = false;
		return;
	}
	if (!element.fadeControl.invert) {
		if (++element.fadeControl.counter == element.fadeControl.intervals) {
			element.fadeControl.opacity = element.fadeControl.targetOpacity;
			element.style.opacity = (element.fadeControl.opacity ? element.fadeControl.opacity / 100 : 0);
			element.style.filter = (element.style.opacity ? "alpha(opacity=" + element.fadeControl.opacity + ")" : '');
			element.style.visibility = (element.fadeControl.opacity ? "inherit" : "hidden");
			eval(element.fadeControl.afterJS);
			element.fadeControl.running = false;
			element.fadeControl.abort = false;
		} else {
			var opacity = Math.max(1,Math.round(element.fadeControl.startOpacity - (element.fadeControl.counter * element.fadeControl.intervalStep)));
			element.style.opacity = opacity / 100;
			element.style.filter = "alpha(opacity=" + opacity + ")";
			element.fadeControl.opacity = opacity;
			window.setTimeout("fadeOutLoop('" + elementId + "')", element.fadeControl.timeSlice);
		}
	} else {
		element.fadeControl.invert = false;
		element.fadeControl.fadeIn = true;
		element.fadeControl.fadeOut = false;
		var temp = element.fadeControl.startOpacity;
		element.fadeControl.startOpacity = element.fadeControl.targetOpacity;
		element.fadeControl.targetOpacity = temp;
		element.fadeControl.counter = element.fadeControl.intervals - element.fadeControl.counter;
		fadeInLoop(elementId);
	}
}

function fadeAbort (elementId) {
	var element = document.getElementById(elementId);
	if (element.fadeControl && element.fadeControl.running)
		element.fadeControl.abort = true;
}

function getCookie (cookieRequested) {
	var cookies = document.cookie.split(";");
	for (var i=0; i<cookies.length; i++) {
		var cookieNameValue = cookies[i].replace(/^\s+|\s+$/g,"");
		if (cookieNameValue.search(/=/) > 0) {
			cookieNameValue = cookieNameValue.split("=");
			if (cookieNameValue[0].replace(/^\s+|\s+$/g,"") == cookieRequested)
				return(cookieNameValue[1].replace(/^\s+|\s+$/g,""));
		}
	}
	return('');
}

function resetCookies () {
	var cookies = document.cookie.split(";");
	for (var i=0; i<cookies.length; i++)  {
		var cookieNameValue = cookies[i].replace(/^\s+|\s+$/g,"");
		if (cookieNameValue.search(/=/) > 0) {
			cookieNameValue = cookieNameValue.split("=")
			document.cookie = cookieNameValue[0] + "=;path=/";
		}
	}
}

function getBrowserInfo () {
	var browser = new Array();
	browser.name = "Unknown";
	browser.system = "Unknown";
	browser.version = 0;
	browser.unsupported = 0;
	browser.unidentified = 0;
	var temp;
	switch (navigator.appName) {
		case 'Microsoft Internet Explorer':
			if (temp = navigator.appVersion.match(/MSIE ([\d\.]+)/)) {
				browser.name = 'IE';
				browser.version = parseFloat(temp[1]);
			}
			break;
		case 'Netscape':
			if (temp = navigator.appVersion.match(/Chrome\/([\d\.]+)/)) {
				browser.name = "Chrome";
				browser.version = temp[1];
			} else if (temp = navigator.userAgent.match(/version\/([\d\.]+) Safari/i)) {
				browser.name = "Safari";
				browser.version = parseFloat(temp[1]);
			} else if (temp = navigator.userAgent.match(/Firefox\/([\d\.]+)/)) {
				browser.name = "Firefox";
				browser.version = parseFloat(temp[1]);
			} else if (temp = navigator.userAgent.match(/(Mobile.*?)\/([\d\.]+)?/i)) {
				browser.name = temp[1];
				browser.version = temp[2] || 0;
			} else if (temp = navigator.userAgent.match(/Konqueror\/([\d\.]+)/)) {
				browser.name = "Konqueror";
				browser.version = parseFloat(temp[1]);
				browser.unsupported = 1;
			}
			break;
		case 'Opera':
			browser.name = 'Opera';
			browser.version = (temp = navigator.userAgent.match(/version\/([\d\.]+)/i)) ? parseFloat(temp[1]) : 0;
			break;
	}
	if (temp = navigator.userAgent.match(/(Mac OS .*?)[;\)]|(Windows .*?)[;\)]|(Android .*?)[;\)]/i)) {
		browser.system = temp[1] || temp[2] || temp[3];
		var windows = {"Windows NT 5.1" : "Windows XP", "Windows NT 6.0" : "Windows Vista", "Windows NT 6.11" : "Windows 7"};
		browser.system = windows[browser.system] || browser.system.replace(/_/g,'.');
	} else
		browser.system = navigator.platform;
	browser.unidentified = (browser.name == "Unknown");
	return (browser);
}

function getWebsiteVersion (elementId) {
	var metas = document.getElementsByTagName('META');
	for (var i in metas) {
		if (metas[i].name == "version") {
			if (elementId) {
				document.getElementById(elementId).innerHTML = metas[i].content;
				break;
			} else {
				return (metas[i].content);
			}
		}
	}
}

function getVersionInfo () {
	return ('Webcode: ' + getWebsiteVersion() + ', Browser: ' + browser.name + ' ' + browser.version + ', System: ' + browser.system);
}

function backlevelBrowser () {
	if (browser.name == "IE" && browser.version < 5.5) {
		document.writeln(
			'<div id="backlevelBrowser"><span>Unsupported version of Internet Explorer detected (IE' + browser.version +
				') &ndash; pages may not render correctly.</span></div>');
		document.getElementById("wrapperHeaderImage").className = "wrapperHeaderImageShrunk";
	} else if (browser.unsupported || browser.unidentified) {
		document.writeln(
			'<div id="backlevelBrowser"><span>Unsupported or unidentified browser; pages may not render correctly.</span></div>');
		document.getElementById("wrapperHeaderImage").className = "wrapperHeaderImageShrunk";
	}
}

function feedback () {
	var data = 'BCADADB1C0B8BCBCD6C3CDA6D0D9D0DBE1A6DEEDEE';
	var addr = '';
	for (var i=0; i<data.length; i+=2)
		addr += String.fromCharCode((parseInt(data.substr(i,2),16) - 3*i/2 + 187) % 256);
	document.location = 'mailto:' + addr + '?subject=Feedback on Positive Being website (' + getVersionInfo() + ')';
}

function alignColumns (parentId,topMarginCalc) {
	var parent = document.getElementById(parentId);
	var parentHeight = (parent.clientHeight > 0 ? parent.clientHeight : parent.offsetHeight);
	var maxChildHeight = 0;
	var child = parent.firstChild;
	while (child !== null) {
		if (child.nodeName.substr(0,1) !== '#') {
			var childHeight = (child.clientHeight > 0 ? child.clientHeight : child.offsetHeight);
			maxChildHeight = Math.max(maxChildHeight,childHeight);
		}
		child = child.nextSibling;
	}
	child = parent.firstChild;
	while (child !== null) {
		if (child.nodeName.substr(0,1) !== '#') {
			var childHeight = (child.clientHeight > 0 ? child.clientHeight : child.offsetHeight);
			eval('var childTopMargin = Math.round(' + topMarginCalc + ')');
			child.style.marginTop = childTopMargin + "px";
			// setting child bottom margin can sometimes cause parent div height to expand IE7!
			child.style.marginBottom = Math.max(0, parentHeight - childHeight - childTopMargin) + 'px';
		}
		child = child.nextSibling;
	}
	parent.style.overflow = 'hidden';
}

function findSubnode (type,head) {
	var parent = typeof(head) == "object" ? head : document.getElementById(head);
	var child = parent.firstChild;
	while (child !== null) {
		if (child.nodeName == type)
			return (child);
		if (child.nodeName.substr(0,1) !== '#') {
			var grandchild = findSubnode(type,child);
			if (grandchild !== null) return (grandchild);
		}
		child = child.nextSibling;
	}
	return (null);
}

function centerParentColumns (parentId) {
	/* vertically centers all columns to parent */
	alignColumns(parentId, '(parentHeight - childHeight) / 2');
}

function centerChildColumns (parentId) {
	/* vertically center all columns to tallest column */
	alignColumns(parentId, '(maxChildHeight - childHeight) / 2');
}

function baseParentColumns (parentId) {
	/* vertically base aligns all columns to parent */
	alignColumns(parentId, 'parentHeight - childHeight');
}

function baseColumns (parentId) {
	/* vertically base aligns all columns to tallest column */
	alignColumns(parentId, 'maxChildHeight - childHeight');
}

function loftCenterColumns (parentId) {
	/* vertically centers tallest column and top-align other columns to tallest */
	alignColumns(parentId, '(parentHeight - maxChildHeight) / 2');
}

function baseCenterColumns (parentId) {
	/* vertically center tallest column and base-align other columns to tallest */
	alignColumns(parentId, '(parentHeight - maxChildHeight) / 2 + (maxChildHeight - childHeight)');
}

function centerImage (parentId) {
	/* vertically centers image to parent */
	var parent = document.getElementById(parentId);
	var image = findSubnode("IMG",parent);
	if (image !== null && image.clientHeight < parent.clientHeight)
		image.style.marginTop = Math.round((parent.clientHeight - image.clientHeight) / 2) + "px";
}

