/*
*	Dieses Skript exportiert die DC-Metadaten der HTML-Seite nach EndNote.
*
*	(C) 2007 Verlag der OEAW, vmuth	
*
*/

// Dieser HTML-code muss in die Zielseite eingefügt werden, da der BibTex-Eintrag in das <div>-Tag "endnotebox" eingebaut wird.
//
// Alle Einträge namens "BibTex" in diesem Skript beziehen sich eingentlich auf EndNote (aber das Prinzip ist dasselbe, und ich bin faul...)

//zeigt das div-tag mit dem bibtex-export an
function showEndNote(){
	document.getElementById('endNoteBox').style.visibility='visible';
}

//versteckt das div-tag (das "X" zum schließen)
function hideEndNote(){
	document.getElementById('endNoteBox').style.visibility='hidden';
}

//hauptfunktion des bibtex-exports...
function endNote(){

	//zuerst die browserweiche: (brauch ma no net...)
/*	ie = ((document.all) && (window.offscreenBuffering)) ? true : false;  //internet exploder
	nn = ((document.captureEvents) && (!document.getElementById)) ? true : false; //netscape
	mz = ((document.getElementById) && (!document.all) && (document.documentElement)) ? true : false; //mozilla
	op = ((document.getElementById) && (navigator.userAgent.indexOf('Opera') != -1)) ? true : false; //opera
	sf = ((navigator.userAgent.indexOf('Safari') != -1)) ? true : false; //safari
*/	

	//neues div-tag kreieren
	var newDiv = document.createElement("div");
	var newDivId = document.createAttribute("id");
	newDivId.nodeValue="endNoteBoxPure";
	newDiv.setAttributeNode(newDivId);
	document.getElementById("endNoteBox").appendChild(newDiv);

	showEndNote();
	var newBibText="";  //noch leer

	//alle meta-tags der html-seite holen:
	if(document.getElementsByName('vaw_publication_type').length>0){
		newBibText+=document.getElementsByName('vaw_publication_type')[0].getAttribute("content");
	}
	else{
		//für normale waschzettel
		newBibText+='book';
	}
	//debug: //alert(newBibText);
	//gibt den "eigentlichen" publikationstyp an...
	newBibText=filterENPubType(newBibText);


	//inhalt in bibtex-export-div-tag hinzufügen (zb "@inbook{")
	var titl = document.createTextNode("%0 "+newBibText+"");
	document.getElementById("endNoteBoxPure").appendChild(titl);

	//der bibtexkey: was nemma ma denndenn? - die arp-id... 
	var trail = document.location.href;
	var arppos = trail.indexOf("?arp=");
	var docId = "";
	
	if(arppos==-1){
		//wir haben ein normales prospekt! - wir nehmen die ISBN-nummer...
		arppos=trail.lastIndexOf("/");
		docId = trail.substr(arppos+1);
	}
	else{
		docId = trail.substr(arppos+5);
	}

	trail = docId+"";
	//Hinzufuegen2(trail);

	//jetzt die metadaten:
	var Element;
	var newDiv;
	var parsedTitle;
	var titleAdded = false;

	//der DC.title in der HTML-seite ist nicht immer der gewünschte! daher wird der Titel aus der HTML-seite geholt.
	//
	  for (var y = 0; y < document.getElementsByTagName("a").length; y++){
		titlelink = document.getElementsByTagName("a")[y];
		arpid = titlelink.getAttribute("href");


		arpid=arpid.substr(arpid.lastIndexOf('0x'));



		if ((arpid==docId)){

			//der <title>-tag ist nicht immer der titel des pdfs (bei büchern der titel des buches)... grmbl... also aus der seite rausparsen...
			parsedTitle=titlelink.innerHTML;	

			if (newBibText!='inbook'){
				Hinzufuegen2("%T "+parsedTitle+"");
				titleAdded = true;
				if (newBibText=='Journal Article'){
					//deaktiviert, weil Endnote falsch importiert...: Hinzufuegen2("%J "+document.getElementsByName('title')[0].getAttribute('content')+"");
					Hinzufuegen2("%J "+document.getElementsByName('title')[0].getAttribute('content')+"");
				}
			}
			
			if (newBibText=='inbook'){
				Hinzufuegen2("%& "+parsedTitle+"");
			}



		}
	  }

	//end title

	//die einzelnen META-Tags durcharbeiten... (besten Dank an Stefan Münz...)
	for (var i = 0; i < document.getElementsByTagName("META").length; i++) {

		Element = document.getElementsByTagName("META")[i];

		//inhalt kreieren...
		var newLIText = ""; 

		//filter: ("" wenn nicht, "bla" wenn schon...):
		newLIText += Element.getAttribute("NAME");

		newLIText = filterEN(newLIText);
		helper = newLIText;

		if ( newLIText.length > 1 ){
			  //der Filter (filter(bla)) gibt den Eintrag frei...
			  conti = Element.getAttribute("CONTENT");
			  conti = filterENContent(newLIText, conti);
			  newLIText += conti;
			  newLIText += "";
			  	//alert('newLIText: '+newLIText+' indexOf: '+newLIText.indexOf('{}'));
			  	if (newLIText.length>5){
					//nur wenn wirklich was sinnvolles drinsteht... (mehr als 5 zeichen inkl %X )
					//alert('helper:'+helper);
					if (helper=="%T "){
						if (!titleAdded){
							Hinzufuegen2(newLIText);
							titleAdded = true;
						}
					}
					else{
						Hinzufuegen2(newLIText);
					}
				}
			}
		

	}

	//etwaige andere metatags, und abschluss des bibexports...
	Hinzufuegen2("%U "+this.window.location.href+"");
	
	Hinzufuegen2("%[ "+jetzt()+"");

	Hinzufuegen2("%C Wien");


	//doi raussuchen und verarbeiten (geht net anders...)
	var doi = "";
	var doilink = "";
	var allLinks=document.getElementsByTagName("a");

	var letzterdoi="";

	for (var y = 0; y < allLinks.length; y++){
		doilink = document.getElementsByTagName("a")[y];
		doi = doilink.getAttribute("href");
		if ((doi.slice(0,17)=='http://dx.doi.org') && (letzterdoi!=doi)){
			letzterdoi=doi;
			
			Hinzufuegen2("%R "+doi+"");

		}

		
	}



	//finale klammer des eintrags:

	Hinzufuegen2(""); //leerzeile


	deactivateEndNoteExport();

	writeOwnENFile();



}	

