<?xml version="1.0" encoding="UTF-8"?> <Module>
  <ModulePrefs
	title="Reconciler"
	title_url="http://ntvmr.uni-muenster.de"
	author_email="c.j.smith@bham.ac.uk"
	author="Catherine Smith"
	description="Tool for reconciling two transcription files"
	screenshot="http://ntvmr.uni-muenster.de/community/images/listescreenshot.png"
	thumbnail="http://ntvmr.uni-muenster.de/community/images/pageicon.gif"
	scrolling="true"
   >



  <Optional feature="dynamic-height"/>
  <Optional feature="opensocial-0.8"/>

</ModulePrefs>

<UserPref name="height" datatype="enum" display_name="Gadget Height" default_value="600">
	<EnumValue value="200" display_value="Short"/>
	<EnumValue value="400" display_value="Medium"/>
	<EnumValue value="600" display_value="Tall"/>
</UserPref>

<Content type="html">
<![CDATA[


<%@ include file="/modules/reconciler/reconciler.html" %>

<script type="text/javascript">
var myURL;


function stripExtension(fileName) {
	if (fileName.indexOf('.')) {
		return fileName.substring(0, fileName.lastIndexOf('.'));
	}
}

function loaded() {
	var prefs = new gadgets.Prefs();
	var preferredHeight = parseInt(prefs.getString('height'));
	if (gadgets.util.hasFeature('dynamic-height')) gadgets.window.adjustHeight(preferredHeight);
	myURL = URI('./').absoluteTo(gadgets.util.getUrlParameters()['url']);

  $( "#saveRecon" ).dialog({
    autoOpen: false,
    width: 300,
    height: 200,
    modal: true,
    buttons: {
        "Ok": function() {
            $( this ).dialog( "close" );
		  saveReconciliationToDatastore();
        },
        "Cancel" : function() {
            $( this ).dialog( "close" );
        }
    },
    open: function() {
	if (file1 && file2) {
	 setReconName(stripExtension(file1.name)+'_'+stripExtension(file2.name)+'.txt');
	}
    },
    close: function() {
    }
  });

	populateSavedReconList();

}

function fixReconName(name) {
	return name.replace(/[\(\) ]/g, '_');
}
function getReconName() {
	return fixReconName($('#reconName').val());
}
function setReconName(name) {
	$('#reconName').val(fixReconName(name));
}

function saveReconciliation() {
	$('#saveRecon').dialog( 'open' );
}


var viewer = null;

function populateSavedReconList() {
	savedRecons = {}
	var req = opensocial.newDataRequest(); 
	var fields = [ '*' ]; 
	var p = {}; 

	p[opensocial.IdSpec.Field.USER_ID] = "VIEWER"; 
	var idSpec = opensocial.newIdSpec(p); 
	req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER), "viewer"); 
	req.add(req.newFetchPersonAppDataRequest(idSpec, fields), "viewer_data"); 
	req.send(function(data) {
		var mydata = data.get("viewer_data");
		viewer = data.get("viewer").getData();

		if (mydata.hadError()) {
			return;
		}
//opensocial.DataRequest.PeopleRequestFields.APP_DATA
		var items = '<option value="">Select</option>';
		for (var i in mydata.getData()[viewer.getId()] ) {
			var file = i.replace(/^PUBLISHED_[0-9]+recon-(.*)/, '$1');
			if (file != i) {
//				items += '<option>'+i+'</option>';
				items += '<option>'+file+'</option>';
			}
		}
		$('#savedRecons').html(items);
	});
}

function loadRecon() {
	var file = $('#savedRecons').val();
	var req = opensocial.newDataRequest(); 
	var fields = [ 'recon-'+file ]; 
	var p = {}; 

	p[opensocial.IdSpec.Field.USER_ID] = "VIEWER"; 
	var idSpec = opensocial.newIdSpec(p); 
	req.add(req.newFetchPersonAppDataRequest(idSpec, fields), "viewer_data"); 
	req.send(function(data) {
		var mydata = data.get("viewer_data");
		if (mydata.hadError()) {
			return;
		}
		uploadReconciliationData(mydata.getData()[viewer.getId()]['recon-'+file]);
		 setReconName(file);
	});
}

function exportRecon() {
	var textString = getReconciliationString();
	var filename = getReconName();
	if (file1 && file2) {
		filename = stripExtension(file1.name)+'_'+stripExtension(file2.name)+'.txt';
	}
	var form = document.createElement("form");
	form.setAttribute("method", "post");
	form.setAttribute("action", myURL+'/export.jsp');
	form.setAttribute("target", "_blank");

	var hiddenField = document.createElement("input");              
	hiddenField.setAttribute("type", "hidden");
	hiddenField.setAttribute("name", "body");
	hiddenField.setAttribute("value", textString);
	form.appendChild(hiddenField);
	hiddenField = document.createElement("input");              
	hiddenField.setAttribute("type", "hidden");
	hiddenField.setAttribute("name", "filename");
	hiddenField.setAttribute("value", filename);
	form.appendChild(hiddenField);
	document.body.appendChild(form);
	form.submit();
}

function saveReconciliationToDatastore() {
	var blob = getReconciliationString();

	// currently we store to the portal user's personal data store, but eventually we'd like to
	// store to the transcription repository
	var req = opensocial.newDataRequest();
	req.add(req.newUpdatePersonAppDataRequest("VIEWER", 'recon-'+getReconName(), blob));
	req.send(function(data) {
		if (data.hadError()) {
			alert(data.getErrorMessage());
			return;
		}
		alert("Changes are saved.");
		populateSavedReconList();
	});
}


gadgets.util.registerOnLoadHandler(loaded);

</script>

	<div id="saveRecon" title="Save Reconciliation">
		Filenames may not contain spaces or symbols<br/>
		Filename: <input type="text" id="reconName">
	</div>


]]>
</Content>
</Module>
