﻿// jQuery iBuilder 2.0 Grid
//
// Version 1.0
//
// Created by Marcin Gielewski
//
// Usage:
// 
// History:
//
//		1.00 - Released (15.06.2010)
//
(function($) {

    $.jGrid = {

        // These properties can be read/written by accessing $.jGrid.propertyName from your scripts at any time

        ajaxUrl: '/Ajax/ControlsWrapper.aspx',        // form wrapper ajax url
        width: 400,                                   // popup window width
        height: 400,                                  // popup window hieght
        changeOff: false,                             // 
        isAllCheckedValue: true,                      //

        // Public methods

        filter: function(fid, gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, lang, cf) {
            if ($('#' + fid).val().trim() == '') return;
            $.jGrid.updateGrid(gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, $('#' + fid).val().trim(), '', lang, cf);
        },
        advancedfilter: function(title, gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf, w, h) {
            jPopup(title, $.jGrid.ajaxUrl + '?gid=' + gid + '&tid=' + tid + '&mid=' + mid + '&suid=' + suid + '&ctrl=' + ctrl + '&bctrl=' + bctrl + '&pi=' + pi + '&ps=' + ps + '&sort=' + sort + '&skey=' + skey + '&askey=' + askey + '&lang=' + lang + '&cf=' + cf,
                null,
                w != null ? w : width,
                h != null ? h : height);
        },
        details: function(title, gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf, w, h) {
            jPopup(title, $.jGrid.ajaxUrl + '?gid=' + gid + '&tid=' + tid + '&mid=' + mid + '&suid=' + suid + '&ctrl=' + ctrl + '&bctrl=' + bctrl + '&pi=' + pi + '&ps=' + ps + '&sort=' + sort + '&skey=' + skey + '&askey=' + askey + '&lang=' + lang + '&cf=' + cf,
                null,
                w != null ? w : width,
                h != null ? h : height);
        },
        addRow: function(title, gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf, w, h) {
            jPopup(title, $.jGrid.ajaxUrl + '?gid=' + gid + '&tid=' + tid + '&mid=' + mid + '&suid=' + suid + '&ctrl=' + ctrl + '&bctrl=' + bctrl + '&pi=' + pi + '&ps=' + ps + '&sort=' + sort + '&skey=' + skey + '&askey=' + askey + '&lang=' + lang + '&cf=' + cf,
                null,
                w != null ? w : width,
                h != null ? h : height);
        },
        editRow: function(title, gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf, id, w, h) {
            jPopup(title, $.jGrid.ajaxUrl + '?gid=' + gid + '&tid=' + tid + '&mid=' + mid + '&suid=' + suid + '&ctrl=' + ctrl + '&bctrl=' + bctrl + '&pi=' + pi + '&ps=' + ps + '&sort=' + sort + '&skey=' + skey + '&askey=' + askey + '&id=' + id + '&lang=' + lang + '&cf=' + cf,
                null,
                w != null ? w : width,
                h != null ? h : height);
        },
        deleteRows: function(title, message, data) {
            return jConfirm(message, title, function(condition) {
                if (condition) {
                    var ids = '';
                    $.each($('.checkboxCell', $('#' + data.gid + ' table')), function(index, value) {
                        if ($($('input[type=checkbox]', $(value))[0]).attr('checked') == true)
                            ids += $($('input[type=checkbox]', $(value))[0]).attr("alt") + ';';
                    });
                    if (ids.length > 0)
                        ids = ids.substring(0, ids.lastIndexOf(';'));
                    if (ids.length == 0) return;
                    $.jGrid.updateGrid(data.gid, data.tid, data.mid, data.suid, data.ctrl, data.bctrl, data.pi, data.ps, data.sort, data.skey, data.askey, data.lang, data.cf, 'del', ids);
                }
            });
        },
        publishRows: function(title, message, data) {
            return jConfirm(message, title, function(condition) {
                if (condition) {
                    var ids = '';
                    $.each($('.checkboxCell', $('#' + data.gid + ' table')), function(index, value) {
                        if ($($('input[type=checkbox]', $(value))[0]).attr('checked') == true)
                            ids += $($('input[type=checkbox]', $(value))[0]).attr("alt") + ';';
                    });
                    if (ids.length > 0)
                        ids = ids.substring(0, ids.lastIndexOf(';'));
                    if (ids.length == 0) return;
                    $.jGrid.updateGrid(data.gid, data.tid, data.mid, data.suid, data.ctrl, data.bctrl, data.pi, data.ps, data.sort, data.skey, data.askey, data.lang, data.cf, 'pub', ids);
                }
            });
        },
        publishIconClick: function(img) {
            $('input', $('td:first-child', $(img).parent().parent())).attr('checked', true);
        },
        exportRows: function() {
            jAlert('Not implemented yet.');
        },
        change: function(checkbox, tableID) {
            if ($.jGrid.changeOff) return;
            $.jGrid.changeOff = true;
            if ($(checkbox).parent()[0].nodeName == 'TH') {
                $.each($('.checkboxCell', $('#' + tableID)), function(index, value) {
                    if ($($('th input[type=checkbox]', $('#' + tableID))[0]).attr('checked') == true && !$(value).parent().hasClass('displayfilternone'))
                        $($('input[type=checkbox]', $(value))[0]).check();
                    else
                        $($('input[type=checkbox]', $(value))[0]).uncheck();
                });
            }
            else {
                $.jGrid.isAllChecked('#' + tableID);
                if ($(checkbox).attr('checked') == true && $.jGrid.isAllCheckedValue == true)
                    $($('th input[type=checkbox]', $('#' + tableID))[0]).check();
                else
                    $($('th input[type=checkbox]', $('#' + tableID))[0]).uncheck();
            }
            $.jGrid.changeOff = false;
        },
        exportToCSV: function(gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf) {
            location.href = $.jGrid.ajaxUrl + '?gid=' + gid + '&tid=' + tid + '&mid=' + mid + '&suid=' + suid + '&ctrl=' + ctrl + '&bctrl=' + bctrl + '&pi=' + pi + '&ps=' + ps + '&sort=' + sort + '&skey=' + skey + '&askey=' + askey + '&lang=' + lang + '&cf=' + cf + '&meth=exp';
        },
        exportToXSLX: function(gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf) {
            location.href = $.jGrid.ajaxUrl + '?gid=' + gid + '&tid=' + tid + '&mid=' + mid + '&suid=' + suid + '&ctrl=' + ctrl + '&bctrl=' + bctrl + '&pi=' + pi + '&ps=' + ps + '&sort=' + sort + '&skey=' + skey + '&askey=' + askey + '&lang=' + lang + '&cf=' + cf + '&meth=xslx';
        },
        customAction: function(gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf, action) {
            var ids = '';
            $.each($('.checkboxCell', $('#' + gid + ' table')), function(index, value) {
                if ($($('input[type=checkbox]', $(value))[0]).attr('checked') == true)
                    ids += $($('input[type=checkbox]', $(value))[0]).attr("alt") + ';';
            });
            if (ids.length > 0)
                ids = ids.substring(0, ids.lastIndexOf(';'));
            //if (ids.length == 0) return;            
            $.jGrid.updateGrid(gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf, action, ids);
        },
        customActionOpenWindow: function(title, gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf, w, h) {
            var ids = '';
            $.each($('.checkboxCell', $('#' + gid + ' table')), function(index, value) {
                if ($($('input[type=checkbox]', $(value))[0]).attr('checked') == true)
                    ids += $($('input[type=checkbox]', $(value))[0]).attr("alt") + ';';
            });
            if (ids.length > 0)
                ids = ids.substring(0, ids.lastIndexOf(';'));
            //if (ids.length == 0) return;
            jPopup(title, $.jGrid.ajaxUrl + '?gid=' + gid + '&tid=' + tid + '&mid=' + mid + '&suid=' + suid + '&ctrl=' + ctrl + '&bctrl=' + bctrl + '&pi=' + pi + '&ps=' + ps + '&sort=' + sort + '&skey=' + skey + '&askey=' + askey + '&lang=' + lang + '&cf=' + cf + '&ids=' + ids,
                null,
                w != null ? w : width,
                h != null ? h : height);
        },
        //        exportToPRINT: function(gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf) {
        //            location.href = $.jGrid.ajaxUrl + '?gid=' + gid + '&tid=' + tid + '&mid=' + mid + '&suid=' + suid + '&ctrl=' + ctrl + '&bctrl=' + bctrl + '&pi=' + pi + '&ps=' + ps + '&sort=' + sort + '&skey=' + skey + '&askey=' + askey + '&lang=' + lang + '&cf=' + cf + '&meth=print';
        //        },

        // Private methods

        updateGrid: function(gid, tid, mid, suid, ctrl, bctrl, pi, ps, sort, skey, askey, lang, cf, meth, ids) {
            $.alerts._hide();

            var over = $('<div>');
            over.addClass('clip');
            over.css({ width: $('#' + gid).outerWidth() + 'px', height: $('#' + gid).outerHeight() + 'px' });
            over.css($('#' + gid).offset());
            over.html('&nbsp;');
            $('#' + gid).after(over);

            $('#' + gid).load($.jGrid.ajaxUrl + ' #formWrapperContent', { gid: gid, tid: tid, mid: mid, suid: suid, ctrl: ctrl, bctrl: bctrl, pi: pi, ps: ps, sort: sort, skey: skey, askey: askey, lang: lang, cf: cf, meth: meth, ids: ids }, function(response, status, xhr) {
                if (status == "error") {
                    var msg = "Sorry but there was an error: ";
                    $('#' + gid).html(msg + xhr.status + " " + xhr.statusText);
                }
                over.remove();

                $("tr", $('#' + gid)).hover(
                function() {
                    if (!$(this).hasClass('header')) $('td', $(this)).addClass("highlight");
                },
                function() {
                    if (!$(this).hasClass('header')) $('td', $(this)).removeClass("highlight");
                });
                $('#' + gid + ' .filterInput').keypress(function(e) {
                    if (e.keyCode == 13) {
                        eval($("a:first", $('#' + gid + ' .filterInput').parent()).attr("href"))
                        return false;
                    }
                });
            });
        },
        isAllChecked: function(tableID) {
            $.jGrid.isAllCheckedValue = true;
            $.each($('.checkboxCell', $(tableID)), function(index, value) {
                if ($($('input[type=checkbox]', $(value))[0]).attr('checked') != true)
                    $.jGrid.isAllCheckedValue = false;
            });
        }
    }

    // Shortuct functions

    jGridUpdate = function(args) {
        $.jGrid.updateGrid(args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.skey, args.askey, args.lang, args.cf);
    };
    jGridDetails = function(title, args, w, h) {
        $.jGrid.details(title, args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.skey, args.askey, args.lang, args.cf, w, h);
    };
    jGridAdd = function(title, args, w, h) {
        $.jGrid.addRow(title, args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.skey, args.askey, args.lang, args.cf, w, h);
    };
    jGridEdit = function(title, args, id, w, h) {
        $.jGrid.editRow(title, args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.skey, args.askey, args.lang, args.cf, id, w, h);
    };
    jGridTranslate = function(title, args, id, w, h) {
        $.jGrid.editRow(title, args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.skey, args.askey, args.lang, args.cf, id, w, h);
    };
    jGridDelete = function(title, message, args) {
        $.jGrid.deleteRows(title, message, args);
    };
    jGridPublish = function(title, message, args) {
        $.jGrid.publishRows(title, message, args);
    };
    jGridPublishIconClick = function(img) {
        $.jGrid.publishIconClick(img);
    };
    jGridSearch = function(fid, args) {
        $.jGrid.filter(fid, args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.lang, args.cf);
    };
    jGridAdvancedSearch = function(title, args, w, h) {
        $.jGrid.advancedfilter(title, args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.skey, args.askey, args.lang, args.cf, w, h);
    };
    jGridCustomActionScript = function(args) {
        $.jGrid.customAction(args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.skey, args.askey, args.lang, args.cf, args.action);
    };
    jGridCustomActionOpenWindowScript = function(title, args, w, h) {
        $.jGrid.customActionOpenWindow(title, args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.skey, args.askey, args.lang, args.cf, w, h);
    };
    jGridChange = function(checkbox, tableID) {
        $.jGrid.change(checkbox, tableID);
    };
    jGridExportCsv = function(args) {
        $.jGrid.exportToCSV(args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.skey, args.askey, args.lang, args.cf);
    };
    jGridExportXslx = function(args) {
        $.jGrid.exportToXSLX(args.gid, args.tid, args.mid, args.suid, args.ctrl, args.bctrl, args.pi, args.ps, args.sort, args.skey, args.askey, args.lang, args.cf);
    };
    jGridPrint = function(args) {
        //        $('.ex_grid', $('#' + args.gid)).printElement({ printMode: 'popup', leaveOpen: true, printBodyOptions:
        //            {
        //                styleToAdd: args.styleToAdd,
        //                classNameToAdd: args.classNameToAdd
        //            },
        //            pageTitle: args.title
        //        });        
        Print($('.ex_grid', $('#' + args.gid)), args.title, args.styleToAdd, args.classNameToAdd);
    };
    jGridSuccessNotify = function(title, message, duration, stay) {
        $.noticeAdd({
            text: message,
            title: title,
            duration: duration,
            stay: stay,
            type: 'success',
            position: 'center'
        });
    };
})(jQuery);


