if(!window.qxsettings)qxsettings={};
qxsettings["qx.application"]="spamfighter.Application";
qxsettings["qx.theme"]="qx.theme.Classic";
qxsettings["qx.version"]="0.8.2-pre";

if(!window.qxvariants)qxvariants={};
qxvariants["qx.debug"]="off";

if(!window.qxlibraries)qxlibraries={};qxlibraries["qx"]={"resourceUri":"resource","version":"trunk"};qxlibraries["spamfighter"]={"resourceUri":"resource","version":"trunk"};

if(!window.qxresources)qxresources={"qx/decoration/Classic/arrows/down-small-invert.gif": [5, 3, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -15, 0], "qx/decoration/Classic/menu/checkbox-invert.gif": [16, 7, "gif", "qx", "qx/decoration/Classic/menu-combined.gif", -16, 0], "qx/decoration/Classic/arrows-combined.gif": [124, 7, "gif", "qx"], "spamfighter/icon/22/actions/list-add.png": [22, 22, "png", "spamfighter"], "qx/decoration/Classic/treevirtual/start_minus.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/arrows/left.gif": [4, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -20, 0], "qx/decoration/Classic/arrows/previous-invert.gif": [4, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -40, 0], "qx/decoration/Classic/shadow/shadow-small-tr.png": [5, 5, "png", "qx", "qx/decoration/Classic/shadow-small-tb-combined.png", 0, -5], "qx/decoration/Classic/datechooser/next-year.png": [16, 16, "png", "qx"], "qx/decoration/Classic/cursors/alias.gif": [19, 15, "gif", "qx", "qx/decoration/Classic/cursors-combined.gif", -33, 0], "qx/decoration/Classic/datechooser/last-month-invert.png": [16, 16, "png", "qx"], "qx/decoration/Classic/cursors-combined.gif": [71, 20, "gif", "qx"], "qx/decoration/Classic/treevirtual/end_plus.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/table/descending.png": [10, 10, "png", "qx", "qx/decoration/Classic/table-combined.png", 0, 0], "spamfighter/icon/16/apps/utilities-archiver.png": [16, 16, "png", "spamfighter"], "qx/decoration/Classic/menu/checkbox.gif": [16, 7, "gif", "qx", "qx/decoration/Classic/menu-combined.gif", 0, 0], "qx/decoration/Classic/shadow/shadow-small-c.png": [40, 136, "png", "qx"], "qx/decoration/Classic/shadow/shadow-bl.png": [15, 15, "png", "qx", "qx/decoration/Classic/shadow-tb-combined.png", 0, -15], "qx/decoration/Classic/splitpane/knob-vertical.png": [15, 4, "png", "qx"], "qx/decoration/Classic/table/descending-invert.png": [10, 10, "png", "qx", "qx/decoration/Classic/table-combined.png", -30, 0], "qx/decoration/Classic/tree/minus.gif": [19, 16, "gif", "qx"], "spamfighter/icon/22/actions/media-playback-start.png": [22, 22, "png", "spamfighter"], "qx/decoration/Classic/splitpane/knob-horizontal.png": [4, 15, "png", "qx"], "qx/decoration/Classic/table-combined.png": [72, 11, "png", "qx"], "qx/decoration/Classic/shadow/shadow-small-br.png": [5, 5, "png", "qx", "qx/decoration/Classic/shadow-small-tb-combined.png", 0, -25], "qx/decoration/Classic/table/ascending-invert.png": [10, 10, "png", "qx", "qx/decoration/Classic/table-combined.png", -10, 0], "qx/decoration/Classic/form/checkbox-checked-hovered.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -140, 0], "spamfighter/icon/22/apps/utilities-terminal.png": [22, 22, "png", "spamfighter"], "qx/icon/Oxygen/16/places/folder.png": [16, 16, "png", "qx"], "qx/decoration/Classic/shadow-tb-combined.png": [15, 90, "png", "qx"], "qx/decoration/Classic/arrows/forward.gif": [8, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -44, 0], "qx/decoration/Classic/shadow/shadow-small-tl.png": [5, 5, "png", "qx", "qx/decoration/Classic/shadow-small-tb-combined.png", 0, 0], "qx/decoration/Classic/treevirtual/start.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/shadow/shadow-br.png": [15, 15, "png", "qx", "qx/decoration/Classic/shadow-tb-combined.png", 0, -75], "spamfighter/icon/16/apps/internet-blog.png": [16, 16, "png", "spamfighter"], "qx/decoration/Classic/menu/radiobutton.gif": [16, 5, "gif", "qx", "qx/decoration/Classic/menu-combined.gif", -48, 0], "qx/decoration/Classic/arrows/up-small.gif": [5, 3, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -3, 0], "qx/decoration/Classic/window/maximize.gif": [9, 9, "gif", "qx", "qx/decoration/Classic/window-captionbar-buttons-combined.gif", -17, 0], "qx/decoration/Classic/treevirtual/start_plus.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/arrows/right-invert.gif": [4, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -104, 0], "qx/decoration/Classic/treevirtual/cross_minus.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/arrows/left-small.gif": [3, 5, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -82, 0], "qx/decoration/Classic/shadow/shadow-small-b.png": [5, 5, "png", "qx", "qx/decoration/Classic/shadow-small-tb-combined.png", 0, -20], "qx/decoration/Classic/cursors/copy.gif": [19, 15, "gif", "qx", "qx/decoration/Classic/cursors-combined.gif", -52, 0], "qx/decoration/Classic/arrows/rewind-invert.gif": [8, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -67, 0], "qx/decoration/Classic/arrows/right-small.gif": [3, 5, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", 0, 0], "qx/icon/Oxygen/16/places/folder-open.png": [16, 16, "png", "qx"], "qx/decoration/Classic/menu/radiobutton-invert.gif": [16, 5, "gif", "qx", "qx/decoration/Classic/menu-combined.gif", -32, 0], "spamfighter/icon/22/actions/view-refresh.png": [22, 22, "png", "spamfighter"], "spamfighter/icon/22/actions/help-faq.png": [22, 22, "png", "spamfighter"], "qx/icon/Oxygen/16/apps/office-calendar.png": [16, 16, "png", "qx"], "qx/decoration/Classic/datechooser/next-month.png": [16, 16, "png", "qx"], "qx/decoration/Classic/datechooser/last-year.png": [16, 16, "png", "qx"], "qx/decoration/Classic/cursors/move.gif": [13, 9, "gif", "qx", "qx/decoration/Classic/cursors-combined.gif", -20, 0], "spamfighter/icon/16/apps/preferences-locale.png": [16, 16, "png", "spamfighter"], "qx/decoration/Classic/arrows/up-small-invert.gif": [5, 3, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -24, 0], "qx/decoration/Classic/shadow/shadow-l.png": [15, 382, "png", "qx", "qx/decoration/Classic/shadow-lr-combined.png", -15, 0], "qx/decoration/Classic/arrows/up-invert.gif": [7, 4, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -92, 0], "qx/decoration/Classic/shadow/shadow-tr.png": [15, 15, "png", "qx", "qx/decoration/Classic/shadow-tb-combined.png", 0, 0], "qx/decoration/Classic/datechooser/last-month.png": [16, 16, "png", "qx"], "qx/decoration/Classic/table/select-column-order.png": [10, 9, "png", "qx", "qx/decoration/Classic/table-combined.png", -20, 0], "qx/decoration/Classic/arrows/previous.gif": [4, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -112, 0], "qx/decoration/Classic/form/checkbox-hovered.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -126, 0], "qx/decoration/Classic/window/minimize.gif": [9, 9, "gif", "qx", "qx/decoration/Classic/window-captionbar-buttons-combined.gif", -8, 0], "qx/decoration/Classic/shadow/shadow-small-bl.png": [5, 5, "png", "qx", "qx/decoration/Classic/shadow-small-tb-combined.png", 0, -15], "qx/decoration/Classic/treevirtual/end_minus.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/arrows/down-invert.gif": [7, 4, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -56, 0], "qx/decoration/Classic/form/radiobutton-checked-hovered.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -70, 0], "qx/decoration/Classic/shadow/shadow-small-l.png": [5, 136, "png", "qx", "qx/decoration/Classic/shadow-small-lr-combined.png", 0, 0], "qx/decoration/Classic/colorselector/brightness-field.png": [19, 256, "png", "qx"], "qx/decoration/Classic/arrows/forward-invert.gif": [8, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -116, 0], "qx/decoration/Classic/form/radiobutton-focused.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -154, 0], "qx/decoration/Classic/datechooser/last-year-invert.png": [16, 16, "png", "qx"], "qx/decoration/Classic/datechooser/next-year-invert.png": [16, 16, "png", "qx"], "qx/decoration/Classic/shadow/shadow-b.png": [15, 15, "png", "qx", "qx/decoration/Classic/shadow-tb-combined.png", 0, -45], "spamfighter/icon/16/apps/utilities-dictionary.png": [16, 16, "png", "spamfighter"], "qx/decoration/Classic/arrows/right.gif": [4, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -88, 0], "qx/decoration/Classic/colorselector/brightness-handle.gif": [35, 11, "gif", "qx", "qx/decoration/Classic/colorselector-combined.gif", 0, 0], "qx/decoration/Classic/treevirtual/end.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/checkbox-radiobutton-combined.png": [280, 14, "png", "qx"], "qx/decoration/Classic/colorselector-combined.gif": [46, 11, "gif", "qx"], "spamfighter/icon/22/actions/dialog-apply.png": [22, 22, "png", "spamfighter"], "qx/icon/Oxygen/16/actions/view-refresh.png": [16, 16, "png", "qx"], "qx/decoration/Classic/arrows/next-invert.gif": [4, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -63, 0], "qx/decoration/Classic/arrows/down.gif": [7, 4, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -75, 0], "spamfighter/icon/22/actions/edit-undo.png": [22, 22, "png", "spamfighter"], "qx/decoration/Classic/shadow-small-tb-combined.png": [5, 30, "png", "qx"], "qx/decoration/Classic/arrows/left-invert.gif": [4, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -52, 0], "qx/icon/Oxygen/16/actions/dialog-cancel.png": [16, 16, "png", "qx"], "qx/decoration/Classic/form/radiobutton-checked-pressed.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -224, 0], "qx/decoration/Classic/form/radiobutton-hovered.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -196, 0], "qx/decoration/Classic/shadow-lr-combined.png": [30, 382, "png", "qx"], "spamfighter/icon/22/actions/dialog-cancel.png": [22, 22, "png", "spamfighter"], "qx/decoration/Classic/form/checkbox-pressed.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -28, 0], "qx/decoration/Classic/colorselector/huesaturation-field.jpg": [256, 256, "jpeg", "qx"], "qx/decoration/Classic/menu-combined.gif": [64, 7, "gif", "qx"], "spamfighter/icon/16/apps/utilities-help.png": [16, 16, "png", "spamfighter"], "spamfighter/icon/22/apps/utilities-help.png": [22, 22, "png", "spamfighter"], "qx/decoration/Classic/form/checkbox-checked.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -210, 0], "qx/decoration/Classic/arrows/down-small.gif": [5, 3, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -99, 0], "qx/decoration/Classic/arrows/right-small-invert.gif": [3, 5, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -85, 0], "qx/decoration/Classic/treevirtual/cross_plus.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/form/radiobutton-checked-focused.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -112, 0], "qx/decoration/Classic/form/checkbox.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -98, 0], "qx/decoration/Classic/cursors/nodrop.gif": [20, 20, "gif", "qx", "qx/decoration/Classic/cursors-combined.gif", 0, 0], "qx/decoration/Classic/form/radiobutton-disabled.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -168, 0], "qx/decoration/Classic/form/radiobutton-checked.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -252, 0], "qx/decoration/Classic/form/checkbox-focused.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -238, 0], "qx/decoration/Classic/form/checkbox-checked-disabled.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -84, 0], "qx/decoration/Classic/shadow/shadow-c.png": [40, 382, "png", "qx"], "qx/decoration/Classic/table/boolean-false.png": [11, 11, "png", "qx", "qx/decoration/Classic/table-combined.png", -61, 0], "qx/decoration/Classic/form/checkbox-checked-focused.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", 0, 0], "qx/decoration/Classic/shadow/shadow-r.png": [15, 382, "png", "qx", "qx/decoration/Classic/shadow-lr-combined.png", 0, 0], "spamfighter/icon/22/emotes/face-sad.png": [22, 22, "png", "spamfighter"], "qx/decoration/Classic/arrows/rewind.gif": [8, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -29, 0], "qx/decoration/Classic/window-captionbar-buttons-combined.gif": [36, 9, "gif", "qx"], "qx/decoration/Classic/window/restore.gif": [8, 9, "gif", "qx", "qx/decoration/Classic/window-captionbar-buttons-combined.gif", 0, 0], "qx/decoration/Classic/form/radiobutton-checked-disabled.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -14, 0], "qx/icon/Oxygen/16/mimetypes/text-plain.png": [16, 16, "png", "qx"], "qx/icon/Oxygen/16/actions/dialog-ok.png": [16, 16, "png", "qx"], "qx/decoration/Classic/table/boolean-true.png": [11, 11, "png", "qx", "qx/decoration/Classic/table-combined.png", -50, 0], "qx/decoration/Classic/shadow/shadow-t.png": [15, 15, "png", "qx", "qx/decoration/Classic/shadow-tb-combined.png", 0, -30], "qx/decoration/Classic/form/checkbox-checked-pressed.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -56, 0], "spamfighter/icon/22/emotes/face-smile.png": [22, 22, "png", "spamfighter"], "qx/decoration/Classic/treevirtual/cross.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/form/radiobutton-pressed.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -182, 0], "qx/decoration/Classic/form/radiobutton.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -266, 0], "qx/decoration/Classic/arrows/next.gif": [4, 7, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -108, 0], "qx/decoration/Classic/table/ascending.png": [10, 10, "png", "qx", "qx/decoration/Classic/table-combined.png", -40, 0], "spamfighter/icon/22/actions/system-run.png": [22, 22, "png", "spamfighter"], "qx/decoration/Classic/shadow/shadow-tl.png": [15, 15, "png", "qx", "qx/decoration/Classic/shadow-tb-combined.png", 0, -60], "qx/static/blank.gif": [1, 1, "gif", "qx"], "qx/decoration/Classic/treevirtual/only_minus.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/treevirtual/line.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/shadow-small-lr-combined.png": [10, 136, "png", "qx"], "qx/decoration/Classic/shadow/shadow-small-t.png": [5, 5, "png", "qx", "qx/decoration/Classic/shadow-small-tb-combined.png", 0, -10], "qx/decoration/Classic/shadow/shadow-small-r.png": [5, 136, "png", "qx", "qx/decoration/Classic/shadow-small-lr-combined.png", -5, 0], "qx/decoration/Classic/treevirtual/only_plus.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/colorselector/huesaturation-handle.gif": [11, 11, "gif", "qx", "qx/decoration/Classic/colorselector-combined.gif", -35, 0], "spamfighter/icon/22/actions/document-new.png": [22, 22, "png", "spamfighter"], "qx/decoration/Classic/tree/plus.gif": [19, 16, "gif", "qx"], "qx/decoration/Classic/window/close.gif": [10, 9, "gif", "qx", "qx/decoration/Classic/window-captionbar-buttons-combined.gif", -26, 0], "qx/decoration/Classic/arrows/up.gif": [7, 4, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -8, 0], "qx/decoration/Classic/form/checkbox-disabled.png": [14, 14, "png", "qx", "qx/decoration/Classic/checkbox-radiobutton-combined.png", -42, 0], "qx/decoration/Classic/arrows/left-small-invert.gif": [3, 5, "gif", "qx", "qx/decoration/Classic/arrows-combined.gif", -37, 0], "qx/decoration/Classic/datechooser/next-month-invert.png": [16, 16, "png", "qx"]};

