// JavaScript Document

/*	getElementsByClassName - Return an array of elements having the given CSS class
		string className	the name of the class to match
		string tag			(optional) find only elements of specified tag type
		object elm			(optional) search children of this DOM element
		
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/	
var getElementsByClassName = function (className, tag, elm) {
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
        }
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}

/*	setPos - set the absolute position of an element
		object obj			the object whose position is to be set
		string objCorner	corner of object to which position applies ("tl", "tr", "bl", "br")
		object xRefObj		set horizontal position relative to this object
		string xRefEdge		which edge of xRefObj to use ("l", "r")
		int xOffset			horizontal offset
		object yRefObj		set vertical position relative to this object
		string yRefEdge		which edge of yRefObj to use ("t", "b")
		int yOffset			vertical offset
		boolean show		visibility of object being positioned
		
		If a string is provided for obj, xRefObj or yRefObj, the object with the 
		specified "id" attribute is used.
*/
function setPos(obj, objCorner, xRefObj, xRefEdge, xOffset, yRefObj, yRefEdge, yOffset, show) {
	if (typeof obj == 'string') obj = document.getElementById(obj);
	if (obj) {
		var newX = xOffset;
		var newY = yOffset;
		if (typeof xRefObj == 'string') xRefObj = document.getElementById(xRefObj);
		if (typeof yRefObj == 'string') yRefObj = document.getElementById(yRefObj);
		if (xRefObj) {
			newX += findPosX(xRefObj);
			if (xRefEdge == "r") newX += xRefObj.offsetWidth;
		}
		if (yRefObj) {
			newY += findPosY(yRefObj);
			if (yRefEdge == "b") newY += yRefObj.offsetHeight;
		}
		if (objCorner == "tr" || objCorner == "br") newX -= obj.offsetWidth;
		if (objCorner == "bl" || objCorner == "br") newY -= obj.offsetHeight;
		obj.style.position = 'absolute';
		obj.style.top = newY + 'px';
		obj.style.left = newX + 'px';
		obj.style.visibility = show ? 'visible' : 'hidden';
	}
}

var activatedElem = null;
var activatedImage = null;
var activateTimeout = null;
var activatedHold = false;

function parsePosition(posStr) {
	var pos = new Object();
	var posItems = posStr.split(":");
	pos.corner = posItems[0];
	if (pos.corner != "tr" && pos.corner != "tl" && pos.corner != "br" && pos.corner != "bl") pos.corner = "tl";
	pos.hEdge = posItems[1].substr(0, 1);
	if (pos.hEdge != "l" && pos.hEdge != "r") pos.hEdge = "r";
	if (posItems[1].substr(1, 1) == '+') pos.hOffset = posItems[1].substr(2) * 1;
	else if (posItems[1].substr(1, 1) == '-') pos.hOffset = posItems[1].substr(2) * -1;
	else pos.hOffset = 0;
	pos.vEdge = posItems[2].substr(0, 1);
	if (pos.vEdge != "t" && pos.vEdge != "b") pos.vEdge = "t";
	if (posItems[2].substr(1, 1) == '+') pos.vOffset = posItems[2].substr(2) * 1;
	else if (posItems[2].substr(1, 1) == '-') pos.vOffset = posItems[2].substr(2) * -1;
	else pos.vOffset = 0;
	return pos;
}

function makeActive(elem, image, ref, posStr) {
	if (!activatedHold) {
		if (activateTimeout) {
			window.clearTimeout(activateTimeout);
			activateTimeout = null;
		}
		activateTimeout = window.setTimeout(function(){activate(elem, image, ref, posStr);}, 100);
	}
}

function stayActive() {
	if (activateTimeout) {
		window.clearTimeout(activateTimeout);
		activateTimeout = null;
	}
	activatedHold = true;
}

function clearActive() {
	activatedHold = false;
	if (activateTimeout) {
		window.clearTimeout(activateTimeout);
		activateTimeout = null;
	}
	if (activatedElem)
		activateTimeout = window.setTimeout('deactivate()', 250);
}

