	var a9IsIE = true;
	var a9IsMoz = false;
	var a9IsSafari = false;
	var a9IsOpera = false;
	var a9IsWindows = true;
	var a9IsMac = false;
	var a9VersionMajor = 6;
	var a9VersionMinor = 0;
	var A9IMAGES = "http://static.a9.com/-/static/images";
	var A9NOSEARCH = "/-";
	var A9SEARCHTERM = "http://a9.com/";
	var A9SITE_INFO = "/-/api/toolbarapi/toolbar?method=siteinfo";
	var a9IsGeneric=false;
	var a9domain = "";

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_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_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];}
}



if (window.navigator.userAgent.indexOf("MSIE")>=1)
{
//IE
	var a9IsIE = true;
	var a9IsMoz = false;
}else{
if (window.navigator.userAgent.indexOf("Firefox")>=1)
{
//Firefox
	var a9IsIE = false ;
	var a9IsMoz = true ;
}else{
//
	var a9IsIE = false ;
	var a9IsMoz = false ;
}
}

function setActiveStyleSheet(title){ 
  document.getElementsByTagName("link")[0].href="style/"+title; 
}




/* @inShow: record the states (show or hide) of all the 8 <td>s  */
/* @inFull: record the state whether a <td> is in full show */
/* @restoreShow: to remember the state of each <cd> before a full action */
var inShow = new Array(false,false,false,false,false,false,false,false);
var inFull = false;	
var restoreShow = new Array(false,false,false,false,false,false,false,false);



/* @getShowNumber(): to get the number of <td>s in show
*/
function getShowNumber(){
	var showNumber = 0;
	var i;
	for(i=0; i<8; i++){
		if(inShow[i]==true)
			showNumber++;
	}
	return showNumber;
}

/* @nameToNubmer(): map the names of the 8 <td>s to an identified nunber
*/
function nameToNumber(idValue){
	var theOne;
	switch(idValue){
		case 'sanc':
			theOne = 0;break;
		case 'smin':
			theOne = 1;break;
		case 'sjou':
			theOne = 2;break;
		case 'smod':
			theOne = 3;break;
		case 'sdis':
			theOne = 4;break;
		case 'spai':
			theOne = 5;break;
		case 'svid':
			theOne = 6;break;
		case 'sfig':
			theOne = 7;break;
		default:
			return -1;break;
	}
	return theOne;
}
	
/* @numberToName(): map an identifier number to names of <td>s
*/
function numberToName(idNumber){
	var theOne;
	switch(idNumber){
		case 0:
			theOne = 'sanc';break;
		case 1:
			theOne = 'smin';break;
		case 2:
			theOne = 'sjou';break;
		case 3:
			theOne = 'smod';break;
		case 4:
			theOne = 'sdis';break;
		case 5:
			theOne = 'spai';break;
		case 6:
			theOne = 'svid';break;
		case 7:
			theOne = 'sfig';break;
		default:
			return -1;break;
	}
	return theOne;
}


/* @setInShow(): set the array inShow[] at the 'idValue' position
*/
function setInShow(idValue){
	var theOne;
	theOne = nameToNumber(idValue);
	if(theOne <0)
		return -1;
	inShow[theOne] = true;
	return 1;
}

/* @resetInShow(): reset the array inShow[] at the 'idValue' position
*/
function resetInShow(idValue){
	var theOne;
	theOne = nameToNumber(idValue);
	if(theOne <0)
		return -1;
	inShow[theOne] = false;
	return 1;	
}



/* @setFullShow(): set the inShow[] and restoreShow[] array when changing a <td> to full
*/
function setFullShow(idValue){
	inFull = true;
	var theOne;
	theOne = nameToNumber(idValue);
	if(theOne <0)
		return -1;

// set restoreShow[] to inShow[] to remember the <td>s that is in show before full show
// and set inShow[] to false to hide all the other <td>s
	for(var i = 0; i <8 ; i++){
		restoreShow[i] = inShow[i];
		if(theOne != i)
			inShow[i] = false;
	}
	return 1;
}


/* @resetFullShow(): reset the inShow[] and restoreShow[] array when changing a <td> to full show
*/
function resetFullShow(idValue){
	inFull = false;
	var theOne;
	theOne = nameToNumber(idValue);
	if(theOne <0)
		return -1;
// set inShow[] to restoreShow[] to reshow the <td>s hidden by full show
	for(var i = 0; i <8 ; i++){
		inShow[i] = restoreShow[i];
	}
	return 1;
}


