/***
This is the javascript to run the Refbooks page/app on the DowMRC website in K-State Libraries. It was written by scratch by Kevin Champion kjc6688@gw.ksu.edu over the course of a year.
Please excuse the code messiness, cleanup is in the works. If you would like to use all or part of this, please let me know.
***/

var Refbooks = new Object();

Refbooks.headingdiv = document.getElementById('Heading');
Refbooks.navdivtop = document.getElementById('NavigationTop');
Refbooks.navdivbot = document.getElementById('NavigationBottom');
Refbooks.booksdiv = document.getElementById('Books');
Refbooks.tagsdiv = document.getElementById('Tags');
Refbooks.popbooks = document.getElementById('popbooks');
Refbooks.disptagall = new Object();
Refbooks.disptagmid = new Object();
Refbooks.disptagcur = new Object();
Refbooks.displayTagsToggle = "cloud";
Refbooks.disp = '';
Refbooks.crumbs = '';
Refbooks.covercounter = 0;
Refbooks.disparray= [];
Refbooks.tagselect=[];
Refbooks.calls=[];
Refbooks.toggletagset="loclib";
Refbooks.labelortag = 'Tags';
Refbooks.frumcrumby=0;
Refbooks.openformsonce = 0;
var faceboxCloneToggle = 0;
Refbooks.faceboxcopy = '';
Refbooks.stopcovers = 0;

Refbooks.InitLoad = function(x) {
	if (x == "loading"){
		$(document).ready(function(){
			$("#loadinggif").append("<img src=images/ajax-loader.gif />");
		});
	}
	if (x == "loaded"){
		$(document).ready(function(){
			$("#loadinggif").replaceWith("");
		});
	}
	
}

String.prototype.toTitleCase = function() { //helper prototype function to transform beginnings of words to upper case
	var str = this.toLowerCase(),
	newStr = '';
	for ( var i = 0, l = str.length; i < l; i++ ){
		newStr += ( i == 0 || str.charAt( i - 1 ) == ' ' || str.charAt( i - 1 ) == '/')?
		str.charAt( i ).toUpperCase():
		str.charAt( i );
	}
	return newStr;
}

// Basic DOM shortcut functions
	function getEl(x){return document.getElementById(x)}
	function ctn(x){ return document.createTextNode(x) }
	function cel(x){ return document.createElement(x) }
	function addEvent(obj,type,fn){
		if (obj.addEventListener){ obj.addEventListener(type,fn,false)}
		else if (obj.attachEvent){
			obj["e"+type+fn] = fn;
			obj.attachEvent("on"+type,function(){obj["e"+type+fn]();});
		}
	}

// JSON ScriptBuilder Function and Prototype, from Jason Levitt of Yahoo!
// code found here: http://devx.com/webdev/Article/30860/1954
	function JSONscriptRequest(fullUrl) {
	  this.fullUrl = fullUrl;
	  this.noCacheIE = '&noCacheIE=' + (new Date()).getTime();
	  this.headLoc = document.getElementsByTagName("head").item(0);
	  this.scriptId = 'azScriptId' + JSONscriptRequest.scriptCounter++;
	}
	JSONscriptRequest.scriptCounter = 1;
	JSONscriptRequest.prototype.buildScriptTag = function () {
	  this.scriptObj = document.createElement("script");
	  this.scriptObj.setAttribute("type", "text/javascript");
	  this.scriptObj.setAttribute("src", this.fullUrl + this.noCacheIE);
	  this.scriptObj.setAttribute("id", this.scriptId);
	}
	JSONscriptRequest.prototype.removeScriptTag = function () {
	  this.headLoc.removeChild(this.scriptObj);
	}
	JSONscriptRequest.prototype.addScriptTag = function () {
	  this.headLoc.appendChild(this.scriptObj);
	}

Refbooks.sabt = -1;
Refbooks.sabc = -1;
Refbooks.Sort = function (by,what){
	function sortByRandom(){
		return (Math.round(Math.random())-0.5);
	}	
	function sortByTitle(a,b){
		var x = a.Title;
    	var y = b.Title;
		if (Refbooks.sabt == 1){
    		return ((x < y) ? -1 : ((x > y) ? 1 : 0));
		} else {
			return ((y < x) ? -1 : ((y > x) ? 1 : 0));
		}
	}
	function sortByPosted(a,b){
		var x = a.Posted_by;
    	var y = b.Posted_by;
		if (Refbooks.sabt == 1){
    		return ((x < y) ? -1 : ((x > y) ? 1 : 0));
		} else {
			return ((y < x) ? -1 : ((y > x) ? 1 : 0));
		}
	}
	function sortByCall(a,b){
		var one = a.Call_Number.replace(/\s/g,""); //replaces whitespace caused by inconsistent db entries
 		var two = b.Call_Number.replace(/\s/g,"");//replaces whitespace caused by inconsistent db entries
		var x = one.substring(0,one.search(/\d+/)); //extracts first letter characters
		var xrem = one.replace(one.substring(0,one.search(/\d+/)),"");
    	var y = two.substring(0,two.search(/\d+/)); //extracts first letter characters
		var yrem = two.replace(two.substring(0,two.search(/\d+/)),"");
		if (x == y){ 
			if (one.substring(one.indexOf(".")+1,(one.indexOf(".")+2)).search(/\d+/) == 0){ //tests to see if the first character after the first decimal is letter or number
				x = Number(one.substring(one.search(/\d+/),one.indexOf(".")+(one.substr(one.indexOf(".")+1).search(/\./)+1))); //extracts number including decimal point
				xrem = xrem.replace(one.substring(one.search(/\d+/),one.indexOf(".")+(one.substr(one.indexOf(".")+1).search(/\./)+1)),"").replace(/\./g,"");
			} else {
				x = Number(one.substring(one.search(/\d+/),one.indexOf("."))); //extracts just the number
				xrem = xrem.replace(one.substring(one.search(/\d+/),one.indexOf("."))+".","");
			}
			if (two.substring(two.indexOf(".")+1,(two.indexOf(".")+2)).search(/\d+/) == 0){ //tests to see if the first character after the first decimal is letter or number
				y = Number(two.substring(two.search(/\d+/),two.indexOf(".")+(two.substr(two.indexOf(".")+1).search(/\./)+1))); //extracts number including decimal point
				yrem = yrem.replace(two.substring(two.search(/\d+/),two.indexOf(".")+(two.substr(two.indexOf(".")+1).search(/\./)+1)),"").replace(/\./g,"");
			} else {
    			y = Number(two.substring(two.search(/\d+/),two.indexOf("."))); //extracts just the number
				yrem = yrem.replace(two.substring(two.search(/\d+/),two.indexOf("."))+".","");
			}
			if (x == y){
				/*if (xrem.search(/[0-9][a-zA-Z][0-9]/) != -1){ //checks to see if there are more than one letter chars left in the call number
					x = xrem.substring(0,xrem.search(/[0-9][a-zA-Z][0-9]/)+1); //extracts first letter char set left
					xrem = xrem.replace(x,""); //creates remaining call number by removing extraction
				} else if (xrem.length > 4){ //checks the size of the remaining call number, if > 4 it's probable the number has a pub year in it
					xtemp = xrem.substring(0,xrem.length-3); //removes the last 4 chars, the pub year of the call number
					x = xrem.replace(xtemp,""); //extracts part of call number excluding the pub year
					xrem = xtemp; //sets the remaining call number as the pub year
				} else { //if the remaining call number does not have two letter chars, and is less than 5 chars in length, it has no pub year and is set to be compared 
					x = xrem;
				}
				if (yrem.search(/[0-9][a-zA-Z][0-9]/) != -1){ //checks to see if there are more than one letter chars left in the call number
					y = yrem.substring(0,yrem.search(/[0-9][a-zA-Z][0-9]/)+1); //extracts first letter char set left
					yrem = yrem.replace(y,""); //creates remaining call number by removing extraction
				} else if (yrem.length > 4){ //checks the size of the remaining call number, if > 4 it's probable the number has a pub year in it
					ytemp = yrem.substring(0,yrem.length-3); //removes the last 4 chars, the pub year of the call number
					y = yrem.replace(ytemp,""); //extracts part of call number excluding the pub year
					yrem = ytemp; //sets the remaining call number as the pub year
				} else {  //if the remaining call number does not have two letter chars, and is less than 5 chars in length, it has no pub year and is set to be compared
					y = yrem;
				}*/
				
				if (xrem.search(/[a-zA-Z][0-9][0-9]/) == 0){
					x = xrem.substring(0,3);
					xrem = xrem.replace(x,"");
				} else if (xrem.search(/[a-zA-Z][0-9][0-9][0-9]/) == 0){
					x = xrem.substring(0,4);
					xrem = xrem.replace(x,"");
				} else {
					x = xrem.substring(0,2);
					xrem = xrem.replace(x,"");
				}
				if (yrem.search(/[a-zA-Z][0-9][0-9]/) == 0){
					y = yrem.substring(0,3);
					yrem = yrem.replace(y,"");
				} else if (yrem.search(/[a-zA-Z][0-9][0-9][0-9]/) == 0){
					y = yrem.substring(0,4);
					yrem = yrem.replace(y,"");
				} else {
					y = yrem.substring(0,2);
					yrem = yrem.replace(y,"");
				}
				if (x == y) {
					x = xrem;
					y = yrem;
				}
			}
		} 
		if (Refbooks.sabc == 1){
			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
		} else {
			return ((y < x) ? -1 : ((y > x) ? 1 : 0));
		}		
	}
	
	if (by == "sortByRandom"){
		return what.sort(sortByRandom);
	}
	if (by == "sortByTitle"){
		if (Refbooks.sabt == 1){	Refbooks.sabt = -1;	} else {	Refbooks.sabt = 1;	}
		return what.sort(sortByTitle);
	}
	if (by == "sortByCall"){
		if (Refbooks.sabc == 1){	Refbooks.sabc = -1;	} else {	Refbooks.sabc = 1;	}
		return what.sort(sortByPosted);
	}
	
	//alert(Refbooks.zohoData[0].Title+' '+Refbooks.zohoData[0].Tags);
	//Refbooks.crumby(where);
}

Refbooks.zohoData = fullfeed;

