var parentURL = "XXXXList.aspx";
var parentGridID = "g1";

var childURL = "XXXXForm.aspx";
var childTarget = "";
var foreignKeyName = null;
var foreignKeyValue = null;


function onLoad() {
    gridFun();
    setDefaultPostBack("Toolbar", "Search");
    FieldFocus();
    window.setTimeout("hideLoadingMessage();", 500);
    filterOperator($('ddSearchColumn'));
};

function setDefaultPostBack(eventTarget, eventArgument) {
    var f = document.Form1 || document.forms["Form1"];
    f.__EVENTTARGET.value = eventTarget.split("$").join(":");
    f.__EVENTARGUMENT.value = eventArgument;

};

function filterOperator(o) {
   
    if (!o) return;
    var searchType = o.options[o.selectedIndex].getAttribute("type");
    var oSearchOperator = $("ddSearchOperator");
    var so;
    if (searchType != null) searchType = searchType.toUpperCase();
  
  if (!filterOperator.optionsCopy) {
        //make a copy of options
        filterOperator.optionsCopy = new Array();
        for (i = 0; i < oSearchOperator.options.length; i++) {
            so = oSearchOperator.options[i];
            filterOperator.optionsCopy[i] = new Option(so.text, so.value, false, false);
        }
    }
    else {
        $("txtSearchValue").value = "";
        // empty out 
        oSearchOperator.options.lenght = 0;
        // restore from saved copy
        for (i = 0; i < filterOperator.optionsCopy.length; i++) {
            so = filterOperator.optionsCopy[i];
            // new Option(text,value..
            oSearchOperator.options[i] = new Option(so.text, so.value, false, false);
        }
    }
    for (i = oSearchOperator.options.length - 1; i > -1; i--) {
        opt = oSearchOperator.options[i];
        if (searchType == "DATE") {
            if (opt.value.indexOf("DATE") == -1) {
                //alert( "Type Date " + opt.value + " -- " +opt.text +  " removing..."); 
                if (oSearchOperator.options.remove)
                    oSearchOperator.options.remove(i);
                else {
                    var toRemove = oSearchOperator.options.item(i);
                    toRemove.parentNode.removeChild(toRemove);
                }
            }
        } else {
            if (opt.value.indexOf("DATE") != -1) {
                if (oSearchOperator.options.remove)
                    oSearchOperator.options.remove(i);
                else {
                    var toRemove = oSearchOperator.options.item(i);
                    toRemove.parentNode.removeChild(toRemove);
                }
            }
        }
    }

}

function setSearchValue(o) {
    var opt = o.options[o.selectedIndex];
    var oSearchValue = $("txtSearchValue");

    if (opt.value.indexOf("DATE") != -1) {
        oSearchValue.value = opt.value.substring(4);
        opt.value = "DATE";
        $("Search").click();
    }
    else
        oSearchValue.value = "";
}


function searchGo(el) {
    $('txtSearchValue').value = el.innerText;
    $('Search').click();
    return false;
}

function exportList() {
    __doPostBack('Toolbar', 'Export');
    setDefaultPostBack("Toolbar", "Search");
    window.setTimeout("hideLoadingMessage();", 1000);
    return false;
};

function showLoadingMessage() {
    $("loadingMessage").style.display = "block";
};

function hideLoadingMessage() {
    $("loadingMessage").style.display = "none";
};

function gotoPage(pageNum) {
    if (pageNum == "...") pageNum = 1;
    __doPostBack('Pager', pageNum);
    return false;
};

function beforeEditRow(e, rowObj) {
    // if we are editing in a non-popup iframe that's currenly hidden 
    // then display it first and resize above grid
    var oDisplayInIframe = $("DisplayDetailInIframe");
    if (oDisplayInIframe && oDisplayInIframe.style.display != "block") {
        oDisplayInIframe.style.display = "block";
        WC.Grid.setContainerHeight(parentGridID);
    }
    return true;
};

function editRow(e, rowObj) {

    if (!rowObj) {
        var o = (e && e.target ? e.target : event.srcElement);

        ///	var o = (e && e.target ||  event.srcElement);
        rowObj = getTr(o);

    }
    if (!rowObj.getAttribute("k")) return;

    if (beforeEditRow(e, rowObj)) {
        var params = "?Action=Edit&ID=" + rowObj.getAttribute("k") + "&GridID=" + parentGridID + "&parentURL=" + parentURL;
        showForm(childURL, params, childTarget);
    }
};

function beforeNewRow() {
    beforeEditRow();
};

