﻿/*@cc_on @*/
/*@if (! @__STRING_JS__) @*/
/*@set @__STRING_JS__ = true @*/

var _H_stat = null;
function _H(str)
{
	if (!_H_stat) {
		_H_stat = {
			"re_amp":  new RegExp("\&", "g"),
			"re_lt":   new RegExp("\<", "g"),
			"re_gt":   new RegExp("\>", "g"),
			"re_quot": new RegExp("\"", "g")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(_H_stat.re_amp, "&amp;").replace(_H_stat.re_lt, "&lt;").replace(_H_stat.re_gt, "&gt;").replace(_H_stat.re_quot, "&quot;");
}


function _U(str)
{
	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return Server.URLEncode(str);
}


var _S_stat = null;
function _S(str)
{
	if (!_S_stat) {
		_S_stat = {
			"re_apost": new RegExp("'", "g")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(_S_stat.re_apost, "''");
}


var _L_stat = null;
function _L(str)
{
	if (!_L_stat) {
		_L_stat = {
			"re_bslash": new RegExp("\\\\", "g"),
			"re_lf":     new RegExp("\n",   "g"),
			"re_tab":    new RegExp("\t",   "g")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(_L_stat.re_bslash, "\\\\").replace(_L_stat.re_lf, "\\n").replace(_L_stat.re_tab, "\\t");
}


var _C_stat = null;
function _C(str)
{
	if (!_C_stat) {
		_C_stat = {
			"re_bslash": new RegExp("\\\\", "g"),
			"re_bs":     new RegExp("\b",   "g"),
			"re_ff":     new RegExp("\f",   "g"),
			"re_lf":     new RegExp("\n",   "g"),
			"re_cr":     new RegExp("\r",   "g"),
			"re_tab":    new RegExp("\t",   "g"),
			"re_apost":  new RegExp("\'",   "g"),
			"re_quot":   new RegExp("\"",   "g")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(_C_stat.re_bslash, "\\\\").replace(_C_stat.re_bs, "\\b").replace(_C_stat.re_ff, "\\f").replace(_C_stat.re_lf, "\\n").replace(_C_stat.re_cr, "\\r").replace(_C_stat.re_tab, "\\t").replace(_C_stat.re_apost, "\\\'").replace(_C_stat.re_quot, "\\\"");
}


var _JSON_stat = null;
function _JSON(str)
{
	// Zapis JSON uporablja podoben mehanizem za zaščito posebnih znakov kot C, z malo drugačnim naborom.
	if (!_JSON_stat) {
		_JSON_stat = {
			"re_bslash":    new RegExp("\\\\", "g"),
			"re_slash":     new RegExp("/",    "g"),
			"re_bs":        new RegExp("\b",   "g"),
			"re_ff":        new RegExp("\f",   "g"),
			"re_lf":        new RegExp("\n",   "g"),
			"re_cr":        new RegExp("\r",   "g"),
			"re_tab":       new RegExp("\t",   "g"),
			"re_quot":      new RegExp("\"",   "g")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(_JSON_stat.re_bslash, "\\\\").replace(_JSON_stat.re_slash, "\\/").replace(_JSON_stat.re_bs, "\\b").replace(_JSON_stat.re_ff, "\\f").replace(_JSON_stat.re_lf, "\\n").replace(_JSON_stat.re_cr, "\\r").replace(_JSON_stat.re_tab, "\\t").replace(_JSON_stat.re_quot, "\\\"");
}


var Format_stat = null;
function Format(str)
{
	var
		arg   = arguments,
		n_arg = arguments.length;

	if (!Format_stat) {
		Format_stat = {
			"re_param": new RegExp("[%]([0-9]+|[%])", "g")
		};

		// Funkcije za zamenjavo entitet ne smemo prestaviti v globalen objekt Format_stat, ker se potem funkcija ne more pravilno uporabljati spremenljivk arg in n_arg.
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(Format_stat.re_param, function($0, $1)
		{
			if ($1 == "%") {
				// Našli smo zaporedje "%%", ki ga nadomestimo z znakom "%".
				return "%";
			} else {
				// Našli smo zaporedje "%<številka>", ki ga nadomestimo z ustreznim parametrom.
				var i = parseInt($1, 10);
				return i < n_arg ? arg[i] : $0;
			}
		});
}


function Pluralize(n, s, d, p1, p2)
{
	switch (Math.abs(n) % 100) {
	case 1:	return new String(s);
	case 2: return new String(d);
	case 3:
	case 4: return new String(p1);
	}

	return new String(p2);
}


var LF2BR_stat = null;
function LF2BR(str)
{
	if (!LF2BR_stat) {
		LF2BR_stat = {
			"re_lf": new RegExp("\n", "g")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(LF2BR_stat.re_lf, "<br/>\n");
}


var CRLF2LF_stat = null;
function CRLF2LF(str)
{
	if (!CRLF2LF_stat) {
		CRLF2LF_stat = {
			"re_crlf": new RegExp("\r\n", "g")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(CRLF2LF_stat.re_crlf, "\n");
}


function StrInsert(str, x, i)
{
	if (str) {
		var t = new String(str);
		return t.slice(0, i) + x + t.slice(i, 0);
	} else
		return "";
}


function Date2Str(date)
{
	return date.toLocaleDateString();
}


function Time2Str(date)
{
	var
		time = new Array(date.getHours(), date.getMinutes(), date.getSeconds()),
		i, str = "";

	for (i = 0; i < 3; i++) {
		if (i)            str += ":";
		if (time[i] < 10) str += "0";
		                  str += time[i];
	}

	return str;
}


function Date2Str2(date)
{
	return Format(__("%1. %2. %3"), date.getDate(), date.getMonth() + 1, date.getFullYear());
}


function Date2Str3(date)
{
	return Date2Str(date) + " " + Time2Str(date);
}


function Date2Log(date)
{
	var str = "", n;

	str += ""+ date.getFullYear() +"-";

	n = date.getMonth() + 1;
	str += (n > 9 ? n : "0"+n) +"-";

	n = date.getDate();
	str += (n > 9 ? n : "0"+n) +" ";

	return str + Time2Str(date);
}


function Date2RFC882(date)
{
	var str = "", n;

	switch (date.getUTCDay()) {
	case 0: str += "Sun"; break;
	case 1: str += "Mon"; break;
	case 2: str += "Tue"; break;
	case 3: str += "Wed"; break;
	case 4: str += "Thu"; break;
	case 5: str += "Fri"; break;
	case 6: str += "Sat"; break;
	}

	str += ", "+ date.getUTCDate() +" ";

	switch (date.getUTCMonth()) {
	case  0: str += "Jan"; break;
	case  1: str += "Feb"; break;
	case  2: str += "Mar"; break;
	case  3: str += "Apr"; break;
	case  4: str += "May"; break;
	case  5: str += "Jun"; break;
	case  6: str += "Jul"; break;
	case  7: str += "Aug"; break;
	case  8: str += "Sep"; break;
	case  9: str += "Oct"; break;
	case 10: str += "Nov"; break;
	case 11: str += "Dec"; break;
	}

	n = date.getUTCFullYear() % 100;
	str += " "+ (n > 9 ? n : "0"+n) +" ";

	n = date.getUTCHours();
	str += (n > 9 ? n : "0"+n) +":";

	n = date.getUTCMinutes();
	str += (n > 9 ? n : "0"+n) +":";

	n = date.getUTCSeconds();
	str += (n > 9 ? n : "0"+n) +" ";

	str += "GMT";

	return str;
}


function Date2RFC1123(date)
{
	var str = "", n;

	switch (date.getUTCDay()) {
	case 0: str += "Sun"; break;
	case 1: str += "Mon"; break;
	case 2: str += "Tue"; break;
	case 3: str += "Wed"; break;
	case 4: str += "Thu"; break;
	case 5: str += "Fri"; break;
	case 6: str += "Sat"; break;
	}

	str += ", "+ date.getUTCDate() +" ";

	switch (date.getUTCMonth()) {
	case  0: str += "Jan"; break;
	case  1: str += "Feb"; break;
	case  2: str += "Mar"; break;
	case  3: str += "Apr"; break;
	case  4: str += "May"; break;
	case  5: str += "Jun"; break;
	case  6: str += "Jul"; break;
	case  7: str += "Aug"; break;
	case  8: str += "Sep"; break;
	case  9: str += "Oct"; break;
	case 10: str += "Nov"; break;
	case 11: str += "Dec"; break;
	}

	str += " "+ date.getUTCFullYear() +" ";

	n = date.getUTCHours();
	str += (n > 9 ? n : "0"+n) +":";

	n = date.getUTCMinutes();
	str += (n > 9 ? n : "0"+n) +":";

	n = date.getUTCSeconds();
	str += (n > 9 ? n : "0"+n) +" ";

	str += "GMT";

	return str;
}


function Str2IP(str)
{
	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "boolean":
		case "number":
		case "undefined": return null;
		default:          try { str = new String(str); } catch (err) { return null; }
	}

	var
		fields = str.split("."),
		i, ip = 0;

	for (i = 0; i < 4; i++) {
		ip <<= 8;
		ip |= parseInt(fields[i], 10);
	}

	return ip;
}


function IP2Str(ip)
{
	var
		i,
		str = new String();

	for (i = 0; i < 4; i++) {
		str = (ip & 0xff) + (i ? "." : "") + str;
		ip >>>= 8;
	}

	return str;
}


function StringCompare(str1, str2)
{
	var
		s1 = new String(s1),
		s2 = new String(s2);

	     if (s1.valueOf() < s2.valueOf()) return -1;
	else if (s1.valueOf() > s2.valueOf()) return  1;
	else return 0;
}


function GetStr(obj, def)
{
	if (obj == null) return def;
	switch (typeof(obj)) {
		case "boolean": return obj ? "true" : "false";
		case "number":  return obj.toString();
		case "object":  try { obj = new String(obj.item(1)); } catch (err) { return def; }
		case "string":  return CRLF2LF(obj);
		default:        return def;
	}
}


function GetInt(obj, def, radix)
{
	if (obj == null) return def;
	switch (typeof(obj)) {
		case "boolean": return obj ? 1 : 0;
		case "number":  return obj.valueOf();
		case "object":  try { obj = new String(obj.item(1)); } catch (err) { return def; }
		case "string":
			var i = parseInt(obj, radix ? radix : 10);
			return !isNaN(i) ? i : def;
		default: return def;
	}
}


function GetDate(obj, def)
{
	if (obj == null) return def;
	switch (typeof(obj)) {
		case "boolean": return def;
		case "number":  return new Date(obj);
		case "object":  try { obj = new String(obj.item(1)); } catch (err) { return def; }
		case "string":
			var
				fields = obj.split("."),
				year = parseInt(Trim(fields[2]), 10),
				month = parseInt(Trim(fields[1]), 10),
				day = parseInt(Trim(fields[0]), 10);

			return !isNaN(year) && !isNaN(month) && !isNaN(day) ? new Date(year, month - 1, day) : def;
		default: return def;
	}
}


function GetBool(obj, def)
{
	if (obj == null) return def;
	switch (typeof(obj)) {
		case "boolean": return obj;
		case "number":  return obj ? true : false;
		case "object":  try { obj = new String(obj.item(1)); } catch (err) { return def; }
		case "string":  return obj.toLowerCase() == "true" ? true : obj.toLowerCase() == "false" ? false : parseInt(obj, 10) ? true : false;
		default:        return def;
	}
}


var Meta2Html_stat = null;
function Meta2Html(str)
{
	if (!Meta2Html_stat) {
		Meta2Html_stat = {
			"re_par":        new RegExp("\n[\n\r]+", "g"),
			"re_lf":         new RegExp("\n", "g"),
			"re_b_on":       new RegExp("\\[B\\]", "gi"),
			"re_b_off":      new RegExp("\\[/B\\]", "gi"),
			"re_i_on":       new RegExp("\\[I\\]", "gi"),
			"re_i_off":      new RegExp("\\[/I\\]", "gi"),
			"re_big_on":     new RegExp("\\[BIG\\]", "gi"),
			"re_big_off":    new RegExp("\\[/BIG\\]", "gi"),
			"re_small_on":   new RegExp("\\[SMALL\\]", "gi"),
			"re_small_off":  new RegExp("\\[/SMALL\\]", "gi"),
			"re_url_local":  new RegExp("\\[URL=\"*(/[^\\]\"]+)\"*\\]", "gi"),
			"re_url_remote": new RegExp("\\[URL=\"*([^\\]\"]+)\"*\\]", "gi"),
			"re_url_off":    new RegExp("\\[/URL\\]", "gi")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(Meta2Html_stat.re_par, "<p>").replace(Meta2Html_stat.re_lf, "<br/>\n").replace(Meta2Html_stat.re_b_on, "<b>").replace(Meta2Html_stat.re_b_off, "</b>").replace(Meta2Html_stat.re_i_on, "<em>").replace(Meta2Html_stat.re_i_off, "</em>").replace(Meta2Html_stat.re_big_on, "<big>").replace(Meta2Html_stat.re_big_off, "</big>").replace(Meta2Html_stat.re_small_on, "<small>").replace(Meta2Html_stat.re_small_off, "</small>").replace(Meta2Html_stat.re_url_local, "<a href=$1>").replace(Meta2Html_stat.re_url_remote, "<a href=$1 target=\"_blank\">").replace(Meta2Html_stat.re_url_off, "</a>");
}


var Trim_stat = null;
function Trim(str)
{
	if (!Trim_stat) {
		Trim_stat = {
			"re_lspace": new RegExp("\\s+$", "g"),
			"re_rspace": new RegExp("^\\s+", "g")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(Trim_stat.re_lspace, "").replace(Trim_stat.re_rspace, "");
}


var Capitalize_stat = null;
function Capitalize(str)
{
	if (!Capitalize_stat) {
		Capitalize_stat = {
			"re_delim": new RegExp("[\\s-]")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	var i, n = str.length, cap = true, res = new String();

	for (i = 0; i < n; i++) {
		var x = str.charAt(i);

		if (cap) {
			res += x.toUpperCase();
			cap = false;
		} else
			res += x.toLowerCase();

		if (x.search(Capitalize_stat.re_delim) != -1)
			cap = true;
	}

	return res;
}


function GeneratePassword(length)
{
	var
		i,
		pwd = "",
		r,
		// base = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
		base = "2345789ABCDEFHJKLMNPQRTUYabcdefghijkmnopqrtuy", // Uporabimo oklescen nabor, da je manj dvoumja
		n = base.length;

	for (i = 0; i < length; i++)
		pwd += base.charAt(Math.floor(Math.random() * n));

	return pwd;
}


function HumanReadable1024(n)
{
	var
		k, order,
		prefix = new Array("", "k", "M", "G", "T");

	n = parseInt(n, 10);

	for (k = 0; n >= 1024 && k < prefix.length; k++)
		n /= 1024;

	if (n >= 100) order = 1;
	else if (n >= 10) order = 10;
	else if (n >= 1) order = 100;
	else order = 1000;

	n = Math.round(n * order) / order;

	n = n.toLocaleString();

	return n + "&nbsp;" + prefix[k];
}


var HumanReadableURL_stat = null;
function HumanReadableURL(url)
{
	if (!HumanReadableURL_stat) {
		HumanReadableURL_stat = {
			"re_http":   new RegExp("^http:/+", "i"),
			"re_tslash": new RegExp("/$"),
			"re_params": new RegExp("[?].*$", "g"),
			"re_path":   new RegExp("/.+/", "g")
		};
	}

	if (url == null) return null;
	switch (typeof(url)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { url = url.toString(); } catch (err) { return null; }
	}

	return url.replace(HumanReadableURL_stat.re_http, "").replace(HumanReadableURL_stat.re_tslash, "").replace(HumanReadableURL_stat.re_params, "").replace(HumanReadableURL_stat.re_path, "/…/").replace(HumanReadableURL_stat.re_tslash, "");
}


var TransformAccents_stat = null;
function TransformAccents(str)
{
	if (!TransformAccents_stat) {
		TransformAccents_stat = {
			"re_ccaron": new RegExp("\\^c", "g"),
			"re_Ccaron": new RegExp("\\^C", "g"),
			"re_scaron": new RegExp("\\^s", "g"),
			"re_Scaron": new RegExp("\\^S", "g"),
			"re_zcaron": new RegExp("\\^z", "g"),
			"re_Zcaron": new RegExp("\\^Z", "g"),

			"re_aacute": new RegExp("\\/a", "g"),
			"re_Aacute": new RegExp("\\/A", "g"),
			"re_eacute": new RegExp("\\/e", "g"),
			"re_Eacute": new RegExp("\\/E", "g"),
			"re_iacute": new RegExp("\\/i", "g"),
			"re_Iacute": new RegExp("\\/I", "g"),
			"re_oacute": new RegExp("\\/o", "g"),
			"re_Oacute": new RegExp("\\/O", "g"),
			"re_uacute": new RegExp("\\/u", "g"),
			"re_Uacute": new RegExp("\\/U", "g"),
			"re_racute": new RegExp("\\/r", "g"),
			"re_Racute": new RegExp("\\/R", "g"),

			"re_agrave": new RegExp("\\\\a", "g"),
			"re_Agrave": new RegExp("\\\\A", "g"),
			"re_egrave": new RegExp("\\\\e", "g"),
			"re_Egrave": new RegExp("\\\\E", "g"),
			"re_igrave": new RegExp("\\\\i", "g"),
			"re_Igrave": new RegExp("\\\\I", "g"),
			"re_ograve": new RegExp("\\\\o", "g"),
			"re_Ograve": new RegExp("\\\\O", "g"),
			"re_ugrave": new RegExp("\\\\u", "g"),
			"re_Ugrave": new RegExp("\\\\U", "g"),

			"re_ecirc":  new RegExp("\\^e", "g"),
			"re_Ecirc":  new RegExp("\\^E", "g"),
			"re_ocirc":  new RegExp("\\^o", "g"),
			"re_Ocirc":  new RegExp("\\^O", "g")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	return str.replace(TransformAccents_stat.re_ccaron, "č").replace(TransformAccents_stat.re_Ccaron, "Č").replace(TransformAccents_stat.re_scaron, "š").replace(TransformAccents_stat.re_Scaron, "Š").replace(TransformAccents_stat.re_zcaron, "ž").replace(TransformAccents_stat.re_Zcaron, "Ž").replace(TransformAccents_stat.re_aacute, "á").replace(TransformAccents_stat.re_Aacute, "Á").replace(TransformAccents_stat.re_eacute, "é").replace(TransformAccents_stat.re_Eacute, "É").replace(TransformAccents_stat.re_iacute, "í").replace(TransformAccents_stat.re_Iacute, "Í").replace(TransformAccents_stat.re_oacute, "ó").replace(TransformAccents_stat.re_Oacute, "Ó").replace(TransformAccents_stat.re_uacute, "ú").replace(TransformAccents_stat.re_Uacute, "Ú").replace(TransformAccents_stat.re_racute, "ŕ").replace(TransformAccents_stat.re_Racute, "Ŕ").replace(TransformAccents_stat.re_agrave, "à").replace(TransformAccents_stat.re_Agrave, "À").replace(TransformAccents_stat.re_egrave, "è").replace(TransformAccents_stat.re_Egrave, "È").replace(TransformAccents_stat.re_igrave, "ì").replace(TransformAccents_stat.re_Igrave, "Ì").replace(TransformAccents_stat.re_ograve, "ò").replace(TransformAccents_stat.re_Ograve, "Ò").replace(TransformAccents_stat.re_ugrave, "ù").replace(TransformAccents_stat.re_Ugrave, "Ù").replace(TransformAccents_stat.re_ecirc, "ê").replace(TransformAccents_stat.re_Ecirc, "Ê").replace(TransformAccents_stat.re_ocirc, "ô").replace(TransformAccents_stat.re_Ocirc, "Ô");
}


var GetPath_stat = null;
function GetPath(str)
{
	if (!GetPath_stat) {
		GetPath_stat = {
			"re_path": new RegExp("^(.*)[\\\\]([^\\\\]*)$", "")
		};
	}

	if (str == null) return null;
	switch (typeof(str)) {
		case "string":    break;
		case "boolean":
		case "number":
		case "undefined": return null;
		default:          try { str = str.toString(); } catch (err) { return null; }
	}

	var
		m = str.match(GetPath_stat.re_path);

	if (!m)
		throw new Error(Format(__("»%1« ni absolutna pot mape ali datoteke."), str));

	return m[1];
}

/*@end @*/