Refbooks.parseZohoData = function (){
	Refbooks.wholefeed= [];
	Refbooks.tags= [];
		Refbooks.tags.user= [];
		Refbooks.tags.loclib= [];
		Refbooks.tags.loclibuser= [];
	for (var j=0; j < Refbooks.zohoData.length; j++){
		var wholearray=Refbooks.zohoData[j];
		//wholearray.Tags = wholearray.Tags.toTitleCase(); //transform the beginnings of words to upper case
		if (zohoLabelsSingleLineOrMultiSelect == "single"){ //defined in html file
			wholearray.Tags_Keywords = wholearray.Tags_Keywords.replace(";",","); //replace ";" with "," for proper delimiting
			wholearray.Tags_Keywords = wholearray.Tags_Keywords.toLowerCase();
			wholearray.Tags_Keywords = wholearray.Tags_Keywords.split(","); //split string into array of tags
		}
		var tagholder = [];
		for (var i=0; i < wholearray.Tags_Keywords.length; i++){
			if (wholearray.Tags_Keywords[i] != " " && wholearray.Tags_Keywords[i] != ""){
				tagholder.push(wholearray.Tags_Keywords[i].replace(/^\s+|\s+$/g,"").replace(/ and /g,"-")); //remove whitespace at beginning and end of tag, replace " and " with "-"
			}
		}
		if (wholearray.LoC_Tags){
			if (wholearray.LoC_Tags != ""){
				var loctags = wholearray.LoC_Tags.split(","); //split loc tags processed on server side
				for (var i=0; i < loctags.length; i++){	//test for duplicate tags before integrating loctags with tags
					var tagtester = 0;
					for (var h=0; h < tagholder.length; h++){
						if (loctags[i] == tagholder[h]){
							tagtester = 1;
						}
					}
					if (tagtester == 0){
						tagholder.push(loctags[i]);
					}
				}
			}
		}
		wholearray.Tags_Keywords = tagholder;
		Refbooks.tags.push(tagholder); 
		Refbooks.wholefeed.push(Refbooks.zohoData[j]);
	}
	
	for (var j=0; j < Refbooks.wholefeed.length; j++){
		if (Refbooks.wholefeed[j].User_Tags && Refbooks.wholefeed[j].User_Tags != ""){
			var comma = Refbooks.wholefeed[j].User_Tags.lastIndexOf(",");
			if (comma != -1){
				Refbooks.tags[j].user = Refbooks.wholefeed[j].User_Tags.toLowerCase().split(',');
				Refbooks.wholefeed[j].User_Tags = Refbooks.wholefeed[j].User_Tags.toLowerCase().split(',');
			} else {
				Refbooks.tags[j].user = [];
				Refbooks.tags[j].user.push(Refbooks.wholefeed[j].User_Tags.toLowerCase());
				Refbooks.wholefeed[j].User_Tags = Refbooks.wholefeed[j].User_Tags.toLowerCase();
			}
		} else {
			Refbooks.tags[j].user = [];	
		}
		if (Refbooks.tags[j].user == null){
			Refbooks.tags.user[j] = [];
			Refbooks.tags.loclibuser.push(Refbooks.tags[j]);
			Refbooks.wholefeed[j].All_Tags = Refbooks.wholefeed[j].Tags_Keywords;
		} else {
			Refbooks.tags.user.push(Refbooks.tags[j].user);
			Refbooks.tags.loclibuser.push(Refbooks.tags[j].concat(Refbooks.tags[j].user));
			Refbooks.wholefeed[j].All_Tags = Refbooks.wholefeed[j].Tags_Keywords.concat(Refbooks.wholefeed[j].User_Tags);
		}
		/*if (Refbooks.callnumbers[j] != ""){
			for (var h=0; h < Refbooks.loc.abbrev.length; h++){
				if (Refbooks.callnumbers[j].substr(0,1) == Refbooks.loc.abbrev[h]){				
					Refbooks.tags.loc[j] = Refbooks.loc.name[h].split("/");
				}
				if (Refbooks.callnumbers[j].substr(0,2) == Refbooks.loc.abbrev[h]){
						Refbooks.tags.loc[j] += '>'+Refbooks.loc.name[h].split("/");
				}
				if (Refbooks.callnumbers[j].substr(0,1) == "P"){
					Refbooks.tags.loc[j] = Refbooks.loc.name[26].split("/");
				}
				if (Refbooks.callnumbers[j].substr(0,1) == "P" && Refbooks.callnumbers[j].substr(1,1)==Refbooks.loc.abbrev[h]){
						if (h<25){
							Refbooks.tags.loc[j] = Refbooks.loc.name[26].split("/");
						}
						if (h>=25) {
							Refbooks.tags.loc[j] = Refbooks.loc.name[27].split("/");
						}
						break;
				}				
				if (Refbooks.callnumbers[j].substr(0,1) == "B"){
					Refbooks.tags.loc[j] = Refbooks.loc.name[1].split("/");	
				}
				if (Refbooks.callnumbers[j].substr(0,1) == "G"){
					Refbooks.tags.loc[j] = Refbooks.loc.name[13].split("/");
				}
				if ((Refbooks.callnumbers[j].substr(0,1) == "G" || Refbooks.callnumbers[j].substr(0,1) == "B") && Refbooks.callnumbers[j].substr(0,2) == Refbooks.loc.abbrev[h]){
						Refbooks.tags.loc[j] = Refbooks.loc.name[h].split("/");
						break;
				}				
			}
		} else {
			Refbooks.tags.loc[j] = [];
		}*/
		Refbooks.tags.loclib.push(Refbooks.tags[j]);//.concat(Refbooks.tags.loc[j]));
	}
	//Refbooks.Sort("sortByCall",Refbooks.wholefeed);
	$(document).ready(function(){
		Refbooks.buildAllTagCloud();
		Refbooks.loadFeed();
	});
}

Refbooks.buildAllTagCloud = function (by){
	if (by == "user"){
		Refbooks.loadTagCloud(Refbooks.tags.user,"all");
	} else if (by == "loclibuser"){
		Refbooks.loadTagCloud(Refbooks.tags.loclibuser,"all");
	} else {
		Refbooks.loadTagCloud(Refbooks.tags.loclib,"all");
	}	
}

Refbooks.changeTags = function (z){
	Refbooks.toggletagset = z;
	call = Refbooks.calls[0];
	//alert(call.m + ',' +call.y + ',' +call.t + ',' + call.tsc);
	//Refbooks.crumby(Refbooks.calls.length);
	if (Refbooks.toggletagset == "user"){
		Refbooks.labelortag = 'Tags';
	} else if (Refbooks.toggletagset == "loclibuser"){
		Refbooks.labelortag = 'Labels and Tags';
		call = Refbooks.calls[(Refbooks.calls.length-1)];
	} else {
		Refbooks.labelortag = 'Labels';
	}	
	Refbooks.buildAllTagCloud(z);
	Refbooks.loadFeed(call.t,call.tsc);
}

Refbooks.removeDuplicates = function (x) {
	var y = [];
	<!--        Script by hscripts.com          -->
<!--        copyright of HIOX INDIA         -->
<!-- Free javascripts @ http://www.hscripts.com -->
	var array2 = x;
	for(var i = 0; i < array2.length; i++){
		var xx = true;
		var ArrayVal = array2[i];
		for(var j = i+1; j < array2.length; j++){
			if(array2[j] == ArrayVal) {
				xx = false;
			}
		}       
		if(xx == true){
			y.push(ArrayVal)
		}
	}
	   <!-- Script by hscripts.com -->
	return y;
}

/*Refbooks.getCoverScript = function (isbn){
	  var feedurl = "http://books.google.com/books?jscmd=viewapi&bibkeys=ISBN:" + isbn + "&callback=Refbooks.getTheCover";
	  var script = document.createElement('script');
	  script.setAttribute('src', feedurl);
	  script.setAttribute('id', 'jsonScript');
	  script.setAttribute('type', 'text/javascript');
	  document.documentElement.firstChild.appendChild(script);
}*/

Refbooks.getBlankCoverCounter = function () {
		++Refbooks.covercounter;
		if (Refbooks.covercounter > 7) {	Refbooks.covercounter = 1;	}
		return Refbooks.covercounter;
	}

