function makeRandom(range) {
    return Math.floor(range*Math.random());
}

function makeHexa(thiscol) {
    var colhex_left = Math.floor(thiscol/16);
    var colhex_right= thiscol-(colhex_left*16);

    if (colhex_left == 10) {colhex_left="A"}
    if (colhex_left == 11) {colhex_left="B"}
    if (colhex_left == 12) {colhex_left="C"}
    if (colhex_left == 13) {colhex_left="D"}
    if (colhex_left == 14) {colhex_left="E"}
    if (colhex_left == 15) {colhex_left="F"}
    if (colhex_right == 10) {colhex_right="A"}
    if (colhex_right == 11) {colhex_right="B"}
    if (colhex_right == 12) {colhex_right="C"}
    if (colhex_right == 13) {colhex_right="D"}
    if (colhex_right == 14) {colhex_right="E"}
    if (colhex_right == 15) {colhex_right="F"}

    return "" +colhex_left +colhex_right;
}


function getColor(){
    return '#' +makeHexa(makeRandom(255)) +makeHexa(makeRandom(255)) +makeHexa(makeRandom(255));
}



function ShowSQLEditor( ok ){
    document.getElementById('VisualEditor').style.zIndex    = !ok; 
    document.getElementById('VisualEditorSQL').style.zIndex = ok;

    if ( ok ){
        SQLFromVisual();
    }
}


function SQLFromVisual(){
    var Select = '';
    var Added = Array();
    obj = document.getElementById('VisualEditorSQL');
    obj.value = '';
    

    for ( var table in Joints ){
        for ( var Key in Joints[table] ){
            if ( Added[table] ) continue;
                
                var tbl = document.getElementById(table);
                for ( var i=0; i<tbl.childNodes[0].childNodes.length; i++ ){
                    if ( tbl.childNodes[0].childNodes[i].childNodes[0].childNodes[0].checked ){
                        Select += "\t"+tbl.childNodes[0].childNodes[i].childNodes[0].id +",\n";
                    }
                }

            Added[table] = 1;

            if (obj.value == ''){
                obj.value += "\t" +table +"\n";
            }else{
                obj.value += "\tLEFT OUTER JOIN " +table +"\tON ( " +document.getElementById(Joints[table][Key]['b']).id+" = " + document.getElementById(Joints[table][Key]['a']).id+" )\n";
            }
        }
    }

    obj.value = "SELECT\n" +((Select)?Select.substr(0, Select.length-2):"\t*") +"\nFROM\n" +obj.value;

}


function ShowConnect(){
    document.getElementById('Blank').style.display = '';
    document.getElementById('DBDatabases').style.display = 'none';
    document.getElementById('Blank').style.zIndex = 99;
}

function CloseConnect(){
    document.getElementById('Blank').style.display = 'none';
    var obj = document.getElementById('dbType');
    document.getElementById('DBDatabases').style.display = ((obj.options[obj.selectedIndex].value == 'mysql')?'':'none');
}

function Connect(){
    var oobj = document.getElementById('DBTables');
    for (var i=oobj.childNodes.length-1; i>=0; i--){
        oobj.removeChild(oobj.childNodes[i]);
    }


    var obj = document.getElementById('dbType');

    aSQL = new SQL( aRPC, document.getElementById('Host').value, document.getElementById('User').value, document.getElementById('Password').value, document.getElementById('DB').value, obj.options[obj.selectedIndex].value );

    if ( obj.options[obj.selectedIndex].value == 'mysql' ){
        aSQL.GetDBList( 'DBDatabases', 'option' );
    }else{
        var pushTo  = document.getElementById( 'DBDatabases' );
        pushTo.length = 0;

        var newNode = document.createElement( 'option' );
            newNode.id           = 'DB_' +document.getElementById('DB').value;
            newNode.value        = document.getElementById('DB').value;
            newNode.innerHTML    = document.getElementById('DB').value;

            pushTo.appendChild( newNode );

        DBDatabasesChange( pushTo );
    }

    CloseConnect();
}

function ChangeDBType( obj ){
    document.getElementById('SingleDB').style.display = ((obj.options[obj.selectedIndex].value == 'mysql')?'none':'');
}