/**
 * @author:    SnowTao.Li
 * @email:     toxly.lee@gmail.com
 * @date:      2009-12-21
 * @time:      13:49:22
 * @desc:      facebook, new index.html
 */

facebook = {
    facebook_api_key: 'ceb4491f28236c210b19fad6a0cf8334',
    facebook_app_id: 372268249833,
    fb_login_uid: 0,
    fb_login_username: '',
    fb_login_pic: 'http://static.ak.fbcdn.net/pics/q_silhouette.gif',
    fb_state: false,
    action_base_url: 'http://pay.evony.com',
    fb_connect_evony_account: '',  // -- evony account name ,used in account login to link or flash called in facebook.flash.js
    fb_div_frame:null, // -- div float
    
    login_state: false, // -- if facebook user has login site
    login_type: 'FB',   // -- login type 
    rquire_login: false,    // -- if require login, if true show facebook login page else don't show login page, only get facebook login status
    connect_from_fb_or_ev: 'FB', // -- connect from facebook or evony 
    loginPanel: 0,  // -- if login panel displaied,0: not display 1: login 2: user info
    
    user_data: null,
    SessionChangeCallBack: {},
    connecting_intervalID: 0,
    
    /**
     * 1: connect and show account info 
     * 2: connect and show login panel, new index.html
     * 3: link page login 
     * 4: link page select account 
     * 5: social bar
     * 6: flash client login
     * 7: login page
     * 8: s2 evony account like facebook
     * 13: just init
     */
    connect_type: 13,    // -- 
    server_info: null,  // -- server info
    
    fb_init: function () {
        facebook.fb_login_uid   = 0;
        facebook.fb_login_username = '';
        facebook.fb_login_pic   = 'http://static.ak.fbcdn.net/pics/q_silhouette.gif';
        facebook.fb_connect_evony_account  = '';
        facebook.login_state    = false;
        facebook.server_info    = null;
        facebook.user_data      = null;
        facebook.loginPanel     = 0;
        facebook.connect_type   = 13;
        facebook.SessionChangeCallBack  = {};
    },
    
    setSessionChangeCallBack: function(cb) {
        if ('function' == typeof(cb)) {
            facebook.SessionChangeCallBack    = cb;
        }
    },
    
    api_sessionChange: function(response) {
        if (response.session) {
            // -- login
            facebook.checkLoad(11);
            facebook.login_state   = true;
            facebook.api_parseLoginInfo();
            facebook.facebookLoginSubmit();
            try {if ('function' == typeof(facebook.SessionChangeCallBack)) facebook.SessionChangeCallBack(true);}catch(e){}
        } else {
            // -- not login
            fb_con_load   = true;
            facebook.checkLoad(3);
            if (2 == facebook.connect_type || 5 == facebook.connect_type) {
                socialBar.connectCallBack(false);
            }
            if ('FB' == facebook.login_type) {
                facebook.login_state   = false;
            }
            try {if ('function' == typeof(facebook.SessionChangeCallBack)) facebook.SessionChangeCallBack(false);}catch(e){}
        }
    },
    
    setConnectType: function(type) {
        if (undefined == type || '' == type) {
            type  = 1;
        }
        if (5 != facebook.connect_type && 4 != facebook.connect_type) {
            facebook.connect_type  = type;
        }
    },
    
    checkFB: function(rquire_login,type) {
        facebook.setConnectType(type);
        facebook.rquire_login  = rquire_login;
        if (rquire_login) {
            FB.login();
            facebook.checkLoad(12);
        } else {
            facebook.checkLoad(13);
            FB.getLoginStatus(facebook.api_sessionChange);
        }
    },
    
    parseFacebook: function() {
        var str = '';
        for (i in facebook) {
            str   += i + ": " + facebook[i] + "\r\n";
        }
        return str;
    },
    
    api_parseLoginInfo: function() {
        var fb_uid    = FB.getSession().uid;
        if (fb_uid) {
            facebook.fb_login_uid = fb_uid;
            
            // -- get facebook user info
            var params = {
                method: 'Fql.query',
                query: (
                    'SELECT first_name,pic_square FROM user WHERE uid= ' + fb_uid
                )
            };
        
            FB.api(params, function(info) {
                if (info.error_code) {
                    // fail
                    return;
                }
                try {
                    info = info[0];
                    
                    facebook.fb_login_username  = info.first_name;
                    if (info.pic_square) {
                        facebook.fb_login_pic       = info.pic_square;
                    }
                } catch (e) {}
            });
        }
    },
    
    // -- facebook login site
    facebookLoginSubmit: function(p_type) {
        document.getElementsByTagName('body')[0].style.cursor  = 'wait';
        var url = "facebook/facebook.Ajax.php?Method=UserFacebookReg&Type=" + facebook.connect_type;
        new Ajax('GET',url,true,null,'login_info',function (getData) {
            document.getElementsByTagName('body')[0].style.cursor  = 'default';
            try {
                var fb_info   = eval("("+getData+")");

                var fb_uid  = facebook.fb_login_uid;
                fb_uid  = parseInt(fb_uid);
                if (fb_uid > 0 && fb_info.fb_uid == fb_uid) {
                    // -- have login
                    if (2 == facebook.connect_type) {
                        // -- new index.html
                        fb_con_load   = true;
                        facebook.user_data  = fb_info.u_data;
                        facebook.checkLoad(5);
                        if (!fb_info.CS && 'FUNE' == fb_info.FU) {
                            facebook.showIfLinkFame();
                            facebook.parseUserInfoData();
                        } else {
                            if (!facebook.rquire_login) {
                                // -- init auto facebook connect
                                if (1 == facebook.loginPanel) {
                                    // -- the login panel has showed, but facebook has login, then show user info frame
                                    facebook.playGame();
                                }
                            } else {
                                facebook.playGame();
                            }
                        }
                    } else if (3 == facebook.connect_type) {
                        // -- link page, login first
                        window.location.reload();
                        return false;
                    } else if (4 == facebook.connect_type) {
                        // -- link page, evony has login, connect facebook to link
                        window.location.href    = "index.do?PageModule=UsersLinkAccountWithFacebook&step=2";
                        return false;
                    } else if (5 == facebook.connect_type) {
                        // -- social bar
                        if (fb_info.CS) {
                            // -- facebook and evony are linked
                            socialBar.connectCallBack(true);
                        } else {
                            // -- facebook is different of login evony account
                            socialBar.connectCallBack(false);
                            document.getElementById('social_bar').style.display    = 'none';
                        }
                        return false;
                    } else if (7 == facebook.connect_type) {
                        // -- login page, go to url
                        if (undefined != _page_go_url_ && '' != _page_go_url_) {
                            var go_url  = _page_go_url_;
                        } else {
                            var go_url  = 'http://www.evony.com/index.html';
                        }
                        
                        window.location.href    = go_url;
                        return false;
                    }else {
                        
                    }
                } else {
                    if (2 == facebook.connect_type) {
                        // -- new index.html
                        fb_con_load   = true;
                        facebook.checkLoad(7);
                    }
                }
            } catch(e) {facebook.checkLoad(9);}
        });
    },
    
    /**
     * @desc   check if the facebook user has the permissions,if not show permission dialog
     * @param  p_permissions: permissions , see http://wiki.developers.facebook.com/index.php/Extended_permissions
     *         p_callback: if authorized success, then call the callback function
     *         p_imme: if show allow permission dialog immediately
     */
    checkFacebookPermission: function(p_permissions,p_callback,p_imme) {
        var fql_sql   = " select " + p_permissions + " from permissions where uid = " + facebook.fb_login_uid;

        var need_permissions  = '';
        facebook.fb_fql(fql_sql, function(rows) {
            try {
                var arr_t  = p_permissions.split(',');
                if ('object' == typeof(rows)) {
                    var per = rows[0]; 
                    for (i = 0; i < arr_t.length; i ++) {
                        if ('' != arr_t[i]) {
                            var t_i   = eval("per." + arr_t[i]);
                            if (0 == t_i) {
                                // -- unauthorized  
                                if ( '' == need_permissions) {
                                    need_permissions += arr_t[i];
                                } else {
                                    need_permissions += "," + arr_t[i];
                                }
                            }
                        }
                    }
                } else {
                    need_permissions   = p_permissions;
                }
            } catch (e) {need_permissions   = p_permissions;}

            if ('' != need_permissions) {
                if (p_imme) {
                    facebook.showFacebookPermission(need_permissions,p_callback);
                } else {
                    p_callback('NO');
                }
            } else {
                p_callback('exists');
            }
        });
    },
    
    /**
     * @desc    show allow extend Permission dialog
     * @param   p_permissions: permissions , see http://wiki.developers.facebook.com/index.php/Extended_permissions
     *          p_callback: if authorized success, then call the callback function
     */
    showFacebookPermission: function(p_permissions,p_callback) {
        if ('' == p_permissions) {
            return false;
        }
        
        var egi    =  new RegExp(p_permissions,"ig");
        FB.ui(
           {
             method: 'auth.permission',
             perms: p_permissions
           },
           function(response){
                if ('' == response) {
                    p_callback('failed');
                    return false;
                }
                if (response.perms && egi.test(response.perms)) {
                    // -- success
                    var p_state = 'success';
                } else {
                    var p_state = 'failed';
                }
                if (typeof p_callback == 'function') {
                    p_callback(p_state);
                }
            }
        );
    },
    
    /**
     * @desc    revoke extended permission
     */
    revokeExtendedPermission: function(p_permissions) {
        var url    = "facebook/facebook.Ajax.php?Method=revokeExtendedPermission&Permission="+p_permissions;
        new Ajax('GET',url,true,null,'login_info',function (getData) {
            alert(getData);
        });
    },
    
    selectServer: function() {
        var server_radio  = document.getElementsByName('playGameServer'); 
        var play_server_id = 0;
        for (i = 0; i < server_radio.length; i ++) {
            if (server_radio[i].checked) {
                play_server_id  = server_radio[i].value;
                break;
            }
        }
        
        facebook.facebookPlayGame(play_server_id);
    },
    
    // -- facebook user play game
    facebookPlayGame: function (play_server_id,p_type) {
        var url = "facebook/facebook.Ajax.php?Method=UserFacebookPlayGame&ID=" + play_server_id;
        new Ajax('GET',url,true,null,'login_info',function (getData) {
            return_info = eval("("+getData+")");
            if (return_info.S) {
                l_url  = return_info.URL;
                window.top.location.href    = l_url;
            } else {
                alert(return_info.E);
            }
        });
    },
    
    fb_logout: function (type) {
        if (undefined == type) {
            type  = facebook.connect_type;
        }
        try {
            socialBar.init();
        } catch (e) {};
        
        if (facebook.fb_state && 0 < facebook.fb_login_uid) {
            FB.logout(function(response){
                facebook.fb_init();
                if (2 == type) {
                    facebook.closeFloatDiv();
                    logOut(2);
                } else if (4 == type) {
                    // -- link account has linked, choose another.
                    window.top.location.href   = "index.do?PageModule=UsersLinkAccountWithFacebook&step=1";
                    return false;
                } else if (type == 5) {
                    // -- link account has linked, log out
                    logOut(5);
                    return false;
                } else if (type == 6) {
                    // -- index re login if error
                    facebook.checkFB(true,2);
                    return false;
                } else if (type == 7) {
                    // -- my account, two different account, logout fb
                    window.location.reload();
                    return false;
                } else {
                    logOut();
                    return false;
                }
            });
        } else {
            facebook.fb_init();
            if (2 == type) {
                facebook.closeFloatDiv();
                logOut(2);
            } else if (4 == type) {
                // -- link account has linked, choose another.
                window.top.location.href   = "index.do?PageModule=UsersLinkAccountWithFacebook&step=1";
                return false;
            } else if (type == 5) {
                // -- link account has linked, log out
                logOut(5);
                return false;
            } else if (type == 6) {
                // -- index re login if error
                facebook.checkFB(true,2);
                return false;
            } else if (type == 7) {
                // -- my account, two different account, logout fb
                window.location.reload();
                return false;
            } else {
                logOut();
                return false;
            }
        }
    },
    
    fb_checkBoookmark: function(callback) {
        if (0 == facebook.fb_login_uid) {
            callback({'S':false,'E':'E1'});;
            return false;
        }
        facebook.fb_fql('SELECT bookmarked FROM permissions WHERE uid = "'+facebook.fb_login_uid+'"', function(rows) {
            if ('' == rows || null == rows) {
                callback({'S':false,'E':'E2'});
            } else {
                try {
                    if(rows[0].bookmarked == 1) {
                        facebook.bookmark_state   = 1;
                        callback({'S':true,'B':true});
                    } else {
                        facebook.bookmark_state   = 2;
                        callback({'S':true,'B':false});
                    }
                } catch (e) {callback({'S':false,'E':'E3'});}
            }
        });
    },
    
    /**
     * @desc   add to facebook bookmark
     */
    fb_addBookmark: function (p_callback) {
        if ('function' == typeof(p_callback)) {
            
        } else {
            p_callback    = function(){};
        }
        
        FB.ui({ method: 'bookmark.add' },function(){
            p_callback();
        });
    },
    
    fb_fql: function (fql_sql, p_callback) {
        var params = {
            method: 'Fql.query',
            query: (
                fql_sql
            )
        };
    
        FB.api(params, p_callback);
    },
    
    fb_getEmail: function() {
        var url = "facebook/facebook.Ajax.php?Method=GetFacebookEmail";
        facebook.imgAjax(url);
    },
    
    /**
     * @desc   get fb uid and fb user name
     */
    fb_getUserInfo: function (type,_fbuid) {
        if (!facebook.fb_state) {
            return false;
        }
        if (undefined != _fbuid && '' != _fbuid) {
            __fbuid   = _fbuid;
        } else {
            __fbuid   = facebook.fb_login_uid;
        }
        
        // -- if is current user info, return
        if (__fbuid == facebook.fb_login_uid && '' != facebook.fb_login_username) {
            if (1 == type) {
                document.getElementById('fb_pic').src = facebook.fb_login_pic;
                document.getElementById('fb_n').innerHTML = "<b>" + facebook.fb_login_username + "</b>";
                document.getElementById('fb_id').innerHTML = "<b>" + __fbuid + "</b>";
                return;
            }
        } else {
            facebook.fb_fql("SELECT first_name,pic_square FROM user WHERE uid=" + __fbuid, function(rows) {
                try {
                    if ('object' == typeof(rows) && 1 == rows.length) {
                        facebook.fb_login_username  = rows[0].first_name;
                        if ('' != rows[0].pic_square && null != rows[0].pic_square) {
                            facebook.fb_login_pic  = rows[0].pic_square;
                        }
                        if (1 == type) {
                            document.getElementById('fb_pic').src = facebook.fb_login_pic;
                            document.getElementById('fb_n').innerHTML = "<b>" + facebook.fb_login_username + "</b>";
                            document.getElementById('fb_id').innerHTML = "<b>" + __fbuid + "</b>";
                        }
                    } else {
                        facebook.fb_login_username  = '';
                    }
                } catch (e) {}
            });
        }
    },
    
    /**
     * @desc    return the current login facebook user name
     */
    fb_getUserName: function() {
        return facebook.fb_login_username;
    },
    
    /**
     * @desc    show float div
     */
    showFloatDiv: function () {
        if (null == this.fb_div_frame) {
            this.fb_div_frame  = document.createElement('div');
            this.fb_div_frame.className    = 'black_overlay';
            this.fb_div_frame.id       = 'bg_div';
            var _top = window.screenTop != undefined ? window.screenTop : window.screenY;
            var _height = document.body.scrollHeight < (window.screen.availHeight - _top) ? (window.screen.availHeight - _top) : document.body.scrollHeight;
            
            this.fb_div_frame.style.height = _height + "px";
            document.getElementsByTagName('body')[0].appendChild(this.fb_div_frame);
            this.fb_div_frame.style.display    = 'block';
        } else {
            this.fb_div_frame.style.display    = 'block';
        }
        
        // -- set light station
        var obj_frame_float = document.getElementById('light');
        var yc  = getCenter();
        var l = yc.xcenter - 900/2; 
        var t = yc.ycenter - 720/2;
        obj_frame_float.style.left = l + "px";
        obj_frame_float.style.top = t + "px";
        
    },
    
    /**
     * @desc    show server list frame, ajax get server list
     */
    showServerFrame: function(type) {
        var _type = 5;
        document.getElementById('float_title').innerHTML = "Welcome, Your Majesty.";
        document.getElementById('t_s_list').innerHTML  = "<div style='color:#FFFFFF; margin: 20px; fong-size: 13px;'>Load Server List...</div>";
        if (null != facebook.server_info) {
            facebook.formatServerShow(_type);
        } else {
            var url = "index.do?PageModule=UsersAjax&method=SLIULPII&T="+_type;
            new Ajax('GET',url,true,null,'login_info',function(getData){
                facebook.server_info   = eval("("+getData+")");
                facebook.formatServerShow(_type);
            });
        }
    },
    
    getServerStatus: function() {
        var url = "ServerStatus/ServerStatus.html";
        new Ajax('GET',url,true,null,'login_info',function(getData){
            try {
                var server_s    = eval("("+getData+")");
                for (i in server_s) {
                    if ('E01' == server_s[i]) {
                        var img_url   = 'Dhtml/images/facebook/index/icon_zt.gif';
                    } else {
                        var img_url   = 'Dhtml/images/facebook/index/icon_zt_2.gif';
                    }
                    document.getElementById('s_st_'+i).src = img_url;
                }
            } catch (e) {}
        });
    },
    
    /**
     * format server list to html
     */
    formatServerShow: function(type) {
        var arr_server_list    = facebook.server_info;
        var doc = checkBrowser();
        var obj_div  = document.getElementById('t_s_list');
        obj_div.innerHTML    = '';
        
        var obj_table1  = document.createElement('table');
        obj_div.appendChild(obj_table1);
        var obj_table  = document.createElement('tbody');
        obj_table1.appendChild(obj_table);
        
        obj_table1.width    = '100%';
        obj_table1.setAttribute('border',0);
        obj_table1.setAttribute('cellpadding',0);
        obj_table1.setAttribute('cellspacing',0);
        
        var td_width   = 270;
        var server_selected = false;
        var L_state = false;
        var B_state = false;
                
        // -- last login
        if (undefined != arr_server_list.L && (1 == type || 5 == type)) {
            L_state    = true;
            var obj_tr  = document.createElement('tr');
            obj_table.appendChild(obj_tr);
            var obj_td  = document.createElement('th');
            obj_td.setAttribute('colSpan',4);
            obj_td.setAttribute('align','left');
            obj_td.innerHTML    = '<h3>' + Lang["UsersLoginJs"]["LastLoginServer"] + '</h3>';
            obj_tr.appendChild(obj_td);
            
            var data  = arr_server_list.L;
            for (var i = 0; i < data.length; i ++) {
                if (i%4 == 0) {
                    var obj_tr = document.createElement('tr');
                    obj_tr.style.height   = '18px';
                    obj_table.appendChild(obj_tr);
                }
                
                var obj_td = document.createElement('td');
                obj_td.setAttribute('width',td_width);
                obj_tr.appendChild(obj_td);
                
                
                if (doc.ie) {
                    if (!server_selected && 0 == i) {
                        server_selected   = true;
                        var s_str = ' checked="checed" ';
                    } else {
                        var s_str = '';
                    }
                    var obj_input  = document.createElement("<input type='radio' onclick='facebook.checkServer("+data[i].s+")' "+s_str+" name='playGameServer' value='"+data[i].s+"' id='radio"+data[i].s+"' />");
                } else {
                    var obj_input  = document.createElement('input');
                    obj_input.type = 'radio';
                    obj_input.setAttribute('name','playGameServer');
                    obj_input.onclick    = Function("facebook.checkServer("+data[i].s+");");
                    obj_input.id   = 'radio' + data[i].s;
                    if (!server_selected && 0 == i) {
                        server_selected   = true;
                        obj_input.checked  = true;
                    }
                    obj_input.value    = data[i].s;
                }
                
                obj_td.appendChild(obj_input);
                
                
                
                var obj_span   = document.createElement('span');
                obj_span.innerHTML = data[i].n;
                obj_span.onclick    = Function("facebook.checkServer("+data[i].s+");");
                obj_td.appendChild(obj_span); 
                
                var obj_span_status = document.createElement('img');
                obj_span_status.id  = 's_st_' + data[i].s;
                obj_span_status.setAttribute('name','s_st_' + data[i].s);
                obj_span_status.src = 'Dhtml/images/facebook/index/icon_zt.gif';
                obj_span.appendChild(obj_span_status);
                
                var obj_span   = document.createElement('span');

                if (2 == data[i].f) {
                    obj_span.innerHTML = "<img src='http://age2download.evony.com/images/icon/Age2Quest.png' width='35' height='15' alt='Age II'>";
                } else {
                	obj_span.innerHTML	= '';
                }
                
                var l_str_t = '';
                if (0 == data[i].l) {
                    l_str_t = 'today';
                } else if (1 == data[i].l) {
                    l_str_t = data[i].l + ' day ago';
                } else {
                    l_str_t = data[i].l + ' days ago';
                }
                obj_span.innerHTML += "<br /><em style='margin-left:10px;'>" + l_str_t + "</em>";
                obj_td.appendChild(obj_span); 
                
            }
            
            // -- empty td
            var _empty_td_nums_login = 4 - i%4; 
            for (var j = 0; j < _empty_td_nums_login; j ++) {
                var obj_td   = document.createElement('td');
                obj_td.setAttribute('width',td_width);
                obj_tr.appendChild(obj_td);
            }
            
            if (undefined != arr_server_list.B || undefined != arr_server_list.O) {
                // -- line
                var obj_tr = document.createElement('tr');
                obj_table.appendChild(obj_tr);
                var obj_td = document.createElement('td');
                obj_td.setAttribute('colSpan',4);
                obj_td.setAttribute('align','center');
                obj_tr.appendChild(obj_td);
                
                var obj_img = document.createElement('img');
                obj_img.src = "Dhtml/images/NewThemes/age2_server-line.png";
                obj_img.width   = '745';
                obj_img.height  = '1';
                obj_td.appendChild(obj_img);
            }
        }
        
        // -- age 2
        if (undefined != arr_server_list.B && 5 == type) {
            var obj_tr  = document.createElement('tr');
            obj_table.appendChild(obj_tr);
            var obj_td  = document.createElement('th');
            obj_td.setAttribute('colSpan',4);
            obj_td.setAttribute('align','left');
            obj_td.innerHTML    = '<h3>Age II World</h3>';
            obj_tr.appendChild(obj_td);
            
            var data  = arr_server_list.B;
            for (var i = 0; i < data.length; i ++) {
                if (i%4 == 0) {
                    var obj_tr = document.createElement('tr');
                    obj_tr.style.height   = '18px';
                    obj_table.appendChild(obj_tr);
                }
                
                var obj_td = document.createElement('td');
                obj_td.setAttribute('width',td_width);
                obj_tr.appendChild(obj_td);
                
                
                if (doc.ie) {
                    if (!server_selected && 0 == i) {
                        server_selected   = true;
                        var s_str = ' checked="checed" ';
                    } else {
                        var s_str = '';
                    }
                    var obj_input  = document.createElement("<input type='radio' onclick='facebook.checkServer("+data[i].s+")' "+s_str+" name='playGameServer' value='"+data[i].s+"' id='radio"+data[i].s+"' />");
                } else {
                    var obj_input  = document.createElement('input');
                    obj_input.type = 'radio';
                    obj_input.setAttribute('name','playGameServer');
                    obj_input.onclick    = Function("facebook.checkServer("+data[i].s+");");
                    obj_input.id   = 'radio' + data[i].s;
                    if (!server_selected && 0 == i) {
                        server_selected   = true;
                        obj_input.checked  = true;
                    } else {
                        var s_str = '';
                    }
                    obj_input.value    = data[i].s;
                }
                
                obj_td.appendChild(obj_input);
                
                var obj_span   = document.createElement('span');
                obj_span.innerHTML = data[i].n;
                obj_span.onclick    = Function("facebook.checkServer("+data[i].s+");");
                obj_td.appendChild(obj_span);
                
                var obj_span_status = document.createElement('span');
                obj_span_status.id  = 's_st_' + data[i].s;
                obj_span_status.setAttribute('name','s_st_' + data[i].s);
                obj_span_status.innerHTML = '<img src="Dhtml/images/facebook/index/icon_zt.gif"></img>';
                obj_span.appendChild(obj_span_status);
            }
            
            // -- empty td
            var _empty_td_nums_login = 4 - i%4; 
            for (var j = 0; j < _empty_td_nums_login; j ++) {
                var obj_td   = document.createElement('td');
                obj_td.setAttribute('width',td_width);
                obj_tr.appendChild(obj_td);
            }
            
            if (undefined != arr_server_list.O) { 
                // -- line
                var obj_tr = document.createElement('tr');
                obj_table.appendChild(obj_tr);
                var obj_td = document.createElement('td');
                obj_td.setAttribute('colSpan',4);
                obj_td.setAttribute('align','center');
                obj_tr.appendChild(obj_td);
                
                var obj_img = document.createElement('img');
                obj_img.src = "Dhtml/images/NewThemes/age2_server-line.png";
                obj_img.width   = '745';
                obj_img.height  = '1';
                obj_td.appendChild(obj_img);
            }
        }
        
        
        // -- other
        if (undefined != arr_server_list.O && 5 == type) {
            var obj_tr  = document.createElement('tr');
            obj_table.appendChild(obj_tr);
            var obj_td  = document.createElement('th');
            obj_td.setAttribute('colSpan',4);
            obj_td.setAttribute('align','left');
            obj_td.innerHTML    = '<h3>Age I World</h3>';
            obj_tr.appendChild(obj_td);
            
            
            var data  = arr_server_list.O;
            for (var i = 0; i < data.length; i ++) {
                if (i%4 == 0) {
                    var obj_tr = document.createElement('tr');
                    obj_tr.style.height   = '18px';
                    obj_table.appendChild(obj_tr);
                }
                
                var obj_td = document.createElement('td');
                obj_td.setAttribute('width',td_width);
                obj_tr.appendChild(obj_td);
                
                
                if (doc.ie) {
                    if (!server_selected && 0 == i) {
                        server_selected   = true;
                        var s_str = ' checked="checed" ';
                    } else {
                        var s_str = '';
                    }
                    var obj_input  = document.createElement("<input type='radio' onclick='facebook.checkServer("+data[i].s+")' "+s_str+" name='playGameServer' value='"+data[i].s+"' id='radio"+data[i].s+"' />");
                } else {
                    var obj_input  = document.createElement('input');
                    obj_input.type = 'radio';
                    obj_input.setAttribute('name','playGameServer');
                    obj_input.onclick    = Function("facebook.checkServer("+data[i].s+");");
                    obj_input.id   = 'radio' + data[i].s;
                    if (!server_selected && 0 == i) {
                        server_selected   = true;
                        obj_input.checked  = true;
                    } else {
                        var s_str = '';
                    }
                    obj_input.value    = data[i].s;
                }
                
                obj_td.appendChild(obj_input);
                
                var obj_span   = document.createElement('span');
                obj_span.innerHTML = data[i].n;
                obj_span.onclick    = Function("facebook.checkServer("+data[i].s+");");
                obj_td.appendChild(obj_span);
                
                var obj_span_status = document.createElement('span');
                obj_span_status.id  = 's_st_' + data[i].s;
                obj_span_status.setAttribute('name','s_st_' + data[i].s);
                obj_span_status.innerHTML = '<img src="Dhtml/images/facebook/index/icon_zt.gif"></img>';
                obj_span.appendChild(obj_span_status);
            }
            
            // -- empty td
            var _empty_td_nums_login = 4 - i%4; 
            for (var j = 0; j < _empty_td_nums_login; j ++) {
                var obj_td   = document.createElement('td');
                obj_td.setAttribute('width',td_width);
                obj_tr.appendChild(obj_td);
            }
            
            if (undefined != arr_server_list.C) { 
                // -- line
                var obj_tr = document.createElement('tr');
                obj_table.appendChild(obj_tr);
                var obj_td = document.createElement('td');
                obj_td.setAttribute('colSpan',4);
                obj_td.setAttribute('align','center');
                obj_tr.appendChild(obj_td);
                
                var obj_img = document.createElement('img');
                obj_img.src = "Dhtml/images/NewThemes/age2_server-line.png";
                obj_img.width   = '745';
                obj_img.height  = '1';
                obj_td.appendChild(obj_img);
            }
        }
        
        // -- age 2 other
        if (undefined != arr_server_list.C && 5 == type) {
            var obj_tr  = document.createElement('tr');
            obj_table.appendChild(obj_tr);
            var obj_td  = document.createElement('th');
            obj_td.setAttribute('colSpan',4);
            obj_td.setAttribute('align','left');
            obj_td.innerHTML    = '<h3>Age II Other World</h3>';
            obj_tr.appendChild(obj_td);
            
            var data  = arr_server_list.C;
            for (var i = 0; i < data.length; i ++) {
                if (i%4 == 0) {
                    var obj_tr = document.createElement('tr');
                    obj_tr.style.height   = '18px';
                    obj_table.appendChild(obj_tr);
                }
                
                var obj_td = document.createElement('td');
                obj_td.setAttribute('width',td_width);
                obj_tr.appendChild(obj_td);
                
                
                if (doc.ie) {
                    if (!server_selected && 0 == i) {
                        server_selected   = true;
                        var s_str = ' checked="checed" ';
                    } else {
                        var s_str = '';
                    }
                    var obj_input  = document.createElement("<input type='radio' onclick='facebook.checkServer("+data[i].s+")' "+s_str+" name='playGameServer' value='"+data[i].s+"' id='radio"+data[i].s+"' />");
                } else {
                    var obj_input  = document.createElement('input');
                    obj_input.type = 'radio';
                    obj_input.setAttribute('name','playGameServer');
                    obj_input.onclick    = Function("facebook.checkServer("+data[i].s+");");
                    obj_input.id   = 'radio' + data[i].s;
                    if (!server_selected && 0 == i) {
                        server_selected   = true;
                        obj_input.checked  = true;
                    } else {
                        var s_str = '';
                    }
                    obj_input.value    = data[i].s;
                }
                
                obj_td.appendChild(obj_input);
                
                var obj_span   = document.createElement('span');
                obj_span.innerHTML = data[i].n;
                obj_span.onclick    = Function("facebook.checkServer("+data[i].s+");");
                obj_td.appendChild(obj_span);
                
                var obj_span_status = document.createElement('span');
                obj_span_status.id  = 's_st_' + data[i].s;
                obj_span_status.setAttribute('name','s_st_' + data[i].s);
                obj_span_status.innerHTML = '<img src="Dhtml/images/facebook/index/icon_zt.gif"></img>';
                obj_span.appendChild(obj_span_status);
            }
            
            // -- empty td
            var _empty_td_nums_login = 4 - i%4; 
            for (var j = 0; j < _empty_td_nums_login; j ++) {
                var obj_td   = document.createElement('td');
                obj_td.setAttribute('width',td_width);
                obj_tr.appendChild(obj_td);
            }
        }
        facebook.getServerStatus();
    },
    
    checkServer: function(i) {
        var s_stt  = 'radio' + i;
        document.getElementById(s_stt).checked='checked';
        facebook.selectServer();
    },
    
    /**
     * @desc    
     */
    closeFloatDiv: function () {
        facebook.fb_div_frame.style.display    = 'none';
        facebook.loginPanel = 0;
        document.getElementById('light').style.display  = 'none';
        document.getElementById('login_frame').style.display  = 'none';
    },
    
    /**
     * @desc    if first connect, show if link notice
     */
    showIfLinkFame: function() {
        facebook.showFloatDiv();
        document.getElementById('light').style.display  = 'block';
        document.getElementById('login_frame').style.display  = 'none';
        document.getElementById('float_title').innerHTML = "Do you have an existing Evony account?";
        document.getElementById('server_button_table').style.display   = 'none';
        var p_frame  = document.getElementById('t_s_list');
        p_frame.innerHTML   = "";
        
        var h=document.documentElement.clientHeight;
        
        var yc  = getCenter();
        var l = yc.xcenter - 900/2;
        if (l<0) l = 0;
        var t = (h - 570)/2;
        if (t<0) t = 0;
        
        document.getElementById('light').style.left = l + "px";
        document.getElementById('light').style.top = t + "px";
        
        var obj_div = document.createElement('div');
        obj_div.className   = "if_link_button";
        p_frame.appendChild(obj_div);
        
        var obj_input   = document.createElement('input');
        obj_input.type  = 'button';
        obj_input.value = "No, start a new game.";
        obj_input.onclick   = facebook.showServerFrame;
        obj_input.style.cursor  = 'cursor';
        obj_div.appendChild(obj_input);
        
        var obj_span    = document.createElement('span');
        var obj_input   = document.createElement('input');
        obj_input.type  = 'button';
        obj_input.value = "Yes, link my Evony account now!";
        obj_input.onclick   = function(){
            window.open("http://www.evony.com/index.do?PageModule=UsersLinkAccountWithFacebook&FT=FC");
        };
        obj_input.style.cursor  = 'cursor';
        obj_span.appendChild(obj_input);
        obj_span.style.marginLeft   = "20px";
        obj_div.appendChild(obj_span);
        
        
        var obj_div = document.createElement('div');
        obj_div.className   = "if_link_info";
        obj_div.innerHTML   = "You can link your Facebook account to existing Evony account later in \"My Account\".";
        p_frame.appendChild(obj_div);
        
    },
    
    /**
     * if not login show connect fb button and login evony form
     */
    showFbLinkFrame: function(type) {
        facebook.loginPanel    = 1;
        facebook.showFloatDiv();
        
        document.getElementById('login_frame_info').style.display   = 'block';
        document.getElementById('evony_exists_with_facebook').style.display   = 'none';        
        document.getElementsByTagName('body')[0].style.cursor  = 'default';
        
        var obj_frame_float = document.getElementById('login_frame');
        
        // -- set light station
        var h=document.documentElement.clientHeight;
        
        var yc  = getCenter();
        var l = yc.xcenter - 680/2;
        var t = (h - 480)/2;
        if (t<0) t = 0;
        
        obj_frame_float.style.left = l + "px";
        obj_frame_float.style.top = t + "px";
        obj_frame_float.style.display  = 'block';
        
        if (undefined != typeof(type) && false == type) {
            document.getElementById('wait_frame_show').style.display = 'block';
            document.getElementById('login_panel_frame').style.display = 'none';
        } else {
            document.getElementById('fb_USER_NAME_LOGIN').focus();
        }
    },
    
    /**
     * if evony account connected with facebook. must login facebook to play game.
     */
    loginFacebookIfLinked: function() {
        document.getElementById('login_frame_info').style.display   = 'none';
        document.getElementById('evony_exists_with_facebook').style.display   = 'block';
    },

    loginSubmit: function(type) {
        var username   = document.getElementById('fb_USER_NAME_LOGIN').value;
        var PSSWORD    = document.getElementById('fb_PSSWORD').value;
        var obj_remeberme  = document.getElementById('fb_remeberme');
        var remberme    = '';
        if ('' == username) {
            alert(Lang["UsersLoginJs"]["InputUserName"]);
            return false;
        }
        
        if ('' == PSSWORD) {
            alert(Lang["UsersLoginJs"]["InputPassword"]);
            return false;
        }
        
        var sendstr = '';
        if (obj_remeberme.checked) {
            sendstr += '&remeberme=true';
        }
        facebook.fb_connect_evony_account   = username;
        sendstr += "&USER_NAME=" + encodeURIComponent(username);
        sendstr += "&PSSWORD=" + encodeURIComponent(PSSWORD); 
        var url = "facebook/facebook.Ajax.php?Method=AgeIIUserLogin&T="+type;
        document.getElementsByTagName('body')[0].style.cursor  = 'wait';
        new Ajax('POST',url,true,sendstr,'login_info',function(p_data){
            document.getElementsByTagName('body')[0].style.cursor  = 'default';
            if (/E05/.test(p_data)) {
                js_str  = p_data.replace("E05",'');
                p_data  = "E05";
            }
            switch (p_data) {
                case 'E01': 
                    alert(Lang["UsersLoginJs"]["InputUsername"]);
                    break;
                case 'E02':
                    alert(Lang["UsersLoginJs"]["InputPassword"]);
                    break;
                case 'E03':
                    alert(Lang["UsersLoginJs"]["NotExistsUserName"]);
                    break;
                case 'E04':
                    alert(Lang["UsersLoginJs"]["ErrorPassword"]);
                    break;
                case 'E05': 
                    // -- longin success
                    if (undefined != type && 7 == type) {
                        // -- login page, go to url
                        var go_url  = '';
                        if (undefined != _page_go_url_ && '' != _page_go_url_) {
                            go_url  = _page_go_url_;
                        }
                        if ('' == go_url) {
                            go_url = 'http://www.evony.com/index.html';
                        }
                        window.location.href    = go_url;
                        return false;
                    } else {
                        // -- new index.html login
                        var login_info = eval("("+js_str+")");
                        facebook.user_data = login_info;
                        facebook.login_state = true;
                        facebook.playGame();
                    }
                    
                    break;
                case 'E06':
                    alert(Lang["UsersLoginJs"]["UserDisabled"]);
                    break;
                case 'E07':
                    facebook.loginFacebookIfLinked();
                    break;
              default:
                   break;
            }
        });
        return false;
    },
    
    /**
     * add bookmark to browser
     */
    addBrowserBookmark: function(title,url) {
        if (window.sidebar) { 
            window.sidebar.addPanel(title, url,""); 
        } else if( document.all ) {
            window.external.AddFavorite( url, title);
        } else if( window.opera && window.print ) {
            return true;
        }
    },
    
    /**
     * @desc    index.html play game, first check if login, if login goto game else show login and connect frame
     * @param   play_type: if true, connecting.... over 10 s, show link of display login panel
     */
    playGame: function(play_type) {
        if (undefined != play_type && play_type) {
             // -- connecting.... click
            load_wait  = false;
            document.getElementById('wait_frame_show').style.display = 'none';
            document.getElementById('login_panel_frame').style.display = 'block';
        } else {
            // -- normal play game
            if (!page_load || !fb_con_load || !state_load) {
                // -- click play game when page not load finished
                load_wait  = true;
                facebook.showFbLinkFrame(false);
                facebook.connecting_intervalID    = window.setInterval(function(){
                    window.clearInterval(facebook.connecting_intervalID);
                    document.getElementById('connect_hidden').style.display    = 'block';
                    facebook.checkLoad(10);
                },10000);
                return false;
            } else {
                if (0 < facebook.connecting_intervalID) {
                    window.clearInterval(facebook.connecting_intervalID);
                    facebook.connecting_intervalID    = 0;
                }
            }
        }
        if (facebook.login_state) {
            document.getElementById('login_frame').style.display   = 'none';
            document.getElementsByTagName('body')[0].style.cursor  = 'wait';
            if (null != facebook.user_data) {
                facebook.parseUserInfoData();
                facebook.showServerFrame();
            } else {
                var url = "index.do?PageModule=UsersAjax&method=CheckLoginState";
                new Ajax('GET',url,true,null,'login_info',facebook.showUserInfo);
            }
        } else {
            facebook.showFbLinkFrame();
        }
    },
    
    // -- show user info and show server list
    showUserInfo: function(getData) {
        return_info   = eval("("+getData+")");
        facebook.user_data    = return_info;
        facebook.parseUserInfoData();
        facebook.showServerFrame();
    },
    
    // -- parse user info
    parseUserInfoData: function() {
        document.getElementsByTagName('body')[0].style.cursor  = 'default';
        return_info = facebook.user_data;
        if (return_info.S) {
            // -- login ,play game
            facebook.login_state    = true;
            facebook.login_type     = return_info.T;
            facebook.loginPanel     = 2;
            
            facebook.showFloatDiv();
            
            if ('FB' == return_info.N) {
                // -- facebook user
                var pic_str  = "<img border='0' align='absmiddle' id='fb_pic' src='"+facebook.fb_login_pic+"' />";
                pic_str += "Facebook Account: <span id='fb_n'><b>" + facebook.fb_login_username + '</b></span><br />';
                pic_str += "ID: <span id='fb_id'><b>" + facebook.fb_login_uid + '</b></span>';
                if ('' == facebook.fb_login_username) {
                    facebook.fb_getUserInfo(1);
                }
                
                document.getElementById('dt_1').innerHTML   = pic_str;
                document.getElementById('dd_1').innerHTML   = "<a href='javascript: void(0)' onclick='facebook.fb_logout(2);'><img border='0' src='Dhtml/images/facebook/index/ico_login_1.gif' /></a>";
                if (return_info.L) {
                    var pic_str2  = "<img border='0' align='absmiddle' src='Dhtml/images/NewThemes/user_face1.gif' />";
                    pic_str2 += "Evony Account: <b>" + return_info.LName + '</b>';
                    document.getElementById('dt_2').innerHTML   = pic_str2;
                    
                    document.getElementById('dd_2').innerHTML   = "<a href='javascript: void(0)' onclick='facebook.fb_logout(2);'><img border='0' src='Dhtml/images/facebook/index/ico_logout.gif' /></a> <a href='index.do?PageModule=UsersEditPwd'><img border='0' src='Dhtml/images/facebook/index/ico_change.gif' /></a>";
                } else {
                    document.getElementById('dd_1').innerHTML   = "<a href='javascript: void(0)' onclick='facebook.fb_logout(2);'><img border='0' src='Dhtml/images/facebook/index/ico_login_1.gif' /></a>";
                    document.getElementById('dt_2').innerHTML   = '';
                    document.getElementById('dd_2').innerHTML   = '<a href="http://user.evony.com/index.do?PageModule=UsersLinkAccountWithFacebook">Link your Evony account</a>';
                }
            } else {
                var pic_str  = "<img border='0' align='absmiddle' src='Dhtml/images/NewThemes/user_face1.gif' />";
                pic_str += "Evony Account: <b>" + return_info.N + '</b>';
                
                document.getElementById('dt_1').innerHTML   = pic_str;
                document.getElementById('dd_1').innerHTML   = "<a href='javascript: void(0)' onclick='facebook.fb_logout(2);'><img border='0' src='Dhtml/images/facebook/index/ico_logout.gif' /></a> <a href='index.do?PageModule=UsersEditPwd'><img border='0' src='Dhtml/images/facebook/index/ico_change.gif' /></a>";
                if (return_info.L) {
                    var pic_str2  = "<img border='0' align='absmiddle' id='fb_pic' src='http://static.ak.fbcdn.net/pics/q_silhouette.gif' />";
                    pic_str2 += "Facebook Account: <span id='fb_n'><b>" + return_info.LName + '</b></span><br />';
                    pic_str2 += "ID: <span id='fb_id'><b>" + return_info.LName + '</b></span>';
                    facebook.fb_getUserInfo(1,return_info.LName);
                    document.getElementById('dt_2').innerHTML   = pic_str2;
                    document.getElementById('dd_2').innerHTML   = "<a href='javascript: void(0)' onclick='facebook.fb_logout(2);'><img border='0' src='Dhtml/images/facebook/index/ico_login_1.gif' /></a>";
                } else {
                    document.getElementById('dt_2').innerHTML   = '';
                    document.getElementById('dd_2').innerHTML   = '<a href="http://user.evony.com/index.do?PageModule=UsersLinkAccountWithFacebook">Link your Facebook account</a>';
                }
            }
            
            document.getElementById('light').style.display  = 'block';
            document.getElementById('server_button_table').style.display   = 'block';
            
            var h=document.documentElement.clientHeight;
            var light_height    = document.getElementById('light').offsetHeight;

            var yc  = getCenter();
            var l = yc.xcenter - 900/2;
            if (l<0) l = 0;
            var t = (h - light_height)/2;
            if (t<0) t = 0;
            
            document.getElementById('light').style.left = l + "px";
            document.getElementById('light').style.top = t + "px";
            
            if ('FB' == return_info.T ) {
                socialBar.connectCallBack(true);
            } else {
                socialBar.senable = false;
                document.getElementById('social_bar').style.display    = 'none';
            }
        } else {
            // -- show login info
            facebook.login_state    = false;
            facebook.showFbLinkFrame();
        }
    },
    
    /**
     * check if login or connect
     */
    checkLoginState: function() {
        var url = "index.do?PageModule=UsersAjax&method=CheckLoginStateI";
        new Ajax('GET',url,true,null,'login_info',function (getData) {
            return_info = eval("("+getData+")");
            state_load   = true;
            facebook.checkLoad(6);
            facebook.login_type     = return_info.T;
            if (return_info.S) {
                // -- login ,play game
                facebook.login_state    = true;
            } else {
                // -- show login info
                facebook.login_state    = false;
            }
        });
    },
    
    /**
     * @param t={1:"page loaded",2:"facebook can't connect",3:"fb_con_load::facebook not login",4:"FB not defained",
     * 5:"fb_con_load::facebook user login (UserFacebookReg)",6:"state_load::user login state check finished",7:"fb_con_load::facebook user not login (UserFacebookReg)",
     * 8:"facebook fbAsyncInit",9:"facebookLoginSubmit exception",10:'connecting over 10 sec',11:"facebook session change to login",
     * 12:"facebook connect button",13:"facebook init"}
     */
    checkLoad: function(t) {
        try {
            if (load_wait) {
                if (page_load && state_load && fb_con_load) {
                    load_wait  = false;
                    document.getElementById('wait_frame_show').style.display = 'none';
                    document.getElementById('login_panel_frame').style.display = 'block';
                    facebook.playGame();
                }
            }
            if (undefined != _load_debug && '_LD_' == _load_debug) {
                facebook.imgAjax(_load_debug_u+'t='+t);
            }        } catch (e) {}
    },
    
    /*
     * ajax get new list
     */
    showNews: function () {
        var obj_feed_list   = document.getElementById('feed_list');
        obj_feed_list.innerHTML = "Feed Loading.....Please Wait!";
        var url = "index.do?PageModule=UsersAjax&method=getNews";
        new Ajax('GET',url,true,null,'login_info',function (getData) {
            return_info = eval("("+getData+")");
            obj_feed_list.innerHTML = '';
            
            for (i = 0; i < return_info.length; i ++) {
                var obj_div    = document.createElement('li');
                obj_feed_list.appendChild(obj_div);
                
                var obj_a    = document.createElement('a');
                var obj_span    = document.createElement('span');
                obj_span.innerHTML   = return_info[i].date;
                obj_a.appendChild(obj_span);
                var title   = return_info[i].title;
                obj_a.innerHTML += " " +title;
                obj_a.href  = 'javascript:void(0);';
                title  = title.replace(/ /g,'_');
                var url = return_info[i].hurl;
                obj_a.onclick   = Function("facebook.openNewsWindow('"+url+"')");
                obj_div.appendChild(obj_a);
            }
        });
    },
    
    /**
     * new window to view news detail
     */
    openNewsWindow: function(url) {
        window.open(url,'NewsDetail','');
    },
    
    /**
     * img request url
     */
    imgAjax: function(url) {
        var Img = new Image(1,1);
        Img.src = url;
        Img.onload  = function(){};
    }
}