Refbooks.CoverTriage = function(isbn,x){
	if (isbn != ''){
		var amazon = 'http://xml-us.amznxslt.com/onca/xml?Service=AWSECommerceService&SubscriptionId=11GHCPB7ER90FJ31WZR2&AssociateTag=givlifmea-20&Operation=ItemLookup&Style=http://www.lib.k-state.edu/depts/dowmrc/jquery/ajsonSingleAsin.xsl&ContentType=text/javascript&IdType=ASIN&ItemId=' + isbn + '&ResponseGroup=Medium,ItemAttributes,OfferFull&CallBack=Refbooks.amzJSONCallback';
		aObj = new JSONscriptRequest(amazon);
		aObj.buildScriptTag();
		aObj.addScriptTag();
	}
		/*$.getJSON("http://books.google.com/books?jscmd=viewapi&bibkeys=ISBN:"+isbn+"&callback=?", function(json){
				Refbooks.getTheCover(json,x);
			});*/
	
	Refbooks.amzJSONCallback = function(tmpdata){
		var athumb = '';
		var athumbpop = '';
		var adesc = '';
		var alink = '';
		function build(thumb,thumbpop,link,desc){
			this.thumb = thumb;
			this.thumbpop = thumbpop;
			this.link = link;
			this.desc = desc;
		}
		if(tmpdata.Item){
			var tmpItem = tmpdata.Item;
			alink = tmpItem.url;
			cutstart = alink.search(/SubscriptionId/);
			cutstarttag = alink.search(/tag/);
			cutend = alink.indexOf("%26",cutstarttag);
			replacer = new RegExp (alink.substring(cutstart,cutend));
			alink = alink.replace(replacer,"");			
			athumb = tmpItem.thumburl;
			athumbpop = athumb.replace("SL75","SL175");
			if(tmpItem.desc){
			// RegEx used to strip out extraneous HTML and Entities in Description text
				tmpItem.desc = tmpItem.desc.replace(/<.*?>/gi,'');
				tmpItem.desc = tmpItem.desc.replace(/&.*?;/gi,' ');
				//if(tmpItem.desc.length>381){tmpItem.desc=tmpItem.desc.substr(0,380)+"..."}
				adesc = tmpItem.desc;
			}
			athumb = '<img src="' + athumb + '"/>';
			athumbpop = '<a href="' + alink + '" target="_blank"><img src="' + athumbpop + '" title="Links to Amazon" style="width:122px;height:175px;"></a>';
			for (var i = 0; i < Refbooks.isbn.length; i++){
				if (tmpItem.asin == Refbooks.isbn[i]){
					Refbooks.amazon[i] = new build(athumb,athumbpop,alink,adesc);
				}
			}
		}
		
	}
	Refbooks.getTheCover = function (z) {
		var gthumb = '';
		var gthumbpop = '';
		var glink = '';
		var gembed = '';
		var gprevlink = '';
		var lthumb = '';
		var lthumbpop = '';
		var x = ''
		var isbn = Refbooks.isbn[z];
		//alert(z + ' get');
		Refbooks.InitLoad("loading");
		var gbsnameA = new Array("No information", "Book info", "Partial view", "Full view");
		var testimg = document.getElementById("testimg");
		var bthumb = '<img src="images/book' + Refbooks.getBlankCoverCounter() + '.jpeg">';
		/*var testit = 'ISBN:'+isbn;
		if (booksInfo[testit] != undefined){
			for (i in booksInfo) {
				var book = booksInfo[i]; 
				var quality = 0;
				if(book.preview == "noview") { quality = 1; }
				if(book.preview == "partial") { quality = 2; }
				if(book.preview == "full")  { quality = 3; }
				var gisbn;
				if (book.bib_key.length == 13) {
					gisbn = book.bib_key;
				} else {
					gisbn = book.bib_key.toString().substr(5);
				}
				glink = book.info_url;
				gembed = book.embeddable;
				if (quality > 1) {
					gprevlink = book.preview_url;
				}
				/*else {
					Refbooks.gblink = 'https://catalog.lib.ksu.edu/cgi-bin/Pwebrecon.cgi?DB=local&SL=none&Search_Arg=' + isbn + '&SL=None&Search_Code=ISBL&CNT=50';
				}*//*
				if (book.thumbnail_url != undefined) {
					gthumbpop = book.thumbnail_url.replace("zoom=5","zoom=1");
					gthumb = '<img src="' + book.thumbnail_url + '"/>';
					gthumbpop = '<img src="' + gthumbpop + '"/>';
				} 
			}
			
			for (var i = 0; i < Refbooks.isbn.length; i++){
				if (gisbn == Refbooks.isbn[i] || isbn == Refbooks.isbn[i]){
					x = i;
				}
			}
		} else {*/
			x = z;
		//}
			var imgid = 'img' + x;
			/*var athumb = Refbooks.amazon[x].thumb;
			if (gthumb == ''){
				lthumb = '<img id="' + imgid + '" src="http://covers.librarything.com/devkey/7446d1d690412a060ea22f8cf79c95e9/small/isbn/' + isbn + '">';
				lthumbpop = '<img id="' + imgid + '" src="http://covers.librarything.com/devkey/7446d1d690412a060ea22f8cf79c95e9/large/isbn/' + isbn + '">';
				$(document).ready(function(){
					testimg.innerHTML = lthumb;	
				});
				$(document).ready(function(){
					var imgwidth = document.getElementById(imgid).width;
					if (imgwidth <= 1){
						lthumb = '';
					}
					testimg.innerHTML = '';
				});
			}*/
			//alert(x + ' ' +Refbooks.amazon[x].thumb);
			//alert(x+' - g' + gthumb+' - a' + athumb+' - l' + lthumb+' - b' + bthumb);
			var cover = '';
			var popcover = '';
			/*if (gthumb != ''){
				//alert("gthumb "+x);
				cover = gthumb;
				popcover = gthumbpop;
			} else if (athumb != '' && athumb != undefined && athumb != '<img src=""/>'){
				//alert("athumb "+x);
				cover = athumb;
				popcover = Refbooks.amazon[x].thumbpop;
			} else if (lthumb != ''){
				//alert("lthumb "+x);
				cover = lthumb;
				popcover = lthumbpop;
			} else {*/
				//alert("bthumb "+x);
				cover = bthumb;
				if (Refbooks.covertitles[x].indexOf(":") != -1){
					var imposed = Refbooks.covertitles[x].substring(0,Refbooks.covertitles[x].indexOf(":"));
				} else {
					var imposed = Refbooks.covertitles[x];
				}
				popcover = bthumb.replace("book","bigbook") + '<div style="z-index:1; width: 110px; margin:-130px 0 90px 0; padding:0 4px 0 4px; color:#FFF; text-align:center;">' + imposed + '</div>';
			//}	
		
		$(document).ready(function(){
			//var coverid = document.getElementById('cover' + x);
			//var popcoverid = document.getElementById('popcover' + x);
			//var popdesc = document.getElementById('desc' + x);
			//var gpreview = document.getElementById('preview' + x);
			var idholder = '#popbook' + x;
			Refbooks.coverID[x] = '<a class="dowmrc" href="javascript:jQuery.facebox({div: \''+idholder+'\'});" rel="facebox" title="' + Refbooks.covertitles[x] + '">' + cover + '</a>';
			//coverid.innerHTML = '<a class="dowmrc" href="javascript:jQuery.facebox({div: \''+idholder+'\'});" rel="facebox" title="' + Refbooks.covertitles[x] + '">' + cover + '</a>';
			var popdisp = popcover/* + '<br /><a href="' + Refbooks.link[x] + '" target="_blank" title="K-State Catalog Page">K-State Catalog</a>'*/;
			if (glink != ''){
				popdisp += '<br /><a href="' + glink + '" target="_blank" title="Google books page">Google Books</a>';
			}
			if (Refbooks.amazon[x].link.length > 1){
				popdisp += '<br /><a href="' + Refbooks.amazon[x].link + '" target="_blank" title="View on Amazon">Amazon</a>';
			}
			if (gprevlink != ''){
				if (gembed == true){
					popdisp += '<br /><a class="dowmrc" href=javascript:Refbooks.gViewer('+x+',\''+gprevlink+'\')><img src="images/gbs_preview_button1.gif"/></a>';
				} else {
					popdisp += '<br /><a class="dowmrc" href="' + gprevlink + '" target="_blank" title="Google books preview"><img src="images/gbs_preview_button1.gif"/></a>';
				}
			}
			Refbooks.popcoverID[x] = popdisp;
			//popcoverid.innerHTML = popdisp;	
			if (Refbooks.amazon[x].desc != undefined){
				if(Refbooks.amazon[x].desc.length > 0) {
					popdesc.innerHTML = '<br /><b>Description:</b> ' + Refbooks.amazon[x].desc;
				} else {
					if (Refbooks.annotation[x] != ""){
						popdesc.innerHTML = '<br /><b>Description:</b> ' + Refbooks.annotation[x];
					}
				}
			} else {
				if (Refbooks.annotation[x] != ""){
					Refbooks.popdescID[x] = '<br /><b>Description:</b> ' + Refbooks.annotation[x];
					//popdesc.innerHTML = '<br /><b>Description:</b> ' + Refbooks.annotation[x];
				}
			}
		});
		Refbooks.InitLoad("loaded");
	}
	Refbooks.getTheCover(x);
	Refbooks.gViewer = function(x,gprevlink){
		/*$(document).ready(function(){
			$(".tooggleme"+x).toggle();
		});*/
		//var viewercont = document.getElementById('preview' + x);
		function handleNotFound() {
			// Developer may want to hide the viewer div or present an error
			var viewerdiv = document.getElementById('gbs_preview' + x);
			var disp = '<div style="font-size:150%; text-align:center; padding-top:200px;">There was a problem loading this Google Books preview<br /><a href="javascript:jQuery.facebox({div: \'#popbook'+x+'\'});">back to description</a></div>';
			viewerdiv.innerHTML = disp;
		}
		function handleFound() {
			// Developer may want to hide the viewer div or present an error
			var viewerdiv = document.getElementById('gbs_preview' + x);
			//viewerdiv.innerHTML += '<div><br />test</div>';
		}
		var gviews = document.getElementById('gviews');
		var gviewdisp = '<div id="gbs_preview'+x+'" style="width: 800px; height: 500px; background-color: gray; display:none;">';
		gviews.innerHTML += gviewdisp;
		var viewerdiv = document.getElementById('gbs_preview' + x);
	  	//var testviewerdiv = document.getElementById('testgview');
		$(document).ready(function(){
			var viewer = new google.books.DefaultViewer(viewerdiv);
			viewer.load(gprevlink,handleNotFound);
			faceboxCloneToggle = 1;
			jQuery.facebox({div:'#gbs_preview'+x});
			faceboxCloneToggle = 0;
		});
    }
}
	
Refbooks.displayTags = function (x,z) {
		if (x == "cloud") {
			if (Refbooks.disptagcur.cloud == undefined){
				Refbooks.disptagcur.cloud = '';	
			}
			if (Refbooks.disptagcur.list == undefined){
				Refbooks.disptagcur.list = '';	
			}
			if (z == "default"){	//makes it so that "cur" tag cloud disappears when "all" tag cloud appears
				Refbooks.disptagcur.cloud = '';
				Refbooks.disptagcur.list = '';
			}
			/*if (z == undefined){	//makes it so that "all" tag cloud disappears when "cur" tag cloud appears
				Refbooks.disptagall.cloud = '';
				Refbooks.disptagall.list = '';
			}*/
			var display = '<span style="float:right">view as: <a class="bold" href=javascript:Refbooks.displayTags("cloud")>cloud</a> <a href=javascript:Refbooks.displayTags("list")>list</a></span>';
			display += '<div>' + Refbooks.disptagcur.cloud + '</div><div>' + Refbooks.disptagall.cloud + '</div>';
			Refbooks.tagsdiv.innerHTML = display;
			Refbooks.displayTagsToggle = "cloud";
		}
		if (x == "list") {
			var display = '<span style="float:right">view as: <a href=javascript:Refbooks.displayTags("cloud")>cloud</a> <a class="bold" href=javascript:Refbooks.displayTags("list")>list</a></span><div style="clear: both;"/>';
			display += '<div style="float:left; width:49%; margin-top:18px;">' + Refbooks.disptagcur.list + '</div><div style="float:left; width:49%;">' + Refbooks.disptagall.list + '</div>';
			Refbooks.tagsdiv.innerHTML = display;
			Refbooks.displayTagsToggle = "list";
		}
	}
