function SQL( RPC, Host, User, Password, DB, dbType ) {
    this.RPC    = RPC;
    this.Host   = Host;
    this.User   = User;
    this.Password = Password;
    this.DB     = DB;
    this.Type   = dbType;

    return this;
}




SQL.prototype = {
    GetDBList : function( pushTo, pushAs ) {
        this.RPC.pushTo = pushTo;
        this.RPC.pushAs = pushAs;

        this.RPC.DataArrival = function(a, b){
            var pushTo  = document.getElementById( this.pushTo );
            try{
                var XML     = b.getElementsByTagName("databases")[0].getElementsByTagName("name");
            }catch (e){
                return;
            }

            pushTo.length = 0;
            var newNode = document.createElement( this.pushAs );
                newNode.innerHTML = '-';
                pushTo.appendChild( newNode );

            for(var i=0; i< XML.length; i++) {
                var dbName = b.getElementsByTagName("databases")[0].getElementsByTagName("name")[i].childNodes[0].nodeValue;
                var newNode = document.createElement( this.pushAs );

                newNode.id           = 'DB_' +dbName;
                newNode.value        = dbName;
                newNode.innerHTML    = dbName;

                pushTo.appendChild( newNode );
            }
        }

        this.RPC.Open( "BackEnd/?action=getdatabases&host=" +this.Host +"&user=" +this.User +"&password=" +this.Password +'&type=' +this.Type );
    },


	GetTableList : function( pushTo, pushAs ) {
        this.RPC.pushTo = pushTo;
        this.RPC.pushAs = pushAs;

        this.RPC.DataArrival = function(a, b){
            var pushTo  = document.getElementById( this.pushTo );
            try{
                var XML     = b.getElementsByTagName("tables")[0].getElementsByTagName("name");
            }catch (e){
                return;
            }

            for(var i=0; i< XML.length; i++) {
                var tableName = b.getElementsByTagName("tables")[0].getElementsByTagName("name")[i].childNodes[0].nodeValue;
                var newNode = document.createElement( this.pushAs );

                newNode.id           = 'TableInDb_' +tableName;
                newNode.innerHTML    = tableName;
                newNode.onmousedown  = dragStart; 

                pushTo.appendChild( newNode );
            }
        }

        this.RPC.Open( "BackEnd/?action=gettables&host=" +this.Host +"&user=" +this.User +"&password=" +this.Password +"&db=" +this.DB +'&type=' +this.Type );
    },


	AddTable : function( tableName, pushTo, x, y ) {
        this.RPC.pushTo     = pushTo;
        this.RPC.tableName  = tableName;
        this.RPC.tableX     = x;
        this.RPC.tableY     = y;
        this.RPC.DB         = this.DB;

        Tables[this.DB +'.' +tableName] = 1;

        this.RPC.DataArrival = function(a, b){
            var pushTo  = document.getElementById( this.pushTo );
            try{
                var XML     = b.getElementsByTagName("table")[0].getElementsByTagName("name");
            }catch (e){
                return;
            }

            var Table       = document.createElement('table');
            var body        = document.createElement('tbody');
                Table.style.position    = 'absolute';
                Table.style.left        = this.tableX +'px';
                Table.style.top         = this.tableY +'px';
                Table.id                = this.DB+'.' +this.tableName
                Table.className         = 'Table';

                var tr      = document.createElement('tr');
                
                var th      = document.createElement('th');
                    th.id               = this.tableName +'.*';
                    th.colSpan          = 2;
                    th.onmousedown      = function( e ){ dragStart( e, Table.id ); };
                    th.innerHTML        = '<input type="checkbox">' +this.tableName;
                tr.appendChild(th);
                body.appendChild(tr);


                for(var i=0; i< XML.length; i++) {
                    var cellName    = b.getElementsByTagName("table")[0].getElementsByTagName("name")[i].childNodes[0].nodeValue;
                    var cellType    = b.getElementsByTagName("table")[0].getElementsByTagName("type")[i].childNodes[0].nodeValue;
                    var cellLen     = b.getElementsByTagName("table")[0].getElementsByTagName("len")[i].childNodes[0].nodeValue;
                    var cellFlags   = ( (b.getElementsByTagName("table")[0].getElementsByTagName("flags")[i]) ? b.getElementsByTagName("table")[0].getElementsByTagName("flags")[i].getElementsByTagName("flag") : null );

                    var tr = document.createElement('tr');
                    var td = document.createElement('td');
                        td.id = this.DB +'.' +this.tableName +'.' +cellName;
                        td.onmousedown      = function( e ){ dragStart( e, 'DragableItem' ); };
                        td.setAttribute('cellType', cellType);
                        td.width            = '100%';
                        td.innerHTML        = '<input type="checkbox">'+cellName;
                        tr.appendChild(td);
                        
                    var td = document.createElement('td');
                        td.id = this.DB +'.' +this.tableName +'.' +cellName +'_Type';
                        td.setAttribute('cellType', cellType);
                        td.className        = 'Type';

                        if (cellFlags) {
                            for(var k=0; k < cellFlags.length; k++) {
                                td.innerHTML += '<img src="./img/' +cellFlags[k].childNodes[0].nodeValue +'.png" alt="' +cellFlags[k].childNodes[0].nodeValue +'" title="' +cellFlags[k].childNodes[0].nodeValue +'">';
                            }
                        }
                        td.innerHTML        += '[' +cellType +(( parseInt(cellLen) > 0)?'('+ cellLen+')':'') +']';
                        tr.appendChild(td);

                    body.appendChild(tr);
                }


                Table.appendChild(body);
                pushTo.appendChild(Table);
        }

        this.RPC.Open( "BackEnd/?action=gettablestructure&host=" +this.Host +"&user=" +this.User +"&password=" +this.Password +"&db=" +this.DB +"&table=" +tableName +'&type=' +this.Type );
    }

}