/* @setHTMLNav(): set the checkboxs in the navigator bar when changing a <td> to full
*/
function setHTMLNav(target,idValue){
	var theOne;
	theOne = nameToNumber(idValue);

//	alert("in setHTMLNav");
	for(var i=0; i<8; i++){
		if((i!=theOne)&&(restoreShow[i]==true)){
			var valueS = numberToName(i);
			createCookie(valueS,"0",7);
//			alert(document.cookie);
			valueS = valueS.replace(/^s/, "cb");
	    	var divToSet=document.getElementById(valueS);
	    	divToSet.checked=!divToSet.checked;
		}
	}

//	set the nav bar of "[full] [close]" and "[restore]"
	if(a9IsIE == true){
		target.parentNode.parentNode.parentNode.style.display = "none";
		target.parentNode.parentNode.parentNode.nextSibling.style.display = "";
	}
	else if(a9IsMoz == false){
		var cn = target.parentNode.parentNode.parentNode;
		cn = cn.childNodes;
		cn[1].style.display = "none";
		cn[3].style.display = "";
	}
	else{
	
	}

}


/* @resetHTMLNav(): reset the checkboxs in the navigator bar when changing a <td> to full
*/
function resetHTMLNav(target,idValue){
	var theOne;
	theOne = nameToNumber(idValue);
	for(var i=0; i<8; i++){
		if((i!=theOne)&&(inShow[i]==true)){
			var valueS = numberToName(i);
			createCookie(valueS,"1",7);
			valueS = valueS.replace(/^s/, "cb");
	    	var divToSet=document.getElementById(valueS);
	    	divToSet.checked=!divToSet.checked;
		}			
	}	
	
//	set the nav bar of "[full] [close]" and "[restore]"	
	if(a9IsIE == true){
		target.parentNode.parentNode.parentNode.style.display = "none";
		target.parentNode.parentNode.parentNode.previousSibling.style.display = "";
	}
	else if(a9IsMoz == false){
		var cn = target.parentNode.parentNode.parentNode;
		cn = cn.childNodes;
		cn[1].style.display = "";
		cn[3].style.display = "none";
	}
	else{
	
	}
	
}


/* @setInShowWidth(): used for expandColumnTgt(), to set the <td>s to be shown
*/
function setInShowWidth(width,idValue){
	var windowName;
	var windowToSet;
	var tempName;
	var widthNum = 100/width;
	widthNum = widthNum + "%";
		
// "for" statement iteratively checks the inShow[] array to show the <td> if its inShow[] value is true
	for(var i = 0; i<8; i++){
		if(inShow[i]==true){
			windowName = numberToName(i);
			tempName=windowName.replace(/^s/, "");
	    	windowToSet=document.getElementById(tempName+"R");
			windowToSet.setAttribute('width',widthNum);
    		if(windowName == idValue)
	    		windowToSet.style.display = "";
		}
	}
}

/* @setInShowWidth(): used for collapseColumnTgt(), to show <td>s and also hide <td>s 
*/
function setHideShowWidth(width,idValue){
	var windowName;
	var windowToSet;
	var tempName;
	var widthNum = 100/width;
	widthNum = widthNum + "%";

// "for" statement iteratively checks the inShow[] array to show the <td> if its inShow[] value is true
//	or else hide the <td> whose inShow[] value is false ( before this call it may be in show )
	for(var i = 0; i<8; i++){
		windowName = numberToName(i);
		tempName=windowName.replace(/^s/, "");
	    windowToSet=document.getElementById(tempName+"R");
	    if(inShow[i]==true){
	    	windowToSet.setAttribute('width',widthNum);    			
			windowToSet.style.display = "";	    			
		}
		else{
			windowToSet.style.display = "none";
		}
	}
}


/* @setNoneShow(): used when no <td> is shown, so show the 'NothingR' <td>
*/
function setNoneShow(){
	var windowToSet=document.getElementById("NothingR");
	windowToSet.style.display = "";
}

/* @hideNoneShow(): used change from  no <td> is shown, so hide the 'NothingR' <td>
*/
function hideNoneShow(){
	var windowToSet=document.getElementById("NothingR");
	windowToSet.style.display = "none";
}