Refbooks.getDist = function (freq) {
	var frequency = freq;
	var smallest = 1;
	var largest = 0;
	for(var d=0;d<frequency.length;d++){
	   largest=Math.max(largest,frequency[d]); //find largest
	   smallest=Math.min(smallest,frequency[d]);//find smallest
	}
	var diff = largest-smallest; //difference
	var dist = diff/8; //distribution where 8 is the number of tag classes chosen to be used
	return dist;
}
Refbooks.getCloudClass = function (dist,thistag) {
	var tagclass = 1
	if (thistag < (1+dist)) {	tagclass = 1;	}
		else if (thistag < (1+(dist*2))) {	tagclass = 2;	}
		else if (thistag < (1+(dist*3))) {	tagclass = 3;	}
		else if (thistag < (1+(dist*4))) {	tagclass = 4;	}
		else if (thistag < (1+(dist*5))) {	tagclass = 5;	}
		else if (thistag < (1+(dist*6))) {	tagclass = 6;	}
		else if (thistag < (1+(dist*7))) {	tagclass = 7;	}
		else if (thistag <= (1+(dist*8))) {	tagclass = 8;	}
	return tagclass;//returns the class an individual tag should have given a distribution
}
Refbooks.loadTagCloud = function (t,x) {
	var tagsy = t;
	var tagcloudbuild = [];
	var tagcloud = [];
	var tagcloudnum = [];
	var tagcloudnumber = 0;
	var dynnum = tagsy.length;
	Refbooks.InitLoad("loading");
	for(var i = 0; i < tagsy.length; i++) {
		for(var j = 0; j < tagsy[i].length; j++) {
			tagcloudbuild.push(tagsy[i][j]);
		}
	}
	tagcloud.push(tagcloudbuild[0]);
	for (var i = 0; i < tagcloudbuild.length; i++) {
		var jumper = 0;
		for (var j = 0; j < tagcloud.length; j++) {
			if (tagcloudbuild[i] == tagcloud[j]){
				jumper++;
			}
		}
		if (jumper < 1){
			tagcloud.push(tagcloudbuild[i]);
		}
	}
	//tagcloud = Refbooks.removeDuplicates(tagcloudbuild);
	tagcloud.sort();
	var disptagcloud = '<ul class="ultagclouds">';
	var disptaglist = '<ul class="ultaglists">';
	var tagselectcontroller;
	if (x=="monthcurrent"){ tagselectcontroller = null;} 
	if (x=="month"){ tagselectcontroller = 1;}
	if (x=="allcurrent"){ tagselectcontroller = 3;}
	if (x=="searchall"){ tagselectcontroller = 4;}
	if (x=="searchcurrent"){ tagselectcontroller = 5;}
	if (x=="all"){	tagselectcontroller = 2;	}
	for(var i = 0; i < tagcloud.length; i++) {
		for(var j = 0; j < tagcloudbuild.length; j++) {
			if (tagcloud[i] == tagcloudbuild[j]) {
				tagcloudnumber = tagcloudnumber + 1;
			}
		}
		tagcloudnum.push(tagcloudnumber);
		tagcloudnumber = 0;
	}		
	var dist = Refbooks.getDist(tagcloudnum);
	for(var i = 0; i < tagcloud.length; i++) {
		   var cloudclass = Refbooks.getCloudClass(dist,tagcloudnum[i]);
		   if (x == "searchcurrent" || x == "allcurrent"){
   			   disptagcloud += '<li class="litagclouds"><a href="javascript:Refbooks.loadFeed(\'' + tagcloud[i] + '\',\'' + tagselectcontroller + '\');" class="tag' + cloudclass + '"><span style="font-size:95%; margin-right:2px;">+</span>' + tagcloud[i] + ' ' + tagcloudnum[i] + '</a> </li>';
			   disptaglist += '<li><a href="javascript:Refbooks.loadFeed(\'' + tagcloud[i] + '\',\'' + tagselectcontroller + '\');">+ ' + tagcloud[i] + ' ' + tagcloudnum[i] + '</a> </li>';
		   } else {
			   disptagcloud += '<li class="litagclouds"><a href="javascript:Refbooks.loadFeed(\'' + tagcloud[i] + '\',\'' + tagselectcontroller + '\');" class="tag' + cloudclass + '">' + tagcloud[i] + ' ' + tagcloudnum[i] + '</a> </li>';
			   disptaglist += '<li><a href="javascript:Refbooks.loadFeed(\'' + tagcloud[i] + '\',\'' + tagselectcontroller + '\');">' + tagcloud[i] + ' ' + tagcloudnum[i] + '</a> </li>';
		   }
	   }
	   disptagcloud += '</ul>';
	   disptaglist += '</ul>';
	   if (x=="monthcurrent" || x=="allcurrent" || x=="searchcurrent"){
			var dispcurrent = '<b>' + Refbooks.labelortag + ' for the <span class="highlight">' + dynnum + '</span> ' + currentTagCloudTitle + '</b><br/>';
			//Refbooks.tagsdiv.innerHTML=dispcurrent.concat(disptagcloud);
			Refbooks.disptagcur.cloud = dispcurrent.concat(disptagcloud);
			Refbooks.disptagcur.list = dispcurrent.concat(disptaglist);
	   }
	   if (x=="month"){
			var dispmonth = '<br/><b>' + Refbooks.labelortag + ' for the <span class="highlight">' + dynnum + '</span> Books on Display</b><br/>';
			//tagsmonthdiv.innerHTML=dispmonth.concat(disptagcloud);
			Refbooks.disptagmid.cloud = dispmonth.concat(disptagcloud);
			Refbooks.disptagmid.list = dispmonth.concat(disptaglist);
	   }
	   if (x=="searchall"){
			var dispsearch = '<br/><b>' + Refbooks.labelortag + ' for the <span class="highlight">' + dynnum + '</span> Books found for search <span class="highlight">"' + Refbooks.query + '"</span></b><br/>';
			//tagsmonthdiv.innerHTML=dispsearch.concat(disptagcloud);
			Refbooks.disptagmid.cloud = dispsearch.concat(disptagcloud);
			Refbooks.disptagmid.list = dispsearch.concat(disptaglist);
	   }
	   if (x=="all"){
			var dispall = '<br/><b>' + Refbooks.labelortag + ' for all ' + dynnum + ' ' + tagCloudTitle +'</b><br/>';
			//tagsalldiv.innerHTML=dispall.concat(disptagcloud);
			Refbooks.disptagall.cloud = dispall.concat(disptagcloud);
			Refbooks.disptagall.list = dispall.concat(disptaglist);
		}
		Refbooks.InitLoad("loaded");
  }
Refbooks.fromPopbook = function(it,x,lort){
	if (lort == "label"){
		$(document).ready(function(){
			jQuery(document).trigger('close.facebox')
		});
		Refbooks.changeTags("loclibuser");
		Refbooks.loadFeed(it,x);
	}
	if (lort == "tag"){
		$(document).ready(function(){
			jQuery(document).trigger('close.facebox')
		});
		Refbooks.changeTags("loclibuser");
		Refbooks.loadFeed(it,x);
	}
}
Refbooks.crumby = function(x){
	if (Refbooks.calls.length == x){
		//alert(x + ' ' + Refbooks.calls.toSource());
		var call = Refbooks.calls[x-1];
	} else {
		var call = Refbooks.calls[x];
	}
	//alert(call.m+','+call.y+','+call.t+','+call.tsc);
	Refbooks.frumcrumby = 1;
	if (Refbooks.calls.length > 2){		
		//alert(Refbooks.calls.length+' -- '+Refbooks.calls.toSource());
		Refbooks.calls.splice((x+1),1);
		//alert(Refbooks.calls.length+' -- '+Refbooks.calls.toSource());
		Refbooks.tagselect = [];
		//alert(Refbooks.tagselect.length+' -- '+Refbooks.tagselect.toSource());
		for (var j=1; j <= Refbooks.calls.length-1; j++){
			call = Refbooks.calls[j];
			//alert(j+' loop  --  '+call.m+','+call.y+','+call.t+','+call.tsc);
			Refbooks.loadFeed(call.t,call.tsc);
		}
		//alert(Refbooks.tagselect.length+' -- '+Refbooks.tagselect.toSource());		
	} else {
		Refbooks.calls.splice((x+1),1);
		//alert(call.m + ',' +call.y + ',' +call.t + ',' + call.tsc);
		Refbooks.loadFeed(call.t,call.tsc);
	}
	Refbooks.frumcrumby = 0;
//	if (x==0){	Refbooks.calls = [];	}
}

Refbooks.filterDisplay = function (filterwhat,by,filterarray,searcharray){
	var t = filterarray;
	var tagrg = [];
	//alert(by);
	for (var i=0; i < t.length; i++){
		var rg = new RegExp('^'+t[i]+'$|^'+t[i]+',|,'+t[i]+',|,'+t[i]+'$');
		tagrg.push(rg);
	}
	function filter(by){
		var returnfeed = [];
		for (var j=0; j < tofilter.length; j++){
			var v = 0;
			var z = [];
			
			if (filterwhat == "all"){
				tofilter[j].tagset = tofilter[j].Tags_Keywords;
				//tofilter[j].tagset.user = tofilter[j].User_Tags;
				//tofilter[j].tagset.loclib = Refbooks.tags.loclib[j];
				if (by == "loclib"){
					tagfind = tofilter[j].Tags_Keywords;
				}
				if (by == "user"){
					tagfind = tofilter[j].User_Tags;
				}
				if (by == "loclibuser"){
					tagfind = tofilter[j].All_Tags;
				}
			}
			if (filterwhat == "search"){
				tofilter[j].tagset = Refbooks.found[j].wfeed.All_Tags;
				tofilter[j].tagset.user = Refbooks.found[j].wfeed.User_Tags;
				tofilter[j].tagset.loclib = Refbooks.found[j].wfeed.Tags;
				if (by == "loclib"){
					tagfind = Refbooks.found[j].wfeed.Tags_Keywords;
				}
				if (by == "user"){
					tagfind = Refbooks.found[j].wfeed.User_Tags;
				}
				if (by == "loclibuser"){
					tagfind = Refbooks.found[j].wfeed.All_Tags;
				}
			}
			for (var h=0; h < tagrg.length; h++){
				//z.push(tagfind[j].toString().lastIndexOf(Refbooks.tagselect[h]));
				z.push(tagfind.toString().match(tagrg[h]));
				//alert(j+ ' -- ' +z+' -- '+tagfind[j]/*.toString().match(Refbooks.tagrg[h])*/+ ' -- ' + tagrg[h]);
			}
			for (var h=0; h < z.length; h++){
				//alert(z[h]+' z[h]');
				if (z[h]==null) {
					v=0;
					break;
				} else {
					v=1;
				}
			}
			//var v = z.toString().lastIndexOf(-1);
			if (v==1){
				v=0;
				returnfeed.push(tofilter[j]);
			}
		}
		//alert (returnfeed.length);
		return returnfeed;
	}
	if (filterwhat == "all"){
		var tofilter = Refbooks.wholefeed;
		return filter(by);
	}
	if (filterwhat == "search"){
		var tofilter = searcharray;
		return filter(by);
		/*var loclib = [];
		var loclibuser = [];
		var user = [];
		for (var j=0; j < Refbooks.found.length; j++){
			loclib.push(Refbooks.found[j].tagsloclib);
			loclibuser.push(Refbooks.found[j].tagsloclibuser);
			user.push(Refbooks.found[j].tagsuser);			
		}
		if (by == "loclib"){
			return filter(loclib);
		}
		if (by == "loclibuser"){
			return filter(loclibuser);
		}
		if (by == "user"){
			return filter(user);
		}	*/
	}	
}

