<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs
	title="Birmingham Transcription Import"
	author_email="scribe777@gmail.com"
	author="CrossWire"
	description="Birmingham Transcription Import"
	screenshot="http://crosswire.org/images/crosswire.gif"
	thumbnail="http://crosswire.org/images/crosswire.gif"
	scrolling="false"
   >
  <Require feature="dynamic-height"/>
  <Require feature="opensocial-0.7"/>
  <Require feature="pubsub-2">
  <Param name="topics">
    <![CDATA[ 
    <Topic title="Manuscript Page Annotation Add" name="interedition.annotation.add"
            description="Add An Annotation To A Manuscript Page" type="string"
            subscribe="true"/>
    <Topic title="Manuscript Selection" name="interedition.annotation.selected"
            description="Select a Manuscript Page Annotation" type="string"
            subscribe="true"/>
    <Topic title="Manuscript Page Selection" name="interedition.page.selected"
            description="Select a Manuscript Page" type="string"
            subscribe="true"/>
    ]]>
  </Param>
</Require>
</ModulePrefs>

<UserPref name="mode" datatype="enum" display_name="Feature Mode" default_value="Page">
	<EnumValue value="Page" display_value="Page"/>
	<EnumValue value="Document" display_value="Document"/>
</UserPref>

<UserPref name="height" datatype="enum" display_name="Gadget Height" default_value="400">
	<EnumValue value="200" display_value="Short"/>
	<EnumValue value="300" display_value="Medium"/>
	<EnumValue value="600" display_value="Tall"/>
	<EnumValue value="-1" display_value="Dynamic"/>
</UserPref>

