/**** $Id$ ****/


function SYNACOR_findObj(n, d) {
	var p,i,x;
	if (!d)
	{
		d=document;
	}
	if ((p=n.indexOf("?"))>0&&parent.frames.length)
	{
		d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);
	}
	if (!(x=d[n])&&d.all)
	{
		x=d.all[n];
	}
	for (i=0; !x&&i<d.forms.length; i++)
	{
		x=d.forms[i][n];
	}
	for(i=0; !x && d.layers && id.layers.length; i++)
	{
		x=SYNACOR_findObj(n,d.layers[i].document);
	}
	if(!x && d.getElementById)
	{
		x=d.getElementById(n);
	}

	return x;
}

function find_pos_x(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;
}

function find_pos_y(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;
}

function SYNACOR_Snap() 
{
	var args = SYNACOR_Snap.arguments;
	var x = 0;
	var y = 0;

	for (offset = 0; offset < args.length; offset += 4)
	{
		var source_element = args[offset];
		var move_element = args[offset + 1];
		var dest_x = parseInt(args[offset + 2]);
		var dest_y = parseInt(args[offset + 3]);

		source_element = document.getElementById(source_element);
		move_element   = document.getElementById(move_element);
		if (!source_element || !move_element)
		{
			return;
		}

		x = find_pos_x(source_element);
		y = find_pos_y(source_element);

		try
		{
			move_element.style.left = (x + dest_x) + 'px';
			move_element.style.top  = (y + dest_y) + 'px';
		}
		catch (e)
		{
			try
			{
				move_element.offsetLeft = x + dest_x;
				move_element.offsetTop  = y + dest_y;
			}
			catch (e)
			{
			}
		}
	}
	return;
}

function SYNACOR_showHideLayers() { //v6.0
	var i,p,v,obj,args=SYNACOR_showHideLayers.arguments;
	for (i=0; i<(args.length-2); i+=3)
	{
		if ((obj=SYNACOR_findObj(args[i]))!=null)
		{
			v=args[i+2];
			if (obj.style)
			{
				obj=obj.style;
				vv=(v=='show')?'visible':(v=='hide')?'hidden':v;
				vd=(v=='show')?'block':(v=='hide')?'none':v;
			}
			obj.visibility=vv;
			obj.display=vd;
		}
	}
}

function getXMLRequestObject()
{
	var xmlhttp=false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	// Funky coditional compilation to handle securty issues and ActiveX
	// Object version differences
	try {
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
	try {
	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (E) {
	xmlhttp = false;
	}
	}
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest!='undefined')
	{
		xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}

function get_cdata(dom, tag)
{
	var tag = dom.getElementsByTagName(tag);
	if (!tag || tag.length < 1 || !tag[0].firstChild ||
	!tag[0].firstChild.data)
	{
		return '';
	}
	return tag[0].firstChild.data;
}

function get_attribute(dom, tag, attribute)
{
	var tag = dom.getElementsByTagName(tag);
	if (!tag || tag.length < 1 || !tag[0].attributes ||
	     tag[0].attributes.length < 1 || !tag[0].attributes.getNamedItem(attribute))
	{
		return '';
	}
	
	return tag[0].attributes.getNamedItem(attribute).value;
}

function hide_id(id_to_hide)
{
	var what = document.getElementById(id_to_hide);
	if (what)
	{
		what.style.display='none';
	}
}

function base64encode(str)
{
	var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	var out;
	var i;
	var len;
	var c1;
	var c2;
	var c3;
	var len = str.length;
	var i = 0;
	out = "";
	while (i < len)
	{
		c1 = str.charCodeAt(i++) & 0xff;
		if (i == len)
		{
			out += base64EncodeChars.charAt(c1 >> 2);
			out += base64EncodeChars.charAt((c1 & 0x3) << 4);
			out += "==";
			break;
		}
		c2 = str.charCodeAt(i++);
		if (i == len)
		{
			out += base64EncodeChars.charAt(c1 >> 2);
			out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
			out += base64EncodeChars.charAt((c2 & 0xF) << 2);
			out += "=";
			break;
		}
		c3 = str.charCodeAt(i++);
		out += base64EncodeChars.charAt(c1 >> 2);
		out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
		out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
		out += base64EncodeChars.charAt(c3 & 0x3F);
	}
	return out;
}

function trimStr(str)
{
	str = str.replace(/^\s*/, "");
	str = str.replace(/\s*$/, "");
	
	return str;
}

function reg_repl_esc(text)
{
        return text.replace(/\$/g, '&#36;');
}

function add_event_listener(oRef,en,fn)
{
        obj = (typeof oRef == 'string')? document.getElementById(oRef) : oRef;
        if (window.addEventListener) obj.addEventListener(en,fn,false);
        else if (window.attachEvent) obj.attachEvent('on'+en,fn);

}

function remove_event_listener(oRef,en,fn)
{
        obj = (typeof oRef == 'string')? document.getElementById(oRef) : oRef;
        if (window.addEventListener) obj.removeEventListener(en,fn,false);
        else if (window.attachEvent) obj.detachEvent('on'+en,fn);

}