// jQuery iBuilder 2.0 MultiSelect
//
// Version 1.0
//
// Created by Marcin Gielewski
//
// Usage:
// 
// History:
//
//		1.00 - Released (15.06.2010)
//
(function($) {

    $.jMultiSelect = {

        // These properties can be read/written by accessing $.jGrid.propertyName from your scripts at any time

        currentView: 'all',        // view types: all, sel, uns

        // Public methods

        search: function(id) {
            var s = $.trim($('#' + id + ' input[type=text]').val().toLowerCase());
            $.each($('tr', $('#' + id + ' table.ex_grid')), function(index, value) {
                if (index != 0) {
                    if ($.trim($(value).text().toLowerCase()).indexOf(s) >= 0)
                        $(value).removeClass('displayfilternone');
                    else
                        $(value).addClass('displayfilternone');
                }
            });
            $.jMultiSelect.refresh(id);
            $('#' + id + ' a.searchback').css('display', s == '' ? 'none' : 'inline');
        },
        clear: function(id) {
            $('#' + id + ' input[type=text]').val('');
            $.jMultiSelect.search(id);
        },
        all: function(id) {
            $.jMultiSelect.currentView = 'all';
            $.each($('.checkboxCell', $('#' + id + ' table.ex_grid')), function(index, value) {
                $(value).parent().removeClass('displaynone');
            });
            $.jMultiSelect.select(id, 1);
        },
        selected: function(id) {
            $.jMultiSelect.currentView = 'sel';
            $.each($('.checkboxCell', $('#' + id + ' table.ex_grid')), function(index, value) {
                if ($($('input[type=checkbox]', $(value))[0]).attr('checked') == true)
                    $(value).parent().removeClass('displaynone');
                else
                    $(value).parent().addClass('displaynone');
            });
            $.jMultiSelect.select(id, 2);
        },
        unselected: function(id) {
            $.jMultiSelect.currentView = 'uns';
            $.each($('.checkboxCell', $('#' + id + ' table.ex_grid')), function(index, value) {
                if ($($('input[type=checkbox]', $(value))[0]).attr('checked') == true)
                    $(value).parent().addClass('displaynone');
                else
                    $(value).parent().removeClass('displaynone');
            });
            $.jMultiSelect.select(id, 3);
        },
        createSearchData: function(tid) {
            var searchdata = new Array();

            $.each($('td', $('#' + tid)), function(index, value) {
                if (searchdata.toString().indexOf(',' + $.trim($(value).text())) == -1) {
                    searchdata.push($.trim($(value).text()));
                }
            });
            searchdata.sort();

            return searchdata;
        },
        getSelected: function(id) {
            var list = '';
            $.each($('.checkboxCell', $('#' + id + ' table.ex_grid')), function(index, value) {
                if ($($('input[type=checkbox]', $(value))[0]).attr('checked') == true)
                    list += $($('input[type=checkbox]', $(value))[0]).attr('alt') + ';';
            });
            if (list.length > 0)
                list = list.substring(0, list.length - 1);
            return list;
        },

        // Private methods

        refresh: function(id) {
            switch ($.jMultiSelect.currentView) {
                default:
                case 'all':
                    $.jMultiSelect.all(id);
                    break;
                case 'sel':
                    $.jMultiSelect.selected(id);
                    break;
                case 'uns':
                    $.jMultiSelect.unselected(id);
                    break;
            }
        },
        select: function(id, index) {
            $('#' + id + ' a.all').removeClass('current');
            $('#' + id + ' a.selected').removeClass('current');
            $('#' + id + ' a.unselected').removeClass('current');

            if (index == 1)
                $('#' + id + ' a.all').addClass('current');
            else if (index == 2)
                $('#' + id + ' a.selected').addClass('current');
            else if (index == 3)
                $('#' + id + ' a.unselected').addClass('current');

            $.jMultiSelect.refreshClass(id)
        },
        refreshClass: function(id) {
            var isAlternate = false;
            $.each($('tr', $('#' + id + ' table.ex_grid')), function(index, value) {
                if (index != 0) {
                    if (!$(value).hasClass('displayfilternone') && !$(value).hasClass('displaynone')) {
                        $(value).removeClass('row');
                        $(value).removeClass('alternaterow');
                        $(value).addClass(isAlternate ? 'row' : 'alternaterow');
                        isAlternate = !isAlternate;
                    }
                }
            });
        }
    }
    jMultiSelectSearch = function(id) {
        $.jMultiSelect.search(id);
        return false;
    };
    jMultiSelectClear = function(id) {
        $.jMultiSelect.clear(id);
    };
    jMultiSelectAll = function(id) {
        $.jMultiSelect.all(id);
    };
    jMultiSelectSelected = function(id) {
        $.jMultiSelect.selected(id);
    };
    jMultiSelectUnselected = function(id) {
        $.jMultiSelect.unselected(id);
    };
    jMultiSelectGetSearchData = function(tid) {
        return $.jMultiSelect.createSearchData(tid);
    };
    jMultiSelectGetSelected = function(id) {
        return $.jMultiSelect.getSelected(id);        
    };
})(jQuery);

