/**********************************************************************
 * Copyright (C) 1995-2004 Altera Corporation, 
 * 101 Innovation Drive, San Jose, California 95134, USA 
 * Contact webmaster@altera.com
 *********************************************************************/
 
/**********************************************************************
 * Decide the action URL for the search
 * 2006-01-19: Remove the "literature" since it is no longer needed. 
 * 2007-06-22: Added "Knowledge DB" option.
 **************************************/
function validateSearchForm(f) {
	var actions = [
			"/cgi-bin/devsearch.pl", 
			"/cgi-bin/devsearch.pl",
			"/search?client=www_frontend&output=xml_no_dtd&proxystylesheet=www_frontend&ie=UTF-8&oe=UTF-8&site=www_spt_kdb&filter=p&as_epq=&as_oq=&as_eq=&ft=&as_occt=any&num=10&sites=www_spt_kdb&as_q="
		];
	
	f.action = actions[f.scope.selectedIndex];
	if (f.scope.selectedIndex==1) {
		f.searchText.value = f.qt.value;
		f.method = "get";
	} else if (f.scope.selectedIndex==2) {
		f.method = "post";
		f.action += f.qt.value;
	}
	
	return true;
}

/**********************************************************************
 * The following functions are used in the rollover in global nav 
 * button. 
**********************************************************************/