if(!window.qxtranslations)qxtranslations={};qxtranslations["C"]={};qxtranslations["en"]={};if(!window.qxlocales)qxlocales={};qxlocales["ru"]={"cldr_date_format_long": "d MMMM yyyy '\u0433'.", "alternateQuotationStart": "\u201e", "cldr_month_abbreviated_11": "\u043d\u043e\u044f\u0431.", "cldr_month_abbreviated_10": "\u043e\u043a\u0442.", "cldr_month_abbreviated_12": "\u0434\u0435\u043a.", "quotationStart": "\u00ab", "cldr_date_time_format_mmss": "mm:ss", "cldr_day_abbreviated_tue": "\u0412\u0442", "cldr_day_wide_fri": "\u041f\u044f\u0442\u043d\u0438\u0446\u0430", "cldr_date_time_format_HHmm": "HH:mm", "cldr_day_wide_tue": "\u0412\u0442\u043e\u0440\u043d\u0438\u043a", "cldr_date_time_format_Ed": "E d", "cldr_day_wide_thu": "\u0427\u0435\u0442\u0432\u0435\u0440\u0433", "cldr_date_time_format_MEd": "E, M-d", "cldr_date_time_format_MMM": "LLL", "cldr_date_time_format_yyyyQQQQ": "QQQQ yyyy '\u0433'.", "cldr_day_abbreviated_fri": "\u041f\u0442", "cldr_day_wide_sun": "\u0412\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", "cldr_day_wide_mon": "\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", "cldr_date_time_format_yyyy": "yyyy", "cldr_day_abbreviated_mon": "\u041f\u043d", "cldr_pm": "PM", "cldr_number_decimal_separator": ",", "alternateQuotationEnd": "\u201c", "cldr_date_time_format_y": "yyyy", "cldr_day_narrow_sun": "\u0412", "cldr_number_percent_format": "#,##0\u00a0%", "cldr_month_narrow_12": "\u0414", "cldr_date_time_format_yyMMMEEEd": "EEE, d MMM yy", "cldr_date_time_format_MMMMd": "d MMMM", "cldr_day_narrow_sat": "\u0421", "cldr_date_time_format_Md": "d.M", "cldr_date_format_medium": "dd.MM.yyyy", "cldr_date_time_format_yyQ": "Q yy", "cldr_date_format_full": "EEEE, d MMMM yyyy '\u0433'.", "cldr_month_abbreviated_9": "\u0441\u0435\u043d\u0442.", "cldr_month_abbreviated_8": "\u0430\u0432\u0433.", "cldr_month_narrow_10": "\u041e", "cldr_month_narrow_11": "\u041d", "cldr_date_time_format_yyMMM": "MMM yy", "cldr_date_time_format_yQQQ": "yyyy QQQ", "cldr_month_abbreviated_1": "\u044f\u043d\u0432.", "cldr_month_abbreviated_3": "\u043c\u0430\u0440\u0442", "cldr_month_abbreviated_2": "\u0444\u0435\u0432\u0440.", "cldr_month_abbreviated_5": "\u043c\u0430\u0439", "cldr_month_abbreviated_4": "\u0430\u043f\u0440.", "cldr_month_abbreviated_7": "\u0438\u044e\u043b\u044c", "cldr_month_abbreviated_6": "\u0438\u044e\u043d\u044c", "cldr_date_time_format_MMMd": "d MMM", "cldr_date_time_format_yM": "yyyy-M", "cldr_day_wide_sat": "\u0421\u0443\u0431\u0431\u043e\u0442\u0430", "cldr_date_time_format_MMMEd": "E MMM d", "cldr_day_abbreviated_wed": "\u0421\u0440", "cldr_date_time_format_yyyyLLLL": "LLLL yyyy", "cldr_date_time_format_yQ": "Q y", "cldr_day_narrow_wed": "\u0421", "cldr_number_group_separator": "\u00a0", "cldr_month_wide_2": "\u0424\u0435\u0432\u0440\u0430\u043b\u044c", "cldr_month_wide_3": "\u041c\u0430\u0440\u0442", "cldr_month_wide_1": "\u042f\u043d\u0432\u0430\u0440\u044c", "cldr_month_wide_6": "\u0418\u044e\u043d\u044c", "cldr_month_wide_7": "\u0418\u044e\u043b\u044c", "cldr_month_wide_4": "\u0410\u043f\u0440\u0435\u043b\u044c", "cldr_month_wide_5": "\u041c\u0430\u0439", "cldr_month_wide_8": "\u0410\u0432\u0433\u0443\u0441\u0442", "cldr_month_wide_9": "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c", "cldr_date_time_format_MMMMEd": "E MMMM d", "quotationEnd": "\u00bb", "cldr_date_time_format_yMMMM": "MMMM y", "cldr_month_wide_10": "\u041e\u043a\u0442\u044f\u0431\u0440\u044c", "cldr_month_wide_11": "\u041d\u043e\u044f\u0431\u0440\u044c", "cldr_month_wide_12": "\u0414\u0435\u043a\u0430\u0431\u0440\u044c", "cldr_date_time_format_MMdd": "dd.MM", "cldr_date_time_format_yMMM": "MMM. y", "cldr_day_narrow_fri": "\u041f", "cldr_day_narrow_tue": "\u0412", "cldr_date_time_format_ms": "mm:ss", "cldr_day_narrow_thu": "\u0427", "cldr_date_time_format_yyyyMMMM": "MMMM yyyy", "cldr_time_format_short": "H:mm", "cldr_time_format_medium": "H:mm:ss", "cldr_day_abbreviated_sun": "\u0412\u0441", "cldr_date_time_format_Hm": "H:mm", "cldr_date_time_format_H": "H", "cldr_day_abbreviated_thu": "\u0427\u0442", "cldr_date_format_short": "dd.MM.yy", "cldr_date_time_format_M": "L", "cldr_time_format_long": "H:mm:ss z", "cldr_date_time_format_yMMMEd": "E, d MMM. y", "cldr_date_time_format_HHmmss": "HH:mm:ss", "cldr_date_time_format_yMEd": "EEE, yyyy-M-d", "cldr_day_wide_wed": "\u0421\u0440\u0435\u0434\u0430", "cldr_day_narrow_mon": "\u041f", "cldr_date_time_format_yyyyMM": "MM.yyyy", "cldr_month_narrow_1": "\u042f", "cldr_month_narrow_2": "\u0424", "cldr_month_narrow_3": "\u041c", "cldr_month_narrow_4": "\u0410", "cldr_month_narrow_5": "\u041c", "cldr_month_narrow_6": "\u0418", "cldr_month_narrow_7": "\u0418", "cldr_month_narrow_8": "\u0410", "cldr_month_narrow_9": "\u0421", "cldr_day_abbreviated_sat": "\u0421\u0431", "cldr_date_time_format_yyMM": "MM.yy", "cldr_am": "AM", "cldr_time_format_full": "H:mm:ss v", "cldr_date_time_format_d": "d"};qxlocales["C"]={"cldr_date_format_long": "MMMM d, yyyy", "cldr_month_abbreviated_11": "Nov", "cldr_month_abbreviated_10": "Oct", "cldr_month_abbreviated_12": "Dec", "quotationStart": "\u201c", "cldr_day_abbreviated_tue": "Tue", "cldr_day_wide_fri": "Friday", "cldr_day_wide_tue": "Tuesday", "cldr_date_time_format_Hm": "HH:mm", "cldr_day_wide_thu": "Thursday", "cldr_date_time_format_MEd": "E, M\/d", "cldr_date_time_format_MMM": "LLL", "cldr_day_abbreviated_fri": "Fri", "cldr_day_wide_sun": "Sunday", "cldr_day_wide_mon": "Monday", "cldr_day_abbreviated_mon": "Mon", "cldr_pm": "PM", "cldr_number_decimal_separator": ".", "alternateQuotationEnd": "\u2019", "cldr_date_time_format_y": "yyyy", "cldr_day_narrow_sun": "S", "cldr_number_percent_format": "#,##0%", "cldr_month_narrow_12": "D", "quotationEnd": "\u201d", "cldr_date_time_format_MMMMd": "MMMM d", "cldr_day_narrow_sat": "S", "cldr_date_time_format_Md": "M\/d", "cldr_date_format_medium": "MMM d, yyyy", "cldr_date_format_full": "EEEE, MMMM d, yyyy", "cldr_month_abbreviated_9": "Sep", "cldr_month_abbreviated_8": "Aug", "cldr_month_narrow_10": "O", "cldr_month_narrow_11": "N", "cldr_date_time_format_yQQQ": "QQQ yyyy", "cldr_month_abbreviated_1": "Jan", "cldr_month_abbreviated_3": "Mar", "cldr_month_abbreviated_2": "Feb", "cldr_month_abbreviated_5": "May", "cldr_month_abbreviated_4": "Apr", "cldr_month_abbreviated_7": "Jul", "cldr_month_abbreviated_6": "Jun", "cldr_date_time_format_MMMd": "MMM d", "cldr_date_time_format_yM": "M\/yyyy", "cldr_day_wide_sat": "Saturday", "cldr_date_time_format_MMMEd": "E, MMM d", "cldr_day_abbreviated_wed": "Wed", "alternateQuotationStart": "\u2018", "cldr_date_time_format_yQ": "Q yyyy", "cldr_day_narrow_wed": "W", "cldr_date_time_format_hm": "h:mm a", "cldr_month_wide_2": "February", "cldr_month_wide_3": "March", "cldr_month_wide_1": "January", "cldr_month_wide_6": "June", "cldr_month_wide_7": "July", "cldr_month_wide_4": "April", "cldr_month_wide_5": "May", "cldr_month_wide_8": "August", "cldr_month_wide_9": "September", "cldr_date_time_format_MMMMEd": "E, MMMM d", "cldr_date_time_format_yMMMM": "MMMM yyyy", "cldr_month_wide_10": "October", "cldr_month_wide_11": "November", "cldr_month_wide_12": "December", "cldr_date_time_format_yMMM": "MMM yyyy", "cldr_day_narrow_fri": "F", "cldr_day_narrow_tue": "T", "cldr_date_time_format_ms": "mm:ss", "cldr_day_narrow_thu": "T", "cldr_time_format_short": "h:mm a", "cldr_date_time_format_Hms": "HH:mm:ss", "cldr_time_format_medium": "h:mm:ss a", "cldr_day_abbreviated_sun": "Sun", "cldr_day_abbreviated_thu": "Thu", "cldr_date_format_short": "M\/d\/yy", "cldr_date_time_format_M": "L", "cldr_time_format_long": "h:mm:ss a z", "cldr_date_time_format_yMMMEd": "EEE, MMM d, yyyy", "cldr_number_group_separator": ",", "cldr_date_time_format_yMEd": "EEE, M\/d\/yyyy", "cldr_day_wide_wed": "Wednesday", "cldr_day_narrow_mon": "M", "cldr_month_narrow_1": "J", "cldr_month_narrow_2": "F", "cldr_month_narrow_3": "M", "cldr_month_narrow_4": "A", "cldr_month_narrow_5": "M", "cldr_month_narrow_6": "J", "cldr_month_narrow_7": "J", "cldr_month_narrow_8": "A", "cldr_month_narrow_9": "S", "cldr_day_abbreviated_sat": "Sat", "cldr_am": "AM", "cldr_time_format_full": "h:mm:ss a v", "cldr_date_time_format_d": "d"};qxlocales["en"]={"cldr_date_format_long": "MMMM d, yyyy", "cldr_month_abbreviated_11": "Nov", "cldr_month_abbreviated_10": "Oct", "cldr_month_abbreviated_12": "Dec", "quotationStart": "\u201c", "cldr_day_abbreviated_tue": "Tue", "cldr_day_wide_fri": "Friday", "cldr_day_wide_tue": "Tuesday", "cldr_date_time_format_Hm": "HH:mm", "cldr_day_wide_thu": "Thursday", "cldr_date_time_format_MEd": "E, M\/d", "cldr_date_time_format_MMM": "LLL", "cldr_day_abbreviated_fri": "Fri", "cldr_day_wide_sun": "Sunday", "cldr_day_wide_mon": "Monday", "cldr_day_abbreviated_mon": "Mon", "cldr_pm": "PM", "cldr_number_decimal_separator": ".", "alternateQuotationEnd": "\u2019", "cldr_date_time_format_y": "yyyy", "cldr_day_narrow_sun": "S", "cldr_number_percent_format": "#,##0%", "cldr_month_narrow_12": "D", "quotationEnd": "\u201d", "cldr_date_time_format_MMMMd": "MMMM d", "cldr_day_narrow_sat": "S", "cldr_date_time_format_Md": "M\/d", "cldr_date_format_medium": "MMM d, yyyy", "cldr_date_format_full": "EEEE, MMMM d, yyyy", "cldr_month_abbreviated_9": "Sep", "cldr_month_abbreviated_8": "Aug", "cldr_month_narrow_10": "O", "cldr_month_narrow_11": "N", "cldr_date_time_format_yQQQ": "QQQ yyyy", "cldr_month_abbreviated_1": "Jan", "cldr_month_abbreviated_3": "Mar", "cldr_month_abbreviated_2": "Feb", "cldr_month_abbreviated_5": "May", "cldr_month_abbreviated_4": "Apr", "cldr_month_abbreviated_7": "Jul", "cldr_month_abbreviated_6": "Jun", "cldr_date_time_format_MMMd": "MMM d", "cldr_date_time_format_yM": "M\/yyyy", "cldr_day_wide_sat": "Saturday", "cldr_date_time_format_MMMEd": "E, MMM d", "cldr_day_abbreviated_wed": "Wed", "alternateQuotationStart": "\u2018", "cldr_date_time_format_yQ": "Q yyyy", "cldr_day_narrow_wed": "W", "cldr_date_time_format_hm": "h:mm a", "cldr_month_wide_2": "February", "cldr_month_wide_3": "March", "cldr_month_wide_1": "January", "cldr_month_wide_6": "June", "cldr_month_wide_7": "July", "cldr_month_wide_4": "April", "cldr_month_wide_5": "May", "cldr_month_wide_8": "August", "cldr_month_wide_9": "September", "cldr_date_time_format_MMMMEd": "E, MMMM d", "cldr_date_time_format_yMMMM": "MMMM yyyy", "cldr_month_wide_10": "October", "cldr_month_wide_11": "November", "cldr_month_wide_12": "December", "cldr_date_time_format_yMMM": "MMM yyyy", "cldr_day_narrow_fri": "F", "cldr_day_narrow_tue": "T", "cldr_date_time_format_ms": "mm:ss", "cldr_day_narrow_thu": "T", "cldr_time_format_short": "h:mm a", "cldr_date_time_format_Hms": "HH:mm:ss", "cldr_time_format_medium": "h:mm:ss a", "cldr_day_abbreviated_sun": "Sun", "cldr_day_abbreviated_thu": "Thu", "cldr_date_format_short": "M\/d\/yy", "cldr_date_time_format_M": "L", "cldr_time_format_long": "h:mm:ss a z", "cldr_date_time_format_yMMMEd": "EEE, MMM d, yyyy", "cldr_number_group_separator": ",", "cldr_date_time_format_yMEd": "EEE, M\/d\/yyyy", "cldr_day_wide_wed": "Wednesday", "cldr_day_narrow_mon": "M", "cldr_month_narrow_1": "J", "cldr_month_narrow_2": "F", "cldr_month_narrow_3": "M", "cldr_month_narrow_4": "A", "cldr_month_narrow_5": "M", "cldr_month_narrow_6": "J", "cldr_month_narrow_7": "J", "cldr_month_narrow_8": "A", "cldr_month_narrow_9": "S", "cldr_day_abbreviated_sat": "Sat", "cldr_am": "AM", "cldr_time_format_full": "h:mm:ss a v", "cldr_date_time_format_d": "d"};






