var _isIE = (window.navigator.userAgent.indexOf("MSIE") > 0);
function $(id){return document.getElementById(id);}
function _getElementVisibility(element){
var dis = element.style.display;
if(dis == 'none')return false;
else return true;
}
function _getElementVisibilityById(elementId){
var element = $(elementId);
return _getElementVisibility(element);
}
function _switchElementVisibility(elementId){
var e = $(elementId);
if(e == null)return;
var dis = e.style.display;
if(dis == 'none'){
e.style.display = '';
}else{
e.style.display = 'none';
}
}
function _setObjectsRangeVisibility(min, max, prefix, value){
for(i=min; i<=max; i++){
var optionName = prefix + i;
var optionObject = $(optionName);
if(optionObject == null)continue;
if(value == 0){
optionObject.style.display = 'none';
}else{
optionObject.style.display = '';
}
}
}
function _setElementVisibility(elementId, value){
var e = $(elementId);
if(e == null)return;
if(value == 0){
e.style.display = 'none';
}else{
e.style.display = '';
}
}
function _getSelectValue(selectId){
var select = $(selectId);
if(select == null)return null;
if(select.options.length == 0)return null;
var index = select.selectedIndex;
if(index < 0)return null;
var selectedValue = select.options[index].value;
return selectedValue;
}

function _setSelectValue(selectId, newValue){
var select = $(selectId);
if(select == null)return;
for(var i=0; i<select.options.length; i++) {
if(select.options[i].value == newValue) {
select.selectedIndex = i;
return;
}
}
}
function _getCheckedValuesAsMultiline(min, max, prefix){
var i;
var returnValue = '';
for(i=min; i<max; i++){
var checkName = prefix + i;
var checkObject = $(checkName);
if(checkObject == null)continue;
if(checkObject.checked){
returnValue += checkObject.value + '\n';
}
//      checkObject.disabled = 'disabled';
}
//$('to_add').value = magicValue;
return returnValue;
}
function _getSelectedValuesAsMultiline(min, max, prefix){
var i;
var returnValue = '';
for(i=min; i<max; i++){
var selectId = prefix + i;
var selectObject = $(selectId);
if(selectObject == null)continue;
returnValue += _getSelectValue(selectId) + '\n';
}
return returnValue;
}
function _getSelectedRadioValue(min, max, prefix){
var i;
for(i=min; i<max; i++){
var radioId = prefix + i;
var radioObject = $(radioId);
if(radioObject == null)continue;
if(radioObject.checked)return radioObject.value;
}
return null;
}
function _getInputValuesAsMultiline(min, max, prefix){
var i;
var returnValue = '';
for(i=min; i<max; i++){
var inputId = prefix + i;
var inputObject = $(inputId);
if(inputObject == null)continue;
returnValue += inputObject.value + '\n';
}
return returnValue;
}
function _setInputValue(inputId, newValue){
var e = $(inputId);
if(e == null)return;
e.value = newValue;
}
function _getInputValue(inputId){
var e = $(inputId);
if(e == null)return null;
return e.value;
}
function _setMultipleInputValues(min, max, prefix, newValue){
var i;
for(i=min; i<max; i++){
var inputId = prefix + i;
_setInputValue(inputId, newValue);
}
}

function _setMultipleCheckboxes(min, max, prefix, newValue){
var i;
for(i=min; i<max; i++){
var inputId = prefix + i;
_setCheckboxValue(inputId, newValue);
}
}
function _dynahtmlSetSelectedIndex(id, index){
var select = $(id);
if(select == null)return;
select.selectedIndex = index;
}

function _getCheckboxValue(id){
var checkbox = $(id);
if(checkbox == null)return null;
if(checkbox.checked == null)return false;
if(checkbox.checked == "undefined")return false;
if(checkbox.checked == false)return false;
return true;
//return checkbox.checked;
}

function _setCheckboxValue(id, newValue){
var checkbox = $(id);
if(checkbox == null)return;
checkbox.checked = newValue;
}

