<?xml version="1.0" encoding="UTF-8" ?>



<Module>
  <ModulePrefs
	title="Admin - Transcription Import"
	author_email="scribe777@gmail.com"
	author="CrossWire"
	description="Admin - Transcription Import"
	screenshot="http://crosswire.org/images/crosswire.gif"
	thumbnail="http://crosswire.org/images/crosswire.gif"
        scrolling="false"
   >
<Optional feature="pubsub-2">
  <Param name="topics">
    <![CDATA[ 
    <Topic title="Image Selection" name="interedition.image.selected"
            description="Show an Image" type="string"
            subscribe="true"/>
    ]]>
  </Param>
</Optional>
<Optional feature="dynamic-height"/>
<Require feature="opensocial-0.8"/>
</ModulePrefs>

<UserPref name="height" datatype="enum" display_name="Gadget Height" default_value="350">
	<EnumValue value="200" display_value="Short"/>
	<EnumValue value="350" display_value="Medium"/>
	<EnumValue value="600" display_value="Tall"/>
</UserPref>
<UserPref name="defaultFolder" datatype="string" display_name="Default Root Folder" default_value="/data/finalXML/" />

<Content type="html">
<![CDATA[
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

	<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">
<!--
body {
	margin-top: 10px;
	margin-bottom: 10px;
	margin-left: 10px;
	margin-right: 10px;
	background-color: #aaa;
	font-family: Verdana, Arial, Helvetica, sans-serif; 
	font-size:14px;
}

a img {
	border: 0;
}
.statusBar {
	position: absolute;
	top:0px;
	left:0px;
	height:10px;
	margin: 0pt;
	padding: 0pt;
	background: transparent url(/community/images/statusbar_green.gif) repeat-x scroll 0% 0%;
	overflow: visible;
	-moz-background-clip: border;
	-moz-background-origin: padding;
	-moz-background-inline-policy: continuous;
	vertical-align: middle;
	filter:alpha(opacity=40);
	-khtml-opacity: 0.40;
	-moz-opacity: 0.40;
	opacity:0.40;
	z-index:-1;
}
-->
</style>
</head>
<body>

<form>
<fieldset>
<legend>Import Transcriptions</legend>
<table>
<tr>
	<td style="text-align: right;" title="Root Folder Of Transcriptions" for="tfolder">Root Folder Of Transcriptions</td>
	<td><input type="text" title="Root Folder Of Transcriptions" id="tfolder" value="/data/finalXML/"></td>
	<td><input type="radio" name="fileType" value="xml" checked="checked"/>XML <input type="radio" name="fileType" value="plaintext">Plain text</td>
	<td><button id="checkButton" onclick="checkTFolder(); return false;">Check</button></td>
</tr>

<tr>
	<td style="text-align: right;" title="Limit To DocID" for="tfolder">Limit To DocID</td>
	<td><input type="text" title="Limit To DocID" id="tdoc" value=""></td>
	<td><button id="clearFolios" onclick="clearFolioNumbers($('#tdoc').val());return false;">Clear Folio Numbers For This Doc</button></td>
</tr>
<tr><td></td><td></td><td><button id="clearIndexing" onclick="clearNonHumanIndexing($('#tdoc').val());return false;">Clear Non-Human Indexing For This Doc</button></td>
</tr>

<tr>
<td></td>
<td colspan="2"><input type="checkbox" title="Clean All Previous Import Data For This Doc" id="tclean" />
<label for="tclean" title="Clean All Previous Import Data For This Doc">Clean All Previous Import Data For This Doc</label>
</td>
</tr><tr>
<td></td>
<td colspan="2"><input type="checkbox" title="Import Index Information Only" id="indexonly" /><label for="indexonly" title="Import Index Information Only">Import Index Information Only</label></td>
</tr>
</table>
<br/>
<button id="startButton" onclick="importTranscriptions(); return false;">Start</button>
</fieldset>

</form>


<table style="width:100%">
	<tr>
		<td><span id="status"></span></td>
	</tr>
	<tr>
		<td><span id="statusText"></span></td>
	</tr>
	<tr style="z-index:-99;">
		<td style="white-space: nowrap; font-size:x-small;">
			<div id="percent" style="padding: 0pt; border:1px solid black;margin: 0px 0px 10px 0px; width: 100%; white-space: nowrap; text-align: center; position: relative; z-index:0;">
			</div>
		</td>
	</tr>
</table>


</body>
<script>

var updateInterval=3000;
var viewer = null;
var serviceURL = "https://copt-ot.adw-goe.de:443/community/projects/ntmss/transcriptionimport.jsp";
var clearFoliosServiceURL = "https://copt-ot.adw-goe.de:443/community//vmr/api/metadata/manuscript/clearfolionumbers/";
var clearIndexingServiceURL = "https://copt-ot.adw-goe.de:443/community//vmr/api/metadata/manuscript/clearnonhumanindexing/";

function clearFolioNumbers(docID) {

	if (docID && (docID > 0 || docID.length > 0)) {
		if (confirm('Are you sure you want to clear all folio numbers for DocID: '+docID+'?')) {
			var params = {};
			
			var postData = {
				sessionHash   : $.cookie('ntvmrSession'),
				defeatecache  : new Date().getTime(),
				docID         : docID
			};

			params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
			params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postData);
			gadgets.io.makeRequest(clearFoliosServiceURL, function(o) {
				var xml = $.parseXML(o.text);
				if ($(xml).find('error').length > 0) {
					alert('Error: ' + $(xml).find('error').attr('message'));
				}
				else if ($(xml).find('success').length > 0) {
					alert('Success: ' + $(xml).find('success').attr('message'));
				}
				else alert(o.text);
		//		$('#status').html(o.text);
			}, params);
		}
	}
	else {
		alert('You must supply a DocID.');
	}
}

function clearNonHumanIndexing(docID) {

	if (docID && (docID > 0 || docID.length > 0)) {
		if (confirm('Are you sure you want to clear all non-human indexing data for DocID: '+docID+'?')) {
			var params = {};
			
			var postData = {
				sessionHash   : $.cookie('ntvmrSession'),
				defeatecache  : new Date().getTime(),
				docID         : docID
			};

			params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
			params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postData);
			gadgets.io.makeRequest(clearIndexingServiceURL, function(o) {
				var xml = $.parseXML(o.text);
				if ($(xml).find('error').length > 0) {
					alert('Error: ' + $(xml).find('error').attr('message'));
				}
				else if ($(xml).find('success').length > 0) {
					alert('Success: ' + $(xml).find('success').attr('message'));
				}
				else alert(o.text);
		//		$('#status').html(o.text);
			}, params);
		}
	}
	else {
		alert('You must supply a DocID.');
	}
}