/*	activate - handle mouseover event for items in Bestsellers and What's New pages
		object elem		the element that is to be activated
		string image	(optional) id of an image to display for activated element
		string ref		(optional) id of a reference element for positioning image
*/
function activate(elem, image, ref, posStr) {
	if (activatedElem) deactivate();
	if (!posStr) posStr = "tr:r-25:t";
	var pos = parsePosition(posStr);
	if (image) { setPos(image, pos.corner, ref, pos.hEdge, pos.hOffset, ref, pos.vEdge, pos.vOffset, true); }
	elem.className = 'current';
	var divElem = document.getElementById(image + '-div');
	if (divElem) { divElem.style.visibility = 'visible'; divElem.style.display = 'block';  }
	activatedElem = elem;
	activatedImage = image;
}

/*	deactivate - handle mouseout event for items in Bestsellers and What's New pages
*/
function deactivate() {
	if (activatedImage) {
		var imageElem = document.getElementById(activatedImage);
		if (imageElem) { imageElem.style.visibility = 'hidden'; }
		var divElem = document.getElementById(activatedImage + '-div');
		if (divElem) { divElem.style.visibility = 'hidden'; divElem.style.display = 'none'; }
	}
	if (activatedElem) activatedElem.className = '';
	activatedElem = null;
	activatedImage = null;
}

var nowPlaying = null;		// remember current track

/*	playUrl - play the specified audio file
		object obj			the element that was clicked to play this file
		string theAudioUrl	URL of the audio file to play
*/
function playUrl(obj, theAudioUrl) {
	var playlist = wimpy_getPlaylist();
	if (playlist) {
		for (var i in playlist)
			if (playlist[i][2] == theAudioUrl)
				wimpy_gotoTrack((typeof(i) == "string" ? parseInt(i) : i) + 1);
	}
}
function wimpyOnTrackStart(o) {
	if (nowPlaying) nowPlaying.trackobj.className = '';
	nowPlaying = findTrackByUrl(o.filename);
	if (nowPlaying) { 
		nowPlaying.trackobj.className = 'nowPlaying';
		var trklist = document.getElementById('stTracklist');
		if (trklist && trklist.contentScroll)
			trklist.contentScroll(false, nowPlaying.tracknum > 7 ? (nowPlaying.tracknum - 7) * 22 : 0, false);
			
	}
}
function wimpyCallback(arg) {
	if (typeof(arg) == "object") {
		var a = arg;
		var action = a.shift();
		//logit("wimpyCallback: " + arrayToString(action, a), "logarea");
		if (action == "wimpy_getTrackInfo") {
			;
		} else if (action == "wimpy_returnPlaylistItem") {
			;
		} else if (action == "wimpy_trackDone") {
			;
		} else if (action == "wimpy_trackStarted") {
			if (nowPlaying) nowPlaying.trackobj.className = '';
			nowPlaying = findTrackByUrl(a[2]);
			if (nowPlaying) { 
				nowPlaying.trackobj.className = 'nowPlaying';
				var trklist = document.getElementById('stTracklist');
				if (trklist && trklist.contentScroll)
					trklist.contentScroll(false, (nowPlaying.tracknum - 7) * 22, false);
					
			}
		}
	}
	//else
	//	logit("wimpyCallback: " + arg, "logarea");
}
function findTrackByUrl(url) {
	var tracks = getElementsByClassName("trackName", "td", document.getElementById("stTracklist"));
	for (i = 0; i < tracks.length; i++)
		if (tracks[i].innerHTML.indexOf(url) >= 0)
			for (n = tracks[i].firstChild; n; n = n.nextSibling)
				if (n.nodeName == "A") return { tracknum: i + 1, trackobj: n };
	return null;
}
function arrayToString(label, theArray) {
	var str = label + ": ";
	for (i = 0; i < theArray.length; i++) {
		if (i == 0) str += '[';
		else str += ', ';
		str += "'" + theArray[i] + "'";
	}
	if (i > 0) str += ']';
	return str;
}
function logit(text, id) {
	var logarea = document.getElementById(id);
	if (logarea) {
		logarea.value += text + "\n";
	}
	else alert(text);
}

