/*
 * <copyright>
 *  Copyright (c) 2009 by IICM, Graz University of Technology, Austria
 * </copyright>
 *
 *  This software is the confidential information of IICM,
 *  Graz University of Technology, Austria. You shall not disclose such
 *  confidential information and shall use it only in accordance with
 *  the IICM.
 *
 *  IICM MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
 *  SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 *  IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 *  PURPOSE, OR NON-INFRINGEMENT. IICM SHALL NOT BE LIABLE FOR ANY DAMAGES
 *  SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
 *  THIS SOFTWARE OR ITS DERIVATIVES.
 *
 */
 
var insertList=new Array();
var deleteList=new Array(); 
var checkList =new Array();

function createUserID(){
		var expires = new Date();
		var userID = readCookie('userID');
		if (userID==''){
			var userId = expires.getTime();
			expires = new Date(expires.getTime()+(1000*60*60*24*365));
			var ck = ('userID='+userId+'; expires='+expires.toGMTString()+';');
			document.cookie = ck;
		}
		else {
			expires = new Date(expires.getTime()+(1000*60*60*24*365));
			var ck = ('userID='+userID+'; expires='+expires.toGMTString()+';');
			document.cookie = ck;
		}
}


function isBookmarkedEntry(item) {
	if (!document.getElementById){return false;}
	if(!Array.indexOf){
	   Array.prototype.indexOf = function(obj){
	      for(var i=0; i<this.length; i++){
	         if(this[i]==obj){
	           return i;
	         }
	       }
	     return -1;
	   }
	}	
	if (!document.getElementById){return false;}
	createUserID();
	var base = item['dc.database'];
	var refnr = item['dcx.refnr'];
	var checkEntry=(base+"§"+refnr);
	if(checkList==null)return false; 
	if(checkList.indexOf(checkEntry)==-1){
		return false;
	}
	return true;
}



function bookmarkListDelete(entry, languageKey) {
	if (!document.getElementById){return false;}
	if(!Array.indexOf){
	   Array.prototype.indexOf = function(obj){
	      for(var i=0; i<this.length; i++){
	         if(this[i]==obj){
	           return i;
	         }
	       }
	     return -1;
	   }
	}
	if(!Array.remove){	
		Array.prototype.remove=function(obj){
			var index = this.indexOf(obj);
				if(this.indexOf(obj) != -1)this.splice(i, 1);
				return true;
		}
	}
	var element = resultListBookmarks[entry];
	if(deleteList.indexOf(element)==-1){
		deleteList.push(element);
	}
	insertList.remove(element);
	sendLists();
	createBookmarkList(languageKey);
	return;
}


function bookmarkResultlistEntry(checkBoxId, item) {
	if (!document.getElementById){return false;}
	if(!Array.indexOf){
	   Array.prototype.indexOf = function(obj){
	      for(var i=0; i<this.length; i++){
	         if(this[i]==obj){
	           return i;
	         }
	       }
	     return -1;
	   }
	}
	
	if(!Array.remove){	
		Array.prototype.remove=function(obj){
			var index = this.indexOf(obj);
				if(this.indexOf(obj) != -1)this.splice(i, 1);
				return true;
		}
	}
		var isSelected = document.getElementById(checkBoxId).checked;
		var expires = new Date();
		var userID = readCookie('userID');
		expires = new Date(expires.getTime()+(1000*60*60*24*365));
		var checkEntry = this.catalogResultEntries[item].resultEntry;
		if (isSelected){
			if (insertList.indexOf(checkEntry)==-1){
				insertList.push(checkEntry);
			}	
			deleteList.remove(checkEntry);		
		} 
		else if (!isSelected){
			if (deleteList.indexOf(checkEntry)==-1){
				deleteList.push(checkEntry);
			}
			insertList.remove(checkEntry);
		}
	return;
}




