// JavaScript Document

function getObject (object, win) {
	if (typeof win == "undefined") {
		win = window;
	}
//	if (typeof object == "string") {
		return win.document.getElementById(object);
//	} else if (typeof object == "object") {
//		// some voodoo for "refresh" object after replacements
//		return document.getElementById(object.id);
//	}
}

function getObjectN (object) {
	return document.getElementsByName(object);
}

var styleStart = "<style type='text/css'>";
var styleEnd = "</style>";
function outStyle (rule, attribute, value) {
	return rule + " { " + attribute + ": " + value + "; }";
}
function setStyle (rule, attribute, value, wrap) {
	if (typeof wrap == "undefined") {
		wrap = true;
	}
	if (wrap) {
		document.write(styleStart);
	}
	document.write(outStyle(rule, attribute, value));
	if (wrap) {
		document.write(styleEnd);
	}
}

function setValidator (form, validator) {
	_addEventListener(getObject(form), "submit", validator, false);
}

function setUploader (form) {
	var list;
	list = getObject(form).getElementsByTagName("span");
	for (var i = 0; i < list.length; i++) {
		if (list[i].className == "spanupload") {
			list[i].style.cursor = "pointer";
			_addEventListener(list[i], "click", flipUpload, false);
		}
	}
}

function flipUpload (ev) {
	var src = ev.srcElement ? ev.srcElement : ev.target;
	var tgt = getObject("fu_" + src.id.slice(3));
	if (tgt.className == "frameuploadc") {
		tgt.className = "frameuploado";
	} else if (tgt.className == "frameuploado") {
		tgt.className = "frameuploadc";
	}
}

/* function valMessageSend (field, message) {
	var list;
	list = getParent(field, "form").getElementsByTagName("div");
	for (var i = 0; i < list.length; i++) {
		if (list[i].className == 'valmessage') {
			list[i].innerHTML = message;
			break;
		}
	}
	var id, pos = field.id.indexOf("_");
	if (pos != -1) {
		id = field.id.slice(0, pos);
	} else {
		id = field.id;
	}
	var span = getObject("s_" + id);
	if (span) {
		span.style.color = "#F00";
		span.style.fontWeight = "bold";
	}
} */

function valMessageSend (field, message) {
	var id, pos = field.id.indexOf("_"), fckfield;
	if (pos != -1) {
		id = field.id.slice(0, pos);
	} else {
		id = field.id;
	}
	if (typeof FCKeditorAPI != "undefined") {
		fckfield = FCKeditorAPI.GetInstance(id);
	}
	if (fckfield) {
		fckfield.Focus();
	} else {
		if (getObject(id)) {
			getObject(id).focus();
		} else {
			try {
				field.focus();
			} catch (e) {
			}
		}
		
	}
	var span = getObject("s_" + id);
	if (span) {
		span.style.color = "#F00";
		span.style.fontWeight = "bold";
		span.innerHTML += "<br />" + message;
	}
}

/* function valMessageClear (field) {
	var list, span;
	list = getParent(field, "form").getElementsByTagName("div");
	for (var i = 0; i < list.length; i++) {
		if (list[i].className == 'valmessage') {
			list[i].innerHTML = "";
			break;
		}
	}
	list = getParent(field, "form").getElementsByTagName("span");
	for (var i = 0; i < list.length; i++) {
		if (list[i].className == 'valasterisk') {
			span = list[i];
			span.style.color = "";
			span.style.fontWeight = "";
		}
	}
} */

function valMessageClear (field) {
	var list, span, pos;
	list = getParent(field, "form").getElementsByTagName("span");
	for (var i = 0; i < list.length; i++) {
		if (list[i].className == 'valasterisk') {
			span = list[i];
			span.style.color = "";
			span.style.fontWeight = "";
			pos = span.innerHTML.indexOf("<");
			if (pos != -1) {
				span.innerHTML = span.innerHTML.slice(0, pos);
			}
		}
	}
}

function getParent (object, parenttag) {
	var parent = object.parentNode;
	var tag = parent.tagName.toLowerCase();
	if (tag == parenttag) {
		return parent;
	} else if (tag == "body") {
		return null;
	} else {
		return getParent(parent, parenttag);
	}
}

function _addEventListener (element, eventType, handler, capture) {
	try {
		if (element.addEventListener) {
			element.addEventListener(eventType, handler, capture);
		} else if (element.attachEvent) {
			element.attachEvent("on" + eventType, handler);
		}
	} catch (e) {}
};

function _removeEventListener (element, eventType, handler, capture) {
	try {
		if (element.removeEventListener) {
			element.removeEventListener(eventType, handler, capture);
		} else if (element.detachEvent) {
			element.detachEvent("on" + eventType, handler);
		}
	} catch (e) {}
}

function waitOpen (list) {
	var target, waiter = getObject("waiter");
	if (waiter == null) {
		var waiter = document.createElement("<div id='waiter'>");
		waiter.innerText = "loading...";
		waiter.style.left = (screen.availWidth - 150) * 0.5;
		waiter.style.top = screen.availHeight * 0.3;
		document.body.appendChild(waiter);
		waiter.style.display = "block";
	} else {
		waiter.style.display = "block";
	}
	if (list != null) {
		for (var i = 0; i < list.length; i++) {
			target = getObject(list[i]);
			if (target != null) {
				target.disabled = true;
				target.style.cursor = "wait";
				target.className = "disabled";
			}
		}
	}
}

function waitClose (list) {
	var target, waiter = getObject("waiter");
	if (waiter != null) {
		waiter.style.display = "none";
	}
	if (list != null) {
		for (var i = 0; i < list.length; i++) {
			target = getObject(list[i]);
			if (target != null) {
				target.disabled = false;
				target.style.cursor = "";
				target.className = "";
			}
		}
	}
}

function stopper (ev) {
	if (ev.srcElement) {
		ev.returnValue = false;
	} else {
		ev.preventDefault();
	}
	return false;
}

String.prototype.safeTag = function () {
	var value = this.valueOf();
	return value.replace(/<(.+?)>/g, " ");
}

String.prototype.safeSpace = function () {
	var value = this.valueOf();
	return value.replace(/\s+/g, " ").replace(/(^\s)|(\s$)/g, "");
}

String.prototype.toSearchString = function () {
	var value = this.valueOf();
	return value.safeTag().safeREW().safeSpace();
}

var LX = { version: "0.1" };

LX.Inputs = {
	setAutocompleter: function (element, klass, list, options) {
		element = $(element);
		var div = element.writeAttribute("autocomplete", "off").insert({after: "<div class='" + klass + "'></div>"}).next("div." + klass).hide();
		new Autocompleter.Local(element, div, list, options);
		return element;
	}
}

Element.addMethods(["INPUT", "SELECT", "TEXTAREA"], LX.Inputs);
