function addNamespace(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]] = {};
		root = root[nsParts[i]];
	}
}
Object.addNamespace=function (ns) {
	if (!ns) return null;
	var levels=ns.split(".");
	var root=window;
	for (var i=0;i<levels.length;i++) {
		if (root[levels[i]]==undefined) root[levels[i]]={};
		root=root[levels[i]];
	}
	return root;
}
Element.create=function (tag,parent,props,before) {
	var el;
	if (tag.charAt(0)=="<") {
		var div=document.createElement("div");
		div.innerHTML=tag;
		el=div.firstChild;
	}
	else el=document.createElement(tag);
	if (parent) parent.insertBefore(el,before ? before : null);
	if (props) {
		for (var p in props) el[p]=props[p];
	}
	return $(el);
}
window._=Element.create;

Object.extend(Element.Methods,{
	makeLink:function (element) {
		element=$(element);
		element.addClassName("hand");
		Event.observe(element,"mouseover",function () { element.addClassName("u"); });
		Event.observe(element,"mouseout",function () { element.removeClassName("u"); });
	}
});
Object.extend(Element,Element.Methods);



Object.h=function (o,funcs,showFuncContent) {var s=[];for (var i in o) {if (typeof o[i]=="function" && funcs) s.push(i+"\t\t"+(showFuncContent ? o[i] : o[i].toString().substr(0,o[i].toString().search(/[\n\{]/))));else if (typeof o[i]!="function") s.push(i+"\t\t"+o[i]);}return "\r\n"+s.join("\r\n")+"\r\n";};
window.h=Object.h;

Event.findElementByFunction=function (event,func) {
	var element=Event.element(event) || event;
	while (!func(element) && element && element!=document.documentElement) element=element.parentNode;
	return element==document.documentElement ? null : element;
};

Date.Format=function (date,format) {
	if (!date instanceof Date) date=new Date(date) || new Date();format=format || "h:I:S d/m/Y";format=format.split("");var a=[];for (var i=0;i<format.length;i++) a.push(Date.FormatIntervals[format[i]] ?  Date.FormatIntervals[format[i]](date) : format[i]);return a.join("");
}
Date.prototype.Format=function (format) {return Date.Format(this,format);}
Date.FormatIntervals={
	Months:["January","February","March","April","May","June","July","August","September","October","November","December"],
	HebMonths:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],
	Days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
	ShortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],
	HebDays:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],
	HebShortDays:["א","ב","ג","ד","ה","ו","ש"],
	d:function (o) { return o.getDate(); },
	D:function (o) { return (""+this.d(o)).pad(); },
	m:function (o) { return o.getMonth()+1; },
	M:function (o) { return (""+this.m(o)).pad(); },
	n:function (o) { return this.N(o).substr(0,3); },
	N:function (o) { return this.Months[this.m(o)-1]; },
	B:function (o) { return this.HebMonths[this.m(o)-1]; },
	y:function (o) { return (""+this.Y(o)).substr(2); },
	Y:function (o) { return o.getFullYear(); },
	h:function (o) { return o.getHours(); },
	H:function (o) { return (""+this.h(o)).pad(); },
	i:function (o) { return o.getMinutes(); },
	I:function (o) { return (""+this.i(o)).pad(); },
	s:function (o) { return o.getSeconds(); },
	S:function (o) { return (""+this.s(o)).pad(); },
	w:function (o) { return this.W(o).substr(0,3); },
	W:function (o) { return this.Days[o.getDay()]; },
	r:function (o) { return o.getDay()==6 ? "ש" : String.fromCharCode(o.getDay()+"א".charCodeAt()); },
	R:function (o) { return this.HebDays[o.getDay()]; },
	t:function (o) { var s="th",d=o.getDate();if (Math.floor(d/10)!=1) switch (d%10) { case 1: s="st"; break; case 2: s="nd"; break; case 3: s="rd"; break; } return s; }
};

String.prototype.pad=function (n,chr) {
	var s=this.valueOf();
	n=n || 2;chr=chr || "0";s=""+s;while (s.length<n) s=chr+s;
	return s;
}

var MAX_CSS_VALUE=32000;

String.prototype.ToRx=function () {return this.replace(/(\(|\)|\{|\}|\[|\]|\:|\^|\$|\!|\=|\+|\*|\/|\,|\-|\||\?)/g,"\\$1");};

addNamespace("Mantis");
Mantis.Text={
	Pad:function (s,n,chr) {n=n || 2;chr=chr || "0";s=""+s;while (s.length<n) s=chr+s;return s;},
	Escape:function (str,html) { if (typeof str=="string" && str.length) {if (!html) {str=str.replace(/>/g,"&gt;").replace(/</g,"&lt;");}else {str=str.replace(/\r?\n/g,"<br/>");}str=str.replace(/"/g,"&quot;").replace(/'/g,"&#39;");}return str;}
}

Date.Parse=function (s) {
	if (!Date.Parse.Init.Initiated) Date.Parse.Init();
	s=s.replace(/\D/g,"/");
	// en-US gets mdy
	var enUS=Mantis.Reut.Client.Language.Culture=="en-US";

	if (Date.Parse.Rx[enUS ? "DateMDY" : "DateDMY"].test(s)) {
		var d,m,y;
		var a=s.split("/");
		y=a[2];
		if (y.length==2 && y<95) y="20"+y;
		if (enUS) { d=a[1]; m=a[0]; }
		else { d=a[0]; m=a[1]; }

		return new Date(+y,(+m)-1,+d);
	}
	return null;
};
Date.Parse.Init=function () {
	var dmy="((29\\/0?2(?=\\/(\\d{2}(0[48]|[13579][26]|[2468][048])|([13579][26]|[2468][048])00))|([01]?\\d|2[0-8])\\/(0?\\d|1[0-2])|(29|30)\\/(0?[13-9]|1[0-2])|31\\/(0?[13578]|1[02]))\\/(\\d{2}|\\d{4}))",
		mdy="((0?2\\/29(?=\\/(\\d{2}(0[48]|[13579][26]|[2468][048])|([13579][26]|[2468][048])00))|(0?\\d|1[0-2])\\/([01]?\\d|2[0-8])|(0?[13-9]|1[0-2])\\/(29|30)|(0?[13578]|1[02])\\/31)\\/(\\d{2}|\\d{4}))";

	Date.Parse.Rx={
		DateDMY:new RegExp("^"+dmy+"$"),
		DateMDY:new RegExp("^"+mdy+"$")
	};

	Date.Parse.Init.Initiated=true;
};

$dl=function (f){//(C)webreflection.blogspot.com
var a=$dl,b=navigator.userAgent,d=document,w=window,c="$dl",e="addEventListener",o="opera",r="readyState",
s="<scr".concat("ipt defer src='//:' on",r,"change='if(this.",r,"==\"complete\"){this.parentNode.removeChild(this);",c,".",c,"()}'></scr","ipt>");
a[c]=(function(o){return function(){a[c]=function(){};for(a=arguments.callee;!a.done;a.done=1)f(o?o():o)}})(a[c]);
if(d[e])d[e]("DOMContentLoaded",a[c],false);
if(/WebKit|Khtml/i.test(b)||(w[o]&&parseInt(w[o].version())<9))(function(){/loaded|complete/.test(d[r])?a[c]():setTimeout(arguments.callee,1)})();
else if(/MSIE/i.test(b))d.write(s);
};
