/* author: mike.reevesmcmillan*/
/* Generated by AceHTML Freeware http://freeware.acehtml.com */
/* Creation date: 31/05/2004 */

function updateOriginator(id,value,text) 
{
//Append newly added option to original select control
//theOptions = window.opener.document.getElementById(id).options;
//currentLength = theOptions.length;
//newLength = currentLength ++;
//The 'true' indicates that it is selected and should refresh it
//theOptions[newLength] = new Option(text,value,false,true);
window.opener.history.go(0); 
//theControl[newLength] = new Option('---Add new option---','add_##_new',false,false);
//Close this screen
document.close();
}

function validRequired(formFieldId,fieldLabel,focus)
//This one comes from http://javascript.about.com/library/scripts/blformvalidate.htm
//It validates that a required field has been filled and pops up an alert if not
{
    var result = true;
    formField = document.getElementById(formFieldId);
    if (formField.value == "")
    {
        alert('Please enter a value for the "' + fieldLabel +'" field.');
        if (focus == "yes")
        {
        formField.focus();
        }
        result = false;
    }

    return result;
}


/* easytoggle2.js
   - Simon Willison, 5th November 2003
   - See http://simon.incutio.com/archive/2003/11/06/easytoggle
*/

//Appears to screw up the page so I'm disabling it for now until I understand it better
/*
addEvent(window, 'load', et_init);

var et_toggleElements = [];

// Initialisation 
function et_init() {
    var i, link, id, target, first;
    first = true;
    for (i = 0; (link = document.links[i]); i++) {
        if (/\btoggle\b/.exec(link.className)) {
            id = link.href.split('#')[1];
            target = document.getElementById(id);
            et_toggleElements[et_toggleElements.length] = target;
            if (first) {
                first = false;
            } else {
                target.style.display = 'none';
            }
            link.onclick = et_toggle;
        }
    }
}

function et_toggle(e) {
    // Adapted from http://www.quirksmode.org/js/events_properties.html
    if (typeof e == 'undefined') {
        var e = window.event;
    }
    var source;
    if (typeof e.target != 'undefined') {
        source = e.target;
    } else if (typeof e.srcElement != 'undefined') {
        source = e.srcElement;
    } else {
        return true;
    }
    // For most browsers, targ would now be a link element; Safari however
       returns a text node so we need to check the node type to make sure 
    if (source.nodeType == 3) {
        source = source.parentNode;
    }
    var id = source.href.split('#')[1];
    var elem;
    for (var i = 0; (elem = et_toggleElements[i]); i++) {
        if (elem.id != id) {
            elem.style.display = 'none';
        } else {
            elem.style.display = 'block';
        }
    }
    return false;
}

// Thanks to Scott Andrew 
function addEvent(obj, evType, fn){
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, true);
        return true;
    } else if (obj.attachEvent) {
        var r = obj.attachEvent("on"+evType, fn);
        return r;
    } else {
        return false;
    }
}
*/

//I got this one off the Web at http://javascript.about.com/library/scripts/bldatemath.htm
function DateAdd(startDate, numDays, numMonths, numYears)
{
    var returnDate = new Date(startDate.getTime());
//  var thisYear = returnDate.getYear();
    var yearsToAdd = numYears;

//Start by adding/subtracting days as this is most straightforward

    returnDate.setTime(returnDate.getTime()+60000*60*24*numDays);
    var thisMonth = returnDate.getMonth();  

//Does adding/subtracting this number of months cause date to go across year boundary?

    var month = thisMonth + numMonths;

    while (month > 11) // Goes across year boundary in a positive direction
        {
        month = month - 12;
        yearsToAdd ++;
        }
        
/* Formerly done like this:
        yearsToAdd = Math.floor((month+1)/12);
        month -= 12*yearsToAdd;
        yearsToAdd += numYears;
*/
    while (month < 0) // Goes across year boundary in a negative direction
        {
        month = month + 12;
        yearsToAdd --;
        }
    
//Because months start at zero = January in JavaScript remember to add 1 when you use the output
    returnDate.setMonth(month);
    returnDate.setFullYear(returnDate.getFullYear() + yearsToAdd);
    
    //returnDate.setTime(returnDate.getTime()+60000*60*24*numDays); //already done
    
    return returnDate;

}

function YearAdd(startDate, numYears)
{
        return DateAdd(startDate,0,0,numYears);
}

function MonthAdd(startDate, numMonths)
{
        return DateAdd(startDate,0,numMonths,0);
}

function DayAdd(startDate, numDays)
{
        return DateAdd(startDate,numDays,0,0);
}

// Example Setup
var gCurrentDate = new Date();

function CalcExample()
{
    var newDate = DateAdd(gCurrentDate, parseInt(document.example.days.value), 
                        parseInt(document.example.months.value), 
                        parseInt(document.example.years.value));
    document.example.results.value = newDate.toLocaleString();
}

//The next two are from http://builder.cnet.com/webbuilding/pages/Programming/Scripter/111997/toolcc.html

