﻿var leftGridId;
var rightGridId;
var isStartList;
var tblMoveId;

var startListClientId;
var rblstartlist;
var hole1ClientId;
var hole2ClientId;

var rightCbxName = "cbxRightCbx"; // nazwa checkbox'a na prawej liscie
var rightHiddenName = "hfPlayerId"; // nazwa pola ukrytego zawierajacego identyfikator playerId na prawej liście

var leftCbxName = "cbxLeftCbx"; // nazwa checkbox'a na lewej liście
var leftHiddenName = "hfPlayerId"; // nazwa pola ukrytego zawierającego identyfikator playerId na lewej liście

var unselectedRowCssClass = "collapse"; // klasa css niezaznaczonego wiersza
var selectedRowCssClass = "collapseS"; // klasa css zaznaczonego wiersza

var leftPosition = "lP"; // nazwa labela, wyswietlajacego numer porządkowy na lewej liście
var leftFirstName = "tbFirNS"; // nazwa labela, wyświetlającego imie na lewej liście
var leftLastName = "tbLastNS"; // nazwa labela, wyświetlającego nazwisko na lewej liście
var leftFlight = "tFl"; // nazwa textboxa w którym wpisywany jest flight
var leftHole = "tHnr"; // nazwa textboxa w którym wpisywany jest numer dołka\
var leftStartTime = "tST"; // nazwa textboxa w którym wpisywany jest numer czas startu

var rightFirstName = "lPFirst"; // nazwa labela, wyświetlającego imie na prawej liście
var rightLastName = "lPLast"; // nazwa labela, wyświetlającego nazwisko na prawej liście

var tblMoveEl;
var MoveTbl = false;
var moveTblVisible = false;

var isLeftGridFrom = false;
var isRightGridFrom = false;
var isLeftGridTo = false;
var isRightGridTo = false;

var firstTrsElemSelected;
var secondTrsElemSelected;

var labelMove;
var mousePos;
var startPos;
var mouseOffset;

var to_up = true;
var lastFlightNo = '1';
var previousValue; // przechowuje wartość kontrolki przed zmianą
var browserName = GetBrowserName();

function SetBrowserName() {
    browserName = GetBrowserName();
}

function mouseMove(ev) {
    ev = ev || window.event;
    mousePos = mouseCoords(ev);
    if (moveTblVisible) {

        showLabelMove();
        moveTblVisible = false;
    }
    if (MoveTbl) {

        tblMoveEl.style.position = 'fixed';

        tblMoveEl.style.top = mousePos.y - 13 + 'px';
        tblMoveEl.style.left = mousePos.x - 170 + 'px';

    }
}

function mouseCoords(ev) {
    if (browserName == "Firefox") {
        return { x: ev.clientX, y: ev.clientY };
    }
    if (ev.pageX || ev.pageY) {
        return { x: ev.pageX, y: ev.pageY };
    }
    return {
        x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
        y: ev.clientY + document.body.scrollTop - document.body.clientTop
    };
}

function getPosition(e) {
    var left = 0;
    var top = 0;

    while (e.offsetParent) {
        left += e.offsetLeft;
        top += e.offsetTop;
        e = e.offsetParent;
    }

    left += e.offsetLeft;
    top += e.offsetTop;

    return { x: left, y: top };
}

function mouseDown(ev) {

    var evt = ev || window.event;
    disableSelection(document.body)

    document.body.style.cursor = "move";

    isLeftGridFrom = false;
    isRightGridFrom = false;
    isLeftGridTo = false;
    isRightGridTo = false;
    leftTrsElemSelected = null;
    rightTrsElemSelected = null;

    firstTrsElemSelected = GetSelectedElem(evt, false);

    if (firstTrsElemSelected == null) {
        document.body.style.cursor = "default";
        return;
    }

    //var obj = evt.srcElement || evt.target;
    // mouseOffset = getMouseOffset(obj, evt);

    moveTblVisible = true;
    return true;
}

function mouseUp(ev) {

    hideLabelMove();
    var evt = ev || window.event;
    if (firstTrsElemSelected == null) {
        document.body.style.cursor = "default";
        return;
    }
    secondTrsElemSelected = GetSelectedElem(evt, true);
    if (secondTrsElemSelected == null) {
        document.body.style.cursor = "default";
        return;
    }
    if (firstTrsElemSelected == secondTrsElemSelected) {
        document.body.style.cursor = "default";
        return;
    }
    if (isLeftGridFrom && isLeftGridTo) {
        document.body.style.cursor = "wait";
        swapRows(firstTrsElemSelected, secondTrsElemSelected);
        document.body.style.cursor = "default";
        return;
    }

    if (isLeftGridFrom && isRightGridTo) {
        document.body.style.cursor = "wait";
        leftElemToRight(secondTrsElemSelected, firstTrsElemSelected);
        document.body.style.cursor = "default";
        return;
    }

    if (isRightGridFrom && isLeftGridTo) {
        document.body.style.cursor = "wait";
        swapRightElemToLeft(firstTrsElemSelected, secondTrsElemSelected);
        document.body.style.cursor = "default";
        return;
    }

    document.body.style.cursor = "default";
}

function makeDoubleLines() {

    var grd = document.getElementById(leftGridId);
    if (grd == null)
        return;

    var all_rows = grd.getElementsByTagName("tr");

    lastFlightNo = '1';
    for (i in all_rows) {
        if (all_rows[i].className == "collapse") {
            var flight = getControl(all_rows[i].getElementsByTagName("input"), leftFlight).value;
            if (parseInt(flight) != parseInt(lastFlightNo)) {
                if (browserName == "Firefox")
                    all_rows[i].style.borderTopColor = "Blue";
                else
                    all_rows[i].style.borderTopColor = "Green";
                all_rows[i].style.borderTopStyle = "solid";
                all_rows[i].style.borderTopWidth = "2px";
                lastFlightNo = flight;
            }
            else {
                all_rows[i].style.borderTopColor = "White";
                all_rows[i].style.borderTopStyle = "none";
                all_rows[i].style.borderTopWidth = "0px";
            }
        }
    }

}

//function findPosX(obj)
//  {
//    var curleft = 0;
//    if(obj.offsetParent)
//        while(1) 
//        {
//          curleft += obj.offsetLeft;
//          if(!obj.offsetParent)
//            break;
//          obj = obj.offsetParent;
//        }
//    else if(obj.x)
//        curleft += obj.x;
//    return curleft;
//  }

//  function findPosY(obj)
//  {
//    var curtop = 0;
//    if(obj.offsetParent)
//        while(1)
//        {
//          curtop += obj.offsetTop;
//          if(!obj.offsetParent)
//            break;
//          obj = obj.offsetParent;
//        }
//    else if(obj.y)
//        curtop += obj.y;
//    return curtop;
//}

//function findCords(obj) {
//    return {
//        x: findPosX(obj),
//        y: findPosY(obj)
//    };
//}


