This is an HTML version of an attachment to the Freedom of Information request 'Contract details of latest ERP Gold Programme Manager'.

/**
* The goal of the registerEvent framework is to permit to register several function to the window.onload
* and window.onresize event.<b>
*/
var _registeredEvents = new Array();

function RegisteredEvent(eventType, fnction) {
this.fnction = fnction;
this.eventType = eventType.toLowerCase();
}

/**
* The goal of the registerEvent() function is to permit to register several function to the window.onload
* and window.onresize event.<b>
*/
function registerEvent(eventType, fnction) {
var fnt;
if (typeof(fnction)=="function") {
fnt = fnction;
} else if (typeof(fnction)=="string") {
fnt = new Function(fnction);
} else {
alert("could only register function !!!");
return;
}
//alert("Registering '" + eventType + "' function '" + fnt + "'");
_registeredEvents[_registeredEvents.length] = new RegisteredEvent(eventType, fnt);
};

function _callRegisteredEvents(eventType) {
var i;
for (i = 0; i<_registeredEvents.length; i++) {
var registeredEvent = _registeredEvents[i];
if (eventType == registeredEvent.eventType) {
//alert("Calling '" + eventType + "' function '" + registeredEvent.fnction + "'");
registeredEvent.fnction();
//alert("Called");
}
}
}

//window.status = "Loading page...";
window.onload = new Function("_callRegisteredEvents('onload')");
//window.onresize = function() {_callRegisteredEvents("onresize");};
//registerEvent("onload", new Function("window.status = 'Page successfully loaded...'"));
window.registerEventLoaded = true;

/**
* Submit the page, after have setting the correct action id in the hidden field with id 'action' (created by template.jsp).
*/
function $do(actionId, additionalParams, checkChanges, disableLoading) {
$do(actionId, additionParams, checkChanges, disableLoading, "_self");
}

function $do(actionId, additionalParams, checkChanges, disableLoading, target, url) {
if (target == null) {
target = "_self";
} else if (target == "_blank") {
disableLoading = true;
}
doAction(actionId, additionalParams, checkChanges, disableLoading, target, url);

return;
}

/**
* Submit the page, after have setting the correct action id in the hidden field with id 'action' (created by template.jsp).
*/
function doAction(actionId, additionalParams, checkChanges, disableLoading, target, url) {
var mainForm = document.getElementById("mainForm");
mainForm.target = target;
mainForm.getAttributeNode("action").value = (url != null ? url : "?")+additionalParams;
if(checkChanges && hasElementChanged){
document.getElementById('action').value = actionId;
//document.getElementById('jsEnabled').value = "true";
try {
generateBoxComponent('','');
} catch (e) {
//ignore showdiv error: we want to execute action !
alert(e.toString());
}
return ;
}
submitPageWithAction(actionId, disableLoading);
// reset for next click in original tab in case of new tab was opened
mainForm.target = '_self';
}
/**
* Prevent submitting the form before onclick event provide correct action to the form
*
*/
function disableOnsubmit(boo){
if (!boo){
document.getElementById('mainForm').onsubmit = function onsubmit(event) {
//Nothing for onsubmit
} ;
} else{
document.getElementById('mainForm').onsubmit = function onsubmit(event) {
return false;
} ;
}
}