function _toggleCheckBox(id){
var oldval = _getCheckboxValue(id);
if(oldval)_setCheckboxValue(id, false);
else _setCheckboxValue(id, true);
}
var AJAX_REQUEST_NOT_INITIALIZED = 0;
var AJAX_REQUEST_SET_UP = 1;
var AJAX_REQUEST_SENT = 2;
var AJAX_REQUEST_IN_PROGRESS = 3;
var AJAX_REQUEST_COMPLETE = 4;
function _ajaxGetXmlHttp() {
var xmlHttp;
try {return new XMLHttpRequest()} catch(e) {}
try {return new ActiveXObject("Msxml2.XMLHTTP.6.0")} catch(e) {}
try {return new ActiveXObject("Msxml2.XMLHTTP.3.0")} catch(e) {}
try {return new ActiveXObject("Msxml2.XMLHTTP")} catch(e) {}
try {return new ActiveXObject("Microsoft.XMLHTTP")} catch(e) {}
throw new Error( "This browser does not support XMLHttpRequest." )
}
function _ajaxLoadHtml(ajaxAddress, elementId) {
var xmlHttp = _ajaxGetXmlHttp();
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState == AJAX_REQUEST_COMPLETE && xmlHttp.status == 200){
if(elementId != null) {
var element = $(elementId);
if(element != null) element.innerHTML = xmlHttp.responseText;
}
} else if (xmlHttp.readyState == AJAX_REQUEST_COMPLETE && xmlHttp.status != 200) {
}
}
xmlHttp.open("GET",ajaxAddress,true);
xmlHttp.send(null);
}
function _ajaxLoadListItems(ajaxAddress, listObject) {
var xmlHttp = _ajaxGetXmlHttp();
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState == AJAX_REQUEST_COMPLETE && xmlHttp.status == 200){
var items = eval(xmlHttp.responseText);
listObject.items = items;
listObject.refreshList(); // that is what we assume about "listObject"
} else if (xmlHttp.readyState == AJAX_REQUEST_COMPLETE && xmlHttp.status != 200) {
}
}
xmlHttp.open("GET",ajaxAddress,true);
xmlHttp.send(null);
}
function _ajaxExecScript(ajaxAddress) {
var xmlHttp = _ajaxGetXmlHttp();
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState == AJAX_REQUEST_COMPLETE && xmlHttp.status == 200){
eval(xmlHttp.responseText);
}
}
xmlHttp.open("GET",ajaxAddress,true);
xmlHttp.send(null);
}
var _mouseX;
var _mouseY;
var _draggedObject;
var _topElementZindex = 100;

function _onMouseMove(event){
if(_isIE)event = window.event;
if(event.pageX){
_mouseX = event.pageX;
_mouseY = event.pageY;
} else {
_mouseX = event.clientX + document.body.scrollLeft - document.body.clientLeft;
_mouseY = event.clientY + document.body.scrollTop  - document.body.clientTop;
}
if(_draggedObject){
_draggedObject.move();
}
}

function _onMouseUp(event){
if(_draggedObject){
_draggedObject.end();
}
_draggedObject = null;
}
document.onmousemove = _onMouseMove;
document.onmouseup = _onMouseUp;
function _draggingAbsolute(element){
this.element = element;
this.startX = _mouseX;
this.startY = _mouseY;
this.X = element.style.left.replace("px","");
this.Y = element.style.top.replace("px","");
element.style.zIndex = _topElementZindex++;

this.onselectstart = document.onselectstart;
document.onselectstart = function (){return false;};

this.move = function() {
var dx = _mouseX - this.startX;
var dy = _mouseY - this.startY;
element.style.left = (this.X*1.0 + dx*1.0) + "px";
element.style.top  = (this.Y*1.0 + dy*1.0) + "px";
}

this.end = function() {
document.onselectstart = this.onselectstart;
}
}

function _draggingAbsoluteById(id){
var element = $(id);
if(element)
_draggedObject = new _draggingAbsolute(element);
}
function _dynahtmlAttachEvent(obj, eventname, handler) {
if(obj == null || handler == null)return;
if (_isIE) {
obj.attachEvent(eventname, handler);
} else { // substr is used here because of different naming of events
obj.addEventListener(eventname.substr(2), handler, false);
}
}

