var DBG = DBG || 0;
var DBG1 = true;
var CURRENT_DATE = CURRENT_DATE || '';
var STORE_NAME = STORE_NAME || '_bocianRaportStore';

if (!URL_TABLE_POWIAZANIA) throw "Brak URL_TABLE_POWIAZANIA";
if (!BASE_URLS) throw "Brak BASE_URLS"

var RECORD_MORE_FUNCTIONS_OPENED_NODE = null;
if (!FIELD_LIST_PRACOWNICY) throw "Brak FIELD_LIST_PRACOWNICY"
if (!FIELD_LIST_KONTRAHENCI) throw "Brak FIELD_LIST_KONTRAHENCI"

var createReactClass = global.p5VendorJs.createReactClass;
var h = global.p5VendorJs.React.createElement;
var ReactDOM = global.p5VendorJs.ReactDOM;
var Redux = global.p5VendorJs.Redux;
var ReduxThunk = global.p5VendorJs.ReduxThunk;
var createStoreWithThunkMiddleware = Redux.applyMiddleware(ReduxThunk)(Redux.createStore); // TODO: to vendor.js
var swal = window.swal;
var globalRaportStore; // global store with Raport cunters

var P5UI__BocianHeader = createReactClass({
	getStateFromStore: function () {
		var storeState = this.props.store.getState();
		return {
			totalOdPracownicy: storeState.totalOdPracownicy,
			totalOdPozostale: storeState.totalOdPozostale,
			totalDoKontrahenci: storeState.totalDoKontrahenci,
			totalDoPozostale: storeState.totalDoPozostale,
		};
	},
	getInitialState: function() {
		return this.getStateFromStore();
	},
	componentDidMount: function () {
		this.unsubscribe = this.props.store.subscribe(this.storeUpdated)
	},
	componentWillUnmount: function () {
		this.unsubscribe()
	},
	storeUpdated: function () {
		DBG && console.log('DBG::P5UI__BocianHeader::storeUpdated ', this.getStateFromStore());
		this.setState(this.getStateFromStore())
	},
	addOdPozostale: function (event) {
		// window['createPracownikAjax'](event)
		window['addPozostaleOdDo'](event)
	},
	addDoPozostale: function (event) {
		// window['createKontrahentAjax'](event)
		window['addPozostaleOdDo'](event)
	},
	render: function () {
		DBG && console.log('DBG::P5UI__BocianHeader::render ', { state: this.state });
		var totalOd = this.state.totalOdPracownicy + this.state.totalOdPozostale;
		var totalDo = this.state.totalDoKontrahenci + this.state.totalDoPozostale;
		return h('div', { className: "container-fluid", style: { backgroundColor: "#efefef" } }, [
			h('h3', {}, [
				h('span', { style: { fontSize: "120%", color: "#d7142d" } }, "|"),
				" Tworzenie nowego raportu ",
			]),
			h('div', { style: { fontSize: '16px', fontWeight: "normal", color: "#777" } }, [
				"Wybrano:",
				h('ul', {}, [
					h('li', { style: { marginTop: "6px" } }, [
						h('span', {
							style: totalOd > 0 ? { color: "#d7142d" } : {}
						}, "OD (" + totalOd + "): "),
						h('a', { className: "btn btn-link", style: { padding: 0, fontSize: "16px" }, href: "#PRACOWNICY" }, " pracownicy (" + this.state.totalOdPracownicy + ")"),
						" + ",
						h('button', { className: "btn btn-link", style: { padding: 0, fontSize: "16px" }, onClick: this.addOdPozostale }, " pozostałe (" + this.state.totalOdPozostale + ")"),
					]),
					h('li', { style: { marginTop: "6px" } }, [
						h('span', {
							style: totalDo > 0 ? { color: "#d7142d" } : {}
						}, "DO (" + totalDo + "): "),
						h('a', { className: "btn btn-link", style: { padding: 0, fontSize: "16px" }, href: "#KONTRAHENCI" }, " kontrahenci (" + this.state.totalDoKontrahenci + ")"),
						" + ",
						h('button', { className: "btn btn-link", style: { padding: 0, fontSize: "16px" }, onClick: this.addDoPozostale }, " pozostałe (" + this.state.totalDoPozostale + ")"),
					])
				])
			])
		])
	}
})

function getSelectedListLocalStorageKey(from) { // from: ( OD | DO )
  switch (from) {
    case 'OD': return 'Bocian.biAuditForm.odFeatureKeys';
    case 'DO': return 'Bocian.biAuditForm.doFeatureKeys';
    default: throw "Not implemented from selected list '" + from + "' - expected 'OD' or 'DO'";
  }
}
function getListFromLocalStorage(key) {
  return JSON.parse( localStorage.getItem(key) || '[]' );
}
// function saveToSelectedListInLocalStorage(from, featureKey) {
//   DBG && console.log("DBG::saveToSelectedListInLocalStorage(from, featureKey)", {from, featureKey}, {added: getSelectedListFromLocalStorage(from).concat(featureKey)});
//   localStorage.setItem(getSelectedListLocalStorageKey(from), JSON.stringify(
//     getSelectedListFromLocalStorage(from).concat(featureKey)
//   ))
// }
// function removeFromSelectedListInLocalStorage(from, featureKey) {
//   DBG && console.log("DBG::removeFromSelectedListInLocalStorage(from, featureKey)", {from, featureKey});
//   localStorage.setItem(getSelectedListLocalStorageKey(from), JSON.stringify(
//     getSelectedListFromLocalStorage(from).filter(function (item) {
//       return ( item !== featureKey );
//     })
//   ))
// }

function bocianRaportStore(state, action) {
	var prevState = state;
	if (!prevState) {
		var pozostaleOd = getListFromLocalStorage(getSelectedListLocalStorageKey('OD'));
		var pozostaleDo = getListFromLocalStorage(getSelectedListLocalStorageKey('DO'));
		var pracownicyIds = getListFromLocalStorage('Bocian.biAuditForm.pracownicyIds');
		var kontrahenciIds = getListFromLocalStorage('Bocian.biAuditForm.kontrahenciIds');
		prevState = {
			totalOdPracownicy: pracownicyIds.length,
			totalOdPozostale: pozostaleOd.length,
			totalDoKontrahenci: kontrahenciIds.length,
			totalDoPozostale: pozostaleDo.length,
			pozostaleOd: pozostaleOd,
			pozostaleDo: pozostaleDo,
		};
		DBG && console.log('DBG: bocian store INIT', { prevState, action });
	}
	DBG && console.log('DBG: bocian store', { prevState, action });
	switch (action.type) {
		case 'UPDATE': return Object.assign(prevState, {
			totalOdPracownicy: action.totalOdPracownicy,
			totalDoKontrahenci: action.totalDoKontrahenci,
		});
		case 'ADD_OD': {
			var listPozostaleOd = prevState.pozostaleOd.concat(action.featureKey);
			localStorage.setItem(getSelectedListLocalStorageKey('OD'), JSON.stringify(listPozostaleOd))
			return Object.assign(prevState, {
				pozostaleOd: listPozostaleOd,
				totalOdPozostale: listPozostaleOd.length,
			})
		}
		case 'ADD_DO': {
			var listPozostaleDo = prevState.pozostaleDo.concat(action.featureKey);
			localStorage.setItem(getSelectedListLocalStorageKey('DO'), JSON.stringify(listPozostaleDo))
			return Object.assign(prevState, {
				pozostaleDo: listPozostaleDo,
				totalDoPozostale: listPozostaleDo.length,
			})
		}
		case 'RM_OD': {
			var featureKey = action.featureKey;
			var listPozostaleOd = prevState.pozostaleOd.filter(function (item) {
				return ( item !== featureKey );
			})
			localStorage.setItem(getSelectedListLocalStorageKey('OD'), JSON.stringify(listPozostaleOd))
			return Object.assign(prevState, {
				pozostaleOd: listPozostaleOd,
				totalOdPozostale: listPozostaleOd.length,
			})
		}
		case 'RM_DO': {
			var featureKey = action.featureKey;
			var listPozostaleDo = prevState.pozostaleDo.filter(function (item) {
				return ( item !== featureKey );
			})
			localStorage.setItem(getSelectedListLocalStorageKey('DO'), JSON.stringify(listPozostaleDo))
			return Object.assign(prevState, {
				pozostaleDo: listPozostaleDo,
				totalDoPozostale: listPozostaleDo.length,
			})
		}
		default: return prevState;
	}
}


$(window).on('hashchange', function() {
	initLocalStorage();
	rootChangeForm();
	updateTopCounters();
	hideMoreRecordFunctionsPopover()
});


/* DATA FOR READ REAPORT */

function urlFetchKontrahenciPowiazania() {
	// Documentation: https://github.com/github/fetch
	fetch(URL_FETCH_KONTRAHENCI_POWIAZANIA, {
		credentials: 'same-origin'
	})
	.then(function parseJSON(response) {
	  return response.json()
	})
	.then(function(data) {

		var reaportItemsKontrahenciPowiazani = null;
		data.body.items.forEach (function(row) {
			reaportItemsKontrahenciPowiazani += '<tr><td><input type="checkbox" name="kontrID[]" value="'+row['ID']+'" /></td>'+
				'<td align="right">'+row["ID"]+'</td>';
		});

		$( "#body-reaport-kontrahenci-powiazani-tree" ).html(reaportItemsKontrahenciPowiazani);

	}).catch(function(error) {
		if(DBG) console.log('request failed', error)
	});
}


/* FORM DATA FOR GENERATAE REAPORT */
/**
 * Load data default title reaport in storage
 */
function loadCurrentReaportTitleInInput(idInput) {
  var reaportTitleValue = getItemLocalStorage("Bocian.biAuditForm.smadReaportTitle");
	var currentDate = CURRENT_DATE;
  if ( getItemLocalStorage('Bocian.biAuditForm.smadReaportTitle') === null ) {
    reaportTitleValue = setItemLocalStorage('Bocian.biAuditForm.smadReaportTitle', 'Raport bez tytułu z dnia ' + currentDate);
  }

  $(idInput).val(function() {
     return reaportTitleValue;
  });
}

/**
 * Update data title reaport in storage from input
 */
function updateLocalStorageBiAuditReaportTitle(idInput) {
  $(idInput).keyup(function() {
    delayUpdate(function(){
      var newValue = $(idInput).val();
      setItemLocalStorage('Bocian.biAuditForm.smadReaportTitle', newValue);
      loadCurrentReaportTitleInInput('.smad-reaport-title-pracownicy');
      loadCurrentReaportTitleInInput('.smad-reaport-title-kontrahenci');
    }, 1000 );
  });
}

/**
 * Load data default depth in storage
 */
function loadCurrentDepthInInput(idInput) {
  var depthValue = getItemLocalStorage('Bocian.biAuditForm.depth');

   $(idInput).val(function() {
       return depthValue;
   });
}

/**
 * Update data default depth in storage
 */
function updateLocalStorageBiAuditDepth(idInput) {
  $(idInput).keyup(function() {
    delayUpdate(function(){
      var newValue = $(idInput).val();
      var responseValue = validateValueDepth(parseInt(newValue));

      setItemLocalStorage('Bocian.biAuditForm.depth', responseValue);
      loadCurrentDepthInInput('.smad-depth');
			loadCurrentDepthInInput('.smad-depth-kontrahenci');

			// check depth value
			if ( parseInt(newValue) > 6 ) {
				// check count praconwicy/kontrahenci
					var formItemsPraconwicyKontrahenci = countChoiseItemsPraconwicyKontrahenci();

				// disable button generate reaport if not choise 'praconwicy' or 'kontrahenci'
					if (
						(formItemsPraconwicyKontrahenci.totalPracownicy === 0 && formItemsPraconwicyKontrahenci.totalKontrahenci != 0 ) ||
						(formItemsPraconwicyKontrahenci.totalPracownicy != 0 && formItemsPraconwicyKontrahenci.totalKontrahenci === 0 )
					) {
						p5UI__notifyAjaxCallback({ type: 'error', msg: messageCriticalSearchData });

						$('.bottom--message-warning-critical-search').text(messageCriticalSearchData);

						if(DBG) console.log('popup i dodanie komunikatu niżej');

					} else {
						$('.bottom--message-warning-critical-search').text('');
						if(DBG) console.log('popup i dodanie wyczysc komunikatu ');
					}
			}

    }, 1000 );

  });
}

function validateValueDepth(newValue) {
  var value = null;
  value = newValue;

  if (parseInt(newValue) < 0) {
      value = 1;
  }

  if (parseInt(newValue) > 16) {
    value = 16;
  }

  return value;
}

var delayUpdate = (function() {
  var timer = 0;
  return function(callback, ms) {
  clearTimeout (timer);
  timer = setTimeout(callback, ms);
 };
})();

/**
 * Check count choise pracownicy/kontrahenci
 */
function countChoiseItemsPraconwicyKontrahenci() {
	var countPracownicy = getItemLocalStorage('Bocian.biAuditForm.pracownicyIds');
	var countKontrahenci = getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');

	var formItems = {
		'totalPracownicy': ((countPracownicy) ? Object.keys(countPracownicy).length : 0),
		'totalKontrahenci': ((countKontrahenci) ? Object.keys(countKontrahenci).length : 0)
	};

	return formItems;
}

/**
 * Załadowanie  wybranej pozycji w select  czy zwracać wyniki tylko z obiektami docelowymi onlyTarget
 */
function loadCurrentOnlyTargetsSelect() {
  var analizaOnlyTargets = getItemLocalStorage('Bocian.biAuditForm.analizaOnlyTargets');

	$('#smad-select-target').val(analizaOnlyTargets).attr("selected", "selected");
	$('#smad-select-target-kontrahenci').val(analizaOnlyTargets).attr("selected", "selected");
}

/**
 * Załadowanie do storage informacji czy zwracać wyniki tylko z obiektami docelowymi
 */
function updateLocalStorageBiAuditOnlyTargets(idSelect) {
  $(idSelect).change(function() {

      var newValue = $(idSelect).val();
      var responseValue = newValue;

      setItemLocalStorage('Bocian.biAuditForm.analizaOnlyTargets', responseValue);

			$('#smad-select-target').val(newValue).attr("selected", "selected");
			$('#smad-select-target-kontrahenci').val(newValue).attr("selected", "selected");
			// load in select selected option
			loadCurrentOnlyTargetsSelect();
  });
}

