////////////////////////////////////////////////////
// perform imports & includes
////////////////////////////////////////////////////
import Ease
#include "language.as"
////////////////////////////////////////////////////
// define global variables
////////////////////////////////////////////////////
_global['gameSelected']       = false;
_global['systemReady']        = false;
_global['systemMode']         = 1;
_global['systemLock']         = false;
_global['systemInterval']     = false;
_global['casinoSocket']       = new XMLSocket();
_global['sectionGames']       = "games-section.swf";
_global['systemUserMoney']    = 0.00;
_global['systemUserLogged']   = false;
_global['systemSection']      = false;
_global['systemPrevSection']  = false;
_global['systemWinCount']     = 250000;
_global['categoryInit']       = false;
_global['categoryActive']     = false;
_global['categorySelected']   = false;
_global['categoryFavGames']   = "fav";
_global['categorySlots']      = "slots";
_global['categoryVPoker']     = "videopoker";
_global['categoryTable']      = "table";
_global['categoryNewGames']   = "new";
_global['categoryCashier']    = "caisse";
_global['categorySearchRes']  = "search";
_global['categoryAllGames']   = "all";
_global['casinoGamesXML']    += "?ln="+_global['gameLanguage']+"&lc="+_global['systemDirectory'];
_global['casinoSearchXML']   += "?ln="+_global['gameLanguage']+"&lc="+_global['systemDirectory']+"&kw=";
_global['htmlNewsText']       = false;
_global['xmlObject']          = { allgames:false, searchres:false, gamedata:[] };
_global['xmlObjectIndex']     = false;
_global['xmlLocationURL']     = false;
_global['xmlSearchKeyword']   = false;
_global['icoObject']          = {};
_global['icoObjectSub']       = {};
_global['icoObject'][_global['categoryFavGames']]  = "ico-favorites";
_global['icoObject'][_global['categoryNewGames']]  = "ico-newgames";
_global['icoObject'][_global['categorySlots']]     = "ico-slots-main";
_global['icoObject'][_global['categoryTable']]     = "ico-table-main";
_global['icoObject'][_global['categoryVPoker']]    = "ico-vpoker-main";
_global['icoObject'][_global['categoryAllGames']]  = "ico-allgames";
_global['icoObjectSub'][_global['categorySlots']]  = "ico-slots-sub";
_global['icoObjectSub'][_global['categoryTable']]  = "ico-table-sub";
_global['icoObjectSub'][_global['categoryVPoker']] = "ico-vpoker-sub";
////////////////////////////////////////////////////
// protoype functions
////////////////////////////////////////////////////
Color.prototype.compare = function(_obj1:Object, _obj2:Object):Boolean {
        for (var i in _obj1) if (_obj1[i] != _obj2[i]) return false;
        return true;
}
Color.prototype.shift = function():Void {
        var ratio = ((getTimer()-this.fade.startTime)/this.fade._duration);
        if (ratio < 1) {
                var _ntransform:Object = {};
                for (var i in this.fade.change) _ntransform[i] = (this.fade.startTrans[i]+(ratio*this.fade.change[i]));
                this.setTransform(_ntransform);
        } else {
                var _callback:Function = this.fade._callback;
                this.setTransform(this.fade._transform);
                clearInterval(this.fade._interval);
                delete(this.fade);
                if (_callback) _callback();
        }
}
Color.prototype.fadeTransform = function(_transform:Object, _duration:Number, _callback:Function):Void {
        if (this.fade){
                if (this.compare(_transform, this.fade._transform)) return;
                clearInterval(this.fade._interval);
        }
        var _ctransform = this.getTransform();
        if (this.compare(_transform, _ctransform)) return;
        this.fade = {};
        this.fade._transform = _transform;
        this.fade._duration  = _duration;
        this.fade.startTime  = getTimer();
        this.fade.startTrans = _ctransform;
        this.fade.change     = {};
        if (typeof(_callback) == "function") this.fade._callback = _callback;
        for (var i in _transform) this.fade.change[i] = _transform[i]-this.fade.startTrans[i];
        this.shift();
        if (_duration) this.fade._interval = setInterval(this, "shift", 1);
}
TextField.prototype.onKeyDown = function () {
        if (Key.getCode() == Key.ENTER && this.isDown == undefined && this.hasFocus()) {
                this.onSubmit();
                this.isDown = true;
        }
};
TextField.prototype.onKeyUp = function () {
        if (Key.getCode() == Key.ENTER) this.isDown = undefined;
}
TextField.prototype.hasFocus = function () {
        if (Selection.getFocus() == targetPath(this)) return true;
        return false;
};
////////////////////////////////////////////////////
// interface functions
////////////////////////////////////////////////////
function set_money(amount:String):Void {
        _global['systemUserMoney'] = parseFloat(amount);
        _root['fcredit_mc']['amount_txt'].text = _global['gameCurrency']+" "+amount;
}
function set_mode():Void {
        if (_global['systemUserLogged'] == true) {
                _root['welcome_txt'].text                    = _global['interface_ar'][_global['gameLanguage']][29]+" "+_global['systemUserName'];
                _root['fcaisse_mc']['login_btn'].enabled     = false;
                _root['fcaisse_mc']['login_btn']._visible    = false;
                _root['fcaisse_mc']['cashier_btn'].enabled   = true;
                _root['fcaisse_mc']['cashier_btn']._visible  = true;
                _root['fcaisse_mc']['register_btn'].enabled  = false;
                _root['fcaisse_mc']['register_btn']._visible = false;
                _root['fcaisse_mc']['logout_btn'].enabled    = true;
                _root['fcaisse_mc']['logout_btn']._visible   = true;
        } else {
                _root['welcome_txt'].text                    = "";
                _root['fcredit_mc']['amount_txt'].text       = _global['interface_ar'][_global['gameLanguage']][22].toUpperCase();
                _root['fcaisse_mc']['login_btn'].enabled     = true;
                _root['fcaisse_mc']['login_btn']._visible    = true;
                _root['fcaisse_mc']['cashier_btn'].enabled   = false;
                _root['fcaisse_mc']['cashier_btn']._visible  = false;
                _root['fcaisse_mc']['register_btn'].enabled  = true;
                _root['fcaisse_mc']['register_btn']._visible = true;
                _root['fcaisse_mc']['logout_btn'].enabled    = false;
                _root['fcaisse_mc']['logout_btn']._visible   = false;
        }
}
function set_caisse():Void {
        _global['xmlCaisseObject'] = {
                deposit  : [ _global['interface_ar'][_global['gameLanguage']][24], _global['casinoDepositURL']+"lang="+_global['gameLanguage']+"&login="+_global['systemUserName']+"&pass="+_global['systemUserPass'] ],
                withdraw : [ _global['interface_ar'][_global['gameLanguage']][25], _global['casinoWithdrawURL']+"lang="+_global['gameLanguage']+"&login="+_global['systemUserName']+"&pass="+_global['systemUserPass'] ],
                history  : [ _global['interface_ar'][_global['gameLanguage']][26], _global['casinoHistoryURL']+"loginc="+_global['systemUserName']+"&passc="+_global['systemUserPass'] ]
        };
}
function set_banner():Void {
        _root.load_target(_root['banner_mc']['holder_mc'], _global['casinoBannerImgURL'], 468, 60, { _quality:"BEST" }, true);
        _root['banner_mc']['holder_mc'].onRelease = function() {
                getURL(_global['casinoBannerURL'], "_blank");
        }
}
function set_actus():Void {
        var mask_mc:MovieClip   = _root['actus_mc']['mask_mc'];
        var holder_mc:MovieClip = _root['actus_mc'].createEmptyMovieClip("holder_mc", 100);
        var actus_lv:LoadVars   = new LoadVars();
        actus_lv.onLoad = function(success:Boolean) {
                if (success) {
                        _global['htmlNewsText']  = unescape(this.toString());
                        var actus_fmt:TextFormat = new TextFormat();
                        var actus_mtr:Object     = actus_fmt.getTextExtent(_global['htmlNewsText']);
                        holder_mc.createTextField("actus_txt", 100, mask_mc._x+mask_mc._width, 8, actus_mtr.textFieldWidth, 20);
                        var actus_txt:TextField = _root['actus_mc']['holder_mc']['actus_txt'];
                        var t_duration:Number   = 30;
                        var t_time:Number       = 30;
                        var t_change:Number     = _global['systemBannerSpeed'] | -1;
                        actus_txt.selectable    = false;
                        actus_txt.html          = true;
                        actus_txt.htmlText      = _global['htmlNewsText'];
                        holder_mc.onEnterFrame = function() {
                                if (mask_mc.hitTest(_root._xmouse, _root._ymouse)) t_time = 0;
                                if (actus_txt._x+actus_txt._width > mask_mc._x) {
                                        if (t_time > t_duration) {
                                                actus_txt._x += t_change;
                                        } else {
                                                actus_txt._x = Ease.easeOutQuart(t_time, actus_txt._x, t_change, t_duration);
                                        }
                                } else {
                                        actus_txt._x = mask_mc._x+mask_mc._width;
                                }
                                t_time++;
                        }
                } else {
                        _root.alert(_global['error_msg_ar'][_global['gameLanguage']][1]);
                }
        };
        actus_lv.load(_global['casinoCleanerURL']+escape(_global['casinoNewsURL']));
        holder_mc.setMask(mask_mc);
}
function reset_lock(reset:Boolean, login:Boolean):Void {
        if (_global['systemLock']) {
                _global['systemLock'].removeMovieClip();
                _global['systemLock'] = false;
                if (reset == true) reset_content();
                if (login == true) reset_login();
        }
}
function reset_content():MovieClip {
        if (_root['content_mc']) _root['content_mc'].removeMovieClip();
        return _root.createEmptyMovieClip("content_mc", 500);
}
function reset_login():Void {
        if (_root['content_mc']['login_mc']) _root['content_mc']['login_mc'].removeMovieClip();
}
function reset_games():Void {
        if (_global['systemSection'] == _global['sectionGames']) {
                if (_global['categoryActive'] !== false) {
                        var previous_cat:String = _global['categoryActive'];
                        _global['categoryActive']  = false;
                        _root.load_menu_category(previous_cat, _global['casinoGamesXML'], "allgames", _global['sectionGames']);
                }
        }
}
////////////////////////////////////////////////////
// socket functions
////////////////////////////////////////////////////
function send_login():Void {
        _global['casinoSocket'].send(_global['systemUserName']+"\n");
        _global['casinoSocket'].send(_global['systemUserPass']+"\n");
}
function send_hello():Void {
        _global['casinoSocket'].send("HELLO\n");
}
function sock_connect(success:Boolean):Void {
        if (success) _root.send_login();
}
function sock_close():Void {
        if (_global['systemReady']) {
                _global['systemReady'] = false;
                _global['casinoSocket'].connect(_global['systemCServer'], _global['systemCPort']);
        }
}
function sock_xml(xml:XML):Void {
        var root_xml:XMLNode = xml.firstChild;
        if (root_xml.nodeName == "ARGENT") {
                if (_global['systemUserLogged'] == false) {
                        _global['xmlObject']['allgames'] = false;
                        _global['casinoGamesOldXML']     = _global['casinoGamesXML'];
                        _global['casinoGamesXML']       += "&lg="+_global['systemUserName'];
                        _global['xmlSearchKeyword']      = false;
                        _global['systemUserLogged']      = true;
                        _global['systemMode']            = 0;
                        _root.set_mode();
                        _root.set_caisse();
                        _root.reset_lock(false, true);
                        _root.reset_games();
                }
                _root.set_money(root_xml.attributes['value']);
                _root.send_hello();
        } else if(root_xml.nodeName == "CMD" && root_xml.attributes['value'] == "BADLOGIN") {
                _global['systemUserPass']   = false;
                _global['systemReady']      = false;
                _global['systemUserLogged'] = false;
                _global['systemMode']       = 1;
                _root.reset_lock();
                _root.alert(_global['error_msg_ar'][_global['gameLanguage']][2]);
        } else if(root_xml.nodeName == "CMD" && root_xml.attributes['value'] == "NOMONEY") {
                // user ran out of money
        } else {
                _root.alert(root_xml);
        }
}
function sock_init(lock:Boolean):Void {
        if (_global['systemReady'] == false) {
                if (lock) _global['systemLock'] = _root.lock();
                _global['systemReady'] = true;
                _global['casinoSocket'].connect(_global['systemCServer'], _global['systemCPort']);
                _global['casinoSocket'].onConnect = sock_connect;
                _global['casinoSocket'].onClose = sock_close;
                _global['casinoSocket'].onXML = sock_xml;
        }
}
function sock_disconnect() {
        _global['xmlObject']['allgames'] = false;
        _global['casinoGamesXML']        = _global['casinoGamesOldXML'];
        _global['xmlSearchKeyword']      = false;
        _global['systemUserLogged']      = false;
        _global['systemReady']           = false;
        _global['systemMode']            = 1;
        _global['casinoSocket'].close();
        _root.set_mode();
        _root.reset_games();
}
////////////////////////////////////////////////////
// return game loader url
////////////////////////////////////////////////////
function return_url(url_id:Number):String {
        switch(url_id) {
                case 1: return "http://www.casino770.com/fcg-games/flawww.php3"; break;
                case 2: return "http://www.casino770.com/fcg-games/flastuces.php3"; break;
                case 3: return "http://www.casino770.com/fcg-games/flfuture.php3"; break;
                case 4: return "http://www.casino770.com/fcg-games/flfun.php3"; break;
                case 5: return "http://www.casino770.com/fcg-games/fl92.php3"; break;
                case 6: return "http://www.casino770.com/fcg-games/flmx.php3"; break;
        }
}
////////////////////////////////////////////////////
// return game language id
////////////////////////////////////////////////////
function return_lang(lang_idx:String):Number {
        switch(lang_idx) {
                case "en": return 0; break;
                case "fr": return 1; break;
                case "it": return 2; break;
                case "es": return 3; break;
        }
}
////////////////////////////////////////////////////
// random range function
////////////////////////////////////////////////////
function rand(min:Number, max:Number):Number {
        return (Math.floor(Math.random()*(max-min+1))+min);
}
////////////////////////////////////////////////////
// lock screen function
////////////////////////////////////////////////////
function lock():MovieClip {
        var lock_mc:MovieClip = _root.attachMovie("lock-box", "lock_"+_global['systemWinCount']+"_mc", _global['systemWinCount']);
        var new_color = new Color(alert_mc);
        new_color.setTransform({ aa:0 });
        new_color.fadeTransform({ aa:100 }, 100);
        _global['systemWinCount']--;
        return lock_mc;
}
////////////////////////////////////////////////////
// popup alert function
////////////////////////////////////////////////////
function alert(msg:String):Void {
        var alert_mc:MovieClip = _root.attachMovie("alert-box", "alert_"+_global['systemWinCount']+"_mc", _global['systemWinCount']);
        alert_mc['alert_txt'].htmlText = msg;
        _global['systemWinCount']--;
}
////////////////////////////////////////////////////
// load progress bar
////////////////////////////////////////////////////
function display_bar(target_mc:MovieClip, target_width:Number, target_height:Number, pbar_params:Object):MovieClip {
        var loader_mc:MovieClip = target_mc.attachMovie("loader-bar", "loader_mc", 200, pbar_params);
        loader_mc._x = Math.floor(loader_mc._x+((target_width/2)-27));
        loader_mc._y = Math.floor(loader_mc._y+((target_height/2)-14));
        return loader_mc;
}
////////////////////////////////////////////////////
// load file
////////////////////////////////////////////////////
function load_target(target_mc:MovieClip, target_url:String, target_width:Number, target_height:Number, target_params:Object, target_fade:Boolean):Void {
        var holder_mc:MovieClip        = target_mc.createEmptyMovieClip("body_mc", 100);
        var listener_obj:Object        = new Object();
        var loader_mcl:MovieClipLoader = new MovieClipLoader();
        var holder_color               = new Color(holder_mc);
        var loader_mc:MovieClip;
        listener_obj.onLoadStart = function(target_mc:MovieClip) {
                if (target_fade == true) {
                        var target_color = new Color(target_mc);
                        target_color.setTransform({ aa:0 });
                }
                for (var prop in target_params) target_mc[prop] = target_params[prop];
                loader_mc = _root.display_bar(target_mc._parent, target_width, target_height, target_params);
        };
        listener_obj.onLoadProgress = function(target_mc:MovieClip, bytes_loaded:Number, bytes_total:Number) {
                var percent:Number = Math.floor((bytes_loaded/bytes_total)*100);
                if (!isNaN(percent)) {
                        loader_mc.gotoAndStop(percent);
                        loader_mc.loader_txt = Math.floor((bytes_loaded/1024), 2)+"kB";
                }
        };
        listener_obj.onLoadError = function(target_mc:MovieClip, error_code:String, http_code:Number) {
                _root.alert("Error loading object ("+error_code+")");
        };
        listener_obj.onLoadInit = function(target_mc:MovieClip) {
                if (target_fade == true) {
                        var target_color = new Color(target_mc);
                        var loader_color = new Color(loader_mc);
                        loader_color.fadeTransform({ aa:0 }, 250);
                        target_color.fadeTransform({ aa:100 }, 500);
                } else {
                        loader_mc.removeMovieClip();
                }
        };
        loader_mcl.addListener(listener_obj);
        loader_mcl.loadClip(target_url, holder_mc);
}
////////////////////////////////////////////////////
// load game search from top menu
////////////////////////////////////////////////////
function load_game_search():Void {
        var search_txt:String = _root['menu1_mc']['search_txt'].text;
        if (search_txt !== "") {
                if (_global['xmlSearchKeyword'] !== search_txt) {
                        _global['categorySelected'] = false;
                        _global['categoryActive']   = _global['categorySearchRes'];
                        _global['xmlSearchKeyword'] = search_txt;
                        _global['systemLock']       = _root.lock();
                        var body_mc:MovieClip       = _root['content_mc']['body_mc'];
                        body_mc.load_search(search_txt);
                }
        }
}
////////////////////////////////////////////////////
// load category from top menu
////////////////////////////////////////////////////
function load_menu_category(category_name:String, xml_url:String, xml_index:String, section_name:String):Void {
        _global['xmlLocationURL']   = xml_url;
        _global['categoryActive']   = category_name;
        _global['categorySelected'] = false;
        _global['gameSelected']     = false;
        _global['xmlObjectIndex']   = xml_index;
        if (_global['systemSection'] !== section_name) {
                var content_mc:MovieClip = _root.reset_content();
                _global['systemSection'] = section_name;
                _root.load_target(content_mc, _global['systemSection'], 800, 600, { _x:0, _y:0 });
        } else {
                if (_global['xmlObject'][xml_index] == false) {
                        var content_mc:MovieClip = _root.reset_content();
                        _root.load_target(content_mc, _global['systemSection'], 800, 600, { _x:0, _y:0 });
                } else {
                        var menu_mc:MovieClip = _root['content_mc']['gamemenu_mc'];
                        var body_mc:MovieClip = _root['content_mc']['body_mc'];
                        body_mc.load_category();
                }
        }
}