function pickQuote() {
	var numQuotes = 14;
	var n = Math.floor(Math.random() * numQuotes + 1);

	document.write('<img class="quote" src="/images/quotes/quote' + n + '.gif" alt="" />'); 
}

var searchCategory = null;
function setCategory(elem, code) {
	var catElem = document.getElementById("searchCat");
	var catInput = document.getElementById("searchCatCode");
	if (catElem)
		catElem.innerHTML = elem.getElementsByTagName("a")[0].innerHTML;
	if (searchCategory)
		searchCategory.className = 'yuimenuitem';
	elem.className = 'yuimenuitem-checked';
	searchCategory = elem;
	if (catInput)
		catInput.value = code;
}

var mitlMonths = [
		{ shortName: "Jan", longName: "January" },
		{ shortName: "Feb", longName: "February" },
		{ shortName: "Mar", longName: "March" },
		{ shortName: "Apr", longName: "April" },
		{ shortName: "May", longName: "May" },
		{ shortName: "Jun", longName: "June" },
		{ shortName: "Jul", longName: "July" },
		{ shortName: "Aug", longName: "August" },
		{ shortName: "Sep", longName: "September" },
		{ shortName: "Oct", longName: "October" },
		{ shortName: "Nov", longName: "November" },
		{ shortName: "Dec", longName: "December" }
	];
function putMitlLink(linkText) {
	var m = new Date().getMonth();
	document.write('<a href="/mitl/' + mitlMonths[m].shortName + '.html">This Month in<br />Meher Baba\'s Life</a>');
}

function showPanel(id, w, h, where, heading, bodyUrl, footer) {
	YAHOO.namespace("YAHOO.Sheriar.panels");
	var panelName = "YAHOO.Sheriar.panels." + id;
	var thePanel = eval(panelName);
	if (! thePanel) {
		var cfg = {
			width: w + "px",
			context: [ where, "tl", "tl" ],
			constraintoviewport: true,
			close: true,
			zIndex: 3,
			visible: false
		}
		thePanel = new YAHOO.widget.Panel(id, cfg);
		eval(panelName + "= thePanel");
	}
	else {
		thePanel.cfg.setProperty("width", w + "px");
		thePanel.cfg.setProperty("context", [ where, "tl", "tl" ]);
	}
	var headContent = '<div class="tl"></div><span>' + heading + '</span><div class="tr"></div>';
	var bodyContent = '<iframe src="' + bodyUrl + '" width="' + w + '" height="' + h + '" ' +
						'frameborder="0" marginheight="0" marginwidth="0" scrolling="no"></iframe>';
	thePanel.setHeader(headContent);
	thePanel.setBody(bodyContent);
	thePanel.setFooter(footer);
	thePanel.render(document.body);
	thePanel.hideEvent.subscribe(function(e,args,me){me.setBody("");}, thePanel);
	thePanel.show();
}

function showBioPanel(url) {
	showPanel('bioPanel', 438, 430, 'itemDetail', 'Sheriar Books Online: Biography', url, '');
}

function showImagePanel(id, where, url, caption) {
	YAHOO.namespace("YAHOO.Sheriar.panels");
	var panelName = "YAHOO.Sheriar.panels." + id;
	var thePanel = eval(panelName);
	if (! thePanel) {
		var cfg = {
			//width: "500px",
			context: [ where, "tl", "tl" ],
			constraintoviewport: true,
			zIndex: 3,
			close: true,
			visible: false
		}
		thePanel = new YAHOO.widget.Panel(id, cfg);
		eval(panelName + "= thePanel");
	}
	else {
		thePanel.cfg.setProperty("context", [ where, "tl", "tl" ]);
		thePanel.cfg.setProperty("visible", false);
	}
	var headContent = '<div class="tl"></div><span>' + caption + '</span><div class="tr"></div>';
	var bodyContent = '<div class="imgcontent"><img src="' + url + '" alt="" /><p>' + caption + '</p></div>';
	thePanel.setHeader(headContent);
	thePanel.setBody(bodyContent);
	thePanel.setFooter('');
	thePanel.render(document.getElementsByTagName("body")[0]);
	thePanel.hideEvent.subscribe(function(e,args,me){me.setBody("");}, thePanel);
	thePanel.show();
}
						