Refbooks.loadFeed = function (t,tsc){
	Refbooks.disparray=[];
	Refbooks.disphundred=[];
	var variabletags=[];
	function crumbyCall (t,tsc) {
		this.t = t;
		this.tsc = tsc;
	}	
	if(Refbooks.frumcrumby == 0){
		if(t==null){	Refbooks.calls = [];	}
		if(t==null&&tsc==null){
			Refbooks.calls[Refbooks.calls.length] = new crumbyCall(null,1);
		} else if (t==null&&tsc==4) {
			Refbooks.calls[Refbooks.calls.length] = new crumbyCall(null,4);
		} else if ((t!=null&&tsc==1)&&(Refbooks.calls.length>1)) {
			for (var j=0; j < Refbooks.calls.length; j++){
				Refbooks.calls.pop();
			}
			Refbooks.calls[Refbooks.calls.length] = new crumbyCall(t,1);			
		} else if ((t!=null&&tsc==2)&&(Refbooks.calls.length>1)) {
			for (var j=0; j < Refbooks.calls.length; j++){
				Refbooks.calls.pop();
			}
			Refbooks.calls[Refbooks.calls.length] = new crumbyCall(t,2);
		} else if ((t!=null&&tsc==4)&&(Refbooks.calls.length>1)) {
			for (var j=0; j < Refbooks.calls.length; j++){
				Refbooks.calls.pop();
			}
			Refbooks.calls[Refbooks.calls.length] = new crumbyCall(t,4);
		} else {
			Refbooks.calls[Refbooks.calls.length] = new crumbyCall(t,tsc);
		}
	//alert(Refbooks.calls[xyz].m+','+Refbooks.calls[xyz].y+','+Refbooks.calls[xyz].t+','+Refbooks.calls[xyz].tsc + ' - ' + Refbooks.calls.length);
	}
	//this if set toggles the tagset used to browse books by label
	if (Refbooks.toggletagset == "user"){
		var tagset = Refbooks.tags.user;
		var tagfind = Refbooks.tags.user;
		var labelortag = 'tagged';
		Refbooks.labelortag = 'Tags';
	} else if (Refbooks.toggletagset == "loclibuser"){
		var tagset = Refbooks.tags.loclibuser;
		var tagfind = Refbooks.tags.loclibuser;
		var labelortag = 'labelled or tagged';
		Refbooks.labelortag = 'Labels and Tags';
	} else {
		var tagset = Refbooks.tags.loclib;
		var tagfind = Refbooks.tags.loclib;
		var labelortag = 'tagged';
		Refbooks.labelortag = 'Tags';
	}	
	if (tsc==1 || tsc ==2 || tsc==4){	Refbooks.tagselect = [];	}	//resets variables if the tag selection is not a faceted browse
	if (t!=null){		//builds a regular expression to search for tag matches in each book entry
		x = Refbooks.tagselect.toString().lastIndexOf(t);
		if (x==-1){	
			Refbooks.tagselect.push(t);	
			//rg = new RegExp('^'+t+'$|^'+t+',|,'+t+',|,'+t+'$');
			//Refbooks.tagrg.push(rg);
		}
	}
	//alert (Refbooks.tagselect+' --- '+Refbooks.tagrg);
	var tagz = [];
	function readyDisplay (f){
		var smarray=[];
		Refbooks.index=0;
		var i = 0;
		var dispnum=10;
		var dispnumnum=10;
		for (var j=0; j < f.length; j++){
			variabletags.push(f[j].tagset);
			if(i<dispnum){
				smarray.push(f[j]);
				i++;
				if(i==dispnum){
					Refbooks.disparray.push(smarray);
					dispnum += 10;
					smarray=[];
					if(Refbooks.disparray.length == dispnumnum){
						Refbooks.disphundred.push(Refbooks.disparray);
						dispnumnum += 10;
					}
				}
			}
		}
		Refbooks.disparray.push(smarray);
		Refbooks.disphundred.push(Refbooks.disparray);
	}
	
	if (tsc == 2 || tsc == 3) {			
		var filteredfeed = Refbooks.filterDisplay("all",Refbooks.toggletagset,Refbooks.tagselect); //send filterDisplay (what to filter, by what to filter, and an array filters), returns a filtered whole object
		var numbooks = filteredfeed.length; //get number of books after filter for labelling purposes
		readyDisplay(filteredfeed); //prepare the object for display via Refbooks.moreBooks
		Refbooks.moreBooks(0,2); //send object to display function
	} else if (tsc == 4 || tsc == 5) {
		var searchtagsuser = [];
		var searchtagsloclibuser = [];
		var searchtagsloclib = [];		
		for (var j=0; j < Refbooks.found.length; j++){
			searchtagsuser.push(Refbooks.found[j].wfeed.User_Tags);
			searchtagsloclibuser.push(Refbooks.found[j].wfeed.All_Tags);
			searchtagsloclib.push(Refbooks.found[j].wfeed.Tags_Keywords);
		}
		if (Refbooks.toggletagset == "user"){
			var tagset = searchtagsuser;
			var tagfind = searchtagsuser;
			var labelortag = 'tagged';
			Refbooks.labelortag = 'Tags';
		} else if (Refbooks.toggletagset == "loclibuser"){
			var tagset = searchtagsloclibuser;
			var tagfind = searchtagsloclibuser;
			var labelortag = 'labelled or tagged';
			Refbooks.labelortag = 'Labels and Tags';
		} else {
			var tagset = searchtagsloclib;
			var tagfind = searchtagsloclib;
			var labelortag = 'tagged';
			Refbooks.labelortag = 'Tags';
		}
		var searcharray = [];
		for (var j=0; j < Refbooks.found.length; j++){
			var newarray=Refbooks.found[j].wfeed;
			newarray.tagset = tagset[j];
			newarray.tagset.loclib = Refbooks.found[j].tagsloclib;
			//newarray.tagset.user = Refbooks.found[j].tagsuser;
			searcharray.push(newarray);
		}
		if (tsc == 4) {
			if (Refbooks.tagselect != ""){
				var filteredfeed = Refbooks.filterDisplay("search",Refbooks.toggletagset,Refbooks.tagselect,searcharray);
			} else {
				var filteredfeed = searcharray;
			}
			var numbooks = filteredfeed.length;
			readyDisplay(filteredfeed);
			Refbooks.moreBooks(0,4);
		}
		if (tsc == 5){
			var filteredfeed = Refbooks.filterDisplay("search",Refbooks.toggletagset,Refbooks.tagselect,searcharray); 
			var numbooks = filteredfeed.length;
			readyDisplay(filteredfeed);
			Refbooks.moreBooks(0,4);
		}
		
	} else {
		for (var j=0; j < Refbooks.wholefeed.length; j++){
			var newarray=Refbooks.wholefeed[j];
			newarray.tagset = tagset[j];
			newarray.tagset.loclib = Refbooks.tags.loclib[j];
			newarray.tagset.user = Refbooks.tags.user[j];
		}
		var filteredfeed = Refbooks.wholefeed;
		var numbooks = filteredfeed.length;
		/*function sortbyrandom (){
			return (Math.round(Math.random())-0.5);
		}
		Refbooks.wholefeed.sort(sortbyrandom);*/
		readyDisplay(Refbooks.wholefeed);
		Refbooks.moreBooks(0,2);
	}
	Refbooks.quickSort = function (by){
		Refbooks.disparray=[];
		Refbooks.disphundred=[];
		var variabletags=[];
		filteredfeed = Refbooks.Sort(by,filteredfeed);
		readyDisplay(filteredfeed);
		if (tsc == 2 || tsc == 3){
			Refbooks.moreBooks(0,2);
		} else if (tsc == 4){
			Refbooks.moreBooks(0,4);
		} else if (tsc == 5){
			Refbooks.moreBooks(0,4);
		} else {
			Refbooks.moreBooks(0,2);
		}
		$(document).ready(function(){
			if (by == "sortByTitle"){
				$("#sortByTitle").addClass("bold");
				$("#sortByCall").removeClass("bold");
				$("#sortByRandom").removeClass("bold");
			}
			if (by == "sortByCall"){
				$("#sortByCall").addClass("bold");
				$("#sortByTitle").removeClass("bold");
				$("#sortByRandom").removeClass("bold");
			}
			if (by == "sortByRandom"){
				$("#sortByRandom").addClass("bold");
				$("#sortByTitle").removeClass("bold");
				$("#sortByCall").removeClass("bold");
			}
		});
		/*$(document).ready(function(){
       		$("#sortByTitle").toggleClass("bold");
			$("#sortByCall").toggleClass("bold");
			$("#sortByRandom").toggleClass("bold");
		});*/
		//alert(tsc);
	}
	var disp='';
	if (Refbooks.toggletagset == "user"){
		var tagtogglehfrtml = '<span style="float:right;"></span>';
		var tagtogglehtml = '<span style="float:right;"></span>';
	} else {
		var tagtogglehtml = '<span style="float:right;"></span>';
	}
	var sorter = '<b>sort:</b> <span id="sortByTitle"><a href=javascript:Refbooks.quickSort("sortByTitle")>title</a></span> <span id="sortByCall" class="bold"><a href=javascript:Refbooks.quickSort("sortByCall")>posted by</a></span> <span id="sortByRandom"><a href=javascript:Refbooks.quickSort("sortByRandom")>random</a></span>';
	if (t!=null){
		if (tsc == 4 || tsc == 5) {
			var disp='<b><span class="highlight">' + numbooks + '</span> '+tagCloudTitle+' ' + labelortag + ' ';
			Refbooks.crumbs = tagtogglehtml + '<b>Crumbs... </b>"' + Refbooks.query + '" (<a href=javascript:Refbooks.loadFeed(null,null);>x</a>)<br /><ul style="margin:0; padding-left:15px; list-style-type:none;">';
			for (var h=0; h < Refbooks.tagselect.length; h++){
				Refbooks.crumbs += '<li>' + Refbooks.tagselect[h] + ' (<a href=javascript:Refbooks.crumby('+h+');>x</a>)</li>';
			}
			Refbooks.crumbs += '</ul><div style="clear:both"></div>';
		} else {
			var disp='<b><span class="highlight">' + numbooks + '</span> '+tagCloudTitle+' ' + labelortag + ' ';						
			if (tsc != 2 && tsc != 3){
				Refbooks.crumbs = tagtogglehtml + '<span><b>Crumbs... </b> > </span><br /><ul style="margin:0; padding-left:15px; list-style-type:none;">';
				for (var h=0; h < Refbooks.tagselect.length; h++){
					Refbooks.crumbs += '<li>' + Refbooks.tagselect[h] + ' (<a href=javascript:Refbooks.crumby('+h+');>x</a>)</li>';
				}
				Refbooks.crumbs += '</ul><div style="clear:both"></div>';
			}
			if (tsc == 2 || tsc == 3){
				Refbooks.crumbs = tagtogglehtml + '<b>Crumbs... </b><br /><ul style="margin:0; padding-left:15px; list-style-type:none;">';
				for (var h=0; h < Refbooks.tagselect.length; h++){
					Refbooks.crumbs += '<li>' + Refbooks.tagselect[h] + ' (<a href=javascript:Refbooks.crumby('+h+');>x</a>)</li>';
				}
				Refbooks.crumbs += '</ul><div style="clear:both"></div>';
			}
		}		
		if (Refbooks.tagselect.length == 1){	disp = disp + '<span class="highlight">' + Refbooks.tagselect[0] + '</span>';	}
		if (Refbooks.tagselect.length == 2){	disp = disp + '<span class="highlight">' + Refbooks.tagselect[0] + '</span> and <span class="highlight">' + Refbooks.tagselect[1] + '</span>';	}
		if (Refbooks.tagselect.length > 2){
			for (var h=0; h < Refbooks.tagselect.length-1; h++){
				disp = disp + '<span class="highlight">' + Refbooks.tagselect[h] + '</span>, ';
			}
			disp = disp + 'and <span class="highlight">' + Refbooks.tagselect[(Refbooks.tagselect.length-1)] + '</span>';
		}
		if (tsc == 2 || tsc == 3) {	
			disp = disp + '</b><br />' + sorter;
		} else if (tsc == 4 || tsc == 5){
			disp = disp + ' in search <span class="highlight">"' + Refbooks.query + '"</span></b><br />';
			disp = disp + Refbooks.mfresults;
			disp = disp + sorter;
		} else {	
			disp = disp + '<br />' + sorter;
		}
	} else if (tsc == 4) {
		var disp='<b>All <span class="highlight">' + numbooks + '</span> '+tagCloudTitle+' found for search <span class="highlight">"' + Refbooks.query + '"</span></b><br />';
		disp = disp + Refbooks.mfresults;
		disp = disp + sorter;
		Refbooks.crumbs = tagtogglehtml + '<span><b>Crumbs... </b>"' + Refbooks.query + '" (<a href=javascript:Refbooks.loadFeed(null,null);>x</a>)</span><div style="clear:both"></div>';
	} else {
		var disp='<b>All <span class="highlight">' + numbooks + '</span> '+mainTitle+'</b><br />' + sorter; 
		Refbooks.crumbs = tagtogglehtml + '<div style="clear:both"></div>';
	}
	if (tsc == 2 || tsc == 3) {	
		Refbooks.loadTagCloud (variabletags,'allcurrent');
	} else if (tsc == 4 || tsc == 5) {
		Refbooks.loadTagCloud (variabletags,'searchcurrent');
	} /*else {	
		Refbooks.loadTagCloud (variabletags,'monthcurrent');
	}
	if (tsc == 4 || tsc == 5) {
		Refbooks.loadTagCloud(tagz,'searchall');
	} else {
		Refbooks.loadTagCloud(tagz,'month');
	}*/
	Refbooks.headingdiv.innerHTML='';
	Refbooks.headingdiv.innerHTML=disp;
	document.getElementById('Crumbs').innerHTML = Refbooks.crumbs;
	if (tsc == null || tsc == 1){
		Refbooks.displayTags(Refbooks.displayTagsToggle,"default");
	} else {
		Refbooks.displayTags(Refbooks.displayTagsToggle);
	}
}