function initLocalStorage() {

	if (getItemLocalStorage('Bocian.biAuditForm.pracownicyIds') === null) {
		 setItemLocalStorage('Bocian.biAuditForm.pracownicyIds', []);
	}

	if (getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds') === null) {
		 setItemLocalStorage('Bocian.biAuditForm.kontrahenciIds', []);
	}

	setItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup', 0);
	setItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup', 0);

	if (getItemLocalStorage('Bocian.biAuditForm.depth') === null) {
		updateLocalStorageBiAuditDepth(6);
	}

	if (getItemLocalStorage('Bocian.biAuditForm.smadReaportTitle') === null) {
		updateLocalStorageBiAuditReaportTitle('Default reaport');
	}

	if (getItemLocalStorage('Bocian.biAuditForm.analizaOnlyTargets') === null) {
		setItemLocalStorage('Bocian.biAuditForm.analizaOnlyTargets', defaultOnlyTarger);
	}
}

/**
 * Funkcja pozwala na wyświetlenie okienka importu
 */
function showViewUploadFile( event, headerTitle, enumType, showCheckbox, csvFileExample ) {
	event.preventDefault();

	var enumType = enumType;

	if( csvFileExample !== undefined) { // przykład + instrukcja do pobrania
			csvFileExample = '<div><a href="'+csvFileExample+'" title="Pobierz przykład" download target="_balnk">Pobierz przykład</a></div>';
	}

	swal({
		title: 'Importuj plik csv',
		input: 'file',
		html: csvFileExample,
		inputAttributes: {
			'accept': 'text/csv',
			'aria-label': 'Upload csv file'
		},
		confirmButtonText: 'Importuj',
		preConfirm: function (file) {
			return new Promise(function (resolve, reject) {
				if (!file) {
					reject("Proszę wybrać plik csv");
					return
				}
				var input = document.querySelector('input[type="file"]');

				var data = new FormData()
				data.append('file', input.files[0])
				data.append('showCheckbox', showCheckbox);

				var responseParseFile = parseCsvFile( data, enumType );
				resolve('file imported')
			})
		},
	}).then(function (result) {
		if(DBG) console.log('result', result);
	}).catch(function (e) {
		if(DBG) console.log('catch: ', e);
	});

}


/**
 * Funkcja przekazuje dane z pliku csv do przeparsowania
 */
function parseCsvFile( fileData, enumType ) {
	event.preventDefault();

	if(DBG) console.log( 'parseCsvFile fileData', fileData);

	fetch(URL_FORM_DATA_CSV_FILE_AJAX, {
	  method: 'POST',
		credentials: 	'same-origin',
	  body: fileData
	})
	.then(function(response) {
	 return response.json()
 }).then(function(json) {

					 swal({
								 title: 'Dane załadowane z pliku CSV',
								 html: json.body.view,
								 width: Math.round(window.innerWidth * 0.9),
								 allowOutsideClick: false, // TODO: btn Anuluj na dole?
								 showCloseButton: true,
								 confirmButtonText: 'Zapisz',
								 preConfirm: function (dataForm) {
						 			return new Promise(function (resolve, reject) {
						 				if (!dataForm) {
						 					reject("Formularz nie zawiera danych do zapisania");
						 					return
						 				}

										// zapisanie danych
						 				var responseSaveData = saveFormCsvFileAjaxAction(enumType);
						 				resolve('data save from form')
						 			})
						 		},
							 }).then(function (result) {

	 							if(DBG) console.log('result', result)
	 						}).catch(function (e) {
	 							if(DBG) console.log('catch: ', e)
	 						});

 }).catch(function(ex) {
	 if(DBG) console.log('parsing failed', ex);
 });
}

/**
 * Funkcja zapisuje dane z formularza do wgrania pliku csv
 */
function saveFormCsvFileAjaxAction(enumType) {
	event.preventDefault();

	var formDataFrom =	$("#formDataFromCsv").serialize();

	formDataFrom = formDataFrom.replace(/%5B/g,"[");
	formDataFrom = formDataFrom.replace(/%5D/g,"]");

	fetch(URL_SAVE_FORM_CSV_FILE_AJAX, {
	  method: 'POST',
		credentials: 	'same-origin',
		headers: {
			'Content-Type': 'application/json'
		},
		body: JSON.stringify({
			 formData: formDataFrom,
			 enumType: enumType
		})
	})
	.then(function(response) {
	 return response.json()
 }).then(function(json) {
	 if(DBG) console.log('parsed json', json);

	 if (response.type == 'success') {

	 	p5UI__notifyAjaxCallback(response.msg);
	 }

	// return json;
 }).catch(function(ex) {
	 if(DBG) console.log('parsing failed', ex);

 });
}


function defaultBIAuditLocalStorage() {
	localStorage.removeItem('Bocian.biAuditForm.pracownicyIds');
	localStorage.removeItem('Bocian.biAuditForm.kontrahenciIds');
	localStorage.removeItem(getSelectedListLocalStorageKey('OD'));
	localStorage.removeItem(getSelectedListLocalStorageKey('DO'));
	setItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page', 1);
	setItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page', 1);
	setItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup', 0);
	setItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup', 0);
	setItemLocalStorage('Bocian.biAuditForm.depth', 6);
	setItemLocalStorage('Bocian.biAuditForm.analizaOnlyTargets', defaultOnlyTarger);
}



function generateBiAuditRaport(event) {
	event.preventDefault();

	var idsPracownicy = getListFromLocalStorage('Bocian.biAuditForm.pracownicyIds');
	var idsKontrahenci = getListFromLocalStorage('Bocian.biAuditForm.kontrahenciIds');
	var pozostaleOd = getListFromLocalStorage(getSelectedListLocalStorageKey('OD'));
	var pozostaleDo = getListFromLocalStorage(getSelectedListLocalStorageKey('DO'));
	var allOdLength = idsPracownicy.length + pozostaleOd.length;
	var allDoLength = idsKontrahenci.length + pozostaleDo.length;
	var depthValue = getItemLocalStorage('Bocian.biAuditForm.depth');
	var smadReaportTitle = getItemLocalStorage('Bocian.biAuditForm.smadReaportTitle');
	var analizaOnlyTargets = getItemLocalStorage('Bocian.biAuditForm.analizaOnlyTargets');

	if ( !smadReaportTitle ) {
		p5UI__notifyAjaxCallback({ type: 'error', msg: 'Nie podano tytułu raportu' });
		return;
	}
	if ( !depthValue ) {
		p5UI__notifyAjaxCallback({ type: 'error', msg: 'Nie podano wartości dla głębokości powiązań' });
		return;
	}
	if ( !analizaOnlyTargets ) {
		p5UI__notifyAjaxCallback({ type: 'error', msg: 'Nie podano wartości czy zwracać wyniki tylko z obiektami docelowymi' });
		return;
	}
	if ( !allOdLength ) {
		p5UI__notifyAjaxCallback({ type: 'error', msg: 'Nie wybrano pozycji OD do analizy (pracownicy lub pozostałe bazy)' });
		return;
	}
	if ( !allOdLength && !allDoLength ) {
		p5UI__notifyAjaxCallback({ type: 'error', msg: 'Nie wybrano pozycji do analizy' });
		return;
	}

	// TODO: analizaOnlyTargets = ( 'y' | 'n' ) - allDoLength should depend of analizaOnlyTargets?

	// if not choise 'pracownicy' or 'kontrahenci'
	if ( !allOdLength || !allDoLength ) {
		var messageConfirm = '';
		if ( !allDoLength )  {
			messageConfirm = 'Nie wybrano podmiotów/kontrahentów! Czas przygotowania raportu może wydłużyć się ze względu na sprawdzenie powiązania ze wszystkimi podmiotami/kontrahentami w systemie. Czy jesteś pewny? ';
		}

		// show confirm window with message
		if (!confirm(messageConfirm)) return;
	}

	window.fetch(URL_GENERATE_BI_AUDIT_RAPORT_AJAX, {
		method: 'POST',
		headers: {
			'Content-Type': 'application/json'
		},
		credentials: 'same-origin',
		body: JSON.stringify({
			pracownicyIds: idsPracownicy,
			kontrahenciIds: idsKontrahenci,
			pozostaleOd: pozostaleOd,
			pozostaleDo: pozostaleDo,
			depthValue: depthValue,
			smadReaportTitle: smadReaportTitle,
			analizaOnlyTargets: analizaOnlyTargets
	  })
	})
	.then(function(response) {
		return response.text();
	})
	.then(function(responseText) {
		try {
			return JSON.parse(responseText);
		} catch (e) {
			throw responseText;
		}
	})
	.then(function(result) {
		if (result.type == 'success') {
			p5UI__notifyAjaxCallback(result);
			defaultBIAuditLocalStorage();
			updateTopCounters();
			$('#smad-table-PRACOWNICY form').find(':checkbox').prop('checked', false);
			$('#smad-table-KONTRAHENCI form').find(':checkbox').prop('checked', false);
			$('#count-selected-item-kontrahenci').text('0');
			$('#count-selected-item-pracownicy').text('0');
			$('.bottom--message-warning-critical-search').text('');
			swal({
				title: result.msg,
				html: '<a href="' + BASE_URLS + 'index.php?_route=ViewTableAjax&amp;namespace=default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA" title="przejdź do raportów" >Przejdź do raportów</a>',
				allowOutsideClick: false, // TODO: btn Anuluj na dole?
				showCloseButton: true,
				confirmButtonText: 'OK',
			});
			window.setTimeout(URL_TABLE_POWIAZANIA, 6000);
			resolve(result.msg);
		} else {
			reject(result.msg);
		}
	})
	.catch(function(error) {
		if(DBG) console.log('request failed', error);
	});
}

/**
* Dodaj nowego pracownika
*/
function createPracownikAjax(event) {
	event.preventDefault();

	swal({
	  title: 'Dodaj osobę',
	  showCancelButton: true,
	  confirmButtonText: 'Zapisz',
	  showLoaderOnConfirm: true,
	  html:
		'<div class="form-group">'+
    '<input class="form-control required" id="personName" placeholder="Imię" >' +
    '<input class="form-control required" id="personSurname" placeholder="Nazwisko">'+
		'<input class="form-control required" id="personNip" placeholder="NIP">'+
		'<input class="form-control required" id="personPesel" placeholder="PESEL">'+
		'<input class="form-control required" id="personRegon" placeholder="REGON">'+
		'</div>',
	   preConfirm: () => {
	    return new Promise(function (resolve, reject) {

				// data from form
				var personName = $('#personName').val();
				var personSurname = $('#personSurname').val();
				var personNip = $('#personNip').val();
				var personPesel = $('#personPesel').val();
				var personRegon = $('#personRegon').val();

				//validate data from input
				if (!personName){
					reject('Proszę podać imię')
					return;
				}
				if (!personSurname){
					reject('Proszę podać nazwisko')
					return;
				}
				window.fetch(URL_CREATE_PRACOWNICY, {
					method: 'POST',
					header: {
						'contentType': 'applications/json'
					},
					credentials: 'same-origin',
					body: JSON.stringify({
						'personName': personName,
						'personSurname': personSurname,
						'personNip': personNip,
						'personPesel': personPesel,
						'personRegon': personRegon
					})
				})
				.then(function(response) {
					return response.text();
				})
				.then(function(responseText) {

					try {
						return JSON.parse(responseText);
					} catch (e) {
						throw responseText;
					}
				})
				.then(function(result) {

					if (result.type == 'success') {
						p5UI__notifyAjaxCallback(result);
						resolve(result.body);
						urlFetchPracownicy(1);
					}
				})
				.catch(function(error) {
					if(DBG) console.log('request failed', error);
				})

	    })
	  },
	  allowOutsideClick: false
	}).then(function (createPerson) {
		 if(DBG) console.log('dodanie osoby: ', createPerson);

	});
}

/**
* Dodaj nowego kontrahenta
*/
function createKontrahentAjax(event) {
	event.preventDefault();

	swal({
	  title: 'Dodaj podmiot/kontrahenta',
	  showCancelButton: true,
	  confirmButtonText: 'Zapisz',
	  showLoaderOnConfirm: true,
	  html:
		'<div class="form-group">'+
    '<input class="form-control required" id="companyFullName" placeholder="Pelna nazwa" >' +
    '<input class="form-control required" id="companyShortName" placeholder="Skrócona nazwa\">'+
		'<input class="form-control required" id="companyNameGroup" placeholder="Nazwa grupy kapitałowej">'+
		'<input class="form-control required" id="companyKrs" placeholder="KRS">'+
		'<input class="form-control required" id="companyNip" placeholder="NIP">'+
		'<input class="form-control required" id="companyPesel" placeholder="PESEL">'+
		'<input class="form-control required" id="companyFax" placeholder="FAX">'+
		'<input class="form-control required" id="companyTelefon" placeholder="Telefon">'+
		'<input class="form-control required" id="companyMail" placeholder="Mail">'+
		'<input class="form-control required" id="companyStreet" placeholder="Ulica">'+
		'<input class="form-control required" id="companyNumberBuilding" placeholder="Numer budynku">'+
		'<input class="form-control required" id="companyNumberLocal" placeholder="Numer mieszkania /lokalu">'+
		'<input class="form-control required" id="companyPostCode" placeholder="Kod pocztowy">'+
		'<input class="form-control required" id="companyPlace" placeholder="Miejscowosc">'+
		'<input class="form-control required" id="companyCountry" placeholder="Kraj">'+
		'<input class="form-control required" id="companyTypeCompany" placeholder="Typ kontrahenta">'+
		'<input class="form-control required" id="companyTitleDocument" placeholder="Tytul dokumentu">'+
		'<input class="form-control required" id="companyDesc" placeholder="uwagi">'+
		'</div>',

	   preConfirm: () => {
	    return new Promise(function (resolve, reject) {

				// data from form
				var companyFullName = $('#companyFullName').val();
				var companyShortName = $('#companyShortName').val();
				var companyNameGroup = $('#companyNameGroup').val();
				var companyKrs = $('#companyKrs').val();
				var companyNip = $('#companyNip').val();
				var companyPesel = $('#companyPesel').val();
				var companyFax = $('#companyFax').val();
				var companyTelefon = $('#companyTelefon').val();
				var companyMail = $('#companyMail').val();
				var companyStreet = $('#companyStreet').val();
				var companyNumberBuilding = $('#companyNumberBuilding').val();
				var companyNumberLocal = $('#companyNumberLocal').val();
				var companyPostCode = $('#companyPostCode').val();
				var companyPlace = $('#companyPlace').val();
				var companyCountry = $('#companyCountry').val();
				var companyTypeCompany = $('#companyTypeCompany').val();
				var companyTitleDocument = $('#companyTitleDocument').val();
				var companyDesc = $('#companyDesc').val();


				//validate data from input
				if (!companyFullName){
					reject('Proszę podać pełną nazwę');
					return;
				}

				window.fetch(URL_CREATE_KONTRAHENCI, {
					method: 'POST',
					header: {
						'contentType': 'applications/json'
					},
					credentials: 'same-origin',
					body: JSON.stringify({
						'companyFullName': companyFullName,
						'companyShortName': companyShortName,
						'companyNameGroup': companyNameGroup,
						'companyKrs': companyKrs,
						'companyNip': companyNip,
						'companyPesel': companyPesel,
						'companyFax': companyFax,
						'companyTelefon': companyTelefon,
						'companyMail': companyMail,
						'companyStreet': companyStreet,
						'companyNumberBuilding': companyNumberBuilding,
						'companyNumberLocal': companyNumberLocal,
						'companyPostCode': companyPostCode,
						'companyPlace': companyPlace,
						'companyCountry': companyCountry,
						'companyTypeCompany': companyTypeCompany,
						'companyTitleDocument': companyTitleDocument,
						'companyDesc': companyDesc
					})
				})
				.then(function(response) {
					return response.text();
				})
				.then(function(responseText) {

					try {
						return JSON.parse(responseText);
					} catch (e) {
						throw responseText;
					}
				})
				.then(function(result) {

					if (result.type == 'success') {
						p5UI__notifyAjaxCallback(result);
						resolve(result.body);
						urlFetchKontrahenci(1);
					}
				})
				.catch(function(error) {
					if(DBG) console.log('request failed', error);
				})

	    })
	  },
	  allowOutsideClick: false
	}).then(function (createPerson) {
		 if(DBG) console.log('dodanie podmiotu: ', createPerson);

	});
}

