var formats=Array(
	new format("link", "#0033ff", "#80a0a0", "", "", "none", "underline"),
	new format("menuitem", "#0033ff", "#c73434", "#ffffe0", "#ffff99", "", ""),
	new format("menuitemactive", "#0033ff", "#c73434", "#ffffe0", "#ffff99", "", ""),
	new format("menuitemedit", "#ffffff", "#ffff99", "#c73434", "#c73434", "none", "underline"),
	new format("button", "#c73434", "#e78080", "", "", "none", "underline"),
	new format("simple_button", "#c73434", "#e78080", "", "", "none", "underline"),
	new format("banner_button", "#c73434", "#e78080", "", "", "none", "underline"),
	new format("pubtitle", "#3366cc", "#99b2e5", "", "", "none", "underline"),
	new format("footer", "ffffff", "ffff99", "", "", "none", "underline")
)

function initializePage(){
/*
    var paramelement 
    paramelement = document.getElementById("saveitem")
    if(paramelement){
        paramelement.removeAttribute(",");
    }
*/
	var jumptoelement
	jumptoelement = document.getElementById("jumpto")
	if(jumptoelement){
		jumpToAnchor(jumptoelement.value)
	}
}

function setCookie(name, value, expiredays){
	var exdate=new Date()
	exdate.setDate(exdate.getDate() + expiredays)
	document.cookie = name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate)
}

function clearCookie(name){
	setCookie(name, "", -1)
}

function getCookie(name){
	if(document.cookie.length > 0){
		c_start = document.cookie.indexOf(name + "=")
		if (c_start != -1){ 
			c_start = c_start + name.length + 1 
			c_end = document.cookie.indexOf(";", c_start)
			if(c_end == -1){
				c_end = document.cookie.length
			}
			return unescape(document.cookie.substring(c_start, c_end))
		} 
	}
	return null
}

function setState(state, button){
 	var stateelement
	stateelement = document.getElementById("state")
	if(stateelement){
		stateelement.setAttribute("value", state)
	}
}

function suffix(separator, string){
    index = string.lastIndexOf(separator) + 1
    if(index){
        return string.substr(index)
    } else {
        return ''
    }
}

function uploadFile(todirectory){
    window.open("https://rivers-moore.com:10000/file/upform.cgi?dir=/home/aidspan.org/public_html/" + todirectory, "_blank", "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=500, height=300")
}


function root(separator, string){
    index = string.indexOf(separator)
    if(index){
        return string.substr(0, index)
    } else {
        return ''
    }
}

function setPeriod(button){
    var periodstart
    var periodend
	var fromelement
	var toelement
    periodstart = root('|', button.value)
    periodend = suffix('|', button.value)
	fromelement = document.getElementById("from")
	if(fromelement){
		toelement = document.getElementById("to")
		if(toelement){
			fromelement.setAttribute("value", periodstart)
			toelement.setAttribute("value", periodend)
			button.form.submit()
		}
	}
}

function setMode(mode, button, warning){
 	var modeelement
 	var href
 	var params
	var ok
	if(warning.length){
		ok=confirm(warning)
	} else {
		ok = true
	}
	if (ok){
	 	params = location.search
	 	params = params.replace('mode=edit','')
	 	params = params.replace('&&','&')
	 	if(params.substr(-1) == "&"){
		 	params = params.substr(0, params.length - 1)
		}
		if(mode.length){
			if(params.length){
				params = params + '&mode=' + mode
			} else {
				params = '?mode=' + mode
			}
		}
		button.form.action = params
		button.form.submit()
	}
}

function activateEdit(button){
	setMode('edit', button, '')
	setState('edit', button)
	button.form.submit()
}

function terminateEdit(warning, button){
	var ok
	if(warning.length){
		ok=confirm(warning)
	} else {
		ok = true
	}
	if (ok){
		setMode('', button, '')
		setState('', button)
		button.form.submit()
	}	
}

function getNamedItem(array, name){
  	var i
	for(i = 0 ; i < array.length ; i++){
		if(array[i].name == name){
			return array[i]
		}
	}
}
	