Refbooks.moreBooks = function (k,z){
	Refbooks.stopcovers = 1;
	var tsc = z;
	var dispbooks='';
	disppopbooks=[];
	var dispnav='';
	var range=k;
	var iterations = 0;
	Refbooks.covertitles = [];
	Refbooks.isbn = [];
	Refbooks.amazon = ['','','','','','','','','',''];
	Refbooks.link = ['','','','','','','','','',''];
	Refbooks.annotation = ['','','','','','','','','',''];
	Refbooks.coverID = [];
	Refbooks.popcoverID = [];
	Refbooks.popdescID = [];
	Refbooks.InitLoad("loading");
	if (Refbooks.disparray.length > 1){
		if (range>=1){
			dispnav += '<a class="dowmrc" href=javascript:Refbooks.moreBooks(' + (range-1) + ')><img src="images/arrowleft.gif" width="30" height="20" border="0" alt=""></a> ';
			if (range>=6 && Refbooks.disparray.length > 10){
				dispnav += '<span class="indexunselect"><a class="indexnums" href=javascript:Refbooks.moreBooks(0)>1</a></span> ';
				dispnav += '<span class="indexunselect">...</span> ';
			}
		}
		for (var j=1; j <= Refbooks.disparray.length; j++){
			if ((range+1) == j) {
				dispnav += '<span class="indexselect"><b>' + j + '</b></span> ';
			} else if ((range-5)<1){
				dispnav += '<span class="indexunselect"><a class="indexnums" href=javascript:Refbooks.moreBooks(' + (j-1) + ',' + tsc + ')>' + j + '</a></span> ';
				iterations++;
			} else if (range > (Refbooks.disparray.length - 9) && j > (Refbooks.disparray.length - 9)){
				dispnav += '<span class="indexunselect"><a class="indexnums" href=javascript:Refbooks.moreBooks(' + (j-1) + ',' + tsc + ')>' + j + '</a></span> ';
				iterations++;
			} else if (j > (range-5) && j < (range+6)){
				dispnav += '<span class="indexunselect"><a class="indexnums" href=javascript:Refbooks.moreBooks(' + (j-1) + ',' + tsc + ')>' + j + '</a></span> ';
				iterations++;
			} 
			if (iterations == 9){
				break;
			}
		}
		if ((range+1)<Refbooks.disparray.length){
			if (Refbooks.disparray.length > 10 && range <= (Refbooks.disparray.length - 6)){
				dispnav += '<span class="indexunselect">...</span> ';
				dispnav += '<span class="indexunselect"><a class="indexnums" href=javascript:Refbooks.moreBooks(' + (Refbooks.disparray.length-1) + ')>' + (Refbooks.disparray.length) + '</a></span> ';
			}
			dispnav += '<a class="dowmrc" href=javascript:Refbooks.moreBooks(' + (range+1) + ')><img src="images/arrowright.gif" width="30" height="20" border="0" alt=""></a> ';
		}
	}
	Refbooks.navdivtop.innerHTML='';
	Refbooks.navdivtop.innerHTML=dispnav;
	Refbooks.navdivbot.innerHTML='';
	Refbooks.navdivbot.innerHTML=dispnav;
	Refbooks.stopcovers = 0;
	for (var j=0; j< Refbooks.disparray[k].length; j++){
		var displabels='';
		var displabelspop='';
		var dispuser='';
		var dispuserpop='';
		var newarray=Refbooks.disparray[k][j];
		//alert(newarray.Summary_Abstract);
		/*
		Journal_Publisher
		Year_published
		Author_s_First_Name_and_middle_if_given
		Author_s_Last_Name
		Tags_Keywords
		URL
		Title
		Posted By
		*/
		var title=newarray.Title;
		var citation=newarray.Author_s_First_Name_and_middle_if_given + ' ' + newarray.Author_s_Last_Name;
		var link=newarray.URL;
		if (newarray.User_Tags){
			var user=newarray.User_Tags;
		}
		var loclib=newarray.Tags_Keywords;
		var published=newarray.Year_published + ' in ' + newarray.Journal_Publisher;
		var postedby=newarray.Posted_by;
		var annotation=newarray.Summary_Abstract;
		var callnumber = newarray.Call_Number;
		var isbn = '';
		Refbooks.covertitles[j] = title;
		Refbooks.link[j] = link;
		Refbooks.annotation[j] = annotation;
		Refbooks.isbn[j] = isbn;
		Refbooks.CoverTriage(isbn,j);
		var idholder = '#popbook'+j;
		if (loclib.length==0){displabels = "None";	displabelspop = "None";} else {
			for (var h=0; h< loclib.length-1; h++){
				displabels += '<a href="javascript:Refbooks.loadFeed(\'' + loclib[h] + '\',\'' + tsc + '\');">' + loclib[h] + '</a>, ';
				displabelspop += '<a href="javascript:Refbooks.fromPopbook(\'' + loclib[h] + '\',\'' + tsc + '\',\'label\');">' + loclib[h] + '</a>, ';
			}
			displabels += '<a href="javascript:Refbooks.loadFeed(\'' + loclib[loclib.length-1] + '\',\'' + tsc + '\');">' + loclib[loclib.length-1] + '</a>';
			displabelspop += '<a href="javascript:Refbooks.fromPopbook(\'' + loclib[loclib.length-1] + '\',\'' + tsc + '\',\'label\');">' + loclib[loclib.length-1] + '</a>';
		}
		if (user){
			if (user.length==0){
				dispuser = 'None (<a href="javascript:Refbooks.editLabels(\'' + idholder + '\',\'' + user + '\',\'' + isbn + '\');">add</a>)';
				dispuserpop = 'None';
			} else if (user.toString().lastIndexOf(",") == -1){
				dispuser += '<a href="javascript:Refbooks.loadFeed(\'' + user + '\',\'' + tsc + '\');">' + user + '</a> (<a href="javascript:Refbooks.editLabels(\'' + idholder + '\',\'' + user + '\',\'' + isbn + '\');">edit</a>)';
				dispuserpop += '<a href="javascript:Refbooks.fromPopbook(\'' + user + '\',\'' + tsc + '\',\'tag\');">' + user + '</a>';
			} else {
				for (var h=0; h< user.length-1; h++){
					dispuser += '<a href="javascript:Refbooks.loadFeed(\'' + user[h] + '\',\'' + tsc + '\');">' + user[h] + '</a>, ';
					dispuserpop += '<a href="javascript:Refbooks.fromPopbook(\'' + user[h] + '\',\'' + tsc + '\',\'tag\');">' + user[h] + '</a>, ';
				}
				dispuser += '<a href="javascript:Refbooks.loadFeed(\'' + user[user.length-1] + '\',\'' + tsc + '\');">' + user[user.length-1] + '</a> (<a href="javascript:Refbooks.editLabels(\'' + idholder + '\',\'' + user + '\',\'' + isbn + '\');">edit</a>)';
				dispuserpop += '<a href="javascript:Refbooks.fromPopbook(\'' + user[user.length-1] + '\',\'' + tsc + '\',\'tag\');">' + user[user.length-1] + '</a>';
			}
		}
		//if (Refbooks.toggletagset == 1 || Refbooks.toggletagset == 2 || Refbooks.toggletagset == 5){
			var edit =  '<span style="float:right; font-size:small;"><a id="edittags" href="javascript:Refbooks.editLabels(\'' + idholder + '\',\'' + user + '\',\'' + isbn + '\');">Edit Tags</a></span><div style="clear:both;"></div>';
		/*} else {
			var edit = "";
		}*/
		disppopbooks += '<div id="popbook'+j+'" style="width:800px; font-size:96%; line-height:150%; display:none;" ><table><tr><td id="popcover' + j + '" valign="top" style="vertical-align:top; background-color:#FFF; padding:5px;">'+ Refbooks.popcoverID[j] +'</td><td valign="top" style="background-color:#FFF; padding:5px; padding-left:20px;"><div id="info'+j+'" class="tooggleme'+j+'"><span class="booktitle">' + title + '</span></b><br />'+link+'<br /><div class="labels"><b>Author:</b> '+citation+'</div><div class="labels"><b>Published:</b> '+published+'</div><div class="labels"><b>Posted by:</b> '+postedby+'</div><div class="labels"><b>Tags:</b> ' + displabelspop + '</div><span id="desc'+j+'">'+Refbooks.popdescID[j]+'</span></div><div id="preview'+j+'" class="tooggleme'+j+'" style="width: 600px; height: 500px; background-color: gray; display:none;"></div></td></tr></table></div>';
		dispbooks=dispbooks + '<div id="cover' + j + '" style="float:left; width:60px; height:85px; margin:5px 0px 0px 0px; padding-top:2px;">'+Refbooks.coverID[j]+'</div><div class="bookinfo"><a class="booktitle" href="javascript:jQuery.facebox({div: \''+idholder+'\'});" rel="facebox">' + title + '</a></b><br /><div class="labels"><b>Tags:</b> ' + displabels + '</div></div><div style="clear: both;"></div>';
	}
	Refbooks.popbooks.innerHTML = '';
	Refbooks.popbooks.innerHTML = disppopbooks;
	Refbooks.booksdiv.innerHTML = '';
	Refbooks.booksdiv.innerHTML = dispbooks;
	Refbooks.InitLoad("loaded");
}
Refbooks.dosearch = function (form) {
	//hashListener.setHash('/search/');
	Refbooks.query = document.getElementById("searchTest").value;
	var query = Refbooks.query;
	query = query.toLowerCase();
	var common=[]; //array of common terms to remove from search queries
	common[0]="the";
	common[1]="in";
	common[2]="a";
	common[3]="and";
	common[4]="on";
	common[5]="of";
	common[6]="to";
	common[7]="from";
	common[8]="for";
	common[9]="my";
	common[10]="our";
	common[11]="i";
	common[12]="or";
	common[13]="as";
	query = query.replace(/^\s+|\s+$/g,''); //removes leading and trailing spaces in query string
	rg = new RegExp(/"/g);
	var qm =[];
	if (query.match(rg) != null){	qm = query.match(rg);	} //checks to see if search query has quotation marks in it
	var qmquery = [];
	if (qm.length == 2){ 
		start = query.indexOf('"');	
		end = query.lastIndexOf('"');
		qmquery[0] = query.substring(start+1,end); //creates array if query has quotation marks, to give delimiting behavior to quotes
		query = query.replace('"'+qmquery[0]+'"',""); //removes portion of query within quotes from query string
	}
	if (qm.length == 4){
		end = query.lastIndexOf('"');
		secend = query.lastIndexOf('"',end-1);
		thiend = query.lastIndexOf('"',secend-1);
		fouend = query.lastIndexOf('"',thiend-1);
		qmquery[0] = query.slice(fouend+1,thiend);
		qmquery[1] = query.slice(secend+1,end);
		alert(qmquery + ' - ' + query);
	}
	if (query != ""){
		//alert(query.length + ' - ' + query);
		query = query.replace(/[\,\.\?\!\"\+\;\:\&\(\)\,]/g, ''); //replaces various punctuation that may cause problems in string matching
		for (var i = 0; i < common.length; i++){ //cycles thru array of common words and removes them ex. "the" "it"
			rg = new RegExp(' ' + common[i] + ' ' ,"g");
			query = query.replace(rg,' ');
			rg = new RegExp('^'+common[i]+' ',"g");
			query = query.replace(rg,'');
			rg = new RegExp(' '+common[i]+'$',"g");
			query = query.replace(rg,'');
		}
		query = query.replace(/^\s+|\s+$/,''); //removes leading and trailing spaces in what's left of query string
		query = query.replace(/\s+/g,','); //replaces spaces with commas so that remaining query string can be more easily split into array (not necessary?)
		//alert (query);
		queries = query.split(",");
		queries = queries.concat(qmquery); //concatenates query array with array of queries put within quotation marks in the search box
	} else {
		queries = qmquery;
		//alert(queries.length + ' - ' + queries);
	}
	function xy (x,y){
		this.x = x;
		this.y = y;	
	}
	var queriesglobal = [];
	if (queries.length == 2){
		queriesglobal.push(queries[0]+" "+queries[1]);	
	}
	if (queries.length == 3){
		queriesglobal.push(queries[0]+" "+queries[2]);
		queriesglobal.push(queries[0]+" "+queries[1]);
		queriesglobal.push(queries[1]+" "+queries[2]);
		queriesglobal.push(queries[0]+" "+queries[1]+" "+queries[2]);
	}
	if (queries.length > 3){
		for (var i = 0; i < queries.length; i++){
			var pxy = [];
			for (var j = 0; j < queries.length; j++){
				pxy[j] = new xy(i,j);
			}
			for (var g = 0; g < pxy.length; g++){
				if(pxy[g].x != pxy[g].y){
					queriesglobal.push(queries[pxy[g].x]+" "+queries[pxy[g].y]);
				}
			}
		}		
	}
	for (var i = 0; i < queries.length; i++) {
		queriesglobal.push(queries[i]);	
	}
	if (query != ""){
		queriesglobal.push(query.toLowerCase());
	}
	//alert (queriesglobal.length + ' ' + queriesglobal);
	Refbooks.matchqueries = queriesglobal;
	Refbooks.getSearchResults("strict",queriesglobal);
}
Refbooks.getSearchResults = function (x,q){
	var qre = [];
	if (!q) {	q = Refbooks.matchqueries;	}
	if (x == "loose") {
		for (var i = 0; i < q.length; i++) {
			qre[i] = new RegExp(q[i],"g");
		}
		Refbooks.mfresults = '<a href=javascript:Refbooks.getSearchResults("strict")>fewer results...</a><br />';
	}
	if (x == "strict") {
		//alert(q.length);
		for (var i = 0; i < q.length; i++) {
			qre[i] = new RegExp('\\W'+q[i]+'\\W|^'+q[i]+'\\W|\\W'+q[i]+'$|^'+q[i]+'$',"g");
			//alert(qre[i]);
		}
		Refbooks.mfresults = '<a href=javascript:Refbooks.getSearchResults("loose")>more results...</a><br />';
	}
	var counter = 0;
	Refbooks.found=[];
	function searchResult (wfeed,occ,ttl,index) {
		this.wfeed = wfeed;
		this.occ = occ;
		this.ttl = ttl;
		//this.tagsuser = Refbooks.tags.user[index];
		this.tagsloclib = Refbooks.tags.loclib[index];
		//this.tagsloclibuser = Refbooks.tags.loclibuser[index];
	}
	
	for (var j=0; j < Refbooks.wholefeed.length; j++){
		var numocc = 0;		
		var tz = '';		
		t = Refbooks.wholefeed[j].Title.replace(/<\/?[^>]+(>|$)/g, "");
		t += ' ' + Refbooks.wholefeed[j].Summary_Abstract.replace(/<\/?[^>]+(>|$)/g, "");
		t += ' ' + Refbooks.tags[j].toString().replace(/<\/?[^>]+(>|$)/g, "");
		//t += ' ' + Refbooks.wholefeed[j].User_Tags.toString().replace(/<\/?[^>]+(>|$)/g, "");
		t += ' ' + Refbooks.wholefeed[j].Journal_Publisher;
		t += ' ' + Refbooks.wholefeed[j].Author_s_Last_Name;
		t += ' ' + Refbooks.wholefeed[j].Author_s_First_Name_and_middle_if_given;
		t += ' ' + Refbooks.wholefeed[j].Posted_by;
		t = t.toLowerCase();
//alert (t + " - what it's searching - entry" + j);
		for (var i = 0; i < qre.length; i++) {
			temptz = t.match(qre[i]);
			//alert (temptz + " - what t.match is returning - entry " + j + " - query " + i);
			if (temptz!=null) {	tz = tz + temptz + ',';	}
		}
		if (tz.length>0) {
			var tzarr = tz.split(",");
			//alert (tz + " tz - entry" + j);
			if (tz!=null) {	numocc = tzarr.length - 1;	}
			//alert (numocc + " numocc - entry" + j);
			Refbooks.found[counter] = new searchResult (Refbooks.wholefeed[j],numocc,Refbooks.wholefeed[j].Title,j);
			//alert (found[counter].toSource() + " found object - entry " + j);
			counter++;
		}
	}
	function sortbynumocc(a, b) { //function to sort an object and it's variables and properties by one set property
    		var x = a.occ;
    		var y = b.occ;
    		return ((y < x) ? -1 : ((y > x) ? 1 : 0));
		}
	Refbooks.found.sort(sortbynumocc);//sorts Refbooks.found by number of occurances
//	alert (Refbooks.found[0].tagsloclib + " - " + Refbooks.found.length);
		Refbooks.loadFeed(null,4);
}
Refbooks.ssbdt = 1; //sort search by date toggle
Refbooks.ssbtt = 1; //sort search by title toggle
Refbooks.sortSearch = function(by) {
		if (by=="date") {
			function sortbydte(a, b) {
				var x = a.dte;
				var y = b.dte;
				if (Refbooks.ssbdt==1) {
					return ((y < x) ? -1 : ((y > x) ? 1 : 0));
				}
				if (Refbooks.ssbdt==-1) {
					return ((x < y) ? -1 : ((x > y) ? 1 : 0));
				}
			}
			Refbooks.found.sort(sortbydte);
			Refbooks.loadFeed(null,4);
			if (Refbooks.ssbdt == 1){	Refbooks.ssbdt = -1;	} else {	Refbooks.ssbdt = 1;	}
		}
		if (by=="title") {
			function sortbyttl(a, b) {
				var x = a.ttl;
				var y = b.ttl;
				if (Refbooks.ssbtt == 1) {
					return ((x < y) ? -1 : ((x > y) ? 1 : 0));
				}
				if (Refbooks.ssbtt == -1) {
					return ((y < x) ? -1 : ((y > x) ? 1 : 0));
				}
			}
			Refbooks.found.sort(sortbyttl);
			Refbooks.loadFeed(null,4);
			if (Refbooks.ssbtt == 1){	Refbooks.ssbtt = -1;	} else {	Refbooks.ssbtt = 1;	}
		}
		if (by=="random") {
			function sortbyrandom(){
				return (Math.round(Math.random())-0.5);
			}
			Refbooks.found.sort(sortbyrandom);
			Refbooks.loadFeed(null,4);
		}
	}

/*Refbooks.directEdit = function (id,x,isbn) {
	$(document).ready(function(){
		//jQuery.facebox({div:id});
	});
	$(document).ready(function(){
		Refbooks.editLabels(id,x,isbn);	
	});
}*/

Refbooks.editLabels = function (id,x,isbn) {
	if (id == "remove"){
		$("#tabsEx1").remove();
	} else {
		$("#tabsEx1").remove();
		if ($("#tabsEx1").html() == null){
			var toadd = [];
			var possible = [];
			if (x.length > 0){	x = x.split(",");	}	
			for (var i = 0; i < Refbooks.tags.user.length; i++){
				if (Refbooks.tags.user[i] != ""){
					for (var j = 0; j < Refbooks.tags.user[i].length; j++){
						possible.push(Refbooks.tags.user[i][j]);
					}
				}
			}
			possible = Refbooks.removeDuplicates(possible);
			if (x.length > 0){
				for (var i = 0; i < possible.length; i++){
					for (var j = 0; j < x.length; j++){
						if (possible[i] == x[j]){
							possible.splice(i,1);	
						}
					}
				}
			}
			possible.sort();
			var disp = '<div class="edittoggle" id="tabsEx1" style="width:800px;"><ul style="height: 30px;"><li><a class="dowmrc" href="#fragment-1"><span>Add</span></a></li><li><a class="dowmrc" href="#fragment-2"><span>Create</span></a></li><li><a class="dowmrc" href="#fragment-3"><span>Remove</span></a></li><a class="dowmrc" href=javascript:Refbooks.editLabels("remove"); class="closeedit" style="float:right;"><span>Close Edit</span></a>'; 
			disp += '</ul><div id="fragments"><div id="fragment-1"><div style="float:right; width:60%;"><ul>';
			for(var i = 0; i < possible.length; i++) {
				disp += '<li class="block">' + possible[i] + '</li> ';
			}
			disp += '</ul></div><script src="http://creator.zoho.com/dowmrc/form/json/99/" type="text/javascript"></script><script>setFormId("99");</script><div style="float:left; width:40%;"><form user="dowmrc" linkid="99" nexturl="" onsubmit="setZohoId(99);Zoho.submit(this); return false;"><div class="drop"><span id="dragtoadd" style="margin:2px;"<b>Drag Tags Here to Add</b><br /><br /></span></div>';
			disp += '<input id="addin" type="hidden" name="Labels" value=""><input id="addin" type="hidden" name="ISBN" value="'+isbn+'"><input style="margin-top:5px; float:right;" type = "submit" value="Submit" class="submit-button"/></form></div><div style="clear: both;"/></div>';
			disp += '<div id="fragment-2"><script src="http://creator.zoho.com/dowmrc/form/json/106/" type="text/javascript"></script><script>setFormId("106");</script><form user="dowmrc" linkid="106" nexturl="" onsubmit="setZohoId(106);Zoho.submit(this); return false;"><label>ISBN:</label><input  type="text" size="8" name="ISBN" value="'+isbn+'"><br /><label>Tag/s:</label><input  type="text" size="8" name="Labels" value=""><br /><br /><input type = "submit" value="Submit" class="submit-button" style="margin-right:50px;"/></form><div style="clear: both;"/></div>';
			disp += '<div id="fragment-3"><script src="http://creator.zoho.com/dowmrc/form/json/107/" type="text/javascript"></script><script>setFormId("107");</script><form user="dowmrc" linkid="107" nexturl="" onsubmit="setZohoId(107);Zoho.submit(this); return false;"><input  type="hidden" name="ISBN" value="'+isbn+'"><label>Tags:</label>';
			if (x.length==0){
				var directions = 'There are no tags yet for this book';
			} else {
				for(var i = 0; i < x.length; i++) {
					disp += '<li class="block2">' + x[i] + '</li> ';
				}
				var directions = 'Drag tag here';
			}
			disp += '<br /><br /><label>Remove:</label><div class="drop2" style="height:20px;"><span id="removetag">'+directions+'</span></div><input id="removein" type="hidden" name="Tag" value=""><input type = "submit" value="Submit" class="submit-button" style="margin-right:50px;"/></form><div style="clear: both;"/></div>';
			disp += '</div></div>';
			Refbooks.faceboxcopy = '<div id="'+id.replace("#","")+'" style="width:800px; font-size:96%; line-height:150%; display:none;" >' + $(id).html() + '</div>';
			$(document).ready(function(){
				$(id).append(disp);
			});	
			$(document).ready(function(){
				$("#tabsEx1 > ul").tabs({ 
					selected: 0,
					fx: { 
						height: "toggle", 
						opacity: "toggle" 
					} 
				});	   
			});
			$(document).ready(function(){
				var browser = Refbooks.getBrowser();
				//if (browser != "ff3-"){	
					faceboxCloneToggle = 1;
					jQuery.facebox({div:id});
					faceboxCloneToggle = 0;
					$("#popbooks").append(Refbooks.faceboxcopy)
				//}
				$(".block").draggable();
				$(".block2").draggable({ 
					helper: "clone" ,
					cursor: "move"
				});
				$(".drop").droppable({
					accept: ".block",
					activeClass: 'droppable-active',
					hoverClass: 'droppable-hover',
					drop: function(ev, ui) {
						ui.draggable.fadeOut("fast");
						$("#dragtoadd").remove();
						$(this).append('<li class="licloud">'+ui.draggable.html()+' </li>');
						toadd.push(ui.draggable.html());
						$("#addin").replaceWith('<input id="addin" type="hidden" size="8" name="Labels" value="' + toadd.toString() + '">');
						}
					});
				$(".drop2").droppable({
					accept: ".block2",
					activeClass: 'droppable-active',
					hoverClass: 'droppable-hover',
					drop: function(ev, ui) {
						$("#removetag").replaceWith('<span id="removetag">'+ui.draggable.html()+'</span>');
						$("#removein").replaceWith('<input id="removein" type="hidden" name="Tag" value="' + ui.draggable.html() + '">');
					}
				});
			});
		}
	}
}

Refbooks.getBrowser = function () {
	var browser = "";
	var x=navigator.userAgent;
	x = x.split(" ");
	if(x[0] == "Mozilla/5.0"){
		var version = x[x.length-1].toString().split("/");
		if (version[0] == "Firefox"){
			if (version[1] == "3.0"){
				browser = "ff3+";	
			} else {
				browser = "ff3-";
			}
		} else if (version[0] == "Safari"){
			browser = "safari";
		}	
	} else {
		browser = "other";	
	}
	return browser;
}

$(document).ready(function(){
	Refbooks.parseZohoData();
});

var hashListener = {
	ie:		/MSIE/.test(navigator.userAgent),
	ieSupportBack:	true,
	hash:	document.location.hash,
	hashfrom: 0,
	check:	function () {
		var h = document.location.hash;
		if (h != this.hash) {
			this.hash = h;
			if (this.hashfrom==0){
			this.onHashChanged();}
			this.hashfrom=0;
		}
	},
	init:	function () {

		// for IE we need the iframe state trick
		if (this.ie && this.ieSupportBack) {
			var frame = document.createElement("iframe");
			frame.id = "state-frame";
			frame.style.display = "none";
			document.body.appendChild(frame);
			this.writeFrame("");
		}

		var self = this;

		// IE
		if ("onpropertychange" in document && "attachEvent" in document) {
			document.attachEvent("onpropertychange", function () {
				if (event.propertyName == "location") {
					self.check();
				}
			});
		}
		// poll for changes of the hash
		window.setInterval(function () { self.check() }, 50);
	},
	setHash: function (s) {
		// Mozilla always adds an entry to the history
		if (this.ie && this.ieSupportBack) {
			this.writeFrame(s);
		}
		document.location.hash = s;
		this.hashfrom = 0;
	},
	getHash: function () {
		var curhash = document.location.hash.substr(1);
		if (curhash!="") {
			var end = curhash.lastIndexOf("/");
			var start = 1+curhash.lastIndexOf("/",(end-1));
			return curhash.substring(start,end);
		} else {
			return "Home";
		}
	},
	getDir: function () {
		var dirhash = document.location.hash.substr(1);
		if (dirhash!="") {
			var dirstart = 1+dirhash.indexOf("/");
			var dirend = dirhash.indexOf("/",dirstart);		
			return dirhash.substring(dirstart,dirend);
		} else {
			return "home";
		}
	},
	writeFrame:	function (s) {
		var f = document.getElementById("state-frame");
		var d = f.contentDocument || f.contentWindow.document;
		d.open();
		d.write("<script>window._hash = '" + s + "'; window.onload = parent.hashListener.syncHash;<\/script>");
		d.close();
	},
	syncHash:	function () {
		var s = this._hash;
		if (s != document.location.hash) {
			document.location.hash = s;
		}
	},
	onHashChanged:	function () {
		var dir = this.getDir();
		//alert(dir)
		if (dir=="home"){
			p = this.getHash();
 			if (p=="home"){	p = "Home";	}
			o = postorproduct(p);
			if (o=="post"){	showPost(p);	}
			if (o=="product"){	showProduct(p);	}
			openhome(1);
		}
		if (dir=="browse"){
			b = this.getHash();
			if (b=="browse"){
				fetchAll('');
			} else {
				fetchAll(b);
			}
			openbrowse(1);
		}
		if (dir=="index"){
			openindex();
		}
		if (dir=="submit"){
			opensubmit();
		}
		if (dir=="search"){
			Refbooks.loadFeed(null,4);
		}
	}
};
hashListener.init();
