﻿
if (typeof (window['Flex']) === 'undefined') {
    window.Flex = {};
}

if (typeof (window.Flex['Util']) === 'undefined') {
    window.Flex.Util = {};
}

/**
*/
Flex.Util = {
    'Namespace': function (ns) {
        var nsParts = ns.split(".");
        var root = window;

        for (var i = 0; i < nsParts.length; i++) {
            if (typeof root[nsParts[i]] == "undefined")
                root[nsParts[i]] = new Object();

            root = root[nsParts[i]];
        }
    },
    'IsObject': function (name) {
        var result = false;
        try {
            if (typeof (eval(name)) == "object") {
                result = true;
            }
        } catch (e) {
            result = false;
        }
        return result;
    },
    'IsFunction': function (name) {
        var result = false;
        try {
            if (typeof (eval(name)) == "function") {
                result = true;
            }
        } catch (e) {
            result = false;
        }
        return result;
    },
    'CleanHtml': function (string, quote_style) {
        var hash_map = {}, symbol = '', tmp_str = '', entity = '';
        tmp_str = string.toString();

        if (false === (hash_map = Novo.Util.getHtmlTranslationTable('HTML_ENTITIES', quote_style))) {
            return false;
        }
        hash_map["'"] = '&#039;';
        for (symbol in hash_map) {
            entity = hash_map[symbol];
            tmp_str = tmp_str.split(symbol).join(entity);
        }

        return tmp_str;
    },
    'LoadXmlFile': function (url, callback) {
        jQuery.ajax({
            'type': 'get',
            'url': url,
            'dataType': 'xml',
            'success': callback,
            error: function (request, status, throwError) {
                alert(status);
            }
        });
    },
    'StringtoXML': function (text) {
        if (window.ActiveXObject) {
            var doc = new ActiveXObject('Microsoft.XMLDOM');
            doc.async = 'false';
            doc.loadXML(text);
        } else {
            var parser = new DOMParser();
            var doc = parser.parseFromString(text, 'text/xml');
        }
        return doc;
    },
    /*******************
    format: 2009-01-01 or 2009-1-1
    ****************/
    "CheckDate": function (strDate) {

        var result = strDate.match(/((^((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))$))/);

        if (result == null) {
            return false;
        }
        else {
            return true;
        }
    },
    "IsMatch": function (str, reg) {
        var result = str.match(reg);
        if (result == null) {
            return false;
        }
        else {
            return true;
        }
    },
    "IsIE": function () {
        var isIE = !!window.ActiveXObject;
        return isIE
    },
    "IsIE8": function () {
        var isIE8 = isIE && !!document.documentMode;
        return isIE8;
    },
    "IsIE7": function () {
        var isIE = !!window.ActiveXObject;
        var isIE6 = isIE && !window.XMLHttpRequest;
        var isIE8 = isIE && !!document.documentMode;
        var isIE7 = isIE && !isIE6 && !isIE8;
        return isie7;
    },
    "IsIE6": function () {
        return navigator.userAgent.toLowerCase().indexOf('msie 6') != -1;
    },
    "IsChrome": function () {
        //        return window.google || window.chrome;
        var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
        return is_chrome;
    },
    // E.G. min = 1, max = 4. It will return 1,2,3,4
    "GetRandom": function (min, max) {
        var random = parseInt(Math.random() * (max - min + 1) + min);
        return random
    },
    "IsSame": function (str1, str2, ignoreCase) {
        if (ignoreCase == true) {
            return str1.toString().toLowerCase() == str2.toString().toLowerCase();
        }
        else {
            return str1 == str2;
        }
    },
    "IsMail": function (str) {
        return str.match(/^[\W\.-_]+@[\w_-]+(\.[\w_-]+)+$/ig) != null;
    },
    // seperate by ;
    "IsMails": function (str) {
        return str.match(/^(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)(;(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*))*$/ig) != null;
    },
    //Matches 01/01/1990 | 12/12/9999 | 3/28/2001
    //Non-Matches 3-8-01 | 13/32/1001 | 03/32/1989 
    "IsDate": function (str) {
        return str.match(/^[0,1]?\d{1}\/(([0-2]?\d{1})|([3][0,1]{1}))\/(([1]{1}[9]{1}[9]{1}\d{1})|([2-9]{1}\d{3}))$/ig) != null;
    },
    "IsTime": function (str) {
        var reg = /^((0)?\d{1}|1\d{1}|2[0-3]):(([0-5])?\d{1}):(([0-5])?\d{1})$/;
        return reg.test(str);
    },
    // false: not decimal format
    "IsDecimal": function (str) {
        return str.match(/^[+-]?0|([1-9]{1}\d*)(\.\d+)*$/ig) != null;
    },
    // false: not int format
    //Matches 0,+12,12,-12
    "IsInteger": function (str) {
        return str.match(/^0$|^[+-]?[1-9][0-9]*$/ig) != null;
    },
    // false: not int format
    //Matches 0,12, not +12, -12
    "IsPlusInteger": function (str) {
        return str.match(/^0$|^[1-9][0-9]*$/ig) != null;
    },
    // min>= data >= max.
    "IsRange": function (data, min, max) {
        var result = true;
        var i = Number(data);
        if (i < min || i > max) {
            result = false;
        }
        else {
            result = true;
        }
        return result;
    },
    // arg1 * arg2
    "Mul": function (arg1, arg2) {
        var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
        try { m += s1.split(".")[1].length } catch (e) { }
        try { m += s2.split(".")[1].length } catch (e) { }
        return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
    },
    // arg1 + arg2
    "Add": function (arg1, arg2) {
        var r1, r2, m;
        try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
        try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
        m = Math.pow(10, Math.max(r1, r2));
        return (arg1 * m + arg2 * m) / m;
    },
    // arg1 / arg2
    "Divide": function (arg1, arg2) {
        var t1 = 0, t2 = 0, r1, r2;
        try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
        try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
        with (Math) {
            r1 = Number(arg1.toString().replace(".", ""));
            r2 = Number(arg2.toString().replace(".", ""));
            return (r1 / r2) * pow(10, t2 - t1);
        }
    },
    // arg1 - arg2
    "Subtract": function (arg1, arg2) {
        var r1, r2, m, n;
        try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
        try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
        m = Math.pow(10, Math.max(r1, r2));
        n = (r1 >= r2) ? r1 : r2;
        return ((arg1 * m - arg2 * m) / m).toFixed(n);
    },
    "ToFixed": function (num, d) {
        var s = num + ""; if (!d) d = 0;
        if (s.indexOf(".") == -1) s += "."; s += new Array(d + 1).join("0");
        if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (d + 1) + "})?)\\d*$").test(s)) {
            var s = "0" + RegExp.$2, pm = RegExp.$1, a = RegExp.$3.length, b = true;
            if (a == d + 2) {
                a = s.match(/\d/g); if (parseInt(a[a.length - 1]) > 4) {
                    for (var i = a.length - 2; i >= 0; i--) {
                        a[i] = parseInt(a[i]) + 1;
                        if (a[i] == 10) { a[i] = 0; b = i != 1; } else break;
                    }
                }
                s = a.join("").replace(new RegExp("(\\d+)(\\d{" + d + "})\\d$"), "$1.$2");
            } if (b) s = s.substr(1); return (pm + s).replace(/\.$/, "");
        } return num + "";
    },
    // get file's postfix
    "GetFileType": function (str) {
        var fix = "";
        if (null != str && str.indexOf(".") > -1) {
            fix = str.substr(str.lastIndexOf(".") + 1);
        }
        return fix;
    },
    "GetQueryString": function (name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) {
            return unescape(r[2]);
        }
        else {
            return null;
        }
    },
    "FullScreen": function (win) {
        if (null != win) {
            win.moveTo(0, 0);
            win.resizeTo(screen.availWidth, screen.availHeight);
        }
        else {

        }
    },
    // year, month must be from 1.
    "CalculateAge": function (year, month, day) {
        var age = 0;
        var now = new Date();
        born = new Date(year, month * 1 - 1, day);
        age = Math.floor((now.getTime() - born.getTime()) / (365.25 * 24 * 60 * 60 * 1000));
        if (isNaN(age)) {
            return -1;
        }
        else {
            return age;
        }
    },
    "FilterEnter": function (str) {
        var ss = str.replace('\r\n', "");
        ss = str.replace('\r', "");
        ss = str.replace('\n', "");
        return ss
    },
    "FilterBlank": function (str, to) {
        var reg = /\s{2,}/g;
        if (null == to) {
            to = "";
        }
        str = str.replace(reg, to);
        return str
    },
    "ReplaceEllipsis": function (str, length) {
        if (null != str && str.length > length) {
            str = str.substr(0, length) + "...";
        }
        return str;
    },
    // select is a jquery object, start and end is int.
    "InitNumberForSelect": function (select, start, end, nullItem, selectItem) {
        select.empty();
        if (null != nullItem) {
            select.append('<option value="">' + nullItem + '</option>');
        }
        if (start >= end) {
            for (var i = start; i >= end; i--) {
                if (i == selectItem) {
                    select.append('<option selected="true" value="' + i + '">' + i + '</option>');
                }
                else {
                    select.append('<option value="' + i + '">' + i + '</option>');
                }
            }
        }
        else {
            for (var i = start; i <= end; i++) {
                if (i == selectItem) {
                    select.append('<option selected="true" value="' + i + '">' + i + '</option>');
                }
                else {
                    select.append('<option value="' + i + '">' + i + '</option>');
                }
            }
        }
    },   // end InitNumberForSelect
    "AddEventHandler": function (Target, EventType, fnHandler) {
        if (Target.addEventListener) {//FF
            Target.addEventListener(EventType, fnHandler, false);
        } else if (Target.attachEvent) {//IE
            Target.attachEvent('on' + EventType, fnHandler);
        } else {
            Target['on' + sEventType] = fnHandler;
        }
    },
    "RemoveEventHandler": function (Target, EventType, fnHandler) {
        if (Target.removeEventListener) {//FF
            Target.removeEventListener(EventType, fnHandler, false);
        } else if (Target.detachEvent) {//IE
            Target.detachEvent('on' + EventType, fnHandler);
        } else {
            Target['on' + sEventType] = null;
        }
    },
    "GetIframeDocument": function (id) {
        var _iframe = document.getElementById(id);
        return _iframe.contentWindow.document ? _iframe.contentWindow.document.body : _iframe.ownerDocument.body;
    }
};