function _dynahtmlDetachEvent(obj, eventname, handler) {
if (_isIE) {
obj.detachEvent(eventname, handler);
} else { // substr is used here because of different naming of events
obj.removeEventListener(eventname.substr(2), handler, false);
}
}
var _languages = new Array(
"afr", "alb", "bul", "cze", "dan", "deu", "eng", "epo", "fin", "fra", "hrv", "hun", "isl", "lav", "lit", "nor", "pol", "por", "rum", "rus", "slo", "slv", "spa", "swe", "tur"
);
function _languageIndex(languageCode){
for(var i=0; i<_languages.length; i++){
if(_languages[i] == languageCode)return i;
}
return null;
}
function _languageGetLabelArray(languageCode, labelArrays){
if(labelArrays == null)return "???";
var i = _languageIndex(languageCode);
if(labelArrays.length <= i)return "???";
return labelArrays[i];
}
function _languageGetLabel(languageCode, labelArrays, labelIndex){
var labels = _languageGetLabelArray(languageCode, labelArrays);
if(labels == null)return "???";
if(labels.length <= labelIndex)return "???";
return labels[labelIndex];
}
var _characters_lists = new Array(
/*afr*/ new Array("á","é","è","ê","ë","í","î","ï","ó","ô","ú","û","ý"),
/*alb*/ new Array("ç","ë"),
/*bul*/ new Array("а","б","в","г","д","е","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ь","ю","я"),
/*cze*/ new Array("á","č","ď","é","ě","ch","í","ň","ó","ř","š","ť","ú","ů","ý","ž"),
/*dan*/ new Array("æ","ø","å"),
/*deu*/ new Array(﻿"ä","ö","ü","ß"),
/*eng*/ null,
/*epo*/ new Array("ĉ","ĝ","ĥ","ĵ","ŝ","ŭ"),
/*fin*/ new Array("å","ä","ö","š","ž"),
/*fra*/ new Array("à","â","ç","é","è","ê","ë","î","ï","ô","û","ù","ü","ÿ","œ","æ"),
/*hrv*/ new Array("č","ć","đ","š","ž"),
/*hun*/ new Array("á","é","í","ó","ö","ő","ú","ü","ű"),
/*isl*/ new Array("á","ð","é","í","ó","ú","ý","þ","æ","ö"),
/*lav*/ new Array("ā","č","ē","ģ","ī","ķ","ļ","ņ","š","ū","ž"),
/*lit*/ new Array("ą","č","ę","ė","į","š","ų","ū","ž"),
/*nor*/ new Array("æ","ø","å"),
/*pol*/ new Array("ą","ć","ę","ł","ń","ó","ś","ź","ż"),
/*por*/ new Array("á","â","ã","à","ç","é","ê","í","ó","ô","õ","ú","ü"),
/*rum*/ new Array("ă","â","î","ș","ț"),
/*rus*/ new Array("а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я","́"),
/*slo*/ new Array("á","ä","č","ď","í","ĺ","ľ","ň","ó","ô","ŕ","š","ť","ú","ý","ž"),
/*slv*/ new Array("č","š","ž"),
/*spa*/ new Array("á","é","í","ñ","ó","ú"),
/*swe*/ new Array("å","ä","ö"),
/*tur*/ new Array("ç","ğ","ı","ö","ş","ü")
);
function _charactersGetArray(languageCode){
if(languageCode == null)return null;
if(languageCode.length == 0)return null;
for(var i=0; i<_languages.length; i++){
if(_languages[i] == languageCode)return _characters_lists[i];
}
return null;
}
function _charactersCreateKeypad(divElement, languageCode, func){
var chars = _charactersGetArray(languageCode);
if(chars == null)return -1;
if(chars.length == 0)return -1;
if(divElement == null)return -1;
for(var i=0; i<chars.length; i++){
var button = document.createElement("input");
button.type = "button";
button.value = chars[i];
button.className = "chr";
_dynahtmlAttachEvent(button, 'onclick', func);
divElement.appendChild(button);
}
return 0;
}
function _charactersReplaceKeypadDiv(outerDivId, innerDivId, languageCode, onclickHandler){
if(languageCode == null){
_setElementVisibility(outerDivId, 0);
return;
}else if(languageCode.length == 0){
_setElementVisibility(outerDivId, 0);
return;
}

var outerdiv = $(outerDivId);
var innerdiv = $(innerDivId);
var newdiv = document.createElement("div");
newdiv.id = innerdiv.id;
newdiv.className = "header";
var output = _charactersCreateKeypad(newdiv, languageCode, onclickHandler);
if(output != 0){
_setElementVisibility(outerDivId, 0);
return;
}
outerdiv.replaceChild(newdiv, innerdiv);
_setElementVisibility(outerDivId, 1);
}
function _dynahtmlCreateDivWithText(divId, divClass, divText){
var div = document.createElement("div");
if(divId)div.id = divId;
if(divClass != null)div.className = divClass;
if(divText != null){
var txtNode = document.createTextNode(divText);
div.appendChild(txtNode);
}
return div;
}
function _dynahtmlCreateTextInput(tiId, tiClass, tiValue, onfocusHandler){
return _dynahtmlCreateTextInput1(tiId, tiClass, tiValue, onfocusHandler, -1);
}
function _dynahtmlCreateTextInput1(tiId, tiClass, tiValue, onfocusHandler, maxlength){
return _dynahtmlCreateTextInput2(tiId, tiClass, tiValue, onfocusHandler, maxlength, -1);
}
function _dynahtmlCreateTextInput2(tiId, tiClass, tiValue, onfocusHandler, maxlength, size){
var ti = document.createElement("input");
ti.type = "text";
if(tiId)ti.id = tiId;
if(tiClass != null)ti.className = tiClass;
if(tiValue != null)ti.value = tiValue;
if(onfocusHandler != null)_dynahtmlAttachEvent(ti, 'onfocus', onfocusHandler);
if(maxlength > 0)ti.maxLength = maxlength;
if(size > 0)ti.size = size;
return ti;
}
function _dynahtmlCreateHiddenInput(hiId, hiValue){
var hi = document.createElement("input");
hi.type = "hidden";
if(hiId)hi.id = hiId;
if(hiValue != null)hi.value = hiValue;
return hi;
}
function _dynahtmlRemoveSelectOptions(id){
var select = $(id);
while(select.options.length > 0)select.remove(0);
var optGroups = select.getElementsByTagName("optgroup");
for(var i=0; i<optGroups.length; i++) select.removeChild(optGroups[i]);
}