/**
 * Popup z opcja przeniesienia pracowników do innej grupy
 */
function addPracownikToGroup(event) {
	event.preventDefault();

	var pracownicyIdsArray = getItemLocalStorage('Bocian.biAuditForm.pracownicyIds');
	if (pracownicyIdsArray === null || !pracownicyIdsArray || !pracownicyIdsArray.length) {
		showTextListIdPracownikow = 'nie wybrano osób';
	} else {
		showTextListIdPracownikow = '' + pracownicyIdsArray.length + ' osób';
	}

	var arrayGroupOptions = [];
	var listGroupStorage = getItemLocalStorage('Bocian.biAuditForm.pracownicy.groups');
  // utworzenie tablicy Optionsów grupy
	listGroupStorage.map(function(item) {
		if (item.ID !== undefined) {
			arrayGroupOptions[item.ID] = item.NAZWA;
		}
	});

	swal({
	  title: 'Dodaj do grupy',
		input: 'select',
		text: showTextListIdPracownikow,
	  inputOptions: arrayGroupOptions,
	  inputPlaceholder: 'Wybierz grupę',
	  showCancelButton: true,
	  confirmButtonText: 'Zapisz',
	  showLoaderOnConfirm: true,
	  preConfirm: function (idGroup) {
	    return new Promise(function (resolve, reject) {
				if (!idGroup) {
					reject('Proszę wybrać nazwę grupy');
					return;
				}
				if (!pracownicyIdsArray || !pracownicyIdsArray.length) {
					reject('Wybierz pracowników');
					return;
				}

				window.fetch(URL_ADD_PRACOWNICY_TO_GROUP, {
					method: 'POST',
					header: { 'contentType': 'applications/json' },
					credentials: 'same-origin',
					body: JSON.stringify({
						'idGroup': idGroup,
						'pracownicyIds': getItemLocalStorage('Bocian.biAuditForm.pracownicyIds'),
					})
				})
				.then(function(response) {
					return response.text();
				})
				.then(function(responseText) {
					try {
						return JSON.parse(responseText);
					} catch (e) {
						throw responseText;
					}
				})
				.then(function(result) {
					if (result.type == 'success') {
						p5UI__notifyAjaxCallback(result);
						resolve(result.msg);
					} else {
						reject(result.msg);
					}
				})
				.catch(function(error) {
					if(DBG) console.warn('request failed', error);
				});
	    })
	  },
	  allowOutsideClick: false
	}).then(function (value) {
		{ // remove from selected
			setItemLocalStorage('Bocian.biAuditForm.pracownicyIds', []);
			updateCountItemCheckedByType('pracownicy');
			$('form').find(':checkbox').prop('checked', false);
		}
	});
}

function addPracownikAllToGroup(event) {
	event.preventDefault();

	var showTextListIdPracownikow = 'wszystkich pracowników pasujących do kryteriów wyszukiwania';

	var arrayGroupOptions = [];
	var listGroupStorage = getItemLocalStorage('Bocian.biAuditForm.pracownicy.groups');
  // utworzenie tablicy Optionsów grupy
	listGroupStorage.map(function(item) {
		if (item.ID !== undefined) {
			arrayGroupOptions[item.ID] = item.NAZWA;
		}
	});

	swal({
	  title: 'Dodaj do grupy',
		input: 'select',
		text: showTextListIdPracownikow,
	  inputOptions: arrayGroupOptions,
	  inputPlaceholder: 'Wybierz grupę',
	  showCancelButton: true,
	  confirmButtonText: 'Zapisz',
	  showLoaderOnConfirm: true,
	  preConfirm: function (idGroup) {
	    return new Promise(function (resolve, reject) {
				if (!idGroup) {
					reject('Proszę wybrać nazwę grupy');
					return;
				}

				var filterFields = {}
				var frm = document.getElementById('filtersFieldRemoveBtn-PRACOWNICY').form
				var fieldNameList = FIELD_LIST_PRACOWNICY
				fieldNameList.filter(function (fieldName) {
					if (!frm[fieldName] && DBG) console.log('Err missing field: "'+fieldName+'"');
					return (frm[fieldName]) ? true : false
				}).map(function (fieldName) {
					return [ fieldName, frm[fieldName].value ]
				}).filter(function (filter) {
					return ( filter[1].length > 0 )
				}).map(function (filter) {
					filterFields[ filter[0] ] = filter[1]
				})
				var filterIdGroup = getItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup');
				if (filterIdGroup) filterFields[ 'filterIdGroup' ] = filterIdGroup

				window.fetch(URL_ADD_PRACOWNICY_TO_GROUP, {
					method: 'POST',
					header: {
						'contentType': 'applications/json'
					},
					credentials: 'same-origin',
					body: JSON.stringify({
						'idGroup': idGroup,
						'type': 'filter',
						'filter': filterFields,
					})
				})
				.then(function(response) {
					return response.text();
				})
				.then(function(responseText) {

					try {
						return JSON.parse(responseText);
					} catch (e) {
						throw responseText;
					}
				})
				.then(function(result) {

					if (result.type == 'success') {
						p5UI__notifyAjaxCallback(result);
						resolve(result.msg);
					} else {
						reject(result.msg);
					}
				})
				.catch(function(error) {
					if(DBG) console.log('request failed', error);
				});
	    })
	  },
	  allowOutsideClick: false
	}).then(function (groupPracownicyData) {
		//TODO: pIOTRKU CZY TU POWINIENEM COŚ JESZCZE OBSŁUŻYĆ
	});
}

/**
 * Popup z opcja przeniesienia kontrahentów do innej grupy
 */
function addKontrahenciToGroup(event) {
	event.preventDefault();

	var kontrahenciIdsArray = getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');
	if (kontrahenciIdsArray === null || !kontrahenciIdsArray || !kontrahenciIdsArray.length) {
		showTextListIdKontrahentow = 'nie wybrano kontrahentów';
	} else {
		showTextListIdKontrahentow = '' + kontrahenciIdsArray.length + ' podmiotów/kontrahentów';
	}

	var arrayGroupOptions = [];
	var listGroupStorage = getItemLocalStorage('Bocian.biAuditForm.kontrahenci.groups');
  // utworzenie tablicy Optionsów grupy
	listGroupStorage.map(function(item) {
		if (item.ID !== undefined) {
	   	arrayGroupOptions[item.ID] = item.NAZWA;
		}
	});

	swal({
	  title: 'Dodaj do grupy',
		input: 'select',
		text: showTextListIdKontrahentow,
	  inputOptions: arrayGroupOptions,
	  inputPlaceholder: 'Wybierz grupę',
	  showCancelButton: true,
	  confirmButtonText: 'Zapisz',
	  showLoaderOnConfirm: true,
	  preConfirm: function (idGroup) {
	    return new Promise(function (resolve, reject) {
				if (!idGroup) {
					reject('Proszę wybrać nazwę grupy');
					return;
				}
				if (!kontrahenciIdsArray || !kontrahenciIdsArray.length) {
					reject('Wybierz kontrahentów');
					return;
				}

				window.fetch(URL_ADD_KONTRAHENCI_TO_GROUP, {
					method: 'POST',
					header: { 'contentType': 'applications/json' },
					credentials: 'same-origin',
					body: JSON.stringify({
						'idGroup': idGroup,
						'kontrahenciIds': getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds'),
					})
				})
				.then(function(response) {
					return response.text();
				})
				.then(function(responseText) {
					try {
						return JSON.parse(responseText);
					} catch (e) {
						throw responseText;
					}
				})
				.then(function(result) {
					if (result.type == 'success') {
						p5UI__notifyAjaxCallback(result);
						resolve(result.msg);
					} else {
						reject(result.msg);
					}
				})
				.catch(function(error) {
					if(DBG) console.warn('request failed', error);
				});
	    })
	  },
	  allowOutsideClick: false
	}).then(function (value) {
		{ // remove from selected
			setItemLocalStorage('Bocian.biAuditForm.kontrahenciIds', []);
			updateCountItemCheckedByType('kontrahenci');
			$('form').find(':checkbox').prop('checked', false);
		}
	});
}
function addKontrahenciAllToGroup(event) {
	event.preventDefault();

	var kontrahenciIdsArray = getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');

	var showTextListIdKontrahentow = 'wszystkich podmotów/kontrahentów pasujących do kryteriów wyszukiwania';

	var arrayGroupOptions = [];
	var listGroupStorage = getItemLocalStorage('Bocian.biAuditForm.kontrahenci.groups');
  // utworzenie tablicy Optionsów grupy
	listGroupStorage.map(function(item) {
		if (item.ID !== undefined) {
			arrayGroupOptions[item.ID] = item.NAZWA;
		}
	});

	swal({
	  title: 'Dodaj do grupy',
		input: 'select',
		text: showTextListIdKontrahentow,
	  inputOptions: arrayGroupOptions,
	  inputPlaceholder: 'Wybierz grupę',
	  showCancelButton: true,
	  confirmButtonText: 'Zapisz',
	  showLoaderOnConfirm: true,
	  preConfirm: function (idGroup) {
	    return new Promise(function (resolve, reject) {
				if (!idGroup) {
					reject('Proszę wybrać nazwę grupy');
					return;
				}

				var filterFields = {}
				var frm = document.getElementById('filtersFieldRemoveBtn-KONTRAHENCI').form
				var fieldNameList = FIELD_LIST_KONTRAHENCI
				fieldNameList.filter(function (fieldName) {
					if (!frm[fieldName] && DBG) console.log('Err missing field: "'+fieldName+'"')
					return (frm[fieldName]) ? true : false
				}).map(function (fieldName) {
					return [ fieldName, frm[fieldName].value ]
				}).filter(function (filter) {
					return ( filter[1].length > 0 )
				}).map(function (filter) {
					filterFields[ filter[0] ] = filter[1]
				})
				var filterIdGroup = getItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup');
				if (filterIdGroup) filterFields[ 'filterIdGroup' ] = filterIdGroup

				window.fetch(URL_ADD_KONTRAHENCI_TO_GROUP, {
					method: 'POST',
					header: {
						'contentType': 'applications/json'
					},
					credentials: 'same-origin',
					body: JSON.stringify({
						'idGroup': idGroup,
						'type': 'filter',
						'filter': filterFields,
					})
				})
				.then(function(response) {
					return response.text();
				})
				.then(function(responseText) {

					try {
						return JSON.parse(responseText);
					} catch (e) {
						throw responseText;
					}
				})
				.then(function(result) {
					$('#smad-table-PRACOWNICY form').find(':checkbox').prop('checked', false);
					if (result.type == 'success') {
						p5UI__notifyAjaxCallback(result);
						resolve(result.msg);
					} else {
						reject(result.msg);
					}
				})
				.catch(function(error) {
					if(DBG) console.log('request failed', error);
				});
	    })
	  },
	  allowOutsideClick: false
	});
}

function removeKontrahenciFromGroup(event) {
	event.preventDefault;

	var kontrahenciIdsArray = getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');
	if (kontrahenciIdsArray === null || !kontrahenciIdsArray || !kontrahenciIdsArray.length) {
		showTextListIdKontrahentow = 'nie wybrano kontrahentów';
	} else {
		showTextListIdKontrahentow = '' + kontrahenciIdsArray.length + ' podmiotów/kontrahentów';
	}

	var groupId = getItemLocalStorage("Bocian.biAuditForm.kontrahenci.filterIdGroup");
	var removeTitle = "Czy chcesz usunąć z "
	if (groupId === "0") {
		removeTitle += "systemu";
	} else {
		var arrayGroupOptions = [];
		var listGroupStorage = getItemLocalStorage('Bocian.biAuditForm.kontrahenci.groups');
	  // utworzenie tablicy Optionsów grupy
		listGroupStorage.map(function(item) {
			if (item.ID !== undefined) {
				arrayGroupOptions[item.ID] = item.NAZWA;
			}
		});
		removeTitle += "grupy ";
		removeTitle += arrayGroupOptions[groupId];
	}
	swal({
	  title: removeTitle,
		text: showTextListIdKontrahentow,
		showConfirmButton: true,
	  showCancelButton: true,
	  confirmButtonText: 'Usuń',
	  cancelButtonText: 'Anuluj',
	  showLoaderOnConfirm: true,
		preConfirm: function () {
	    return new Promise(function (resolve, reject) {
				if (!kontrahenciIdsArray || !kontrahenciIdsArray.length) {
					reject('Wybierz kontrahentów');
					return;
				}

				window.fetch(URL_REMOVE_KONTRAHENCI_FROM_GROUP, {
					method: 'POST',
					header: { 'contentType': 'applications/json' },
					credentials: 'same-origin',
					body: JSON.stringify({
						'idGroup': getItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup'),
						'kontrahenciIds': getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds'),
					})
				})
				.then(function(response) {
					return response.text();
				})
				.then(function(responseText) {
					try {
						return JSON.parse(responseText);
					} catch (e) {
						throw responseText;
					}
				})
				.then(function(result) {
					result
					if (result.type == 'success') {
						p5UI__notifyAjaxCallback(result);
						updateTopCounters();
						$('#smad-table-KONTRAHENCI form').find(':checkbox').prop('checked', false);
						resolve(result.msg);
					} else {
						reject(result.msg);
					}
				})
	    })
	  },
	  allowOutsideClick: false
	}).then((result) => {
		if (!result) return;
		if (result.dismiss) return;
		if (!result.value) return;
		{ // remove from selected
			setItemLocalStorage('Bocian.biAuditForm.kontrahenciIds', []);
			updateCountItemCheckedByType('kontrahenci');
			$('#smad-table-KONTRAHENCI form').find(':checkbox').prop('checked', false);
		}
		urlFetchKontrahenci(1);
	});
}