function MM_swapImgRestore() { //v3.0
	var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
	var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
	if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
	var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
	if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
	if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
	var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
	if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


/**********************************************************************
 * The following are the SDC codes deployed in 2008
**********************************************************************/
// --- START OF Advanced SmartSource Data Collector TAG  --------------
// Copyright (c) 1996-2007 WebTrends Inc. All rights reserved.
// V8.0d
// $DateTime: 2007/02/02 09:50:38 $
var gService = false;
var gTimeZone = -8;
// Code section for Enable First-Party Cookie Tracking
function dcsCookie(){
	if (typeof(dcsOther)=="function"){
		dcsOther();
	}
	else if (typeof(dcsPlugin)=="function"){
		dcsPlugin();
	}
	else if (typeof(dcsFPC)=="function"){
		dcsFPC(gTimeZone);
	}
}
function dcsGetCookie(name){
	var pos=document.cookie.indexOf(name+"=");
	if (pos!=-1){
		var start=pos+name.length+1;
		var end=document.cookie.indexOf(";",start);
		if (end==-1){
			end=document.cookie.length;
		}
		return unescape(document.cookie.substring(start,end));
	}
	return null;
}
function dcsGetCrumb(name,crumb){
	var aCookie=dcsGetCookie(name).split(":");
	for (var i=0;i<aCookie.length;i++){
		var aCrumb=aCookie[i].split("=");
		if (crumb==aCrumb[0]){
			return aCrumb[1];
		}
	}
	return null;
}
function dcsGetIdCrumb(name,crumb){
	var cookie=dcsGetCookie(name);
	var id=cookie.substring(0,cookie.indexOf(":lv="));
	var aCrumb=id.split("=");
	for (var i=0;i<aCrumb.length;i++){
		if (crumb==aCrumb[0]){
			return aCrumb[1];
		}
	}
	return null;
}
function dcsFPC(offset){
	if (typeof(offset)=="undefined"){
		return;
	}
	if (document.cookie.indexOf("WTLOPTOUT=")!=-1){
		return;
	}
	var name=gFpc;
	var dCur=new Date();
	var adj=(dCur.getTimezoneOffset()*60000)+(offset*3600000);
	dCur.setTime(dCur.getTime()+adj);
	var dExp=new Date(dCur.getTime()+315360000000);
	var dSes=new Date(dCur.getTime());
	WT.co_f=WT.vt_sid=WT.vt_f=WT.vt_f_a=WT.vt_f_s=WT.vt_f_d=WT.vt_f_tlh=WT.vt_f_tlv="";
	if (document.cookie.indexOf(name+"=")==-1){
		if ((typeof(gWtId)!="undefined")&&(gWtId!="")){
			WT.co_f=gWtId;
		}
		else if ((typeof(gTempWtId)!="undefined")&&(gTempWtId!="")){
			WT.co_f=gTempWtId;
			WT.vt_f="1";
		}
		else{
			WT.co_f="2";
			var cur=dCur.getTime().toString();
			for (var i=2;i<=(32-cur.length);i++){
				WT.co_f+=Math.floor(Math.random()*16.0).toString(16);
			}
			WT.co_f+=cur;
			WT.vt_f="1";
		}
		if (typeof(gWtAccountRollup)=="undefined"){
			WT.vt_f_a="1";
		}
		WT.vt_f_s=WT.vt_f_d="1";
		WT.vt_f_tlh=WT.vt_f_tlv="0";
	}
	else{
		var id=dcsGetIdCrumb(name,"id");
		var lv=parseInt(dcsGetCrumb(name,"lv"));
		var ss=parseInt(dcsGetCrumb(name,"ss"));
		if ((id==null)||(id=="null")||isNaN(lv)||isNaN(ss)){
			return;
		}
		WT.co_f=id;
		var dLst=new Date(lv);
		WT.vt_f_tlh=Math.floor((dLst.getTime()-adj)/1000);
		dSes.setTime(ss);
		if ((dCur.getTime()>(dLst.getTime()+1800000))||(dCur.getTime()>(dSes.getTime()+28800000))){
			WT.vt_f_tlv=Math.floor((dSes.getTime()-adj)/1000);
			dSes.setTime(dCur.getTime());
			WT.vt_f_s="1";
		}
		if ((dCur.getDay()!=dLst.getDay())||(dCur.getMonth()!=dLst.getMonth())||(dCur.getYear()!=dLst.getYear())){
			WT.vt_f_d="1";
		}
	}
	WT.co_f=escape(WT.co_f);
	WT.vt_sid=WT.co_f+"."+(dSes.getTime()-adj);
	var expiry="; expires="+dExp.toGMTString();
	document.cookie=name+"="+"id="+WT.co_f+":lv="+dCur.getTime().toString()+":ss="+dSes.getTime().toString()+expiry+"; path=/"+(((typeof(gFpcDom)!="undefined")&&(gFpcDom!=""))?("; domain="+gFpcDom):(""));
	if (document.cookie.indexOf(name+"=")==-1){
		WT.co_f=WT.vt_sid=WT.vt_f_s=WT.vt_f_d=WT.vt_f_tlh=WT.vt_f_tlv="";
		WT.vt_f=WT.vt_f_a="2";
	}
}

// Add dcsOther() here if using existing first-party cookie, or dcsPlugin() here if using WT Cookie Plugin

// Code section for Set the First-Party Cookie domain
//var gFpcDom=".webtrends.com";

// Code section for Enable Event Tracking
function dcsParseSvl(sv){
	sv=sv.split(" ").join("");
	sv=sv.split("\t").join("");
	sv=sv.split("\n").join("");
	var pos=sv.toUpperCase().indexOf("WT.SVL=");
	if (pos!=-1){
		var start=pos+8;
		var end=sv.indexOf('"',start);
		if (end==-1){
			end=sv.indexOf("'",start);
			if (end==-1){
				end=sv.length;
			}
		}
		return sv.substring(start,end);
	}
	return "";
}
function dcsIsOnsite(host){
	var doms="@@ONSITEDOMAINS@@";
    var aDoms=doms.split(',');
    for (var i=0;i<aDoms.length;i++){
		if (host.indexOf(aDoms[i])!=-1){
		       return 1;
		}
    }
    return 0;
}
function dcsIsHttp(e){
	return (e.href&&e.protocol&&(e.protocol.indexOf("http")!=-1))?true:false;
}
function dcsTypeMatch(path, typelist){
	var type=path.substring(path.lastIndexOf(".")+1,path.length);
	var types=typelist.split(",");
	for (var i=0;i<types.length;i++){
		if (type==types[i]){
			return true;
		}
	}
	return false;
}
function dcsEvt(evt,tag){
	var e=evt.target||evt.srcElement;
	while (e.tagName&&(e.tagName!=tag)){
		e=e.parentElement||e.parentNode;
	}
	return e;
}
function dcsBind(event,func){
	if ((typeof(window[func])=="function")&&document.body){
		if (document.body.addEventListener){
			document.body.addEventListener(event, window[func], true);
		}
		else if(document.body.attachEvent){
			document.body.attachEvent("on"+event, window[func]);
		}
	}
}
function dcsET(){
	var e=(navigator.appVersion.indexOf("MSIE")!=-1)?"click":"mousedown";
	dcsBind(e,"dcsDownload");
	dcsBind(e,"dcsDynamic");
	dcsBind(e,"dcsFormButton");
	dcsBind(e,"dcsOffsite");
	dcsBind(e,"dcsAnchor");
	dcsBind("mousedown","dcsRightClick");
}
	
function dcsMultiTrack(){
	if (arguments.length%2==0){
		for (var i=0;i<arguments.length;i+=2){
			if (arguments[i].indexOf('WT.')==0){
				WT[arguments[i].substring(3)]=arguments[i+1];
			}
			else if (arguments[i].indexOf('DCS.')==0){
				DCS[arguments[i].substring(4)]=arguments[i+1];
			}
			else if (arguments[i].indexOf('DCSext.')==0){
				DCSext[arguments[i].substring(7)]=arguments[i+1];
			}
		}
		var dCurrent=new Date();
		DCS.dcsdat=dCurrent.getTime();
		dcsFunc("dcsCookie");
		dcsTag();
	}
}

// Add event handlers here

function dcsAdv(){
	dcsFunc("dcsET");
	dcsFunc("dcsCookie");
	dcsFunc("dcsAdSearch");
	dcsFunc("dcsTP");
}
// --- END OF Advanced SmartSource Data Collector TAG ---------------------

// --- START OF Basic SmartSource Data Collector TAG ----------------------
// Copyright (c) 1996-2006 WebTrends Inc. All rights reserved.
// V8.0
// $DateTime: 2007/02/02 09:50:38 $
var gImages=new Array;
var gIndex=0;
var DCS=new Object();
var WT=new Object();
var DCSext=new Object();
var gQP=new Array();
var gI18n=true;

var gDomain="sdc.altera.com";
var gDcsId="";
var gFpc="WT_FPC";
var gConvert=false;
if ((typeof(gConvert)!="undefined")&&gConvert&&(document.cookie.indexOf(gFpc+"=")==-1)&&(document.cookie.indexOf("WTLOPTOUT=")==-1)){
	document.write("<SCR"+"IPT TYPE='text/javascript' SRC='"+"http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+"/"+gDcsId+"/wtid.js"+"'><\/SCR"+"IPT>");
}
if (window.RegExp){
	var RE={"%09":/\t/g,"%20":/ /g,"%23":/\#/g,"%26":/\&/g,"%2B":/\+/g,"%3F":/\?/g,"%5C":/\\/g,"%22":/\"/g,"%7F":/\x7F/g,"%A0":/\xA0/g};
	var I18NRE={"%25":/\%/g};
}

// Add customizations here

function dcsVar(){
	var dCurrent=new Date();
	WT.tz=dCurrent.getTimezoneOffset()/60*-1;
	if (WT.tz==0){
		WT.tz="0";
	}
	WT.bh=dCurrent.getHours();
	WT.ul=navigator.appName=="Netscape"?navigator.language:navigator.userLanguage;
	if (typeof(screen)=="object"){
		WT.cd=navigator.appName=="Netscape"?screen.pixelDepth:screen.colorDepth;
		WT.sr=screen.width+"x"+screen.height;
	}
	if (typeof(navigator.javaEnabled())=="boolean"){
		WT.jo=navigator.javaEnabled()?"Yes":"No";
	}
	if (document.title){
		WT.ti=gI18n?dcsEscape(dcsEncode(document.title),I18NRE):document.title;
	}
	WT.js="Yes";
	WT.jv=dcsJV();
	if (document.body&&document.body.addBehavior){
		document.body.addBehavior("#default#clientCaps");
		WT.ct=document.body.connectionType||"unknown";
		document.body.addBehavior("#default#homePage");
		WT.hp=document.body.isHomePage(location.href)?"1":"0";
	}
	else{
		WT.ct="unknown";
	}
	if (parseInt(navigator.appVersion)>3){
		if ((navigator.appName=="Microsoft Internet Explorer")&&document.body){
			WT.bs=document.body.offsetWidth+"x"+document.body.offsetHeight;
		}
		else if (navigator.appName=="Netscape"){
			WT.bs=window.innerWidth+"x"+window.innerHeight;
		}
	}
	WT.fi="No";
	if (window.ActiveXObject){
		for(var i=10;i>0;i--){
			try{
				var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+i);
				WT.fi="Yes";
				WT.fv=i+".0";
				break;
			}
			catch(e){
			}
		}
	}
	else if (navigator.plugins&&navigator.plugins.length){
		for (var i=0;i<navigator.plugins.length;i++){
			if (navigator.plugins[i].name.indexOf('Shockwave Flash')!=-1){
				WT.fi="Yes";
				WT.fv=navigator.plugins[i].description.split(" ")[2];
				break;
			}
		}
	}
	if (gI18n){
		WT.em=(typeof(encodeURIComponent)=="function")?"uri":"esc";
		if (typeof(document.defaultCharset)=="string"){
			WT.le=document.defaultCharset;
		} 
		else if (typeof(document.characterSet)=="string"){
			WT.le=document.characterSet;
		}
	}
	WT.tv="8.0.2";
//	WT.sp="@@SPLITVALUE@@";
	DCS.dcsdat=dCurrent.getTime();
	DCS.dcssip=window.location.hostname;
	DCS.dcsuri=window.location.pathname;
	if (window.location.search){
		DCS.dcsqry=window.location.search;
		if (gQP.length>0){
			for (var i=0;i<gQP.length;i++){
				var pos=DCS.dcsqry.indexOf(gQP[i]);
				if (pos!=-1){
					var front=DCS.dcsqry.substring(0,pos);
					var end=DCS.dcsqry.substring(pos+gQP[i].length,DCS.dcsqry.length);
					DCS.dcsqry=front+end;
				}
			}
		}
	}
	if ((window.document.referrer!="")&&(window.document.referrer!="-")){
		if (!(navigator.appName=="Microsoft Internet Explorer"&&parseInt(navigator.appVersion)<4)){
			DCS.dcsref=gI18n?dcsEscape(window.document.referrer, I18NRE):window.document.referrer;
		}
	}
}

function dcsA(N,V){
	return "&"+N+"="+dcsEscape(V, RE);
}

function dcsEscape(S, REL){
	if (typeof(REL)!="undefined"){
		var retStr = new String(S);
		for (var R in REL){
			retStr = retStr.replace(REL[R],R);
		}
		return retStr;
	}
	else{
		return escape(S);
	}
}

function dcsEncode(S){
	return (typeof(encodeURIComponent)=="function")?encodeURIComponent(S):escape(S);
}

function dcsCreateImage(dcsSrc){
	if (document.images){
		gImages[gIndex]=new Image;
		gImages[gIndex].src=dcsSrc;
		gIndex++;
	}
	else{
		document.write('<IMG ALT="" BORDER="0" NAME="DCSIMG" WIDTH="1" HEIGHT="1" SRC="'+dcsSrc+'">');
	}
}

function dcsMeta(){
	var elems;
	if (document.all){
		elems=document.all.tags("meta");
	}
	else if (document.documentElement){
		elems=document.getElementsByTagName("meta");
	}
	if (typeof(elems)!="undefined"){
		var length=elems.length;
		for (var i=0;i<length;i++){
			var name=elems.item(i).name;
			var content=elems.item(i).content;
			var equiv=elems.item(i).httpEquiv;
			if (name.length>0){
				if (name.indexOf("WT.")==0){
					var encode=false;
					if (gI18n){
						var params=["mc_id","oss","ti"];
						for (var j=0;j<params.length;j++){
							if (name.indexOf("WT."+params[j])==0){
								encode=true;
								break;
							}
						}
					}
					WT[name.substring(3)]=encode?dcsEscape(dcsEncode(content),I18NRE):content;
				}
				else if (name.indexOf("DCSext.")==0){
					DCSext[name.substring(7)]=content;
				}
				else if (name.indexOf("DCS.")==0){
					DCS[name.substring(4)]=(gI18n&&(name.indexOf("DCS.dcsref")==0))?dcsEscape(content,I18NRE):content;
				}
			}
			else if (gI18n&&(equiv=="Content-Type")){
				var pos=content.toLowerCase().indexOf("charset=");
				if (pos!=-1){
					WT.mle=content.substring(pos+8);
				}
			}
		}
	}
}

function dcsTag(){
	if (document.cookie.indexOf("WTLOPTOUT=")!=-1){
		return;
	}
	var P="http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+(gDcsId==""?'':'/'+gDcsId)+"/dcs.gif?";
	for (var N in DCS){
		if (DCS[N]) {
			P+=dcsA(N,DCS[N]);
		}
	}
	var keys=["co_f","vt_sid","vt_f_tlv"];
	for (var i=0;i<keys.length;i++){
		var key=keys[i];
		if (WT[key]){
			P+=dcsA("WT."+key,WT[key]);
			delete WT[key];
		}
	}
	for (N in WT){
		if (WT[N]) {
			P+=dcsA("WT."+N,WT[N]);
		}
	}
	for (N in DCSext){
		if (DCSext[N]) {
			P+=dcsA(N,DCSext[N]);
		}
	}
	if (P.length>2048&&navigator.userAgent.indexOf('MSIE')>=0){
		P=P.substring(0,2040)+"&WT.tu=1";
	}
	dcsCreateImage(P);
}

function dcsJV(){
	var agt=navigator.userAgent.toLowerCase();
	var major=parseInt(navigator.appVersion);
	var mac=(agt.indexOf("mac")!=-1);
	var ff=(agt.indexOf("firefox")!=-1);
	var ff0=(agt.indexOf("firefox/0.")!=-1);
	var ff10=(agt.indexOf("firefox/1.0")!=-1);
	var ff15=(agt.indexOf("firefox/1.5")!=-1);
	var ff2up=(ff&&!ff0&&!ff10&!ff15);
	var nn=(!ff&&(agt.indexOf("mozilla")!=-1)&&(agt.indexOf("compatible")==-1));
	var nn4=(nn&&(major==4));
	var nn6up=(nn&&(major>=5));
	var ie=((agt.indexOf("msie")!=-1)&&(agt.indexOf("opera")==-1));
	var ie4=(ie&&(major==4)&&(agt.indexOf("msie 4")!=-1));
	var ie5up=(ie&&!ie4);
	var op=(agt.indexOf("opera")!=-1);
	var op5=(agt.indexOf("opera 5")!=-1||agt.indexOf("opera/5")!=-1);
	var op6=(agt.indexOf("opera 6")!=-1||agt.indexOf("opera/6")!=-1);
	var op7up=(op&&!op5&&!op6);
	var jv="1.1";
	if (ff2up){
		jv="1.7";
	}
	else if (ff15){
		jv="1.6";
	}
	else if (ff0||ff10||nn6up||op7up){
		jv="1.5";
	}
	else if ((mac&&ie5up)||op6){
		jv="1.4";
	}
	else if (ie5up||nn4||op5){
		jv="1.3";
	}
	else if (ie4){
		jv="1.2";
	}
	return jv;
}

function dcsFunc(func){
	if (typeof(window[func])=="function"){
		window[func]();
	}
}

dcsVar();
dcsMeta();
//dcsFunc("dcsAdv");
dcsTag();
// --- END OF Basic SmartSource Data Collector TAG --------------------
/*********************************************************************/


/**********************************************************************
 * General purpose function to open popup windows.
 * Created by Macromedia tools
**********************************************************************/
function MM_openBrWindow(theURL,winName,features) { //v2.0
	window.open(theURL,winName,features);
}


/**********************************************************************
 * General purpose function that carry the entire query string 
 * (including the initial "?") forward to the target href. 
**********************************************************************/
function appendTrackingString(linkObj) {
	if (location.search.substr(1)!="") {
		linkObj.href += location.search;
	}
}


/**********************************************************************
 * The following functions are used in the GH A/B testing  
 * and Randomly display the GH images
**********************************************************************/
var pic_width=140;   /* default width of all your images */ 
var pic_height=120;  /* default height of all your images */ 
var border_size=0;   /* default border size you want on your images */ 

// -- setRandomImage function: randomly display the image from image array list
// --                          pass the image name as parameter for webTrends tracking

function setRandomImage(ghArray, ghUrl, ghImg) {
	// --- get random number ---
	var randomnumber = Math.floor(Math.random()*ghArray.length);
				
	// --- WebTrends tracking ---
	var myqsy = ghArray[randomnumber].abvalue;
	ghArray[randomnumber].onload=dcsMultiTrack('DCS.dcsuri','/ab-testing/ab-test.abt','DCSext.ab-url', window.location.pathname,'DCSext.ab-qry', myqsy, 'DCSext.ab-type', 's');
	
	//var mystring = ghArray[randomnumber].qstring;
	// -- randomly display image and link --
	ghUrl.href = ghUrl.href + ghArray[randomnumber].qstring;
	ghImg.src = ghArray[randomnumber].image_item.src;
	ghImg.alt = ghArray[randomnumber].image_item.alt;
	ghImg.height = ghArray[randomnumber].image_item.height;
	ghImg.width = ghArray[randomnumber].image_item.width;
	
}
	
function imageItem(image_location, image_alt, querystring, ab_value) {
	this.image_item = new Image();
	this.qstring = querystring;
	this.abvalue = ab_value;
	this.image_item.src = image_location;
	this.image_item.width = pic_width;
	this.image_item.height = pic_height;
	this.image_item.alt = image_alt;
 }
 


/**********************************************************************
 * The following functions are used in the Tower Banners A/B testing  
 * Randomly display the Tower Banner images without WebTrends tracking
 * Accela provided the tracking URLs in image link
**********************************************************************/
function setRandomTowerBanner(ghArray, ghUrl, ghImg) {
	// --- get random number ---
	var randomnumber = Math.floor(Math.random()*ghArray.length);
	
	// -- randomly display image and link --
	ghUrl.href = ghArray[randomnumber].image_item.url
	ghImg.src = ghArray[randomnumber].image_item.src;
	ghImg.alt = ghArray[randomnumber].image_item.alt;
	
}

function towerBanner(image_location, image_url, image_alt) {
	this.image_item = new Image();
	this.image_item.src = image_location;
	this.image_item.alt = image_alt;
	this.image_item.url = image_url;
}
 
 



/*************************************************************************************************************
 * The following functions are used in the tree expand/collapse function. - Erin (2007-01-31)
 * Example: Cyclone III HandBood listing
 * Usage pattern:
 		 <div class='collapsable'>
			  <h4>"Application Notes" or "Volume 1 - Stratix III Device Handbook"</h4>
				  <span>
						text here
				  </span>
		 </div>
 * Implementation note: The tree icon can be text or image based. 
 *                      Overwrite the functions here rin a different .js (JavaScript) file.
***************************************************************************************************************/
var COLLAPSABLE_PARENT_NAME = "collapsable"; 
var COLLAPSABLE_PARENT_TYPE = "div"; 
var COLLAPSABLE_CHILD_TYPE = "span"; // --- all text that can be expand/collaps must put it between <span></span> tag --- 
var COLLAPSABLE_START_TYPE = "h4";   // --- the marker to start put the [+] and [-] symbol ---
var COLLAPSABLE_EXPAND = "[+]"; 
var COLLAPSABLE_SHRINK = "[&ndash;]"; 
//var COLLAPSABLE_EXPAND_IMG = "expand.gif";     
//var COLLAPSABLE_SHRINK_IMG = "collapse.gif";

var flat = 0;  	// default: flat=0, expand all: flat=1, collaps all: flat=-1 

/**
 * Assign collapsable image to desginated block 
 */ 
function assignCollapse(div) { 
	// --- Creates an instance of the element object with tag name "a"
    var collapsableIcon = document.createElement('a'); 
	collapsableIcon.className = 'twisty';
	// --- DOM Style Object:represents an individual style statement
	// --- cursor: sets the type of cursor to be displayed.
	// --- example: value=pointer -- the cursor indicates a link
	// ---          value=text    -- the cursor indicates text
    collapsableIcon.style.cursor='pointer'; 
	// --- create a e/c attribute, ready to be inserted somewhere in document
    collapsableIcon.setAttribute('expand', COLLAPSABLE_EXPAND); 
    collapsableIcon.setAttribute('shrink', COLLAPSABLE_SHRINK);
	
	// --- Default to collapse all ---
    // collapsableIcon.setAttribute('state', -1); 
	
	// volume section default to expanded and related doc default to collapse
   	collapsableIcon.setAttribute('state', 1); 
	
	// --- Syntax: parentObj.insertBefore(childObj, brotherObj)
	div.insertBefore(collapsableIcon, div.getElementsByTagName(COLLAPSABLE_START_TYPE)[0]);
	collapsableIcon.onclick=function() { twisty(collapsableIcon, 0); }               
    collapsableIcon.onclick(); 
} 

function twisty(collapsableIcon, flat) { 
	var state = "";
	if (flat == 0 )  {
		state = -(1*collapsableIcon.getAttribute('state')); 
		collapsableIcon.setAttribute('state', state);
		collapsableIcon.parentNode.getElementsByTagName(COLLAPSABLE_CHILD_TYPE)[0].style.display=state==1?'none':'block'; 
		collapsableIcon.innerHTML = collapsableIcon.getAttribute(state==1?'expand':'shrink');
	} else if (flat == 1) { // --- expand all ---
		collapsableIcon.parentNode.getElementsByTagName(COLLAPSABLE_CHILD_TYPE)[0].style.display='block'; 
		// ---  alert(collapsableIcon.parentNode.getElementsByTagName(COLLAPSABLE_CHILD_TYPE)[0]);
		collapsableIcon.innerHTML = collapsableIcon.getAttribute('shrink');
		collapsableIcon.setAttribute('state', 1);
		collapsableIcon.onclick();
	} else if (flat == -1) { // --- collaps all ---
		collapsableIcon.parentNode.getElementsByTagName(COLLAPSABLE_CHILD_TYPE)[0].style.display='none'; 
		collapsableIcon.innerHTML = collapsableIcon.getAttribute('expand');
		collapsableIcon.setAttribute('state', -1);
		collapsableIcon.onclick();
	} 
}

changeLink=function(setting){ 
	var tempstatus = "";
	var alink = "";
	if (document.getElementById && document.createTextNode) { 
        var aentries = document.getElementsByTagName(COLLAPSABLE_PARENT_TYPE);
		for (var i=0; i<aentries.length; i++){
			if (aentries[i].className==COLLAPSABLE_PARENT_NAME)  {
				alink = aentries[i].getElementsByTagName("a")[0];
				if (setting=="expand")
					twisty(alink, 1); 
				else if (setting=="collapse")  
					twisty(alink, -1); 
			}
		}
	}
}

function twistyImages(collapsableIcon, flat) { 
	var state = "";
	if (flat == 0 )  {
		state = -(1*collapsableIcon.getAttribute('state')); 
		collapsableIcon.setAttribute('state', state);
		collapsableIcon.parentNode.getElementsByTagName(COLLAPSABLE_CHILD_TYPE)[0].style.display=state==1?'none':'block'; 
		if (collapsableIcon.getAttribute('state')==1)
			collapsableIcon.src = COLLAPSABLE_EXPAND_IMG;
		else 
			collapsableIcon.src = COLLAPSABLE_SHRINK_IMG;
	} else if (flat == 1) { // --- expand all ---
		collapsableIcon.parentNode.getElementsByTagName(COLLAPSABLE_CHILD_TYPE)[0].style.display='block'; 
		collapsableIcon.src = COLLAPSABLE_SHRINK_IMG;	// --- use image as collapse/expand icon --- 
		collapsableIcon.setAttribute('state', 1);
		collapsableIcon.onclick();
		
	} else if (flat == -1) {// --- collaps all --- 
		collapsableIcon.parentNode.getElementsByTagName(COLLAPSABLE_CHILD_TYPE)[0].style.display='none'; 
		collapsableIcon.src = COLLAPSABLE_EXPAND_IMG;	// --- use image as collapse/expand icon --- 
		collapsableIcon.setAttribute('state', -1);
		collapsableIcon.onclick();
	}
}

changeLinkImg=function(setting) { 
	var tempstatus = "";
	var alink = "";
    // --- if there are switch contents defined on the page --- 
	 if(document.getElementById && document.createTextNode) { 
        var aentries = document.getElementsByTagName(COLLAPSABLE_PARENT_TYPE);
		for (var i=0; i<aentries.length; i++){
			if (aentries[i].className==COLLAPSABLE_PARENT_NAME)  {
				alink = aentries[i].getElementsByTagName("img")[0];   // --- if use image as collapse/expand icon ---
				if (setting=="expand") 
					twistyImages(alink, 1);
				else if (setting=="collapse")  
					twistyImages(alink, -1);
			}
		}
	}
}


/* -- since The window.onload event is used by programmers to kick-start their web applications.
   -- The problem is that the onload event fires after all page content has loaded - for Mozilla browser, it may
   -- have lag before the page active. To fix it: must let DOM has fully loaded without waiting.  Mozilla provides an enent 
   -- tailor-made for this (Opera 9 also support this) : DOMContentLoaded. and can fix above issue for Mozilla browser. 
   -- For other browser, use standard window.onload event. 
   -- The addEventListener method takes the event as the first parameter, the event handler (function) as the second, and whether 
   -- the event is captured or allowed to "bubble up" to other events with the third parameter.
    
   if (document.addEventListener) {    
		document.addEventListener("DOMContentLoaded", collapsableinit, false);
   } else {
	 	window.onload=collapsableinit;
   }
*/

/**
 * 2007-11-14: Append query string to the href attribute. It prepend ? or & depending on the condition.
 */
function appendQuerystring(linkObj, querystring) {
	if (linkObj.href.indexOf("?")>0) {
		querystring = "&" + querystring;
	} else {
		querystring = "?" + querystring;
	}
	linkObj.href += querystring;
	
	return true;
}
