• Поменяли ли вы смартфон на хороший планшет + простой мобильный телефон?

    Shultc
    @Shultc
    RnD Developer
    Ходил так долгое время. В качестве телефона было самое простое, что нашёл: Samsung e1200. Всё бы хорошо, но смс-ки — сущий ад. Писать-то их можно по старинке, хоть под столом не глядя(эх, школа, где ты?), а вот читать… Постоянно их количество переполняется, приходится что-то стирать. Приходит по пол-смски, так как больше не влезло… Ну, и второе: никакой синхронизации — с контактами приходилось много возиться, чтобы они были актуальными и удобными.

    Тогда уж, самое разумное, это брать планшет с sSim-картой и гарнитуру-телефон.
    Ответ написан
    Комментировать
  • Чем хуже ноут по сравнению с десктопом?

    Shultc
    @Shultc
    RnD Developer
    Извините, вы забыли это: </sarcasm>
    Ответ написан
    Комментировать
  • Вводный курс для начинающих?

    Shultc
    @Shultc
    RnD Developer
    Ну, если с технической точки зрения, то однозначно стоит!
    Ответ написан
    Комментировать
  • Не приходят sms-ки — телефон или оператор?

    Shultc
    @Shultc
    RnD Developer
    В инет(5) по WiFi заходите? Если да, то глюк точно телефона.
    Ответ написан
    2 комментария
  • Украли домен

    Shultc
    @Shultc
    RnD Developer
    История на тему; Первая часть, Вторая часть.

    Домен-то на вас зарегистрирован?
    Ответ написан
    Комментировать
  • Как открыть полноценную консоль локальных пользователей и групп в Windows 7 Home Premium?

    Shultc
    @Shultc
    RnD Developer
    удалено
    Ответ написан
    Комментировать
  • Как открыть полноценную консоль локальных пользователей и групп в Windows 7 Home Premium?

    Shultc
    @Shultc
    RnD Developer
    Там по ссылке, которую вы привели, справа ест кнопка «Download». Если я правильно понял, по ней находится .exe файл, который вам поможет. А если у вас 64-х битная ОСь, то нужно будет ещё кой-какие махинации с папками провернуть
    Ответ написан
  • Подскажите методику работы с таблицей «словарем»

    Shultc
    @Shultc
    RnD Developer
    Ну, мне кажется, что если вам важна именно красота запросов, то стоит использовать VIEW.
    Ответ написан
    Комментировать
  • монетизация сайта

    Shultc
    @Shultc
    RnD Developer
    Если у вашего друга есть популярный сайт про автомобили, то он может начать приносить деньги, если начать размещать на нём заказные статьи от автопроизводителей. Точно так же может приносить деньги любой сайт, посвящённый какой-либо тематике. Посмотрите на том же Хабре блоги различных компаний.
    Ответ написан
    Комментировать
  • Какой SSD выбрать?

    Shultc
    @Shultc
    RnD Developer
    Если начинает подвисать из-за открытых программ, то вам нужна именно оперативка.
    SSD лишь поможет быстрее запускать то, что на него установлено… Плюс по мелочам.
    Ответ написан
    7 комментариев
  • Как лучше прототипировать 2D анимацию?

    Shultc
    @Shultc
    RnD Developer
    Судя по тому, как обрезана нижняя хардверная кнопка (сверху обрезана) эта 2D анимация была сделана в Adobe After Effects, или чём-то подобном.
    Ответ написан
  • Отношения в коллективе

    Shultc
    @Shultc
    RnD Developer
    Ну, если Карнеги вы уже прочитали, то советую прочесть Анти-Карнеги.
    Всегда полезно полезно посмотреть и не другую сторону.
    Ответ написан
    1 комментарий
  • Плагин листания с apple.com?

    Shultc
    @Shultc
    RnD Developer
    Не надо вытаскивать — это не этично.
    Попробуйте сначала сделать обычный слайдер. Потом попробуйте добавлять к нему запоздания по-разному.
    Ответ написан
    6 комментариев
  • Вычислить закономерность или игра «Угадайка»

    Shultc
    @Shultc Автор вопроса
    RnD Developer
    удаоено
    Ответ написан
    Комментировать
  • Украли телефон, как узнать местоположение?

    Shultc
    @Shultc
    RnD Developer
    Позвоните на телефон, и спросите, у снявшего трубку человека, где он находится.
    Ответ написан
    1 комментарий
  • Продажа видео контента

    Shultc
    @Shultc
    RnD Developer
    Вы можете просто заливать видео не на youtube, а на Google Drive. Там вы можете их расшаривать для конкретных пользователей. Это получится намного проще. =)
    Ответ написан
    Комментировать
  • Экспорт Visio в SVG?

    Shultc
    @Shultc
    RnD Developer
    Вы уверены, что проблема не в программе, в которую вы копируете? Ну, или в самом вашем способе «копирования»; он не совсем понятен.
    Ответ написан
    3 комментария
  • Нужен слайдер, как у Газпрома?

    Shultc
    @Shultc
    RnD Developer
    Там не так уж много кода:
    Скрытый текст
    package org.noregret.log {
        import flash.events.*;
        import flash.display.*;
        import flash.system.*;
        import flash.text.*;
        import org.noregret.utils.*;
        import flash.utils.*;
        import flash.external.*;
        import flash.ui.*;
    
        public class LogPanel extends Sprite {
    
            public static const INSTANCE:LogPanel = new (LogPanel)();
    ;
            public static const TYPE_ERROR:String = "errorMessage";
            private static const DEFAULT_SHORTCUT:Array = [Keyboard.CONTROL, Keyboard.SHIFT, Keyboard.SPACE];
            private static const COPY_EVENT:String = "copyToClipboard";
            public static const TYPE_PLAIN:String = "plainMessage";
            public static const TYPE_NOTIFY:String = "notifyMessage";
            public static const TYPE_WARNING:String = "warningMessage";
    
            public static var COLOR_WARNING:uint = 0x990099;
            private static var line_count:uint;
            public static var enableTraceInform:Boolean = false;
            public static var enableTraceErrors:Boolean = false;
            private static var charHash:Object = {};
            private static var keyCodeHash:Object;
            public static var COLOR_DEFAULT:uint = COLOR_PLAIN;
            private static var currentKey:uint;
            public static var COLOR_PLAIN:uint = 0x333333;
            private static var openKey:uint;
            public static var enableTraceAll:Boolean = false;
            public static var enabled:Boolean = true;
            public static var COLOR_NOTIFY:uint = 153;
            private static var messageList:Array;
            public static var FONT:String = "_typewriter";
            public static var maxMessages:Number = 100;
            public static var enableTraceNotify:Boolean = false;
            public static var COLOR_ERROR:uint = 0xFF0000;
            public static var shortcutString:String;
            private static var ERROR_SINGLTONE:Number = 0;
            public static var enableTraceWarnings:Boolean = false;
            private static var KEY_COPY:Number = "c".charCodeAt(0);
    
            private var logTextField:TextField;
    
            public function LogPanel(){
                super();
                if (INSTANCE){
                    throw (new Error((getQualifiedClassName(this) + " is a Singletone!"), ERROR_SINGLTONE));
                };
                logTextField = makeTextField(500, 500);
                logTextField.addEventListener(TextEvent.LINK, onLinkTrigger);
                addChild(logTextField);
                messageList = new Array();
                addEventListener(Event.ADDED_TO_STAGE, onAddToStage);
                visible = false;
                setShortcut(DEFAULT_SHORTCUT);
            }
            public static function setShortcut(... _args):String{
                var code:uint;
                var keyCount:int;
                var key:String;
                var char:String;
                var validateFlag:Boolean;
                var keyNameList:Array;
                var i:int;
                keyCodeHash = {};
                charHash = {};
                if ((_args[0] is Array)){
                    var list:Array = _args[0];
                };
                keyCount = 0;
                key = "";
                char = "";
                validateFlag = false;
                keyNameList = [];
                i = 0;
                for (;(((i < _args.length)) && ((keyCount < 4)));i++) {
                    char = null;
                    if ((_args[i] is String)){
                        char = (_args[i] as String).toLowerCase().substr(0, 1);
                        if (!char.length){
                            continue;
                        };
                        code = char.charCodeAt(0);
                    } else {
                        code = uint(_args[i]);
                    };
                    validateFlag = (((((code > 32)) && ((code <= 160)))) || (KeyboardHelper.isSpecialKey(code)));
                    if (((((((isNaN(code)) || (!(validateFlag)))) || (!((keyCodeHash[code] == null))))) || (!((charHash[char] == null))))){
                    } else {
                        if (char){
                            charHash[code] = keyCount;
                        } else {
                            keyCodeHash[code] = keyCount;
                        };
                        keyNameList.push(KeyboardHelper.getKeyName(code));
                        keyCount++;
                        key = (key + "1");
                    };
                };
                if (keyCount){
                    openKey = parseInt(key, 2);
                } else {
                    return (setShortcut(DEFAULT_SHORTCUT));
                };
                currentKey = 0;
                shortcutString = keyNameList.join("+");
                return (shortcutString);
            }
            public static function warn(message:Object, sender=null):void{
                if (((enableTraceWarnings) || (enableTraceAll))){
                    trace((("*** LogPanel.warn(" + arguments) + ")"));
                };
                add(addSender(message, sender), LogPanel.TYPE_WARNING);
            }
            public static function show():void{
                INSTANCE.visible = true;
                INSTANCE.buildDebugPanel();
                if (INSTANCE.stage){
                    INSTANCE.stage.addChild(INSTANCE);
                };
            }
            public static function error(message:Object, sender=null):void{
                if (((enableTraceErrors) || (enableTraceAll))){
                    trace((("*** LogPanel.error(" + arguments) + ")"));
                };
                add(addSender(message, sender), LogPanel.TYPE_ERROR);
            }
            private static function add(message:String, type:String):void{
                var str:String;
                if (!enabled){
                    return;
                };
                line_count++;
                str = (("<span class='count'>" + StringUtils.trimAndFormat(line_count, 3, 0)) + "</span>: ");
                str = (str + (((("<span class='" + type) + "'>") + message) + "</span>"));
                str = (str + (("<span class='time'> (" + getTimer()) + " msec)</span>"));
                messageList.push(str);
                while (messageList.length > LogPanel.maxMessages) {
                    messageList.shift();
                };
                if (INSTANCE.visible){
                    INSTANCE.buildDebugPanel();
                };
            }
            private static function addSender(message, sender=null):String{
                var msg:String;
                msg = String(message);
                msg = msg.split(">").join(">");
                msg = msg.split("<").join("<");
                if (sender){
                    return ((((("<span class='sender'>" + getQualifiedClassName(sender)) + "</span>: <span class='item'>") + msg) + "</span>"));
                };
                return (msg);
            }
            public static function hide():void{
                INSTANCE.visible = false;
            }
            public static function notify(message:Object, sender=null):void{
                if (((enableTraceNotify) || (enableTraceAll))){
                    trace((("*** LogPanel.notify(" + arguments) + ")"));
                };
                add(addSender(message, sender), LogPanel.TYPE_NOTIFY);
            }
            public static function clear():void{
                messageList = new Array();
                line_count = 0;
                INSTANCE.logTextField.htmlText = getHeaders();
            }
            private static function getHeaders():String{
                var html:String;
                html = "";
                html = (html + "<p class='headers'>");
                html = (html + (("<p class='shortcut'>shortcut = " + shortcutString) + "</p>"));
                html = (html + (("<p class='copy'><a href='event:" + COPY_EVENT) + "'>copy to clipboard</a></p>"));
                html = (html + "<p class='break'></p>");
                html = (html + (((("<p class='player'>Player: <b>" + Capabilities.version) + "</b> ") + Capabilities.playerType) + "</p>"));
                html = (html + (("<p class='os'>OS: <b>" + Capabilities.os) + "</b>, "));
                html = (html + (((("resolution: <b>" + Capabilities.screenResolutionX) + "×") + Capabilities.screenResolutionY) + "</b></p>"));
                html = (html + (("<p class='externalinterface'>ExternalInterface: <b>" + ((ExternalInterface.available) ? "IS" : "IS NOT")) + "</b> available</p>"));
                html = (html + "<p class='break'></p>");
                html = (html + "</p>");
                return (html);
            }
            public static function notifyIncomingParameters():void{
                var message:String;
                var params:Object;
                var name:String;
                message = "Incoming parameters: [";
                if (INSTANCE.stage){
                    params = INSTANCE.root.loaderInfo.parameters;
                    for (name in params) {
                        message = (message + ((("\n  " + name) + "=") + params[name]));
                    };
                    message = (message + "\n]");
                } else {
                    message = (message + "not accessible]");
                };
                notify(message);
            }
            public static function inform(message, sender=null):void{
                if (((enableTraceInform) || (enableTraceAll))){
                    trace((("LogPanel.inform(" + arguments) + ")"));
                };
                add(addSender(message, sender), LogPanel.TYPE_PLAIN);
            }
    
            private function onKeyUpHandler(event:KeyboardEvent):void{
                var position:Number;
                if (!enabled){
                    return;
                };
                position = getKeyPosition(event);
                if (isNaN(position)){
                    return;
                };
                currentKey = (currentKey & (0xFFFFFFFF ^ (1 << position)));
            }
            private function onKeyDownHandler(event:KeyboardEvent):void{
                var position:Number;
                if (!enabled){
                    return;
                };
                position = getKeyPosition(event);
                if (isNaN(position)){
                    return;
                };
                currentKey = (currentKey | (1 << position));
                if (currentKey == openKey){
                    if (visible){
                        hide();
                    } else {
                        show();
                    };
                };
            }
            private function makeTextField(w:uint, h:uint):TextField{
                var TF:TextField;
                TF = new TextField();
                TF.border = true;
                TF.width = w;
                TF.height = h;
                TF.background = true;
                TF.multiline = true;
                TF.wordWrap = true;
                TF.backgroundColor = 0xFFFFFF;
                TF.styleSheet = new StyleSheet();
                TF.styleSheet.setStyle("p", {
                    fontFamily:FONT,
                    letterSpacing:0,
                    marginLeft:5
                });
                TF.styleSheet.setStyle("a", {textDecoration:"underline"});
                TF.styleSheet.setStyle("a:hover", {
                    textDecoration:"underline",
                    color:"#CC0000"
                });
                TF.styleSheet.setStyle(".count", {
                    color:"#999999",
                    fontSize:10
                });
                TF.styleSheet.setStyle(".time", {
                    color:"#559955",
                    fontSize:10
                });
                TF.styleSheet.setStyle(".copy", {
                    color:"#000066",
                    fontSize:11,
                    fontWeight:"bold"
                });
                TF.styleSheet.setStyle(".shortcut", {color:"#000000"});
                TF.styleSheet.setStyle(".headers", {
                    color:"#666600",
                    fontSize:11
                });
                TF.styleSheet.setStyle(".messages", {
                    color:("#" + StringUtils.addLeadingZeros(COLOR_DEFAULT.toString(16), 6)),
                    fontSize:12
                });
                TF.styleSheet.setStyle(".break", {fontSize:8});
                TF.styleSheet.setStyle(("." + TYPE_PLAIN), {color:("#" + StringUtils.addLeadingZeros(COLOR_PLAIN.toString(16), 6))});
                TF.styleSheet.setStyle(("." + TYPE_ERROR), {
                    color:("#" + StringUtils.addLeadingZeros(COLOR_ERROR.toString(16), 6)),
                    fontWeight:"bold"
                });
                TF.styleSheet.setStyle(("." + TYPE_WARNING), {
                    color:("#" + StringUtils.addLeadingZeros(COLOR_WARNING.toString(16), 6)),
                    fontStyle:"italic"
                });
                TF.styleSheet.setStyle(("." + TYPE_NOTIFY), {color:("#" + StringUtils.addLeadingZeros(COLOR_NOTIFY.toString(16), 6))});
                return (TF);
            }
            private function onResize(event:Event=null):void{
                if (((INSTANCE.stage) && (INSTANCE.visible))){
                    logTextField.height = (INSTANCE.stage.stageHeight - 1);
                    logTextField.width = (INSTANCE.stage.stageWidth / 2);
                };
            }
            private function getKeyPosition(event:KeyboardEvent):Number{
                if (isNaN(charHash[event.charCode])){
                    return (keyCodeHash[event.keyCode]);
                };
                return (charHash[event.charCode]);
            }
            private function buildDebugPanel():void{
                var html:String;
                if (INSTANCE.stage == null){
                    return;
                };
                html = getHeaders();
                html = (html + (("<p class=\"messages\">" + messageList.join("<br/>")) + "</p>"));
                logTextField.htmlText = html;
                logTextField.scrollV = logTextField.maxScrollV;
                onResize();
            }
            private function onAddToStage(event:Event):void{
                INSTANCE.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownHandler);
                INSTANCE.stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUpHandler);
                INSTANCE.stage.addEventListener(KeyboardEvent.KEY_DOWN, onCopyKey);
                INSTANCE.stage.addEventListener(Event.RESIZE, onResize);
                logTextField.height = INSTANCE.stage.stageHeight;
                onResize();
            }
            private function copyToClipboard():void{
                buildDebugPanel();
                System.setClipboard(logTextField.text);
            }
            private function onCopyKey(event:KeyboardEvent):void{
                if (!enabled){
                    return;
                };
                if (((event.ctrlKey) && ((event.charCode == KEY_COPY)))){
                    copyToClipboard();
                };
            }
            private function onLinkTrigger(event:TextEvent):void{
                switch (event.text){
                    case COPY_EVENT:
                        copyToClipboard();
                        break;
                };
                copyToClipboard();
            }
    
        }
    }//package org.noregret.log 
    package org.noregret.utils {
    
        public final class StringUtils {
    
            private static var CACHE_ZEROS:String = "0000000000000000000000000000000";
    
            public function StringUtils(){
                super();
            }
            public static function roundAndFormat(value:Number, intLength:Number, floatLength:Number, fractionDelimiter:String="."):String{
                var decimalRange:Number;
                if (((!(isNaN(floatLength))) && ((floatLength > 0)))){
                    decimalRange = Math.pow(10, floatLength);
                    value = (Math.round((value * decimalRange)) / decimalRange);
                };
                return (trimAndFormat(value, intLength, floatLength, fractionDelimiter));
            }
            public static function floorAndFormat(value:Number, intLength:Number, floatLength:Number, fractionDelimiter:String="."):String{
                return (trimAndFormat(value, intLength, floatLength, fractionDelimiter));
            }
            public static function trimAndFormat(value:Number, intLength:Number, floatLength:Number, fractionDelimiter:String="."):String{
                var decimalRange:Number;
                var result:String;
                var heap:Array;
                var str:String;
                if (((isNaN(intLength)) || ((intLength < 0)))){
                    str = String(int(value));
                    intLength = str.length;
                    if (str.charAt(0) == "-"){
                        intLength--;
                    };
                };
                if (((isNaN(floatLength)) || ((floatLength < 0)))){
                    floatLength = 0;
                };
                decimalRange = Math.pow(10, floatLength);
                result = String((Math.floor((value * decimalRange)) / decimalRange));
                heap = result.split(".");
                if ((((heap.length < 2)) && ((floatLength > 0)))){
                    heap.push("");
                };
                heap[0] = StringUtils.addLeadingZeros(heap[0], intLength);
                if (heap.length > 1){
                    heap[1] = StringUtils.addTrailingZeros(heap[1], floatLength);
                };
                return (heap.join(fractionDelimiter));
            }
            private static function getZeros(len:Number):String{
                var count:Number;
                var i:Number;
                if (CACHE_ZEROS.length >= len){
                    return (CACHE_ZEROS);
                };
                count = CACHE_ZEROS.length;
                i = 0;
                while (i < (len - count)) {
                    CACHE_ZEROS = (CACHE_ZEROS + "0");
                    i++;
                };
                return (CACHE_ZEROS);
            }
            public static function addLeadingZeros(value:Object, len:Number):String{
                var str:String;
                var isNegative:Boolean;
                var strLength:Number;
                var lead:String;
                var result:String;
                str = String(value);
                isNegative = (str.charAt(0) == "-");
                strLength = (str.length - ((isNegative) ? 1 : 0));
                if (((isNaN(len)) || ((strLength >= len)))){
                    return (str);
                };
                lead = getZeros(len);
                result = lead.substr(0, (len - strLength));
                if (isNegative){
                    return ((("-" + result) + str.substr(1)));
                };
                return ((result + str));
            }
            public static function ceilAndFormat(value:Number, intLength:Number, floatLength:Number, fractionDelimiter:String="."):String{
                var decimalRange:Number;
                if (((!(isNaN(floatLength))) && ((floatLength > 0)))){
                    decimalRange = Math.pow(10, floatLength);
                    value = (Math.ceil((value * decimalRange)) / decimalRange);
                };
                return (trimAndFormat(value, intLength, floatLength, fractionDelimiter));
            }
            public static function addTrailingZeros(value:String, len:Number):String{
                var trail:String;
                if (((isNaN(len)) || ((value.length >= len)))){
                    return (value);
                };
                trail = getZeros(len);
                return ((value + trail.substr(0, (len - value.length))));
            }
    
        }
    }//package org.noregret.utils 
    package org.noregret.utils {
        import flash.ui.*;
    
        public class KeyboardHelper {
    
            private static const ARROW_HASH:Object = {};
            private static const F_HASH:Object = {};
            private static const NUMPAD_HASH:Object = {};
            private static const CONTROL_HASH:Object = {};
            private static const NAVIGATION_HASH:Object = {};
            private static const KNOWN_LIST:Array = [ARROW_HASH, NUMPAD_HASH, F_HASH, NAVIGATION_HASH, CONTROL_HASH];
            private static const KNOWN_KEYS_HASH:Object = {};
    
            private static var i:int = 0;
            private static var j:String;
    
            public function KeyboardHelper(){
                super();
                trace("KeyboardHelper.KeyboardHelper(): Class is static! You don't need any instances.");
            }
            public static function getKeyName(keyCode:uint, charCode:uint=0):String{
                if (KNOWN_KEYS_HASH[keyCode]){
                    return (KNOWN_KEYS_HASH[keyCode]);
                };
                if (keyCode < 32){
                    return ((((("key " + keyCode) + "(0x") + StringUtils.addLeadingZeros(keyCode.toString(16).toUpperCase(), 2)) + ")"));
                };
                if (keyCode > 160){
                    return (String.fromCharCode(((charCode) || (keyCode))));
                };
                return (String.fromCharCode(keyCode));
            }
            public static function isSpecialKey(keyCode:uint):Boolean{
                return (Boolean(KNOWN_KEYS_HASH[keyCode]));
            }
            public static function isNumpad(keyCode:uint):Boolean{
                return (Boolean(NUMPAD_HASH[keyCode]));
            }
            public static function isF(keyCode:uint):Boolean{
                return (Boolean(F_HASH[keyCode]));
            }
            public static function isNavigation(keyCode:uint):Boolean{
                return (Boolean(NAVIGATION_HASH[keyCode]));
            }
            public static function isArrow(keyCode:uint):Boolean{
                return (Boolean(ARROW_HASH[keyCode]));
            }
    
            ARROW_HASH[Keyboard.UP] = "arrow up";
            ARROW_HASH[Keyboard.DOWN] = "arrow down";
            ARROW_HASH[Keyboard.LEFT] = "arrow left";
            ARROW_HASH[Keyboard.RIGHT] = "arrow right";
            NUMPAD_HASH[Keyboard.NUMPAD_0] = "numpad 0";
            NUMPAD_HASH[Keyboard.NUMPAD_1] = "numpad 1";
            NUMPAD_HASH[Keyboard.NUMPAD_2] = "numpad 2";
            NUMPAD_HASH[Keyboard.NUMPAD_3] = "numpad 3";
            NUMPAD_HASH[Keyboard.NUMPAD_4] = "numpad 4";
            NUMPAD_HASH[Keyboard.NUMPAD_5] = "numpad 5";
            NUMPAD_HASH[Keyboard.NUMPAD_6] = "numpad 6";
            NUMPAD_HASH[Keyboard.NUMPAD_7] = "numpad 7";
            NUMPAD_HASH[Keyboard.NUMPAD_8] = "numpad 8";
            NUMPAD_HASH[Keyboard.NUMPAD_9] = "numpad 9";
            NUMPAD_HASH[Keyboard.NUMPAD_ADD] = "numpad add";
            NUMPAD_HASH[Keyboard.NUMPAD_MULTIPLY] = "numpad multiply";
            NUMPAD_HASH[Keyboard.NUMPAD_DIVIDE] = "numpad divide";
            NUMPAD_HASH[Keyboard.NUMPAD_SUBTRACT] = "numpad subtract";
            NUMPAD_HASH[Keyboard.NUMPAD_ENTER] = "numpad enter";
            NUMPAD_HASH[Keyboard.NUMPAD_DECIMAL] = "numpad decimal";
            F_HASH[Keyboard.F1] = "f1";
            F_HASH[Keyboard.F2] = "f2";
            F_HASH[Keyboard.F3] = "f3";
            F_HASH[Keyboard.F4] = "f4";
            F_HASH[Keyboard.F5] = "f5";
            F_HASH[Keyboard.F6] = "f6";
            F_HASH[Keyboard.F7] = "f7";
            F_HASH[Keyboard.F8] = "f8";
            F_HASH[Keyboard.F9] = "f9";
            F_HASH[Keyboard.F10] = "f10";
            F_HASH[Keyboard.F11] = "f11";
            F_HASH[Keyboard.F12] = "f12";
            F_HASH[Keyboard.F13] = "f13";
            F_HASH[Keyboard.F14] = "f14";
            F_HASH[Keyboard.F15] = "f15";
            NAVIGATION_HASH[Keyboard.PAGE_DOWN] = "page down";
            NAVIGATION_HASH[Keyboard.PAGE_UP] = "page up";
            NAVIGATION_HASH[Keyboard.HOME] = "home";
            NAVIGATION_HASH[Keyboard.END] = "end";
            NAVIGATION_HASH[Keyboard.INSERT] = "insert";
            NAVIGATION_HASH[Keyboard.DELETE] = "delete";
            CONTROL_HASH[Keyboard.CONTROL] = "control";
            CONTROL_HASH[Keyboard.SHIFT] = "shift";
            CONTROL_HASH[Keyboard.CAPS_LOCK] = "caps lock";
            CONTROL_HASH[144] = "num lock";
            while (i < KNOWN_LIST.length) {
                for (j in KNOWN_LIST[i]) {
                    KNOWN_KEYS_HASH[j] = KNOWN_LIST[i][j];
                };
                i++;
            };
            KNOWN_KEYS_HASH[Keyboard.SPACE] = "space";
            KNOWN_KEYS_HASH[160] = "non-breaking space";
            KNOWN_KEYS_HASH[Keyboard.ENTER] = "enter";
            KNOWN_KEYS_HASH[Keyboard.BACKSPACE] = "backspace";
        }
    }//package org.noregret.utils 
    package ru.isky.external {
        import flash.events.*;
        import flash.net.*;
    
        public class ExternalConnector extends EventDispatcher {
    
            private var connectionClient:Object;
            private var connector:LocalConnection;
    
            public function ExternalConnector(){
                super();
            }
            private function onMessageRecieve(message:Array):void{
                var methodName:String;
                var parameters:Array;
                methodName = message[0];
                parameters = message[1];
                dispatchEvent(new ExternalConnectorEvent(ExternalConnectorEvent.ON_MESSAGE, methodName, parameters));
            }
            public function connect(connectionID:String):void{
                var connectionID:* = connectionID;
                connectionClient = new Object();
                connectionClient[SWFConnector.METHOD_NAME] = onMessageRecieve;
                connector = new LocalConnection();
                connector.client = connectionClient;
                try {
                    connector.connect(connectionID);
                } catch(error:ArgumentError) {
                    throw (new Error("Данное соединение занято"));
                };
            }
    
        }
    }//package ru.isky.external 
    package ru.isky.external {
        import flash.display.*;
        import flash.net.*;
    
        public class SWFConnector extends Sprite {
    
            public static const METHOD_NAME:String = "onCallbackHandler";
    
            public function SWFConnector(){
                var commands:* = null;
                var commandList:* = null;
                var commandXML:* = null;
                var paramslist:* = null;
                var parameters:* = null;
                var i:* = NaN;
                var k:* = NaN;
                super();
                commands = root.loaderInfo.parameters["xml_commands"];
                if ((((commands == null)) || ((commands.length == 0)))){
                    throw (new Error("Variable xml_commands must contain commands"));
                };
                try {
                    commandList = new XMLList(commands);
                } catch(error:Error) {
                    throw (new Error(("Content in xml_commands variable is not valid XML:" + commands)));
                };
                i = 0;
                while (i < commandList.length()) {
                    commandXML = commandList[i];
                    parameters = [];
                    paramslist = commandXML..param;
                    k = 0;
                    while (k < paramslist.length()) {
                        parameters[k] = paramslist[k];
                        k = (k + 1);
                    };
                    executeCommand(commandXML, parameters);
                    i = (i + 1);
                };
            }
            private function executeCommand(commandXML:XML, parameters:Array):void{
                var connector:LocalConnection;
                var connection_id:String;
                var method_name:String;
                connector = new LocalConnection();
                connection_id = commandXML.attribute("targetConnectionID");
                method_name = commandXML.attribute("methodName");
                connector.send(connection_id, METHOD_NAME, [method_name, parameters]);
            }
    
        }
    }//package ru.isky.external 
    package ru.isky.external {
        import flash.events.*;
    
        public class ExternalConnectorEvent extends Event {
    
            public static const ON_CONNECTION_BUSY:String = "onConnectionBusy";
            public static const ON_MESSAGE:String = "onMessageRecieved";
    
            public var parameters:Array;
            public var methodName:String;
    
            public function ExternalConnectorEvent(type:String, _methodName:String=null, _parameters:Array=null, bubbles:Boolean=false, cancelable:Boolean=false){
                super(type, bubbles, cancelable);
                methodName = _methodName;
                parameters = _parameters;
            }
        }
    }//package ru.isky.external 
    package ru.isky.multiloader {
        import flash.events.*;
    
        public class DataLoaderEvent extends Event {
    
            public static const ON_ERROR:String = "onError";
            public static const ON_COMPLETE:String = "onComplete";
            public static const ON_PROGRESS:String = "onProgress";
    
            public var error:String;
            public var id:uint;
    
            public function DataLoaderEvent(type:String, _id:uint, _error:String=null, bubbles:Boolean=false, cancelable:Boolean=false){
                super(type, bubbles, cancelable);
                id = _id;
                error = _error;
            }
            override public function toString():String{
                return (((((("id:" + id) + ", error:") + error) + " ") + super.toString()));
            }
    
        }
    }//package ru.isky.multiloader 
    package ru.isky.multiloader {
        import flash.events.*;
    
        public class MultiloaderEvent extends Event {
    
            public static const ON_ITEM_LOADED:String = "onItemLoaded";
            public static const ON_ERROR:String = "onError";
            public static const ON_COMPLETE:String = "onComplete";
            public static const ON_PROGRESS:String = "onProgress";
            public static const ON_START:String = "onStart";
    
            public var progress:Number;
            public var itemID:Number;
            public var error:String;
    
            public function MultiloaderEvent(type:String, _itemID:Number=NaN, _error:String=null, _progress:Number=NaN, bubbles:Boolean=false, cancelable:Boolean=false){
                super(type, bubbles, cancelable);
                itemID = _itemID;
                error = _error;
                progress = _progress;
            }
        }
    }//package ru.isky.multiloader 
    package ru.isky.multiloader {
        import flash.events.*;
    
        public class CustomLoader extends EventDispatcher {
    
            private var started:Boolean;
            protected var loader:Multiloader;
    
            public function CustomLoader(){
                super();
            }
            protected function onMyItemLoaded(item:Object, parameters:Array=null):void{
            }
            protected function refreshLoader():void{
                removeLoader();
                createLoader();
            }
            protected function onItemLoadError(event:MultiloaderEvent):void{
                throw (new Error(event.error));
            }
            protected function onItemLoaded(event:MultiloaderEvent):void{
                onMyItemLoaded(loader.getContentById(event.itemID), loader.getParametersById(event.itemID));
            }
            protected function createLoader():void{
                loader = new Multiloader();
                loader.addEventListener(MultiloaderEvent.ON_ITEM_LOADED, onItemLoaded);
                loader.addEventListener(MultiloaderEvent.ON_START, onStartLoading);
                loader.addEventListener(MultiloaderEvent.ON_PROGRESS, onLoadProgress);
                loader.addEventListener(MultiloaderEvent.ON_COMPLETE, onLoadComplete);
                loader.addEventListener(MultiloaderEvent.ON_ERROR, onItemLoadError);
            }
            protected function onLoadProgress(event:MultiloaderEvent):void{
            }
            protected function removeLoader():void{
                if (loader){
                    loader.removeEventListener(MultiloaderEvent.ON_ITEM_LOADED, onItemLoaded);
                    loader.removeEventListener(MultiloaderEvent.ON_PROGRESS, onLoadProgress);
                    loader.removeEventListener(MultiloaderEvent.ON_COMPLETE, onLoadComplete);
                    loader.removeEventListener(MultiloaderEvent.ON_ERROR, onItemLoadError);
                    loader.clear();
                    loader = null;
                    started = false;
                };
            }
            private function onStartLoading(event:MultiloaderEvent):void{
                if (started){
                    throw (new Error("After second loading use CustomLoader.refreshLoader()"));
                };
                started = true;
            }
            public function destroy():void{
                removeLoader();
            }
            protected function onLoadComplete(event:MultiloaderEvent):void{
            }
    
        }
    }//package ru.isky.multiloader 
    package ru.isky.multiloader {
        import flash.events.*;
        import flash.system.*;
        import flash.net.*;
        import ru.isky.utils.*;
        import flash.utils.*;
    
        public class Multiloader extends EventDispatcher {
    
            private static const STATUS_IDLE:String = "idle";
            public static const DATA_TEXT:String = "TEXT";
            public static const DATA_BITMAP:String = "BITMAP";
            private static const STATUS_BUSY:String = "busy";
            private static const DATA_TYPES:Object = {};
            public static const DATA_SOUND:String = "SOUND";
            public static const DATA_FLASH:String = "FLASH";
            public static const DATA_BINARY:String = "BINARY";
    
            private var loaded:Number = 0;
            private var _added:uint;
            private var start_time:Number;
            private var load_time:Number;
            public var progress:Number = 0;
            private var loaders:Array;
            private var nextid:uint = 0;
            public var dataList:Array;
            private var defaultLoaderContext:LoaderContext;
            private var waitFramesBetweenLoadings:Number = 0;
            private var waitId:uint;
            private var status:String;
    
            public function Multiloader(loaderContext:LoaderContext=null){
                nextid = 0;
                loaded = 0;
                progress = 0;
                waitFramesBetweenLoadings = 0;
                super();
                if (loaderContext == null){
                    defaultLoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
                } else {
                    defaultLoaderContext = loaderContext;
                };
                loaders = new Array();
                dataList = new Array();
                clear();
            }
            private function onItemError(event:DataLoaderEvent):void{
                if (!hasEventListener(MultiloaderEvent.ON_ERROR)){
                    throw (new Error(event.error));
                };
                dispatchEvent(new MultiloaderEvent(MultiloaderEvent.ON_ERROR, event.id, event.error));
            }
            public function get added():Number{
                return (_added);
            }
            public function add(dataType:String, url:String, parameters:Array=null):Number{
                if (url == "null"){
                    throw (new Error("url is null"));
                };
                return (addItem(dataType, new URLRequest(url), parameters));
            }
            private function loadNextItem():void{
                var dataLoader:DataLoader;
                dataLoader = loaders[loaded];
                trace("dataLoader", dataLoader);
                dataLoader.addEventListener(DataLoaderEvent.ON_COMPLETE, onItemLoaded);
                dataLoader.addEventListener(DataLoaderEvent.ON_ERROR, onItemError);
                dataLoader.addEventListener(DataLoaderEvent.ON_PROGRESS, onItemProgress);
                dataLoader.load();
            }
            public function getContentById(id:Number):Object{
                return ((dataList[id] as DataHolder).content);
            }
            private function onItemLoaded(event:DataLoaderEvent):void{
                loaded++;
                dispatchEvent(new MultiloaderEvent(MultiloaderEvent.ON_ITEM_LOADED, event.id));
                if ((((loaded == loaders.length)) && (!((loaded == 0))))){
                    load_time = (getTimer() - start_time);
                    dispatchEvent(new MultiloaderEvent(MultiloaderEvent.ON_COMPLETE));
                } else {
                    if (status != STATUS_IDLE){
                        waitId = EnterFrameUtils.setTimeout(loadNextItem, waitFramesBetweenLoadings);
                    };
                };
            }
            public function getParametersById(id:Number):Array{
                return ((dataList[id] as DataHolder).parameters);
            }
            public function get loadTime():Number{
                return (load_time);
            }
            private function addItem(dataType:String, request:URLRequest, parameters:Array=null):Number{
                if (status != STATUS_IDLE){
                    throw (new Error("add() method must be called before start() method"));
                };
                if (!DATA_TYPES[dataType]){
                    throw (new Error(("unknown dataType:" + dataType)));
                };
                _added++;
                loaders[nextid] = new DataLoader(nextid, dataType, request, parameters);
                dataList[nextid] = (loaders[nextid] as DataLoader).dataholder;
                nextid++;
                return ((nextid - 1));
            }
            public function clear():void{
                var dataLoader:DataLoader;
                var i:Number;
                EnterFrameUtils.clearTimeout(waitId);
                waitFramesBetweenLoadings = 0;
                i = 0;
                while (i < loaders.length) {
                    dataLoader = loaders[i];
                    dataLoader.removeEventListener(DataLoaderEvent.ON_COMPLETE, onItemLoaded);
                    dataLoader.removeEventListener(DataLoaderEvent.ON_ERROR, onItemError);
                    dataLoader.removeEventListener(DataLoaderEvent.ON_PROGRESS, onItemProgress);
                    dataLoader.destroy();
                    dataLoader = null;
                    i++;
                };
                _added = 0;
                progress = NaN;
                start_time = 0;
                load_time = 0;
                loaded = 0;
                loaders = [];
                dataList = [];
                nextid = 0;
                status = STATUS_IDLE;
            }
            public function getDataHolderById(id:Number):DataHolder{
                return (dataList[id]);
            }
            private function onItemProgress(event:DataLoaderEvent):void{
                var newProgress:Number;
                var dataloader:DataLoader;
                var i:Number;
                newProgress = 0;
                i = 0;
                while (i < loaders.length) {
                    dataloader = loaders[i];
                    if (dataloader.dataholder.bytesTotal > 0){
                        newProgress = (newProgress + (((1 / loaders.length) * (1 / dataloader.dataholder.bytesTotal)) * dataloader.dataholder.bytesLoaded));
                    };
                    i++;
                };
                if (newProgress >= 1){
                    newProgress = 1;
                };
                if (newProgress != progress){
                    progress = newProgress;
                    dispatchEvent(new MultiloaderEvent(MultiloaderEvent.ON_PROGRESS, NaN, null, progress));
                };
            }
            public function start(framesTimeoutBetweenLoadings:Number=1):void{
                trace("loader start");
                waitFramesBetweenLoadings = framesTimeoutBetweenLoadings;
                if (status == STATUS_IDLE){
                    if (loaders.length == 0){
                        throw (new Error("Use add() method before start()"));
                    };
                    loadNextItem();
                    status = STATUS_BUSY;
                    start_time = getTimer();
                    dispatchEvent(new MultiloaderEvent(MultiloaderEvent.ON_START));
                } else {
                    throw (new Error("Multiloader уже был запущен"));
                };
            }
            public function close():void{
                var dataLoader:DataLoader;
                var i:Number;
                i = 0;
                while (i < loaders.length) {
                    dataLoader = loaders[i];
                    dataLoader.close();
                    i++;
                };
            }
    
            DATA_TYPES[DATA_TEXT] = true;
            DATA_TYPES[DATA_BITMAP] = true;
            DATA_TYPES[DATA_FLASH] = true;
            DATA_TYPES[DATA_BINARY] = true;
            DATA_TYPES[DATA_SOUND] = true;
        }
    }//package ru.isky.multiloader 
    package ru.isky.multiloader {
        import flash.display.*;
        import flash.net.*;
        import flash.media.*;
    
        public class DataHolder {
    
            private var _loaderInfo:Object;
            private var __datatype:String;
            public var loader:Object;
            private var __url:String;
            public var loadTime:Number;
            public var parameters:Array;
            private var __id:Number;
    
            public function DataHolder(_id:Number, _datatype:String, _url:String, _parameters:Array=null){
                super();
                __datatype = _datatype;
                __url = _url;
                __id = _id;
                parameters = _parameters;
            }
            public function get dataType():String{
                return (__datatype);
            }
            public function get bytesLoaded():Number{
                return (loaderInfo["bytesLoaded"]);
            }
            public function get bytesTotal():Number{
                return (loaderInfo["bytesTotal"]);
            }
            public function get id():Number{
                return (__id);
            }
            private function get loaderInfo():Object{
                if (_loaderInfo == null){
                    if ((((__datatype == Multiloader.DATA_FLASH)) || ((__datatype == Multiloader.DATA_BITMAP)))){
                        _loaderInfo = (loader as Loader).contentLoaderInfo;
                    };
                    if ((((__datatype == Multiloader.DATA_TEXT)) || ((__datatype == Multiloader.DATA_BINARY)))){
                        _loaderInfo = loader;
                    };
                    if (__datatype == Multiloader.DATA_SOUND){
                        _loaderInfo = loader;
                    };
                };
                return (_loaderInfo);
            }
            public function get url():String{
                return (__url);
            }
            public function get content():Object{
                var data:Object;
                if ((((__datatype == Multiloader.DATA_BITMAP)) || ((__datatype == Multiloader.DATA_FLASH)))){
                    data = (loader as Loader).content;
                };
                if ((((__datatype == Multiloader.DATA_TEXT)) || ((__datatype == Multiloader.DATA_BINARY)))){
                    data = (loader as URLLoader).data;
                };
                if (__datatype == Multiloader.DATA_SOUND){
                    data = (loader as Sound);
                };
                return (data);
            }
            public function destroy():void{
                _loaderInfo = null;
                loader = null;
                parameters = null;
            }
    
        }
    }//package ru.isky.multiloader 
    package ru.isky.multiloader {
        import flash.events.*;
        import flash.display.*;
        import flash.net.*;
        import flash.utils.*;
        import flash.media.*;
    
        public class DataLoader extends EventDispatcher {
    
            private var startTime:uint;
            public var dataholder:DataHolder;
            private var dispatcher:IEventDispatcher;
            private var request:URLRequest;
    
            public function DataLoader(_id:Number, _dataType:String, _request:URLRequest, _parameters:Array=null){
                super();
                dataholder = new DataHolder(_id, _dataType, _request.url, _parameters);
                request = _request;
                if ((((dataholder.dataType == Multiloader.DATA_FLASH)) || ((dataholder.dataType == Multiloader.DATA_BITMAP)))){
                    dataholder.loader = new Loader();
                    dispatcher = (dataholder.loader as Loader).contentLoaderInfo;
                };
                if ((((dataholder.dataType == Multiloader.DATA_TEXT)) || ((dataholder.dataType == Multiloader.DATA_BINARY)))){
                    dataholder.loader = new URLLoader();
                    if (dataholder.dataType == Multiloader.DATA_BINARY){
                        (dataholder.loader as URLLoader).dataFormat = URLLoaderDataFormat.BINARY;
                    };
                    dispatcher = (dataholder.loader as URLLoader);
                };
                if (dataholder.dataType == Multiloader.DATA_SOUND){
                    dataholder.loader = new Sound();
                    dispatcher = (dataholder.loader as Sound);
                };
            }
            public function destroy():void{
                close();
                dataholder.destroy();
                dataholder = null;
                request = null;
            }
            private function onErrorHandler(event:IOErrorEvent):void{
                dispatchEvent(new DataLoaderEvent(DataLoaderEvent.ON_ERROR, dataholder.id, event.toString()));
            }
            public function load():void{
                startTime = getTimer();
                dispatcher.addEventListener(Event.COMPLETE, onCompleteHandler);
                dispatcher.addEventListener(IOErrorEvent.IO_ERROR, onErrorHandler);
                dispatcher.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
                try {
                    var _local2 = dataholder.loader;
                    _local2["load"](request);
                } catch(loader_error:Error) {
                    onError(loader_error);
                };
            }
            private function onError(error:Error):void{
                dispatchEvent(new DataLoaderEvent(DataLoaderEvent.ON_ERROR, dataholder.id, error.toString()));
            }
            private function onCompleteHandler(event:Event):void{
                dataholder.loadTime = (getTimer() - startTime);
                dispatcher.removeEventListener(Event.COMPLETE, onCompleteHandler);
                dispatcher.removeEventListener(IOErrorEvent.IO_ERROR, onErrorHandler);
                dispatcher.removeEventListener(ProgressEvent.PROGRESS, onProgressHandler);
                dispatchEvent(new DataLoaderEvent(DataLoaderEvent.ON_COMPLETE, dataholder.id));
            }
            public function close():void{
                try {
                    var _local2 = dataholder.loader;
                    _local2["close"]();
                } catch(error:Error) {
                    onError(error);
                };
            }
            private function onProgressHandler(event:ProgressEvent):void{
                dispatchEvent(new DataLoaderEvent(DataLoaderEvent.ON_PROGRESS, dataholder.id));
            }
            public function unload():void{
                if ((((dataholder.dataType == Multiloader.DATA_BITMAP)) || ((dataholder.dataType == Multiloader.DATA_FLASH)))){
                    try {
                        (dataholder.loader as Loader).unload();
                    } catch(error:Error) {
                        onError(error);
                    };
                };
                dataholder.loader = null;
            }
    
        }
    }//package ru.isky.multiloader 
    package ru.isky.geom.d2 {
        import flash.geom.*;
    
        public class Point2DTools {
    
            public function Point2DTools(){
                super();
            }
            public static function displace(src:Point, displaceX:Number=0, displaceY:Number=0):Point{
                return (new Point((src.x + displaceX), (src.y + displaceY)));
            }
            public static function distance(_P1:Point, _P2:Point):Number{
                var distance:Number;
                var katetA:Number;
                var katetB:Number;
                katetA = Math.abs((_P1.x - _P2.x));
                katetB = Math.abs((_P1.y - _P2.y));
                if (katetA == 0){
                    distance = Math.abs((_P1.y - _P2.y));
                } else {
                    if (katetB == 0){
                        distance = Math.abs((_P1.x - _P2.x));
                    } else {
                        distance = Math.sqrt(((katetA * katetA) + (katetB * katetB)));
                    };
                };
                return (distance);
            }
            public static function rotateAt(targetPoint:Point, centerPoint:Point, angle_rad:Number):Point{
                var radius:Number;
                var currentAngle:Number;
                var newAngle:Number;
                var endX:Number;
                var endY:Number;
                radius = distance(targetPoint, centerPoint);
                currentAngle = (Math.atan2((targetPoint.x - centerPoint.x), (targetPoint.y - centerPoint.y)) * -1);
                newAngle = (currentAngle + angle_rad);
                endX = ((Math.cos(newAngle) * radius) + centerPoint.x);
                endY = ((Math.sin(newAngle) * radius) + centerPoint.y);
                return (new Point(endX, endY));
            }
    
        }
    }//package ru.isky.geom.d2 
    package ru.isky.math {
        import flash.geom.*;
    
        public class RectangleUtils {
    
            public static const SIT_TYPE_INSIDE:String = "inside";
            public static const SIT_TYPE_OUTSIDE:String = "outside";
    
            public function RectangleUtils(){
                super();
            }
            public static function sitRectangle(rectangle0:Rectangle, rectangle1:Rectangle, type:String="inside"):Rectangle{
                var w_prop:Number;
                var h_prop:Number;
                var prop0:Number;
                rectangle0 = rectangle0.clone();
                w_prop = (rectangle0.width / rectangle1.width);
                h_prop = (rectangle1.height / rectangle1.height);
                prop0 = (rectangle0.width / rectangle0.height);
                if ((((w_prop > h_prop)) && ((type == SIT_TYPE_INSIDE)))){
                    rectangle0.width = rectangle1.width;
                    rectangle0.height = (rectangle0.width / prop0);
                } else {
                    rectangle0.height = rectangle1.height;
                    rectangle0.width = (rectangle0.height * prop0);
                };
                return (rectangle0);
            }
    
        }
    }//package ru.isky.math 
    package ru.isky.gazprom.gallery {
        import flash.events.*;
        import flash.display.*;
    
        public class GalleryLoaderEvent extends Event {
    
            public static const ON_COMPLETE:String = "ON_COMPLETE";
            public static const ON_CONFIG_LOADED:String = "ON_CONFIG_LOADED";
            public static const ON_DEFAULT_IMAGE_LOADED:String = "ON_DEFAULT_IMAGE_LOADED";
            public static const ON_ALL_IMAGES_LOAD_PROGRESS:String = "ON_ALL_IMAGES_LOAD_PROGRESS";
    
            public var allImagesProgress:Number;
            public var defaultImage:Bitmap;
    
            public function GalleryLoaderEvent(type:String, _defaultImage:Bitmap=null, _allImagesProgress:Number=0, bubbles:Boolean=false, cancelable:Boolean=false){
                super(type, bubbles, cancelable);
                defaultImage = _defaultImage;
                allImagesProgress = _allImagesProgress;
            }
        }
    }//package ru.isky.gazprom.gallery 
    package ru.isky.gazprom.gallery {
        import flash.events.*;
        import caurina.transitions.*;
        import flash.geom.*;
        import flash.display.*;
        import flash.text.*;
        import ru.isky.utils.*;
    
        public class Preloader extends Sprite {
    
            private var cellsAmount:Number;
            private var image:Bitmap;
            private var randomCells:Array;
            private var lastVisibleAmount:Number = 0;
            public var tf:TextField;
            private var container:Sprite;
            private var previousCell:Sprite;
    
            public function Preloader(defaultImage:Bitmap){
                lastVisibleAmount = 0;
                randomCells = [];
                super();
                image = defaultImage;
                container = new Sprite();
                addChild(container);
                tf = new TextField();
                tf.autoSize = TextFieldAutoSize.LEFT;
            }
            public function updateProgress(value:Number):void{
                var visibleAmount:Number;
                tf.text = (Math.round((value * 100)) + "%");
                visibleAmount = Math.round((value * cellsAmount));
                if (lastVisibleAmount != visibleAmount){
                    lastVisibleAmount = visibleAmount;
                    trace(lastVisibleAmount);
                    showPartImage(lastVisibleAmount);
                };
            }
            private function showPartImage(amount:Number):void{
                var j:Number;
                var i:Number;
                var cell:Sprite;
                j = 0;
                while (j < amount) {
                    i = 0;
                    while (i < cellsAmount) {
                        cell = (container.getChildAt(i) as Sprite);
                        if (i == randomCells[j]){
                            if (cell.alpha != 1){
                                if (Tweener.isTweening(cell) != true){
                                    Tweener.addTween(cell, {
                                        alpha:1,
                                        time:0.5
                                    });
                                };
                            };
                        };
                        i++;
                    };
                    j++;
                };
            }
            public function buildMatrix(amount:Number):void{
                var arr:Array;
                var w_images:Number;
                var h_images:Number;
                var matrixItemWidth:int;
                var matrixItemHeight:int;
                var i:Number;
                var k:Number;
                var j:Number;
                var bitmapData:BitmapData;
                var bmp:Bitmap;
                var spr:Sprite;
                arr = ImagesRectangle.getRectangleSidesQuantity(amount);
                w_images = arr[0];
                trace(w_images);
                h_images = arr[1];
                trace(h_images);
                cellsAmount = (w_images * h_images);
                matrixItemWidth = (image.width / w_images);
                matrixItemHeight = (image.height / h_images);
                i = 0;
                while (i < h_images) {
                    j = 0;
                    while (j < w_images) {
                        bitmapData = new BitmapData(matrixItemWidth, matrixItemHeight, false);
                        bitmapData.copyPixels(image.bitmapData, new Rectangle((j * matrixItemWidth), (i * matrixItemHeight), matrixItemWidth, matrixItemHeight), new Point());
                        bmp = new Bitmap(bitmapData);
                        bmp.x = (j * matrixItemWidth);
                        bmp.y = (i * matrixItemHeight);
                        spr = new Sprite();
                        spr.addChild(bmp);
                        spr.alpha = 0;
                        spr.addEventListener(MouseEvent.MOUSE_OVER, onMouseOverHandler);
                        container.addChild(spr);
                        j++;
                    };
                    i++;
                };
                k = 0;
                while (k < cellsAmount) {
                    randomCells.push(k);
                    k++;
                };
                ArrayUtils.shuffle(randomCells);
                trace(randomCells);
            }
            private function onMouseOverHandler(event:MouseEvent):void{
                var cell:Sprite;
                trace("mouseOver");
                cell = (event.target as Sprite);
                if (cell.alpha <= 0.5){
                    Tweener.addTween(cell, {
                        alpha:0.6,
                        time:2
                    });
                } else {
                    if (cell.alpha != 1){
                        Tweener.addTween(cell, {
                            alpha:0,
                            time:2
                        });
                    };
                };
                previousCell = cell;
            }
    
        }
    }//package ru.isky.gazprom.gallery 
    package ru.isky.gazprom.gallery {
    
        public class ImagesStorage extends DataStorage {
    
            public var data:Array;
    
            public function ImagesStorage(){
                super();
                data = [];
            }
            override public function addData(_data:Object, href:String):void{
                super.addData(_data, href);
                data.push(_data);
            }
    
        }
    }//package ru.isky.gazprom.gallery 
    package ru.isky.gazprom.gallery {
    
        public interface IClonableDisplayObject {
    
            function set x(_arg1:Number):void;
            function set y(_arg1:Number):void;
            function get width():Number;
            function get height():Number;
            function get x():Number;
            function get y():Number;
            function clone():IClonableDisplayObject;
    
        }
    }//package ru.isky.gazprom.gallery 
    package ru.isky.gazprom.gallery {
        import flash.display.*;
    
        public class CloneGrid extends Sprite {
    
            private var item:IClonableDisplayObject;
            private var item_width:Number;
            private var item_height:Number;
            public var rows:Array;
    
            public function CloneGrid(item:IClonableDisplayObject, item_width:Number=NaN, item_height:Number=NaN){
                super();
                rows = [];
                this.item_width = ((item_width) || (item.width));
                this.item_height = ((item_height) || (item.height));
                this.item = item;
            }
            public function addBottomRow():void{
                addRow();
            }
            public function addRightColumn():void{
                addColumn();
            }
            private function removeArray(objects:Array=null):void{
                var target:IClonableDisplayObject;
                var i:Number;
                if (!objects){
                    return;
                };
                i = 0;
                while (i < objects.length) {
                    target = objects[i];
                    removeChild((target as DisplayObject));
                    target = null;
                    i++;
                };
                objects = null;
            }
            private function addColumn(left:Boolean=false):void{
                var newItem:IClonableDisplayObject;
                var row:Array;
                var i:Number;
                if (rows.length == 0){
                    rows.push([getItemCopy()]);
                    return;
                };
                i = 0;
                while (i < rows.length) {
                    row = rows[i];
                    newItem = getItemCopy();
                    if (left){
                        newItem.x = (row[0].x - item_width);
                        newItem.y = row[0].y;
                        row.unshift(newItem);
                    } else {
                        newItem.x = (row[(row.length - 1)].x + item_width);
                        newItem.y = row[0].y;
                        row.push(newItem);
                    };
                    i++;
                };
            }
            public function removeRightColumn():void{
                removeColumn();
            }
            public function addTopRow():void{
                addRow(true);
            }
            private function addRow(top:Boolean=false):void{
                var row:Array;
                var newRow:Array;
                var newItem:IClonableDisplayObject;
                var i:Number;
                if (rows.length == 0){
                    rows.push([getItemCopy()]);
                    return;
                };
                row = rows[0];
                newRow = [];
                i = 0;
                while (i < row.length) {
                    newItem = getItemCopy();
                    if (top){
                        row = rows[0];
                        newItem.x = row[i].x;
                        newItem.y = (row[0].y - item_height);
                    } else {
                        row = rows[(rows.length - 1)];
                        newItem.x = row[i].x;
                        newItem.y = (row[(row.length - 1)].y + item_height);
                    };
                    newRow.push(newItem);
                    i++;
                };
                if (top){
                    rows.unshift(newRow);
                } else {
                    rows.push(newRow);
                };
            }
            public function removeBottomRow():void{
                removeRow();
            }
            private function removeRow(top:Boolean=false):void{
                if (!rows.length){
                    return;
                };
                if (top){
                    removeArray(rows.shift());
                } else {
                    removeArray(rows.pop());
                };
            }
            public function addLeftColumn():void{
                addColumn(true);
            }
            private function getItemCopy():IClonableDisplayObject{
                return ((addChild((item.clone() as DisplayObject)) as IClonableDisplayObject));
            }
            public function removeLeftColumn():void{
                removeColumn(true);
            }
            public function removeTopRow():void{
                removeRow(true);
            }
            private function removeColumn(left:Boolean=false):void{
                var itemIndex:int;
                var row:Array;
                var i:Number;
                if (!rows.length){
                    return;
                };
                itemIndex = (rows[0].length - 1);
                if (left){
                    itemIndex = 0;
                };
                i = 0;
                while (i < rows.length) {
                    row = rows[i];
                    if (left){
                        removeChild(row.shift());
                    } else {
                        removeChild(row.pop());
                    };
                    i++;
                };
                if (row.length == 0){
                    rows = [];
                };
            }
    
        }
    }//package ru.isky.gazprom.gallery 
    package ru.isky.gazprom.gallery {
    
        public class DataStorage {
    
            private var _length:int = 0;
            protected var storage:Object;
    
            public function DataStorage(){
                _length = 0;
                super();
                storage = new Object();
            }
            public function getDataByHref(href:String):Object{
                return (storage[href]);
            }
            public function addData(data:Object, href:String):void{
                if (storage[href] == null){
                    _length++;
                };
                storage[href] = data;
            }
            public function get length():int{
                return (_length);
            }
    
        }
    }//package ru.isky.gazprom.gallery 
    package ru.isky.gazprom.gallery {
        import flash.events.*;
    
        public class ImagesLoaderEvent extends Event {
    
            public static const ON_COMPLETE:String = "onComplete";
            public static const ON_PROGRESS:String = "onProgress";
    
            public var progress:Number;
    
            public function ImagesLoaderEvent(type:String, _progress:Number, bubbles:Boolean=false, cancelable:Boolean=false){
                super(type, bubbles, cancelable);
                progress = _progress;
            }
        }
    }//package ru.isky.gazprom.gallery 
    package ru.isky.gazprom.gallery {
        import flash.geom.*;
        import flash.display.*;
        import ru.isky.utils.*;
    
        public class Gallery extends WEBDocument {
    
            private var galleryLoader:GalleryLoader;
            private var map:Map;
            public var preloader:Preloader;
            private var defaultImage:Bitmap;
    
            public function Gallery(){
                var configHref:String;
                super();
                galleryLoader = new GalleryLoader();
                galleryLoader.addEventListener(GalleryLoaderEvent.ON_DEFAULT_IMAGE_LOADED, onDefaultImageLoaded);
                galleryLoader.addEventListener(GalleryLoaderEvent.ON_ALL_IMAGES_LOAD_PROGRESS, onImagesLoadProgress);
                galleryLoader.addEventListener(GalleryLoaderEvent.ON_COMPLETE, onImagesLoaded);
                configHref = ((root.loaderInfo.parameters["config_href"]) || ("config.xml"));
                galleryLoader.loadConfig(configHref);
            }
            private function onImagesLoaded(event:GalleryLoaderEvent):void{
                removeChild(preloader);
                defaultImage.visible = false;
                map = new Map(new ImagesRectangle(galleryLoader.storage), new Rectangle(0, 0, 710, 350));
                addChild(map);
                map.initExternal();
                map.addCallBacks();
                map.showAll();
            }
            private function onImagesLoadProgress(event:GalleryLoaderEvent):void{
                preloader.updateProgress(event.allImagesProgress);
            }
            private function onDefaultImageLoaded(event:GalleryLoaderEvent):void{
                defaultImage = event.defaultImage;
                preloader = new Preloader(defaultImage);
                preloader.x = (preloader.y = 0);
                addChild(preloader);
                preloader.buildMatrix(galleryLoader.imagesAmount);
                defaultImage.alpha = 0;
            }
    
        }
    }//package ru.isky.gazprom.gallery 
    package ru.isky.gazprom.gallery {
        import flash.events.*;
        import caurina.transitions.*;
        import flash.geom.*;
        import ru.actionsmile.utils.*;
        import flash.display.*;
        import ru.isky.external.*;
        import ru.isky.geom.d2.*;
        import ru.isky.math.*;
        import org.noregret.log.*;
        import flash.utils.*;
    
    Ответ написан
    3 комментария
  • Программу для напоминания?

    Shultc
    @Shultc
    RnD Developer
    Блин, я бы подсказал, но… забыл.
    Ответ написан
    1 комментарий