/* @ccb(): the original call from result.jsp on the tag of <input 'checkbox'>
*/
function ccb(evt,lang){
// check the evt element according to the type of browser
    evt=evt ? evt : event;
    var target=evt.currentTarget?evt.currentTarget:evt.srcElement;    
//  alert(typeof target);
    if(a9IsMoz){
		try{
			target.blur()
		}
		catch(e){
		}
    }
    //if(lang == 'eng')
    //	alert("dafdkj;");
    ccommon(target,lang);
// call ccommon() to tackle the event

}

/* @lcb(): the original call from result.jsp on the tag of <span>
*/
function lcb(evt,lang){
    evt=evt ? evt : event;
    var target=evt.currentTarget?evt.currentTarget:evt.srcElement;  

// dynamically change the state of checkbox related to the <span> with event 
    var p=target.parentNode;
    var cn=p.childNodes;
    for(var i=0;i<cn.length;i++){
		var c=cn[i];
		if(c.tagName=="INPUT"&&(c.type=="checkbox"||(c.type=="radio"&&!c.checked))){
		    c.checked=!c.checked;	
// call ccommon() to tackle the event
			ccommon(c,lang);
		}
    }
}

/* @clb(): the original call from index.jsp on the tag of <input 'checkbox'>
*/
function clb(evt){
    evt=evt ? evt : event;
    var target=evt.currentTarget?evt.currentTarget:evt.srcElement;

//  alert(typeof target);
    if(a9IsMoz){
		try{
			target.blur()
		}
		catch(e){
		}
    }
// call checkCookie() to change the cookie
    checkCookie(target);
}

/* @llb(): the original call from index.jsp on the tag of <span>
*/
function llb(evt){
 	evt=evt ? evt : event;
    var target=evt.currentTarget?evt.currentTarget:evt.srcElement;
    
// dynamically change the state of checkbox related to the <span> with event 
    var p=target.parentNode; 
    var cn=p.childNodes;
    for(var i=0;i<cn.length;i++){
		var c=cn[i];
		if(c.tagName=="INPUT"&&(c.type=="checkbox"||(c.type=="radio"&&!c.checked))){
		    c.checked=!c.checked;	
// call checkCookie() to change the cookie
		    checkCookie(c);		   
		}
    }
}



/* @cpb(): the original call from personalIndex.jsp on the tag of <input 'checkbox'>
*/
function cpb(evt){
    evt=evt ? evt : event;
    var target=evt.currentTarget?evt.currentTarget:evt.srcElement;
    
//  alert(typeof target);
    if(a9IsMoz){
		try{
			target.blur()
		}
		catch(e){
		}
    }
// call checkCookie() to change the cookie
    checkCookie(target);
}


/* @lpb(): the original call from personalIndex.jsp on the tag of <span>
*/
function lpb(evt){
 	evt=evt ? evt : event;
    var target=evt.currentTarget?evt.currentTarget:evt.srcElement;

// dynamically change the state of checkbox related to the <span> with event 
    var p=target.parentNode;    
    var cn=p.childNodes;
    
    for(var i=0;i<cn.length;i++){
		var c=cn[i];		
		if(c.tagName=="INPUT"&&(c.type=="checkbox"||(c.type=="radio"&&!c.checked))){
		    c.checked=!c.checked;
// call checkCookie() to change the cookie
		    checkCookie(c);		   
		}
    }
}


/* @checkCookie(): used to set the cookie value of checkbox so to remember the state of the <td>s in result.jsp
*/
function checkCookie(target){
    var v=target.value;
    var idValue = v;
    v=v.replace(/^s/, "");
    var col=document.getElementById(v+"R");
	var cookieStr="";

// if the checkbox is checked, create cookie 1
// else create cookie 0	
    if(target.checked){
		createCookie (idValue,"1",7); 
    }else{
		createCookie (idValue,"0",7);
    }
}
 