<Content type="html">
<![CDATA[

<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US">
<head>
	<link rel="stylesheet" type="text/css" href="/community/js/jquery-ui/jquery-ui.css"/>

	<script type="text/javascript" src="/community/js/jquery/jquery.min.js"></script>
	<script type="text/javascript" src="/community/js/jquery-ui/jquery-ui.min.js"></script>
	<script type="text/javascript" src="/community/js/URI.min.js"></script>
	<script type="text/javascript" src="/community/js/jquery/jquery.cookie.js"></script>

<style type="text/css">
table {
	border-collapse: collapse;
}

table#smallsize {
	border-collapse: collapse;
	width: 100%;
}

td, th {
	padding: 5px 4px;
	border: 1px solid #CCC;
	/*white-space: nowrap;
	overflow: hidden;*/
}

fieldset {
	padding: 4px;
	margin: 4px;
	border:1px solid;
}


thead, tfoot {
	background-color: #CCC;
}

.pagerow, .datarow {
	cursor:pointer;
}

.closeButton {
	float:right;
	background-image: url('/community/images/dialog_sprites.png');
	background-position: 50% -17px;
	background-repeat: no-repeat;
	height: 16px; width: 16px;
	cursor:pointer;
}

</style>
</head>
<body>
		<div style="height:300px; overflow: auto; padding:0px; margin: 0px;">
			<table class="fillPageAlmost" style="font-size: small; padding:0px; margin:0px;" width="100%">
			<thead>
<tr>
			<th>Document ID</th>
			<th>GA</th>
</tr>
			</thead>
			<tbody id="doctab">
			</tbody>
			</table>
		</div>
<br/>
<span style="float:left;"><button onclick="importDocument(selectedRowID); return false;">Import </button><input id="published" type="checkbox"/>Published <input id="ignoreFolio" type="checkbox"/>Ignore Folio Numbers <input id="indexOnly" type="checkbox"/>Index Info Only as IGNTP</span>
<button style="float:right;" onclick="openVMR(selectedRowID, $('.pagerow:first').find('.pageID').text());return false;">Open In Manuscript Workspace</button>
		<div style="clear:both; height:300px; overflow: auto; padding:0px; margin: 0px;">
			<table class="fillPageAlmost" style="font-size: small; padding:0px; margin:0px;" width="100%">
			<thead>
<tr>
			<th>Folio</th>
			<th>Page XMLID</th>
			<th>Verses </th>
			<th>Page ID</th>
</tr>
			</thead>
			<tbody id="pagetab">
			</tbody>
			</table>
		</div>
<br/><br/>
<br/><br/>
<span id="status" />

</body>
<script>

	var preferredHeight = 500;
	var selectedRowID = null;
	var selectedPageRowID = null;

	var books = ['', 
  "Matt",
  "Mark",
  "Luke",
  "John",
  "Acts",
  "Rom",
  "1Cor",
  "2Cor",
  "Gal",
  "Eph",
  "Phil",
  "Col",
  "1Thess",
  "2Thess",
  "1Tim",
  "2Tim",
  "Titus",
  "Phlm",
  "Heb",
  "Jas",
  "1Pet",
  "2Pet",
  "1John",
  "2John",
  "3John",
  "Jude",
  "Rev"
];

var lastBook = '';
var lastChap = '';
function getVerseFromBKV(bkv) {
	if (!bkv) {
		lastBook = lastChap = '';
		return '';
	}
	bkv = bkv.substring(bkv.lastIndexOf('_')+1);
	var book = bkv.substring(1,bkv.indexOf('K'));
	var chap = bkv.substring(bkv.indexOf('K')+1, bkv.indexOf('V'));
	var verse = bkv.substring(bkv.indexOf('V')+1);

	var retVal = '';
	if (book != lastBook) {
		retVal += books[parseInt(book)] + '.'+parseInt(chap)+'.'+parseInt(verse);
		lastBook = book;
		lastChap = chap;
	}
	else if (chap != lastChap) {
		retVal += '; '+parseInt(chap)+'.'+parseInt(verse);
		lastChap = chap;
	}
	else retVal += ','+parseInt(verse);
	
	return retVal;
}

function loadDocuments() {
		var params = {};
		var postData = {
			language : 'grc',
			_fields   : 'JSON:["siglum","document_type","document_id"]'
		}
		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
		var url = 'http://www.itsee.birmingham.ac.uk/api/transcription/?'+gadgets.io.encodeValues(postData);
		gadgets.io.makeRequest(url, function(o) {
			var results = $.parseJSON(o.text).results;
			var t = '';
			results.sort(function(a,b){return a.document_id - b.document_id;});
			for (var i = 0; i < results.length; ++i) {
				t += '<tr id="rid'+results[i].document_id+'" class="datarow"><td>'+results[i].document_id+'</td><td class="siglum">'+results[i].siglum+'</td></tr>'
			}
			$('#doctab').html(t);
			$('.datarow').click(function () {
				rowClicked(this);
			});
			setSelectedRow();
	if (gadgets.util.hasFeature('dynamic-height') && preferredHeight == -1) gadgets.window.adjustHeight();
	setTimeout(function() {
		if (gadgets.util.hasFeature('dynamic-height') && preferredHeight == -1) gadgets.window.adjustHeight();
		expandFillPageClients();
	}, 100);
		}, params);
}


function importDocument(docID, results, i) {
	if (!results) {
		$('#pagetab').html('<tr><td colspan="4"><center><h1><image src="'+imagesURL+'/loading.gif"/> Loading.  Please wait...</h1></center></td></tr>');
		var params = {};
		var postData = {
			siglum : $('#rid'+docID).find('.siglum').text()
		}
		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
		var url = 'http://www.itsee.birmingham.ac.uk/api/page/?'+gadgets.io.encodeValues(postData);
		gadgets.io.makeRequest(url, function(o) {
			var results = $.parseJSON(o.text).results;
			importDocument(docID, results, 0);
		}, params);
	}
	else {
		if (i >= results.length) {
			$('#pagetab').html(t);
			$('.pagerow').click(function () {
				pageRowClicked(this);
			});
			setSelectedPageRow();
			$('#pagetab').find('tr:first').remove();
			return;
		}
	
		var v = '';
		getVerseFromBKV();
		for (var j = 0; j < results[i].verse_ids.length; ++j) {
			v += getVerseFromBKV(results[i].verse_ids[j]);
		}
		var folio = results[i].long_identifier;
		getBestGuessPage(docID, folio, v, function(result) {
			t = $('#pagetab').html() + '<tr id="pid'+results[i]._id+'" class="pagerow"><td class="folio">'+folio+'</td><td class="pagexmlid">'+results[i].xmlid+'</td><td class="verses">'+v+'</td><td class="pageID">'+$(result).find('success').attr('value')+'</td></tr>';
			$('#pagetab').html(t);
			if (gadgets.util.hasFeature('dynamic-height') && preferredHeight == -1) gadgets.window.adjustHeight();
			setTimeout(function() {
				if (gadgets.util.hasFeature('dynamic-height') && preferredHeight == -1) gadgets.window.adjustHeight();
				expandFillPageClients();
			}, 100);
			if (!$('#indexOnly').is(':checked')) {
				saveTranscription(docID, $(result).find('success').attr('value'), results[i].tei, i == results.length-1, function() {
					importDocument(docID, results, i + 1);
				});
			}
			else {
				saveIndexing(docID, $(result).find('success').attr('value'), v, function() {
					importDocument(docID, results, i + 1);
				});
			}
		});
	}
}


function saveIndexing(docID, pageID, verses, callback) {
	var params = {};
	var postData = {
		sessionHash : $.cookie('ntvmrSession'),
		docID           : docID,
		pageID          : pageID,
		biblicalContent : verses,
		userName        : 'igntp'
	};
	params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
	params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postData);
	var url = servicesURL + '/biblicalcontent/put/';
	gadgets.io.makeRequest(url, function (o) {
		var xml = $.parseXML(o.text);
		if ($(xml).children('error').length) {
			alert($(xml).children('error').attr('message'));
		}
		if ($(xml).children('success').length) {
			if (callback) callback();
		}
	}, params);
}