function _dynahtmlRemoveSelectOptionsLeaveBlank(id){
var select = $(id);
var startIndex = 0;
while(startIndex < select.options.length) {
if(select.options[startIndex].value == "")startIndex++;
else break;
}
while(select.options.length > startIndex)select.remove(startIndex);
var optGroups = select.getElementsByTagName("optgroup");
for(var i=0; i<optGroups.length; i++) select.removeChild(optGroups[i]);
}
function _dynahtmlAddOption(id, text, value){
var select = $(id);
var opt = document.createElement("option");
opt.text = text;
opt.value = value;
if(_isIE)select.add(opt);
else select.add(opt, null);
}

function _dynahtmlAddOptionToSelect(select, text, value){
var opt = document.createElement("option");
opt.text = text;
opt.value = value;
if(_isIE)select.add(opt);
else select.add(opt, null);
}
function _dynahtmlAddOptions(id, optionsArray){
for(var i=0; i<optionsArray.length; i++){
var obj = optionsArray[i];
_dynahtmlAddOption(id, obj.text, obj.value);
}
}

function _dynahtmlAddOptionsToSelect(select, optionsArray){
for(var i=0; i<optionsArray.length; i++){
var obj = optionsArray[i];
_dynahtmlAddOptionToSelect(select, obj.text, obj.value);
}
}
function _dynahtmlCreateImage(src, border){
var img = document.createElement("img");
img.src = src;
img.border = border;
return img;
}
function _dynahtmlFindOptionText(optionValue, optionsArray){
if(optionValue == null)return null;
if(optionsArray == null)return null;
for(var i=0; i<optionsArray.length; i++){
var obj = optionsArray[i];
if(obj.value == optionValue)return obj.text;
}
return null;
}
function _dynahtmlFindOptionIndex(optionValue, optionsArray){
for(var i=0; i<optionsArray.length; i++){
var obj = optionsArray[i];
if(obj.value == optionValue)return i;
}
return null;
}
function _languageComboShowAll(id) {
var tmp = _getSelectValue(id);
_dynahtmlRemoveSelectOptionsLeaveBlank(id);
_dynahtmlAddOptions(id, _allLanguages);
_switchElementVisibility(id + '_span');
_setSelectValue(id, tmp);
}
function _body () {
var collection = document.getElementsByTagName("BODY");
return collection[0];
}

function _moveToBody(element) {
var body = _body();
var parent = _isIE ? element.parentElement : element.parentNode;
parent.removeChild(element);
body.appendChild(element);
}
var CONST_DYNATAB_OPERATION_REBUILD = 0;
var CONST_DYNATAB_OPERATION_REMOVE = -1;
var CONST_DYNATAB_OPERATION_ADD = 1;
var CONST_DYNATAB_OPERATION_MOVEUP = 10;
var CONST_DYNATAB_OPERATION_MOVEDOWN = 11;

var _dynatabDraggedTable = null;
var _dynatabDraggedRow = null;
var _dynatabLabels = new Array(
/*afr*/ null,
/*alb*/ null,
/*bul*/ null,
/*cze*/ null,
/*dan*/ null,
/*deu*/ null,
/*eng*/ new Array("Add a row","Move up","Move down","Remove"),
/*epo*/ null,
/*fin*/ null,
/*fra*/ null,
/*hrv*/ null,
/*hun*/ null,
/*isl*/ null,
/*lav*/ null,
/*lit*/ null,
/*nor*/ null,
/*pol*/ new Array("Dodaj wiersz","W górę","W dół","Usuń wiersz"),
/*por*/ null,
/*rum*/ null,
/*rus*/ null,
/*slo*/ null,
/*slv*/ null,
/*spa*/ null,
/*swe*/ null,
/*tur*/ null
);

function _dynatabGetLabels(languageCode){ // replace with _languageGetLabel(...)
for(var i=0; i<_languages.length; i++){
if(_languages[i] == languageCode)return _dynatabLabels[i];
}
return null;
}

function _dynatabGetLabel(languageCode,index){
var labels = _dynatabGetLabels(languageCode);
if(labels == null)return "NO LABEL! TRANSLATION NEEDED!";
if(labels.length <= index)return "NO LABEL! TRANSLATION NEEDED!";
return labels[index];
}


function _dynatabInputActionAdd(){
// this or event.srcElement must refer to an input
if(_isIE) event.srcElement.tableObject.doAction(CONST_DYNATAB_OPERATION_ADD, null);
else this.tableObject.doAction(CONST_DYNATAB_OPERATION_ADD, null);
}

function _dynatabInputActionRemove(){
// this or event.srcElement must refer to an input
if(_isIE) event.srcElement.tableObject.doAction(CONST_DYNATAB_OPERATION_REMOVE, event.srcElement.rowNumber);
else this.tableObject.doAction(CONST_DYNATAB_OPERATION_REMOVE, this.rowNumber);
}

function _dynatabInputActionMoveUp(){
// this or event.srcElement must refer to an input
if(_isIE) event.srcElement.tableObject.doAction(CONST_DYNATAB_OPERATION_MOVEUP, event.srcElement.rowNumber);
else this.tableObject.doAction(CONST_DYNATAB_OPERATION_MOVEUP, this.rowNumber);
}