function removePracownikFromGroup(event){
	event.preventDefault;

	var pracownicyIdsArray = getItemLocalStorage('Bocian.biAuditForm.pracownicyIds');
	if (pracownicyIdsArray === null || !pracownicyIdsArray || !pracownicyIdsArray.length) {
		showTextListIdPracownikow = 'nie wybrano osób';
	} else {
		showTextListIdPracownikow = '' + pracownicyIdsArray.length + ' osób';
	}
	var groupId = getItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup');
	var removeTitle = "Czy chcesz usunąć z "
	if (!groupId) {
		removeTitle += "systemu";
	} else {
		var arrayGroupOptions = [];
		var listGroupStorage = getItemLocalStorage('Bocian.biAuditForm.pracownicy.groups');
	  // utworzenie tablicy Optionsów grupy
		listGroupStorage.map(function(item) {
			if (item.ID !== undefined) {
				arrayGroupOptions[item.ID] = item.NAZWA;
			}
		});
		removeTitle += "grupy ";
		removeTitle += arrayGroupOptions[groupId];
	}
	swal({
	  title: removeTitle,
		text: showTextListIdPracownikow,
	  showConfirmButton: true,
	  showCancelButton: true,
	  confirmButtonText: 'Usuń',
	  cancelButtonText: 'Anuluj',
	  showLoaderOnConfirm: true,
		preConfirm: function () {
	    return new Promise(function (resolve, reject) {
				if (!pracownicyIdsArray || !pracownicyIdsArray.length) {
					reject('Wybierz osoby');
					return;
				}

				window.fetch(URL_REMOVE_PRACOWNICY_FROM_GROUP, {
					method: 'POST',
					header: { 'contentType': 'applications/json' },
					credentials: 'same-origin',
					body: JSON.stringify({
						'idGroup': getItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup'),
						'pracownicyIds': getItemLocalStorage('Bocian.biAuditForm.pracownicyIds'),
					})
				})
				.then(function(response) {
					return response.text();
				})
				.then(function(responseText) {
					try {
						return JSON.parse(responseText);
					} catch (e) {
						throw responseText;
					}
				})
				.then(function(result) {
					if (result.type == 'success') {
						p5UI__notifyAjaxCallback(result);
						updateTopCounters();
						$('#smad-table-PRACOWNICY form').find(':checkbox').prop('checked', false);
						resolve(result.msg);
					} else {
						reject(result.msg);
					}
				})
	    })
	  },
	  allowOutsideClick: false
	}).then((result) => {
		if (!result) return;
		if (result.dismiss) return;
		if (!result.value) return;
		{ // remove from selected
			setItemLocalStorage('Bocian.biAuditForm.pracownicyIds', []);
			updateCountItemCheckedByType('pracownicy');
			$('#smad-table-PRACOWNICY form').find(':checkbox').prop('checked', false);
		}
		urlFetchPracownicy(1);
	});

}

function createGroupKontrahenci(event) {
	event.preventDefault();

	swal({
	  title: 'Utwórz grupę',
	  input: 'text',
	  showCancelButton: true,
	  confirmButtonText: 'Zapisz',
	  showLoaderOnConfirm: true,
	  preConfirm: function (NAZWA) {
	    return new Promise(function (resolve, reject) {
				if (!NAZWA) {
					reject('Proszę podać nazwę grupy');
					return;
				}

				window.fetch(URL_CREATE_PRACOWNICY_GROUP, {
					method: 'POST',
					header: { 'contentType': 'applications/json' },
					credentials: 'same-origin',
					body: JSON.stringify({
						'NAZWA': NAZWA
					})
				})
				.then(function(response) {
					return response.text();
				})
				.then(function(responseText) {
					try {
						return JSON.parse(responseText);
					} catch (e) {
						throw responseText;
					}
				})
				.then(function(result) {
					if (result.type == 'success') {
						p5UI__notifyAjaxCallback(result);
						resolve(result.body);
					} else {
						reject("Proszę podać inną nazwę grupy");
					}
				})
				.catch(function(error) {
					if(DBG) console.log('request failed', error);
				})
	    })
	  },
	  allowOutsideClick: false
	}).then(function (result) {
		if (!result) return;
		if (result.dismiss) return;
		if (!result.value) return;
		// NOTE: swal has input, so resolver object from preConfirm is in { value: resolvedObject }
		var addedGroup = result.value;
		if (addedGroup.id && addedGroup.nazwa) {
			$('#group-kontrahenci').append('<button class="btn btn-default" title="'+addedGroup['nazwa']+'" data-group-filter="'+addedGroup['id']+'">'+addedGroup['nazwa']+'</button>');
			{ // add group to local storage
				setItemLocalStorage(
					'Bocian.biAuditForm.kontrahenci.groups',
					[].concat(
						getItemLocalStorage('Bocian.biAuditForm.kontrahenci.groups') || [],
						[ { 'ID': addedGroup.id, 'NAZWA': addedGroup.nazwa } ]
					)
				);
			}
		}
		//TODO: aktualizacja fitrów na widoku -> SPrawdzić co dostaniemy w odpowiedzi po dodaniu filtra grupy
	});

}

function createGroupPracownicy(event) {
	event.preventDefault();

	swal({
	  title: 'Utwórz grupę',
	  input: 'text',
	  showCancelButton: true,
	  confirmButtonText: 'Zapisz',
	  showLoaderOnConfirm: true,
	  preConfirm: function (NAZWA) {
	    return new Promise(function (resolve, reject) {
				if (!NAZWA) {
					reject('Proszę podać nazwę grupy');
					return;
				}

				window.fetch(URL_CREATE_PRACOWNICY_GROUP, {
					method: 'POST',
					header: { 'contentType': 'applications/json' },
					credentials: 'same-origin',
					body: JSON.stringify({
						'NAZWA': NAZWA
					})
				})
				.then(function(response) {
					return response.text();
				})
				.then(function(responseText) {
					try {
						return JSON.parse(responseText);
					} catch (e) {
						throw responseText;
					}
				})
				.then(function(result) {
					console.warn('DBG group added? result', result)
					if (result.type == 'success') {
						p5UI__notifyAjaxCallback(result);
						resolve(result.body);
					} else {
						reject("Proszę podać inną nazwę grupy");
					}
				})
				.catch(function(error) {
					if(DBG) console.log('request failed', error);
				})

	    })
	  },
	  allowOutsideClick: false
	}).then(function (result) {
		if (!result) return;
		if (result.dismiss) return;
		if (!result.value) return;
		// NOTE: swal has input, so resolver object from preConfirm is in { value: resolvedObject }
		var addedGroup = result.value;
		if (addedGroup.id && addedGroup.nazwa) {
			$('#group-pracownicy').append('<button class="btn btn-default" title="'+addedGroup['nazwa']+'" data-group-filter="'+addedGroup['id']+'">'+addedGroup['nazwa']+'</button>');
			{ // add group to local storage
				setItemLocalStorage(
					'Bocian.biAuditForm.pracownicy.groups',
					[].concat(
						getItemLocalStorage('Bocian.biAuditForm.pracownicy.groups') || [],
						[ { 'ID': addedGroup.id, 'NAZWA': addedGroup.nazwa } ]
					)
				);
			}
		}
		//TODO: aktualizacja fitrów na widoku -> SPrawdzić co dostaniemy w odpowiedzi po dodaniu filtra grupy
	});

}

/**
 * Function for load view Form pracownicy/kontrahenci
 */
function rootChangeForm() {

	//todo: do przeniesienia
	urlFetchKontrahenciPowiazania();
	var valueUrl = global.location.hash;

	switch (valueUrl) {
		case '#KONTRAHENCI':
			$( ".container-bi_audit_form_kontrahenci_raport" ).html( VIEW_KONTRAHENCI );
			urlFetchKontrahenci(1);
			fetchGroupKontrahenci();
			$( ".container-bi_audit_form_pracownicy_raport" ).hide();
			$( ".container-bi_audit_form_kontrahenci_raport" ).show();
			$(".container-bi-audit_form_operacyjna_baza_zgloszen").hide();
			//parseGraph();
			break;

		case '#PRACOWNICY':
		$( ".container-bi_audit_form_pracownicy_raport" ).html( VIEW_PRACOWNICY );
			urlFetchPracownicy(1);
			fetchGroupPracownicy();
			$( ".container-bi_audit_form_kontrahenci_raport" ).hide();
			$( ".container-bi_audit_form_pracownicy_raport" ).show();
			$(".container-bi-audit_form_operacyjna_baza_zgloszen").hide();
			break;

		case '#OPERACYJNA_BAZA_ZGLOSZEN':
		$( ".container-bi_audit_form_operacyjna_baza_zgloszen" ).html( OPERACYJNA_BAZA_ZGLOSZEN );
		// urlFetchPracownicy(1);
		// fetchGroupPracownicy();
			$( ".container-bi_audit_form_kontrahenci_raport" ).hide();
			$( ".container-bi_audit_form_pracownicy_raport" ).hide();
			$(".container-bi-audit_form_operacyjna_baza_zgloszen").show();
			break;
		// case '#REAPORT':
		// 	$( ".container-bi_audit_form_raport_data" ).html( VIEW_TREE_REAPORT );
		// 	urlFetchKontrahenciPowiazania();
		// 	$( ".container-bi_audit_form_kontrahenci_raport" ).hide();
		// 	$( ".container-bi_audit_form_pracownicy_raport" ).hide();
		// 	$( ".container-bi_audit_form_raport_data" ).show();
		// break;

		default:
		$( ".container-bi_audit_form_pracownicy_raport" ).html( VIEW_PRACOWNICY );
			urlFetchPracownicy(1);
			fetchGroupPracownicy();
			$( ".container-bi_audit_form_kontrahenci_raport" ).hide();
			$( ".container-training" ).hide();
			$( ".container-about" ).hide();
			$( ".container-bi_audit_form_pracownicy_raport" ).show();
		break;
	}

	// pobranie defaultowego tytułu dla generowanego raportu
	loadCurrentReaportTitleInInput('.smad-reaport-title-pracownicy');
	loadCurrentReaportTitleInInput('.smad-reaport-title-kontrahenci');
	// aktualizacja inputów defaultowego tytułu dla generowanego raportu
	updateLocalStorageBiAuditReaportTitle('.smad-reaport-title-pracownicy');
	updateLocalStorageBiAuditReaportTitle('.smad-reaport-title-kontrahenci');

	//aktualizacja inputa głebokości powiazan
	loadCurrentDepthInInput('.smad-depth');
	loadCurrentDepthInInput('.smad-depth-kontrahenci');

	updateLocalStorageBiAuditDepth('.smad-depth');
	updateLocalStorageBiAuditDepth('.smad-depth-kontrahenci');
	// aktualizacja select option czy zwracać wyniki tylko z obiektami docelowymi
	updateLocalStorageBiAuditOnlyTargets('#smad-select-target');
	updateLocalStorageBiAuditOnlyTargets('#smad-select-target-kontrahenci');
	// load in select selected option BI_analiza_onlyTargets
	loadCurrentOnlyTargetsSelect();

}

function getAddressData(objectValue) {

	var objectValue = objectValue || [];
	var listData = '';

	if (!objectValue) {
		return true;
	}

	objectValue.forEach (function(item) {
		if (item['kodPocztowy']) { listData += '<div>kod pocztowy: ' + item['kodPocztowy'] + '<div>'; }
		if (item['miejscowosc']) { listData += '<div>miejscowość: ' + item['miejscowosc'] + '<div>'; }
		if (item['nrBudynku']) { listData += '<div>nr budynku: ' + item['nrBudynku'] + '<div>'; }
		if (item['nrLokalu']) { listData += '<div>nr lokalu: ' + item['nrLokalu'] + '<div>'; }
		if (item['typAdresu']) { listData += '<div>typ adresu: ' + item['typAdresu'] + '<div>'; }
		if (item['ulica']) { listData += '<div>ulica: ' + item['ulica'] + '<div>'; }
		listData += '<div>------<div>';
	});

	return listData;
}


/**
 *  Get name name group
 */
function getNameGroupById(store, filterIdGroup) {

	var NAZWA = '';
	if (!store || filterIdGroup === 0 ) {
		NAZWA = 'Wszyscy';
	} else {

		$(store).each(function() {
				if ( parseInt(filterIdGroup) === parseInt(this.ID) ) {
					NAZWA = this.NAZWA;
				}
		});
	}

	return NAZWA;
}


