/*
* This file is part of Invenio.
* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 CERN.
*
* Invenio is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* Invenio is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Invenio; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*/
var gRecID1 = null;
var gRecID2 = null;
var gRecord2Mode = 'recid'; //'recid', 'file', 'revision'
var gResultListMode = 'search'; //null, 'search', 'revisions'
var gSearchResults = [[], [], []];
var gSearchResultsIndex = -1;
var gRevisions = [[], []];
var gRevisionsIndex = -1;
var gHash;
var gHASH_CHECK_INTERVAL = 150;
var gHashCheckTimerID;
var gMsgTimeout;
$(document).ready( function(){
initAJAX();
initPanel();
initContent();
gHashCheckTimerID = setInterval(initStateFromHash, gHASH_CHECK_INTERVAL);
});
function showMessage(msgType, message, timeToHide) {
hideMessage();
clearTimeout(gMsgTimeout);
$('#bibMergeMessage').removeClass();
if (msgType == 'LoadingMsg') {
message = message + ' ';
$('#bibMergeMessage').addClass('warning');
}
else if (msgType == 'OKMsg') {
$('#bibMergeMessage').addClass('warninggreen');
}
else if (msgType == 'ErrorMsg') {
$('#bibMergeMessage').addClass('warningred');
}
//$('#bibMergeMessage').html(message).show('drop','',500);
$('#bibMergeMessage').html(message).show();
//hide the message after some milliseconds if the parameter is set
if (typeof(timeToHide) != 'undefined')
hideMessage(timeToHide);
}
function hideMessage(timeout) {
if (typeof(timeout) != 'undefined') { //check if parameter was defined
gMsgTimeout = setTimeout(function(){
$('#bibMergeMessage').removeClass().hide().fadeOut();
}, timeout);
}
else //if parameter 'timeout' not set, then hide without delay
$('#bibMergeMessage').removeClass().hide().fadeOut();
}
function isValidRecid1(recid) {
var recnum = parseInt(recid);
if (isNaN(recnum) || recnum < 1 || recid.indexOf('.')>0)
return false;
return true;
}
function getRecid2Mode(recid) {
if (isValidRecid1(recid))
return 'recid';
else if ( isRevisionID(recid) )
return 'revision';
else if (recid=='tmp')
return 'tmpfile';
else if (recid=='none')
return 'none';
else
return false;
}
function initStateFromHash() {
if (window.location.hash == gHash)
return;
gHash = window.location.hash;
if (gHash == '') {
$('#bibMergeContent').html('Select two records to be compared from the side panel.');
return;
}
var parsedHash = deserializeHash(gHash);
if (parsedHash.recid1 && isValidRecid1(parsedHash.recid1)==true && parsedHash.recid2 && getRecid2Mode(parsedHash.recid2)!=false) {
ajaxGetRecordCompare(parsedHash.recid1, parsedHash.recid2);
return;
}
// if wrong parameters where given in the url:
$('#bibMergeContent').html('INVALID URL PARAMETERS');
}
function deserializeHash(aHash) {
var hashElements = {};
var args = aHash.slice(1).split('&');
var tmpArray;
for (var i=0, n=args.length; i 0 && !currTR.children('td').eq(1).attr('id')) {
sfinfo.subfield_lines++;
if ( currTR.children('td').eq(1).text() != '')
sfinfo.numOfSubfields1++;
if ( currTR.children('td').eq(3).text() != '')
sfinfo.numOfSubfields2++;
currTR = currTR.next('tr');
}
return sfinfo;
}
function onclickSubfieldDiff() {
var sfinfo = getSubfieldInfo( $(this) );
var currTR = $(this).parents('tr'); //the current row of the table
var value1 = currTR.children('td').eq(1).text();
var value2 = currTR.children('td').eq(3).text();
//if one of the subfields is empty
if (value1 == '' || value2 == '')
showMessage('ErrorMsg', 'One of the subfields is missing, no difference to show', 6000);
else if (value1 == value2)
showMessage('OKMsg', 'Subfields are identical, no difference to show', 6000);
else {
//ajax request to get the diffed row from server side
var _data = {
requestType: 'diffSubfield',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode,
fieldCode1: sfinfo.field1id,
fieldCode2: sfinfo.field2id,
sfindex1: sfinfo.sfindex1,
sfindex2: sfinfo.sfindex2
};
showMessage('LoadingMsg', 'Diffing subfields...');
ajaxRequest(_data, function(html){
var prevTR = currTR.prev('tr');
currTR.remove();
prevTR.after(html);
});
}
return false;
}
function onclickSubfieldDelete() {
var sfinfo = getSubfieldInfo( $(this) );
var currTR = $(this).parents('tr');
if (currTR.children('td').eq(1).text() == '') { //if subfield1 is empty
showMessage('ErrorMsg', 'Cannot delete subfield that doesn\'t exist', 6000);
return false;
}
if (sfinfo.numOfSubfields1 == 1) //if field has one subfield, then delete field
$("td#"+ sfinfo.field1id +" a.bibMergeFieldDelete").click();
else {
//ajax request to delete subfield on the server side
var _data = {
requestType: 'deleteSubfield',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode,
fieldCode1: sfinfo.field1id,
fieldCode2: sfinfo.field2id,
sfindex1: sfinfo.sfindex1,
sfindex2: sfinfo.sfindex2
};
showMessage('LoadingMsg', 'Deleting subfield...');
ajaxRequest(_data, function(html){} );
//perform deletion on the client side
if (currTR.children('td').eq(3).text() == '') //if subfield2 is empty
currTR.remove();
else
currTR.children('td').eq(1).empty();
currTR.children('td.bibMergeCellSimilarityGreen').attr('class', 'bibMergeCellSimilarityRed');
}
return false;
}
function onclickSubfieldReplace() {
var sfinfo = getSubfieldInfo( $(this) );
var currTR = $(this).parents('tr');
if (currTR.children('td').eq(3).text() == '') { //if subfield2 is empty
showMessage('ErrorMsg', 'Cannot replace subfield with one that doesn\'t exist', 6000);
return false;
}
if (currTR.children('td').eq(1).text() != '') { //if subfield1 is not empty
//ajax request to replace subfield on the server side
var _data = {
requestType: 'replaceSubfield',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode,
fieldCode1: sfinfo.field1id,
fieldCode2: sfinfo.field2id,
sfindex1: sfinfo.sfindex1,
sfindex2: sfinfo.sfindex2
};
showMessage('LoadingMsg', 'Replacing subfield...');
ajaxRequest(_data, function(html){} );
//perform replacement on the client side
currTR.children('td').eq(1).text( currTR.children('td').eq(3).text() );
currTR.children('td.bibMergeCellSimilarityRed').attr('class', 'bibMergeCellSimilarityGreen');
return false;
}
else {
currTR.children('td').eq(2).children('a.bibMergeSubfieldAdd').click();
}
return false;
}
function onclickSubfieldAdd() {
var sfinfo = getSubfieldInfo( $(this) );
var currTR = $(this).parents('tr');
if (currTR.children('td').eq(3).text() == '') { //if subfield2 is empty
showMessage('ErrorMsg', 'Cannot add subfield that doesn\'t exist', 6000);
return false;
}
if (sfinfo.numOfSubfields1 == 0) {//field1 doesn't exist
showMessage('ErrorMsg', 'Field in the first record doesn\'t exist. Use Add Field instead which creates a new field', 8000);
}
else {
if (currTR.children('td').eq(1).text() == '') //if subfield1 is empty
sfinfo.sfindex1++; //insertion should be before the next subfield that exists
//ajax add subfield before sfindex1 on the server side
var _data = {
requestType: 'addSubfield',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode,
fieldCode1: sfinfo.field1id,
fieldCode2: sfinfo.field2id,
sfindex1: sfinfo.sfindex1,
sfindex2: sfinfo.sfindex2
};
showMessage('LoadingMsg', 'Adding subfield...');
ajaxRequest(_data, function(html){} );
//perform addition of subfield on the client side
if (currTR.children('td').eq(1).text() != '') { //if subfield1 is not empty
//create another subfield line
currTR.after( ""+ currTR.html() +"
" );
currTR.next('tr').children('td').eq(3).empty();
currTR.next('tr').children('td.bibMergeCellSimilarityGreen').attr('class', 'bibMergeCellSimilarityRed');
}
currTR.children('td').eq(1).text( currTR.children('td').eq(3).text() ); //replace value
currTR.children('td.bibMergeCellSimilarityRed').attr('class', 'bibMergeCellSimilarityGreen');
}
return false;
}
function onclickFieldMerge() {
var fieldGroupDiv = $(this).parents('.bibMergeFieldGroupDiv');
var ftag = getFieldTag(fieldGroupDiv);
var fieldID1 = $(this).parents('tr').children('td').eq(1).attr('id');
var fieldID2 = $(this).parents('tr').children('td').eq(3).attr('id');
var _data = {
requestType: 'mergeField',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode,
fieldTag: ftag,
fieldCode1: fieldID1,
fieldCode2: fieldID2
};
showMessage('LoadingMsg', 'Merging Field...');
ajaxRequest(_data, function(html) {
var fnum = ftag.substring(0,3);
var fieldGroupsOfTag = $("div.bibMergeFieldGroupDiv[id*='-"+fnum+"']");
var prevDiv = fieldGroupsOfTag.eq(0).prev('.bibMergeFieldGroupDiv');
fieldGroupsOfTag.remove();
if (html != '') {
prevDiv.after(html);
initFieldGroupHeaders("div.bibMergeFieldGroupDiv[id*='-"+fnum+"'] .bibMergeHeaderFieldnum");
}
});
return false;
}
function onclickFieldDelete() {
var fieldGroupDiv = $(this).parents('.bibMergeFieldGroupDiv');
var ftag = getFieldTag(fieldGroupDiv);
var fieldID1 = $(this).parents('tr').children('td').eq(1).attr('id');
var fieldID2 = $(this).parents('tr').children('td').eq(3).attr('id');
var _data = {
requestType: 'deleteField',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode,
fieldTag: ftag,
fieldCode1: fieldID1,
fieldCode2: fieldID2
};
showMessage('LoadingMsg', 'Deleting Field...');
ajaxRequest(_data, function(html) {
var fnum = ftag.substring(0,3);
var fieldGroupsOfTag = $("div.bibMergeFieldGroupDiv[id*='-"+fnum+"']");
var prevDiv = fieldGroupsOfTag.eq(0).prev('.bibMergeFieldGroupDiv');
fieldGroupsOfTag.remove();
if (html != '') {
prevDiv.after(html);
initFieldGroupHeaders("div.bibMergeFieldGroupDiv[id*='-"+fnum+"'] .bibMergeHeaderFieldnum");
}
});
return false;
}
function onclickFieldAdd() {
var fieldGroupDiv = $(this).parents('.bibMergeFieldGroupDiv');
var ftag = getFieldTag(fieldGroupDiv);
var fieldID1 = $(this).parents('tr').children('td').eq(1).attr('id');
var fieldID2 = $(this).parents('tr').children('td').eq(3).attr('id');
var _data = {
requestType: 'addField',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode,
fieldTag: ftag,
fieldCode1: fieldID1,
fieldCode2: fieldID2
};
showMessage('LoadingMsg', 'Adding Field...');
ajaxRequest(_data, function(html) {
var fnum = ftag.substring(0,3);
var fieldGroupsOfTag = $("div.bibMergeFieldGroupDiv[id*='-"+fnum+"']");
//fieldGroupsOfTag.hide('drop','',500);
var prevDiv = fieldGroupsOfTag.eq(0).prev('.bibMergeFieldGroupDiv');
fieldGroupsOfTag.remove();
prevDiv.after(html);
initFieldGroupHeaders("div.bibMergeFieldGroupDiv[id*='-"+fnum+"'] .bibMergeHeaderFieldnum");
});
return false;
}
function onclickFieldReplace() {
var fieldGroupDiv = $(this).parents('.bibMergeFieldGroupDiv');
var ftag = getFieldTag(fieldGroupDiv);
var fieldID1 = $(this).parents('tr').children('td').eq(1).attr('id');
var fieldID2 = $(this).parents('tr').children('td').eq(3).attr('id');
var _data = {
requestType: 'replaceField',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode,
fieldTag: ftag,
fieldCode1: fieldID1,
fieldCode2: fieldID2
};
showMessage('LoadingMsg', 'Replacing Field...');
ajaxRequest(_data, function(html) {
var fnum = ftag.substring(0,3);
var fieldGroupsOfTag = $("div.bibMergeFieldGroupDiv[id*='-"+fnum+"']");
//fieldGroupsOfTag.hide('drop','',500);
var prevDiv = fieldGroupsOfTag.eq(0).prev('.bibMergeFieldGroupDiv');
fieldGroupsOfTag.remove();
prevDiv.after(html);
initFieldGroupHeaders("div.bibMergeFieldGroupDiv[id*='-"+fnum+"'] .bibMergeHeaderFieldnum");
});
return false;
}
function onclickFieldGroupMerge() {
var mergeType; //merging mode
if ( $(this).hasClass('bibMergeFieldGroupMergeNC') )
mergeType = 'mergeNCFieldGroup';
else
mergeType = 'mergeFieldGroup';
var fieldGroupDiv = $(this).parents('.bibMergeFieldGroupDiv');
var ftag = getFieldTag(fieldGroupDiv);
var _data = {
requestType: mergeType,
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode,
fieldTag: ftag
};
showMessage('LoadingMsg', 'Merging...');
ajaxRequest(_data, function(html) {
var fnum = ftag.substring(0,3);
var fieldGroupsOfTag = $("div.bibMergeFieldGroupDiv[id*='-"+fnum+"']");
//fieldGroupsOfTag.hide('drop','',500);
var prevDiv = fieldGroupsOfTag.eq(0).prev('.bibMergeFieldGroupDiv');
fieldGroupsOfTag.remove();
prevDiv.after(html);
initFieldGroupHeaders("div.bibMergeFieldGroupDiv[id*='-"+fnum+"'] .bibMergeHeaderFieldnum");
});
return false;
}
function onclickFieldGroupRefresh() {
var refType;
if ( $(this).hasClass('bibMergeFieldGroupDiff') )
refType = 'getFieldGroupDiff';
else
refType = 'getFieldGroup';
var fieldGroupDiv = $(this).parents('.bibMergeFieldGroupDiv');
var ftag = getFieldTag(fieldGroupDiv);
var _data = {
requestType: refType,
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode,
fieldTag: ftag
};
showMessage('LoadingMsg', 'Please wait...');
ajaxRequest(_data, function(html) {
var fnum = ftag.substring(0,3);
var fieldGroupsOfTag = $("div.bibMergeFieldGroupDiv[id*='-"+fnum+"']");
//fieldGroupsOfTag.hide('drop','',500);
var prevDiv = fieldGroupsOfTag.eq(0).prev('.bibMergeFieldGroupDiv');
fieldGroupsOfTag.remove();
prevDiv.after(html);
initFieldGroupHeaders("div.bibMergeFieldGroupDiv[id*='-"+fnum+"'] .bibMergeHeaderFieldnum");
});
return false;
}
function initFieldGroupHeaders(selector) {
$(selector).toggle(
function() {
$(this).parents(".bibMergeFieldGroupDiv").find(".bibMergeFieldTable").hide();
return false; },
function() {
$(this).parents(".bibMergeFieldGroupDiv").find(".bibMergeFieldTable").show();
return false;
}
);
}
function initPanel() {
$('#bibMergeRecInput1').focus();
$('#bibMergeMessage').hide();
onclickSelectSearch();
$('#bibMergeSelectSearch').click(onclickSelectSearch);
$('#bibMergeSelectDedupe').click(onclickSelectDedupe);
$('#bibMergeSelectRevisions').click(onclickSelectRevisions);
$('#bibMergeGetPrev').click(onclickGetPrev);
$('#bibMergeGetNext').click(onclickGetNext);
$('#bibMergeBtnCompare').click(compareRecords);
$('#bibMergeBtnSubmit').click(onclickSubmitButton);
$('#bibMergeBtnCancel').click(onclickCancelButton);
$('#bibMergeBtnSearch').click(onclickSearchButton);
$('#bibMergeRecCopy').click(onclickRecCopy);
$('#bibMergeRecMerge').click(onclickRecMerge);
$('#bibMergeRecMergeNC').click(onclickRecMergeNC);
$('#bibMergeLinkToBibEdit1').click(onclickLinkToBibEdit1);
$('#bibMergeLinkToBibEdit2').click(onclickLinkToBibEdit2);
$('.bibMergeMenuSectionHeader').toggle(menuSectionHeaderClose, menuSectionHeaderOpen);
// $('#bibMergeMethodSelect').change(onchangeMethodSelect);
onchangeMethodSelect();
$('#bibMergeSelectListRow select option').live('click', onclickSearchResult);
// Initialize menu positioning (poll for scrolling).
setInterval(positionMenu, 250);
$('#bibMergeRecInput1').keypress( function(event) {
if (event.keyCode == 13) //on press 'enter'
$('#bibMergeRecInput2').focus();
});
$('#bibMergeRecInput2').keypress( function(event) {
if (event.keyCode == 13) //on press 'enter'
compareRecords();
});
$('#bibMergeSearchInput').keypress( function(event) {
if (event.keyCode == 13) //on press 'enter'
$('#bibMergeBtnSearch').click();
});
$('#bibMergeMenuSectionCandidates div.bibMergeMenuSectionHeader').click();
$('#bibMergeMenuSectionActions div.bibMergeMenuSectionHeader').click();
}
function menuSectionHeaderOpen() {
$(this).parents('div.bibMergeMenuSection').find('table').show();
$(this).find('img').attr('src', "/img/bullet_toggle_minus.png");
}
function menuSectionHeaderClose() {
$(this).parents('div.bibMergeMenuSection').find('table').hide();
$(this).find('img').attr('src', "/img/bullet_toggle_plus.png");
}
function onclickRecCopy() {
var answer = confirm("Do you want to replace all fields of record1 with those of record2?");
if (!answer)
return false;
var _data = {
requestType: 'recCopy',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode
};
showMessage('LoadingMsg', 'Copying record2 to record1');
ajaxRequest(_data, function(html){
$('#bibMergeContent').html(html);
initFieldGroupHeaders('.bibMergeHeaderFieldnum'); //initialize all of them
});
return false;
}
function onclickRecMerge() {
var answer = confirm("Do you want to merge fields of record1 and record2 into record1?");
if (!answer)
return false;
var _data = {
requestType: 'recMerge',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode
};
showMessage('LoadingMsg', 'Merging record2 with record1');
ajaxRequest(_data, function(html){
$('#bibMergeContent').html(html);
initFieldGroupHeaders('.bibMergeHeaderFieldnum'); //initialize all of them
});
return false;
}
function onclickRecMergeNC() {
var answer = confirm("Do you want to merge non-conflicting fields of record1 and record2 into record1?");
if (!answer)
return false;
var _data = {
requestType: 'recMergeNC',
recID1: gRecID1,
recID2: gRecID2,
record2Mode: gRecord2Mode
};
showMessage('LoadingMsg', 'Merging record2 with record1');
ajaxRequest(_data, function(html){
$('#bibMergeContent').html(html);
initFieldGroupHeaders('.bibMergeHeaderFieldnum'); //initialize all of them
});
return false;
}
function buildSelectList(mode) {
var _list = null;
var _tmp;
var _optionsHtml = "";
if (mode=='forSearch') {
_list = gSearchResults;
for (var i=0, n=_list[0].length; i"+ _list[1][i] +"\n";
}
else {
_list = gRevisions;
for (var i=0, n=_list[0].length; i"+ _list[1][i] +"\n";
}
$('#bibMergeSelectListRow select').html(_optionsHtml);
}
function managePrevNextButtons(action) {
var _index;
var _list;
// take values from the correct global variable
if (gResultListMode == 'search') {
_index = gSearchResultsIndex;
_list = gSearchResults[0];
}
else if (gResultListMode == 'revisions') {
_index = gRevisionsIndex;
_list = gRevisions[0];
}
// perform requested action
if (action == 'hide') {
$('#bibMergeGetPrev').hide();
$('#bibMergeResultIndex').hide();
$('#bibMergeGetNext').hide();
}
else if (action == 'show') {
var _indexstr = '-';
if (_index >= 0)
_indexstr = _index+1;
$('#bibMergeResultIndex').html( _indexstr+'/'+_list.length);
$('#bibMergeGetPrev').show();
$('#bibMergeResultIndex').show();
$('#bibMergeGetNext').show();
}
else if (action == 'next') {
if (_index+1 < _list.length) {
_index++;
$('#bibMergeResultIndex').html( _index+1+'/'+_list.length);
$('#bibMergeRecInput2').val( _list[_index] );
$('#bibMergeSelectList option:eq('+ _index +')').attr('selected', 'selected');
compareRecords();
}
else
showMessage('ErrorMsg', 'Reached the end of list of candidate items', 6000);
}
else if (action == 'prev') {
if (_index-1 >= 0) {
_index--;
$('#bibMergeResultIndex').html( _index+1+'/'+_list.length);
$('#bibMergeRecInput2').val( _list[_index] );
$('#bibMergeSelectList option:eq('+ _index +')').attr('selected', 'selected');
compareRecords();
}
else
showMessage('ErrorMsg', 'Reached the end of list of candidate items', 6000);
}
//update the correct global variable
if (gResultListMode == 'search')
gSearchResultsIndex = _index;
else if (gResultListMode == 'revisions')
gRevisionsIndex = _index;
}
function ajaxRequestRevisions() {
var recid = gRecID1;
if (recid == null)
if ($('#bibMergeRecInput1').attr('value') != "")
recid = $('#bibMergeRecInput1').attr('value');
else {
showMessage('ErrorMsg', 'Select a record to get the revisions from', 6000);
return;
}
var _data = {
requestType: 'searchRevisions',
recID1: recid
};
showMessage('LoadingMsg', 'Retrieving revisions...');
$.ajax({
data: { jsondata: JSON.stringify(_data) },
success: function(json){
if (json['resultCode'] != 0){
showMessage('ErrorMsg', json['resultText'], 6000);
}
else {
gRevisions = json['results'];
gRevisionsIndex = -1;
buildSelectList('forRevisions');
managePrevNextButtons('show');
if (gRevisions.length == 0)
showMessage('ErrorMsg', 'No revisions found', 6000);
else
showMessage('OKMsg', json['resultText'], 6000);
}
}
});
}
function onclickSearchButton() {
var _query = $('#bibMergeSearchInput').attr('value');
var _data = {
requestType: 'searchCandidates',
query: _query
};
$.ajax({
data: {
jsondata: JSON.stringify(_data)
},
dataType: 'json',
success: function(json) {
if (json['resultCode'] != 0){
showMessage('ErrorMsg', json['resultText'], 6000);
}
else {
gSearchResults = json['results'];
gSearchResultsIndex = -1;
buildSelectList('forSearch');
managePrevNextButtons('show');
if (gSearchResults.length == 0)
showMessage('ErrorMsg', 'No results found', 6000);
else
showMessage('OKMsg', json['resultText'], 6000);
}
}
});
return false; //for the link not to be followed
}
function onclickGetPrev() {
managePrevNextButtons('prev');
return false;
}
function onclickGetNext() {
managePrevNextButtons('next');
return false;
}
function onclickSelectSearch() {
$('.bibMergeSelectListSelected').removeClass();
$('#bibMergeSelectSearch').addClass('bibMergeSelectListSelected');
$('#bibMergeSearchRow').show();
$('#bibMergeSelectListRow').show();
buildSelectList('forSearch');
gResultListMode = 'search';
managePrevNextButtons('show');
return false;
}
function onclickSelectDedupe() {
onclickSelectClose();
notImplemented();
return false;
}
function onclickSelectRevisions() {
$('.bibMergeSelectListSelected').removeClass();
$('#bibMergeSelectRevisions').addClass('bibMergeSelectListSelected');
$('#bibMergeSearchRow').hide();
$('#bibMergeSelectListRow').show();
//if list is empty or first result doesn't start with recid1
if (gRevisions.length==0 || gRevisions[0].indexOf(gRecID1+'.')==-1) {
ajaxRequestRevisions();
}
buildSelectList('forRevisions');
gResultListMode = 'revisions';
managePrevNextButtons('show');
return false;
}
function onclickSelectClose() {
$('.bibMergeSelectListSelected').removeClass();
$('#bibMergeSearchRow').hide();
$('#bibMergeSelectListRow').hide();
gResultListMode = null;
managePrevNextButtons('hide');
return false;
}
function onclickSearchResult() {
//find index of selected option
var _index = 0;
var currOpt = $(this).prev('option');
while(currOpt.html()!=null) {
_index++;
currOpt = currOpt.prev('option');
}
//set the value of record2 input field
if (gResultListMode == 'search') {
$('#bibMergeRecInput2').val( gSearchResults[0][_index] );
gSearchResultsIndex = _index;
}
else if (gResultListMode == 'revisions') {
$('#bibMergeRecInput2').val( gRevisions[0][_index] );
gRevisionsIndex = _index;
}
managePrevNextButtons('show');
compareRecords();
}
function onchangeMethodSelect() {
option = $("#bibMergeMethodSelect :selected").val();
switch(option) {
case "(none)":
$("#bibMergeSearchPanel").hide();
break;
case "Search":
$("#bibMergeSearchPanel").show();
break;
case "Revisions":
break;
}
}
function compareRecords() {
var recid1 = $('#bibMergeRecInput1').attr('value');
var recid2 = $('#bibMergeRecInput2').attr('value');
if (recid2 == "")
recid2 = 'none';
ajaxGetRecordCompare(recid1, recid2);
}
function ajaxGetRecordCompare(_recid1, _recid2) {
// validity check
if (!isValidRecid1(_recid1)) {
showMessage('ErrorMsg', 'Invalid record1', 6000);
return;
}
var _mode = getRecid2Mode(_recid2);
if (_mode == false) {
showMessage('ErrorMsg', 'Invalid record2', 6000);
return;
}
//ajax request
var _data = {
requestType: 'getRecordCompare',
recID1: _recid1,
recID2: _recid2,
record2Mode: _mode
};
showMessage('LoadingMsg', 'Please wait...');
panelDisabled(true);
ajaxRequest(_data, function(html) {
$('#bibMergeContent').html(html);
$('#bibMergeRecInput1').val(_recid1);
$('#bibMergeRecInput2').val(_recid2);
changeAndSerializeHash({recid1: _recid1, recid2: _recid2});
gRecID1 = _recid1;
gRecID2 = _recid2;
initFieldGroupHeaders('.bibMergeHeaderFieldnum'); //initialize all of them
panelDisabled(false);
});
}
function isRevisionID(str) {
if (str.indexOf('.') > -1) {
var _array = str.split('.');
if (_array.length==2 && !isNaN(_array[0]) && !isNaN(_array[1]) && _array[1].length==14)
return true;
}
return false;
}
function onclickSubmitButton() {
var checkbox = $('#bibMergeDupeCheckbox').attr('checked');
var _data = {
requestType: 'submit',
recID1: gRecID1
};
if (checkbox == true)
_data['duplicate'] = gRecID2;
showMessage('LoadingMsg', 'Submitting...');
ajaxRequest(_data, function(html){
window.location.hash = '';
});
if (checkbox == true)
$('#bibMergeDupeCheckbox').attr('checked', false);
}
function onclickCancelButton() {
var _data = {
requestType: 'cancel',
recID1: gRecID1
};
showMessage('LoadingMsg', 'Cancelling...');
ajaxRequest(_data, function(html){
window.location.hash = '';
});
}
function ajaxRequest(data, onSuccessFunc){
/* Create Ajax request. */
$.ajax({
data: { jsondata: JSON.stringify(data) },
success: function(json){
if (json['resultCode'] != 0){
showMessage('ErrorMsg', json['resultText'], 6000);
}
else {
onSuccessFunc(json['resultHtml']);
showMessage('OKMsg', json['resultText'], 6000);
}
}
});
}
function initAJAX() {
$.ajaxSetup(
{ cache: false,
dataType: 'json',
error: onError,
type: 'POST'
}
);
}
function positionMenu(){
/*
* Dynamically position menu based on vertical scroll distance.
*/
var newYscroll = $(document).scrollTop();
// Only care if there has been some major scrolling.
if (Math.abs(newYscroll - positionMenu.yScroll) > 10){
// If scroll distance is less then 200px, position menu in sufficient
// distance from header.
if (newYscroll < 200)
$('#bibMergePanel').animate({
'top': 220 - newYscroll}, 'fast');
// If scroll distance has crossed 200px, fix menu 50px from top.
else if (positionMenu.yScroll < 200 && newYscroll > 200)
$('#bibMergePanel').animate({
'top': 50}, 'fast');
positionMenu.yScroll = newYscroll;
}
}
// Last Y-scroll value
positionMenu.yScroll = 0;
function notImplemented() {
showMessage('ErrorMsg', 'Please ask the developer to hurry up and implement this feature!', 6000);
return false;
}
function onError(XHR, textStatus, errorThrown) {
panelDisabled(false);
$('#bibMergeContent').html('Request completed with status ' + textStatus
+ '\nResult: ' + XHR.responseText
+ '\nError: ' + errorThrown);
}
function getFieldTag(fieldGroupDiv) {
return fieldGroupDiv.children(":first-child").children(":first-child").text();
}
function onclickLinkToBibEdit1() {
if (gHash!='' && gRecID1!=null)
window.location = '/record/edit/#state=edit&recid='+gRecID1;
else
showMessage('ErrorMsg', 'A valid record id must be selected', 6000);
return false;
}
function onclickLinkToBibEdit2() {
if (gHash!='' && gRecord2Mode=='recid' && gRecID2!=null)
window.location = '/record/edit/#state=edit&recid='+gRecID2;
else
showMessage('ErrorMsg', 'A valid record id must be selected', 6000);
return false;
}
function panelDisabled(disabled) {
if (disabled == true)
$('#bibMergePanel').find('button, input, optgroup, option, select, textarea').attr('disabled', true);
else
$('#bibMergePanel').find('button, input, optgroup, option, select, textarea').removeAttr('disabled');
}