var goldenrod
if (!goldenrod) goldenrod = {}

/*Importing classes
var Dom = goldenrod.Dom;
var Utility = goldenrod.Utility 
var ViewportWidth  = goldenrod.ViewportWidth;
var ViewportHeight = goldenrod.ViewportHeight
var goldenrod.Drag;	//Must declare it to test if it is defined
*/
goldenrod.C_Article = new Object;

//C_Article:	An object namespace for Comment Article Pages.
goldenrod.C_Article.resize = function() {
	
	/************************************************************************************************
	When the resize flag is 0 - we read the actual height of the "writings" which is set to auto and
	the height of leftbar and sidebar to a bit longer
	*************************************************************************************************/
	
	var i, comment_mark, comment_top;
	if(!goldenrod.C_Article.resize.flag) {
		var writings = document.getElementById('writings');
		var writings_height = Math.round(goldenrod.Dom.getPixel(goldenrod.Dom.getStyle(writings).height)) + 1;
		if(isNaN(writings_height)) writings_height = writings.offsetHeight + 1;
	
		//writings_height is in pixels and there is no reason not to set the height of comments and sidebar
		//also in pixels.
		goldenrod.Dom.setDimension(writings_height, 'comments', "height")	//writings_height is in pixels 
		goldenrod.Dom.setDimension(writings_height, 'sidebar', "height")
		
			/****************************************************************************************
			Set Comment top values - A comment with id = "comment1" will have the same top value as 
			and element with id = comment1_mark. We do not assume the comment id's are consecutive
			we can have a comment with id="sometext" and and a corresponding mark element with id
			"sometext_mark" Note: "sometext" cannot include the underscore character. 
			******************************************************************************************/
		var mark_Array = goldenrod.Utility.getElementsByName(writings, "name", "mark");
		
		
		for(i=0; i < mark_Array.length; i++) {
			comment_mark = mark_Array[i];
			comment_top = Math.round(goldenrod.Dom.getPixel(goldenrod.Dom.getStyle(comment_mark).top));
			if(isNaN(comment_top)) comment_top = comment_mark.offsetTop;
			
			var id = comment_mark.id;
			
			var commentid = id.slice(0, id.search(/_/));
			//alert("id = " + id + " commentid = " + commentid );
			goldenrod.Dom.setDimension(comment_top, commentid, "top");
			}
		
		
		
		goldenrod.C_Article.resize.flag = 1;
		}
	
	var article = document.getElementById("article");
	goldenrod.Utility.centerElt(article)
				
	var links = document.getElementById("links");
	goldenrod.Utility.centerElt(links);
		
	var links_style = goldenrod.Dom.getStyle(links);
		
	goldenrod.Dom.setDimension((goldenrod.ViewportHeight - goldenrod.Dom.getPixel(links_style.height) - 3 - goldenrod.Dom.scroll_bar_pixel), article, "height")
	//article.style.height = (goldenrod.ViewportHeight - goldenrod.Dom.getPixel(links_style.height) - 3 - 24) + "px";
	
	goldenrod.Dom.setDimension((goldenrod.ViewportHeight - goldenrod.Dom.getPixel(links_style.height) - goldenrod.Dom.scroll_bar_pixel ), links, "top")
	//links.style.top = (goldenrod.ViewportHeight - goldenrod.Dom.getPixel(links_style.height) - 24 ) + "px";
		
	var body = document.getElementsByTagName('body')[0];
	//goldenrod.Utility.centerAll(body);
	
	body.style.visibility = "visible";
	}
	
goldenrod.C_Article.resize.flag = 0;

goldenrod.Panel = new Object;


goldenrod.Panel.NAME = "goldenrod.Panel";


goldenrod.Panel.panel, goldenrod.Panel.panel_style, goldenrod.Panel.panel_top, goldenrod.Panel.panel_border_width;

