var MSIE = false;
var agent = navigator.userAgent;
if (/MSIE/.test(agent)) MSIE = true;
function unhtml(n) {
  s = '';
  while (s != n) {
    s = n;
    n = n.replace("<br>", "\n").replace("<br>", "\n").replace('&quot;', '"').replace('&', '&');
  }
  return n;
}
function max(a, b) {
	return a > b ? a : b;
}
function nl2br(n) {
  s = '';
  while (s != n) { s = n; n = n.replace("\n", '<br>'); }
  return n;
}
function window_add_event(obj, ev, eh) {
	if (obj.frames)
		for (var i in obj.frames)
			window_add_event(obj.frames[i], ev, eh);
	if (obj.document) obj = obj.document;
	add_event(obj, ev, eh);
}
function addEvent(obj, ev, eh) {
	if (obj.addEventListener) obj.addEventListener(ev, eh, false);
	else if (obj.attachEvent) obj.attachEvent('on' + ev, eh);
}
add_event = addEvent;
function window_drop_event(obj, ev, eh) {
	if (obj.frames)
		for (var i in obj.frames)
			window_drop_event(obj.frames[i], ev, eh);
	if (obj.document) obj = obj.document;
	drop_event(obj, ev, eh);
}
function dropEvent(obj, ev, eh) {
	if (obj.removeEventListener) obj.removeEventListener(ev, eh, false);
	else if (obj.detachEvent) obj.detachEvent('on' + ev, eh);
}
drop_event = dropEvent;
function getEventObj(e) {
	if (e.originalTarget) return e.originalTarget;
	else if (e.srcElement) return e.srcElement;
	else return false;
}
get_event_obj = getEventObj;
function getObj(n) {
  if (document.getElementById) return document.getElementById(n);
  if (document.all) return document.all[n];
  return null;
}
get_obj = getObj;
function debugObj(obj) {
	s = '';
	for (a in obj) {
		var e;
		try {
			s += a + ' = ' + String(obj[a]).replace(/</g, '&lt;') + ";<br/>\n";
		} catch (e) {
		}
	}
	win = window.open('about:blank', '_blank');
	with (win.document) {
		open();
		write(s);
		close();
	}
}
debug_obj = debugObj;
function getOffsetLeft(obj) {
  var curleft = 0;
  if (obj.offsetParent)
    while (obj.offsetParent) {
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  else if (obj.x) curleft += obj.x;
  return curleft;
}
get_offset_left = getOffsetLeft;
function getOffsetTop(obj) {
  var curtop = 0;
  if (obj.offsetParent)
    while (obj.offsetParent) {
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  else if (obj.y) curtop += obj.y;
  return curtop;
}
get_offset_top = getOffsetTop;
function set_style_rec(o, s, v) {
	if (o && o.style)
		o.style[s] = v;
	if (o && o.childNodes && o.childNodes.length)
		for (i = o.childNodes.length - 1; i >= 0; i--){
			set_style_rec(o.childNodes[i], s, v);
	}
}
function load_script(src) {
	var script = document.createElement('script');
	if (MSIE)
		setTimeout("if (typeof(window.script_to_eval)=='string' && window.script_to_eval != '') eval_html_js(window.script_to_eval);", 200);
	else
		add_event(script, 'load', function() { if (typeof(window.script_to_eval)=='string' && window.script_to_eval != '') eval_html_js(window.script_to_eval); });
	script.id = 'loading_script';
	script.type = 'text/javascript';
	script.defer = true;
	script.src = src;
	var head = document.getElementsByTagName('head').item(0);
	head.appendChild(script);
}
var re_s = new RegExp('<script(?:(?:src=["\']([^"\']*)["\'])|(?:type=["\'][^"\']*["\'])|(?:\r|\n|\t|\\s)*)*>(?:\r|\n|\t|\\s)*(?:<'+'!--(?:\r|\n|\t|\\s)*)?((?:.|\r|\n|\t|\\s)*?)(?:\r|\n|\t|\\s)*(?:\/\/-->(?:\r|\n|\t|\\s)*)?<\/script>', 'im');
var re_f = new RegExp('function(?:\r|\n|\t|\\s)*([a-z0-9_]*)', 'im');
var re_f = new RegExp('function(?:\r|\n|\t|\\s)*([a-z0-9_]*)', 'im');
function eval_html_js(text) {
	while (re_s.test(text)) {
		var sc = re_s.exec(text);
		text = text.replace(sc[0], '');
		window.script_to_eval = text;
		if (typeof(sc[1]) == 'string' && sc[1] != '') {
			load_script(sc[1]);
			return false;
		}
		if (typeof(sc[2]) == 'string' && sc[2] != '') {
			var t = sc[2];
			while (re_f.test(t)) {
				var fn = re_f.exec(t);
				t = t.replace(fn[0], '');
				if (typeof(fn[1]) == 'string' && fn[1] != '')
					sc[2] = sc[2].replace(fn[0], 'window.' + fn[1] + ' = ' + fn[0]);
			}
			sc[2] += "\n" + 'eval_html_js(window.script_to_eval);';
			window.eval_now = sc[2];
			setTimeout('try { eval(window.eval_now); } catch (e) { catch_error(e); }', 10);
			return false;
		}
	}
	window.script_to_eval = '';
	return true;
}
function catch_error(e) {
	if (typeof(e.message) == 'string' && e.message != '')
		alert(e.message);
	else
		alert(e);
}
function eval_obj_js(obj) {
	eval_html_js(obj.innerHTML);
}
var hexChars = "0123456789ABCDEF";
function dec_to_hex(dec) {
	if (dec == 256) return 'FF';
	var a = dec % 16;
	var b = (dec - a)/16;
	hex = '' + hexChars.charAt(b) + hexChars.charAt(a);
	return hex;
}
function serialize_js(o) {
	var out = new Array();
	for (var i in o) {
		if (i == 'parent') continue;
		if (typeof(i) != 'number') iv = '"' + i.replace(/\\/g, '\\\\').replace(/\n/g, '\\n').replace(/"/g, '\\"').replace(/<([^"])/g, '<" + "') + '"'; else iv = i;
		if (typeof(o[i]) == 'object') {
			out[out.length++] = iv + ':' + serialize_js(o[i]);
		} else if (typeof(o[i]) == 'string')
			out[out.length++] = iv + ':"' + o[i].replace(/\\/g, '\\\\').replace(/\n/g, '\\n').replace(/"/g, '\\"').replace(/<([^"])/g, '<" + "') + '"';
		else if (typeof(o[i]) == 'number')
			out[out.length++] = iv + ':' + o[i];
	}
	return '{' + out.join(', ') + '}';
}
function obj_length(o) {
	var l = 0;
	for (var i in o) l++;
	return l;
}
function find_childs_by_id(e, i) {
	var r = new Array();
	var c;
	var re = new RegExp('^' + i + '$');
//	var re = new RegExp(i);
	if (MSIE) c = e.all;
	else c = e.getElementsByTagName('*');
	if(c!=null)
	for (var e in c)
	{
		if (re.test(c[e].id))
			r.push(c[e]);
	}
	if (r.length)
		return r;
	else
		return null;
}
function serialize_php(o) {
	function var_to_php(i) {
//.replace(/\\/g, '\\\\').replace(/"/g, '\\"')
		if (typeof(i) != 'number') return 's:' + i.length + ':"' + i + '"';
		else return 'i:' + i;
	}
	var out = new Array();
	for (var i in o) {
		iv = var_to_php(i);
		if (typeof(o[i]) == 'object') {
			out[out.length++] = iv + ';' + serialize_php(o[i]);
		} else if (typeof(o[i]) == 'string')
			out[out.length++] = iv + ';' + var_to_php(o[i]) + ';';
		else if (typeof(o[i]) == 'number')
			out[out.length++] = iv + ';i:' + o[i] + ';';
	}
	return 'a:' + out.length + ':{' + out.join('') + '}';
}
function select_add_option(s, t, v) {
	var o = document.createElement('OPTION');
	o.text = t;
	o.value = v;
	(s.options.add) ? s.options.add(o) : s.add(o, null);
}
function load_select_from_hash(s, h) {
	for (var i = s.options.length - 1; i >= 0; i--)
		s.options[i] = null;
	for (var i in h)
		select_add_option(s, h[i], i);
}
function changecss(theClass,element,value)
{
//documentation for this script at http://www.shawnolson.net/a/503/
	var cssRules;
	if (document.all) 
	{
  		cssRules = 'rules';
	}
	else if (document.getElementById) 
	{
		cssRules = 'cssRules';
	}
try{
	for (var S = 0; S < document.styleSheets.length; S++)
	{
try{
		for (var R = 0; R < document.styleSheets[S][cssRules].length; R++)
		{
try{
			if (document.styleSheets[S][cssRules][R].selectorText == theClass)
			{
try{
				document.styleSheets[S][cssRules][R].style[element] = value;
} catch(e) {}
			}
} catch(e) {}
		}
} catch(e) {}
	}
} catch(e) {}
}
/**
 * Set js-window title from iframe or ajax div
 */
function set_win_title(t) {
	var o = 0;
	try {
		if (window.c_obj) o = window.c_obj;
		else if (typeof(window.frameElement)!='undefined' && typeof(window.frameElement.parentNode)!='undefined') o = window.frameElement.parentNode.parent;
		else if (typeof(window.parentNode)!='undefined') o = window.parentNode.parent;
	} catch (e) {
	}
	if (o && o.set_title)
		o.set_title(t);
}

function in_array(needle, haystack)
{
	for (var i = 0; i < haystack.length; i++)
	{
		if (needle == haystack[i]) return true;
	}
	return false;
}