function updateBookmarks(show, languageKey){
	if (show==null || show==0){
		var userID=readCookie('userID');
		sendLists();
		Bookmarks.updateBookmarks(userID,
		{
				callback: function(BookmarkTO){
					saveList(BookmarkTO);
				},
				errorHandler: function(message) { errorHandler('bookmarks',message); },
				timeout:0
		}
		);
			
	}
	else if (show==1){
		var userID=readCookie('userID');
		sendLists();
		Bookmarks.updateBookmarks(userID,
		{
				callback: function(BookmarkTO){
					saveList(BookmarkTO);
					createListOfBookmarks(languageKey);
				},
				errorHandler: function(message) { errorHandler('bookmarks',message); },
				timeout:0
		}
		);
	}
}

function deleteAllBookmarks(languageKey){

	var userID=readCookie('userID');
	Bookmarks.deleteAllBookmarks(userID,
	{
		callback: function(){ bookmarkListDelete(0,languageKey); },
		errorHandler: function (message){ errorHandler('bookmarks',message); },
		timeout:0
	}
	);
}

function sendLists(){
if (insertList.length>0 || deleteList.length>0){
	var locTO = 
	{
		userID: readCookie('userID'),
		insertL: insertList,
		deleteL: deleteList
	};
	Bookmarks.setTO(locTO,{
		callback:function(BookmarkTO){saveList(BookmarkTO);},
		errorHandler:function(message){errorHandler('bookmarks',message);},
		timeout:0
	});
	}
}

function saveList(BookmarkTO){
	resultListBookmarks=BookmarkTO.list;
	checkList = BookmarkTO.checkList;
	insertList=new Array();
	deleteList=new Array();
	return;
}

function clearBookmarkList(){
if (document.getElementById('idBookmarkPosition')!=null && document.getElementById('idBookmarkListTable')!=null){
		document.getElementById('idBookmarkPosition').removeChild(document.getElementById('idBookmarkListTable'));
	}
}

function emptyTD(){
	var tdElement = document.createElement("td");
	tdElement.setAttribute("span","5");
	return tdElement;
}

function createHeader(nr,languageKey){
    	var trElement, tdElement, textElement, inputElement;
    	trElement = document.createElement("tr");
		trElement.setAttribute("align","center");	
		trElement.className="";	
		setStyle(trElement,"border:1px;");	
		
		tdElement = document.createElement("td");
		tdElement.className="resultlist_footer";
		textElement = document.createElement("input");
		textElement.setAttribute("type","button");
		textElement.setAttribute("value",this.catalogLgKeys["bookmark.deleteall"]);
		textElement.className="resultlist";
		textElement.onclick=new Function("deleteAllBookmarks('"+languageKey+"');");
		tdElement.appendChild(textElement);
		trElement.appendChild(tdElement);
		
		tdElement = document.createElement("td");
		tdElement.className="resultlist_footer";
		textElement = document.createTextNode(this.catalogLgKeys["dc.database"]);
		tdElement.appendChild(textElement);
		trElement.appendChild(tdElement);
		
		tdElement = document.createElement("td");
		tdElement.className="resultlist_footer";
		textElement = document.createTextNode(this.catalogLgKeys["dcx.refnr"]);
		tdElement.appendChild(textElement);
		trElement.appendChild(tdElement);
		
		tdElement = document.createElement("td");
		tdElement.className="resultlist_footer";
		textElement = document.createTextNode(this.catalogLgKeys["dc.title"]);
		tdElement.appendChild(textElement);
		trElement.appendChild(tdElement);
		
		tdElement = document.createElement("td");
		tdElement.className="resultlist_footer";
		textElement = document.createTextNode(this.catalogLgKeys["dc.date"]);
		tdElement.appendChild(textElement);
		trElement.appendChild(tdElement);

		tdElement = document.createElement("td");
		tdElement.setAttribute("colSpan","2");
		tdElement.className="resultlist_footer";
		inputElement = document.createElement('input');
		inputElement.setAttribute("type","button");
		inputElement.setAttribute("value",this.catalogLgKeys["bookmark.close"]);
		inputElement.className="resultlist";
		inputElement.setAttribute("id","idCloseBookmarkList_"+nr);
		inputElement.onclick = new Function("clearBookmarkList();");
		tdElement.appendChild(inputElement);
		trElement.appendChild(tdElement);
//	}
	return trElement;
}