goldenrod.Panel.heading_style;
goldenrod.Panel.panelWidth;		//Total panelWidth is the width of the panel heading

goldenrod.Panel.panel_links, goldenrod.Panel.panel_links_style;
goldenrod.Panel.panel_links_top, goldenrod.Panel.panel_links_max_height, goldenrod.Panel.panelHeight;

goldenrod.Panel.banner;
//Panel main is the larger changeable rectangle of the lower right.
goldenrod.Panel.panel_main;
goldenrod.Panel.panel_main_style, goldenrod.Panel.panel_main_top, goldenrod.Panel.panel_main_max_height;
goldenrod.Panel.panel_main_left, goldenrod.Panel.panel_main_max_width;

goldenrod.Panel.links, goldenrod.Panel.links_style, goldenrod.Panel.linksWidth, goldenrod.Panel.linksHeight; 
goldenrod.Panel.linksVerticalSpace;

goldenrod.Panel.pageName = "";		//For example workshop or writings or video or music
goldenrod.Panel.owner = "daniellepkoff";			//For example daniellepkoff or jesselepkoff

goldenrod.Panel.init = function(pageName, owner) {
	
	if(owner) goldenrod.Panel.owner = owner;
	if(pageName) goldenrod.Panel.pageName = pageName;

	goldenrod.Panel.panel = document.getElementById("panel");
	goldenrod.Panel.panel_style = goldenrod.Dom.getStyle( goldenrod.Panel.panel );
	goldenrod.Panel.panel_top = goldenrod.Dom.getPixel(goldenrod.Panel.panel_style.top);
	goldenrod.Panel.panel_border_width = goldenrod.Dom.getPixel(goldenrod.Panel.panel_style.borderLeftWidth);
	
	goldenrod.Panel.heading_style = goldenrod.Dom.getStyle( document.getElementById("heading") );
	goldenrod.Panel.panelWidth =  goldenrod.Dom.getPixel(goldenrod.Panel.heading_style.width);
	
	goldenrod.Panel.panel_links = document.getElementById("panel_links");
	goldenrod.Panel.panel_links_style = goldenrod.Dom.getStyle( goldenrod.Panel.panel_links );
	goldenrod.Panel.panel_links_top = goldenrod.Dom.getPixel(goldenrod.Panel.panel_links_style.top); 
	goldenrod.Panel.panel_links_max_height = goldenrod.Dom.getPixel(goldenrod.Panel.panel_links_style.maxHeight);
	
	goldenrod.Panel.banner = document.getElementById("panel_banner");
	
	goldenrod.Panel.panel_main = document.getElementById("panel_main");
	goldenrod.Panel.panel_main_style = goldenrod.Dom.getStyle(goldenrod.Panel.panel_main);
	goldenrod.Panel.panel_main_top = goldenrod.Dom.getPixel(goldenrod.Panel.panel_main_style.top);
	goldenrod.Panel.panel_main_max_height = goldenrod.Dom.getPixel(goldenrod.Panel.panel_main_style.maxHeight);
	goldenrod.Panel.panel_main_left = goldenrod.Dom.getPixel(goldenrod.Panel.panel_main_style.left);
	goldenrod.Panel.panel_main_max_width = goldenrod.Dom.getPixel(goldenrod.Panel.panel_main_style.maxWidth);
	
	
	goldenrod.Panel.links = document.getElementById("links");
	goldenrod.Panel.links_style = goldenrod.Dom.getStyle(goldenrod.Panel.links);
	goldenrod.Panel.linksWidth = goldenrod.Dom.getPixel(goldenrod.Panel.links_style.width);
	goldenrod.Panel.linksHeight = goldenrod.Dom.getPixel(goldenrod.Panel.links_style.height);
	goldenrod.Panel.linksVerticalSpace = goldenrod.Panel.linksHeight + 20;	

	/*Panel links dimensions are relative to the panel. This page is designed so that the heading height and panel links
	top are hard coded. (set in the style sheet) Thus panel links top + the maximum height plus extra for the border
	is taken to be the height of the panel*/
	goldenrod.Panel.panelHeight = goldenrod.Panel.panel_links_top +  goldenrod.Panel.panel_links_max_height + 
						2 *( goldenrod.Panel.panel_border_width );
	
}



