﻿
if (typeof (window['Levemir']) === 'undefined') {
    window.Levemir = {};
}

if (typeof (window.Levemir['Util']) === 'undefined') {
    window.Levemir.Util = {};
}

/**
*/
Levemir.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);
            }
        });
    },
    'XmlToJson': function (xml) {
        var jq_xml = jQuery(xml);
        if (jq_xml.size()) {
            return
        }
    },
    /*******************
    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;
        }
    },
    "CheckBirthDate": 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)$))$))/);

        var stdt = new Date(strDate.replace("-", "/"));
        var endt = new Date();

        if (result == null || stdt > endt) {
            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 () {
        if ($.browser.msie && parseInt($.browser.version) == 8) {
            return true;
        } else {
            return false;
        }
    },
    "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;
    },
    // 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;
        }
    },
    "IsZip": function (str) {
        return str.match(/^\d{5}(\d{4})?$/ig) != null;
    },
    "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;
        }
    },
    "GetAnchor": function () {
        var anchor = window.location.hash;
        if (anchor.length > 0) {
            return anchor.substr(1);
        } else {
            return "";
        }
    },
    "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;
        }
    },
    // 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
};