function createBookmarkList(languageKey){
	updateBookmarks(1,languageKey);
}

function createListOfBookmarks(languageKey){
	
	if ( !document.getElementById || !document.createElement ) { return; }

	if (document.getElementById('idBookmarkPosition')!=null && document.getElementById('idBookmarkListTable')!=null){
		document.getElementById('idBookmarkPosition').removeChild(document.getElementById('idBookmarkListTable'));
	}

	var anker = document.getElementById("idBookmarkPosition");
	anker.setAttribute("style","border:0px;");
	
	var tableElement, tbodyElement, trElement,tdElement,inputElement, innerTableElement, innerTrElement, innerTbodyElement, textElement, detailAnker;
	
	tableElement = document.createElement("table");
	tableElement.setAttribute("id","idBookmarkListTable");
	tableElement.className="resultlist";
	tbodyElement = document.createElement("tbody");
	trElement = document.createElement("tr");
	
	innerTableElement = document.createElement("table");
	innerTableElement.setAttribute("id","idBookmarks"); 
	innerTableElement.setAttribute("border","2px");	
	innerTableElement.setAttribute("width","970px");
	innerTableElement.className = "resultlistContent";	
	innerTbodyElement = document.createElement("tbody");	
	
		
	innerTrElement=document.createElement("tr");
	innerTrElement = createHeader(0);
	innerTrElement.setAttribute("colSpan","3");
	innerTbodyElement.appendChild(innerTrElement);	
	
	
	if (resultListBookmarks.length==0 /*|| (resultListBookmarks.length==1 && resultListBookmarks[0]=='')*/){
		innerTrElement=document.createElement("tr");
		tdElement = document.createElement("td");
		textElement = document.createTextNode("No bookmarks found!!!");
		tdElement.appendChild(textElement);
		tdElement.setAttribute("colSpan","4");
		tdElement.className="resultlist_menu";
		innerTrElement.appendChild(tdElement);
		innerTbodyElement.appendChild(innerTrElement);
		innerTableElement.appendChild(innerTbodyElement);
		trElement = document.createElement("tr");
		tdElement = document.createElement("td"); 	
		tdElement.setAttribute("colSpan","7");	
		tdElement.appendChild(innerTableElement);
		trElement.appendChild(tdElement);
		tbodyElement.appendChild(trElement);
		
		tableElement.appendChild(tbodyElement);		
		anker.appendChild(tableElement);
		return;
	}
	var item;
	for (var i = 0; i<resultListBookmarks.length;i++){
		item = resultListBookmarks[i];
				
		innerTrElement = document.createElement("tr");
		tdElement = document.createElement("td");
		tdElement.className="resultlist_menu";
		textElement=document.createElement("input");
		textElement.setAttribute("type","button");
		textElement.setAttribute("value",this.catalogLgKeys["bookmark.delete"]);
		detailAnker = document.createElement("div");
		detailAnker.setAttribute("id","idBookmarkDetail_"+i);
		setStyle(detailAnker, "position:absolute; z-index:2; background-color:FFFFFF; border:none;");
		//detailAnker.setAttribute("style","position:relative;");
		textElement.className="resultlist";
		textElement.onclick=new Function("bookmarkListDelete("+i+")");//("bookmarkListDelete("+resultListBookmarks[i]+");");
		textElement.setAttribute("id","idDel_"+(i));
		tdElement.appendChild(detailAnker);
		tdElement.appendChild(textElement);
		innerTrElement.appendChild(tdElement);
		
		tdElement = document.createElement("td");
		tdElement.className="resultlistContent_middle_right";
		textElement=document.createTextNode(item['dc.database']);
		tdElement.appendChild(textElement);
		innerTrElement.appendChild(tdElement);
		
		end = resultListBookmarks[i].length;
		//end = resultListBookmarks[i].search('§§');
		
		
		tdElement = document.createElement("td");
		tdElement.className="resultlistContent_middle_right";
		var linkGoTo = "#idBookmarkDetail_"+i;
		var aElement = document.createElement("a");	
		aElement.className = "resultlistShortContentLink";
		textElement=document.createTextNode(item['dcx.refnr']);; 
		aElement.href=linkGoTo;	
		aElement.onclick = new Function("showBookmarksDetails('idBookmarkDetail_"+i+"',"+i+");");	
		aElement.appendChild(textElement);	
		tdElement.appendChild(aElement);
		innerTrElement.appendChild(tdElement);
	
		tdElement = document.createElement("td");
		tdElement.className="resultlistContent_middle_right";
		textElement=document.createTextNode(item['dc.title']); 
		tdElement.appendChild(textElement);
		innerTrElement.appendChild(tdElement);
		
		tdElement = document.createElement("td");
		tdElement.setAttribute("colSpan","2");
		tdElement.className="resultlistContent_middle_right";
		textElement=document.createTextNode(item['dc.date']); 
		tdElement.appendChild(textElement);
		innerTrElement.appendChild(tdElement);
		
		innerTrElement.appendChild(tdElement);
		delim = 0; end=0;
		innerTbodyElement.appendChild( innerTrElement );
	}
	
	innerTrElement=document.createElement("tr");
	tdElement=document.createElement("td");
	tdElement.className="resultlist_footer";
	tdElement.setAttribute("colSpan","5");
	innerTrElement.appendChild(tdElement);
	tdElement=document.createElement("td");
	tdElement.className="resultlist_footer";
	inputElement = document.createElement("input");
	inputElement.setAttribute("type","button");
	inputElement.setAttribute("value",this.catalogLgKeys["bookmark.close"]);
	inputElement.className="resultlist";
	inputElement.onclick=new Function("clearBookmarkList()");
	tdElement.appendChild(inputElement);
	innerTrElement.appendChild(tdElement);
	innerTrElement.setAttribute("colSpan","3");
	innerTbodyElement.appendChild(innerTrElement);	
	innerTableElement.appendChild(innerTbodyElement);
	trElement = document.createElement("tr");
	tdElement = document.createElement("td"); 	
	tdElement.setAttribute("colSpan","7");	
	tdElement.appendChild(innerTableElement);
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);
	// Footer
	
	tableElement.appendChild(tbodyElement);		
	anker.appendChild(tableElement);
	

	return;	
}


