/* ripped from http://www.onlinetools.org/articles/unobtrusivejavascript/cssjsseparation.html */
/*
	a
	    defines the action you want the function to perform.
	o
	    the object in question.
	c1
	    the name of the first class
	c2
	    the name of the second class

	Possible actions are:

	swap
	    replaces class c1 with class c2 in object o.
	add
	    adds class c1 to the object o.
	remove
	    removes class c1 from the object o.
	check
	    test if class c1 is already applied to object o and returns true or false
	toggle
	    test if class c1 is already applied to object o and remove if so, otherwise add class c1
*/
function jscss(a,o,c1,c2)
{
	switch (a)
	{
		case 'swap':
			o.className=!jscss('check',o,c1)?o.className.replace(c2,c1):
			o.className.replace(c1,c2);
			break;
		case 'add':
			if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
			break;
		case 'remove':
			var rep=o.className.match(' '+c1)?' '+c1:c1;
			o.className=o.className.replace(rep,'');
			break;
		case 'check':
			return new RegExp('\\b'+c1+'\\b').test(o.className);
			break;
		case 'toggle':
			var operation = 'add';
			if(jscss('check',o,c1))
				operation = 'remove';

			jscss(operation,o,c1,c2);

			return operation;
			break;
	}
	return null;
};

function cssQueryClass(query, classname)
{
	var items = cssQuery(query);

	for(var i=0;i < items.length; i++)
	{
		jscss('add', items[i], classname, '');
	}
};

function addEvent(obj, evType, fn)
{
	if(typeof obj == 'undefined' || !obj)
		return false;

	if (obj.attachEvent)
	{
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	}
	else if (obj.addEventListener)
	{
		obj.addEventListener(evType, fn, false);
		return true;
	}

	return null;
};

function getObj(ev, ob)
{
	if(!ob)
	{
		var targ;
		if (!ev) ev = window.event;

		if (ev.target) targ = ev.target;
		else if (ev.srcElement) targ = ev.srcElement;

		if (targ && targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;

		return targ;
	}
	else
	{
		return ob;
	}
};

function in_array(needle, haystack)
{
	return (array_search(needle, haystack) !== false);
};

function array_search(needle, haystack)
{
	for(var i = 0; i < haystack.length;i++)
	{
		if(haystack[i] == needle)
		{
			return i;
		}
	}

	return false;
};

function loadScript(url, prependBoardUrl)
{
	if(prependBoardUrl)
		url = board_template_url + url;

	var e = document.createElement("script");

	e.type = "text/javascript";
	e.src = url;
	document.getElementsByTagName("head")[0].appendChild(e);
};

function currentStyle(element, property)
{
	return parseInt(window.getComputedStyle ? window.getComputedStyle(element_m,'').getPropertyValue(property) : element.currentStyle.getAttribute(property));
};

function cloneNodeDeep(source, target)
{
	target.innerHTML = target.innerHTML + source.xml;
	return true;
};

function empty(ev, ob)
{
	var x = getObj(ev, ob);

	if(x && x.value == x.defaultValue )
	{
		x.value = '';
	}
};

function unhtmlspecialchars(str)
{
	str = str.replace(/&amp;/gi, '&');
	str = str.replace(/&lt;/gi, '<');
	str = str.replace(/&gt;/gi, '>');
	return str;
};

/* tnx crisp */
function htmlspecialchars(input)
{
	input = input.replace(/&/g,'&amp;');
	input = input.replace(/>/g,'&gt;');
	input = input.replace(/</g,'&lt;');
	input = input.replace(/"/g,'&quot;');

	/* " < fix syntax highlighting */

	return input;
};

function getCookie(sName)
{
	var aCookie = document.cookie.split('; '), i = aCookie.length, aCrumb;
	while (i--)
	{
 		aCrumb = aCookie[i].split('=');
		if (sName == aCrumb[0])
			return typeof aCrumb[1] != 'undefined'? unescape(aCrumb[1]) : null;
	}

	return null;
}

function setCookie(sName, sValue)
{
	document.cookie = sName + '=' + escape(sValue) + '; expires=Fri, 31 Dec 2099 23:59:59 GMT; path=/';
}

// transparantPNG - Based on http://www.schillmania.com/projects/png/ but very much completely rewritten
// Apply a filter in IE to make png's (both images and background-images) transparant
function transparantPNG()
{
	var appVersion = navigator.appVersion.toLowerCase();
	var isIE = navigator.appName.toLowerCase().indexOf('internet explorer')+1 ? 1:0;
	var isWin = appVersion.indexOf('windows')+1 ? 1:0;
	var ver = parseFloat(appVersion.split('msie ')[1]);

	if ((isIE && isWin && ver >= 5.5))
	{
		// Here you can decide which elements to search for png's (you can use * but that will be very slow)
		var elements = cssQuery('.transparantPNG');
		var object;
		var imagesource;

		for (var i=0; i < elements.length; i++)
		{
			object = elements[i];

			if (object.getAttribute('src')) {
				imagesource = object.getAttribute('src');
				object.src = 'transparantPNG.gif';
			} else if (object.currentStyle.backgroundImage.toString() && object.currentStyle.backgroundImage.toString() != "none") {
				var cssBackground = object.currentStyle.backgroundImage.toString();
				var j = cssBackground.indexOf('url("')+5;
				imagesource = cssBackground.substr(j,cssBackground.length-j-2);
				object.style.backgroundImage = 'none';
			} else {
				return false;
			}

			object.style.writingMode = 'lr-tb';
			object.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+imagesource+"',sizingMethod='crop')";
		}
	}
}

var texts = new Array()
function getText(a, b, c)
{
	if(typeof texts[a] == 'undefined' || typeof texts[a][b] == 'undefined' || !texts[a][b] )
		return '[text not found: '+a+'::'+b+']';

	if ( c )
		return texts[a][b].replace('%s',c);
	else
		return texts[a][b]
}