function urlFetchKontrahenci(page) {
	hideMoreRecordFunctionsPopover()
			var page = page || getItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page');

			selectPage('KONTRAHENCI', page);

			if ( page === 1) {
				setItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page', 1);
			}

			var filterIdGroup = getItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup');

			var frm = document.getElementById('filtersFieldRemoveBtn-KONTRAHENCI').form
			var fieldNameList = FIELD_LIST_KONTRAHENCI
			var filterFields = fieldNameList.map(function (fieldName) {
				return [ fieldName, frm[fieldName].value ]
			}).filter(function (filter) {
				return ( filter[1].length > 0 )
			}).map(function (filter) {
				return '' + filter[0] + '=' + filter[1]
			}).join('&')
			filterFields = (filterFields.length > 0) ? '&' + filterFields : ''

			fetch(URL_FETCH_KONTRAHENCI + '&page=' + page + '&filterIdGroup=' + filterIdGroup + filterFields, {
					credentials: 'same-origin'
				})
				.then(function parseJSON(response) {
					return response.json()

				var filterIdGroup = filterIdGroup || getItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup');
						})
				.then(function(data) {


						var listItemsKontrahenci = null;
						data.body.items.forEach (function(row) {
							listItemsKontrahenci += '<tr><td style="white-space:nowrap">' +
									'<input style="vertical-align:top" type="checkbox" name="kontrID[]" value="'+row['ID']+'" />' +
									'<i onClick="kontrahenciLoadMoreRecordFunctions(event, this, '+row['ID']+')" style="margin-left:6px; cursor:pointer; color:#333" class="glyphicon glyphicon-menu-hamburger" title="Więcej funkcji dla rekordu nr ' + row['ID'] + '"></i>' +
								'</td>' +
								'<td align="right">'+row["ID"]+'</td>'+
								'<td align="right">' + ( row["Nazwa_grupy_kapitalowej"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Pelna_nazwa_kontrahenta"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Numer_kontrahenta"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Skrocona_Nazwa_Kontrahenta"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Typ_kontrahenta"] || '' ) + '</td>' +
								'<td align="right">' + ( row["NIP"] || '' ) + '</td>' +
								'<td align="right">' + ( row["KRS"] || '' ) + '</td>' +
								'<td align="right">' + ( row["REGON"] || '' ) + '</td>' +
								'<td align="right">' + ( row["PESEL"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Forma_prawna_dzialalnosci"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Ulica"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Numer_budynku"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Numer_mieszkania_lokalu"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Miejscowosc"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Kod_pocztowy"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Kraj"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Telefon"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Fax"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Mail"] || '' ) + '</td>' +
								'<td align="right">' + ( row["A_ADM_COMPANY"] || '' ) + '</td>' +
								'<td align="right">' + ( row["A_CLASSIFIED"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Dodano"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Podmiot_dominujacy"] || '' ) + '</td>' +
								'<td align="right">' + ( row["Tytul_dokumentu"] || '' ) + '</td>' +
								'<td align="right">' + ( row["ownCompany"] || '' ) + '</td>' +
								'<td align="right">' + ( row["uwagi"] || '' ) + '</td></tr>';
						});

				if (data.body.pagination !== undefined) {
					Pagination.Init(document.getElementById('pagination-kontrahenci'), {
							url: BASE_URLS+'index.php?_route=UrlAction_Bocian#KONTRAHENCI',
							id_pagination: 'pagination-kontrahenci',
							type: 'KONTRAHENCI',
							limit: data.body.pagination.limit,
							total_items: data.body.pagination.total_items, // pages size
							size: data.body.pagination.size, // pages size
							page: page,  // selected page
							step: 1   // pages before and after current
					});

					var paginationShowNextCount = 1;
					if ( parseInt(data.body.pagination.current) !== 1) {
						 paginationShowNextCount = parseInt(data.body.pagination.limit) * (parseInt(data.body.pagination.current) - 1 ) + 1;
					}
					$('#paginationShowNextCount-KONTRAHENCI').text(paginationShowNextCount);
					$('#smad-filter-desc-kontrahenci').text(data.body.pagination.total_items);
					if (data.body.pagination.total_items > 0) {
						var btnAddAll = $('<button class="btn btn-primary" style="padding:1px 5px; margin-left:12px">DODAJ WSZYSTKIE DO ANALIZY</button>');
						btnAddAll.on('click', { type: 'kontrahenci', pagination: data.body.pagination }, addAllMatchesToReport);

						var btnAddByReport = $('<button class="btn btn-primary" style="padding:1px 5px; margin-left:12px">DODAJ DO ANALIZY WG RAPORTU</button>');
						btnAddByReport.on('click', { type: 'kontrahenci', pagination: data.body.pagination }, addToReportByPreviousReport);

						$('#smad-filter-desc-kontrahenci').append(btnAddAll);
						$('#smad-filter-desc-kontrahenci').append(btnAddByReport);
					}
				}

				var groupSelectData = getNameGroupById(getItemLocalStorage('Bocian.biAuditForm.kontrahenci.groups'), filterIdGroup);
				$('#smad-filter-head-title-kontrahenci').text(groupSelectData);
				if(DBG) console.log('kontrahenci groupSelectData: ', groupSelectData);


				$( "#body-kontrahenci" ).html(listItemsKontrahenci);
				checkAll('KONTRAHENCI');
				catchEventCheckbox('KONTRAHENCI');
				checkedChoiseItems('KONTRAHENCI', getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds') );

				//	$( ".container-bi_audit_raport" ).append( data.body.view );
					if(DBG) console.log('request succeeded with JSON responseKontrahenci', data)

					updateTopCounters();
				}).catch(function(error) {
					if(DBG) console.log('request failed', error);
				})
}

function urlFetchPracownicy(page) {
	hideMoreRecordFunctionsPopover()
		var page = page || getItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page');

		if ( page === 1) {
			setItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page', 1);
		}

			var filterIdGroup = getItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup');

			selectPage('PRACOWNICY', page);

			var frm = document.getElementById('filtersFieldRemoveBtn-PRACOWNICY').form
			var fieldNameList = FIELD_LIST_PRACOWNICY
			var filterFields = fieldNameList.filter(function (fieldName) {
				if (!frm[fieldName] && DBG) console.log('Err missing field: "'+fieldName+'"')
				return (frm[fieldName]) ? true : false
			}).map(function (fieldName) {
				return [ fieldName, frm[fieldName].value ]
			}).filter(function (filter) {
				return ( filter[1].length > 0 )
			}).map(function (filter) {
				return '' + filter[0] + '=' + filter[1]
			}).join('&')
			filterFields = (filterFields.length > 0) ? '&' + filterFields : ''

			var paginationLimit = 20;
			/*p5WFS_GetFeature('default_db__x3A__BI_audit_ENERGA_PRACOWNICY:BI_audit_ENERGA_PRACOWNICY',
				Object.assign({
					sortBy: 'ID+D',
					maxFeatures: paginationLimit,
					startIndex: (page - 1) * paginationLimit,
					// TODO: backRefNS, backRefPK, backRefField - TODO: from groups
					// resolve: 'all',
					// resolveDepth: 2
					'ogc:Filter': '<wfs:Query>' + '\n' + [
						'*',
						'default_db__x3A__BI_audit_ENERGA_PRACOWNICY_adresy:BI_audit_ENERGA_PRACOWNICY_adresy/*',
						[
							'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row_object:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row_object',
							'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row',
							'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row_object:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row_object',
							'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI:BI_audit_ENERGA_RUM_KONTRAHENCI'
						].join('/')
					].map(function (fieldName) {
						return '<wfs:PropertyName>' + fieldName + '</wfs:PropertyName>';
					}).join('\n') + '\n' + '</wfs:Query>'
				}, (filterIdGroup > 0)
					? {
							backRefNS: 'default_db/BI_audit_ENERGA_PRACOWNICY_group/BI_audit_ENERGA_PRACOWNICY_group',
							backRefPK: filterIdGroup,
							backRefField: 'default_db__x3A__BI_audit_ENERGA_PRACOWNICY:BI_audit_ENERGA_PRACOWNICY',
						}
					: {}
				)
			).then(function (items) {
				if(DBG)console.log('p5WFS_GetFeature: items: ', items);
			}).catch(function (err) {
				if(DBG)console.log('p5WFS_GetFeature: err: ', err);
			})*/

			fetch(URL_FETCH_PRACOWNICY + '&page=' + page + '&filterIdGroup=' + filterIdGroup + filterFields, {
				credentials: 'same-origin'
			})
			.then(function parseJSON(response) {
			  return response.json()
			})
			.then(function(data) {

					var addresPerson = '';
					var listItemsPracownik = null;
					if(DBG) console.log('urlFetchPracownicy', data.body.items);

					data.body.items.forEach (function(row) {

						if (row["default_db__x3A__BI_audit_ENERGA_PRACOWNICY_adresy:BI_audit_ENERGA_PRACOWNICY_adresy"]) {
							addresPerson = getAddressData(row["default_db__x3A__BI_audit_ENERGA_PRACOWNICY_adresy:BI_audit_ENERGA_PRACOWNICY_adresy"]);
						}

						listItemsPracownik += '<tr><td style="white-space:nowrap">' +
								'<input style="vertical-align:top" type="checkbox" name="prID[]" value="'+row['ID']+'" />' +
								'<i onClick="pracownicyLoadMoreRecordFunctions(event, this, '+row['ID']+')" style="margin-left:6px; cursor:pointer; color:#333" class="glyphicon glyphicon-menu-hamburger" title="Więcej funkcji dla rekordu nr ' + row['ID'] + '"></i>' +
							'</td>' +
							'<td align="right">'+row["ID"]+'</td>' +
							'<td align="right">' + ( row["imiona"] || '' ) + '</td>' +
							'<td align="right">' + ( row["nazwisko"] || '' ) + '</td>' +
							'<td align="right">' + ( row["nip"] || '' ) + '</td>' +
							'<td align="right">' + ( row["pesel"] || '' ) + '</td>' +
							'<td align="right">' + ( row["regon"] || '' ) + '</td>' +
							'<td align="right">' + ( row["source"] || '' ) + '</td>' +
							'<td align="right">' + ( row["jednostka_organizacyjna"] || '' ) + '</td>' +
							'<td align="right">' + ( row["A_STATUS"] || '' ) + '</td>' +
							'<td align="right">' + ( row["A_STATUS_INFO"] || '' ) + '</td>' +
							'<td align="right">' + ( row["L_APPOITMENT_USER"] || '' ) + '</td>' +
							'<td align="right">'+ addresPerson +'</td></tr>';
					});

			if (data.body.pagination.size) {
						Pagination.Init(document.getElementById('pagination-pracownicy'), {
							  url: BASE_URLS+'index.php?_route=UrlAction_Bocian#PRACOWNICY',
								id_pagination: 'pagination-pracownicy',
								type: 'PRACOWNICY',
								limit: data.body.pagination.limit,
								total_items: data.body.pagination.total_items, // pages size
								size: data.body.pagination.size, // pages size
								page: data.body.pagination.current,  // selected page
								step: 1   // pages before and after current
						});

						var paginationShowNextCount = 1;
						if ( parseInt(data.body.pagination.current) !== 1) {
							 paginationShowNextCount = parseInt(data.body.pagination.limit) * (parseInt(data.body.pagination.current) - 1 ) + 1;
						}
						$('#paginationShowNextCount-PRACOWNICY').text(paginationShowNextCount);
						$('#smad-filter-desc-pracownicy').text(data.body.pagination.total_items);
						if (data.body.pagination.total_items > 0) {
							var btnAddAll = $('<button class="btn btn-primary" style="padding:1px 5px; margin-left:12px">DODAJ WSZYSTKIE DO ANALIZY</button>')
							btnAddAll.on('click', { type: 'pracownicy', pagination: data.body.pagination }, addAllMatchesToReport);

							var btnAddByReport = $('<button class="btn btn-primary" style="padding:1px 5px; margin-left:12px">DODAJ DO ANALIZY WG RAPORTU</button>');
							btnAddByReport.on('click', { type: 'pracownicy', pagination: data.body.pagination }, addToReportByPreviousReport);

							$('#smad-filter-desc-pracownicy').append(btnAddAll);
							$('#smad-filter-desc-pracownicy').append(btnAddByReport);
						}
			}


			// wyświetlenie wybranej grupy w naglówku nad tabela
			var groupSelectData = getNameGroupById(getItemLocalStorage('Bocian.biAuditForm.pracownicy.groups'), filterIdGroup);
			$('#smad-filter-head-title-pracownicy').text(groupSelectData);

			// zaladaowanie listy pracowników
			$( "#body-pracownicy" ).html( listItemsPracownik);
				checkAll('PRACOWNICY');
				catchEventCheckbox('PRACOWNICY');
				checkedChoiseItems('PRACOWNICY', getItemLocalStorage('Bocian.biAuditForm.pracownicyIds') );

				updateTopCounters();
			}).catch(function(error) {
				if(DBG) console.log('request failed', error)
			})

}

function selectPage(type, nrPage) {
	var type = type.toLowerCase();

	$('#pagination-' + type + ' ul li a').each(function(index, value){
		if (this.text === nrPage) {
			$(this).addClass('active');
		} else {
			$(this).removeClass('active');
		}
	});
}

function checkAll(type) {

	$('#checkAll-' + type).change(function() {

		  var valueCheckbox = null;
			var checkboxes = $('form').find(':checkbox');
			if($(this).prop('checked')) {
				checkboxes.prop('checked', true);
				//valueCheckbox = checkboxes.prop("checked");
					 var allValsChecked = [];
					 var checkedValues = $('#smad-table-' + type + ' input:checkbox:checked').map(function() {

						 if (this.value !== 'on') {
							  allValsChecked.push(parseInt(this.value));
						 }
					}).get();

					updateListIdBiAuditReaport(type, allValsChecked);

			} else {

				checkboxes.prop('checked', false);

				var allValsUnChecked = [];
				var checkedValues = $('#smad-table-' + type + ' input:checkbox:not(:checked)').map(function() {
					if (this.value !== 'on') {
						 allValsUnChecked.push(parseInt(this.value));
					}
			 }).get();

				deleteListIdBiAuditReaport(type, allValsUnChecked);
			}

			// update count selected IDs
			updateCountItemCheckedByType(type.toLowerCase());
	});
}

/**
 * Select again checkbox before selected item chekbox from storage (pracownicy/kontrahenci)
 */
function checkedChoiseItems(type, store) {

	updateCountItemCheckedByType(type.toLowerCase());

	var idElement = 'smad-table-' + type;

	// if id element exist
	if (document.getElementById(idElement)) {

		// if not checked
		if (!store) {
			return false;
		}

		// checked again if user selected Item (pracownicy/kontrahent)
			for (i = 0; i < store.length; i++) {
				$('#body-'+type.toLowerCase() +' input[type=checkbox] ').map(function(k, v) {
				    if ( store[i] === parseInt(this.value) ){
								$(this).prop('checked', true);
				    }
					}).get();
			}

	}

	$('#smad-table-' + type + ' input[type=checkbox]').on( 'load', function() {
		var itemsCHecked = getItemLocalStorage('Bocian.biAuditForm.pracownicyIds');

	  getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');

				if (itemsCHecked.lenght === 0 ) {
						return;
				}
			  var valueCheckbox = null;
				var checkboxes = $('form').find(':checkbox');
				if($(this).prop('checked')) {
					   checkboxes.prop('checked', true);
						 var allValsChecked = [];
						 var checkedValues = $('#smad-table-' + type + ' input:checkbox:checked').map(function() {

							 if (this.value !== 'on') {
								  allValsChecked.push(parseInt(this.value));
							 }
				}).get();

					updateListIdBiAuditReaport(type, allValsChecked);

			} else {

				checkboxes.prop('checked', false);

				var allValsUnChecked = [];
				var checkedValues = $('#smad-table-' + type + ' input:checkbox:not(:checked)').map(function() {
					if (this.value !== 'on') {
						 allValsUnChecked.push(parseInt(this.value));
					}
			 }).get();

				deleteListIdBiAuditReaport(type, allValsUnChecked);
			}

	});
}

function catchEventCheckbox(type) {

		$('#smad-table-' + type + ' input[type="checkbox"]').on('change', function() {
		    if($(this).is(":checked")) {
					var allValsChecked = [];
					if (this.value !== 'on') {
						 allValsChecked.push(parseInt(this.value));
					}

					updateListIdBiAuditReaport(type, allValsChecked);
		    } else  {

						var allValsUnChecke = [];
						if (this.value !== 'on') {
							 allValsUnChecke.push(parseInt(this.value));
						}

						deleteListIdBiAuditReaport(type, allValsUnChecke);
		    }

				// update count selected IDs
				updateCountItemCheckedByType(type.toLowerCase());
		});

}

function clearSelectedCheckbox() {
	$('#checkAll-PRACOWNICY').prop('checked', false)
	$('#checkAll-KONTRAHENCI').prop('checked', false)
}

function updateListIdBiAuditReaport(type, valueArray) {

		var currentStoragePracownicyIds = [];
		var updateListPracownicyIds = null;
		var currentStorageKontrahenciIds = [];
		var updateListKontrahenciIds = null;

		if ( type == 'PRACOWNICY') {
				currentStoragePracownicyIds = getItemLocalStorage('Bocian.biAuditForm.pracownicyIds');

				if(currentStoragePracownicyIds !== null) {
					updateListPracownicyIds = [...new Set([...currentStoragePracownicyIds ,...valueArray])];
				}
				else {
					updateListPracownicyIds = valueArray;
				}

				setItemLocalStorage('Bocian.biAuditForm.pracownicyIds', updateListPracownicyIds);
		}

		if ( type == 'KONTRAHENCI') {
				currentStorageKontrahenciIds = getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');

				if(currentStorageKontrahenciIds !== null) {
					updateListKontrahenciIds = [...new Set([...currentStorageKontrahenciIds ,...valueArray])];
				}
				else {
					updateListKontrahenciIds = valueArray;
				}

				setItemLocalStorage('Bocian.biAuditForm.kontrahenciIds', updateListKontrahenciIds);
		}
}

function deleteListIdBiAuditReaport(type, valueArray) {
		if ( type == 'PRACOWNICY') {
				deleteItemLocalStorage('Bocian.biAuditForm.pracownicyIds', valueArray);
		}
		if ( type == 'KONTRAHENCI') {
				deleteItemLocalStorage('Bocian.biAuditForm.kontrahenciIds', valueArray);
		}
}

function fetchGroupPracownicy() {
	fetch(URL_FETCH_GROUP_PRACOWNICY, {
		credentials: 'same-origin'
	})
	.then(function parseJSON(response) {
		return response.json()
	})
	.then(function(data) {
		setItemLocalStorage('Bocian.biAuditForm.pracownicy.groups', data.body.itmesGroupPracownicy);

		if (data.body.itmesGroupPracownicy === null) {
			return;
		}

		var filterIdGroup = getItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup');
		var currentDepthValue = getItemLocalStorage('Bocian.biAuditForm.depth');
		setItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup', filterIdGroup);

		setItemLocalStorage('Bocian.biAuditForm.depth', currentDepthValue);

		var groupsPracownicy = '';
		var activeButton = '';

		data.body.itmesGroupPracownicy.forEach (function(row) {
			activeButton = '';
			if ( filterIdGroup === parseInt(row['ID']) ) {
				activeButton = 'active';
				$('#group-pracownicy button.active').removeClass('active');
			}
			groupsPracownicy += '<button class="btn btn-default '+activeButton+'" title="' + row['NAZWA'] + '" data-group-filter="' + row['ID'] + '">' + row['NAZWA'] + '</button>';
		});
		$("#group-pracownicy").append(groupsPracownicy);
		updateCountItemCheckedByType('pracownicy');

		detectChoiseFilter();
	}).catch(function(error) {
		if(DBG) console.log('request failed', error)
	});
}

function fetchGroupKontrahenci() {
	fetch(URL_FETCH_GROUP_KONTRAHENCI, {
		credentials: 'same-origin'
	})
	.then(function parseJSON(response) {
		return response.json()
	})
	.then(function(data) {
		setItemLocalStorage('Bocian.biAuditForm.kontrahenci.groups', data.body.itemsGroupKontrahenci);

		if (data.body.itemsGroupKontrahenci === null) {
			return;
		}

		var filterIdGroup = getItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup');
		var currentDepthValue = getItemLocalStorage('Bocian.biAuditForm.depth');
		setItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup', filterIdGroup);

		setItemLocalStorage('Bocian.biAuditForm.depth', currentDepthValue);

		var groupsKontrahenci = '';
		var activeButton = '';

		data.body.itemsGroupKontrahenci.forEach (function(row) {
			activeButton = '';
			if ( filterIdGroup === parseInt(row['ID']) ) {
				activeButton = 'active';
				$('#group-kontrahenci button.active').removeClass('active');
			}
			groupsKontrahenci += '<button class="btn btn-default '+activeButton+'" title="'+row['NAZWA']+'" data-group-filter="'+row['ID']+'">'+row['NAZWA']+'</button>';
		});

		$("#group-kontrahenci").append(groupsKontrahenci);
		updateCountItemCheckedByType('kontrahenci');

		detectChoiseFilter();
	}).catch(function(error) {
		if(DBG) console.log('request failed', error)
	});
}


function detectChoiseFilter() {

	$('#group-kontrahenci').on('click', 'button', function(evt) {
		$('#group-kontrahenci button.active').removeClass('active');
		$(this).addClass('active');

		// pobranie id grupy kliknietego buttonu
		var filterIdGroup = $(this).attr("data-group-filter");
		// aktaulna wartość  zagłebienia
		var currentDepthValue = getItemLocalStorage('Bocian.biAuditForm.depth');
		// czy zwracać wyniki tylko z obiektami docelowymi
		var analizaOnlyTargets = getItemLocalStorage('Bocian.biAuditForm.analizaOnlyTargets');

		//reset LocalStorage
		// defaultBIAuditLocalStorage();
		// ustawienie ostaniej wartości zagłebienia  przed resete
		setItemLocalStorage('Bocian.biAuditForm.depth', currentDepthValue);

		// czy zwracać wyniki tylko z obiektami docelowymi
		setItemLocalStorage('Bocian.biAuditForm.analizaOnlyTargets', analizaOnlyTargets);

		// ustawić id grupy do sesyjnej
		setItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup', parseInt(filterIdGroup));
		// wywylac funckje pobrania danych
		urlFetchKontrahenci(1);

	});
	$('#group-pracownicy').on('click', 'button', function(e) {
		e.preventDefault();
		$('#group-pracownicy button.active').removeClass('active');
		$(this).addClass('active');

		// pobranie id grupy kliknietego buttonu
		var filterIdGroup = $(this).attr("data-group-filter");
		// aktaulna wartość  zagłebienia
		var currentDepthValue = getItemLocalStorage('Bocian.biAuditForm.depth');
		//reset LocalStorage
		// defaultBIAuditLocalStorage();
		// ustawienie ostaniej wartości zagłebienia  przed resete
		setItemLocalStorage('Bocian.biAuditForm.depth', currentDepthValue);

		// ustawić id grupy do sesyjnej
		setItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup', parseInt(filterIdGroup));
		// wywylac funckje pobrania danych
		urlFetchPracownicy(1);

	});

}


// Local storage
function setItemLocalStorage(key, array) {
	localStorage.setItem(key, JSON.stringify(array));
}

function getItemLocalStorage(key) {
	var retrievedData = localStorage.getItem(key);
	var response = JSON.parse(retrievedData);

	return response;
}

function deleteItemLocalStorage(key, itemsArray) {

	var currentStorageArray = getItemLocalStorage(key);

	var newStorageArray = removeItemArrayInArray(currentStorageArray, itemsArray);

	setItemLocalStorage(key, newStorageArray);
}

/**
 * arr - array
 * item - search item
 */
function removeItemInArray(arr, item) {
      for(var i = arr.length; i--;) {
          if(arr[i] === item) {
              arr.splice(i, 1);
          }
      }

			return arr;
  }

/**
 * arr - array
 * item - array list items
 */
function removeItemArrayInArray(arr, itemsArray) {

      for(var i = arr.length; i--;) {
	      for(var j = itemsArray.length; j--;) {
	          if(arr[i] === itemsArray[j]) {
	              arr.splice(i, 1);
	          }
	      }
      }

			return arr;
  }

/**
 * Cleart list local storage by type
 * typeNameLocalStorage - name (praconwicy/kontrahenci)
 */
function clearListLocalStorageByType(typeNameLocalStorage) {

	if (typeNameLocalStorage === 'pracownicy') {
		setItemLocalStorage('Bocian.biAuditForm.pracownicyIds', []);
	}

	if (typeNameLocalStorage === 'kontrahenci') {
		setItemLocalStorage('Bocian.biAuditForm.kontrahenciIds', []);
	}
	// update count selected item
	updateCountItemCheckedByType(typeNameLocalStorage);
	// unchecked checkbox
	$('#smad-table-'+typeNameLocalStorage.toUpperCase()+' form').find(':checkbox').prop('checked', false);
}

/**
 * Update count selected pracowniyc/kontrahenci
 */
function updateCountItemCheckedByType(typeNameLocalStorage) {
  var countId = 0;

	updateTopCounters();

	if (typeNameLocalStorage === 'pracownicy') {
		var countPracownicy = getItemLocalStorage('Bocian.biAuditForm.pracownicyIds');

		if (countPracownicy === null || countPracownicy === undefined) {
			return countId;
		}
		countId = Object.keys(countPracownicy).length;
		$('#count-selected-item-pracownicy').text(countId);
	}

	if (typeNameLocalStorage === 'kontrahenci') {
		var countKontrahenci = getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');

		if (countKontrahenci === null || countKontrahenci === undefined) {
			return countId;
		}

		countId = Object.keys(countKontrahenci).length;
		$('#count-selected-item-kontrahenci').text(countId);
	}

	return countId;
}

function updateTopCounters() {
	var idsPracownicy = getListFromLocalStorage('Bocian.biAuditForm.pracownicyIds');
	var idsKontrahenci = getListFromLocalStorage('Bocian.biAuditForm.kontrahenciIds');
	var pozostaleOd = getListFromLocalStorage(getSelectedListLocalStorageKey('OD'));
	var pozostaleDo = getListFromLocalStorage(getSelectedListLocalStorageKey('DO'));
	var allOdLength = idsPracownicy.length + pozostaleOd.length;
	var allDoLength = idsKontrahenci.length + pozostaleDo.length;
	var depthValue = getItemLocalStorage('Bocian.biAuditForm.depth');

	if (globalRaportStore) globalRaportStore.dispatch({
		type: 'UPDATE',
		totalOdPracownicy: idsPracownicy.length,
		totalDoKontrahenci: idsKontrahenci.length,
	})

	if(DBG) console.warn({totalPracownicy: idsPracownicy.length, totalKontrahenci: idsKontrahenci.length})
	$('.top--count-selected-item-pracownicy').text(idsPracownicy.length ? '('+idsPracownicy.length+')' : '');
	$('.top--count-selected-item-kontrahenci').text(idsKontrahenci.length ? '('+idsKontrahenci.length+')' : '');
	$('.bottom--count-selected-item-pracownicy').text(idsPracownicy.length ? "Wybrano: (" + idsPracownicy.length + ") osób" : '');
	$('.bottom--count-selected-item-kontrahenci').text(idsKontrahenci.length ? "Wybrano: (" + idsKontrahenci.length + ") podmiotów/kontrahentaów" : '');

	// disable button generate reaport if not choise 'praconwicy' or 'kontrahenci'
	if ( !allOdLength && !allDoLength ) {
		$('.smad-generate-reaport-button').addClass('disabled');
	} else {
		if ( ( !allOdLength || !allDoLength ) && parseInt(depthValue) > 6 ) {
			$('.bottom--message-warning-critical-search').text(messageCriticalSearchData);
		} else {
			$('.bottom--message-warning-critical-search').text('');
		}
		$('.smad-generate-reaport-button').removeClass('disabled');
	}
}


// Pagination
var Pagination = {

    code: '',			// end show html paginations
    clickPage: 1, // set default 1 page

    // --------------------
    // Utility
    // --------------------
    //  initialize  default data
    Extend: function(data) {
        data = data || {};
        Pagination.url = data.url;
        Pagination.id_pagination = data.id_pagination;
        Pagination.type = data.type;
        Pagination.limit = data.limit;
        Pagination.total_items = data.total_items;
        Pagination.size = data.size || 2;
        Pagination.page = data.page || 1;
        Pagination.step = data.step || 3;
    },

    // add pages by number (from [s] to [f])
    Add: function(s, f) {
        for (var i = s; i < f; i++) {
            Pagination.code += '<li><a href="' + Pagination.url + '" class="btn btn-default">' + i + '</a></li>';
        }
    },

    // add last page with separator
    Last: function() {
        Pagination.code += '<li><a href="' + Pagination.url + '" class="btn btn-default">>></a></li>';
    },

    // add first page with separator
    First: function() {
        Pagination.code += '<li><a href="' + Pagination.url + '" class="btn btn-default"><<</a></li>';
    },

    // add last page with separator
    Next: function() {
        Pagination.code += '<li><a href="' + Pagination.url + '" class="btn btn-default">></a></li>';
    },

    // add first page with separator
    Prev: function() {
        Pagination.code += '<li><a href="' + Pagination.url + '" class="btn btn-default"><</a></li>';
    },



    // --------------------
    // Handlers
    // --------------------

    // change page
    Click: function() {
			clearSelectedCheckbox();

			var selectPage = $("#pagination-"+Pagination.type.toLowerCase()+' .tblAjax__footer__toolbar__pagination').find('a.active').text();
			Pagination.clickPage = +this.innerHTML || '';
			if ( selectPage === NaN || selectPage > Pagination.size) { selectPage = 1; }

			switch (this.innerHTML) {
				case '&gt;&gt;': // last
					Pagination.clickPage = Pagination.size;
					break;

				case '&lt;&lt;': // first
					Pagination.clickPage = 1;
					break;

				case '&lt;': // prev
					Pagination.clickPage = parseInt(selectPage) - 1;
					if (Pagination.clickPage < 1) {
							Pagination.clickPage = 1;
					}

					break;

				case '&gt;': // next
					Pagination.clickPage = parseInt(selectPage) + 1;

					if (Pagination.clickPage > Pagination.size) {
							Pagination.clickPage = Pagination.size;
					}
					break;
			}

			if ( Pagination.type === 'KONTRAHENCI' ) {
				setItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page', Pagination.clickPage);
				Pagination.page = urlFetchKontrahenci(Pagination.clickPage);
			}
			else if ( Pagination.type === 'PRACOWNICY' ){
				setItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page', Pagination.clickPage);
				Pagination.page = urlFetchPracownicy(Pagination.clickPage);
			}

        Pagination.Start();
    },


    // --------------------
    // Script structure pagination
    // --------------------

    // binding pages
    Bind: function() {
        var a = Pagination.e.getElementsByTagName('a');
				var currentPage = Pagination.clickPage || 1;
        for (var i = 0; i < a.length; i++) {
            if (+a[i].innerHTML === Pagination.page) a[i].className = 'btn btn-default active';
            a[i].addEventListener('click', Pagination.Click, false);
        }
    },

    // write pagination
    Finish: function() {
        Pagination.e.innerHTML = Pagination.code;
        Pagination.code = '</ul></nav>';
        Pagination.Bind();
    },


    // find pagination type
    Start: function() {
			Pagination.code = '';
			if ( Pagination.type === 'KONTRAHENCI' ) {
				Pagination.code = '<div class="foot-info tblAjax__footer__toolbar__info footer_pagination_menu_items"><p>Wiersze od <span id="paginationShowNextCount-KONTRAHENCI"></span> do ' + Pagination.total_items + ' z ' + Pagination.total_items + '</p></div>';
			} else if ( Pagination.type === 'PRACOWNICY' ) {
					Pagination.code = '<div class="foot-info tblAjax__footer__toolbar__info footer_pagination_menu_items"><p>Wiersze od <span id="paginationShowNextCount-PRACOWNICY"></span> do ' + Pagination.total_items + ' z ' + Pagination.total_items + '</p></div>';
			}
			Pagination.code += '<nav aria-label="Page navigation" class="footer_pagination_menu_items"><ul class="btn-group tblAjax__footer__toolbar__pagination smad-pagination">';
			Pagination.First();
			Pagination.Prev();


				if ( Pagination.type === 'KONTRAHENCI' ) {
					Pagination.page = getItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page') || 1;
				}
				else if ( Pagination.type === 'PRACOWNICY' ) {
					Pagination.page = getItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page') || 1;
				}

				if ( Pagination.page > Pagination.size ) {
						Pagination.page = 1;
				}

        if (Pagination.size < Pagination.step * 2 + 6) {
            Pagination.Add(1, Pagination.size + 1);
        }
        else if (Pagination.page < Pagination.step * 2 + 1) {
            Pagination.Add(1, Pagination.step * 2 + 4);
        }
        else if (Pagination.page > Pagination.size - Pagination.step * 2) {
            Pagination.Add(Pagination.size - Pagination.step * 2 - 2, Pagination.size + 1);
        }
        else {
            Pagination.Add(Pagination.page - Pagination.step, Pagination.page + Pagination.step + 1);
        }
				Pagination.Next();
				Pagination.Last();
        Pagination.Finish();
    },


    // --------------------
    // Initialization
    // --------------------

    // binding buttons
    Buttons: function(e) {
        var nav = e.getElementsByTagName('a');
    },

    // create skeleton
    Create: function(e) {

        var html = [
             '<div></div>'  // pagination container
        ];

        e.innerHTML = html.join('');
        Pagination.e = e.getElementsByTagName('div')[0];
        Pagination.Buttons(e);
    },

    // init
    Init: function(e, data) {
        Pagination.Extend(data);
        Pagination.Create(e);
        Pagination.Start();
    }
};

function todo__fetchRaport(id) {
/*	p5WFS_GetFeature('default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', {
		primaryKey: id,
		resolve: 'all',
		resolveDepth: 3,
	}).then(function (features) {
		if(DBG) console.log('features', features)
	}).catch(function (e) {
		if(DBG) console.warn(e)
		p5UI__notifyAjaxCallback({ type: 'error', msg: e })
	})*/
}

function removeFiltersPracownicy(event, btnNode) {
	event.preventDefault()
	var fieldNameList = FIELD_LIST_PRACOWNICY
	fieldNameList.forEach(function (fieldName) {
		btnNode.form[fieldName].value = ''
	})
	urlFetchPracownicy(1)
}
function removeFiltersKontrahenci(event, btnNode) {
	event.preventDefault()
	var fieldNameList = FIELD_LIST_KONTRAHENCI
	fieldNameList.forEach(function (fieldName) {
		btnNode.form[fieldName].value = ''
	})
	urlFetchKontrahenci(1)
}

function onChangeFiltersPracownicy(event, inputNode) {
	urlFetchPracownicy(1)
}
function onKeypressFiltersPracownicy(event, inputNode) {
	if ("Enter" === event.key) {
		event.stopPropagation()
		event.preventDefault()
		urlFetchPracownicy(1)
		return false
	}
}
function onChangeFiltersKontrahenci(event, inputNode) {
	urlFetchKontrahenci(1)
}
function onKeypressFiltersKontrahenci(event, inputNode) {
	if ("Enter" === event.key) {
		event.stopPropagation()
		event.preventDefault()
		urlFetchKontrahenci(1)
		return false
	}
}

function loadMoreRecordFunctions(event, node, rowPK, namespace) {
	var _node = node
	var _rowPK = rowPK
	var toShow = true
	if (RECORD_MORE_FUNCTIONS_OPENED_NODE) {
		if (RECORD_MORE_FUNCTIONS_OPENED_NODE === node) toShow = false
		if (RECORD_MORE_FUNCTIONS_OPENED_NODE !== node) {
			jQuery(RECORD_MORE_FUNCTIONS_OPENED_NODE).popover('destroy')
		}
	}
	RECORD_MORE_FUNCTIONS_OPENED_NODE = node

	// jQuery(node).popover({
	// 	container: 'body',
	// 	placement: 'right',
	// 	trigger: 'click',
	// 	template: '<div class="popover" role="tooltip" style="max-width:600px;width:440px;">' +
	// 		'<div class="arrow"></div>' +
	// 		'<div style="display:block;position:relative;">' +
	// 			'<div class="popover-title">' +
	// 			'</div>' +
	// 			'<button type="button" class="close" onclick="return hideMoreRecordFunctionsPopover();" style="position:absolute;right:8px;top:6px;">&times;</button>' +
	// 		'</div>' +
	// 		'<div class="popover-content"></div>' +
	// 		'</div>' +
	// 	'',
	// 	html: true,
	// })
	// jQuery(node).popover('show')

	global.fetch(BASE_URLS + 'index.php?_route=ViewTableAjax&namespace=' + namespace + '&_task=moreFunctionsCellAjax&ID=' + rowPK, {
		credentials: 'same-origin'
	}).then(function (response) {
		return response.json()
	}).then(function (json) {
		var funcListWrap = $('<div></div>')
		var funcListNode = $('<ul class="list-unstyled popoverRowFunctions"></ul>').appendTo(funcListWrap)

		if (_node === RECORD_MORE_FUNCTIONS_OPENED_NODE) {
			if (json && 'success' === json.type && json.rowFunctions && json.rowFunctions.length > 0) {
				json.rowFunctions.forEach(function(funObj) {
					var funcNode = p5UI_TableAjax_generateFunctionNode(funObj, _rowPK, {ico: true, label: true});
					var funcItemNode = jQuery('<li></li>')
					funcItemNode.append(funcNode)
					funcListNode.append(funcItemNode)
				});
			}
		}

		// jQuery(RECORD_MORE_FUNCTIONS_OPENED_NODE).popover('destroy')
		jQuery(RECORD_MORE_FUNCTIONS_OPENED_NODE).popover({
			container: 'body',
			placement: 'right',
			trigger: 'click',
			template: '<div class="popover" role="tooltip" style="max-width:600px;width:440px;">' +
				'<div class="arrow"></div>' +
				'<div style="display:block;position:relative;">' +
					'<div class="popover-title">' +
					'</div>' +
					'<button type="button" class="close" onclick="return hideMoreRecordFunctionsPopover();" style="position:absolute;right:8px;top:6px;">&times;</button>' +
				'</div>' +
				'<div class="popover-content"></div>' +
				'</div>' +
			'',
			html: true,
			content: funcListWrap.html(),
		})
		jQuery(RECORD_MORE_FUNCTIONS_OPENED_NODE).popover('show')

	}).catch(function (err) {
		if(DBG)  console.log('err', err);
	})
}

var p5UI_TableAjax_generateFunctionNode = function(funObj, rowPK, props) {
	var defaultsProps = {
				ico: true,
				label: false
			},
			props = jQuery.extend({}, defaultsProps, props);
			funcNode = $('<a href="#" style="margin:0 2px;"></a>')
	;
	if ('href' in funObj) funcNode.attr('href', p5Utils__format(funObj.href, [rowPK]));
	if (props.ico) {
		if ('ico' in funObj) funcNode.append('<span class="' + funObj.ico + '"></span>');
	}
	if ('onclick' in funObj) funcNode.attr('onclick', p5Utils__format(funObj.onclick, [rowPK]));
	if ('title' in funObj) funcNode.attr('title', funObj.title);
	if ('target' in funObj) funcNode.attr('target', funObj.target);

	if (props.label) {
		if ('label' in funObj) {
			funcNode.append(' ' + funObj.label);
		} else if ('title' in funObj) {
			funcNode.append(' ' + funObj.title);
		}
	}

	return funcNode;
};
global.p5UI_TableAjax_generateFunctionNode = p5UI_TableAjax_generateFunctionNode

function addAllMatchesToReport(event) {
	switch (event.data.type) {
		case 'kontrahenci': break; // OK
		case 'pracownicy': break; // OK
		default: throw "Wrong type";
	}
	var postData = {}
	if ('filter_idGroup' in event.data.pagination && event.data.pagination['filter_idGroup']) postData['filter_idGroup'] = event.data.pagination['filter_idGroup']
	Object.keys(event.data.pagination).filter(function (key) {
		return ('f_' === key.substr(0, 2))
	}).forEach(function (filterKey) {
		var value = event.data.pagination[filterKey]
		postData[filterKey] = value
	})
	var thisButton = $(this)
	thisButton.attr('disabled', true)
	thisButton.text( thisButton.text() + '...' )

	if ('pracownicy' === event.data.type) {
		p5UI__notifyAjaxCallback({ type: 'info', msg: "Pobieranie pracowników..." })

		var frm = document.getElementById('filtersFieldRemoveBtn-PRACOWNICY').form
		var fieldNameList = FIELD_LIST_PRACOWNICY
		fieldNameList.filter(function (fieldName) {
			if (!frm[fieldName] && DBG) console.log('Err missing field: "'+fieldName+'"')
			return (frm[fieldName]) ? true : false
		}).map(function (fieldName) {
			return [ fieldName, frm[fieldName].value ]
		}).filter(function (filter) {
			return ( filter[1].length > 0 )
		}).forEach(function (filter) {
			postData[ filter[0] ] = filter[1];
		})

		global.fetch(URL_FETCH_PRACOWNICY_IDS_AJAX, {
			credentials: 'same-origin',
			method: 'POST',
			headers: { 'Content-Type': 'application/json' },
			body: JSON.stringify(postData)
		})
		.then(function __parseJSON(response) {
			return response.json()
		})
		.then(function (json) {
			if ('success' === json.type && json.body && json.body.ids) {
				updateListIdBiAuditReaport('PRACOWNICY', json.body.ids.map(function (id) {
					return parseInt(id)
				}))
				// jQuery('#body-pracownicy').find('input[name="prID[]"]').attr('checked', true)
				jQuery('#body-pracownicy').find('input[name="prID[]"]').each(function (idx, inputNode) {
					inputNode.checked = true;
				})
				thisButton.attr('disabled', false)
				var txt = thisButton.text()
				thisButton.text( '...' === txt.substr(-3) ? txt.substr(0, txt.length - 3) : txt )
				updateCountItemCheckedByType('pracownicy');
				p5UI__notifyAjaxCallback({ type: 'success', msg: "Dodano "+json.body.ids.length+" pracowników" })
			}
		})
		.catch(function (e) {
			p5UI__notifyAjaxCallback({ type: 'error', msg: '' + e })
			thisButton.attr('disabled', false)
			var txt = thisButton.text()
			thisButton.text( '...' === txt.substr(-3) ? txt.substr(0, txt.length - 3) : txt )
		})
	}
	if ('kontrahenci' === event.data.type) {
		p5UI__notifyAjaxCallback({ type: 'info', msg: "Pobieranie podmiotów/kontrahentów..." })

		var frm = document.getElementById('filtersFieldRemoveBtn-KONTRAHENCI').form
		var fieldNameList = FIELD_LIST_KONTRAHENCI
		fieldNameList.filter(function (fieldName) {
			if (!frm[fieldName] && DBG) console.log('Err missing field: "'+fieldName+'"')
			return (frm[fieldName]) ? true : false
		}).map(function (fieldName) {
			return [ fieldName, frm[fieldName].value ]
		}).filter(function (filter) {
			return ( filter[1].length > 0 )
		}).forEach(function (filter) {
			postData[ filter[0] ] = filter[1];
		})

		global.fetch(URL_FETCH_KONTRAHENCI_IDS_AJAX, {
			credentials: 'same-origin',
			method: 'POST',
			headers: { 'Content-Type': 'application/json' },
			body: JSON.stringify(postData)
		})
		.then(function __parseJSON(response) {
			return response.json()
		})
		.then(function (json) {
			if ('success' === json.type && json.body && json.body.ids) {
				updateListIdBiAuditReaport('KONTRAHENCI', json.body.ids.map(function (id) {
					return parseInt(id)
				}))
				// jQuery('#body-kontrahenci').find('input[name="kontrID[]"]').attr('checked', true); // Not working
				jQuery('#body-kontrahenci').find('input[name="kontrID[]"]').each(function (idx, inputNode) {
					inputNode.checked = true;
				})
				thisButton.attr('disabled', false);
				var txt = thisButton.text()
				thisButton.text( '...' === txt.substr(-3) ? txt.substr(0, txt.length - 3) : txt )
				updateCountItemCheckedByType('kontrahenci');
				p5UI__notifyAjaxCallback({ type: 'success', msg: "Dodano "+json.body.ids.length+" kontrahentów" })
			}
		})
		.catch(function (e) {
			p5UI__notifyAjaxCallback({ type: 'error', msg: '' + e })
			thisButton.attr('disabled', false)
			var txt = thisButton.text()
			thisButton.text( '...' === txt.substr(-3) ? txt.substr(0, txt.length - 3) : txt )
		});
	}
}

function mock_error__fetchLastReports(id) {
	return new Promise(function (resolve) {
		throw "Wystąpił błąd, spróbuj ponownie później"
	})
}
function mock__fetchLastReports(id) {
	return new Promise(function (resolve) {
		var fakeResponse = '{"type":"success","msg":"ostatnie raporty","body":{"items":[{"id":"103","adnotacje":"raport pani x","totalPracownicy":"1","totalKontrahenci":"2"},{"id":"102","adnotacje":"test","totalPracownicy":"1","totalKontrahenci":"1"},{"id":"101","adnotacje":"Zuranski test all 7","totalPracownicy":"1","totalKontrahenci":"9307"},{"id":"100","adnotacje":"kike all 4","totalPracownicy":"5","totalKontrahenci":"9305"},{"id":"99","adnotacje":"test pracownik z KRS bez celu 3","totalPracownicy":"1","totalKontrahenci":"9305"}]}}';
		var json = JSON.parse(fakeResponse);
		var items = json.body.items;
		console.log('items', items)
		setTimeout(function () {
			console.log('resolve items', items)
			resolve(items);
		}, 500);
	});
}
function fetchLastReports(id) {
	return global.fetch(URL_FETCH_LAST_REPORTS_AJAX, {
		credentials: 'same-origin',
		method: 'POST',
		headers: { 'Content-Type': 'application/json' },
		body: JSON.stringify({ id: id })
	})
	.then(function __parseJSON(response) {
		return response.json()
	})
	.then(function (json) {
		if ('success' === json.type && json.body && json.body.items) {
			if (!json.body.items.length) throw "Brak danych"
			return json.body.items;
		}
		throw "Wystąpił błąd, spróbuj ponownie później.";
	})
}
function fetchPracownicyIdsByReport(id) {
	return global.fetch(URL_FETCH_PRACOWNICY_IDS_BY_REPORT_AJAX, {
		credentials: 'same-origin',
		method: 'POST',
		headers: { 'Content-Type': 'application/json' },
		body: JSON.stringify({ id: id })
	})
	.then(function __parseJSON(response) {
		return response.json()
	})
	.then(function (json) {
		if ('success' === json.type && json.body && json.body.ids) {
			if (!json.body.ids.length) throw "Brak danych"
			return json.body.ids;
		}
		throw "Wystąpił błąd, spróbuj ponownie później.";
	})
}
function fetchKontrahenciIdsByReport(id) {
	return global.fetch(URL_FETCH_KONTRAHENCI_IDS_BY_REPORT_AJAX, {
		credentials: 'same-origin',
		method: 'POST',
		headers: { 'Content-Type': 'application/json' },
		body: JSON.stringify({ id: id })
	})
	.then(function __parseJSON(response) {
		return response.json()
	})
	.then(function (json) {
		if ('success' === json.type && json.body && json.body.ids) {
			if (!json.body.ids.length) throw "Brak danych"
			return json.body.ids;
		}
		throw "Wystąpił błąd, spróbuj ponownie później.";
	})
}

function addToReportByPreviousReport(event) {
	var pageType = (event.data.type) ? event.data.type : '';
	switch (pageType) {
		case 'pracownicy': break; // OK
		case 'kontrahenci': break; // OK
		default: throw "Wrong type";
	}

	var thisButton = $(this)
	thisButton.attr('disabled', true)
	thisButton.text( thisButton.text() + '...' )
	function this__enableButton() {
		thisButton.attr('disabled', false)
		var txt = thisButton.text()
		thisButton.text( '...' === txt.substr(-3) ? txt.substr(0, txt.length - 3) : txt )
	}

	var lastReportOptions = new Promise(function (resolve) {
		fetchLastReports() // TODO: TEST remote `mock__`
		.then(function (items) {
			var options = {};
			items.forEach(function (item) {
				var label = "Nr " + item.id + ": " + item.adnotacje + " ";
				var total = 0;
				switch (pageType) {
					case 'pracownicy':  total = parseInt(item.totalPracownicy); break;
					case 'kontrahenci': total = parseInt(item.totalKontrahenci); break;
				}
				label += ( total > 0 ? "(" + total + ")" : "brak");
				options['raport-'+item.id] = label;
			});
			resolve(options);
		})
		.catch(function (e) {
			swal.showValidationError(''+e)
			swal.hideLoading();
			resolve();
		})
	});

	swal({
		title: "Dodaj " + ('pracownicy' === pageType ? "praconików" : "kontrahentów") + " do analizy",
		showCancelButton: true,
		cancelButtonText: "Anuluj",
		showConfirmButton: true,
		confirmButtonText: "Wybierz",
		focusCancel: true,
		width: 600,
		input: 'select',
		inputOptions: lastReportOptions,
		inputClass: "form-control input-lg",
		preConfirm: function (selected) {
			var id = parseInt(selected.substr('raport-'.length));
			swal.showLoading();
			if ('pracownicy' === pageType) {
				return new Promise(function (resolve) {
					fetchPracownicyIdsByReport(id)
					.then(function (ids) {
						updateListIdBiAuditReaport('PRACOWNICY', ids.map(function (id) {
							return parseInt(id)
						}))
						ids.forEach(function (id) {
							jQuery('#body-pracownicy').find('input[name="prID[]"][value="'+id+'"]').each(function (idx, inputNode) {
								inputNode.checked = true;
							})
						})
						updateCountItemCheckedByType('pracownicy');
						p5UI__notifyAjaxCallback({ type: 'success', msg: "Dodano "+ids.length+" pracowników" })
						resolve();
					})
					.catch(function (e) {
						swal.showValidationError(''+e)
						swal.hideLoading();
						resolve();
					});
				});
			} else if ('kontrahenci' === pageType) {
				return new Promise(function (resolve) {
					fetchKontrahenciIdsByReport(id)
					.then(function (ids) {
						updateListIdBiAuditReaport('KONTRAHENCI', ids.map(function (id) {
							return parseInt(id)
						}))
						ids.forEach(function (id) {
							jQuery('#body-kontrahenci').find('input[name="kontrID[]"][value="'+id+'"]').each(function (idx, inputNode) {
								inputNode.checked = true;
							})
						})
						updateCountItemCheckedByType('kontrahenci');
						p5UI__notifyAjaxCallback({ type: 'success', msg: "Dodano "+ids.length+" kontrahentów" })
						resolve();
					})
					.catch(function (e) {
						swal.showValidationError(''+e)
						swal.hideLoading();
						resolve();
					});
				});
			} else return true;
		},
		// inputValidator: (value) => {
		// 	return !value && 'Proszę wybrać raport'
		// }
		// html: '<p>Ostatnie raporty:</p>' + '<ul id="' + uniqHtmlId + '"></ul></p>',
	}).then(function (selected) {
		this__enableButton();
	}).catch(function (e) {
		this__enableButton();
	})
}


$(document).ready(function(){
	globalRaportStore = createStoreWithThunkMiddleware(bocianRaportStore);

	global[STORE_NAME] = globalRaportStore;
	DBG && console.warn('DBG:: SET window[STORE_NAME]', { store: window[STORE_NAME], STORE_NAME: STORE_NAME, globalRaportStore })

	ReactDOM.render(
		h(P5UI__BocianHeader, {
			store: globalRaportStore
		}),
		document.getElementById('bi_audit_header')
	);

	rootChangeForm();
	updateTopCounters();

	var unsubscribe = globalRaportStore.subscribe(function () {
		// TODO: fetch data from globalRaportStore.getState()
		var idsPracownicy = getListFromLocalStorage('Bocian.biAuditForm.pracownicyIds');
		var idsKontrahenci = getListFromLocalStorage('Bocian.biAuditForm.kontrahenciIds');
		var pozostaleOd = getListFromLocalStorage(getSelectedListLocalStorageKey('OD'));
		var pozostaleDo = getListFromLocalStorage(getSelectedListLocalStorageKey('DO'));
		var allOdLength = idsPracownicy.length + pozostaleOd.length;
		var allDoLength = idsKontrahenci.length + pozostaleDo.length;
		var depthValue = getItemLocalStorage('Bocian.biAuditForm.depth');

		if(DBG) console.warn({totalPracownicy: idsPracownicy.length, totalKontrahenci: idsKontrahenci.length})
		$('.top--count-selected-item-pracownicy').text(idsPracownicy.length ? '('+idsPracownicy.length+')' : '');
		$('.top--count-selected-item-kontrahenci').text(idsKontrahenci.length ? '('+idsKontrahenci.length+')' : '');
		$('.bottom--count-selected-item-pracownicy').text(idsPracownicy.length ? "Wybrano: (" + idsPracownicy.length + ") osób" : '');
		$('.bottom--count-selected-item-kontrahenci').text(idsKontrahenci.length ? "Wybrano: (" + idsKontrahenci.length + ") podmiotów/kontrahentaów" : '');

		// disable button generate reaport if not choise 'praconwicy' or 'kontrahenci'
		if ( !allOdLength && !allDoLength ) {
			$('.smad-generate-reaport-button').addClass('disabled');
		} else {
			if ( ( !allOdLength || !allDoLength ) && parseInt(depthValue) > 6 ) {
				$('.bottom--message-warning-critical-search').text(messageCriticalSearchData);
			} else {
				$('.bottom--message-warning-critical-search').text('');
			}
			$('.smad-generate-reaport-button').removeClass('disabled');
		}
	})
});

global.hideMoreRecordFunctionsPopover = function() {
	if (RECORD_MORE_FUNCTIONS_OPENED_NODE) jQuery(RECORD_MORE_FUNCTIONS_OPENED_NODE).popover('destroy')
}
global.pracownicyLoadMoreRecordFunctions = function(event, node, rowPK) {
	return loadMoreRecordFunctions(event, node, rowPK, "default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_PRACOWNICY")
}
global.kontrahenciLoadMoreRecordFunctions = function(event, node, rowPK) {
	return loadMoreRecordFunctions(event, node, rowPK, "default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI")
}
global.removeFiltersPracownicy = removeFiltersPracownicy;
global.removeFiltersKontrahenci = removeFiltersKontrahenci;
global.onChangeFiltersPracownicy = onChangeFiltersPracownicy;
global.onKeypressFiltersPracownicy = onKeypressFiltersPracownicy;
global.onChangeFiltersKontrahenci = onChangeFiltersKontrahenci;
global.onKeypressFiltersKontrahenci = onKeypressFiltersKontrahenci;

global.checkAll = checkAll;
global.checkedChoiseItems = checkedChoiseItems;
global.catchEventCheckbox = catchEventCheckbox;
global.clearSelectedCheckbox = clearSelectedCheckbox;
global.getNameGroupById = getNameGroupById;
global.createGroupPracownicy = createGroupPracownicy;
global.createGroupKontrahenci = createGroupKontrahenci;
global.selectPage = selectPage;
global.detectChoiseFilter = detectChoiseFilter;

global.updateListIdBiAuditReaport = updateListIdBiAuditReaport;
global.deleteListIdBiAuditReaport = deleteListIdBiAuditReaport;

global.urlFetchPracownicy = urlFetchPracownicy;
global.urlFetchKontrahenci = urlFetchKontrahenci;
global.generateBiAuditRaport = generateBiAuditRaport;
global.getAddressData = getAddressData;

global.loadCurrentReaportTitleInInput = loadCurrentReaportTitleInInput;
global.updateLocalStorageBiAuditReaportTitle = updateLocalStorageBiAuditReaportTitle;

global.Pagination = Pagination;
global.todo__fetchRaport = todo__fetchRaport;

global.initLocalStorage = initLocalStorage;
global.setItemLocalStorage = setItemLocalStorage;
global.getItemLocalStorage = getItemLocalStorage;
global.deleteItemLocalStorage = deleteItemLocalStorage;
global.defaultBIAuditLocalStorage = defaultBIAuditLocalStorage;
global.removeItemInArray = removeItemInArray;
global.removeItemArrayInArray = removeItemArrayInArray;

global.addPracownikToGroup = addPracownikToGroup;
global.addPracownikAllToGroup = addPracownikAllToGroup;
global.addKontrahenciToGroup = addKontrahenciToGroup;
global.addKontrahenciAllToGroup = addKontrahenciAllToGroup;
global.createPracownikAjax = createPracownikAjax;
global.createKontrahentAjax = createKontrahentAjax;
global.removePracownikFromGroup = removePracownikFromGroup;
global.removeKontrahenciFromGroup = removeKontrahenciFromGroup;

global.showViewUploadFile = showViewUploadFile;
global.parseCsvFile = parseCsvFile;
global.clearListLocalStorageByType = clearListLocalStorageByType;

// message
global.messageCriticalSearchData = 'Krytyczne wielkości danych do przeszukania. Optymalna wartość głębokość szukania powiaząń to: 6';
global.defaultOnlyTarger = 'y';