/* Soul Pyre JavaScript Sheet v1.4 04-18-2007 by Derar */

/* Display Resolution */

function draw_footim()
		{
		doc = top.main.document;
		footim = doc.createElement("IMG");
		footim.border = 0;
		footim.src = top.art[0].src;
		footim.title = "Soul Pyre Logo";
		if (screen.height <= 768)
			{
			footim.width = "108";
			footim.height = "56";
			}
		else
			{
			footim.width = "136";
			footim.height = "71";
			}
		place = doc.getElementById("FootImage");
		place.appendChild(footim);
		}

/* Navigation */

var loadleft = "false"; // Indicates need to load new page in main window. Left frame is always
			// loaded first to properly draw the leftbar.

function sp_goto(newpage,index) // Main command to change pages. Takes the destination filename, less the .html.
				// and an optional index indicator for pages like profiles and art displays.
		{
		top.left.location = "left.html?" + newpage + ".html=" + index;
		loadleft = "true";
		}

function left_loaded()  // Fires on reload of left frame. Draws information from its own location, set by sp_goto.
		{
		if (top.loadleft == "true")
			{
			getpage = top.left.location.search;
			mark = getpage.indexOf("=");
			newpage = getpage.substring(1, mark);
			index = getpage.substring(++mark);
			if (index != "undefined") newpage = newpage + "?" + index;
			top.loadleft = "false";
			top.main.location = newpage;
			}
		}

function come_from() // Used to determine destination when linking from the members' section, or when using a direct url.
		{
		getcookie = readCookie("pyreRefresh");
		if (getcookie)
			{
			set_page(getcookie);
			eraseCookie("pyreRefresh");
			}
		else if (top.location.search)
			{
			set_page(top.location.search);
			}
		else top.sp_goto("home");
		}

function set_page(getpage)
		{
		mark = getpage.indexOf("=");
		mark2 = getpage.indexOf("*");
		newpage = (mark2 != -1) ? getpage.substring(1,mark2) : ((mark != -1) ? getpage.substring(1,mark) : getpage.substring(1));
		index = (mark2 != -1) ? ((mark != -1) ? getpage.substring(++mark2,mark) : getpage.substring(++mark2)) : "undefined";
		top.sp_goto(newpage, index);
		}

function check_member() // Checks if coming from the members' section, and calls the function to add a link
			// to the members' section to the top nav bar.
		{
		if (top.location.search)
			{
			getpage = top.location.search;
			if (getpage.indexOf("member") != -1) 
				{
				top.add_member();
				}
			}
		}

function add_member()   // Function that adds member link to top nav bar. If check is necessary as explorer treats
			// placement of blank text nodes in the DOM tree differently.
		{
		currdoc = top.header.document;
		currnav = currdoc.getElementById("navcell");
		newlink = currdoc.createElement("A");
		newlink.id = "nav9";
		newlink.className = "link4";
		newlink.href = "../members/index.html";
		newlink.target = "_top";
		linktext = currdoc.createTextNode(" Members ");
		newlink.appendChild(linktext);
		separator = currdoc.createTextNode(" | ");
		holder = currdoc.getElementById("nav5");
		if (navigator.appName == "Microsoft Internet Explorer") navp = currnav.childNodes[0];
		else navp = currnav.childNodes[1];
		navp.insertBefore(newlink, holder);
		navp.insertBefore(separator, holder);
		}

function createCookie(name,value,num,period)
	{
	if (num) 
		{
		var date = new Date();
		set = false;
		switch (period)
			{
			case "year" :
				num = num * 365;
				set = true;
			case "month" :
				num = (set = false) ? num * 30 : num;
				set = true;
			case "week" :
				num = (set = false) ? num * 7 : num;
			case "day" :
				num = num * 24;
			case "hour" :
				num = num * 60;
			case "minute" :
				num = num * 60;
			case "second" :
				num = num * 1000;
			}
		date.setTime(date.getTime()+num);
		var expires = "; expires="+date.toGMTString();
		}
	else var expires = "";
	top.document.cookie = name+"="+value+expires+"; path=/";
	}