function _dynatabInputActionMoveDown(){
// this or event.srcElement must refer to an input
if(_isIE) event.srcElement.tableObject.doAction(CONST_DYNATAB_OPERATION_MOVEDOWN, event.srcElement.rowNumber);
else this.tableObject.doAction(CONST_DYNATAB_OPERATION_MOVEDOWN, this.rowNumber);
}
function _dynatabStartDragging(ev) {
var tableObject;
var rowNumber;
if(_isIE) {
tableObject = event.srcElement.tableObject;
rowNumber = event.srcElement.rowNumber;
} else {
tableObject = ev.target.tableObject;
rowNumber = ev.target.rowNumber;
}
_dynatabDraggedTable = tableObject;
_dynatabDraggedRow = rowNumber;
document.onmouseup = _dynatabEndDragging;
window.setTimeout('_dynatabDraggedTable.doAction(CONST_DYNATAB_OPERATION_REBUILD, null)',10);
return false;
}
function _dynatabEndDragging() {
var tmp = _dynatabDraggedTable;
_dynatabDraggedTable = null;
_dynatabDraggedRow = null;
if(tmp)tmp.doAction(CONST_DYNATAB_OPERATION_REBUILD, null);
}
function _dynatabFindDragRow(element) {
var topelement = _isIE ? "BODY" : "HTML";
while (element.tagName != topelement && element.tableObject == null) {
if(_isIE)
element = element.parentElement;
else
element = element.parentNode;
if(element == null)return null;
}
if(element.tableObject != null)return element;
return null;
}
function _dynatabRowEntered() {
if(_dynatabDraggedTable == null)return;
if(_dynatabDraggedRow == null)return;
var tableObject;
var rowNumber;
var eventObject;
if(_isIE) {
eventObject = _dynatabFindDragRow(event.srcElement);
} else {
eventObject = _dynatabFindDragRow(this);
}
if(eventObject == null)return;
tableObject = eventObject.tableObject;
rowNumber = eventObject.rowNumber;
if(tableObject != _dynatabDraggedTable)return; // different table - do nothing!
if(_dynatabDraggedRow == rowNumber)return; // we didn't drag it anywhere!
tableObject.refreshRowData(tableObject.tableId);
tableObject.switchRows(_dynatabDraggedRow, rowNumber);
_dynatabDraggedRow = rowNumber;
tableObject.rebuild();
}
function _dynatabAddNewRowButton(docFragment,tableObject){
var rowElement = document.createElement("tr");
var col = document.createElement("td");
var button = document.createElement("img");
button.border = "0";
button.src = "icons/dragdrop/document-new.png";//_dynatabGetLabel(tableObject.languageCode,0);
_dynahtmlAttachEvent(button, 'onclick', _dynatabInputActionAdd);
button.tableObject = tableObject;
col.appendChild(button);
col.colSpan = (tableObject.rowProvider.colspan != null) ? tableObject.rowProvider.colspan : 1;
col.className = "header";
col.style.textAlign = "left";
rowElement.appendChild(col);
docFragment.appendChild(rowElement);
}
function _dynatabAddOperationsColumn(trElement,tableObject,rowNumber){
var col = document.createElement("td");
var inp;
if(tableObject.allowRowShifting==true){
if(tableObject.allowRowDragging==true){
var drg = document.createElement("img");
drg.border = "0";
drg.src = "icons/dragdrop/object-flip-vertical.png";
drg.style.cursor = "pointer";
drg.rowNumber = rowNumber;
drg.tableObject = tableObject;
drg.onmousedown = _dynatabStartDragging; // we must assing the event, not attach it..
drg.title = "drag & drop";
trElement.rowNumber = rowNumber;
trElement.tableObject = tableObject;
_dynahtmlAttachEvent(trElement, 'onmouseover', _dynatabRowEntered);
col.appendChild(drg);
if(rowNumber == _dynatabDraggedRow)trElement.className = "draggedRow";
}
}
if(tableObject.allowRowRemoving==true){
inp = document.createElement("img");
inp.border = "0";
inp.tableObject = tableObject;
inp.rowNumber = rowNumber;
_dynahtmlAttachEvent(inp, 'onclick', _dynatabInputActionRemove);
inp.src = "icons/dragdrop/process-stop.png";
col.appendChild(inp);
}
trElement.appendChild(col);
}
function _dynatabAction(action, row){
this.refreshRowData(this.tableId);
switch(action){
case CONST_DYNATAB_OPERATION_REBUILD:
break;
case CONST_DYNATAB_OPERATION_REMOVE:
this.removeRow(row);
break;
case CONST_DYNATAB_OPERATION_ADD:
this.newRow();
break;
case CONST_DYNATAB_OPERATION_MOVEUP:
this.moveRowUp(row);
break;
case CONST_DYNATAB_OPERATION_MOVEDOWN:
this.moveRowDown(row);
break;
default:
break;
}
this.rebuild();
}
function _dynatabRefreshRowData(tableId){
for(var i=0; i<this.rows.length; i++){
columnNames = this.rowProvider.getColumnNames();
var row = this.rows[i];
var inputPrefix = tableId + "_row" + i + "_";
for(var j=0; j<columnNames.length; j++){
var columnName = columnNames[j];
var inputName = inputPrefix + columnName;
var inputValue = $(inputName).value;
row.data[j] = inputValue;
}
}
}
function _dynatabSwitchRows(r1, r2){
if(r1 == r2)return 0;
if(r1<0 || r2<0)return 0;
if(this.rows.length < 2)return 0;
if(r1>=this.rows.length || r2>=this.rows.length)return 0;
var tmp = this.rows[r1];
if(r1 < r2){
for(var z=r1; z<r2; z++)this.rows[z]=this.rows[z+1];
} else {
for(var z=r1; z>r2; z--)this.rows[z]=this.rows[z-1];
}
this.rows[r2] = tmp;
return 1;
}
function _dynatabMoveRowUp(rowNum){
return this.switchRows(rowNum, rowNum-1);
}
function _dynatabMoveRowDown(rowNum){
return this.switchRows(rowNum, rowNum+1);
}
function _dynatabCrearTable(tableId){
var tBodyId = tableId + "_tBody";
var tbody = $(tBodyId);
while (tbody.childNodes.length > 0) {
tbody.removeChild(tbody.firstChild);
}
}
function _dynatabRebuildTable(){
var tableId = this.tableId;
var tBodyId = tableId + "_tBody";
var currentTBody = $(tBodyId);
var tBodyObject = document.createElement("tbody");
var tableObject = $(tableId);
tBodyObject.id = tBodyId;
var docFragment = document.createDocumentFragment();
for(var i=0; i<this.rows.length; i++){
var rowElement = document.createElement("tr");
rowElement.className = (i%2) ? "rot1" : "rot2"; // this function is responsible for giving rows classes
var row = this.rows[i];
row.produceRow(rowElement, tableId + "_row" + i + "_", this.onfocusHandler);
if(this.allowRowShifting==true || this.allowRowRemoving==true || this.allowRowDragging==true)
_dynatabAddOperationsColumn(rowElement,this,i);
docFragment.appendChild(rowElement);
}
if(this.allowRowCreating && (this.rows.length <= this.rowLimit - 1 || this.rowLimit <= 0))
_dynatabAddNewRowButton(docFragment,this);
tBodyObject.appendChild(docFragment);
if(currentTBody != null)
tableObject.replaceChild(tBodyObject, currentTBody);
else
tableObject.appendChild(tBodyObject);
}
function _dynatabNewRow(){
var newRow;
newRow = this.rowProvider.newRow();
if(newRow.data == null)newRow.data = new Array();
this.rows[this.rows.length] = newRow;
return 1;
}
function _dynatabRemoveRow(rowNum){
if(rowNum < 0)return 0;
if(rowNum >= this.rows.length)return 0;
var tmp1 = this.rows.slice(0,rowNum);
var tmp2 = this.rows.slice(rowNum+1);
this.rows = tmp1.concat(tmp2);
return 1;
}
function _dynatabProduceInitialData(rowProvider){
if(rowProvider.getInitialData == null)return new Array();
var rowArray = rowProvider.getInitialData();
var result = new Array();
for(var i=0; i<rowArray.length; i++){
var row = rowProvider.newRow();
row.data = rowArray[i];
result[i] = row;
}
return result;
}
function _dynatabCollectData(prefix,separator){
var postfixes = this.rowProvider.getColumnNames();
if(postfixes == null)return -1; // failure
this.refreshRowData(this.tableId);
for(var i=0; i<postfixes.length; i++){
var postfix = postfixes[i];
var finalvalue = "";
for(var j=0; j<this.rows.length; j++){
var inputid = this.tableId + "_row" + j + "_" + postfix;
var inputvalue = $(inputid).value;
if(j == 0)finalvalue = inputvalue;
else finalvalue += separator + inputvalue;
}
var finalid = prefix + "_" + postfix;
$(finalid).value = finalvalue;
}
return 0; // success
}
function _dynatabGetColumnIndex(columnName){
for(var i=0; i<rowProvider.getColumnNames().length; i++){
if(columnName == rowProvider.getColumnNames()[i])return i;
}
return -1;
}
function _dynatabTable(rowProviderClass, tableId, languageCode, onfocusHandler, rowlimit){
this.rowProvider = rowProviderClass;
this.rows = _dynatabProduceInitialData(this.rowProvider);
this.tableId = tableId;
this.languageCode = languageCode;
this.onfocusHandler = onfocusHandler;
this.rowLimit = rowlimit;
this.allowRowShifting = true;
this.allowRowRemoving = true;
this.allowRowCreating = true;
this.allowRowDragging = true;
$(tableId).tableObject = this;
this.newRow = _dynatabNewRow;                 // adds a new row, rowtype is dependent on rowProviderClass
this.switchRows = _dynatabSwitchRows;         // switches positions of two rows
this.moveRowUp = _dynatabMoveRowUp;           // moves selected row one position upwards
this.moveRowDown = _dynatabMoveRowDown;       // moves a row one position downwards
this.removeRow = _dynatabRemoveRow;           // removes a selected row
this.rebuild = _dynatabRebuildTable;          // rebuilds a table
this.refreshRowData = _dynatabRefreshRowData; // refreshes information stored in row collection (reads user modifications from a table)
this.doAction = _dynatabAction;               // performs an action
this.collectData = _dynatabCollectData;       // used just before submitting - groups all data from one column into a single input
this.getColumnIndex = _dynatabGetColumnIndex; // gets index of column with a specified name
}
function _dynaeditorFindEditorWrapper(element) {
if(element == null)return null;
var topelement = _isIE ? "BODY" : "HTML";
while (element.tagName != topelement && element.editorObject == null) {
if(_isIE)
element = element.parentElement;
else
element = element.parentNode;
if(element == null)return null;
}
if(element.editorObject != null)return element;
return null;
}
function _dynaeditorKeypress(event){
var element;
if(_isIE) {
event = window.event;
element = event.srcElement;
} else {
element = this;
}
if(event.keyCode == 13)_dynaeditorCommit(element); // commit on enter
if(event.keyCode == 27)_dynaeditorHide(element); // revoke on escape
}
function _dynaeditorShowById(elementId){
var element = $(elementId);
_dynaeditorShow(element);
}