window.qxloader =
{
  parts : {"boot":[0]},
  uris : [["script/spamfighter-0.js"]],
  boot : "boot",

  runningParts : {},
  loadedParts : {},
  runningPackages : {},
  loadedPackages : {},
  runningScripts : {},
  loadedScripts : {},

  callbackList : [],

  scriptQueue : [],
  inFlushQueue : false,


  // Simple log wrapper
  _log : function(msg, type)
  {
    if (!type) {
      type = "debug";
    }

    if (window.qx && qx.core && qx.log.Logger) {
      qx.log.Logger[type](msg);
    }
  },


  // Main method to manage part loading
  loadPart : function(name, callback, self)
  {
    if (callback && !self) {
      self = window;
    }

    if (this.parts[name]==null)
    {
      this._log("No such part: " + name, "warn");

      if (callback) {
        callback.call(self);
      }

      return;
    }

    if (this.loadedParts[name])
    {
      // this._log("Part " + name + " is already loaded...");
      if (callback) {
        callback.call(self);
      }

      return;
    }

    if (this.runningParts[name])
    {
      this._log("The part " + name + " is already in loading state... checking callback");

      if (callback)
      {
        for (var i=0, a=this.callbackList, l=a.length; i<l; i++)
        {
          if (a[i].callback == callback && a[i].self == self)
          {
            this._log("Callback is already registered.");
            return;
          }
        }

        // this._log("Registering callback");
        this.callbackList.push({
          callback : callback,
          self : self || null
        });
      }

      return;
    }

    this.runningParts[name] = true;

    this._log("Loading part " + name + "...");

    var pkgs = this.parts[name];
    var pkg;
    var uris;
    var scripts = [];

    for (var i=0; i<pkgs.length; i++)
    {
      pkg = pkgs[i];

      if (this.loadedPackages[pkg])
      {
        // this._log("Package: " + pkg + " is already loaded...");
        continue;
      }

      if (this.runningPackages[pkg]) {
        continue;
      }

      // this._log("Loading package: " + pkg);
      this.runningPackages[pkg] = true;

      uris = this.uris[pkg];
      // this._log("Queueing " + uris.length + " files");
      this.scriptQueue.push.apply(this.scriptQueue, uris);
    }



    if (this.scriptQueue.length == 0)
    {
      this.loadedParts[name] = true;

      if (callback) {
        self ? callback.call(self) : callback();
      }

      return;
    }

    if (callback)
    {
      // this._log("Registering callback");
      this.callbackList.push({
        callback : callback,
        self : self || null
      });
    }

    if (!this.inFlushQueue) {
      this._flushQueue();
    }
  },


  // Loading issue seems to be fixed in recent webkits
  _isWebkit : /AppleWebKit\/([^ ]+)/.test(navigator.userAgent),
  _isMshtml : navigator.cpuClass && /MSIE\s+([^\);]+)(\)|;)/.test(navigator.userAgent),

  _flushQueue : function()
  {
    this.inFlushQueue = true;

    var queue = this.scriptQueue;

    // Queue empty?
    if (queue.length == 0)
    {
      // this._log("Queue flushed successfully!");

      // Move running packages to loaded packages
      for (var pkg in this.runningPackages)
      {
        // this._log("Package " + pkg + " successfully loaded");
        this.loadedPackages[pkg] = true;
      }
      this.runningPackages = {};

      for (var part in this.runningParts)
      {
        this._log("Part " + part + " successfully loaded");
        this.loadedParts[part] = true;
      }
      this.runningParts = {};

      // Clear flag
      this.inFlushQueue = false;

      // Execute callbacks
      var callbacks = this.callbackList.concat();
      this.callbackList.length = 0;
      for (var i=0, l=callbacks.length; i<l; i++) {
        callbacks[i].callback.call(callbacks[i].self);
      }

      // Is this the boot module? => start init process
      if (part == this.boot)
      {
        this._bootLoaded = true;
        this._fireReady();
      }

      // Finally return
      return;
    }

    // Load next script
    var next = queue.shift();

    if (this._isWebkit)
    {
      // force asynchronous load
      // Safari fails with an "maximum recursion depth exceeded" error if it is
      // called sync.
      var self = this;
      window.setTimeout(function() {
        self.loadScript(next, self._flushQueue, self);
      }, 0);
    } else {
      this.loadScript(next, this._flushQueue, this);
    }
  },


  _fireReady : function()
  {
    if (this._bootLoaded && this._pageLoaded && window.qx && qx.event && qx.event.handler && qx.event.handler.Application) {
      qx.event.handler.Application.ready();
    }
  },


  loadScript : function(uri, callback, self)
  {
    if (callback && !self) {
      self = window;
    }

    if (this.loadedScripts[uri])
    {
      // this._log("Script is already loaded: " + uri);

      if (callback) {
        callback.call(self);
      }

      return;
    }

    // This needs a better implementation!
    if (this.runningScripts[uri]) {
      throw new Error("Script is already loading.");
    }

    this.runningScripts[uri] = true;

    var head = document.getElementsByTagName("head")[0];
    var elem = document.createElement("script");

    elem.charset = "utf-8";
    elem.src = uri;

    // Assign listener
    elem.onreadystatechange = elem.onload = function()
    {
      if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")
      {
        // Remove listeners (mem leak prevention)
        elem.onreadystatechange = elem.onload = null;

        // Remember
        delete qxloader.runningScripts[uri];
        qxloader.loadedScripts[uri] = true;

        // Execute callback
        if (callback) {
          callback.call(self);
        }
      }
    };

    head.appendChild(elem);
  },


  _pageLoad : function()
  {
    if (window.addEventListener) {
      window.removeEventListener("load", qxloader._pageLoad, false);
    } else {
      window.detachEvent("onload", qxloader._pageLoad);
    }

    qxloader._pageLoaded = true;
    qxloader._fireReady();
  },


  init : function()
  {
    // first check whether the page is already loaded (IE only)
    // We have to rely on readyState "complete" since one can *not* be sure
    // that the body element is present at the readyState "interactive".
    // Inline applications rely on the presence of the body element at startup.
    if (this._isMshtml && document.readyState == "complete") {
      qxloader._pageLoad();
    }
    else
    {
      if (window.addEventListener) {
        window.addEventListener("load", this._pageLoad, false);
      } else {
        window.attachEvent("onload", this._pageLoad);
      }
    }

    this.loadPart(this.boot);
  }
};


qxloader.init();
