var thisform;

Element.addMethods({
	removeChildren: function(object) {
		while(object.firstChild)
			object.removeChild(object.firstChild);
	},
	attachLabel: function(object, label) {
		if(!object.id) object.id = 'id' + Math.random();
			label.htmlFor = object.id;
	}
});

function $T(text)
{
	return document.createTextNode(text);
}

function Lineclear()
{
	var lc = new Element('div');
	lc.className = 'lineclear';
	lc.innerHTML = '<span></span>';
	return lc;
}

function Pagespacer()
{
	var ps = new Element('div');
	ps.className = 'pages_spacer';
	return ps;
}

Event.observe(document, 'click', function(event) {
	var element = Event.element(event);
	while(element) {
		if(element.clickHandler) {
			element.clickHandler(event);
			break;
		}
		element = element.parentNode;
	}
});

Event._observe = Event.observe;
Event.observe = function(element, eventName, handler, useCapture) {
	if(eventName == 'click') {
		element.clickHandler = handler;
	} else {
		Event._observe(element, eventName, handler, useCapture);
	}
}

function ImageButton(f, src, alt, title, hoverSrc)
{
	var img = new Element('img');
	img.clickHandler = (function(event) {
		if(Event.isLeftClick(event))
			f(event);
		return false;
	}).bind(this);
	img.style.cursor = 'pointer';
	img.src = src;
	img.alt = alt;
	if(title)
		img.title = title;
	if(hoverSrc)
	{
		img.onmouseover = function() { img.src = hoverSrc; }
		img.onmouseout = function() { img.src = src; }
		new Image().src = hoverSrc; // preload hover image
	}
	return img;
}

function TextButton(f, text, title)
{
	var a = new Element('a');
	a.appendChild($T(text));
	a.clickHandler = (function(event) {
		if(Event.isLeftClick(event))
			f(event);
		return false;
	}).bind(this);
	a.href = "javascript:void(0);";
	if(title)
		a.title = title;
	return a;
}

function Span(text)
{
	var s = new Element('span');
	s.innerHTML = text;
	return s;
}

function TextItem(text)
{
	var li = new Element('li');
	li.appendChild(new Span(text));
	return li;
}

function loading(rpc)
{
	if(rpc)
	{
		if($('loading'))
		{
			$('loading').show();
			Element.setOpacity('loading', 0.9);
			$('loading_cancel').clickHandler = function(event) {
				rpc.abort(event);
				loading(false);
			}
		}
	}
	else
	{
		if($('loading'))
			$('loading').hide();
		unwait();
	}
}

function wait() {
	document.body.addClassName('wait');
}

function unwait() {
	document.body.removeClassName('wait');
}

function filename(hash)
{
	return hash.substring(0, 1) + '/' + hash.substring(1, 2) + '/' + hash;
}

function language(lang_var, vars)
{
	if(typeof vars != 'undefined')
	{
		if(!(vars instanceof Array)) vars = [vars];
		if(languages[lang_var])
		{
			var output = languages[lang_var];
			for(var i = 0, il = vars.length; i < il; i++)
				output = output.replace('%s', vars[i]);

			return output.unescapeHTML();
		}
		else
		{
			return '<em><code>' + lang_var + '</code> not set</em>';
		}
	}
	else
	{
		return languages[lang_var] ? languages[lang_var].unescapeHTML() : '<em><code>' + lang_var + '</code> not set</em>';
	}
}

function showCat(category)
{
	location.href = "index.php?filter=" + category;
}

function windowopen(url, x, y)
{
	window.open(url, '_blank', 'fullscreen=0, toolbar=0, location=0, directories=0, status=0, menubar=0, scrollbars=0, resizable=1, width=' + x + ', height=' + y);
}

function windowopenscroll(url, x, y)
{
	window.open(url, '_blank', 'fullscreen=0, toolbar=0, location=0, directories=0, status=1, menubar=0, scrollbars=1, resizable=1, width=' + x + ', height=' + y);
}

function viewer(hash)
{
	windowopen('popup.viewer.php?hash=' + hash, 610, 630);
}

function meta(hash)
{
	windowopenscroll('popup.metadata.php?hash=' + hash, 600, 400);
}

function cEdit(hash)
{
	if(confirm(language('copyedit-confirm')))
		windowopenscroll('popup.edit.php?hash=' + hash, 400, 200);
}

function comment(hash, w)
{
	var imageSize = settings.thumb_size + 2 * settings.thumb_padding;
	windowopenscroll('popup.comments.' + (w ? 'write' : 'read') + '.php?hash=' + hash, 400 + imageSize, 80 + imageSize);
}

function confirmLink(text, url)
{
	if(confirm(text))
		location.href = url;
}

function accessMode(mode)
{
	location.href = '?set_priv=' + mode;
}

function getKeys(array)
{
	var arrayKeys = [];
	for(var i in array)
		if(array[i])
			arrayKeys.push(i);
	return arrayKeys;
}

function getNodeValue(node)
{
	return node.firstChild ? removeWhitespace(node.firstChild.nodeValue) : '';
}

function removeWhitespace(data)
{
  data = data.replace(/[\t\n\r ]+/g, " ");
  if (data.charAt(0) == " ")
    data = data.substring(1, data.length);
  if (data.charAt(data.length - 1) == " ")
    data = data.substring(0, data.length - 1);
  return data;
}

var OverrideSubmit = Class.create({
	initialize: function(element, override) {
		$(element).observe('keydown', function(event) {
			if(event.keyCode == Event.KEY_RETURN) {
				Event.stop(event);
				if(override) override();
			}
		});
	}
});

/*
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();
var pngSupport = !(BrowserDetect.browser == 'Explorer' && BrowserDetect.OS == 'Windows' && BrowserDetect.version < 7);
*/