function _dynaeditorShowByEvent(){
var element;
if(_isIE) element = event.srcElement;
else      element = this;
_dynaeditorShow(element);
}

function _dynaeditorShow(element){
element = _dynaeditorFindEditorWrapper(element);
if(element == null)return;
var editorObject = element.editorObject;
editorObject.show();
}
function _dynaeditorHideById(elementId){
var element = $(elementId);
_dynaeditorHide(element);
}

function _dynaeditorHideByEvent(){
var element;
if(_isIE) element = event.srcElement;
else      element = this;
_dynaeditorHide(element);
}

function _dynaeditorHide(element){
element = _dynaeditorFindEditorWrapper(element);
if(element == null)return;
var editorObject = element.editorObject;
editorObject.hide();
}
function _dynaeditorCommitById(elementId){
var element = $(elementId);
_dynaeditorCommit(element);
}

function _dynaeditorCommitByEvent(){
var element;
if(_isIE) element = event.srcElement;
else      element = this;
_dynaeditorCommit(element);
}

function _dynaeditorCommit(element){
element = _dynaeditorFindEditorWrapper(element);
if(element == null)return;
var editorObject = element.editorObject;
editorObject.commit();
}
function _dynaSimpleTextEditor(propertyId, propertyValue, wrapperId){_dynaSimpleTextEditor(propertyId, propertyValue, wrapperId, null);}
function _dynaSimpleTextEditor(propertyId, propertyValue, wrapperId, onCommitHandler){
this.id = propertyId;
this.value = propertyValue;
this.elementId = wrapperId;
this.onCommit = onCommitHandler; // may be used to store commited values in hiden fields or to save them via ajax or whatever
$(wrapperId).editorObject = this;

this.show = function(){
var element = $(this.elementId);
var input = document.createElement("input");
input.type = "text";
input.id = this.id;
input.value = this.value;
input.onkeypress = _dynaeditorKeypress;
input.onblur = _dynaeditorCommitByEvent;
element.innerHTML = "";
element.appendChild(input);
input.focus();
}

this.hide = function(){
var element = $(this.elementId);
var div = document.createElement("div");
div.innerHTML = this.value;
div.onclick = _dynaeditorShowByEvent;
div.style.cursor = "pointer";
element.innerHTML = "";
element.appendChild(div);
}

this.commit = function(){
this.value = $(this.id).value;
if(this.onCommit)this.onCommit();
this.hide();
}
}