function showLabelMove() {
    tblMoveEl = document.getElementById(tblMoveId);
    var tblMoveLabels = tblMoveEl.getElementsByTagName("span");
    var tblMoveLName = getControl(tblMoveLabels, 'lblLName');
    var tblMoveFName = getControl(tblMoveLabels, 'lblFName');
    var tblMoveType = getControl(tblMoveLabels, 'lblType');
    var tblMoveMark = getControl(tblMoveLabels, 'lblMark');
    var fTrs;
    var fCtr;

    startPos = getPosition(tblMoveEl);

    if (isLeftGridFrom) {

        fTrs = firstTrsElemSelected.getElementsByTagName("input");
        fCtr = getControl(fTrs, leftLastName);

        if (fCtr == null) {
            firstTrsElemSelected = null;
            return;
        }

        tblMoveLName.innerHTML = fCtr.value;
        fCtr = getControl(fTrs, leftFirstName);
        tblMoveFName.innerHTML = fCtr.value;
        fCtr = getControl(fTrs, 'tMark');
        tblMoveMark.innerHTML = fCtr.value;
        fTrs = firstTrsElemSelected.getElementsByTagName("span");
        fCtr = getControl(fTrs, 'lPtyp');
        tblMoveType.innerHTML = fCtr.innerHTML;
        MoveTbl = true;
        tblMoveEl.style.top = mousePos.y - 13;
        tblMoveEl.style.left = mousePos.x - 170;
        tblMoveEl.style.display = "block";
    }

    if (isRightGridFrom) {

        fTrs = firstTrsElemSelected.getElementsByTagName("span");
        fCtr = getControl(fTrs, rightLastName);

        if (fCtr == null) {
            firstTrsElemSelected = null;
            return;
        }

        tblMoveLName.innerHTML = fCtr.innerHTML;
        fCtr = getControl(fTrs, rightFirstName);
        tblMoveFName.innerHTML = fCtr.innerHTML;
        fCtr = getControl(fTrs, 'lPtyp');
        tblMoveType.innerHTML = fCtr.innerHTML;
        fCtr = getControl(fTrs, 'lPHCP');
        tblMoveMark.innerHTML = fCtr.innerHTML;

        MoveTbl = true;
        tblMoveEl.style.top = mousePos.y - 13;
        tblMoveEl.style.left = mousePos.x - 170;
        tblMoveEl.style.display = "block";
    }
}

function hideLabelMove() {
    if (MoveTbl) {
        tblMoveEl.style.display = "none";
        tblMoveEl.style.top = startPos.y;
        tblMoveEl.style.left = startPos.x;
        MoveTbl = false;
    }
    moveTblVisible = false;
}

function leftElemToRight(currentRightRow, currentLeftRow) {
    if (isRowNotEmpty(currentLeftRow, leftHiddenName)) {

        if (isRowNotEmpty(currentRightRow, rightHiddenName)) {
            var leftSpans = currentLeftRow.getElementsByTagName("span");
            var rightSpans = currentRightRow.getElementsByTagName("span");

            var labelPosition = getControl(leftSpans, leftPosition);
            var tbFirstName = getControl(leftSpans, leftFirstName);
            var tbLastname = getControl(leftSpans, leftLastName);

            var rightLabelFirstName = getControl(rightSpans, rightFirstName);
            var rightLabelLastName = getControl(rightSpans, rightLastName);

            if (labelPosition != null && tbFirstName != null && tbLastname != null) {
                alert("Przeniesienie do wiersza zawierającego gracza: " + rightLabelFirstName.innerHTML.trim() + " " + rightLabelLastName.innerHTML.trim() + " nie jest możliwe, gracz " + tbFirstName.innerHTML + " " + tbLastname.innerHTML + " z pozycji " + labelPosition.innerHTML + " na liście lewej, został przeniesiony do pierwszego wolnego wiersza.");
            }

            currentRightRow = null;
        }

        if (currentRightRow == null) {
            var rightTrsElem = document.getElementById(rightGridId).getElementsByTagName("tr");
            currentRightRow = getFirstEmptyRow(rightTrsElem, rightHiddenName);
        }

        if (currentLeftRow != null && currentRightRow != null) {
            copyFromLeftToRight(currentRightRow, currentLeftRow);
            var controlsCollection = currentLeftRow.getElementsByTagName("input");
            var control = getControl(controlsCollection, leftCbxName);
            if (control != null && control.checked) {
                control.checked = false;
                currentLeftRow.className = unselectedRowCssClass;
            }
        }
    }
}

function rightElemToLeft(currentRightRow, currentLeftRow) {
    if (isRowNotEmpty(currentRightRow, rightHiddenName)) {

        if (isRowNotEmpty(currentLeftRow, leftHiddenName)) {
            var leftSpans = currentLeftRow.getElementsByTagName("span");
            var rightSpans = currentRightRow.getElementsByTagName("span");

            var labelPosition = getControl(leftSpans, leftPosition);
            var tbFirstName = getControl(leftSpans, leftFirstName);
            var tbLastname = getControl(leftSpans, leftLastName);

            var rightLabelFirstName = getControl(rightSpans, rightFirstName);
            var rightLabelLastName = getControl(rightSpans, rightLastName);

            if (labelPosition != null && tbFirstName != null && tbLastname != null) {
                alert("Pozycja " + labelPosition.innerHTML.trim() + " jest zajęta przez gracza " + tbFirstName.value.trim() + " " + tbLastname.value.trim() + ", gracz " + rightLabelFirstName.innerHTML.trim() + " " + rightLabelLastName.innerHTML.trim() + " został dodany na pierwszej wolnej pozycji.");
            }

            currentLeftRow = null;
        }

        if (currentLeftRow == null) {

            var leftTrsElem = document.getElementById(leftGridId).getElementsByTagName("tr");

            currentLeftRow = getFirstEmptyRow(leftTrsElem, leftHiddenName);
        }

        if (currentLeftRow != null && currentRightRow != null) {
            copyFromRightToLeft(currentRightRow, currentLeftRow);
            var controlsCollection = currentRightRow.getElementsByTagName("input");
            var control = getControl(controlsCollection, rightCbxName);
            if (control != null && control.checked) {
                control.checked = false;
                currentRightRow.className = unselectedRowCssClass;
            }

            currentLeftRow.focus();
        }
    }
}

function swapRightElemToLeft(currentRightRow, currentLeftRow) {
    if (currentLeftRow != null && currentRightRow != null) {
        if (isRowNotEmpty(currentRightRow, rightHiddenName)) {
            if (isRowNotEmpty(currentLeftRow, leftHiddenName)) {
                swapLeftWithRight(currentRightRow, currentLeftRow);
            }
            else {
                copyFromRightToLeft(currentRightRow, currentLeftRow);
                var controlsCollection = currentRightRow.getElementsByTagName("input");
                var control = getControl(controlsCollection, rightCbxName);
                if (control != null && control.checked) {
                    control.checked = false;
                    currentRightRow.className = unselectedRowCssClass;
                }
            }
            currentLeftRow.focus();
        }
    }
}