function selectAll(){

	if(!document.getElementById){ return; }
	var hitsPerPage  = trim(document.getElementById('idHitsPerPage').value);
	var currentEntry, refNrid, base, checkbox,motif,date; 
	for (var i = 0; i<hitsPerPage;i++){
	    checkbox = "idCheckbox_"+i;
		document.getElementById(checkbox).checked = true;
		bookmarkResultlistEntry(checkbox, i);
		if (document.getElementById("idCheckbox_"+(i+1))==null)break;
	}
	return;

}

function deselectAll(){
	if(!document.getElementById){ return; }
	var hitsPerPage  = trim(document.getElementById('idHitsPerPage').value);
	var currentEntry, refNrid, base;
	var i = 0; 
	for (i=i; i<hitsPerPage;i++){
	    checkbox = "idCheckbox_"+i;
		document.getElementById(checkbox).checked = false;
		bookmarkResultlistEntry(checkbox, i);
		if (document.getElementById("idCheckbox_"+(i+1))==null)break;
	}
	return;
}


function detailedViewClick(checkbox, check, index){
	if (!document.getElementById){return false;}
	document.getElementById(checkbox).checked=document.getElementById('idDCheckbox_'+index).checked;
	bookmarkResultlistEntry(checkbox,index);
	return;
}

function showBookmarksDetails(idAnchorBase, currentNumber) {
	showDetail(idAnchorBase, resultListBookmarks[Number(currentNumber)]);
}