// constructor for format object
function format(name, unhighlightedcolor, highlightedcolor, unhighlightedbackgroundcolor, highlightedbackgroundcolor, unhighlightedtextdecoration, highlightedtextdecoration, unhighlightedcursor, highlightedcursor){
	this.name = name
	this.variants = Array(
		new formatVariant("highlighted", highlightedcolor, highlightedbackgroundcolor, highlightedtextdecoration),
		new formatVariant("unhighlighted", unhighlightedcolor, unhighlightedbackgroundcolor, unhighlightedtextdecoration)
	)
}

// constructor for formatVariant object
function formatVariant(name, color, backgroundcolor, textdecoration){
	this.name = name
	this.color = color
	this.backgroundcolor = backgroundcolor
	this.textdecoration = textdecoration
}

// returns the top position of the element within the window in pixels
function topPositionInViewport(element){
	var topPosition = 0
	var topPosition = element.offsetTop
	while(element = element.offsetParent){
	    topPosition += element.offsetTop
	}                  
	return topPosition 
}

// returns the left position of the element within the window in pixels
function leftPositionInViewport(element){
	var leftPosition = 0
	var leftPosition = element.offsetLeft
	while(element = element.offsetParent){
	    leftPosition += element.offsetLeft
	}
	return leftPosition
}

// highlights an element, and unhighlights its siblings
function highlight(element){
	var siblings
	var sibling
	var i
	if(hasClass(element, "menuitem")){
		siblings = element.parentNode.childNodes
		for(i = 0 ; i < siblings.length ; i++){
		  	sibling = siblings[i]
		  	if(sibling.nodeType == 1){
				if(!hasClass(sibling, "currentitem")){
			  		applyFormat(sibling , sibling === element ? "highlighted" : "unhighlighted")
				}
			}
		}
	} else {
		applyFormat(element, "highlighted")
	}

}

// unhighlights an element
function unhighlight(element){
	applyFormat(element, "unhighlighted")
}

// applies a format to an element
function applyFormat(element, formatname){
  	var classlist
  	var classes
  	var i
  	var f
  	var useformat
	classlist = element.className
	classes = classlist.split(" ")
	for(i = 0 ; i < classes.length ; i++){
		classname = classes[i]
	  	f = getNamedItem(formats, classname)
		if(f){
			useformat = getNamedItem(f.variants, formatname)
		}
	}
	if(!useformat){
	 	f = getNamedItem(formats, "link")
		useformat = getNamedItem(f.variants, formatname)
	}
	if(useformat){
		element.style.color = useformat.color
		element.style.backgroundColor = useformat.backgroundcolor
		element.style.textDecoration = useformat.textdecoration
	}
}

// positions an element within the window
function setPositionInViewport(element, x, y){
	var parent
	if(parent = element.offsetParent){
		element.offsetLeft = (x - topPositionInViewport(parent)) + "px"
		element.offsetTop = (y - leftPositionInViewport(parent)) + "px"
	} else {
		element.offsetLeft = x + "px"
		element.offsetTop = y + "px"
	}
}

// returns true if a node is of a given class (among others, perhaps)
function hasClass(node, classname){
  	var i
  	var classlist
  	var classes
	if(node.nodeType == 1){
		classlist = node.className
		classes = classlist.split(" ")
		for(i = 0 ; i < classes.length ; i++){
			if(classes[i] == classname){
				return true
			}
		}
	}
}

// shows the menu whose root is the specified element, and hides all sibling menus
function showMenu(element){
	var sibling
	var i
	var item
	var parent
	parent = element.parentNode
	for (i = 0; i < parent.childNodes.length; i++) {
		sibling  = parent.childNodes[i];
		if(sibling === element){
			toggleMenu(sibling, "show")  
		} else {
			toggleMenu(sibling, "hide")
		}
	}
}

// hides the menu whose root is the specified element
function hideMenu(element){
	toggleMenu(element, "hide")
}

// shows or hides the submenu child of an element
function toggleMenu(element, showorhide){
  	var i
  	var item
	for (i = 0; i < element.childNodes.length; i++) {
		item  = element.childNodes[i];
		if(hasClass(item, "submenu")){
			if(showorhide == "show"){
				item.style.left = leftPositionInViewport(element) + "px"
				item.style.top = (topPositionInViewport(element) + element.offsetHeight) + "px"
				item.style.display = ""
			} else {
				item.style.display = "none"
			}
		}
	}
}

// goes to the specified page on the current site
function goToPage(label){
	window.location="?page=" + label
}