function _dynaComboEditor(propertyId, propertyValue, wrapperId, allvalues){_dynaComboEditor(propertyId, propertyValue, wrapperId, allvalues, null);}
function _dynaComboEditor(propertyId, propertyValue, wrapperId, allvalues, onCommitHandler){
this.id = propertyId;
this.value = propertyValue;
this.items = allvalues;
this.elementId = wrapperId;
this.onCommit = onCommitHandler; // may be used to store commited values in hiden fields or to save them via ajax or whatever
$(wrapperId).editorObject = this;

this.show = function(){
var element = $(this.elementId);
var select = document.createElement("select");
select.id = this.id;
_dynahtmlAddOptionsToSelect(select, this.items);
var index = _dynahtmlFindOptionIndex(this.value, this.items);
if(index != null)select.selectedIndex = index;
select.onkeypress = _dynaeditorKeypress;
select.onblur = _dynaeditorCommitByEvent;
element.innerHTML = "";
element.appendChild(select);
select.focus();
}

this.hide = function(){
var element = $(this.elementId);
var div = document.createElement("div");
div.innerHTML = _dynahtmlFindOptionText(this.value, this.items);
div.onclick = _dynaeditorShowByEvent;
div.style.cursor = "pointer";
element.innerHTML = "";
element.appendChild(div);
}

this.commit = function(){
this.value = _getSelectValue(this.id);
if(this.onCommit)this.onCommit();
this.hide();
}
}