/* @ccommon(): tackle the event
*/
function ccommon(target,lang){
    var v=target.value;
    var idValue = v;
    v=v.replace(/^s/, "");
    var col=document.getElementById(v+"R");
	var cookieStr="";
// check whether the event is to expand a <td> or close a <td>
    if(target.checked){
// if expanding, call expandColumnTgt() to show the <td>
// inside "if" statement is used to create cookies and call dojo to dynamically bring the search result
 		expandColumnTgt(col,idValue);
		if ( idValue == "sdis" ) {
			createCookie ("sdis","1",7);
		    if(lang == 'eng')
		    	dissertationEngResult ();
		    else
		    	dissertationResult ();
		}else if( idValue == "smod" ) {
			createCookie ("smod","1",7);
		    if(lang == 'eng')
		    	modernEngResult ();
		    else
		    	modernResult ();
		}else if( idValue == "smin" ) {
			createCookie ("smin","1",7);
		    if(lang == 'eng')
		    	minguoEngResult ();
		    else
		    	minguoResult ();
		}else if( idValue == "sanc" ) {
			createCookie ("sanc","1",7);
		    if(lang == 'eng')
		    	ancientEngResult ();
		    else
		    	ancientResult ();
		}else if( idValue == "sjou" ) {
			createCookie ("sjou","1",7);
		    if(lang == 'eng')
		    	journalEngResult ();
		    else
		    	journalResult ();
		}else if( idValue == "spai" ) {
			createCookie ("spai","1",7);
		    if(lang == 'eng')
		    	paintingEngResult ();
		    else
		    	paintingResult (); 
		}else if( idValue == "svid" ) {
			createCookie ("svid","1",7);
		    if(lang == 'eng')
		    	videoEngResult ();
		    else
		    	videoResult();
		}else if( idValue == "sfig" ) {
			createCookie ("sfig","1",7);
		    if(lang == 'eng')
		    	englishEngResult ();
		    else
		    	englishResult();
		}
	}
// if closing, call collapseColumnTgt() to show the <td>	
	else{
		collapseColumnTgt(col,idValue);
		if ( idValue == "sdis" ) {
			createCookie ("sdis","0",7);
		}else if( idValue == "smod" ) {
			createCookie ("smod","0",7);
		}else if( idValue == "smin" ) {
			createCookie ("smin","0",7);
		}else if( idValue == "sanc" ) {
			createCookie ("sanc","0",7);
		}else if( idValue == "sjou" ) {
			createCookie ("sjou","0",7);
		}else if( idValue == "spai" ) {
			createCookie ("spai","0",7);
		}else if( idValue == "svid" ) {
			createCookie ("svid","0",7);
		}else if( idValue == "sfig" ) {
		    createCookie ("sfig","0",7);
		}
    }
//    alert (document.cookie);
}

/* @expandColumnTgt(): to expand a <td> to be shown
*/
function expandColumnTgt(col,idValue){
// "if" statement sets the in full show <td>'s 'full','close' and 'restore' button
//	also sets the var inFull to false
	if(inFull == true){
		for(var i=0; i<8; i++){
			if(inShow[i]==true){
				var valueS = numberToName(i);
				valueS = valueS.replace(/^s/, "");
	    		var divToSet=document.getElementById(valueS+'R');
	    		divToSet = divToSet.getElementsByTagName('A')[0];

//	set the nav bar of "[full] [close]" and "[restore]"	
				if(a9IsIE == true){
					divToSet.parentNode.parentNode.style.display = "";
					divToSet.parentNode.parentNode.nextSibling.style.display = "none";
				}
				else if(a9IsMoz == false){
					var cn = divToSet.parentNode.parentNode.parentNode;
					cn = cn.childNodes;
					cn[1].style.display = "";	
					cn[3].style.display = "none";
				}
				else{
				
				}
	    		
			}
		}
		inFull = false;	
	}

// set related value with the <td> to be shown inShow[] array to be true
	setInShow(idValue);
	var showNumber = getShowNumber();
	
// if show the <td> from a none <td> shown state, call hideNoneShow() to hide the 'nothingR' <td>
	if(showNumber ==1)
		hideNoneShow();
// call setInShowWidth() to show the <td>
	setInShowWidth(showNumber,idValue);
}


/* @collapseColumnTgt(): to close a <td> to be shown
*/
function collapseColumnTgt(col,idValue){
// set related value with the <td> to be closed inShow[] array to be false
	resetInShow(idValue);
	var showNumber = getShowNumber();
// call setHideShowWidth() to hide the <td>	
	setHideShowWidth(showNumber,idValue);
// if close the <td> to in the state of none <td> shown, call setNoneShow() to show the 'nothingR' <td>
	if(showNumber==0)
		setNoneShow();
}



/* @fullColumn(): to change a <td> to in the full show state
*/
function fullColumn(evt,id){
	
	evt=evt ? evt : event;
	var target=evt.currentTarget?evt.currentTarget:evt.srcElement;
	var idValue = numberToName(id);	

// call setFullShow() to set the state of inShow[] and restoreShow[] arrays
	setFullShow(idValue);
// call setHTMLNav() to set the state of the checkboxs
	setHTMLNav(target,idValue);
// call setHideShowWidth() to show the only <td>	
	setHideShowWidth(1,idValue);
}