// goes to the specified URL
function followLink(href, warning, target){
	var ok
	if(warning.length){
		ok=confirm(warning)
	} else {
		ok = true
	}
	if (ok){
		if(target){
			window.open(href, target)
		} else {
			window.location=href
		}
	}
}

// open or closes the collapsible section whose identifier is idroot, and its children
function toggleAll(idroot, jump, toggletextopen, toggletextclosed, toggleimageopen, toggleimageclosed){
	toggleSelf(idroot, false, toggletextopen, toggletextclosed, toggleimageopen, toggleimageclosed)
	toggleChildren(idroot, jump, toggletextopen, toggletextclosed, toggleimageopen, toggleimageclosed)
}

// opens or closes the collapsible section whose identifier is idroot
function toggleSelf(idroot,jump, toggletextopen, toggletextclosed, toggleimageopen, toggleimageclosed){
	if(elementExists(idroot + "_open")){
		toggleItem(idroot, 0, "", toggletextopen, toggletextclosed, toggleimageopen, toggleimageclosed)
	}
	if(jump){
		jumpToAnchor(idroot)
	}
}

// opens or closes the collapsible sections whose parent identifier is idroot
function toggleChildren(idroot, jump, toggletextopen, toggletextclosed, toggleimageopen, toggleimageclosed){
	var i
	var openid
	var parentopencontent
	var labelid
	var labeltext
	var force
	labelid = idroot + "_label"
	if(elementExists(labelid)){
		labeltext = document.getElementById(labelid).innerHTML
		if(labeltext == toggletextopen){
			force = "close"
		} else if(labeltext == toggletextclosed){
			force = "open"
		} else {
			force = ""
		}
	}
	i = 1
	while(elementExists(idroot+ "_" + i + "_open")){
		toggleItem(idroot, i, force, toggletextopen, toggletextclosed, toggleimageopen, toggleimageclosed, true)
		i++
	}
	if(jump){
		jumpToAnchor(idroot)
	}
}

// opens or closes the collapsible section whose identifier is idroot and whose number is i (or null, if i is zero)
// if force is "close" or "open". act accordingly, otherwise reverse the current state
function toggleItem(idroot, i, force, toggletextopen, toggletextclosed, toggleimageopen, toggleimageclosed){
	var openid
	var opencontent
	if(force == "open"){
		openItem(idroot, i, toggletextopen, toggleimageopen)
	} else if(force == "close"){
		closeItem(idroot, i, toggletextclosed, toggleimageclosed)
	} else{
	  	if(i == 0){
			openid = idroot + "_open"
		} else {
			openid = idroot + "_" + i + "_open"
		}
		if(elementExists(openid)){
			opencontent = document.getElementById(openid)
			if(opencontent.style.display == "none"){
				openItem(idroot, i, toggletextopen, toggleimageopen)
			} else {
				closeItem(idroot, i, toggletextclosed, toggleimageclosed)
			}
		}
	} 
}

// opens the collapsible section whose identifier is idroot and whose number is i (or null, if i is zero)
function openItem(idroot, i, toggletextopen, toggleimageopen, parentaction){
	var id
	var openid
	var closedid
	var opencontent
	var closedcontent
	if(i == 0){
		id = idroot
	} else {
		id = idroot + "_" + i
	}
	openid = id + "_open"
	closedid = id + "_closed"
	if(elementExists(openid)){
		opencontent = document.getElementById(openid)
		opencontent.style.display = ""
	}
	if(elementExists(closedid)){
		closedcontent = document.getElementById(closedid)
		closedcontent.style.display = "none"
	}
	if(toggletextopen){
		changeLabel(idroot + "_label", toggletextopen)
	}
	if(toggleimageopen){
		changeImage(idroot + "_image", toggleimageopen)
	}
// To remember open/closed state of collapsible sections, uncomment the line below //
//	setCookie(window.location + "|" + id, "openItem('" + idroot + "', " + i + ", '" + toggletextopen + "', '" + toggleimageopen + "')", 1)
	// If an item in a group is being set manually, remove the cookie on the parent, to preventit from being automatically reset, and thus overruling the manual setting
	if(!parentaction){
		if(id.indexOf("_")){
			idroot = id.split("_")[0]
			clearCookie(window.location + "|" + idroot)
		}
	}
}
 