goldenrod.Panel.resize = function() {
	
	var shroud = document.getElementById("shroud");
	
	if(shroud) {
		shroud.style.width = goldenrod.ViewportWidth + "px";
		shroud.style.height = goldenrod.ViewportHeight + "px";
		}
	
		
	
	var panelWidthAdjust = 
		Math.min((goldenrod.ViewportWidth - (2 * goldenrod.Panel.panel_border_width ) ), goldenrod.Panel.panelWidth);
	
	goldenrod.Dom.setDimension(panelWidthAdjust, goldenrod.Panel.panel, "width");
	
	goldenrod.Dom.setDimension(
		Math.round( (goldenrod.ViewportWidth - panelWidthAdjust - (2 * goldenrod.Panel.panel_border_width ))/2), 
								goldenrod.Panel.panel, 
								"left");
									
	
	var panelHeightAdjusted = 
		Math.min( (goldenrod.ViewportHeight - goldenrod.Panel.linksVerticalSpace - goldenrod.Panel.panel_top), 
								goldenrod.Panel.panelHeight);
	
	goldenrod.Dom.setDimension(
		panelHeightAdjusted - (2 * goldenrod.Panel.panel_border_width ), goldenrod.Panel.panel, "height");
	
	goldenrod.Dom.setDimension(
		(panelHeightAdjusted + goldenrod.Panel.panel_top), goldenrod.Panel.links, "top");
		
	goldenrod.Dom.setDimension(
		Math.round( (goldenrod.ViewportWidth - goldenrod.Panel.linksWidth)/2), goldenrod.Panel.links, "left");
	
	var panel_links_height = 
		Math.min(	goldenrod.Dom.getPixel(goldenrod.Panel.panel_style.height) - goldenrod.Panel.panel_links_top, 
					goldenrod.Panel.panel_links_max_height);
										
	goldenrod.Dom.setDimension(panel_links_height, goldenrod.Panel.panel_links, "height");
		
	var panel_main_height = 
		Math.min(	goldenrod.Dom.getPixel(goldenrod.Panel.panel_style.height) - goldenrod.Panel.panel_main_top, 
					goldenrod.Panel.panel_main_max_height);
	goldenrod.Dom.setDimension(panel_main_height, goldenrod.Panel.panel_main, "height");
	
	var panel_main_width = 
		Math.min(	goldenrod.Dom.getPixel(goldenrod.Panel.panel_style.width) - goldenrod.Panel.panel_main_left, 
					goldenrod.Panel.panel_main_max_width);
	goldenrod.Dom.setDimension(panel_main_width, goldenrod.Panel.panel_main, "width");

	
	window.location.hash = "#top_of_page"
	
	var body = document.getElementsByTagName('body')[0];
	body.style.visibility = "visible";
}


goldenrod.Panel.panelArray = {}	//An associative array with a function to execute upon making that panel visible


goldenrod.Panel.hide = function(e,a) {
	if(e) {
		if(a==1) {//When about to make a panel visible we render it then do something then make it visible
		e.style.display = "block";
		e.style.visibility = "visible"; 
		goldenrod.Panel.panelArray[e.id](e);
		}
		else {e.style.visibility = "hidden"; e.style.display = "none"; }
	}
}
	

goldenrod.Panel.displayBanner = function(elt) {
	banner = goldenrod.Utility.getAttrValue(elt, "banner");
	if(banner) goldenrod.Panel.banner.innerHTML = banner;
	}
	
goldenrod.Panel.getBannerText = function() {
	return goldenrod.Panel.banner.innerHTML;
}