/* @collapseColumn(): to close a <td>
					  this function is not the opposite to fullColumn()
					  so subfunctions called in this function are not similar to subfunctions in fullColumn()
					  but it is really similar to collapseColumnTgt()
*/
function collapseColumn(evt,id){
	evt=evt ? evt : event;
	var target=evt.currentTarget?evt.currentTarget:evt.srcElement;
	var idValue = numberToName(id);

// call resetInShow() to set the state of inShow[]
	resetInShow(idValue);
	var showNumber = getShowNumber();	
// call setHideShowWidth() to hide the <td>	
	setHideShowWidth(showNumber,idValue);
// if close the <td> to in the state of none <td> shown, call setNoneShow() to show the 'nothingR' <td>	
	if(showNumber==0)
		setNoneShow();
// change the state of checkbox and cookie manually
	createCookie(idValue,"0",7);
	var valueS = idValue.replace(/^s/, "cb");
	var divToSet=document.getElementById(valueS);
	divToSet.checked=!divToSet.checked;
}


/* @restoreColumn(): to restore from a full show state
*/
function restoreColumn(evt,id){
	evt = evt ? evt : event;
	var target=evt.currentTarget?evt.currentTarget:evt.srcElement;
	var idValue = numberToName(id);

// call resetFullShow() to set the state of inShow[] and restoreShow[] arrays
	resetFullShow(idValue);
// call resetHTMLNav() to set the state of the checkboxs
	resetHTMLNav(target,idValue);
	var showNumber = getShowNumber();
// call setHideShowWidth() to show all the <td>s
	setHideShowWidth(showNumber,idValue);
}


/* @setShowNumber(): adjust the width of <td>s in show during index --> result 
					 call setHideShowWidth() to set the width 
*/

function setShowNumber(number,showColumn){	
	inShow = showColumn;	
	var showNumber = getShowNumber();
	setHideShowWidth(showNumber,0);
}


/* @changeTo(): used in advanced.jsp 
				change the <div> to be shown according to the arg 'repo' 
				can be refined with a map function
*/ 

/* @repoInAdvancedSearch: to remember the div in show in advancedSearch */
var repoInAdvancedSearch = "normalForm" ;


function changeTo(repo){
	var divToSet;
	var c;
	
	repoInAdvancedSearch = repo+"Form";
//	alert("repoInAdvancedSearch:"+repoInAdvancedSearch);
//	alert("[repo]:"+repo);
	divToSet = document.getElementById("normal");
	if(repo == "normal"){		
		divToSet.style.display = "";
	}
	else{		
		divToSet.style.display = "none";
	}
	
	divToSet = document.getElementById("ancient");
	if(repo == "ancient"){		
		divToSet.style.display = "";
	}
	else{		
		divToSet.style.display = "none";
	}
	
	
	divToSet = document.getElementById("dissertation");
	if(repo == "dissertation"){		
		divToSet.style.display = "";
	}
	else
		divToSet.style.display = "none";

	divToSet = document.getElementById("modern");
	if(repo == "modern"){
		divToSet.style.display = "";
	}
	else
		divToSet.style.display = "none";
		
	

	divToSet = document.getElementById("minguo");
	if(repo == "minguo"){
		divToSet.style.display = "";
	}
	else
		divToSet.style.display = "none";
		
	divToSet = document.getElementById("english");
	if(repo == "english"){
		divToSet.style.display = "";
	}
	else
		divToSet.style.display = "none";
		
	divToSet = document.getElementById("journal");
	if(repo == "journal"){
		divToSet.style.display = "";
	}
	else
		divToSet.style.display = "none";
	
	
	return true;
}



/* @reSearchMakeNode(): for second research in result.jsp
				   		make node for <form> 'reSearchForm'
*/
function reSearchMakeNode(str){
	var newHiddenField = document.createElement("input");
	newHiddenField.type = "hidden";
	newHiddenField.name = str;
	return newHiddenField;
}