function GetSelectedElem(ev, isUp) {
    var evt = ev || window.event;
    var obj;

    //    var lG = document.getElementById(rightGridId);
    //    var cL = getPosition(lG);

    if (isUp) {

        //        if (browserName == "Firefox") {
        //            obj = GetElemFromCords(mousePos.x, mousePos.y);
        //            obj = null;
        //            obj = document.elementFromPoint(mousePos.x, mousePos.y);
        //        }
        //        else

        obj = document.elementFromPoint(mousePos.x, mousePos.y);

        if (obj == null)
            obj = evt.srcElement || evt.target;

        if (obj == null) {
            return;
        }

        var objId = obj.id;
        if (objId == null || objId.length == 0) {
            obj = obj.firstChild;
            if (obj != null) {
                objId = obj.id;
                if (objId == null || objId.length == 0) {
                    obj = obj.nextSibling;
                    if (obj != null) {
                        objId = obj.id;
                    }
                }
            }
        }
    }
    else {
        obj = evt.srcElement || evt.target;

        if (obj == null) {
            //            if (browserName == "Firefox")
            //                obj = GetElemFromCords(mousePos.x, mousePos.y);
            //            else
            obj = document.elementFromPoint(mousePos.x, mousePos.y);
        }

        if (obj == null) {
            return;
        }

        var objId = obj.id;

        if (objId == null || objId.length == 0) {
            obj = obj.firstChild;
            if (obj != null) {
                objId = obj.id;
                if (objId == null || objId.length == 0) {
                    obj = obj.nextSibling;
                    if (obj != null) {
                        objId = obj.id;
                    }
                }
            }
        }
    }

    if (obj == null || objId == null)
        return null;

    var retTR = null;

    var parN = obj.parentNode;

    while (parN != null) {
        if (parN.tagName == "TR" && parN.className != "headlist") {
            retTR = parN;
            break;
        }
        else
            parN = parN.parentNode;
    }

    if (objId.length > 0 && retTR != null) {

        var lngh = leftGridId.length;
        if (objId.length >= lngh) {
            var objIdLeft = obj.id.substring(0, lngh);
            if (objIdLeft == leftGridId) {
                if (isUp) {
                    isLeftGridTo = true;
                    isRightGridTo = false;
                }
                else {

                    var fTrs = retTR.getElementsByTagName("input");
                    var fCtr = getControl(fTrs, leftLastName);

                    if (fCtr == null) {
                        return null;
                    }

                    if (fCtr.value == "") {
                        return null;
                    }

                    isLeftGridFrom = true;
                    isRightGridFrom = false;
                }
                return retTR;
            }
        }

        lngh = rightGridId.length;
        if (objId.length >= lngh) {
            var objIdRight = obj.id.substring(0, lngh);
            if (objIdRight == rightGridId) {
                if (isUp) {
                    isLeftGridTo = false;
                    isRightGridTo = true;
                }
                else {

                    var fTrs = retTR.getElementsByTagName("span");
                    var fCtr = getControl(fTrs, rightLastName);

                    if (fCtr == null) {
                        return null;
                    }

                    if (fCtr.innerHTML == "") {
                        return null;
                    }

                    isLeftGridFrom = false;
                    isRightGridFrom = true;
                }

                return retTR;
            }
        }
    }

    return null;
}

function swapButtonClick(leftGridClientId) {
    var leftGrid = document.getElementById(leftGridClientId);
    var leftTrs = leftGrid.getElementsByTagName("tr");

    var selectedLeftTrs = getSelectedRows(leftTrs, leftCbxName);

    var firstCounter = 0;
    var secondCounter = selectedLeftTrs.length - 1;

    var currentFirstRow;
    var currentSecondRow;
    while (firstCounter < secondCounter && secondCounter > 0) {
        currentFirstRow = selectedLeftTrs[firstCounter];
        currentSecondRow = selectedLeftTrs[secondCounter];

        swapRows(currentFirstRow, currentSecondRow);

        firstCounter++;
        secondCounter--;
    }
    unselectRows(selectedLeftTrs, leftCbxName, unselectedRowCssClass);
}

function buttonRightToLeftClick(leftGridClientId, rightGridClientId) {
    var leftGrid = document.getElementById(leftGridClientId);
    var rightGrid = document.getElementById(rightGridClientId);
    var leftTrs = leftGrid.getElementsByTagName("tr");
    var rightTrs = rightGrid.getElementsByTagName("tr");

    var selectedLeftTrs = getSelectedRows(leftTrs, leftCbxName);
    var selectedRightTrs = getSelectedRows(rightTrs, rightCbxName);

    var rightCounter = 0;
    var leftCounter = 0;

    var currentRightRow;
    var currentLeftRow;

    while (true) {
        currentRightRow = null;
        currentLeftRow = null;

        for (var j = rightCounter; j < selectedRightTrs.length; j++) {
            rightCounter++;
            currentRightRow = selectedRightTrs[j];
            if (isRowNotEmpty(currentRightRow, rightHiddenName)) {
                break;
            }
            else {
                currentRightRow = null;
            }
        }

        if (currentRightRow == null) {
            break;
        }

        for (var i = leftCounter; i < selectedLeftTrs.length; i++) {
            leftCounter++;
            currentLeftRow = selectedLeftTrs[i];

            if (isRowEmpty(currentLeftRow, leftHiddenName)) {
                break;
            }
            else {
                var leftSpans = currentLeftRow.getElementsByTagName("span");
                var rightSpans = currentRightRow.getElementsByTagName("span");

                var labelPosition = getControl(leftSpans, leftPosition);
                var tbFirstName = getControl(leftSpans, leftFirstName);
                var tbLastname = getControl(leftSpans, leftLastName);

                var rightLabelFirstName = getControl(rightSpans, rightFirstName);
                var rightLabelLastName = getControl(rightSpans, rightLastName);

                if (labelPosition != null && tbFirstName != null && tbLastname != null) {
                    alert("Pozycja " + labelPosition.innerHTML.trim() + " jest zajęta przez gracza " + tbFirstName.value.trim() + " " + tbLastname.value.trim() + ", gracz " + rightLabelFirstName.innerHTML.trim() + " " + rightLabelLastName.innerHTML.trim() + " został dodany na pierwszej wolnej pozycji.");
                }

                currentLeftRow = null;
            }
        }

        if (currentLeftRow == null) {
            currentLeftRow = getFirstEmptyRow(leftTrs, leftHiddenName);
        }

        if (currentLeftRow != null && currentRightRow != null) {
            copyFromRightToLeft(currentRightRow, currentLeftRow);
            currentLeftRow.focus();
        }
    }
    unselectRows(selectedLeftTrs, leftCbxName, unselectedRowCssClass);
    unselectRows(selectedRightTrs, rightCbxName, unselectedRowCssClass);
}