/**
* Submit the page, after have setting the correct action id in the hidden field with id 'action' (created by template.jsp).
*/
function submitPageWithAction(actionId, disableLoading) {
if (!disableLoading) {
try {
showDiv('loading');
} catch (e) {
//ignore showdiv error: we want to execute action !
}
}
document.getElementById('action').value = actionId;
//document.getElementById('jsEnabled').value = "true";
document.getElementById('mainForm').submit();
}
/**
* This function create and display the question box component
* @param yesFunction : the function called on YES click
* @param noFunction : the function called on NO click
*/
function generateBoxComponent(yesFunction, noFunction){
var yesDefault="document.getElementById('mainForm').submit();";
var noDefault="$('#myModal').modal('hide');";
//var box = document.getElementById("boxComponent");
//box.innerHTML = "<div class='boxComponent alert alert-info'><div class='top'><span>"+tradNotification+"</span></div><div class='middle'><p>"+tradPageChanged+"<br/>"+tradUnsavedLost+"</p></div><div class='bottom'><legend>"+tradValidation+"</legend><input type='button' class='btn btn-default btn-sm' value='"+tradOk+"' onclick=\""+yesDefault+" \"/><input type='button' class='btn btn-default btn-sm' value='"+tradCancel+"' onclick=\""+noDefault+"\"/></div></div>";
var box= document.getElementById('modal-header');
box.innerHTML="";
box.innerHTML="<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button><span>"+tradNotification+"</span>";
box = document.getElementById('modal-body');
box.innerHTML="";
box.innerHTML = "<p>"+tradPageChanged+"<br/>"+tradUnsavedLost+"</p>";
box = document.getElementById('modal-footer');
box.innerHTML="";
box.innerHTML = "<input type='button' class='btn btn-default btn-sm btn-primary-native margin-right-5' value='"+tradOk+"' onclick=\""+yesDefault+" \"/><input type='button' class='btn btn-default btn-sm' value='"+tradCancel+"' onclick=\""+noDefault+"\"/>";
// showDiv("boxComponent");
$('#myModal').modal({
show: true,
backdrop: 'static'
});
$('#myModal').on('shown.bs.modal', function () {
// Focus first input of modal for accessibility
$(this).find('input').first().focus();

var inputs = $(this).find('select, input, textarea, button, a').filter(':visible');
var firstInput = inputs.first();
var lastInput = inputs.last();

/*redirect last tab to first input*/
lastInput.on('keydown', function (e) {
if ((e.which === 9 && !e.shiftKey)) {
e.preventDefault();
firstInput.focus();
}
});

/*redirect first shift+tab to last input*/
firstInput.on('keydown', function (e) {
if ((e.which === 9 && e.shiftKey)) {
e.preventDefault();
lastInput.focus();
}
});
});
}
/**
* This function create a datepicker icon next to relevant input
*/
function writeDatepicker(field, displayClass, imgId){
document.write(' <img id="'+imgId+'" src="'+calendarUrl+'" style="visibility:'+displayClass+'" alt="datepicker" onclick="displayDatePicker(\''+field+'\', false, \'dmy\', \'-\');" />');
}
/**
* This function create a bookmark icon
*/
function writeBookmarkDocument(imgSrc, title, bmName, bmUrl){
var favName = bmName;
favName = favName.replace(/\"/g,"&quot;");
favName = favName.replace(/'/g,"\\'");
document.write("<a href=\"javascript:;\" onclick=\"bookmarkPage('"+favName+"','"+bmUrl+"')\" class=\"icon\"><img src='"+imgSrc+"' alt='"+title+"' title='"+title+"' style=\"vertical-align:baseline;\"/></a>");
}
/**
* Add automatically the provided url in the browser bookmark
* Inform user when browser is not compatible
*/
function bookmarkPage(name, url){
if(name==null || url==null){
alert("Error 1\n"+tradErrorBookmarkPage);
return;
}
if (url != null && url.indexOf("http:") < 0){
alert("Error 2\n"+tradErrorBookmarkPage);
return;
}
if(window.external && !window.sidebar && navigator.userAgent.toLowerCase().indexOf('chrome')< 0) { // add IE favorite
external.AddFavorite(url,name);
} else if(window.sidebar && sidebar.addPanel && navigator.userAgent.toLowerCase().indexOf('chrome')< 0) { // add to FF bookmarks
sidebar.addPanel(name,url,'');
} else { // unknown browser: report user
alert(tradErrorBookmarkPage);
}
}
/**
* Enable/disable 'exact date' and 'from/to date' inputs
*/
function switchDateChoice(){
var publicationDate = document.getElementsByName("searchCriteria.publicationDate")[0];
var publicationDateChoice = document.getElementsByName("searchCriteria.publicationDateChoice")[0];
var fromPublicationDate = document.getElementsByName("searchCriteria.fromPublicationDate")[0];
var toPublicationDate = document.getElementsByName("searchCriteria.toPublicationDate")[0];
if(!publicationDateChoice.checked){
//disable exact publication date
publicationDate.disabled = "disabled";
publicationDate.value = "";
fromPublicationDate.disabled = "";
toPublicationDate.disabled = "";
} else {
publicationDate.disabled = "";
fromPublicationDate.disabled = "disabled";
toPublicationDate.disabled = "disabled";
fromPublicationDate.value = "";
toPublicationDate.value = "";
}
}

/**
* Show html element with provided id over a standard background
*/
function showDiv(divId){
document.getElementById('foreground').style.height = "0px";/*document.getElementById("footer").offsetTop+100+"px";*/
document.getElementById('foreground').style.top = "0px";
document.getElementById('foreground').style.left = "0px";
document.getElementById(divId).style.left = "0";
if(divId.indexOf("loading")>-1){
//document.getElementById(divId).innerHTML = loadingContent;
document.getElementById(divId).style.left = "43%";
}
//hide <select> useful for ie6
var selects = document.getElementsByTagName("select");
for (var i = 0; i < selects.length; i++) {
selects[i].style.visibility ="hidden";
}
}

function checkNotMiddleOrKeyClick(e){
var evt=window.event? event : e;
var middleClick = false;
//check if middle mouse click was performed
if (evt.which){
middleClick = (evt.which == 2);
} else if (evt.button){
//following definition W3C: middle = 1, Microsoft: middle = 4
middleClick = (evt.button == 1 || evt.button == 4);
}
shiftPressed = evt.shiftKey;
altPressed = evt.altKey;
ctrlPressed = evt.ctrlKey;
//hide div because onload is not correctly handled in chrome when middle click and not correctly handled in chrome
//and firefox when ctrl-left click, so load will freeze the old tab in chrome when opening a new tab
if (middleClick ||shiftPressed || altPressed || ctrlPressed){
return false;
} else {
return true;
}
}

/**
* Hide background and html element with provided id
*/
function hideDiv(divId){
document.getElementById('foreground').style.height = "0px";
document.getElementById('foreground').style.top = "-10000px";
document.getElementById('foreground').style.left = "-10000px";
document.getElementById(divId).style.left = "-10000px";
var selects = document.getElementsByTagName("select");
for (var i = 0; i < selects.length; i++) {
selects[i].style.visibility ="visible";
}
}

var currentElementValue="";
var hasElementChanged = false;
/**
* This function set a boolean variable when the user change inputs value
* onfocus set default value
* onblur check if the value has changed
*/
function formElementFocus(el){
if(el.type.indexOf("text")> -1){ // value for input type=text
currentElementValue=el.value;
} else { // selectedIndex for select
currentElementValue=el.selectedIndex;
}
}
function formElementBlur(el){
if(el.type.indexOf("text")> -1){
if (currentElementValue != el.value){
hasElementChanged = true;
}
} else {
if (currentElementValue != el.selectedIndex){
hasElementChanged = true;
}
}
}
/**
* Special check for checkbox change
*/
function formCheckboxChange(el){ // any change in checkbox make the boolean true > (google does not support focus/blur on checkbox)
hasElementChanged = true;
}
/**
* This function create a 'plus' icon next to relevant inputs
*/
function writePickLink(refDataId, title, inputId){
// NFL: Keep the type="button" else error.
document.write('<div class="input-group-addon input-group-addon-search-plus pickButton"><button title="'+title+'" onclick="startPickRefData(\'' + refDataId + '\', \''+inputId+'\')" class="button-search-plus" type="button"><span class="icon-plus-square-o no-padding" /></button></div>');
}
function writeFilterButton(refDataId){
document.write("<div class='buttonContainer'><div class='leftButtonPart'><input value='"+tradFilter+"' title='"+tradFilter+"' class='btn btn-primary btn-primary-native btn-xs' onclick=\"filterFromBrowse('"+refDataId+"')\" type='button'></div></div>");
}

var ajaxProcessing = false;
var originalInputId="";
var generateFunction ="";
var useDescriptionMap = new Array();
var displayKeyMap = new Array();
var displayFirstLevelKeyMap = new Array();
var loadingImg="<br/><i class=\"fa fa-spinner fa-spin\" style='margin-left:30px;'></i>";
var loadingImg2="<br/><i class=\"fa fa-spinner fa-spin\" style='margin-left:30px;'></i>";
/**
* This method is called when a user clicks on a pick link (when javascript is enable). This is the main entry point for the AJAX workflow.
* @return always false
*/
function startPickRefData(refDataId,inputId) {
if (ajaxProcessing == true) {
window.status = "Action cancelled: can't process send 2 ajax request at the same time";
return false;
}
//generateFunction = "generateLiContent1";
generateFunction = "fromSearch";
//showDiv('loading');
//set the id of the linked input text
originalInputId=inputId;
//set the 'ajax' processing page variable to true, in order to avoid several simultaneous ajax processing.
ajaxProcessing = true;
//send init ajax request
var ajaxUrl = refDataAjaxServiceBaseUrl + 'action=loadInitialTree&refDataId=' + encodeURIComponent(refDataId);
sendAjaxRequest(ajaxUrl, onLoadInitialRefDataCallBack);
//register the process
return false;
}
/**
* This is to handle the AJAX call feedback.
* @param ajaxResponse The AJAX call feedback
*/
function onLoadInitialRefDataCallBack(ajaxResponse) {
var dynamic="";
var footer="</div></fieldset></div>";
ajaxProcessing = false;
//alert('On ajax callback:' + ajaxResponse.refDataId);
//alert('On ajax callback:' + ajaxResponse.children.length);
//document.getElementById("jsContainer").innerHTML="";
var refDataId=ajaxResponse.refDataId;
displayKeyMap[refDataId] = ajaxResponse.displayKey;
displayFirstLevelKeyMap[refDataId] = ajaxResponse.displayFirstLevelKey;
useDescriptionMap[refDataId]=ajaxResponse.useDescription;
var header ="";
header="<div id=\"jsContainer\" class=\"jsContainer\">";
header+=generateHeader(ajaxResponse.isHierarchical, ajaxResponse.ajaxWindowTitle, refDataId);
// if hierarchical > generate tree
if(ajaxResponse.isHierarchical){
dynamic = generateChildren(ajaxResponse, refDataId, true);
}
// else generate simple list
else{
dynamic = generateList(ajaxResponse, refDataId);
}
//alert(ajaxResponse.children[child].description);
//expandNode(ajaxResponse.refDataId, ajaxResponse.children[0].key);
document.getElementById("modal-header").innerHTML="";
document.getElementById("modal-header").innerHTML="<button type=\"button\" class=\"close\" data-dismiss=\"modal\">&times;</button><br/>";
document.getElementById("modal-body").innerHTML="";
document.getElementById("modal-footer").innerHTML="";
document.getElementById("modal-body").innerHTML=header+dynamic+footer;
var box= document.getElementById('modal-footer');
box.innerHTML="<button type=\"button\" class=\"btn btn-primary btn-sm btn-primary-native margin-right-5\" onclick=\"fillInput();\" >"+tradOk+"</button><button type=\"button\" class=\"btn btn-default btn-sm\" data-dismiss=\"modal\">"+tradCancel+"</button>";
$('#myModal').modal({
show: true,
backdrop: 'static'
});
$('#myModal').on('shown.bs.modal', function () {
// Focus first input of modal for accessibility
$(this).find('input').first().focus();

var inputs = $(this).find('select, input, textarea, button, a').filter(':visible');
var firstInput = inputs.first();
var lastInput = inputs.last();

/*redirect last tab to first input*/
lastInput.on('keydown', function (e) {
if ((e.which === 9 && !e.shiftKey)) {
e.preventDefault();
firstInput.focus();
}
});

/*redirect first shift+tab to last input*/
firstInput.on('keydown', function (e) {
if ((e.which === 9 && e.shiftKey)) {
e.preventDefault();
lastInput.focus();
}
});
});
}

var isFilteredTree = false;
function resetTree(scope) {
var ajaxUrl = refDataAjaxBrowseServiceBaseUrl + 'action=updateSearchScope&searchScope=' + scope.value;
sendAjaxRequest(ajaxUrl, onResetTreeCallBack);
return false;
}
function onResetTreeCallBack(ajaxResponse) {
ajaxProcessing = false;
var funcs = ajaxResponse.split("|");
for (var i=0; i < funcs.length; i++ ){
if(funcs[i].indexOf("COUNTRY") > -1){
loadCountryTree(funcs[i],isFilteredTree);
} else {
loadFilterTree(funcs[i]);
}
}
}

/**
* This method is called on onload event of browsing page.
*/
function loadCountryTree(refDataId, filteredTree) {
isFilteredTree = filteredTree;
document.getElementById("leftTree").innerHTML=loadingImg;
//generateFunction = "generateLiContent2";
generateFunction = "fromBrowse";
//showDiv('loading');
var ajaxUrl = refDataAjaxBrowseServiceBaseUrl + 'action=loadInitialTree&refDataId=' + encodeURIComponent(refDataId)+"&filteredTree="+filteredTree;
sendAjaxRequest(ajaxUrl, onLoadCountryTreeCallBack);
return false;
}
function onLoadCountryTreeCallBack(ajaxResponse) {
var dynamic="";
ajaxProcessing = false;
var refDataId=ajaxResponse.refDataId;
displayKeyMap[refDataId] = ajaxResponse.displayKey;
dynamic = generateChildren(ajaxResponse, ajaxResponse.refDataId, true);
document.getElementById("leftTree").innerHTML=dynamic;
//hideDiv('loading');
}
/**
* This method is called on onload event of browsing page. Only for filterable tree.
*/
function loadFilterTree(refDataId) {
document.getElementById("filterTree").innerHTML=loadingImg;
//generateFunction = "generateLiContent2";
generateFunction = "fromBrowse";
//showDiv('loading');
var ajaxUrl = refDataAjaxBrowseServiceBaseUrl + 'action=loadInitialTree&refDataId=' + encodeURIComponent(refDataId);
sendAjaxRequest(ajaxUrl, onLoadFilterTreeCallBack);
return false;
}
function onLoadFilterTreeCallBack(ajaxResponse) {
var dynamic="";
ajaxProcessing = false;
var refDataId=ajaxResponse.refDataId;
displayKeyMap[refDataId] = ajaxResponse.displayKey;
displayFirstLevelKeyMap[refDataId] = ajaxResponse.displayFirstLevelKey;
dynamic = generateChildren(ajaxResponse, ajaxResponse.refDataId, true);
document.getElementById("filterTree").innerHTML=dynamic;
//hideDiv('loading');
}
/**
* This method is called when a user clicks on a expand link in the AJAX tree from browse feature.
*/
function expandBrowseNode(refDataId, key, keyId) {
var elId="k"+keyId;
document.getElementById(elId).innerHTML+=loadingImg2;
var ajaxUrl = refDataAjaxBrowseServiceBaseUrl + 'action=expand&refDataId=' + encodeURIComponent(refDataId) + '&key=' + encodeURIComponent(key)+ '&keyId=' + encodeURIComponent(keyId);
var fnc = new Function("xx", "var elId='" + elId + "'; onExpandNodeRefDataCallBack(xx, elId, '"+refDataId+"');");
sendAjaxRequest(ajaxUrl, fnc);
}
/**
* This method is called when a user clicks on a expand link in the AJAX tree from browse feature.
*/
function expandBrowseNode(refDataId, key, keyId, parents) {
var elId="k"+keyId;
document.getElementById(elId).innerHTML+=loadingImg2;
var ajaxUrl = refDataAjaxBrowseServiceBaseUrl + 'action=expand&refDataId=' + encodeURIComponent(refDataId) + '&key=' + encodeURIComponent(key)+ '&keyId=' + encodeURIComponent(keyId) + '&parents=' + encodeURIComponent(parents);
var fnc = new Function("xx", "var elId='" + elId + "'; onExpandNodeRefDataCallBack(xx, elId, '"+refDataId+"');");
sendAjaxRequest(ajaxUrl, fnc);
}
/**
* These methods are called when a user clicks on a expand link in the AJAX tree.
*/
function expandNode(refDataId, key, keyId) {
var elId="k"+keyId;
document.getElementById(elId).innerHTML+=loadingImg2;
var ajaxUrl = refDataAjaxServiceBaseUrl + 'action=expand&refDataId=' + encodeURIComponent(refDataId) + '&key=' + encodeURIComponent(key)+ '&keyId=' + encodeURIComponent(keyId);
var fnc = new Function("xx", "var elId='" + elId + "'; onExpandNodeRefDataCallBack(xx, elId, '"+refDataId+"');");
sendAjaxRequest(ajaxUrl, fnc);
}
function expandFilterNode(refDataId, key, keyId) {
var elId="k"+keyId;
document.getElementById(elId).innerHTML+=loadingImg2;
var ajaxUrl = refDataAjaxServiceBaseUrl + 'action=expandFilter&refDataId=' + encodeURIComponent(refDataId) + '&key=' + encodeURIComponent(key)+ '&keyId=' + encodeURIComponent(keyId);
var fnc = new Function("xx", "var elId='" + elId + "'; onExpandNodeRefDataCallBack(xx, elId, '"+refDataId+"');");
sendAjaxRequest(ajaxUrl, fnc);
}
function onExpandNodeRefDataCallBack(ajaxResponse, elId, refDataId) {
var dynamic="";
ajaxProcessing = false;
dynamic = generateChildren(ajaxResponse,refDataId, false);
document.getElementById(elId).innerHTML=dynamic;
}
function updateRightTree(refDataId, key) {
document.getElementById("filterTree").innerHTML=loadingImg;
var ajaxUrl = refDataAjaxBrowseServiceBaseUrl + 'action=loadRightTree&refDataId=' + encodeURIComponent(refDataId) +'&key=' + encodeURIComponent(key);
sendAjaxRequest(ajaxUrl, onUpdateRightTreeCallBack);
}
function onUpdateRightTreeCallBack(ajaxResponse) {
var dynamic="";
ajaxProcessing = false;
dynamic = generateChildren(ajaxResponse,ajaxResponse.refDataId, true);
document.getElementById("filterTree").innerHTML=dynamic;
$("#filterTree").find("a").first().focus();
}
/**
* This method is called when a user clicks on the filter button from browse pages.
*/
function filterFromBrowse(refDataId) {
if (document.getElementById("searchKey").value == ""){
loadFilterTree(refDataId);
} else {
document.getElementById("filterTree").innerHTML=loadingImg;
var ajaxUrl = refDataAjaxBrowseServiceBaseUrl;
//sendAjaxRequest(ajaxUrl, onFilterFromBrowseCallBack);
sendPostAjaxRequest(ajaxUrl, onFilterFromBrowseCallBack, 'action=find&refDataId=' + encodeURIComponent(refDataId) + '&key=' + encodeURIComponent(document.getElementById("searchKey").value));
}
}
function onFilterFromBrowseCallBack(ajaxResponse){
var dynamic="";
ajaxProcessing = false;
dynamic = generateChildren(ajaxResponse, ajaxResponse.refDataId, true);
document.getElementById("filterTree").innerHTML=dynamic;
}
/**
* This method is called when a user clicks on the filter button from search pages.
*/
function findNode(refDataId) {
if (document.getElementById("treeFilter").value == ""){
startPickRefData(refDataId,originalInputId);
} else{
document.getElementById("overflow").innerHTML="<div style='text-align:center'>"+loadingImg+"</div>";
var ajaxUrl = refDataAjaxServiceBaseUrl ;
//sendAjaxRequest(ajaxUrl, onFindNodeRefDataCallBack);
sendPostAjaxRequest(ajaxUrl, onFindNodeRefDataCallBack,'action=find&refDataId=' + encodeURIComponent(refDataId) + '&key=' + encodeURIComponent(document.getElementById("treeFilter").value));
}
}

function onFindNodeRefDataCallBack(ajaxResponse){
var dynamic="";
ajaxProcessing = false;
dynamic = generateChildren(ajaxResponse, ajaxResponse.refDataId, true);
document.getElementById("overflow").innerHTML=dynamic;
}
/**
* This function generate the AJAX tree
*/
function generateChildren(subChildren, refDataId, isFirstLevel){
var dynamic="";
var specialStyle="";
if(subChildren.exception != null){
return "<p class='red bold' style='margin-left:10%'>"+subChildren.exception+"</p>";
}
if((subChildren.children!=null && subChildren.children.length < 1) || subChildren.children==null){
return "<p class='red bold' style='margin-left:10%'>"+tradNoFilterResult+"</p>";
}
dynamic+="<ul style=\"padding-left:15px;\">";
for (var child=0 ; child< subChildren.children.length; child++){
specialStyle ="";
//if child is a branch
if(subChildren.children[child].type != null && subChildren.children[child].type.indexOf("branch")>-1){
dynamic+="<li style=\"list-style-type:none\">";
// if expanded (with children) > display minus icon
if(subChildren.children[child].children != null && subChildren.children[child].children.length > 0){
dynamic+="<a href=\"javascript:;\" class=\"icon-minus-square-o margin-right-10 valign-middle icon-link no-underline-not-focused bigger-text\" title=\""+collapseLabel+"\" onclick=\"document.getElementById('k"+subChildren.children[child].keyId+"').style.display='none'; changeToExpand(this,'k"+subChildren.children[child].keyId+"')\"></a>";
} else{
//if collapse (without children) > display plus icon
// One filter result > hide plus icon
if(subChildren.children[child].foundOccurence && subChildren.children[child].foundOccurence == 1 && subChildren.children[child].match){
specialStyle =" style='visibility:hidden'";
}
dynamic+="<a href=\"javascript:;\" class=\"icon-plus-square-o margin-right-10 valign-middle icon-link no-underline-not-focused bigger-text\" "+specialStyle+" title=\""+expandLabel+"\" onclick=\"";
// If foundOccurence > Filter tree
if(generateFunction.indexOf("fromBrowse") < 0 ){
if(subChildren.children[child].foundOccurence && subChildren.children[child].foundOccurence > 0){
dynamic+="expandFilterNode";
} else {
dynamic+="expandNode";
}
} else {
dynamic+="expandBrowseNode";
}
dynamic+="('"+refDataId+"','"+subChildren.children[child].key+"','"+subChildren.children[child].keyId+"'";
if (refDataId=='CPV_CODE') {
dynamic+=",'"+subChildren.children[child].parents+"'";
}
dynamic+="); changeToCollapse(this,'k"+subChildren.children[child].keyId+"')\"></a>";
}
} else {
//dynamic+="<img src=\""+imageFolder+"tree-separator.gif\" alt=\"\" />";
dynamic+="<li style=\"list-style-type:disc; padding-left:2px; list-style-position: inside;\">";
}
//methode avec eval
//dynamic+= eval(generateFunction+'('+subChildren.children[child]+')');
//methode avec if
if(generateFunction.indexOf("fromBrowse")> -1 ){
dynamic+=generateLiForBrowse(subChildren.children[child], refDataId, isFirstLevel);
} else if (generateFunction.indexOf("fromSearch")> -1){
dynamic+=generateLiForSearch(subChildren.children[child], refDataId, isFirstLevel);
}
dynamic+="<span id='k"+subChildren.children[child].keyId+"' style=\"margin-left:15px;\">";
//recurrency if child has children
if(subChildren.children[child].children != null && subChildren.children[child].children.length > 0){
dynamic+=generateChildren(subChildren.children[child], refDataId, false);
}
dynamic+="</span></li>";
}
dynamic+="</ul>";
return dynamic;
}
/**
* This function generate an AJAX List
*/
function generateList(subChildren, refDataId){
var dynamic="";
if (subChildren.children.length<=10){
// one column layout
dynamic+="<div class=\"col-sm-8\"><ul class=\"tree\">";
for (var j=0 ; j< subChildren.children.length; j++){
dynamic+=generateLiForList(subChildren.children[j],true, refDataId);
}
dynamic+="</ul></div>";
} else{
//two columns layout
dynamic+="<div class=\"col-sm-6\"><ul>";
for (var k=0 ; k< subChildren.children.length/2; k++){
dynamic+=generateLiForList(subChildren.children[k],true,refDataId);
}
dynamic+="</ul></div>";
dynamic+="<div class=\"col-sm-6\"><ul>";
for (k ; k< subChildren.children.length; k++){
dynamic+=generateLiForList(subChildren.children[k],false,refDataId);
}
dynamic+="</ul></div>";
}
return dynamic;
}
/**
* This function generate <li> element for ajax list
*/
function generateLiForList(subChildren, labelOnLeft, refDataId){
var dynamic="";
labelOnLeft = false;
dynamic+="<li>";
//label before checkbox
if(labelOnLeft){
dynamic+="<label for=\"chkId"+subChildren.key+"\">";
if(displayKeyMap[refDataId]){
dynamic+=subChildren.key+" - ";
}
dynamic+=subChildren.description+"</label> ";
dynamic+="<input type=\"checkbox\" class=\"checkbox\" name=\"chk\" id=\"chkId"+subChildren.key+"\" ";
if(useDescriptionMap[refDataId]){
dynamic+="value=\"'"+subChildren.description+"'\"";
} else {
dynamic+="value=\""+subChildren.key+"\"";
}
dynamic+=" />";
} else {
dynamic+="<label for=\"chkId"+subChildren.key+"\">";
dynamic+="<input type=\"checkbox\" class=\"checkbox\" name=\"chk\" id=\"chkId"+subChildren.key+"\" ";
if(useDescriptionMap[refDataId]){
dynamic+="value=\"'"+subChildren.description+"'\"";
} else {
dynamic+="value=\""+subChildren.key+"\"";
}
dynamic+=" />";
if(displayKeyMap[refDataId]){
dynamic+=subChildren.key+" - ";
}
dynamic+=subChildren.description+"</label> ";
}
dynamic+="</li>";
return dynamic;
}
/**
* This function generate the header part of dynamic content when user clicked on a 'plus' icon
*/
function generateHeader(isHierarchical, title, refDataId){
var header ="";
if(title != null) {
header+= "<h3>"+title+"</h3>";
}
if(isHierarchical){
header+="<fieldset class=\"filter\" style=\"margin-left:25px;\"><div class=\"col-sm-9\"><div class=\"form-group input-group-sm\"><label for=\"treeFilter\" class=\"hidden\">"+tradFilter+" </label><input type=\"text\" name=\"treeFilter\" id=\"treeFilter\" class=\"form-control\" onkeypress=\"if (event.keyCode == 13) { findNode('"+refDataId+"'); return false;} \" /></div></div><div class=\"col-sm-3\"><div class=\"form-group\"><div class=\"buttonContainer\"><div class=\"leftButtonPart\"><input type=\"button\" name=\"action_filter\" class=\"btn btn-default btn-sm\" value=\""+tradFilter+"\" onclick=\"findNode('"+refDataId+"')\"/></div></div></div></div></fieldset>";
}
header+="<fieldset><div class=\"overflow\" id=\"overflow\">";
return header;
}
/**
* This function generate <li> element for ajax tree
*/
function generateLiForSearch(subChildren, refDataId, isFirstLevel){
var dynamic="";
//implementation for search page
// Checkbox if match=true (filter) or if match=null (expand)
if(!(subChildren.match != null && !subChildren.match)){
dynamic+="<input type=\"checkbox\" class=\"checkbox\" name=\"chk\" id=\"chkId"+subChildren.key+"\"";
if(useDescriptionMap[refDataId]){
dynamic+="value=\"'"+subChildren.description+"'\"";
} else {
if(refDataId=='CPV_CODE' && isFirstLevel){
dynamic+="value=\"'"+subChildren.description+"'\" style=\"display: none !important;\" disabled=\"disabled\" ";
} else {
dynamic+="value=\""+subChildren.key+"\"";
}
}
dynamic+=" />";
}
dynamic+="<label for=\"chkId"+subChildren.key+"\" title=\""+subChildren.key+"\">";
// Key
if (isFirstLevel) {
if (displayFirstLevelKeyMap[refDataId] && displayKeyMap[refDataId]) {
dynamic+=subChildren.key+" - ";
}
} else if(displayKeyMap[refDataId]){
dynamic+=subChildren.key+" - ";
}
// description
dynamic+=subChildren.description+"</label>";
// occurence
if(subChildren.foundOccurence && subChildren.type.indexOf('leaf') < 0){
dynamic+=" ("+subChildren.foundOccurence+") ";
}
return dynamic;
}
/**
* This function generate <li> element for ajax list/tree for browse pages
*/
function generateLiForBrowse(subChildren, refDataId, isFirstLevel){
var dynamic="";
//implementation for browse page
// if COUNTRY > implement update right tree
var bolder="";
if (subChildren.type.indexOf('leaf')) {
bolder=" bold";
}
if(refDataId.indexOf('COUNTRY') > -1 ){
dynamic+="<a class=\"no-underline-not-focused"+bolder+"\" id='link-k"+subChildren.key+"' onclick='showSelected(this);updateRightTree(\""+refDataId+"\",\""+subChildren.key+"\")' href='javascript:;' title='"+subChildren.key+"'>";
} else if(refDataId.indexOf('CPV_CODE') > -1 ){
// CPV_CODE
dynamic+="<a class=\"no-underline-not-focused"+bolder+"\" href=\"javascript:"+subChildren.script+";$do('selectFacet','refDataId="+encodeURIComponent(refDataId)+"&key="+encodeURIComponent(subChildren.key)+"',true,false,'_self','"+refDataAjaxBrowseServiceBaseUrl+"');\" title=\"Search result\">";
} else{
// else implement link to result
//dynamic+="<a href='"+refDataAjaxBrowseServiceBaseUrl+"action=selectFacet&refDataId="+encodeURIComponent(refDataId)+"&key="+encodeURIComponent(subChildren.key)+"' title='"+subChildren.key+"'>";
dynamic+="<a class=\"no-underline-not-focused"+bolder+"\" href=\"javascript:$do('selectFacet','refDataId="+encodeURIComponent(refDataId)+"&key="+encodeURIComponent(subChildren.key)+"',true,false,'_self','"+refDataAjaxBrowseServiceBaseUrl+"');\" title=\"Search result\">";
}
/*if(displayKeyMap[refDataId]){
dynamic+=subChildren.key+" - ";
}*/
// Key
if (isFirstLevel) {
if (displayFirstLevelKeyMap[refDataId] && displayKeyMap[refDataId]) {
dynamic+=subChildren.key+" - ";
}
} else if(displayKeyMap[refDataId]){
dynamic+=subChildren.key+" - ";
}
// descrition
dynamic+=subChildren.description+"";
// occurence
if(subChildren.foundDocument){
dynamic+=" ("+subChildren.foundDocument+") ";
}
dynamic+="</a>";
return dynamic;
}
/**
* This function change the onclick function for expand/collapse icon in ajax trees
*/
function changeToCollapse(el,keyId){
el.onclick = function onclick(event) {
document.getElementById(keyId).style.display='none';
changeToExpand(this,keyId); } ;
el.className="icon-minus-square-o margin-right-10 valign-middle icon-link no-underline-not-focused bigger-text";
}
/**
* This function change the onclick function for expand/collapse icon in ajax trees
*/
function changeToExpand(el,keyId){
el.onclick = function onclick(event) {
document.getElementById(keyId).style.display='inline';
changeToCollapse(this,keyId); } ;
el.className="icon-plus-square-o margin-right-10 valign-middle icon-link no-underline-not-focused bigger-text";
}
/**
* This function fill form inputs with checked checkbox from tree/list
*/
function fillInput(){
var checkBox = document.getElementsByName("chk");
var str="";
for (var i=0; i< checkBox.length; i++){
if (checkBox[i].checked){
str+= checkBox[i].value+",";
}
}
str = str.slice(0, -1);
document.getElementById(originalInputId).value=str;
document.getElementById(originalInputId).title=str;
//hideDiv('jsContainer');
$('#myModal').modal('hide');
}

function showSelected(el){
resetSelected();
el.style.color="#FF2222";
}
function resetSelected(){
var dynLinks = document.getElementsByTagName('a');
for (var i=0; i<dynLinks.length; i++){
if(dynLinks[i].id.indexOf('link-k') > -1){
dynLinks[i].style.color="";
}
}
}

function rollOver(el) {
el.firstChild.src=imageFolder+'europa_logo_hover.png';
}

function rollOut(el) {
el.firstChild.src=imageFolder+'europa_logo.png';
}

$(".onlyJs").css({display:'block'});
$(".absoluteInJs").css({position:'absolute', left:'-9995em'});
$(".onlyJsInline").css({display:'inline'});

$(document).ready(function() {
$('.datepicker').datepicker({
dateFormat: 'dd/mm/yy'
});
});

/* Event handler when clicking on icon next to a date-picker. */
$('.datepicker-icon').on("click", function() {
$(this).next().focus();
});

/* WTIT4 handling */
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
var ajaxQueryProcessing=false;
var ajaxQueryCPVtype="before";
function handleWTCPV(type) {
var ajaxQueryCPVValue;
if (type == "advanced") {
ajaxQueryCPVValue = document.getElementById("searchCriteria.cpvCodeList").value;
ajaxQueryCPVtype="csv";
} else if (type == "expert") {
ajaxQueryCPVValue = document.getElementById("expertSearchCriteria.query").value;
ajaxQueryCPVtype="cclQuery";
} else {
return true;
// no type specified -> NTD
}
if (ajaxQueryCPVValue.trim().length > 0) {
var ajaxUrl = queryAjaxServiceBaseUrl + 'parameterType='+ajaxQueryCPVtype+'&value=' + encodeURIComponent(ajaxQueryCPVValue);
ajaxQueryProcessing=true;
//sendAjaxRequest(ajaxUrl, queryExtractorAjaxCallBack);
sendPostAjaxRequest(queryAjaxServiceBaseUrl, queryExtractorAjaxCallBack, 'parameterType='+ajaxQueryCPVtype+'&value=' + encodeURIComponent(ajaxQueryCPVValue));
// don't submit form to wait for callback handling
return false;
} else {
return true;
}

}

function queryExtractorAjaxCallBack(ajaxResponse) {
// Run received snippet and really submit page - best would be to edit onclick action on the fly and remove the method call and simulate click.
eval(ajaxResponse);
if (ajaxQueryCPVtype=="csv") {
$do('search', '', false, null,null);
} else if (ajaxQueryCPVtype=="cclQuery") {
$do('search', '', false, null,null);
}
}

function updateStatisticList() {
$("#selectedX option").each(function() {
$(this).show();
})
$("#selectedY option").each(function() {
$(this).show();
})
if ($("#selectedX").val() != "") {
$("#selectedY option[value=" + $("#selectedX").val() + "]").hide();
}
if ($("#selectedY").val() != "") {
$("#selectedX option[value=" + $("#selectedY").val() + "]").hide();
}
}