
function QuickTable(id){

    this.id = id;

    this.className = '';
    this.methodName = '';
    this.serverName = '';
    this.serializedParams = '';

    this.requestUrl = '';

    /**
     *
     */
    function setServerName(name){
        this.serverName = name;
    }

    /**
     *
     */
    function setClassName(name){
        this.className = name;
    }

    /**
     *
     */
    function setSerializedParams(value){
        this.serializedParams = value;
    }

    /**
     *
     */
    function setMethodName(name){
        this.methodName = name;
    }

    /**
     *
     */
    function createRequestUrl(){
        this.requestUrl = this.serverName+"/AJAX_REQUEST?class="+this.className+"&render_table="+this.methodName;
    }

    /**
     *
     */
    function sortByColumn(column, direction){
        table_body=document.getElementById(this.id+"_body");

        $.post(this.requestUrl,{
            sort: true,
            column: column,
            direction: direction,
            params: this.serializedParams
        },
        function(data){
            $("#"+id+"_body").html(data);
        });

        //TODO
        //set active pager to 1

        //set active th id sort
        element=document.getElementById(this.id);
        thead = element.getElementsByTagName("thead");

        if(thead.length != 0){
            thead = thead[0];
        
            tcolumn = thead.getElementsByTagName('th');
            for(i=0; i < tcolumn.length; i++){
                if(tcolumn[i].id == column){
                    tcolumn[i].setAttribute('class', 'active');
                }
                else{
                    tcolumn[i].removeAttribute('class');
                }
            }
        }
    }

    /**
     * 
     */
    function setFilterTableData(){

        var list = $("#"+this.id+" .filter .columns input:checked");
        var listLenght = list.length;
        var columnList = new Array();
        var searchString = $("#"+this.id+" .filter .search_string").get(0).value;

        //ak nemam co zoradovat
        if(listLenght == 0 || searchString.length == 0){
            return;
        }

        for(i = 0; i < listLenght; i++){
            columnList [i] = list.get(i).name;
        }
    
        data = implode('&', columnList);

        $.post(this.requestUrl,{
            filter: true,
            search_string: searchString,
            columns: data
        },
        function(data){
            $("#"+id+"_body").html(data);
        });
    }

    /**
     * 
     */
    function unsetFilterTableData(){
        $("#"+this.id+" .filter .search_string").get(0).value = "";
    
        $.post(this.requestUrl,{
            filter: true,
            destroy: true
        },
        function(data){
            $("#"+id+"_body").html(data);
        });
    }

    /**
     * 
     */
    function setFormChbInputs(){
        var el = $("#"+this.id+" thead input").get(0);
   
        if(el != null){
            var chbList = $("#"+this.id+" tbody input");
            for(i = 0; i < chbList.length; i++){
                chbList.get(i).checked = el.checked;
            }
        }
    }

    ///CONSTRUCTOR
    this.setServerName = setServerName;
    this.setClassName = setClassName;
    this.setMethodName = setMethodName;
    this.setSerializedParams = setSerializedParams;
    this.sortByColumn = sortByColumn;
    this.setFilterTableData = setFilterTableData;
    this.unsetFilterTableData = unsetFilterTableData;
    this.createRequestUrl = createRequestUrl;
    this.setFormChbInputs = setFormChbInputs;

}