var _dynaSearchLabels = new Array(
/*afr*/ null,
/*alb*/ null,
/*bul*/ null,
/*cze*/ null,
/*dan*/ null,
/*deu*/ null,
/*eng*/ new Array("Please, search some words!", "Unfortunately nothing was found for $search$."),
/*epo*/ null,
/*fin*/ null,
/*fra*/ null,
/*hrv*/ null,
/*hun*/ null,
/*isl*/ null,
/*lav*/ null,
/*lit*/ null,
/*nor*/ null,
/*pol*/ new Array("Wyszukaj jakieś słowo!", "Niestety nie znaleziono żadnych wyników dla $search$."),
/*por*/ null,
/*rum*/ null,
/*rus*/ null,
/*slo*/ null,
/*slv*/ null,
/*spa*/ null,
/*swe*/ null,
/*tur*/ null
);
var _DYNASEARCH_LABEL_PLEASESEARCH = 0;
var _DYNASEARCH_LABEL_NOTHINGFOUND = 1;

function _dynaItemSelector(wrapperId){_dynaItemSelector(propertyId, propertyValue, wrapperId, allvalues, languageCode, null);}
function _dynaItemSelector(wrapperId, onCommitHandler){
//this.id = propertyId;
//this.value = propertyValue;
this.value = null;
this.items = null;
this.elementId = wrapperId;
this.onCommit = onCommitHandler; // may be used to store commited values in hiden fields or to save them via ajax or whatever
$(wrapperId).editorObject = this;

this.show = function(){
//var element = $(this.elementId);
this.refreshList();
if(!_getElementVisibilityById(this.elementId)){
var listElement = $(this.elementId + "_list");
listElement.innerHTML = _languageGetLabel(gInterfaceLanguageCode, _dynaSearchLabels, _DYNASEARCH_LABEL_PLEASESEARCH);
}
var select = $("language1"); // TODO:MV
if(this.languageCode != null){
select.selectedIndex = _dynahtmlFindOptionIndex(this.languageCode, select.options);
} else {
select.selectedIndex = 0;
}
keypadLanguageComboHandler1();
if(this.lockLanguageSelection == true)
select.disabled = true;
else
select.disabled = false;
var expr1 = $("expr1"); // TODO:MV
expr1.value = "";
_popupShow(this.elementId);
expr1.focus();
}

this.hide = function(){
//var element = $(this.elementId);
var listElement = $(this.elementId + "_list");
listElement.innerHTML = "";
_setElementVisibility(this.elementId, 0); // hide it!
this.items = null;
this.languageCode = null;
}

this.commit = function(){
if(this.items != null)this.value = _getSelectedRadioValue(0, this.items.length, "dynamic_radio_");
if(this.onCommit)this.onCommit();
this.hide();
}

this.refreshList = function() {
var listElement = $(this.elementId + "_list");
listElement.innerHTML = "";
_setElementVisibility(this.elementId + "_commit", 0);
if(this.items == null) { // TODO:MV
listElement.innerHTML = _languageGetLabel(gInterfaceLanguageCode, _dynaSearchLabels, _DYNASEARCH_LABEL_NOTHINGFOUND).replace("$search$", $("expr1").value);
return;
}
if(this.items.length == 0) { // TODO:MV
listElement.innerHTML = _languageGetLabel(gInterfaceLanguageCode, _dynaSearchLabels, _DYNASEARCH_LABEL_NOTHINGFOUND).replace("$search$", $("expr1").value);
return;
}
_setElementVisibility(this.elementId + "_commit", 1);
for(var i=0; i<this.items.length; i++){
var obj = this.items[i];
var div = document.createElement("div");
div.className = (i%2 == 1) ? "rot1" : "rot2";
div.radioId = "dynamic_radio_" + i;
div.onclick = function(){$(this.radioId).checked = true;};
div.style.cursor = "pointer";
var input = document.createElement("input");
input.type = "radio";
input.id = div.radioId;
input.name = "dynamic_radio";
input.value = obj.value;
div.appendChild(input);
var span = document.createElement("span");
span.innerHTML = obj.text;
div.appendChild(span);
listElement.appendChild(div);
}
}
}



function _cookieCreate(name,value,days) {
var expires;
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
expires = "; expires="+date.toGMTString();
}
else expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}

function _cookieRead(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}

function _cookieErase(name) {
createCookie(name,"",-1);
}

function _popupShow(id) {
var element = $(id);
if(element == null)return;
element.style.left = (_mouseX - (element.style.width.substr(0,element.style.width.length-2) / 2)) + 'px';
element.style.top = (_mouseY - 50) + 'px'; // TODO:MV
_moveToBody(element);
_setElementVisibility(id, 1); // show it!
}

function _popupHide(id) {
var element = $(id);
if(element == null)return;
_setElementVisibility(id, 0); // hide it!
}

function highlightBox(id,on_off){
var element = $(id);
if(on_off)
element.className = 'container_highlighted';
else
element.className = 'container';
}