function closeItem(idroot, i, toggletextclosed, toggleimageclosed){
	var id
	var openid
	var closedid
	var opencontent
	var closedcontent
	if(i == 0){
		id = idroot
	} else {
		id = idroot + "_" + i
	}
	openid = id + "_open"
	closedid = id + "_closed"
	if(elementExists(openid)){
		opencontent = document.getElementById(openid)
		opencontent.style.display = "none"
	}
	if(elementExists(closedid)){
		closedcontent = document.getElementById(closedid)
		closedcontent.style.display = ""
	}
	if(toggletextclosed){
		changeLabel(idroot + "_label", toggletextclosed)
	}
	if(toggleimageclosed){
		changeImage(idroot + "_image", toggleimageclosed)
	}
// To remember open/closed state of collapsible sections, uncomment the line below //
//	setCookie(window.location + "|" + id, "closeItem('" + idroot + "', " + i + ", '" + toggletextclosed + "', '" + toggleimageclosed + "')", 1)
}

function restoreOpenState(location){
	var i
	var divlist
	var divs
	var div
	var idparts
	var togglediv
	var cookiecommand
	divlist = "|"
	divs = document.getElementsByTagName("div")
	for(i = 0 ; i < divs.length ; i++){
		div = divs[i]
		if(div.id){
			idparts = div.id.split("_")
			switch(idparts[idparts.length - 1]){
			case "open":
				divlist = addToList(divlist, div.id.substr(0, div.id.length - 5))
				break    
			case "closed":
				divlist = addToList(divlist, div.id.substr(0, div.id.length - 7))
				break
			}
		}
	}
	divs = divlist.split("|")
	for(i = 0 ; i < divs.length ; i++){
		div = divs[i]
		if(div.length){
			cookiecommand = getCookie(window.location + "|" + div)
			if(cookiecommand != null){
				eval(cookiecommand)
			}
		}
	}
}

function addToList(list, item){
	var pos
	pos = list.indexOf("|" + item + "|")
	if(pos == -1){
		list = list + item + "|"
	}
	return list
}

// returns true if there is an element whose id attribute has the value id, false otherwise
function elementExists(id){
	var elem = document.getElementById(id)
	if(elem != null){
		return true
	} else {
		return false
	}
}

// changes the content of the element whose id is id
function changeLabel(id, newlabel){
  	var i
  	if(elementExists(id)){
		document.getElementById(id).innerHTML = newlabel
	}
	i = 1
	while(elementExists(id + "_" + i)){
		document.getElementById(id + "_" + i).innerHTML = newlabel
		i++
	}
}

// changes the source of the img element whose id is id
function changeImage(id, newimage){
  	var i
  	if(elementExists(id)){
		document.getElementById(id).setAttribute("src", newimage)
	}
	i = 1
	while(elementExists(id + "_" + i)){
		document.getElementById(id + "_" + i).setAttribute("src", newimage)
		i++
	}
}

// jumps to the anchor whose name is anchorname
function jumpToAnchor(anchorname){
	var fullurl
	var pageurl
	var y
	fullurl = document.URL + "#"
	pageurl = fullurl.substr(0, fullurl.indexOf("#"))
	window.location = "#" + anchorname
}

// creates a new inclusion with name provided by the user
function newInclusion(button){
	var name
	var inclusion
	var editinclusion
	name = prompt("Enter a name for your inclusion\n(lower-case, letters only, no spaces)", "")
	if(name){
		inclusion=document.getElementById("newinclusion")
		if(inclusion){
			inclusion.value = name
			editinclusion=document.getElementById("editinclusion")
			if(editinclusion){
				editinclusion.href="?mode=edit&page=editinclusion&inclusion=" + name
			}
			button.form.submit()
		}
	}
}

// creates a new inclusion with name provided by the user
function createChildPage(menu, button){
	var newchildmenuelement
	newchildmenuelement = document.getElementById("newchildmenu")
	if(newchildmenuelement){
		newchildmenuelement.value = menu
	}
	button.form.submit()
}

// creates a new article with title provided by the user
function createArticle(button){
	var articletitleelement
	var newarticleelement
	articletitleelement = document.getElementById("articletitle")
	if(articletitleelement){
		if(articletitleelement.value.length){
			newarticleelement = document.getElementById("newarticle")
			if(newarticleelement){
				newarticleelement.value = articletitleelement.value
				button.form.submit()
			}
		}
	}
}

