/**
 *  Setting locales
 *  (changed by Viodele)
 **/
var gtxt = new Gettext({domain:"BetaEasy"});
gtxt.locale_data = window.json_locale_data;
gtxt.parse_locale_data(window.json_locale_data);

function _(msg) {
    return window.gtxt.dgettext("BetaEasy",msg);
}

function ngettext(singular, plural, n) {
   return window.gtxt.dngettext("BetaEasy", singular, plural, n);
}

function tplCompile(tpl, params) {
    return tpl.replace(/\{\$([^}]+)}/g,
        function(fullMatchNotUsed, match) {
            return params[match];
        }
    );
}

var NOTIFY_MESSAGE_TEMPLATE = ['<div class="ui-widget">',
				'<div style="padding: 0pt 0.7em; margin-bottom: 10px;" class="{$state} ui-corner-all"> ',
					'<p style="text-align: left; margin-top:5px; margin-bottom:5px; padding-bottom:0px;"><span style="float: left; margin-right: 0.3em;" class="ui-icon ui-icon-info"/>',
					'{$message}</p>',
				'</div>',
			'</div>'].join('');

function htmlspecialchars(text) {
    var chars = Array("&", "<", ">", '"', "'", "\n");
    var replacements = Array("&amp;", "&lt;", "&gt;", "&quot;", "'", "<br>");

    for (var i=0; i<chars.length; i++) {
        var re = new RegExp(chars[i], "gi");

        if(re.test(text)) {
            text = text.replace(re, replacements[i]);
        }
    }

    return text;
}

function strtotime(time, now) {
    var parse = NaN;

    time = time.replace(/\s{2,}|^\s|\s$/g, ' ');
    time = time.replace(/[\t\r\n]/g, '');

    if (time == 'now') {
        return (new Date());
    } else if (!isNaN(parse = Date.parse(time))) {
        return parse;
    } else if (now) {
        now = new Date(now);
    } else {
        now = new Date();
    }

    time = time.toLowerCase();

    var __is = {
        day: {
            'sun': 0, 'mon': 1, 'tue': 2, 'wed': 3, 'thu': 4, 'fri': 5, 'sat': 6
        },
        mon: {
            'jan': 0, 'feb': 1, 'mar': 2, 'may': 3, 'apr': 4,  'jun': 5, 'jul': 6, 'aug': 7, 'sep': 8, 'oct': 9, 'nov': 10, 'dec': 11
        }
    }

    var match = time.match(/^(\d{2,4}-\d{2}-\d{2})(\s\d{1,2}:\d{1,2}(:\d{1,2})?)?$/);

    if (match != null) {
        if (!match[2]) {
            match[2] = '00:00:00';
        } else if (!match[3]) {
            match[2] += ':00';
        }

        var s = match[1].split(/-/g);

        for (var i = 0; i<__is.mon.length; i++) {
            if (__is.mon[i] == s[1] - 1) {
                s[1] = i;
            }
        }

        return strtotime(s[2] + ' ' + s[1] + ' ' + s[0] + ' ' + match[2]);
    }

    var regex = '([+-]?\\d+\\s'
                + '(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?'
                + '|sun\.?|sunday|mon\.?|monday|tue\.?|tuesday|wed\.?|wednesday'
                + '|thu\.?|thursday|fri\.?|friday|sat\.?|saturday)'
                + '|(last|next)\\s'
                + '(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?'
                + '|sun\.?|sunday|mon\.?|monday|tue\.?|tuesday|wed\.?|wednesday'
                + '|thu\.?|thursday|fri\.?|friday|sat\.?|saturday))'
                + '(\\sago)?';

    match = time.match(new RegExp(regex, 'g'));

    if (match == null) {
        return false;
    }

    for (i = 0; i<match.length; i++) {
        if (!process(match[i].split(' '))) {
            return false;
        }
    }

    return now;

    function process(metrics) {
        var ago = (metrics[2] && metrics[2] == 'ago');
        var num = (num = metrics[0] == 'last' ? -1 : 1) * (ago ? -1 : 1);

        switch (metrics[0]) {
            case 'last':
            case 'next':
                switch (metrics[1].substring(0, 3)) {
                    case 'yea':
                            now.setFullYear(now.getFullYear() + num);
                        break;
                    case 'mon':
                            now.setMonth(now.getMonth() + num);
                        break;
                    case 'wee':
                            now.setDate(now.getDate() + (num * 7));
                        break;
                    case 'day':
                            now.setDate(now.getDate() + num);
                        break;
                    case 'hou':
                            now.setHours(now.getHours() + num);
                        break;
                    case 'min':
                            now.setMinutes(now.getMinutes() + num);
                        break;
                    case 'sec':
                            now.setSeconds(now.getSeconds() + num);
                        break;
                    default:
                            var day;

                            if (typeof (day = __is.day[metrics[1].substring(0, 3)]) != 'undefined') {
                                var diff = day - now.getDay();

                                if (diff == 0) {
                                    diff = 7 * num;
                                } else if (diff > 0) {
                                    if (metrics[0] == 'last') {
                                        diff -= 7;
                                    }
                                } else {
                                    if (metrics[0] == 'next') {
                                        diff += 7;
                                    }
                                }

                                now.setDate(now.getDate() + diff);
                            }
                }

            break;

            default:

                    if (/\d+/.test(metrics[0])) {
                        num *= parseInt(metrics[0]);

                        switch (metrics[1].substring(0, 3)) {
                            case 'yea':
                                    now.setFullYear(now.getFullYear() + num);
                                break;
                            case 'mon':
                                    now.setMonth(now.getMonth() + num);
                                break;
                            case 'wee':
                                    now.setDate(now.getDate() + (num * 7));
                                break;
                            case 'day':
                                    now.setDate(now.getDate() + num);
                                break;
                            case 'hou':
                                    now.setHours(now.getHours() + num);
                                break;
                            case 'min':
                                    now.setMinutes(now.getMinutes() + num);
                                break;
                            case 'sec':
                                    now.setSeconds(now.getSeconds() + num);
                                break;
                        }
                    } else {
                        return false;
                    }

                break;
        }

        return true;
    }

}