//wenn bibtex schon einmal exportiert wurde, dann wird beim zweiten klick nur noch das dic-tag angezeigt (statt des dateidownloads)
function deactivateEndNoteExport(){
	document.getElementById('createLnk2').href="javascript:showEndNote();";
	document.getElementById('createLnk2').title="EndNote-Export (beta) : Please reload page for another EndNote export of this page...";

}

function newlines(text) 
{ 
	//furchtbarer hack: (grmbl... internet explorer - undokumentiertes "feature" (das ist ein BUG!...)
	var newlinesRE = /([^\n])\n([^\n])/g;
	text = text.replace(/(\r\n|\r|\n)/g, '\n'); 
	return text.replace(newlinesRE, "$1\n$2"); 
}

//einfügen der werte in ein verstecktes formular (siehe buch.xsl-stylesheet) und absenden dieser werte an die cgi-schnittstelle von hw.oeaw.ac.at
function writeOwnENFile(){





  	var btb = document.getElementById("endNoteBoxPure"); 
	var btb2 = document.getElementById("endNoteBox");

	btbstring=btb.innerHTML;
	
	//alert("btbsring: "+btbstring);
	
	btbstring=btbstring.replace(/%/g,'\n%');
	document.cgiFeeder2.text.value=newlines(btbstring); //bib-style

	//alert("formwert: "+document.cgiFeeder2.text.value);

	//vorbereitung für das 2. mal anzeigen... (zeilenumbrüche einbauen)
	btbtext2=btbstring.replace(/%/g, "<br />%");
	//btbtext2=btbtext2.replace(/{ title =/g, "{ <br />title =");
	//btbtext2=btbtext2.replace(/, title =/g, ", <br />title =");

	document.getElementById('endNoteBoxPure').innerHTML=btbtext2;
	//ende vorbereitung

	//absenden des formulars

	//
	document.cgiFeeder2.submit();


	//verstecken des divs
	btb2.style.visibility="hidden";




}




//je nach eintrag in den DC-metatags des waschzettels (für den artikel - nicht die collection!) werden eigene publikationstypen zurückgegeben
function filterENPubType(content){

	switch(content){
		case "reference":
			//mandatory: author, title, howpublished, month, year, note
			content="Generic";
			return(content);
			break;

		case "collectededition":
			//mandatory:  author, title, booktitle, publisher, year
		      	content="Generic"
			return(content);
		      	break;

		case "proceeding":
			//mandatory: 	title, year
		      	content="Conference Proceedings"
			return(content);
		      	break;

		case "journal":
			//mandatory: 	author, title, journal, year
		      	content="Journal Article"
			return(content);
		      	break;

		case "monograph":
			//mandatory: 	author or editor, title, publisher, year
		      	content="Book"
			return(content);
		      	break;

		case "materials":
			//mandatory: 		author, title, institution, year
		      	content="Manuscript"
			return(content);
		      	break;

		case "other":
			//mandatory: 	-
		      	content="Generic"
			return(content);
		      	break;

		case "inbook":
			//mandatory: 		author or editor, title, chapter and/or pages, publisher, year
			//
			//
			//wenn issn vorhanden und vaw_publication_type=inbook, dann soll "article" zurückgegeben werden
			var chksub = checkISSN();
			
			if (chksub == "journal"){
		      		content="Journal Article";
			}
			else{
		      		content="Book Section";
			}
			return(content);
		      	break;

		case "book":
			//mandatory: 	author or editor, title, publisher, year
			//problem! parse authors in another way!
		      	content="Book"
			return(content);
		      	break;

	}
}