function saveStatus(item, menu, button){
	var label
	var statuslabelelement
	label = item
	if(menu.length){
		label += "_" + menu  
	}
	statuslabelelement = document.getElementById("statuslabel")
	if(statuslabelelement){
		statuslabelelement.value = label
	}
	button.form.submit()
}

function saveSequence(item, menu, button){
	var label
	var sequenceelement
	label = item
	if(menu.length){
		label += "_" + menu
	}
	sequenceelement = document.getElementById("sequencelabel")
	if(sequenceelement){
		sequenceelement.value = label
	}
	button.form.submit()
}

function setParameter(param, value){
	var label
	var paramelement
	paramelement = document.getElementById(param)
	if(paramelement){
		paramelement.value = value
	}
}

function saveParameter(param, value, button, warning){
    var ok = true
    if(warning){
        if(warning.length){
            if(!confirm(warning)){
                return
            }
        }
    }
    if (ok){
	    setParameter(param, value)
	    button.form.submit()
    }
}

function saveSubtitle(id, button){
	var subtitleelement
	var subtitle
	subtitleelement = document.getElementById('subtitle_' + id)
	if(subtitleelement){
		subtitle = subtitleelement.value
		setParameter('subtitle', subtitle)
		setParameter('savesubtitle', id)
		button.form.submit()
	}
}

function deleteArticles(status, button, warning){
	var ok
	var deletearticleselement
	if(warning.length){
		ok=confirm(warning)
	} else {
		ok = true
	}
	if (ok){
		deletearticleselement = document.getElementById("deletearticles")
		if(deletearticleselement){
			deletearticleselement.value = status
			button.form.submit()
		}
	}
}

function editContent(id, item, warning){
	var savechanges
	if(warning.length){
		savechanges = confirm(warning,'')
	} else {
		savechanges = false
	}
	if(savechanges){
		edititemelement = document.getElementById("edititem")
		if(edititemelement){
			setParameter('saveitem', edititemelement.value)
		}
	} else {
		setParameter('saveitem', '')
	}
	setParameter('edititem', item + '_'+ id)
	setParameter('jumpto', item + '_'+ id + '_' + 'anchor')
}

function saveContent(id, item){
	setParameter('saveitem', item + '_'+ id)
	setParameter('edititem', '')
	setParameter('jumpto', item + '_'+ id)
}

function clearItems(button, warning){
	var cancelaction
	if(warning.length){
		cancelaction = !confirm(warning,'')
	} else {
		cancelaction = false
	}
	if(!cancelaction){
		setParameter('saveitem', '')
		setParameter('editissue', '')
		setParameter('edititem', '')
		setParameter('jumpto', '')
		button.form.submit()
	}
}

function submitForm(button){
	button.form.submit()
}

function createArticleType(button){
 	var uctype
 	var type
	type=prompt('Enter the name of a new article type', '')
	if (type!=null && type!=''){
	 	uctype = type.toUpperCase()
	 	saveParameter('newtype', uctype, button)
	}
}

function showHighlight(strId, elmSelect){
    var elmCheckbox;
    var intIndex;
    var elmOption;
    var blnHighlight;
    elmCheckbox = document.getElementById('Highlight_' + strId);
    intIndex = elmSelect.selectedIndex;
    elmOption = elmSelect.options[intIndex];
    blnHighlight = elmOption.getAttribute('highlight');
    elmCheckbox.checked = Number(blnHighlight);
}


function changeHighlight(intId, elmCheck){
    var blnCheck;
    var strArticleType;
    blnCheck = blnChecked('Highlight_' + intId)
    strArticleType = strSelectedName('Type_' + intId);
    setParameter('saveitem', 'Type_' + intId);
    saveParameter('changehighlight', strArticleType + '_' +  blnCheck, elmCheck);
}

function strSelectedValue(strElementId){
    var elmElement;
    var strToReturn;
    elmElement = document.getElementById(strElementId);
    if(elmElement){
        strToReturn = elmElement.options[elmElement.selectedIndex].value;
        return strToReturn;
    }
}

function strSelectedName(strElementId){
    var elmElement = document.getElementById(strElementId);
    var strToReturn;
    if(elmElement){
        strToReturn = elmElement.options[elmElement.selectedIndex].text;
        return strToReturn;
    }
}

function blnChecked(strElementId){
    var elmElement = document.getElementById(strElementId);
    var strToReturn;
    if(elmElement){
        strToReturn = elmElement.checked;
        return strToReturn;
    }
}
