/**
* Filename................: lib.js
* Project.................: web pages SDK
* Last Modified...........: $Date: 27/11/2006 0:08:16 $
* CVS Revision............: $Revision: 0.2.14 $
* Idea and Developed by...: Maxim Bulygin (sailormax@gmail.com)
*/

// check browsers
	var ua		= navigator.userAgent;
	var opera	= false;
	var safari	= false;
	var konq	= false;
	var ie		= false;
	var moz		= false;
	var mozilla = false;

	if (opera = ua.match(/opera.([0-9\.]+)/i))
		opera	= opera[1];
	else if (safari = ua.match(/safari.([0-9\.]+)/i))
		safari	= safari[1];
	else if (konq = ua.match(/konqueror.([0-9\.]+)/i))
		konq	= konq[1];
	else if (ie = ua.match(/msie.([0-9\.]+)/i))
		ie		= ie[1];
	else if (moz = ua.match(/mozilla.([0-9\.]+)/i))
		mozilla = moz = moz[1];
	else
		var other = ua;
/* end browser checks */


//	type = 2 - except russian letters
function Translate(srcStr, type)
{
	srcStr.toString();
	var dest = "";
	var chCode;
	for (var i = 0; i < srcStr.length; i++)
	{
		chCode = srcStr.charCodeAt(i);
		if ((chCode > 127) && !((type == 2) && (chCode > 1039) && (chCode < 1106)))
		{
			if (parseFloat(opera) >= 7.50)
				dest += "&amp;#" + chCode + ";"
			else
				dest += "&#" + chCode + ";"
		}
		else dest += srcStr.substr(i, 1);
	}
	return dest;
}