function buttonAllRightToLeftClick(leftGridClientId, rightGridClientId) {
    var leftGrid = document.getElementById(leftGridClientId);
    var rightGrid = document.getElementById(rightGridClientId);
    var leftTrs = leftGrid.getElementsByTagName("tr");
    var rightTrs = rightGrid.getElementsByTagName("tr");

    var rightCounter = 0;
    var leftCounter = 0;
    var currentRightRow;
    var currentLeftRow;

    while (true) {
        currentRightRow = null;
        currentLeftRow = null;

        for (var j = rightCounter; j < rightTrs.length; j++) {
            rightCounter++;
            currentRightRow = rightTrs[j];
            if (isRowNotEmpty(currentRightRow, rightHiddenName)) {
                break;
            }
            else {
                currentRightRow = null;
            }
        }

        if (currentRightRow == null) {
            break;
        }

        currentLeftRow = getFirstEmptyRow(leftTrs, leftHiddenName);

        if (currentLeftRow != null && currentRightRow != null) {
            copyFromRightToLeft(currentRightRow, currentLeftRow);
            currentLeftRow.focus();
        }
    }
    unselectRows(leftTrs, leftCbxName, unselectedRowCssClass);
    unselectRows(rightTrs, rightCbxName, unselectedRowCssClass);
}

function buttonLeftToRightClick(leftGridClientId, rightGridClientId) {
    var leftGrid = document.getElementById(leftGridClientId);
    var rightGrid = document.getElementById(rightGridClientId);
    var leftTrs = leftGrid.getElementsByTagName("tr");
    var rightTrs = rightGrid.getElementsByTagName("tr");

    var selectedLeftTrs = getSelectedRows(leftTrs, leftCbxName);
    var selectedRightTrs = getSelectedRows(rightTrs, rightCbxName);

    var rightCounter = 0;
    var leftCounter = 0;

    var currentRightRow;
    var currentLeftRow;

    while (true) {
        currentRightRow = null;
        currentLeftRow = null;

        for (var j = leftCounter; j < selectedLeftTrs.length; j++) {
            leftCounter++;
            currentLeftRow = selectedLeftTrs[j];
            if (isRowNotEmpty(currentLeftRow, leftHiddenName)) {
                break;
            }
            else {
                currentLeftRow = null;
            }
        }

        if (currentLeftRow == null) {
            break;
        }

        for (var i = rightCounter; i < selectedRightTrs.length; i++) {
            rightCounter++;
            currentRightRow = selectedRightTrs[i];

            if (isRowEmpty(currentRightRow, rightHiddenName)) {
                break;
            }
            else {
                var leftSpans = currentLeftRow.getElementsByTagName("span");
                var rightSpans = currentRightRow.getElementsByTagName("span");

                var labelPosition = getControl(leftSpans, leftPosition);
                var tbFirstName = getControl(leftSpans, leftFirstName);
                var tbLastname = getControl(leftSpans, leftLastName);

                var rightLabelFirstName = getControl(rightSpans, rightFirstName);
                var rightLabelLastName = getControl(rightSpans, rightLastName);

                if (labelPosition != null && tbFirstName != null && tbLastname != null) {
                    alert("Przeniesienie do wiersza zawierającego gracza: " + rightLabelFirstName.innerHTML.trim() + " " + rightLabelLastName.innerHTML.trim() + " nie jest możliwe, gracz " + tbFirstName.innerHTML + " " + tbLastname.innerHTML + " z pozycji " + labelPosition.innerHTML + " na liście lewej, został przeniesiony do pierwszego wolnego wiersza.");
                }

                currentRightRow = null;
            }
        }

        if (currentRightRow == null) {
            currentRightRow = getFirstEmptyRow(rightTrs, rightHiddenName);
        }

        if (currentLeftRow != null && currentRightRow != null) {
            copyFromLeftToRight(currentRightRow, currentLeftRow);
        }

        if (leftCounter == selectedLeftTrs.length) {
            break;
        }
    }

    unselectRows(selectedLeftTrs, leftCbxName, unselectedRowCssClass);
    unselectRows(selectedRightTrs, rightCbxName, unselectedRowCssClass);
}

function buttonAllLeftToRightClick(leftGridClientId, rightGridClientId) {
    var leftGrid = document.getElementById(leftGridClientId);
    var rightGrid = document.getElementById(rightGridClientId);
    var leftTrs = leftGrid.getElementsByTagName("tr");
    var rightTrs = rightGrid.getElementsByTagName("tr");

    var rightCounter = 0;
    var leftCounter = 0;
    var currentRightRow;
    var currentLeftRow;

    while (true) {
        currentRightRow = null;
        currentLeftRow = null;

        for (var j = leftCounter; j < leftTrs.length; j++) {
            leftCounter++;
            currentLeftRow = leftTrs[j];
            if (isRowNotEmpty(currentLeftRow, leftHiddenName)) {
                break;
            }
            else {
                currentLeftRow = null;
            }
        }

        if (currentLeftRow == null) {
            break;
        }

        currentRightRow = getFirstEmptyRow(rightTrs, rightHiddenName);

        if (currentRightRow != null && currentLeftRow != null) {
            copyFromLeftToRight(currentRightRow, currentLeftRow);
            currentRightRow.focus();
        }
    }
    unselectRows(leftTrs, leftCbxName, unselectedRowCssClass);
    unselectRows(rightTrs, rightCbxName, unselectedRowCssClass);
}

function buttonResetClick(leftGridClientId, rightGridClientId) {
    var leftGrid = document.getElementById(leftGridClientId);
    var rightGrid = document.getElementById(rightGridClientId);
    var leftTrs = leftGrid.getElementsByTagName("tr");
    var rightTrs = rightGrid.getElementsByTagName("tr");

    unselectRows(leftTrs, leftCbxName, unselectedRowCssClass);
    unselectRows(rightTrs, rightCbxName, unselectedRowCssClass);
}

function copyFromLeftToRight(rightTr, leftTr) {
    var leftControl;
    var rightControl;

    rightTr.style.color = leftTr.style.color;
    leftTr.style.color = "";

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfPlayerId');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfPlayerId');
    rightControl.value = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfPersonId');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfPersonId');
    rightControl.value = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPLast');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'tbLastNS');
    rightControl.innerHTML = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPFirst');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'tbFirNS');
    rightControl.innerHTML = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPtyp');
    leftControl = getControl(leftTr.getElementsByTagName("span"), 'lPtyp');
    rightControl.innerHTML = leftControl.innerHTML;
    leftControl.innerHTML = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPHCP');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfHcp');
    rightControl.innerHTML = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPGame');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfHcpOfGame');
    rightControl.innerHTML = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPLRRP');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfLastRes');
    rightControl.innerHTML = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPSumR');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfSumRes');
    rightControl.innerHTML = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPlayCN');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfClubName');
    rightControl.innerHTML = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfHcpNotActive');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfHcpNotActive');
    rightControl.value = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfPlayerType');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfPlayerType');
    rightControl.value = leftControl.value;
    leftControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'tMark');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'tMark');
    rightControl.value = leftControl.value;
    leftControl.value = '';
}