goldenrod.Panel.displayBannerText = function(t) {
	 goldenrod.Panel.banner.innerHTML = t;
}

goldenrod.Panel.displayBannerAddText = function(t) {
	 goldenrod.Panel.banner.innerHTML += t;
}

/********[linkover] - Mouse Over handler for link that is want to alter the class of it's parent**/	
goldenrod.Panel.mouseoverlink = function() {
	var elt, eltStyle, ref;
	
	function switchclass(elt, flag) {
		if(flag) {
			goldenrod.Dom.CSSClass.removeClass(elt, "mouse_not_over");
			goldenrod.Dom.CSSClass.addClass(elt, "mouse_over")
		}
		else {
			goldenrod.Dom.CSSClass.removeClass(elt, "mouse_over");
			goldenrod.Dom.CSSClass.addClass(elt, "mouse_not_over")	
			
		}
	} 
	
	if(goldenrod.Panel.mouseoverlink.parent != 0) switchclass(goldenrod.Panel.mouseoverlink.parent, false);
	goldenrod.Panel.mouseoverlink.parent = this.parentNode;
	
	switchclass(goldenrod.Panel.mouseoverlink.parent, true);
	
	ref = goldenrod.Utility.getAttrValue(this, "href") ; //get hash without intial "#"
	elt = document.getElementById(ref); //get relevant new panel
	//eltStyle = goldenrod.Dom.getStyle(elt);
	
	if(goldenrod.Panel.mouseoverlink.panel != elt) {
		goldenrod.Panel.hide(elt, 1); //First make the new panel visible
		goldenrod.Panel.hide(goldenrod.Panel.mouseoverlink.panel, 0); //Then make old panel hidden
	
		goldenrod.Panel.mouseoverlink.panel = elt;	//Save current panel
	}

	return false;
}
	
goldenrod.Panel.mouseoverlink.panel = 0;
goldenrod.Panel.mouseoverlink.parent = 0;

/*Alternate mouse handlers for links that do not use <p> elements embedded in div elements*/
/********[$linkover] - Mouse Over handler for link that is want to alter it's own class******/	
goldenrod.Panel.$mouseoverlink = function() {

var elt, ref;
	
	function switchclass(elt, flag) {
		if(flag) {
			goldenrod.Dom.CSSClass.removeClass(elt, "mouse_not_over");
			goldenrod.Dom.CSSClass.addClass(elt, "mouse_over")
			}
		else {
			goldenrod.Dom.CSSClass.removeClass(elt, "mouse_over");
			goldenrod.Dom.CSSClass.addClass(elt, "mouse_not_over")	
			
			}
		} 
	
	if(goldenrod.Panel.$mouseoverlink.elt != 0) switchclass(goldenrod.Panel.$mouseoverlink.elt, false);
	goldenrod.Panel.$mouseoverlink.elt = this;
	
	switchclass(goldenrod.Panel.$mouseoverlink.elt, true);
	
	ref = goldenrod.Utility.getAttrValue(this, "href") ; //get hash without intial "#"
	elt = document.getElementById(ref); //get relevant new panel
	//eltStyle = Dom.getStyle(elt);
	
	if(goldenrod.Panel.mouseoverlink.panel != elt) {
		goldenrod.Panel.hide(elt, 1); //First make the new panel visible
		goldenrod.Panel.hide(Panel.mouseoverlink.panel, 0); //Then make old panel hidden
	
		goldenrod.Panel.mouseoverlink.panel = elt;	//Save current panel
		}
		
	
	return false;
	
}

goldenrod.Panel.$mouseoverlink.elt = 0;		//$linkover element that was last visited