function saveTranscription(docID, pageID, tei, push, callback) {

		var params = {};
		var postData = {
			sessionHash : $.cookie('ntvmrSession'),
			docID : docID,
			pageID: pageID,
			push: push,
			updateIndexing: true,
			transcript: tei
		};
		if (!$('#published').is(':checked')) {
			postData.userName = viewer.getDisplayName();
		}

		var url = servicesURL + '/transcript/put/';
		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
		params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postData);
		gadgets.io.makeRequest(url, function (o) {
			var xml = $.parseXML(o.text);
			if ($(xml).children('error').length) {
				alert($(xml).children('error').attr('message'));
			}
			if ($(xml).children('success').length) {
				if (callback) callback();
			}
		}, params);
}

function loadPages(docID) {
		$('#pagetab').html('<tr><td colspan="4"><center><h1><image src="'+imagesURL+'/loading.gif"/> Loading.  Please wait...</h1></center></td></tr>');
		var params = {};
		var postData = {
			siglum : $('#rid'+docID).find('.siglum').text()
		}
		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
		var url = 'http://www.itsee.birmingham.ac.uk/api/page/?'+gadgets.io.encodeValues(postData);
		gadgets.io.makeRequest(url, function(o) {
			var results = $.parseJSON(o.text).results;
			var t = '';
			for (var i = 0; i < results.length; ++i) {
				var v = '';
				getVerseFromBKV();	// clear out cached book name, cheeze
				for (var j = 0; j < results[i].verse_ids.length; ++j) {
					v += getVerseFromBKV(results[i].verse_ids[j]);
				}
				t += '<tr id="pid'+results[i]._id+'" class="pagerow"><td class="folio">'+results[i].long_identifier+'</td><td class="pagexmlid">'+results[i].xmlid+'</td><td class="verses">'+v+'</td><td class="pageID"></td></tr>'
			}
			$('#pagetab').html(t);
			$('.pagerow').click(function () {
				pageRowClicked(this);
			});
			setSelectedPageRow();
	if (gadgets.util.hasFeature('dynamic-height') && preferredHeight == -1) gadgets.window.adjustHeight();
	setTimeout(function() {
		if (gadgets.util.hasFeature('dynamic-height') && preferredHeight == -1) gadgets.window.adjustHeight();
		expandFillPageClients();
		getBestGuessPage(selectedRowID, $('.pagerow:first').find('.folio').text(), $('.pagerow:first').find('.verses').text(), function(xml) {
			$('.pagerow:first').find('.pageID').html($(xml).find('success').attr('value'));
               $('.pagerow:first').find('.pageID').css('background-color', $(xml).find('success').attr('type')=='found' ? '#00EE00' : '#EE0000');
		});
	}, 100);
		}, params);
}