$(function() {
    try {
        $.each($('div.multiselect_grid'), function(index, value) {
            $(value).css('width', (parseInt($('table.ex_grid', $(value)).css('width').replace('px', '')) + 17) + 'px');
        });        
        $('div.multiselect_filter input[type=text]').keypress(function(e) {
            if (e.keyCode == 13) {
                $('div.multiselect_filter input[type=button]').click();
                return false;
            }
        });
    } catch (err) { }
});

/**************************/

function icp_change(panelID, stateID, ciID, eiID) {
    var state = $(stateID).val();
    var c = $(ciID).val();
    var e = $(eiID).val();
    if (state == 'False') {
        $('.icp_inner', $(panelID)).show();
        $('.icp_title img', $(panelID)).attr('src', e)
        $(stateID).val('True');
        $.cookie(panelID, 'True');
    }
    else {
        $('.icp_inner', $(panelID)).hide();
        $('.icp_title img', $(panelID)).attr('src', c)
        $(stateID).val('False');
        $.cookie(panelID, 'False');
    }
}

function icp_popup(panelID, width) {
    showOverlay(false);

    $('body').append('<div id="icp_popup" style="width:' + width + 'px;"></div>');
    $('#icp_popup').css('background-color', 'white');
    $('#icp_popup').append('<div align="right"><img src="/images/close.gif" onclick="javascript:icp_hidepopup();" class="pointer" /></div>')
    $('#icp_popup').append('<div id="icp_popup_overflow" style="max-height:400px; overflow:auto;"></div>');
    $('#icp_popup_overflow').append($('.icp_inner', $(panelID)).html());
    $('#icp_popup').fixedBox();
}
function icp_hidepopup() {
    $('#icp_popup').remove();
    hideOverlay();
}