function copyFromLeftToRightNoClear(rightTr, leftTr) {
    var leftControl;
    var rightControl;

    rightTr.style.color = leftTr.style.color;

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfPlayerId');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfPlayerId');
    rightControl.value = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfPersonId');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfPersonId');
    rightControl.value = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPLast');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'tbLastNS');
    rightControl.innerHTML = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPFirst');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'tbFirNS');
    rightControl.innerHTML = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPtyp');
    leftControl = getControl(leftTr.getElementsByTagName("span"), 'lPtyp');
    rightControl.innerHTML = leftControl.innerHTML;

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPHCP');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfHcp');
    rightControl.innerHTML = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPGame');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfHcpOfGame');
    rightControl.innerHTML = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPLRRP');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfLastRes');
    rightControl.innerHTML = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPSumR');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfSumRes');
    rightControl.innerHTML = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPlayCN');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfClubName');
    rightControl.innerHTML = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfHcpNotActive');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfHcpNotActive');
    rightControl.value = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfPlayerType');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfPlayerType');
    rightControl.value = leftControl.value;

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'tMark');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'tMark');
    rightControl.value = leftControl.value;
}

function copyFromRightToLeft(rightTr, leftTr) {
    var leftControl;
    var rightControl;

    leftTr.style.color = rightTr.style.color;

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfPlayerId');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfPlayerId');
    leftControl.value = rightControl.value;
    rightControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfPersonId');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfPersonId');
    leftControl.value = rightControl.value;
    rightControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPLast');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'tbLastNS');
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPFirst');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'tbFirNS');
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPtyp');
    leftControl = getControl(leftTr.getElementsByTagName("span"), 'lPtyp');
    leftControl.innerHTML = rightControl.innerHTML;
    rightControl.innerHTML = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPHCP');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfHcp');
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPGame');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfHcpOfGame');
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPLRRP');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfLastRes');
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPSumR');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfSumRes');
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = '';

    rightControl = getControl(rightTr.getElementsByTagName("span"), 'lPlayCN');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfClubName');
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = '';

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfHcpNotActive');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfHcpNotActive');
    leftControl.value = rightControl.value;
    rightControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'hfPlayerType');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'hfPlayerType');
    leftControl.value = rightControl.value;
    rightControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("input"), 'tMark');
    leftControl = getControl(leftTr.getElementsByTagName("input"), 'tMark');
    leftControl.value = rightControl.value;
    rightControl.value = '';

    rightControl = getControl(rightTr.getElementsByTagName("a"), 'hlWarning');
    if (rightControl != null) {
        rightControl.style.display = 'none';
    }
}

function swapRows(rowFrom, rowTo) {
    var leftControl;
    var rightControl;
    var tmpValue;
    var tmpColor;

    tmpColor = rowFrom.style.color;
    rowFrom.style.color = rowTo.style.color;
    rowTo.style.color = tmpColor;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfPlayerId');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfPlayerId');
    if (leftControl.value == rightControl.value)
        return;
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfPersonId');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfPersonId');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'tbLastNS');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'tbLastNS');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'tbFirNS');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'tbFirNS');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("span"), 'lPtyp');
    leftControl = getControl(rowTo.getElementsByTagName("span"), 'lPtyp');
    tmpValue = leftControl.innerHTML;
    leftControl.innerHTML = rightControl.innerHTML;
    rightControl.innerHTML = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfHcp');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfHcp');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfHcpOfGame');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfHcpOfGame');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfLastRes');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfLastRes');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfSumRes');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfSumRes');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfClubName');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfClubName');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfHcpNotActive');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfHcpNotActive');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfPlayerType');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfPlayerType');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'tMark');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'tMark');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), leftCbxName);
    leftControl = getControl(rowTo.getElementsByTagName("input"), leftCbxName);
    tmpValue = leftControl.checked;
    leftControl.checked = rightControl.checked;
    rightControl.checked = tmpValue;
}

function swapLeftWithRight(rowFrom, rowTo) {
    var leftControl;
    var rightControl;
    var tmpValue;
    var tmpColor;

    tmpColor = rowFrom.style.color;
    rowFrom.style.color = rowTo.style.color;
    rowTo.style.color = tmpColor;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfPlayerId');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfPlayerId');
    if (leftControl.value == rightControl.value)
        return;
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfPersonId');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfPersonId');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("span"), 'lPLast');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'tbLastNS');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("span"), 'lPFirst');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'tbFirNS');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("span"), 'lPtyp');
    leftControl = getControl(rowTo.getElementsByTagName("span"), 'lPtyp');
    tmpValue = leftControl.innerHTML;
    leftControl.innerHTML = rightControl.innerHTML;
    rightControl.innerHTML = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("span"), 'lPHCP');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfHcp');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("span"), 'lPGame');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfHcpOfGame');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("span"), 'lPLRRP');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfLastRes');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("span"), 'lPSumR');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfSumRes');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("span"), 'lPlayCN');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfClubName');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.innerHTML;
    rightControl.innerHTML = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfHcpNotActive');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfHcpNotActive');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'hfPlayerType');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'hfPlayerType');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'tMark');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'tMark');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), rightCbxName);
    leftControl = getControl(rowTo.getElementsByTagName("input"), leftCbxName);
    tmpValue = leftControl.checked;
    leftControl.checked = rightControl.checked;
    rightControl.checked = tmpValue;
}

function getSelectedRows(trs, cbxName) {
    var counter = 0;
    var controlsCollection;
    var selectedTrs = new Array();

    var cbx;
    var hidden;
    for (var i = 0; i < trs.length; i++) {
        controlsCollection = trs[i].getElementsByTagName("input");
        var cbx = getControl(controlsCollection, cbxName);

        if (cbx != null && cbx.checked) {
            selectedTrs[counter] = trs[i];
            counter++;
        }
    }

    return selectedTrs;
}

function getFirstEmptyRow(trs, hiddenName) {
    var hidden;
    var controlsCollection;
    for (var i = 0; i < trs.length; i++) {
        controlsCollection = trs[i].getElementsByTagName("input");
        hidden = getControl(controlsCollection, hiddenName);
        if (hidden != null && hidden.value == '') {
            return trs[i];
        }
    }

    return null;
}