function getCookie(name){
  var cname = name + "=";               
  var dc = document.cookie;             
  if (dc.length > 0) {              
    begin = dc.indexOf(cname);       
    if (begin != -1) {           
      begin += cname.length;       
      end = dc.indexOf(";", begin);
      if (end == -1) end = dc.length;
        return unescape(dc.substring(begin, end));
    } 
  }
  return null;
}
function setCookie(name, value, days, path, domain, secure) {
if (!days) days = 30; // default to 30 days if empty 

var expdate = new Date(); 
expdate.setTime(expdate.getTime() + days*24*60*60*1000); 

  document.cookie = name + "=" + escape(value) +
  ((days == null) ? "" : "; expires=" + expdate.toGMTString()) +
  ((path == null) ? "/" : "; path=" + path) +
  ((domain == null) ? "" : "; domain=" + domain) +
  ((secure == null) ? "" : "; secure");
//alert(expdate.toGMTString())
//alert("Set " + name + " to " + value)
}

function alphabetise(arrayName)
{
var aLen = arrayName.length;
var sortingArray = new Array(aLen);
var sortedArray = new Array(aLen);
for (i=0; i<aLen; i++)
    {
    sortingArray[i] = arrayName[i].dispname;
    }
sortingArray.sort();
for (j=0; j<aLen; j++)
    {
    sortedDispname = sortingArray[j];
    for (k=0; k<aLen; k++)
        {
        if (arrayName[k].dispname == sortedDispname)
            {
            sortedArray[j] = new Nameline(sortedDispname, arrayName[k].name);
            }
        }
    }
return sortedArray;
}

function hide_nav()
{
button = document.getElementById('navhider');
tree = document.getElementById('navtree');
if (button.value == 'Show Nav')
   {
   tree.style.display='inline';
   button.value = 'Hide Nav';
   }
else
    {
    tree.style.display='none';
    button.value = 'Show Nav';
    }
}

function showDiv(id)
{
buttonid = 'button_' + id;
buttonValue = document.getElementById(buttonid).value;
theDiv = document.getElementById(id);
theRest = buttonValue.substring(4,buttonValue.length);
if ((theDiv.style.display=="")||(theDiv.style.display=="none"))
   {
   theDiv.style.display='inline';
   document.getElementById(buttonid).value = 'Hide' + theRest;
   }
else
    {
    theDiv.style.display='none';
    document.getElementById(buttonid).value = 'Show' + theRest;
    }
}

function convert(idSource, idDest)
{
sourceObj = document.getElementById(idSource);
destObj = document.getElementById(idDest);
sourceVal = sourceObj.value;
destVal = destObj.value;
if (destVal == "") //so we don't overwrite legit values
   {
   sourceName = sourceObj.name;
   destName = destObj.name;
   //Find the units
   sourceNameParts = sourceName.split("_");
   sourceUnit = sourceNameParts[sourceNameParts.length - 1];
   destNameParts = destName.split("_");
   destUnit = destNameParts[destNameParts.length - 1];
   if (sourceUnit == "inches" && destUnit == "mm") convRatio = 25.4;
   else if (sourceUnit == "mm" && destUnit == "inches") convRatio = 1/25.4;
   else if (sourceUnit == 'GSM') //special case for formats
        {
        theHeight = document.getElementById('n_height_mm').value;
        theWidth = document.getElementById('n_width_mm').value;
        convRatio = (theHeight * theWidth)/1000000; //Convert from sq mm to sq m
        }
   document.getElementById(idDest).value = Math.round(sourceVal * convRatio);
   }
}

function use_std_size()
{
theSize = document.getElementById('standard_size').value;
if (theSize.indexOf("|") != -1)
   {
   theParts = theSize.split("|");
   document.getElementById('n_height_mm').value = theParts[0];
   document.getElementById('n_width_mm').value = theParts[1];
   document.getElementById('n_thickness_mm').value = theParts[2];
   document.getElementById('n_weight_g').value = theParts[3];
   document.getElementById('std_size_name').value = theParts[4];
   }
}

function recordMultiCategory(key, name)
{
keyField = document.getElementById('taxonomy_list[]');
nameField = document.getElementById('category');
keyField.value = key;
//NEW BIT:
optionsList = keyField.options;
for (i=0; i < optionsList.length; i++)
    {
    if (optionsList[i].value == key || optionsList[i].selected == true) optionsList[i].selected = true;
    }
//END NEW BIT
if (keyField.value == key) alert ("Category selected. You can select more categories; when you have finished, scroll back up and click Update Categories.");
}

function recordCategory(key, name)
{
keyField = document.getElementById('taxonomy_list');
nameField = document.getElementById('category');
keyField.value = key;
if (keyField.value == key) alert ("Category selected.");
else alert ("Unable to select that category using the tree.");
}

function toggleHiddenText(id)
{
theElement = document.getElementById(id);
if (theElement.style.display == 'none') theElement.style.display = 'inline';
else theElement.style.display = 'none';
}

function addLink()
{
url = document.getElementById('u_url');
linkDescription = document.getElementById('i_link_description');
if (linkDescription.value == '') alert("You must provide a description, or the reader will have nothing to click on.");
else if (url.value == "http://") alert("You must provide a web link.");
else
    {
    bodyText = document.getElementById('a_body');
    bodyText.value = bodyText.value + "<a href='" + url.value + "'>" + linkDescription.value + "</a>";
    url.value = "http://";
    linkDescription.value = "";
    }
}

/* Is causing an error
function showHelp(obj)
//Find current state of help - shown or hidden - and toggle
{
theClass = this.firstChild.class;
if (theClass='hiddenhelp') theClass='shownhelp';
else theClass = 'hiddenhelp';
}
*/