function addEvent(elm, evType, fn) {
  if (elm.addEventListener) {
    elm.addEventListener(evType, fn, false);
    return true;
  } else if (elm.attachEvent) {
    var r = elm.attachEvent('on' + evType, fn);
    return r;
  } else {
    elm['on' + evType] = fn;
  }
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
        oldonload();
        func();
    }
  }
}

function getCookie( name ) {
  var start = document.cookie.indexOf( name + "=" );
  var len = start + name.length + 1;
  if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
    return null;
  }
  if ( start == -1 ) return null;
  var end = document.cookie.indexOf( ';', len );
  if ( end == -1 ) end = document.cookie.length;
  return unescape( document.cookie.substring( len, end ) );
}

function setCookie( name, value, expires, path, domain, secure ) {
  var expires_date = new Date();
  if ( expires ) {
    var today = new Date();
    today.setTime( today.getTime() );
    expires = expires * 1000 * 60 * 60 * 24;
    expires_date = new Date( today.getTime() + (expires) );
  }
  document.cookie = name+'='+escape( value ) +
		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) +
		( ( path ) ? ';path=' + path : ';path=/' ) +
		( ( domain ) ? ';domain=' + domain : '' ) +
		( ( secure ) ? ';secure' : '' );
}

function deleteCookie( name, path, domain ) {
	if ( getCookie( name ) ) document.cookie = name + '=' +
			( ( path ) ? ';path=' + path : '') +
			( ( domain ) ? ';domain=' + domain : '' ) +
			';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}

var toc_majors = new Array(
"gowrite.top",
"gowrite.install",
"gowrite.install.windows",
"gowrite.tut.starttoc",
"gowrite.tut.quickstart",
"gowrite.tut.commenting",
"gowrite.tut.printing",
"gowrite.tut.variations",
"gowrite.editing.overview",
"gowrite.publishing.overview",
"gowrite.reference",
"gowrite.menus",
"gowrite.toolbars.overview",
"gowrite.dialogs.overview",
"gowrite.tech.issues",
"gowrite.translate.top"
);

function toc_init_all() {
  // Add toggle buttons, and set initial status
  for (var i=0; i<toc_majors.length; i++) {      
    var elm = document.getElementById(toc_majors[i]);
    if (elm) {
      var img = document.createElement("img");
      img.src = "/plus.png";
      img.id = "toc_"+toc_majors[i];
      addEvent( img, "click", toggleTOC );
      var par = elm.previousSibling;
      try {
        par.insertBefore(img,par.firstChild);
      } catch (error) {
        par = par.previousSibling;
        par.insertBefore(img,par.firstChild);
      }
      var status=getCookie( 'TOC1_'+toc_majors[i] );
      if (!status) {
        elm.style.display='none';
      } else if (status!='none') {
        elm.style.display='block';
        img.src = "/minus.png";
      } else {
        elm.style.display='none';
      }
    }
  }
}

function toc_show_current() {
  // Ensure current page is visible in toc
  var toc= document.getElementById("TOC");
  var links = toc.getElementsByTagName("a");
  var loadUrl = document.URL;
  for (var i=0; i<links.length; i++) {
    elem = links[i];
    if (loadUrl.search(elem.href)!=-1) {
      while (elem!=null) {
        var id = elem.id;
        if (id!=null && id.substring(0,8)=="gowrite.") {
          setState(elem,'block');
        }
        elem = elem.parentNode;
      }
      break;
    }
  }
}

function toc_init_stat() {
  if (!document.getElementById) return true;
  toc_init_all();
  toc_show_current();
}

function setState(elem,state) {
  elem.style.display = state;
  setCookie( 'TOC1_'+elem.id, state );
  var img = document.getElementById('toc_'+elem.id);
  if (state=='none') {
    img.src = "/plus.png";    
  } else {
    img.src = "/minus.png";    
  }
}

function toggle(a) {
  if (!document.getElementById) return true;
  var elem=document.getElementById(a);
  if (!elem) return true;
  setState(elem,(elem.style.display=='none')?'block':'none');
  return false;
}

function toggleTOC() {
  var id = "";
  if (this.id) {
    id = this.id; 
  } else {
    id = window.event.srcElement.id;
  }
  return toggle( id.substring(4) );
}

addLoadEvent(toc_init_stat);