function importTranscriptions() {
	var params = {};
	
	var postData = {
		sessionHash  : $.cookie('ntvmrSession'),
		defeatecache : new Date().getTime()
	};

	if ($('#startButton').html() == 'Start') {
		postData.action         = 'start';
		postData.tfolder        = $('#tfolder').val();
		postData.tdoc           = $('#tdoc').val();
		postData.tclean         = $('#tclean').is(':checked') ? 'true' : 'false';
		postData.indexonly      = $('#indexonly').is(':checked') ? 'true' : 'false';
		postData.filetype       = $('input[name=fileType]:checked').val();
	}
	else {
		postData.action = 'stop';
	}
	params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
	params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postData);
	gadgets.io.makeRequest(serviceURL, function(o) {
//		$('#status').html(o.text);
	}, params);
}


function niceTime(millis) {
	var retVal = '';
	var secs = Math.round(millis / 1000);
	if (secs > 59) {
		var mins = Math.floor(secs / 60);
		secs = secs % 60;
		if (mins > 59) {
			var hours = Math.floor(mins / 60);
			mins = mins % 60;
			retVal = hours + ' hours ';
		}
		retVal += mins + ' mins ';
	}
	retVal += secs + ' secs ';

	return retVal;
}


function checkTFolder() {
	var params = {};
	
	var postData = {
		sessionHash   : $.cookie('ntvmrSession'),
		action        : 'checktfolder',
		tfolder       : $('#tfolder').val(),
		tdoc          : $('#tdoc').val(),
		filetype      : $('input[name=fileType]:checked').val(),
		defeatecache  : new Date().getTime()
	};
	
	params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
	params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postData);
	gadgets.io.makeRequest(serviceURL, function(o) {
		alert($.trim(o.text));
	}, params);
}