function setSelectedPageRow(rid) {

	$('.pagerow').css('background-color', '#FFFFFF');

	if ($('#pid'+rid)) {
		selectedPageRowID = rid;
//		$('#pid'+rid).css('background-color', '#FFFF99');
		$('#pid'+rid).css('background-color', '#E2E2E2');
	}
	else selectedPageRowID = null;
	if (selectedPageRowID && gadgets.util.hasFeature('pubsub-2')) {
		var pageData = {
			docID        : selectedRowID,
			docname      : $('#rid'+selectedRowID).find('.siglum').text(),
			pageID       : $('#pid'+selectedPageRowID).find('.pageID').text(),
			pagename     : $('#pid'+selectedPageRowID).find('.folio').text(),
			indexcontent : $('#pid'+selectedPageRowID).find('.verses').text(),
			lang         : 'grc'
		}
		gadgets.Hub.publish("interedition.page.selected", pageData);
	}
}

function getBestGuessPage(docID, folio, verses, callback) {
	if (!docID) return;
		var params = {};
		var postData = {
			docID : docID,
			verses : verses
		};

		if (!$('#ignoreFolio').is(':checked')) {
			postData.folio=folio;
		}

		params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
		params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postData);
		var url = servicesURL + '/transcript/getbestguesspage/';
		gadgets.io.makeRequest(url, function(o) {
			var xml = $.parseXML(o.text);
			callback(xml);
		}, params);
}

function rowClicked(row) {
	var rid = $(row).attr('id').substring(3);
	setSelectedRow(rid);
}

function pageRowClicked(row) {
	var rid = $(row).attr('id').substring(3);
	setSelectedPageRow(rid);
}

function setSelectedRow(rid) {

	$('.datarow').css('background-color', '#FFFFFF');

	if ($('#rid'+rid)) {
		selectedRowID = rid;
//		$('#rid'+rid).css('background-color', '#FFFF99');
		$('#rid'+rid).css('background-color', '#E2E2E2');
	}
	else selectedRowID = null;
	loadPages(rid);
}


function loaded() {

	servicesURL = URI('../../vmr/api').absoluteTo(gadgets.util.getUrlParameters()['url']);
	imagesURL   = URI('../../images').absoluteTo(gadgets.util.getUrlParameters()['url']);
	var prefs = new gadgets.Prefs();
	preferredHeight = parseInt(prefs.getString('height'));
	mode = prefs.getString('mode');
	if (gadgets.util.hasFeature('dynamic-height')) gadgets.window.adjustHeight(preferredHeight == -1 ? 500 : preferredHeight);

	var req = opensocial.newDataRequest();
	req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');
	req.send(function(data) {
		viewer = data.get('viewer').getData();
		$('#username').val(viewer.getDisplayName());
		$('#userid').val(viewer.getId());

		loadDocuments();
	});
}


function openVMR(docID, pageID) {
	window.open('http://ntvmr.uni-muenster.de/manuscript-workspace?docID='+docID+((pageID)?('&pageID='+pageID):''),'workspace',
		  'titlebar=no,toolbar=no,status=no,scrollbars=yes,resizable=yes,menubar=no,location=yes,directories=no,'
		+ 'width=1024,height=768');
}

var MARGIN=4;
function expandFillPageClients() {
	$('.fillPage').each(function () {
		$(this).height(gadgets.window.getViewportDimensions().height - $(this).offset().top - MARGIN);
	});
}

gadgets.HubSettings.onConnect = function(hum, suc, err) {
	loaded();
};

</script>
</html>

]]>
</Content>
</Module>