function isRowEmpty(tr, hiddenName) {
    var controlsCollection = tr.getElementsByTagName("input");
    var hidden = getControl(controlsCollection, hiddenName);

    if (hidden != null && hidden.value == '') {
        return true;
    }
    else {
        return false;
    }
}

function isRowNotEmpty(tr, hiddenName) {
    var controlsCollection = tr.getElementsByTagName("input");
    var hidden = getControl(controlsCollection, hiddenName);

    if (hidden != null && hidden.value != '') {
        return true;
    }
    else {
        return false;
    }
}

function selectRow(cbx, selectedRowCssClass, unselectedRowCssClass) {
    var tr = cbx.parentNode.parentNode;

    if (cbx.checked) {
        tr.className = selectedRowCssClass;
    }
    else {
        tr.className = unselectedRowCssClass;
    }
}

function unselectRows(trs, cbxName, unselectedRowCssClass) {
    var control;
    var controlsCollection;

    for (var i = 0; i < trs.length; i++) {
        controlsCollection = trs[i].getElementsByTagName("input");
        control = getControl(controlsCollection, cbxName);
        if (control != null && control.checked) {
            control.checked = false;
            trs[i].className = unselectedRowCssClass;
        }
    }
}

function getControl(controlsCollection, name) {
    for (var i = 0; i < controlsCollection.length; i++) {
        var id = controlsCollection[i].getAttribute("id");
        if (id == null) return null;
        if (id.indexOf(name) != -1) {
            return controlsCollection[i];
        }
    }

    return null;
}

//sprawdzacze regexowe
var regexPlayerId = new RegExp(leftHiddenName);
var regexFlight = new RegExp(leftFlight);
var regexHoleNbr = new RegExp(leftHole);
var regexStartTime = new RegExp(leftStartTime);

var regexFlightFormat = new RegExp("(^[0-9]$)|(^[0-9][0-9]$)|(^[0-9][0-9][0-9]$)");
var regexTime = new RegExp("^(0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$");
var regexHole = new RegExp("^(0?[0-9]|1[0-8])[abcde]?[ \t]*$");

function CheckStartList(sender, args) {
    var trs = document.getElementById(startListClientId).getElementsByTagName("tr");
    var inputs;
    args.IsValid = true;

    var errorstxt = "Niepoprawnie wypełniony formularz list startowych: \n\n";

    for (var k = 1; k < trs.length; k++) {
        inputs = trs[k].getElementsByTagName("input");

        for (var i = 0; i < inputs.length; i++) {
            if (regexPlayerId.test(inputs[i].getAttribute("id"))) {
                if (inputs[i].value == "") {
                    args.IsValid = false;
                    errorstxt += "- brak odpowiednich danych w wierszu " + k + "\n";
                }
            }
            if (regexFlight.test(inputs[i].getAttribute("id"))) {
                if (inputs[i].value == "" || !regexFlightFormat.test(inputs[i].value)) {
                    args.IsValid = false;
                    errorstxt += "- brak numeru fligth w wierszu " + k + " lub ma on niepoprawną wartość\n";
                }
            }
            if (regexHoleNbr.test(inputs[i].getAttribute("id"))) {
                if (inputs[i].value == "") {
                    args.IsValid = false;
                    errorstxt += "- brak numeru dołka w wierszu " + k + "\n";
                } else if (!regexHole.test(inputs[i].value)) {
                    args.IsValid = false;
                    errorstxt += "- zły numer dołka w wierszu " + k + "\n";
                }
            }
            if (regexStartTime.test(inputs[i].getAttribute("id"))) {
                if (inputs[i].value == "") {
                    args.IsValid = false;
                    errorstxt += "- brak godziny startu w wierszu " + k + "\n";
                } else if (!regexTime.test(inputs[i].value)) {
                    args.IsValid = false;
                    errorstxt += "- nieprawidłowa godzina startu w wierszu " + k + "\n";
                }
            }
        }
    }

    if (!args.IsValid) {
        sender.errormessage = errorstxt;
    }
}

//funkcja uzywan do walidacji podczas generowania ustawienia
function CheckTbxView() {
    var rbl = document.getElementById(rblstartlist);
    var tbx1 = document.getElementById("hide1hole");
    var tbx2 = document.getElementById("hide2hole");

    var inputs = rbl.getElementsByTagName("INPUT");
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            if (i == 0) {
                tbx1.style.display = "block";
                tbx2.style.display = "none";
            }
            else if (i == 1) {
                tbx1.style.display = "block";
                tbx2.style.display = "block";
            }
            else if (i == 2) {
                tbx1.style.display = "none";
                tbx2.style.display = "none";
            }
        }
    }
}

//funkcja uzywan do walidacji podczas generowania ustawienia
function CheckHoles(sender, args) {
    var tbx1 = document.getElementById(hole1ClientId).value;
    var tbx2 = document.getElementById(hole2ClientId).value;

    var inputs = document.getElementById(rblstartlist).getElementsByTagName("INPUT");
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            if (i == 0) {
                if (tbx1 != "")
                    args.IsValid = true;
                else
                    args.IsValid = false;
            }
            else if (i == 1) {
                if (tbx1 != "" && tbx2 != "")
                    args.IsValid = true;
                else
                    args.IsValid = false;
            }
            else {
                args.IsValid = true;
            }
        }
    }
}

//funkcja sprawdza czy godzina startu jest prawidłowa
function CheckStartTime(elem) {
    elem.value = string_trim(elem.value);
    if (!regexTime.test(elem.value)) {
        window.alert("Wprowadzono nieprawidłową godzinę");
        elem.value = previousValue;
        elem.focus();
        return false;
    }
    var tmp_val = elem.value;
    var obj_table = GetParentByType(elem, "table");
    var obj_row = GetParentByType(elem, "tr");
    var obj_row_Fname = getControl(obj_row.getElementsByTagName("input"), "tbLastNS").value;
    if (obj_row_Fname == "") {
        window.alert("Nie można zmieniać wartości w pustym wierszu.");
        elem.value = previousValue;
        elem.focus();
        return false;
    }
    var flight_nbr = getControl(obj_row.getElementsByTagName("input"), leftFlight).value;
    if (isNaN(flight_nbr)) {
        window.alert("Wprowadzono nieprawidłową godzinę");
        elem.value = previousValue;
        elem.focus();
        return false;
    }

    var rows = FindRowsofFlight(flight_nbr, obj_table);
    for (i in rows) {
        getControl(rows[i].getElementsByTagName("input"), leftStartTime).value = tmp_val;
    }

    return true;
}