//fragt nach, ob es sich um ein journal handelt...
function checkISSN(){

	for (var i = 0; i < document.getElementsByTagName("META").length; i++) {
		dcissnEl = document.getElementsByTagName("META")[i];
		dcissn = dcissnEl.getAttribute("NAME");
		//alert('chkISSN: '+dcissn);
		if (dcissn == "vaw_ISSN"){
			return "journal";
		}
		else{
			//do absolutly nothing...
		}
	}
	return "nojournal";
}

//das wäre besser mit xsl umzusetzen, abet bibtex ist nicht xml... (gibt's schon, aber ist noch nicht so weit verbreitet wie bibtex)
//filterung der DC-Metatags für die metatags der artikel-collections
function filterEN(content){
	switch (content) {
		
		case "ROBOTS":
			content="";
			return(content);
		case "doi_suffix":
			content="";
			return(content);
		case "doi_suffix1":
			content="";
			return(content);
		case "journal":
			content="";
			return(content);

		case "author":
			content="%A ";
			return(content);

		case "title":
			content="%B ";
			return(content);

		case "vaw_ISBN13":
			content="%@";
			content += " ";	
			return(content);
			break;
		
		case "vaw_ISBN13_Online":
			content="%@";
			content += " ";	
			return(content);
			break;

		case "vaw_ISSN":
			content="%@";
			content += " ";	
			return(content);
			break;

		case "vaw_ISSN_Online":
			content="%@";
			content += " ";	
			return(content);
			break;

		case "DC.Publisher":
			content="%I";
			content += " ";	
			return(content);
			break;

		case "vaw_unit":
			content="";
			content += "";	
			return(content);
			break;

		case "doi":
			content='%R';
			content += " ";	
			return(content);
			break;

		case "DC.Title":
			content="%T";
			content += " ";	
			return(content);
			break;


		case "DC.Subject":
			content="%K ";
			return(content);
			break;
	
		case "DC.Rights":
			content="";
			content += "";	
			return(content);

			break;

		case "vaw_Autor":
			content="%A";
			content += " ";	
			return(content);
			break;

		case "DC.Creator":
			content="%A";
			content += " ";	
			return(content);
			break;			

		case "DC.Description":
			content="%X";
			content += " ";	
			return(content);
			break;						

		case "description":
			content="%X";
			content += " ";	
			//content="";
			return(content);
			break;						

		case "DC.Date":
			content="%D";
			content += " ";	
			return(content);
			break;						

		case "DC.Language":
			content="%G";
			content += " ";	
			return(content);
			break;						

		case "vaw_Sachgebiet":
			content="";
			content += "";	
			return(content);
			break;

		case "GOid":
			content="%M";
			content += " ";	
			return(content);
			break;

		case "pages":
			content="%P";
			content += " ";	
			return(content);
			break;

		case "vaw_volume":
			content="%V";
			content += " ";	
			return(content);
			break;

		case "vaw_number":
			content="%N";
			content += " ";	
			return(content);
			break;
		
		case "DocDate":
			content="%D";
			content += " ";	
			return(content);
			break;

		default:
			return("");
			break;
	}
	
}

function filterENContent(metatag, conti){
	//alert('metatag: '+metatag+' content: '+conti);
	switch (metatag) {
		
		case "%8 ":
			conti=conti.slice(0,4);
			conti=conti.replace(/,/g,"");
			//alert('metatag: '+metatag+' content: '+conti);
			return(conti);
		case "%D ":
			conti=conti.slice(0,4);
			conti=conti.replace(/,/g,"");
			//alert('metatag: '+metatag+' content: '+conti);
			return(conti);
		default:
			return(conti);
			break;
	}
}

//thx to selfhtml.de :
//fügt jeweils eine zeile zum bibtex-export hinzu...
function Hinzufuegen2 (content) {
	//alert("content: "+content);
    var Textknoten = document.createTextNode(content+'');
  document.getElementById("endNoteBoxPure").appendChild(Textknoten);
}

//für den lastaccessed-Eintrag:
function jetzt () {
  var jetzt = new Date();
  var tag = jetzt.getDate();
  var mon = jetzt.getMonth()+1;
  var year = jetzt.getFullYear();
  var Zeit = tag+'.'+mon+'.'+year;

  return(Zeit);
}

//end(e)lich des skripts... ;-) 