function readCookie(name) 
	{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
		{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
	return null;
	}

function eraseCookie(name)
	{
	createCookie(name,"",-1, null);
	}

function set_refresh()
	{
	path = top.main.location.pathname;
	mark = path.indexOf("new/") + 4;
	mark2 = path.indexOf(".html");
	page = path.substring(mark,mark2);
	switch (page)
		{
		case "artdisplay" :
			index = top.main.show_num;
			page = page + "*" + index;
			break;
		case "writdisplay" :
			index = top.main.show_num;
			page = page + "*" + index;
			break;
		case "profiles" :
			index = top.main.profile_num;
			page = page + "*" + index;
			break;
		}
	if (top.header.document.getElementById("nav9")) page = page + "=member";
	value = "?" + page;
	name = "pyreRefresh";
	createCookie(name,value,10,"second");
	}	

/* Content Page */

// Images

var art = new Array();
for (i = 0; i <= 9; i++)	// Creates array of images to preload art content. This gets the main loading
	{			// lag out of the way early, allowing for smoother navigation.
	art[i] = new Image();
	}

function art_load() // Preloads images into the above array. This fires from onLoad event on the body tag of index.html.
		{
		top.art[0].src="../Images/Pyre_logo.jpg"
		for (i = 1; i <= 7; i++)
			{
			top.art[i].src = "../content/art/nergal_" + i + ".jpg";
			}
		for (i = 8; i <= 9; i++)
			{
			top.art[i].src = "../content/art/purr_" + (i-7) + ".jpg";
			}
		}

// Preview

function show_preview(pre_source) // Sets the art preview image to the mouseOver'd item, and makes it visible.
		{
		var pic = top.main.document.getElementById("artpreview");
		pic.src=pre_source;
		pic.style.visibility="visible";
		}

function hide_preview()	// Hides the art preview image. Image source in only changed on show.
		{
		var pic = top.main.document.getElementById("artpreview");
		pic.style.visibility="hidden";
		}
// Sounds

function set_player(source) // Sets the song player and source. Explorer has issues with replaceChild and embeds, since
			    // its geared more towards Object tags. Bastards. In order to properly allow for future
			    // different tracks, a dummy embed is written into the html file.
		{
		newsource = "../content/songs/" + source;
		if (navigator.appName == "Microsoft Internet Explorer") top.main.location=newsource;
		else
			{
			playerdoc = top.main.document;
			playercell = playerdoc.getElementById("td_player");
			playerqueued = playerdoc.getElementById("queued");
			playersong = playerdoc.getElementById("playersong");
			playerembed = playerdoc.createElement("EMBED");
			playerembed.height="40";
			playerembed.width="250";
			playerembed.setAttribute("loop", "false");
			playerembed.setAttribute("autostart", "true");
			playerembed.setAttribute("EnableJavascript", "true");
			playerembed.type="audio/mpeg";
			playerembed.setAttribute("src", newsource);
			embedchange = (playercell.childNodes[1]) ? playercell.childNodes[1] : playercell.childNodes[0];
			if ((embedchange.nodeName == "EMBED") && (playercell.replaceChild))
				{
				playercell.replaceChild(playerembed, embedchange);
				}
			else
				{
				playercell.insertBefore(playerembed, embedchange);
				}
			song = playersong.childNodes[0].data;
			queuetext = document.createTextNode("Now Queued: " + song + " ");
			textreplace = playerqueued.childNodes[0];
			textreplace.nodeValue = queuetext.data;
			playercell.style.visibility = "visible";
			}
		}

function player_done() // Stops the music and hides the player. If the Stop function isn't supported (Netscape, Exploder) then it refreshes.
		{
		playerdoc = top.main.document;
		playerembed = playerdoc.getElementById("td_player");
		if (playerembed.childNodes[1].Stop)
			{
			playerembed.childNodes[1].Stop();
			playercell.style.visibility = "hidden";
			}
		else
			{
			top.sp_goto('content');
			}
		}

/* Other */

// LeftBar

function draw_left(page) // Generic leftbar function to draw the left link listing for standard information pages.
			 // Draws an extra instance of the text from the main page. I should consider changing how
			 // this is extracted. However, functions well, has 3 options. Header4 is your standard
			 // indented link to anchors on the page. Header1 is used to indicated the current overpage.
			 // Header3 is used to produce non-indented links to other pages (as with the petitions).
		{
		leftdoc = top.left.document;
		maindoc = top.main.document;
		linktop = leftdoc.getElementById("links");
		getanch = maindoc.getElementsByTagName("A");
		drawcount = getanch.length;
		for (i = 0; i <= drawcount-1; i++)
			{
			curranch = getanch[i];
			linkmark = curranch.name;
			anchparent = curranch.parentNode;
			linktext = curranch.childNodes[0]
			if ((navigator.appName == "Microsoft Internet Explorer") || (navigator.userAgent.toLowerCase().indexOf('chrome') > -1))
				{
				newtext = linktext.nodeValue;
				linktext = leftdoc.createTextNode(newtext);
				curranch.style.visibility = "hidden";
				}
			classcheck = anchparent.className;
			switch (classcheck)
				{
				case "header1":
					newline = leftdoc.createElement("DT");
					newline.appendChild(linktext);
					break;
				case "header3":
					newline = leftdoc.createElement("DT");
					newlink = leftdoc.createElement("A");
					newlink.id = "leftlink" + i;
					newlink.className = "link4";
					newlink.href = "javascript:top.sp_goto('" + linkmark + "')";
					newlink.appendChild(linktext);
					newline.appendChild(newlink);
					break;
				case "header6":
					classcheck = "header4"
				case "header4":
					newline = leftdoc.createElement("DD");
					newlink = leftdoc.createElement("A");
					newlink.id = "leftlink" + i;
					newlink.className = "link4";
					newlink.href = page + ".html#" + linkmark;
					newlink.appendChild(linktext);
					newline.appendChild(newlink);
					break;
				default:
					alert("Error: Link Class of " + linktext.nodeValue + " not recognized. Update script.");
				}
			linktop.appendChild(newline);
			}
		}
		

		