function showDetail(idAnchorBase, list){
	
	var tableElement,tbodyElement, trElement,tdElement,textElement,imgElement,aElement,innerTableElement,innerTBodyElement, innerTrElement,innerTdElement;
	var fieldDescription = "";
	var onClickEvent = "";	
	var idAnchor = idAnchorBase;
	var item = list;
				

	if ( !document.getElementById || !document.createElement ) { return; }
	
	// Remove Table with Entry-Details if exist before displaying
	var tableDetails = document.getElementById('idBookmarkDetails');
	if (tableDetails != null) {
		tableDetails.parentNode.removeChild(tableDetails);
	}
	
	// Create Table with 3 Colums containing Result-Entry Details	
	tableElement = document.createElement("table");
	tableElement.setAttribute("id","idBookmarkDetails");  
	tableElement.className="resultlistShort";
	tableElement.setAttribute("align","left"); 
	tableElement.setAttribute("valign","top"); 	
	tableElement.cellPadding = "0"; 
	tableElement.cellSpacing = "0"; 
	//setStyle(tableElement,"width:794px; border:2px solid black; font-size:12px; background-color:#ffffff;")
	tbodyElement=document.createElement("tbody");
	// First Row (Navigation)	
	trElement = document.createElement("tr"); // Bookmark
	tdElement = document.createElement("td"); // 
	tdElement.className="resultListButton";	
	tdElement.setAttribute("style","border:0px;");
	
	trElement.appendChild(tdElement);
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td");	//  Close-Button		
	tdElement.className="resultlistShortButton";	
	tdElement.setAttribute("style","border:0px;width:50%");		
	trElement.appendChild(tdElement);
	
	tdElement = document.createElement("td");	//  Close-Button		
	tdElement.className="resultlistShortButton";	
	tdElement.setAttribute("style","border:0px;");		
	inputElement = document.createElement('input');	 // Close Window Button
	inputElement.className="resultlistShortButton";	
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["closeDetails"]);
	inputElement.onclick = new Function("closeDetailsResultListEntry('"+idAnchor+"');");//
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);
	// Second Row (Headlines)
	trElement = document.createElement("tr"); 
	trElement.className="resultListDetails";
	tdElement = document.createElement("td"); // Text 'Picture'
	tdElement.className="resultListDetailsHeader";	
	tdElement.setAttribute("style","border:0px;");	
	textElement = document.createTextNode(this.catalogLgKeys["picture"]); 
	tdElement.appendChild(textElement);
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td"); // Text 'Information'
	tdElement.setAttribute("colSpan","2");
	tdElement.className="resultListDetailsHeader";
	tdElement.setAttribute("style","border:0px;");	
	textElement = document.createTextNode(this.catalogLgKeys["information"]); 
	tdElement.appendChild(textElement);
	trElement.appendChild(tdElement);	
	tbodyElement.appendChild(trElement);
	// Third Row (Picure and Information)
	trElement = document.createElement("tr"); // Picture
	tdElement = document.createElement("td"); 
	tdElement.className="resultListDetailsContent";	
	tdElement.setAttribute("style","border:0px;");	
	divElement = document.createElement("div");
	setStyle(divElement,"width:200px; height:300px; overflow:auto;");	
	imgElement = document.createElement("img");
	imgElement.setAttribute("src",trim(item['dcx.thumbnail']));
	divElement.appendChild(imgElement);
	tdElement.appendChild(divElement);
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td"); 
	tdElement.setAttribute("colSpan","2");	
	tdElement.className="resultListDetailsContent";	
	tdElement.setAttribute("style","border:0px;");	
	// Inner-Table (Information)
	innerTableElement = document.createElement("table");
	innerTableElement.cellPadding = "0"; 
	innerTableElement.cellSpacing = "0"; 
	innerTableElement.className ="resultlistShortContent";	
	innerTBodyElement = document.createElement("tbody");
	// -------------------------------------------
	// ----- HACK -----
	var fieldsOrdered = "dcx.refnr,dc.title,dcx.distance,dcx.width,dcx.height,dc.date,dcx.originplace,dcx.placenorm,dcx.location,dc.database,dc.identifier,dcx.datestring,dc.creator,dcx.shelfmark,dc.relation,dcx.briquet,dcx.laidline";
	var fieldsOrderedArr = fieldsOrdered.split(",");
	for (var ct=0; ct<fieldsOrderedArr.length; ct++) { 
		i=fieldsOrderedArr[ct]; 
	// ----- END HACK -----
	// -------------------------------------------
	var currentNumber=0;
	var lastIndex = 1;
	var check = item[i].toString();
	check = check.replace(/\\'/g, "\'");
	item[i]= check;
	//for (i in item) { // ORIGINAL
		if ( i != "dcx.thumbnail" ) {
			innerTrElement = document.createElement("tr");
			innerTdElement = document.createElement("td");	
			innerTdElement.className="resultlistShortContentLeft";
			if (i == "dc.identifier" ) { fieldDescription = this.catalogLgKeys["link"] } else { fieldDescription = this.catalogLgKeys[i]; } 
			textElement = document.createTextNode( fieldDescription ); 
			innerTdElement.appendChild(textElement);
			innerTrElement.appendChild(innerTdElement);
			innerTdElement = document.createElement("td");	
			innerTdElement.className="resultlistShortContentRight";
			if (i == "dc.identifier" ) {  // Link to remote Database ( new window )
				var linkGoTo = trim(item["dc.identifier"]);
				if (linkGoTo == '' || linkGoTo == "---" ) {
					textElement = document.createTextNode(" --- ");
					innerTdElement.appendChild(textElement);
				}
				else {
					aElement = document.createElement("a");	
					aElement.className = "resultlistShortContentLink";
					textElement = document.createTextNode( this.catalogLgKeys["goTo"]+" "+this.catalogLgKeys[item["dc.database"].toLowerCase()]); 	
					aElement.href = linkGoTo;	
					aElement.setAttribute("target","_blank");
					aElement.appendChild(textElement);	
					innerTdElement.appendChild(aElement);	
				}					
			} else {
				// ----	Hack
				if ( item[i] == null) {  item[i] = ' --- '; }
				if ( item[i].toString() == '-1' && i == "dc.date" ) { item[i] = ' --- '; }					
				if ( item[i].toString() == '-1' && i == "dcx.height" ) { item[i] = ' --- '; }
				if ( item[i].toString() == '-1' && i == "dcx.distance" ) { item[i] = ' --- '; }
				if ( item[i].toString() == '-1' && i == "dcx.width" ) { item[i] = ' --- '; }
				if ( item[i].toString() == '-1' && i == "dcx.shelfmark" ) { item[i] = ' --- '; }
				// ----
				if ( trim(item[i]) == "" ) { item[i] = ' --- '; }
				var textToDisplay = item[i];
				if (i == "dc.date" &&  item["dcx.datestring"] != " --- " ) {
					textToDisplay=item["dcx.datestring"];
				}
				if (i == "dcx.datestring" &&  item["dc.date"] != " --- " ) {
					textToDisplay=item["dc.date"];
				}
				if (i == "dc.date" &&  item["dcx.datestring"] == " --- " ) {
					textToDisplay=item["dc.date"];
				}
				if (i == "dcx.datestring" &&  item["dcx.datestring"] == " --- " ) {
					textToDisplay=" --- ";
				}
				
				
			
				textElement = document.createTextNode( textToDisplay ); 
				innerTdElement.appendChild(textElement);
			}
			innerTrElement.appendChild(innerTdElement);
			innerTBodyElement.appendChild(innerTrElement);
		}
	}	
	innerTableElement.appendChild(innerTBodyElement);
	tdElement.appendChild(innerTableElement);
	// End Inner-Table (Information)		
	trElement.appendChild(tdElement);		
	tbodyElement.appendChild(trElement)	
	tableElement.appendChild(tbodyElement);
	
	document.getElementById(idAnchor).appendChild(tableElement);
}

function getLgKeys(languageKey){
	if (this.catalogLgKeys==null){
		Bookmarks.getLgKeys(languageKey,
		{
			callback: function(BookmarkTO){
				catalogLgKeys = BookmarkTO.keys;
				updateBookmarks(1,languageKey);
				},
			errorHandler:function(message){errorHandler('bookmarks',message);},
			timeout:0
		}
		);
	}
	else {
	 updateBookmarks(1,languageKey);
	}
}