function updateStatus() {
	var params = {};
	
	var postData = {
		sessionHash   : $.cookie('ntvmrSession'),
		action        : 'status',
		defeatecache  : new Date().getTime()
	};
	
	params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
	params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(postData);
	gadgets.io.makeRequest(serviceURL, function(o) {

		var xml = $.parseXML(o.text);
		var text = '';

		$('#startButton').html($(xml).find('Running').text() == 'true'?'Stop':'Start');

		// if we're not running
		if ($('#startButton').html() == 'Start') {

			$('#percent').html('%');

			// if we've had a past run and status is available
			if ($(xml).find('TotalTranscriptions').text() != '-1') {
				text += 'Last Job Completed: ';
				text += new Date(parseInt($(xml).find('TimeStart').text()) + parseInt($(xml).find('TimeRunning').text())) + '<br/>';
			}
		}
		else {
			text += 'Started: ' + new Date(parseInt($(xml).find('TimeStart').text()))
			text += '; Estimated Completion: ' + new Date(parseInt($(xml).find('TimeEstimatedComplete').text())) + '<br/>';
			text += 'Currently Importing Transcription for DocumentID: ' + $(xml).find('CurrentDocumentID').text()
					+ ' Verse: ' + $(xml).find('CurrentVerse').text() + ';'
					+ ' Page: ' + $(xml).find('CurrentPageID').text() + '; Finished: ';
			$('#percent').html(
				'&nbsp;'+$(xml).find('CompletedPercent').text()+'%'+
				'<div class="statusBar" style="width:'+$(xml).find('CompletedPercent').text()+'%"></div>&nbsp;'
			);
		}

		if (text.length > 0) {
			text += $(xml).find('CompletedTranscriptions').text()
					+ ' / ' + $(xml).find('TotalTranscriptions').text() + ' Transcriptions; '
					+ ' (<a href="'+serviceURL+'?action=listbad" target="_blank" title="Show bad transcriptions">'+$(xml).find('BadTranscriptions').attr('size') + ' bad</a>)'
					+ ' Running Time: ' + niceTime(parseInt($(xml).find('TimeRunning').text()));
		}

		$('#statusText').html(text);

		setTimeout('updateStatus()', updateInterval);

	}, params);
}


function loaded() {

	var prefs = new gadgets.Prefs();
	var preferredHeight = parseInt(prefs.getString('height'));
	var defaultFolder = prefs.getString('defaultFolder');
	$('#tfolder').val(defaultFolder);

	if (gadgets.util.hasFeature('dynamic-height')) gadgets.window.adjustHeight(preferredHeight);

	var req = opensocial.newDataRequest(); 
	var p = {}; 

	p[opensocial.IdSpec.Field.USER_ID] = "VIEWER"; 
	var idSpec = opensocial.newIdSpec(p); 
	req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER), "viewer"); 
	req.send(function(data) {
		viewer = data.get("viewer").getData();
		updateStatus();
	});
}


if (gadgets.util.hasFeature('pubsub-2')) {
	gadgets.HubSettings.onConnect = function(hum, suc, err) { loaded(); };
}
else gadgets.util.registerOnLoadHandler(loaded);


</script>


]]>
</Content>
</Module>