/* @reSearchChk(): for second research in result.jsp
				   also used in page up and down in result.jsp
*/
function reSearchChk(){
	var c;
	var appendDiv;
	
// append <input 'hidden'> tag in <form> 'reSearchForm' to pass the params
	c = document.getElementById("cbdis");
	if(c.checked){
		c = document.getElementById("reSearchForm");
		appendDiv = reSearchMakeNode("sdis");
		c.appendChild(appendDiv);		
	}
	c = document.getElementById("cbmod");
	if(c.checked){
		c = document.getElementById("reSearchForm");
		appendDiv = reSearchMakeNode("smod");
		c.appendChild(appendDiv);
	}
	c = document.getElementById("cbmin");
	if(c.checked){
		c = document.getElementById("reSearchForm");
		appendDiv = reSearchMakeNode("smin");
		c.appendChild(appendDiv);
	}
	c = document.getElementById("cbanc");
	if(c.checked){
		c = document.getElementById("reSearchForm");
		appendDiv = reSearchMakeNode("sanc");
		c.appendChild(appendDiv);
	}
	c = document.getElementById("cbjou");
	if(c.checked){
		c = document.getElementById("reSearchForm");
		appendDiv = reSearchMakeNode("sjou");
		c.appendChild(appendDiv);
	}
	c = document.getElementById("cbpai");
	if(c.checked){
		c = document.getElementById("reSearchForm");
		appendDiv = reSearchMakeNode("spai");
		c.appendChild(appendDiv);
	}
	c = document.getElementById("cbvid");
	if(c.checked){
		c = document.getElementById("reSearchForm");
		appendDiv = reSearchMakeNode("svid");
		c.appendChild(appendDiv);
	}

	c = document.getElementById("cbfig");
	if(c.checked){
		c = document.getElementById("reSearchForm");
		appendDiv = reSearchMakeNode("sfig");
		c.appendChild(appendDiv);
	}

	c = document.getElementById("queryinput");
	var queryString;
	queryString = c.value + " " + document.reSearch.reSearchText.value;

// append the 'clquery'
	c = document.getElementById("clquery");
	c.value = queryString;

//	alert(c.value);	
//	document.reSearch.submit();
}


// below are the functions called to set the cookies 
/* @getNumberValue: 
*/
function getNumberValue(cookieStr, name){
	cookieStr = removeBlanks (cookieStr);
	var pairs = cookieStr.split(";");
	for (var idx = 0 ; idx < pairs.length ; idx ++){
		var pair = pairs[idx].split("=");
		if ( pair[0] == name) {
			if ( pair.length > 1 ) {
				return parseInt (pair[1]);
			} else {
				return  0;
			}
		}
	}
	return 0;
}

/* @removeBlanks: 
*/
function removeBlanks (s) {
	var temp = "";
	for ( var i = 0 ; i < s.length; ++i ) {
		var c = s.charAt(i);
		if (c!=" ") temp +=c;
	}
	return temp;
}

/* @createCookie: 
*/
function createCookie(name,value,days)
{
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	var ck = name+"="+value+expires+"; path=/";
	
	document.cookie = ck;
}

/* @setSearchFormCheckBox: 
*/

function setSearchFormCheckBox () {

	var cookieStr = document.cookie;
//	alert (cookieStr);
	var count = 0 ;	
	if ( getNumberValue(cookieStr, 'sdis') == 1){		
		document.search.cbdis.checked=true;
		count++;
	} 
	if ( getNumberValue(cookieStr, 'smod') == 1){		
		document.search.cbmod.checked=true;
		count++;
	} 
	if ( getNumberValue(cookieStr, 'smin') == 1){
		document.search.cbmin.checked=true;
		count++;	
	}
	if ( getNumberValue(cookieStr, 'sanc') == 1){
		document.search.cbanc.checked=true;
		count++;
	}
	if ( getNumberValue(cookieStr, 'sjou') == 1){
		document.search.cbjou.checked=true;
		count++;
	}
	if ( getNumberValue(cookieStr, 'spai') == 1){
		document.search.cbpai.checked=true;
		count++;
	}
	if ( getNumberValue(cookieStr, 'svid') == 1){
		document.search.cbvid.checked=true;
		count++;
	}
	if ( getNumberValue(cookieStr, 'sfig') == 1){
		document.search.cbfig.checked=true;
		count++;
	}
	
	if ( 0 == count ){
		document.search.cbanc.checked=true;
		document.search.cbmin.checked=true;
		createCookie ("sanc","1",7);
		createCookie ("smin","1",7);
	}
}

/* @indexCheckInput: check the input field of the search
*/
function indexCheckInput(){
	if(document.search.query.value == ''){
		alert("Please input the keyword you want to search.");
		return false;
	}
	document.search.submit();
}