//funkcja sprawdza czy numer dołka został wpisany prawidłowo
function CheckHoleData(elem) {
    elem.value = string_trim(elem.value);
    if (!regexHole.test(elem.value)) {
        window.alert("Wprowadzono nieprawidłowy numer dołka.");
        elem.value = previousValue;
        elem.focus();
        return false;
    }

    var tmp_val = elem.value;
    var obj_table = GetParentByType(elem, "table");
    var obj_row = GetParentByType(elem, "tr");
    var obj_row_Fname = getControl(obj_row.getElementsByTagName("input"), "tbLastNS").value;
    if (obj_row_Fname == "") {
        window.alert("Nie można zmieniać wartości w pustym wierszu.");
        elem.value = previousValue;
        elem.focus();
        return false;
    }
    var flight_nbr = getControl(obj_row.getElementsByTagName("input"), leftFlight).value;
    if (isNaN(flight_nbr)) {
        window.alert("Wprowadzono nieprawidłowy numer dołka.");
        elem.value = previousValue;
        elem.focus();
        return false;
    }

    var rows = FindRowsofFlight(flight_nbr, obj_table);
    for (i in rows) {
        getControl(rows[i].getElementsByTagName("input"), leftHole).value = tmp_val;
    }

    return true;
}

//funkcja sprawdza czy nr flightu został wypełniony prawidłowo
function CheckFlight(elem) {
    elem.value = string_trim(elem.value);
    if (isNaN(elem.value)) {
        window.alert("Wprowadzono nieprawidłowy numer grupy.");
        elem.value = previousValue;
        elem.focus();
        return false;
    }

    var obj_table = GetParentByType(elem, "table");
    var obj_row = GetParentByType(elem, "tr");
    var obj_row_Fname = getControl(obj_row.getElementsByTagName("input"), "tbLastNS").value;
    if (obj_row_Fname == "") {
        window.alert("Nie można zmieniać wartości w pustym wierszu.");
        elem.value = previousValue;
        elem.focus();
        return false;
    }
    var obj_flight_rows = FindRowsofFlight(elem.value, obj_table);
    var copydatarow = GetRowOtherThanMe(obj_flight_rows, obj_row);

    if (copydatarow == null) {
        //window.alert("Numer grupy nie istnieje na liście startowej.");
        //elem.value = previousValue;
        //elem.focus();
        return true;
    }

    getControl(obj_row.getElementsByTagName("input"), leftHole).value = getControl(copydatarow.getElementsByTagName("input"), leftHole).value;
    getControl(obj_row.getElementsByTagName("input"), leftStartTime).value = getControl(copydatarow.getElementsByTagName("input"), leftStartTime).value;

    MoweRows(obj_row, copydatarow, obj_table);

    return true;
}


function RememberPreviousValue(elem) {
    previousValue = string_trim(elem.value);

}

function GetRowOtherThanMe(rows, original_row) {
    var lp = getControl(original_row.getElementsByTagName("span"), "lP").innerHTML;
    var row_end = null;

    for (var i = rows.length - 1; i > -1; i--) {
        var lp_x = getControl(rows[i].getElementsByTagName("span"), "lP").innerHTML;
        if (lp_x != lp) {
            if (parseInt(lp) < parseInt(lp_x))
                to_up = false;
            else
                to_up = true;
            row_end = rows[i];
            //            if (isRowNotEmpty(row_end, leftHiddenName))
            break;
        }
    }
    return row_end;
}

function swapRowsRestValues(rowFrom, rowTo) {
    var leftControl;
    var rightControl;
    var tmpValue;

    swapRows(rowFrom, rowTo);

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'tFl');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'tFl');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'tHnr');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'tHnr');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;

    rightControl = getControl(rowFrom.getElementsByTagName("input"), 'tST');
    leftControl = getControl(rowTo.getElementsByTagName("input"), 'tST');
    tmpValue = leftControl.value;
    leftControl.value = rightControl.value;
    rightControl.value = tmpValue;
}

function MoweRows(row_to_move, row_behind, table_obj) {

    var rows = new Array();
    var all_rows = table_obj.getElementsByTagName("tr");
    var is_move = false;
    var focus_control;
    document.body.style.cursor = "wait";
    if (to_up) {
        for (var i = all_rows.length - 1; i > 0; i--) {
            if (all_rows[i] == row_to_move)
                is_move = true;
            if (is_move) {
                if (all_rows[i - 1] == row_behind) {
                    focus_control = getControl(all_rows[i].getElementsByTagName("input"), 'tFl');
                    makeDoubleLines();
                    focus_control.focus();
                    document.body.style.cursor = "default";
                    return;
                }
                swapRowsRestValues(all_rows[i], all_rows[i - 1]);
            }
        }
    }
    else {
        for (var i = 0; i < all_rows.length - 1; i++) {
            if (all_rows[i] == row_to_move)
                is_move = true;
            if (is_move) {
                if (all_rows[i] == row_behind) {
                    focus_control = getControl(all_rows[i].getElementsByTagName("input"), 'tFl');
                    makeDoubleLines();
                    focus_control.focus();
                    document.body.style.cursor = "default";
                    return;
                }
                swapRowsRestValues(all_rows[i], all_rows[i + 1]);
                focus_control = getControl(all_rows[i + 1].getElementsByTagName("input"), 'tFl');
            }
        }
    }

    makeDoubleLines();
    focus_control.focus();
    document.body.style.cursor = "default";
}

//imie i nazwisko na lewej liscie musza byc textboxami aby mozna bylo odczytac ich wartosci
//po stronie c#, ustawienie readonly lub disabled powoduje ze wartosci nie ma po stronie serwera
//funkcja zapobiega edycji pol
function RemoveFocus(control) {
    control.blur();
}

//znajduej najblizszego rodzica o danym typie
function GetParentByType(control, type) {
    var parent = control.parentNode;
    while (parent.tagName.toLowerCase() != type) {
        parent = parent.parentNode;
        if (parent.tagName.toLowerCase() == "body")
            return null;
    }

    return parent;

}


//znajduje te wiersze w tabeli w ktorych jest ustawiony powyzszy numer grupy (flight)
function FindRowsofFlight(flightNbr, table_obj) {
    var rows = new Array();

    var all_rows = table_obj.getElementsByTagName("tr");
    for (var i = 0; i < all_rows.length; i++) {
        var flight = getControl(all_rows[i].getElementsByTagName("input"), leftFlight);
        if (flight != null && flight.value == flightNbr)
            rows.push(all_rows[i]);

    }

    return rows;
}

function disableSelection(target) {

    if (typeof target.onselectstart != "undefined") //IE route

        target.onselectstart = function() { return false }

    else if (typeof target.style.MozUserSelect != "undefined") //Firefox route

        target.style.MozUserSelect = "none"

    else //All other route (ie: Opera)

        target.onmousedown = function() { return false }
    target.style.cursor = "default"

}