function deTranslate(srcStr)
{
	var pos = 0;
	var newPos, tmp, chr, endPos;
	var resStr = '';

	srcStr.toString();
	srcStr = srcStr.replace(/\&amp\;\#/g, "&#");
	while((newPos = srcStr.indexOf('&#', pos)) != -1)
	{
		resStr += srcStr.substring(pos, newPos);
		newPos += 2;
		if (((endPos = srcStr.indexOf(';', newPos)) > -1) && ((endPos - newPos) < 6))
		{
			num = srcStr.substring(newPos, endPos);
			resStr += String.fromCharCode(num);
			newPos += (endPos - newPos) + 1;
		}
		pos = newPos;
	}

	return resStr += srcStr.substring(pos);
}

function uAlert(srcStr)
{
	alert(deTranslate(srcStr));
}

function uConfirm(srcStr)
{
	return confirm(deTranslate(srcStr));
}

function getStyle(obj)
{
	if (ie)
		var res = obj.style.getAttribute("cssText");
	else
		var res = obj.getAttribute("style");
	if (res == null) return "";
	return res;
}

function setStyle(obj, str)
{
	if (ie)
		obj.style.setAttribute("cssText", str);
	else
		obj.setAttribute("style", str);
}


function addEvent(el, evtType, func)
{
	if (el.addEventListener)
		el.addEventListener(evtType, func, false);
	else if (el.attachEvent)
		return el.attachEvent("on" + evtType, func);
	else
		return false;
	return true;
}


function SetSelectedText(el, start, end)
{
	if (el.setSelectionRange)
		el.setSelectionRange(start, end);
	else if (el.createTextRange)
	{
		var rng = el.createTextRange();
		rng.collapse(true);
        rng.moveEnd("character", end);
        rng.moveStart("character", start);
		rng.select();
	}
}


function SetCaretPosition(el, pos)
{
	SetSelectedText(el, pos, pos);
}

function GetStartSelection(el)
{
	if (el.setSelectionRange)
		return el.selectionStart;
	else if (document.selection.createRange)
	{
		var rng = document.selection.createRange();
		if (rng.parentElement() != el)
			return -1;

		var rng2 = rng.duplicate();
		if (el.tagName == "TEXTAREA")
			rng2.moveToElementText(el)
		else
			rng2.expand("textedit");
		rng2.setEndPoint("EndToStart", rng);
		var pos = rng2.text.length;
		if (ie && (el.value.substr(pos, 2) == "\r\n")) pos += 2;	// ie bug fix
		if (pos > el.value.length)
			return -1;
		return pos;
	}
	else
		return el.value.length;
}

function GetCaretPosition(el)
{
	return GetStartSelection(el);
}

function GetEndSelection(el)
{
	if (el.setSelectionRange)
		return el.selectionEnd;
	else if (document.selection.createRange)
	{
		var rng = document.selection.createRange();
		if (rng.parentElement() != el)
			return -1;

		var rng2 = rng.duplicate();
		if (el.tagName == "TEXTAREA")
			rng2.moveToElementText(el)
		else
			rng2.expand("textedit");
		rng2.setEndPoint("EndToEnd", rng);
		var pos = rng2.text.length;
		if (ie && (el.value.substr(pos, 2) == "\r\n")) pos += 2;	// ie bug fix
		if (pos > el.value.length)
			return -1;
		return pos;
	}
	else
		return el.value.length;
}


function GetSelectedText()
{
	return window.getSelection ? window.getSelection().toString() : document.selection.createRange().text;
}


function Point(x,y)	// class
{
	this.x = x;
	this.y = y;
	return this;
}

function GetAbsolutePos(el)
{
	var pnt = new Point(0, 0);
	while (el)
	{
		if (mozilla && (el.tagName == "TABLE") && (el.offsetHeight < el.firstChild.offsetHeight))	// Mozilla wrong calculate offsetHeight for inline tables
		{
			pnt.x += el.offsetLeft;
			pnt.y += el.offsetTop - el.firstChild.offsetHeight;
		}
		else
		{
			pnt.x += el.offsetLeft;
			pnt.y += el.offsetTop;
		}
		el = el.offsetParent;
	}
	return pnt;
}

function OutEmail(site, user, addit, type)
{
	out = "";
	full = (typeof(type) == "undefined");
	if (type != 3)
	{
		if (full || (type === 1))
		{
			out += "<a ";
			if (addit) out += addit;
			out += " href='";
		}

		total = user + '&#64;' + site;

		if (full || (type === 1))
		{
			out += "mail";
			out += "to:"+total+"'";
			out += ">";
		}

		if (full || (type === 2))
			out += total;
	}

	if (full || (type === 3))
		out += "</a>";

	document.write(out);
}

function ShowObject(el, url, params)
{
	var res = "";
	if (el)
		var obj = document.createElement("SPAN");

	res = "<object";
	if (params.type)	res += ' type="' + params.type + '"';
	else
	{
		if (url.indexOf(".swf"))
			res += ' type="application/x-shockwave-flash"';
		else if (url.indexOf(".mov"))
			res += ' type="video/quicktime"';
		else if (url.indexOf(".mpeg"))
			res += ' type="application/mpeg"';
		else if (url.indexOf(".mp3"))
			res += ' type="audio/mpeg"';
		else if (url.indexOf(".avi"))
			res += ' type="application/avi"';
		else if (url.indexOf(".class"))
			res += ' type="application/java"';
		else if (url.indexOf(".py"))
			res += ' type="application/application/x-python"';
	}
	if (params.text)	res += ' standby="' + params.text + '"';
	if (params.align)	res += ' align="' + params.align + '"';
	res += ' data="' + url + '"';

	if (params.size)
	{
		size = params.size.split("x");
		res += ' width="' + size[0] + '"';
		if (size[1])
			res += ' height="' + size[1] + '"';
	}
	else
		res += ' width="200" height="150"';

	res += '>';
	res += '<param name="movie" value="' + url + '" />';

	var exclude = ["size", "align", "text", "type"];
	for (p_item in params)
		if (p_item in exclude)
			res += '<param name="' + p_item + '" value="' + params[p_item] + '" />';

	res += '</object>';
	if (el)
	{
		obj.innerHTML = res;
		el.parentNode.replaceChild(obj, el);
	}
	else
		document.write(res);
	return false;
}

// sample: OutUrlElement("IMG", "3520061480", "/dir/file.jpg", "alt text", 'align=right;')
function OutUrlElement(el_name, srv, path, text, params)
{
	// prepare
		if (!srv) return;
		if (!path) path = "";
		if (!text) text = "";
		if (!params) params = {};

		var srv_els = srv.split("/", 2);
		if (srv_els.length > 1)
		{
			var prot = srv_els[0];
			srv = srv_els[1];
		}
		else
			var prot = "http";

		if ((srv.indexOf(".") < 0) && (srv_num = new Number(srv)) != 0)
			srv = ((srv_num & 0xFF000000) >>> 24) + "." + ((srv_num & 0xFF0000) >>> 16) + "." + ((srv_num & 0xFF00) >>> 8) + "." + (srv_num & 0xFF);

		var url = prot + "://" + srv + path;
	//

	var res = "";
	switch (el_name)
	{
		case "URL":
		case "HURL":
		case "LINK":
		case "HLINK":
			if (text === true)
				text = url;
			res = '<a href="' + url + '" target="_blank">';
			if (text)
				res += text + '</a>';
			break;

		case "IMG":
		case "IMAGE":
			res = '<img src="' + url + '" alt="' + text + '"';
			if (params)
			{
				if (params.align) res += ' style="float:' + params.align + '"';
			}
			res += ' />';
			break;

		case "OBJ":
		case "OBJECT":
			params.text = text;
			ShowObject(null, url, params);
			break;
	}

	document.write(res);
}


// form
	function getTranslatedForm(forma, all, clone)
	{
		var objs, cnt, i, a;
		var tags = Array("input", "select", "textarea");
		if (typeof(all) == "undefined") all = true;
		if (typeof(clone) == "undefined") clone = true;

		if (clone)
		{
			var newForm = document.createElement("FORM");
			newForm.style.display = "none";
		}
		else
			var newForm = forma;

		newForm.setAttribute("method", "POST");
		newForm.setAttribute("action", "");
		newForm.setAttribute("enctype", "multipart/form-data");

		for( a=0; a<tags.length; a++ )
		{
			objs = forma.getElementsByTagName(tags[a]);
			cnt = objs.length;
			for(i=0; i<cnt; i++)
				if ((objs[i].name != '') && (((tags[a] == "input") && (objs[i].type != "file")) || (tags[a] != "input")))
				{
					if (clone)
					{
						var newEl = document.createElement("INPUT");
						newEl.setAttribute("name", objs[i].name);
						newEl.setAttribute("type", "hidden");
					}
					else
						var newEl = objs[i];


					var new_value = deTranslate(objs[i].value);
					if (objs[i].type == "checkbox")
					{
						if ((objs[i].value == "")) objs[i].value = "on";
						new_value = (objs[i].checked ? objs[i].value : "");
					}
					else if (objs[i].type == "radio")
					{
						if (objs[i].checked)
							new_value = objs[i].value;
						else
							continue;
					}


					if (all || (!all && document.getElementsByName(newEl.name + ".unicode").length))
						newEl.setAttribute("value", Translate(new_value, all));
					else
						newEl.setAttribute("value", new_value);

					if (clone) newForm.appendChild(newEl);
				}
		}

		if (clone) document.body.appendChild(newForm);
		return newForm;
	}

	function MoveOption(src, dest)
	{
		src = document.getElementById(src);
		dest = document.getElementById(dest);

		for(i=0; i<src.length; i++)
			if (src.options[i].selected)
			{
				exist = false;
				for(a=0; a<dest.length; a++)
					if (dest.options[a].text == src.options[i].text)
					{
						exist = true;
						break;
					}

				if (!exist)
				{
					var oOption = document.createElement("OPTION");
					oOption.value = src.options[i].value;
					oOption.text = src.options[i].text;
					if (ie)
						dest.add(oOption);
					else
						dest.appendChild(oOption);
				}

	//			was = src.length;
				src.removeChild(src.options[i]);
	//			if (was > src.length)
	//				i--;
				break;
			}
	}
//



// on load
	var onload_queue = new Array();
	function AddOnload(arg)
	{
		onload_queue.push(arg);
	}

	function RunOnloadQueue()
	{
		for (i=0; i<onload_queue.length; i++)
		{
			if (typeof(onload_queue[i]) == "function")
				onload_queue[i]();
			else
				eval(onload_queue[i]);
		}
	}
	window.onload = RunOnloadQueue;
//