function indexEngCheckInput(){
	if(document.search.query.value == ''){
		alert("please input query!");
		return false;
	}
	document.search.submit();
}


/* @classifiedBrowser: browse the books in their classified order
*/
function classifiedBrowse(){
	document.search.query.value = "";	
	document.search.submit();

}


/* @resultCheckInput: check the input field of the search
*/
function advancedInputCheck(form){
//	alert("1");
	var divV;
	var divToSet;
	var flag = 0;
	for( divV = 1; divV <5; divV++){
		divToSet = document.getElementById(form.name+divV);
//		alert("divToSet:"+divToSet.nodeName);
		if(divToSet.value!="")
			flag = 1;
	}
//	alert("2");
	if(flag == 0 ){
		alert("Please input the keyword you want to search.");
		return false;
	}
	form.submit();
}

function loginCheckInput(){
	if(document.Reg.emailAddress.value == ''){
		alert("Please type in your username");
		return false;
	}
	if(document.Reg.password.value == ""){
		alert("Please type in your password");
		return false;
	}
	document.Reg.submit();

}


// end of this 

// for check validation
function checkPageNo(number){	
	if(!isInt(number, "+", " " , "Page number must be positive")){	
		return false;
	}
	if(number.length > 7){
		alert("Page number is too big.");
		return false;
	}	
	return true;
}

/*
==================================================================
??????????
????????????????????????????
==================================================================
*/
function IfShow(ShowMsg)
{
if (ShowMsg == "" )
{
return false;
}
else
{
return true;
}

}



/*
==================================================================
????????????????????????????????????????????+0????????+0
??????????????????????????????????????????????
??????isInt(obj,string,int or string,string)
(????????,+ or - or empty,empty or 0,????????)
?? ????
+ ??????
- ??????
??????bool
==================================================================
*/
function isInt(obj,sign,zero,ShowMsg)
{
var show = IfShow(ShowMsg);

var objStr = obj.value;

var reg; 
var bolzero; 

if(Trim(objStr)=="")
{ 
if (show) alert(ShowMsg);
obj.focus();
obj.select();
return false;
}
else
{
objStr=objStr.toString();
} 

if((sign==null)||(Trim(sign)==""))
{
sign="+-";
}

if((zero==null)||(Trim(zero)==""))
{
bolzero=false;
}
else
{
zero=zero.toString();
if(zero==0)
{
bolzero=true;
}
else
{
if (show) alert(ShowMsg);
obj.focus();
obj.select();
return false;
}
}

switch(sign)
{
case "+-":
//????
reg=/(^-?|^\+?)\d+$/; 
break;
case "+": 
if(!bolzero) 
{
//??????
reg=/^\+?[0-9]*[1-9][0-9]*$/;
}
else
{
//??????+0
//reg=/^\+?\d+$/;
reg=/^\+?[0-9]*[0-9][0-9]*$/;
}
break;
case "-":
if(!bolzero)
{
//??????
reg=/^-[0-9]*[1-9][0-9]*$/;
}
else
{
//??????+0
//reg=/^-\d+$/;
reg=/^-[0-9]*[0-9][0-9]*$/;
} 
break;
default:
if (show) alert(ShowMsg);
obj.focus();
obj.select();
return false;
break;
}

var r=objStr.match(reg);
if(r==null)
{
if (show) alert(ShowMsg);
obj.focus();
obj.select();
return false;
}
else
{ 
return true; 
}
}


/*
==================================================================
????????????????,????????????????????
??????Trim(string)
??????string
==================================================================
*/ 
/*
==================================================================
????????????????????
??????LTrim(string)
??????string
==================================================================
*/
function LTrim(str)
{
var whitespace = new String(" \t\n\r");
var s = new String(str);

if (whitespace.indexOf(s.charAt(0)) != -1)
{
var j=0, i = s.length;
while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
{
j++;
}
s = s.substring(j, i);
}
return s;
}

/*
==================================================================
????????????????????
??????RTrim(string)
??????string
==================================================================
*/
function RTrim(str)
{
var whitespace = new String(" \t\n\r");
var s = new String(str);

if (whitespace.indexOf(s.charAt(s.length-1)) != -1)
{
var i = s.length - 1;
while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
{
i--;
}
s = s.substring(0, i+1);
}
return s;
}

//???????????? 
function Trim(str)
{
return RTrim(LTrim(str));
} 


// translation