goldenrod.Panel.clicklink = function(e) {
	
	
	if(goldenrod.Dom.isIE) e = window.event;
	
	goldenrod.Dom.set_shiftkeyState(e);	//event is always defined as an argument!!
	if(goldenrod.Dom.shiftkeyState || (goldenrod.Drag && goldenrod.Drag.state)   ) {
		return true;
		}
	
	var ref, elt;
	ref = goldenrod.Utility.getAttrValue(this, "href"); //utility-href will have the id of the current panel
	elt = document.getElementById(ref+"_link"); //get relevant new panel - only one elt will have id syn{n}_link
												//The other innerlinks can have id syn{n}_linka (or b)
	
	if(elt) {
		if(elt.onclick) elt.onclick.call(elt, e);
		}
	return false;
	}	
	
goldenrod.Panel.clicksynlink = function(e) {
	var ref, elt;
	
	//if(e) alert("e is defined 139"); else alert("e is undefined")
	if(goldenrod.Dom.isIE) e = window.event;
	goldenrod.Dom.set_shiftkeyState(e);
	
	if(goldenrod.Dom.shiftkeyState || (goldenrod.Drag && goldenrod.Drag.state) ) {
		return true;
		}
	
	ref = this.hash.slice(1);	//Get the hash string without the initial "#" character.
	
	elt = document.getElementById(ref);
	
	//alert("the id of elt is " + elt.id );
	
	
	goldenrod.Panel.hide(elt,1);
	goldenrod.Panel.mouseoverlink.panel = elt;
	ref = this.id.slice(0,6);	//Get the first 4 charaters of the elt's id
								//This is the id of the element to hide.
	//alert("ref = " +ref)
	elt = document.getElementById(ref);
	//alert("the id of elt is " + elt.id );
	goldenrod.Panel.hide(elt,0);
	return false
	}
	


	/*An object that will hold dynamically setup handlers.*/
goldenrod.Utility.linkTypes.innerlink = new goldenrod.Utility.mousehandlers(null, null, goldenrod.Panel.clicksynlink);
goldenrod.Utility.linkTypes.linkover  = new goldenrod.Utility.mousehandlers(goldenrod.Panel.mouseoverlink, null, goldenrod.Panel.clicklink);
goldenrod.Utility.linkTypes.genericclick = new goldenrod.Utility.mousehandlers(null, null, goldenrod.Dom.clickHandler);
	
goldenrod.Utility.linkTypes['$linkover'] = {	mouseover: goldenrod.Panel.$mouseoverlink, 
									mouseout: null, 
									mouseclick: goldenrod.Panel.clicklink}
									


/************Handling of cookies for workshop page****************/
goldenrod.Panel.HandleCookie = function() {
	
	var value,elt, owner;
	//if owner is false we use "daniellepkoff"
	owner = goldenrod.Panel.owner;
	
	var panel_cookie_name = owner + "_" + goldenrod.Panel.pageName + "_panel=";
	var visited_cookie_name = owner + "_" + goldenrod.Panel.pageName + "_visited="
	
	value = goldenrod.Dom.Cookie.getValue(visited_cookie_name);
	if(value != "yes") {
		elt = goldenrod.Utility.getElementsByName(document, "firstlink", "here");
		if(elt.length) {
			elt[0].onmouseover();
			elt[0].scrollIntoView();	
		}
		return;
	}
	
	value = goldenrod.Dom.Cookie.getValue(panel_cookie_name)
	elt = document.getElementById(value)
	elt.onmouseover();
	elt.scrollIntoView();
	
}

goldenrod.Panel.HandleCookieEnd = function(){
	var owner = goldenrod.Panel.owner;
	//If there is already a value of visited it is re-set to yes
	document.cookie = owner + "_" + goldenrod.Panel.pageName + "_visited=yes; path=/";
	
	//Each value added gets appended separated by a semi-colon.
	//var elt = document.getElementById(Panel.$mouseoverlink.elt.id);
	//var panel_id = Utility.getAttrValue(elt, "href")	
	document.cookie = owner + "_" + goldenrod.Panel.pageName + "_panel=" + Panel.$mouseoverlink.elt.id + "; path=/";
}
	