//if (GetBrowserName() == "Firefox") {
//    Document.prototype.elementFromPoint = function(x, y) {
//        this.addEventListener("mousemove", this.elementFromPoint__handler, false);
//        var event = this.createEvent("MouseEvents");
//        var box = this.getBoxObjectFor(this.documentElement);
//        var screenDelta = { x: box.screenX, y: box.screenY };
//        event.initMouseEvent("mousemove", true, false, this.defaultView, 0,
//x + screenDelta.x, y + screenDelta.y, x, y,
//false, false, false, false, 0, null);
//        this.dispatchEvent(event);
//        this.removeEventListener("mousemove", this.elementFromPoint__handler, false);
//        return this.elementFromPoint__target;
//    }
//    Document.prototype.elementFromPoint__handler = function(event) {
//        this.elementFromPoint__target = event.explicitOriginalTarget;

//        if (this.elementFromPoint__target.nodeType == Node.TEXT_NODE)
//            this.elementFromPoint__target = this.elementFromPoint__target.parentNode;

//        if (this.elementFromPoint__target.nodeName.toUpperCase() == "HTML" && this.documentElement.nodeName.toUpperCase() == "HTML")
//            this.elementFromPoint__target = this.getElementsByTagName("BODY").item(0);

//        //****added this code to check for textboxes and textareas	
//        if (this.elementFromPoint__target.nodeName == "#document")//possible textbox or textarea 
//        {
//            rp = event.rangeParent;
//            alert("event.rangeParent = " + rp);
//            if (event.rangeParent.nodeType == Node.TEXT_NODE)//textbox with a value 
//                this.elementFromPoint__target = event.rangeParent.parentNode.parentNode;
//            else if (event.rangeParent.nodeName == 'div')//textbox without a value 
//                this.elementFromPoint__target = event.rangeParent.parentNode;
//        }
//        //****end. However this cause permission denied as the rangeParent object appears to be private!	

//        event.preventDefault();
//        event.stopPropagation();
//    }
//    Document.prototype.elementFromPoint__target = null;
//}

//function GetElemFromCords(x, y) {
//    Document.prototype.elementFromPoint(x, y);
//}

//function GetElemFromCords(x, y) {
//    this.addEventListener("mousemove", getElementFromPoint__handler, false);
//    var event = this.createEvent("MouseEvents");
//    var box = this.getBoxObjectFor(this.documentElement);
//    var screenDelta = { x: box.screenX, y: box.screenY };
//    event.initMouseEvent("mousemove", true, false, this.defaultView, 0,
//x + screenDelta.x, y + screenDelta.y, x, y,
//false, false, false, false, 0, null);
//    this.dispatchEvent(event);
//    this.removeEventListener("mousemove", getElementFromPoint__handler, false);
//    return this.elementFromPoint__target;
//}

//function getElementFromPoint__handler(event) {
//    this.elementFromPoint__target = event.explicitOriginalTarget;

//    if (this.elementFromPoint__target.nodeType == Node.TEXT_NODE)
//        this.elementFromPoint__target = this.elementFromPoint__target.parentNode;

//    if (this.elementFromPoint__target.nodeName.toUpperCase() == "HTML" && this.documentElement.nodeName.toUpperCase() == "HTML")
//        this.elementFromPoint__target = this.getElementsByTagName("BODY").item(0);

//    //****added this code to check for textboxes and textareas
//    if (this.elementFromPoint__target.nodeName == "#document")//possible textbox or textarea
//    {
//        rp = event.rangeParent;
//        alert("event.rangeParent = " + rp);
//        if (event.rangeParent.nodeType == Node.TEXT_NODE)//textbox with a value
//            this.elementFromPoint__target = event.rangeParent.parentNode.parentNode;
//        else if (event.rangeParent.nodeName == 'div')//textbox without a value
//            this.elementFromPoint__target = event.rangeParent.parentNode;
//    }
//    //****end. However this cause permission denied as the rangeParent object appears to be private!

//    event.preventDefault();
//    event.stopPropagation();
//}

//function GetElemFromCords(x, y) {
//        //***************************
//        //internal 'hidden' functions
//        //***************************
//        var filter = function(node) {
//            //this is used by createTreeWalker to select 
//            //appropriate nodes from the DOM tree
//            var nBox = document.getBoxObjectFor(node); //get the bounding box for the node
//            //this seems to be a gecko only call, 
//            //so a DOM friendly alternative might be better
//            //accept the node if it contains the x & y points passed in
//            //and isn't set to 'hidden' visibility when the pointer floats over it.
//            if ((x >= nBox.x)
//                && (x <= (nBox.x + nBox.width))
//                && (y >= nBox.y)
//                && (y <= (nBox.y + nBox.height))
//                && (window.getComputedStyle(node, 'hover').visibility != 'hidden'))
//                return NodeFilter.FILTER_ACCEPT;
//            else return NodeFilter.FILTER_SKIP;
//        }

//        var getAbsoluteAncestorStyle = function(node) {
//            //walk up a node's ancestry to see if it's contained by an 
//            //'absolute' positioned node.

//            //go back now if we're looking at the body node.
//            if (node == document.body) return window.getComputedStyle(node, 'hover');
//            else {
//                //check the node passed in first.
//                var walker = node;
//                do {
//                    //grab the style it would have with the mouse hovering over it
//                    var myStyle = window.getComputedStyle(walker, 'hover');
//                    //if this node's absolute, return it's style object 
//                    if (myStyle.position == 'absolute') return myStyle;
//                    //otherwise get the node's parent
//                    walker = walker.parentNode;
//                    //and repeat until we hit the body element.
//                } while (walker != document.body);
//                //if we didn't find an absolute ancestor, 
//                //simply return the passed in node's style
//                return window.getComputedStyle(node, 'hover');
//            }
//        }
//        var isAncestor = function(parent, child) {
//            var walker = child;
//            while (walker != document.body) {
//                walker = walker.parentNode;
//                if (parent == walker) return true;
//            }
//            return false;
//        }

//        var returnNode = document.body; //default to the body element, in case nothing else is found.
//        //make sure to grab it's style for initial comparison
//        rStyle = window.getComputedStyle(returnNode, 'hover');
//        //grab all the most likely nodes from the DOM.
//        //a NodeIterator would work here too, but it wasn't implemented in the gecko engine
//        var tw = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT, filter, true);
//        //walk through all returned nodes
//        for (var e = tw.nextNode(); e != null; e = tw.nextNode()) {
//            //grab its style, or the style of an 'absolute'ly positiond ancestor
//            eStyle = getAbsoluteAncestorStyle(e);
//            //if the the node is a child of the most likely node checked so far
//            //or the most likely node wasn't absolute,
//            //or both nodes are absolute (or in absolute ancestors) and this node's zIndex puts it above the most likely node
//            if (isAncestor(returnNode, e)
//|| (rStyle.position != 'absolute')
//|| ((rStyle.position == 'absolute') && (eStyle.position == 'absolute') && (eStyle.zIndex >= rStyle.zIndex))) {
//                // make this the most likely node checked so far. 
//                returnNode = e;
//                //and hold on the the style indicator
//                rStyle = eStyle;
//            }
//        }
//        //now return the best node found.
//        return returnNode;
//    }