function newRow() {
    beforeNewRow();
    showForm(childURL, "?Action=New&GridID=" + parentGridID + "&parentURL=" + parentURL + "&ForeignKeyName=" + foreignKeyName + "&ForeignKeyValue=" + foreignKeyValue, childTarget);
};

function copyRow(id) {
    var sID = "";
    if (id) {
        sID = "&ID=" + id;
    }
    showForm(childURL, "?Action=Copy&GridID=" + parentGridID + "&parentURL=" + parentURL + sID, childTarget);
};



var hrefToOpen = null;
var w = null;
function showForm(url, params, target) {

    if ($(target + "FormIframe")) {
        showBox(target + "FormIframe", false);
    }

    var width = 800;
     width = 980;
    
    var height = 650;
   height = 650;
    var top = (screen.height - height) / 2;
    var left = (screen.width - width) / 2;

    var features = "top={0},left={1},width={2},height={3},menu=0,status=0,location=0,resizable=1";
    features = features._format([top, left, width, height]);

    hrefToOpen = url + params;
    if (w && !w.closed) {
        w = window.open(hrefToOpen, target, features, true);
    }
    else
        w = window.open("PleaseWait.htm", target, features, true);

    if (!w.opener) w.opener = self;
    w.focus();
};


function editPrevRow(sGridID, PK, scroll) {
    var oTR = findRowByPK(sGridID, PK);
    var oRow = null;
    if (false && oTR) {
        oRow = oTR.previousSibling;
        if (oRow) WC.Grid.selectRowToggle(oRow);
    } else {
        oRow = gridScrollOneRow(-1, parentGridID);
    }

    if (oRow != null) {
        if (scroll) return oRow.getAttribute("k");
        editRow(null, oRow);
    }
    return null;
};

function editNextRow(sGridID, PK, scroll) {
    var oTR = findRowByPK(sGridID, PK);
    var oRow = null;

    if (false && oTR) {
        oRow = oTR.nextSibling;
        if (oRow) WC.Grid.selectRowToggle(oRow);
    } else {
        oRow = gridScrollOneRow(1, parentGridID);
    }
    if (oRow != null) {
        if (scroll) return oRow.getAttribute("k");
        editRow(null, oRow);
    }
    return null;
};

function findRowByPK(sGridID, sID) {
    var g = $(sGridID);
    var oTRs = g.getElementsByTagName("TR");
    for (i = 0; i < oTRs.length; i++) {
        if (oTRs[i].getAttribute("k") == sID) {
            return oTRs[i];
        }
    }
    return null;
};

function getSelectedRow(sGridID) {
    alert(WC.Grid.selectRow.divId);
    return null;
};

function gridKeyboardNavigation(event) {

    var o = (window.event ? event.srcElement : event.target);
    //alert( o.tagName );
    if ("TEXTAREA,INPUT,SELECT,BUTTON".indexOf(o.tagName) != -1)
        return true;

    var direction;

    // down arrow
    if (event.keyCode == 40)
        direction = 1;
    // up arrow
    else if (event.keyCode == 38)
        direction = -1;
    else // Enter key
        if (event.keyCode == 13)
        direction = 0;
    else
        return true;

    var g = $(WC.Grid.activeGrid);
    var t = g.getElementsByTagName("table")[0];

    var numRows = t.rows.length;
    if (numRows < 2) return true;

    var heading = t.rows[0].offsetHeight;
    var selectedRowIndex = 0;
    var newTop;

    for (var i = 0; i < numRows; i++) {
        if (t.rows[i].className.indexOf("Selected") != -1) {
            selectedRowIndex = i + direction;
            break;
        }
    }

    if (direction == 0 && selectedRowIndex > 0) {
        editRow(null, t.rows[selectedRowIndex]);
    }

    // if nothing selected then select top row
    if (selectedRowIndex == 0 && numRows > 0) {
        selectedRowIndex = 1;
        WC.Grid.selectRowToggle(t.rows[selectedRowIndex]);
    }

    if (selectedRowIndex < numRows && selectedRowIndex > 0)
        WC.Grid.selectRowToggle(t.rows[selectedRowIndex]);

    if (direction == -1 && selectedRowIndex > 0 && (g.scrollTop + heading > t.rows[selectedRowIndex].offsetTop)) {
        newTop = t.rows[selectedRowIndex].offsetTop - heading;
        g.scrollTop = newTop;
    } else
        if (direction == 1 && selectedRowIndex < numRows && ((g.offsetHeight + g.scrollTop) <= (t.rows[selectedRowIndex].offsetTop + (2 * t.rows[selectedRowIndex].offsetHeight)))) {
        newTop = t.rows[selectedRowIndex].offsetTop + (2 * t.rows[selectedRowIndex].offsetHeight) - g.offsetHeight;
        g.scrollTop = newTop;
    }

    if (event.stopPropagation) event.stopPropagation();
    if (event.preventDefault) event.preventDefault();
    event.cancelBubble = true;
    event.returnValue = false;
    return false;
};