function showVideoPanel(id, where, url, caption) {
	YAHOO.namespace("YAHOO.Sheriar.panels");
	var panelName = "YAHOO.Sheriar.panels." + id;
	var thePanel = eval(panelName);
	if (! thePanel) {
		var cfg = {
			width: "449px",
			context: [ where, "tl", "tl" ],
			constraintoviewport: true,
			zIndex: 3,
			close: true,
			visible: false
		}
		thePanel = new YAHOO.widget.Panel(id, cfg);
		eval(panelName + "= thePanel");
	}
	else {
		thePanel.cfg.setProperty("context", [ where, "tl", "tl" ]);
		thePanel.cfg.setProperty("visible", false);
	}
	var qs;
	if (url.indexOf('://vimeo.com/') >= 0)
		qs = '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=bd4555&amp;fullscreen=1&amp;autoplay=1';
	else
		qs = '&amp;hl=en&amp;rel=0&amp;autoplay=1&amp;color1=0xaa928d&amp;color2=0xcdafa9&amp;fs=1';
	var headContent = '<div class="tl"></div><span>Sheriar Books Online: Video Detail</span><div class="tr"></div>';
	var bodyContent =
        '<div id="videoContent">' +
          '<object width="425" height="350">' +
            '<param name="allowfullscreen" value="true"></param>' +
            '<param name="flashvars" value="fs=true"></param>' +
            '<param name="movie" value="' + url + qs + '"></param>' +
            '<embed width="425" height="350" src="' + url + qs + '" type="application/x-shockwave-flash" allowfullscreen="true" flashvars="fs=true"></embed>' +
          '</object>' +
		  '<p>' + caption + '</p>' +
        '</div>';

	thePanel.setHeader(headContent);
	thePanel.setBody(bodyContent);
	thePanel.setFooter('');
	thePanel.render(document.getElementsByTagName("body")[0]);
	thePanel.hideEvent.subscribe(function(e,args,me){me.setBody("");}, thePanel);
	thePanel.show();
}

function showPopup(url) {
	var wMax = (screen.width) ? (screen.width) : 1024;
	var settings = 'location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=yes,scrollbars=yes,width=' + Math.min(825, wMax);
	var w = window.open(url, 'popup', settings);
	w.focus();
}

var subscriptionType = null;
function subscribeCheckbox(elem) {
	if (subscriptionType) {
		var checked = document.getElementById(subscriptionType);
		checked.className = 'checkbox';
	}
	if (elem) {
		elem.className = 'checked';
		subscriptionType = elem.id;
	}
}

function getSubscriptionTypeFromParent() {
	if (window.parent && window.parent.subscriptionType) {
		subscriptionType = window.parent.subscriptionType;
		var elem = document.getElementById(subscriptionType);
		if (elem)
			elem.className = 'checked';
	}
}

var subscriptionAction = null;
function subscribeAction(elem) {
	if (subscriptionAction) {
		var checked = document.getElementById(subscriptionAction);
		checked.className = 'checkbox';
	}
	if (elem) {
		elem.className = 'checked';
		subscriptionAction = elem.id;
	}
}

function geckoInputFix(id) {
	if (navigator && navigator.product && navigator.product == "Gecko") {
		var div = document.getElementById(id);
		if (div) {
			div.style.display = 'none';
			div.style.overflow = 'auto';
			setTimeout(function() { div.style.display = 'block'; }, 10);
		}
	}
}

function selectOptions(onclick, opts) {
	document.write('<div class="bd"><ul class="first-of-type">');
	for (var i = 0; i < opts.length; ++i)
		document.write('<li class="yuimenuitem" onclick="' + onclick + '(this,' + "'" + opts[i][0] + "'" + ');">' +
						'<a class="yuimenuitemlabel" href="javascript:;" hidefocus="true">' + opts[i][1] + '</a></li>');
	document.write('</ul></div>\n');
}