// jQuery Ibuilder Query Filters Generator
//
// Version 1.0
//
// Created by Marcin Gielewski
//
// Usage:
// 
// History:
//
//		1.00 - Released (26.11.2010)
//
function addFilter(q, c, o, v, h) {
    var query = $('#' + q);

    var column = $('#' + c).val();
    var operation = $('#' + o).val();
    var value = $('#' + v).val();

    if (value == '') {
        alert(resorce_iqfgv);
        return;
    }

    var sql = '<span><span onclick="javascript:swichToEdit(this, \'' + q + '\', \'' + h + '\');">' + column + '</span><select style="display:none;" onchange="javascript:swichToView(this, \'' + q + '\', \'' + h + '\');" onkeydown="javascript:escapeKey(this, event, \'' + q + '\', \'' + h + '\');">' + resorce_iqfgi + '</select></span>'
		+ ' <span><span class="operation" onclick="javascript:swichToEdit(this, \'' + q + '\', \'' + h + '\');">' + operation + '</span>'
		+ '<select style="display:none;" onchange="javascript:swichToView(this, \'' + q + '\', \'' + h + '\');" onkeydown="javascript:escapeKey(this, event, \'' + q + '\', \'' + h + '\');">'
		+ '<option value="String Equals">String Equals</option>'
		+ '<option value="String Not Equals">String Not Equals</option>'
		+ '<option value="String Begin">String Begin</option>'
		+ '<option value="String End">String End</option>'
		+ '<option value="String Contains">String Contains</option>'

		+ '<option value="Decimal Equals">Decimal Equals</option>'
		+ '<option value="Decimal Not Equals">Decimal Not Equals</option>'
		+ '<option value="Decimal Greater">Decimal Greater</option>'
		+ '<option value="Decimal Greater Or Equal">Decimal Greater Or Equal</option>'
		+ '<option value="Decimal Less">Decimal Less</option>'
		+ '<option value="Decimal Less Or Equal">Decimal Less Or Equal</option>'

		+ '<option value="Date Greater">Date Greater</option>'
		+ '<option value="Date Less">Date Less</option>'
		+ '</select>'
		+ ' <span class="value" onclick="javascript:swichToEditValue(this);">' + value + '</span><input style="display:none;" type="text" value="' + value + '" onkeydown="javascript:enterKey(this, event);" onkeypress="removeIllegalChars(this, event, \'' + q + '\', \'' + h + '\')" /><a class="pointer" style="display:none;" onclick="javascript:swichToViewValue(this, \'' + q + '\', \'' + h + '\');">OK</a></span>';

    var item = $('<li class="filterItem">');
    var span = $('<span>');
    span.html(sql);

    // add edit button
    item.append(span);
    // add drag button
    item.append($('<img src="/images/drag.jpg" class="pointer">'));
    // add delete button
    item.append($('<img src="/images/delete.gif" onclick="javascript:deleteFilter(this, \'' + q + '\', \'' + h + '\');" class="pointer" >'));

    query.append(item);

    getSQL(q, h)
}
function addGroup(q, h) {
    var query = $('#' + q);
    var classID = Math.round(Math.random() * 10000);
    query.prepend($('<li><span> ( </span><img src="/images/drag.jpg" class="pointer"/><img class="g' + classID + '" src="/images/delete.gif" onclick="javascript:deleteGroup(this, \'' + q + '\', \'' + h + '\');" class="pointer"/></li>'));
    query.append($('<li><span> ) </span><img src="/images/drag.jpg" class="pointer"/><img class="g' + classID + '"src="/images/delete.gif" onclick="javascript:deleteGroup(this, \'' + q + '\', \'' + h + '\');" class="pointer"/></li>'));

    getSQL(q, h)
}
function deleteGroup(ctrl, q, h) {
    $('.' + $(ctrl).attr('class')).parent().remove();

    getSQL(q, h)
}
function addLogic(q, l, h) {
    var query = $('#' + q);
    var logic = $('#' + l).val();

    query.append($('<li class="logicFilter"> <span onclick="javascript:swichToEdit(this, \'' + q + '\', \'' + h + '\');">' + logic + '</span> <select style="display:none;" onchange="javascript:swichToView(this, \'' + q + '\', \'' + h + '\');"><option value="AND">AND</option><option value="OR">OR</option></select><img src="/images/drag.jpg" class="pointer"/><img src="/images/delete.gif" onclick="javascript:deleteFilter(this, \'' + q + '\', \'' + h + '\');" class="pointer"/></li>'));

    getSQL(q, h)
}
function deleteFilter(ctrl, q, h) {
    $(ctrl).parent().remove();

    $('#' + q + ' li.logicFilter').each(function(i) {
        if ($(this).prev().length == 0 || $(this).next().length == 0 || $(this).next().hasClass('logicFilter')) {
            $(this).remove();
        }
    });

    getSQL(q, h)
}
function swichToEdit(ctrl, q, h) {
    $('#' + q + ' select:visible').each(function(i) {
        swichToView(this, q, h);
    });

    $(ctrl).hide();
    var ctrl2 = $('select', $(ctrl).parent())

    ctrl2.show();
    ctrl2.val($(ctrl).text());
    ctrl2.focus();
    ctrl2.select();
}
function swichToEditValue(ctrl) {
    $(ctrl).hide();
    var ctrl2 = $('input', $(ctrl).parent())

    ctrl2.show();
    $('a', ctrl2.parent()).show();
    ctrl2.val($(ctrl).text());
    ctrl2.focus();
    ctrl2.select();
}
function swichToView(ctrl, q, h) {
    $(ctrl).hide();
    var ctrl2 = $('span:not(.value)', $(ctrl).parent())

    ctrl2.show();
    ctrl2.text($(ctrl).val());

    getSQL(q, h)
}
function swichToViewValue(ctrl, q, h) {
    $(ctrl).hide();
    $(ctrl).prev().hide();
    var ctrl2 = $('span.value', $(ctrl).parent())

    ctrl2.show();
    ctrl2.text($(ctrl).prev().val());

    getSQL(q, h)
}
function enterKey(ctrl, e, q, h) {
    if (e.keyCode == 13) { // enter
        $(ctrl).hide();
        $(ctrl).next().hide();
        var ctrl2 = $('span.value', $(ctrl).parent())

        ctrl2.show();
        ctrl2.text($(ctrl).val());

        getSQL(q, h)
    }    
}
function removeIllegalChars(ctrl, e) {
    if ((e.charCode == 39 && !e.shiftKey) // ;
     || (e.charCode == 59 && !e.shiftKey) // '
     || (e.charCode == 61 && !e.shiftKey) // =
     || (e.charCode == 62 && e.shiftKey) // <
     || (e.charCode == 60 && e.shiftKey)) { // >        
        e.preventDefault();
    }    
}
function escapeKey(ctrl, e, q, h) {
    if (e.keyCode == 27 || e.keyCode == 13) { // escape or enter
        swichToView(ctrl, q, h)
    }
}
function getSQL(q, h) {
    var sqlCtrl = $($('#' + q).html());
    $(':not(span)', $(sqlCtrl)).remove();

    $(sqlCtrl).each(function(i) {
        if (!$(this).hasClass('filterItem')) return;

        var operation = $('span.operation', $(this))
        var value = $('span.value', $(this))

        switch (operation.text()) {
            case "String Equals":
                operation.text(' = ');
                value.text("'" + value.text() + "'");
                break;
            case "String Not Equals":
                operation.text(' <> ');
                value.text("'" + value.text() + "'");
                break;
            case "String Begin":
                operation.text(' LIKE ');
                value.text("'" + value.text() + "%'");
                break;
            case "String End":
                operation.text(' LIKE ');
                value.text("'%" + value.text() + "'");
                break;
            case "String Contains":
                operation.text(' LIKE ');
                value.text("'%" + value.text() + "%'");
                break;
            case "Decimal Equals":
                operation.text(' = ');
                break;
            case "Decimal Not Equals":
                operation.text(' <> ');
                break;
            case "Decimal Greater":
                operation.text(' > ');
                break;
            case "Decimal Greater Or Equal":
                operation.text(' >= ');
                break;
            case "Decimal Less":
                operation.text(' < ');
                break;
            case "Decimal Less Or Equal":
                operation.text(' <= ');
                break;
            case "Date Greater":
                operation.text(' > ');
                value.text("'" + value.text() + "'");
                break;
            case "Date Less":
                operation.text(' < ');
                value.text("'" + value.text() + "'");
                break;
        }
    });    
    if(!isSetSql)
        $('#' + h).val(sqlCtrl.text());
}
var groupClasses = new Array();
var isSetSql = false;
function setSQL(h, q, l, c, o, v) {
    //var sql = "Age = 1 AND ( Age <> 2 OR ( Age < 3 ) AND Age > 4 ) OR Age <= 5 AND Age >= 6";
    var sql = $('#' + h).val();
    var items = sql.replace(/ {2,}/g, ' ').split(' ');
    isSetSql = true;
    $(items).each(function(i) {
        var query = $('#' + q);

        if (items[i] == 'AND' || items[i] == 'OR') {
            $('#' + l).val(items[i]);
            addLogic(q, l, h);
        }
        else if (items[i] == '(') {
            var classID = Math.round(Math.random() * 10000);
            groupClasses.push(classID);
            query.append($('<li><span> ( </span><img src="/images/drag.jpg" class="pointer"/><img class="g' + classID + '" src="/images/delete.gif" onclick="javascript:deleteGroup(this, \'' + q + '\', \'' + h + '\');" class="pointer"/></li>'));
        }
        else if (items[i] == ')') {
            var classID = groupClasses.pop();
            query.append($('<li><span> ) </span><img src="/images/drag.jpg" class="pointer"/><img class="g' + classID + '"src="/images/delete.gif" onclick="javascript:deleteGroup(this, \'' + q + '\', \'' + h + '\');" class="pointer"/></li>'));
        }
        else if (items[i] == 'LIKE') { // string
            var str = items[i + 1].substring(items[i + 1].indexOf("'") + 1);
            var begin = false;
            var end = false;
            var counter = 1;
            if (str.indexOf("%") == 0) {
                begin = true;
                str = str.substring(1); // remove first %
            }
            for (; ; ) {
                if (str.indexOf("'") == -1) {
                    counter++;
                    str += ' ' + items[i + counter];
                }
                else {
                    str = str.substring(0, str.length - 1);
                    break;
                }
            }
            if (str.indexOf("%") == str.length - 1) {
                end = true;
                str = str.substring(0, str.length - 1); // remove last %
            }

            $('#' + c).val(items[i - 1]);
            if (begin && end)
                $('#' + o).val("String Contains");
            else if (end)
                $('#' + o).val("String Begin");
            else if (begin)
                $('#' + o).val("String End");
            $('#' + v).val(str);
            addFilter(q, c, o, v, h);
        }
        else if (items[i] == '=' && items[i + 1].indexOf("'") != -1) { // stirng
            var str = items[i + 1].substring(items[i + 1].indexOf("'") + 1);
            var counter = 1;
            for (; ; ) {
                if (str.indexOf("'") == -1) {
                    counter++;
                    str += ' ' + items[i + counter];
                }
                else {
                    str = str.substring(0, str.length - 1);
                    break;
                }
            }

            $('#' + c).val(items[i - 1]);
            $('#' + o).val("String Equals");
            $('#' + v).val(str);
            addFilter(q, c, o, v, h);
        }
        else if (items[i] == '=') { // decimal				
            $('#' + c).val(items[i - 1]);
            $('#' + o).val("Decimal Equals");
            $('#' + v).val(items[i + 1]);
            addFilter(q, c, o, v, h);
        }
        else if (items[i] == '<>' && items[i + 1].indexOf("'") != -1) { // string
            var str = items[i + 1].substring(items[i + 1].indexOf("'") + 1);
            var counter = 1;
            for (; ; ) {
                if (str.indexOf("'") == -1) {
                    counter++;
                    str += ' ' + items[i + counter];
                }
                else {
                    str = str.substring(0, str.length - 1);
                    break;
                }
            }

            $('#' + c).val(items[i - 1]);
            $('#' + o).val("String Not Equals");
            $('#' + v).val(str);
            addFilter(q, c, o, v, h);
        }
        else if (items[i] == '<>') { // decimal
            $('#' + c).val(items[i - 1]);
            $('#' + o).val("Decimal Not Equals");
            $('#' + v).val(items[i + 1]);
            addFilter(q, c, o, v, h);
        }
        else if (items[i] == '<' && items[i + 1].indexOf("'") != -1) { // date
            var str = items[i + 1].substring(items[i + 1].indexOf("'") + 1);
            var counter = 1;
            for (; ; ) {
                if (str.indexOf("'") == -1) {
                    counter++;
                    str += ' ' + items[i + counter];
                }
                else {
                    str = str.substring(0, str.length - 1);
                    break;
                }
            }

            $('#' + c).val(items[i - 1]);
            $('#' + o).val("Date Less");
            $('#' + v).val(str);
            addFilter(q, c, o, v, h);
        }
        else if (items[i] == '<') { // decimal
            $('#' + c).val(items[i - 1]);
            $('#' + o).val("Decimal Less");
            $('#' + v).val(items[i + 1]);
            addFilter(q, c, o, v, h);
        }
        else if (items[i] == '>' && items[i + 1].indexOf("'") != -1) { // date
            var str = items[i + 1].substring(items[i + 1].indexOf("'") + 1);
            var counter = 1;
            for (; ; ) {
                if (str.indexOf("'") == -1) {
                    counter++;
                    str += ' ' + items[i + counter];
                }
                else {
                    str = str.substring(0, str.length - 1);
                    break;
                }
            }

            $('#' + c).val(items[i - 1]);
            $('#' + o).val("Date Greater");
            $('#' + v).val(str);
            addFilter(q, c, o, v, h);
        }
        else if (items[i] == '>') { // decimal
            $('#' + c).val(items[i - 1]);
            $('#' + o).val("Decimal Greater");
            $('#' + v).val(items[i + 1]);
            addFilter(q, c, o, v, h);
        }
        else if (items[i] == '<=') { // decimal
            $('#' + c).val(items[i - 1]);
            $('#' + o).val("Decimal Less Or Equal");
            $('#' + v).val(items[i + 1]);
            addFilter(q, c, o, v, h);
        }
        else if (items[i] == '>=') { // decimal
            $('#' + c).val(items[i - 1]);
            $('#' + o).val("Decimal Greater Or Equal");
            $('#' + v).val(items[i + 1]);
            addFilter(q, c, o, v, h);
        }
    });

    $('#' + c).val('');
    $('#' + o).val('');
    $('#' + v).val('');
    isSetSql = false;
}
function clearSQL(q) {
    $('#' + q).html('');
}