function gridScrollOneRow(direction, sGridID) {

    var direction;

    var g = $(sGridID);
    var t = g.getElementsByTagName("table")[0];

    var numRows = t.rows.length;
    if (numRows < 2) return true;

    var heading = t.rows[0].offsetHeight;
    var selectedRowIndex = 0;
    var newTop;

    for (var i = 0; i < numRows; i++) {
        if (t.rows[i].className.indexOf("Selected") != -1) {
            selectedRowIndex = i + direction;
            break;
        }
    }

    if (direction == 0 && selectedRowIndex > 0) {
        editRow(null, t.rows[selectedRowIndex]);
    }

    // if nothing selected then select top row
    if (selectedRowIndex == 0 && numRows > 0) {
        selectedRowIndex = 1;
        WC.Grid.selectRowToggle(t.rows[selectedRowIndex]);
    }

    if (selectedRowIndex < numRows && selectedRowIndex > 0)
        WC.Grid.selectRowToggle(t.rows[selectedRowIndex]);

    if (direction == -1 && selectedRowIndex > 0 && (g.scrollTop + heading > t.rows[selectedRowIndex].offsetTop)) {
        newTop = t.rows[selectedRowIndex].offsetTop - heading;
        g.scrollTop = newTop;
    } else
        if (direction == 1 && selectedRowIndex < numRows && ((g.offsetHeight + g.scrollTop) <= (t.rows[selectedRowIndex].offsetTop + (2 * t.rows[selectedRowIndex].offsetHeight)))) {
        newTop = t.rows[selectedRowIndex].offsetTop + (2 * t.rows[selectedRowIndex].offsetHeight) - g.offsetHeight;
        g.scrollTop = newTop;
    }
    return t.rows[selectedRowIndex];
};

function mergeRow(sGridID, oSourceRow) {
    var oGrid = $(sGridID);
    var oTargetRow = findRowByPK(sGridID, oSourceRow.getAttribute("k"));
    if (oTargetRow) {
        // Edit mode just update contents
        for (i = 0; i < oTargetRow.cells.length; i++) {
            oTargetRow.cells[i].innerHTML = oSourceRow.cells[i].innerHTML;
        }
    }
    else {
        // Target row not found therefore Append a New Row and set id to primary key
        var oTBody = oGrid.getElementsByTagName("TBODY")[0];
        oTargetRow = document.createElement("TR");
        oTargetRow.setAttribute("k", oSourceRow.getAttribute("k"));
        for (i = 0; i < oSourceRow.cells.length; i++) {
            var oCell = document.createElement("TD");
            oCell.innerHTML = oSourceRow.cells[i].innerHTML;
            oTargetRow.appendChild(oCell);
        }
        oTBody.appendChild(oTargetRow);
        oGrid.scrollTop = 1000000;
        var sl = oGrid.scrollLeft;
        oGrid.scrollLeft = sl + 1;
        oGrid.scrollLeft = sl;
        var oItemsFound = $("lblItemsFound");
        if (oItemsFound) oItemsFound.innerText = (parseInt(oItemsFound.innerText) + 1).toString();
        var oPageSize = $("pageSize");
        if (oPageSize) oPageSize.innerText = (parseInt(oPageSize.innerText) + 1).toString();

        var oRecordCount = $("recordCount");
        if (oRecordCount) oRecordCount.innerText = (parseInt(oRecordCount.innerText) + 1).toString();
    }

};

function dropRow(sGridID, PK) {
    var oGrid = $(sGridID);
    var oTR = findRowByPK(sGridID, PK);
    if (oTR) {
        oTR.parentNode.removeChild(oTR);

        var oItemsFound = $("lblItemsFound");
        if (oItemsFound) oItemsFound.innerText = (parseInt(oItemsFound.innerText) - 1).toString();
        var oPageSize = $("pageSize");
        if (oPageSize) oPageSize.innerText = (parseInt(oPageSize.innerText) - 1).toString();

        var oRecordCount = $("recordCount");
        if (oRecordCount) oRecordCount.innerText = (parseInt(oRecordCount.innerText) - 1).toString();

    }
};