function translate () {
	var checkbox = document.forms['search'].targetLanguage;
	var targetLanguage = checkbox.options[checkbox.selectedIndex].value;
	//alert (targetLanguage);
	if (!targetLanguage) return;
	if (targetLanguage == 'input') return ;
	
	var text = document.forms['search'].query; 
	var origText = text.value;
	//alert (origText);
	var transResult = "";
	if (targetLanguage == 'tw') {
		transResult = s2t (origText);
	}else if (targetLanguage == 'cn') {
		transResult = t2s (origText);
	}else {
		return ;
	}
	
	//alert (transResult);
	
	document.forms['search'].query.value = transResult;
}


function djvuControl (html) {
	document.getElementById("bookBody").innerHTML = html;
}


function DrawImage(ImgD,FitWidth,FitHeight){
	var image=new Image();
	image.src=ImgD.src;
	if(image.width>0 && image.height>0){
		if(image.width/image.height>= FitWidth/FitHeight){
			if(image.width>FitWidth){
				ImgD.width=FitWidth;
				ImgD.height=(image.height*FitWidth)/image.width;
			}else{
				ImgD.width=image.width;
				ImgD.height=image.height;
			}
		} else{
			if(image.height>FitHeight){
				ImgD.height=FitHeight;
				ImgD.width=(image.width*FitHeight)/image.height;
			}else{
				ImgD.width=image.width;
				ImgD.height=image.height;
			}
		}
	}
}



function displayImage (id, path) {
		// replace img element
		//alert("id: "+id+" path: "+path);
		var imgDiv = document.getElementById ("imageFile");
		var imgElement = document.createElement("img");
		imgElement.setAttribute("src", path);
		imgElement.setAttribute("width",  '100');
		imgElement.setAttribute("height", '100');
		imgElement.setAttribute("onLoad", 'javascript:DrawImage(this,100,100);');

		var imgElements = imgDiv.getElementsByTagName("img");
		for (var i =0; i < imgElements.length; i++){
			var imgElem = imgElements[i];
			imgDiv.removeChild(imgElem);
		} 
	
		imgDiv.appendChild(imgElement);
		
		// update ruleId hidden form field
		var ruleIdInputElement = document.getElementById("imageRuleId");
		ruleIdInputElement.setAttribute ("value", id);

}

function selectImage (ruleId) {
	var ruleIdInputElement = document.getElementById("imageRuleId");
	var lastRuleId = ruleIdInputElement.value;

	if (lastRuleId != 0) {
		var lastImgDiv = document.getElementById ("image_"+lastRuleId);
		lastImgDiv.style.border = "#ccc 2px solid";
	}
			
	var imgDiv =document.getElementById("image_"+ruleId);
	imgDiv.style.border = "#056FFF 2px solid";
	
	// update ruleId hidden form field
	ruleIdInputElement.setAttribute ("value", ruleId);
}

function selectCalligraphy (ruleId) {
	var ruleIdInputElement = document.getElementById("calligraphyRuleId");
	var lastRuleId = ruleIdInputElement.value;

	//alert (lastRuleId);
	if (lastRuleId != 0) {
		var lastImgDiv = document.getElementById("calligraphy_"+lastRuleId);
		lastImgDiv.style.border = "#ccc 2px solid";
	}
	var imgDiv = document.getElementById("calligraphy_"+ruleId);
	imgDiv.style.border = "#056FFF 2px solid";
	
	// update ruleId hidden form field
	ruleIdInputElement.setAttribute ("value", ruleId);
//	alert(lastRuleId+" "+ruleId);
}

function displayCalligraphy (id, path) {

		// replace img element
		var calligraphyDiv = document.getElementById ("calligraphyFile");
		var imgElement = document.createElement("img");
		imgElement.setAttribute("src", path);
		imgElement.setAttribute("width",  '50');
		imgElement.setAttribute("height", '50');
		imgElement.setAttribute("onLoad", 'javascript:DrawImage(this,50,50);');
	
		var imgElements = calligraphyDiv.getElementsByTagName("img");
		for (var i =0; i < imgElements.length; i++){
			var imgElem = imgElements[i];
			calligraphyDiv.removeChild(imgElem);
		} 
		calligraphyDiv.appendChild(imgElement);
		
		// update ruleId hidden form field
		var ruleIdInputElement = document.getElementById("calligraphyRuleId");
		ruleIdInputElement.setAttribute ("value", id);
}


