/* XMLHttpRequest model for Robin (c) Doberman 2007 */

// intialize
ajaxIDs = new Array();

var request = false;
try
{
	request = new XMLHttpRequest();
}
catch (firstmicrosoft)
{
	try
	{
		request = new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch (secondmicrosoft)
	{
		try
		{
			request = new ActiveXObject("Msxml2.XMLHTTP.3.0");
		}
		catch (thirdmicrosoft)
		{
			try
			{
				request = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (fourthmicrosoft)
			{
				try
				{
					request = new ActiveXObject("Msxml2.XMLHTTP.4.0");
				}
				catch (failed)
				{
					request = false;
				}  
			}  
		}  
	}
}

if (!request) alert("Error initializing XMLHttpRequest! Broser doesn't support it!");

function closeAjax(id, target)
{
	target = getObj(target);
	target.innerHTML = '';
}

// get data
function getAjax(id, url, divid)
{
	if(divid)
	{
		target = getObj(divid);
		if(divid == 'ajax') target.innerHTML = ''; else target.innerHTML = '<img src="images/ajax_loading.gif" class="ajaximage" />';
	}
	if(id)
	{
		for (x in ajaxIDs)
		{
			cssTarget = getObj('ajax_'+ajaxIDs[x]);
			if(cssTarget)
			{
				if(id == ajaxIDs[x]) cssTarget.className = 'active'; else cssTarget.className = 'entry';
			}
		}
	}
	x = poller.x;
	y = poller.y;
	if((x + 350) > window.innerWidth - 30) x -= 350;
	if((y + 150) > window.innerHeight - 30) y -= 150;
	url = url + '&x='+x+'&y='+y;
	request.abort();
	request.open("GET", url, true);
	request.onreadystatechange = function()
	{
		/*
		* 0: The request is uninitialized (before you've called open()).
		* 1: The request is set up, but hasn't been sent (before you've called send()).
		* 2: The request was sent and is being processed (you can usually get content headers from the response at this point).
		* 3: The request is being processed; often some partial data is available from the response, but the server hasn't finished with its response.
		* 4: The response is complete; you can get the server's response and use it.
		*/
		if (request.readyState == 4)
		{
			if (request.status == 200)
			{
				if(divid) target.innerHTML = request.responseText;
				var str = request.responseText.match("<script(.*)>(.*)</script>");
				if(str) eval(str[str.length - 1]);
				// alert(request.responseText);
			}
			else
			{
				alert('Ajax: Browser does not support! Status is ' + request.responseText + ' # ' + request.status);
			}
		}
	};
	request.send(null);
}

// post data
function postAjax(form, params, button)
{
	url = form.action + '&XMLHttpRequest';
	request.abort();
	request.open('post', url);
	request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
	request.onreadystatechange = function()
	{
		/*
		* 0: The request is uninitialized (before you've called open()).
		* 1: The request is set up, but hasn't been sent (before you've called send()).
		* 2: The request was sent and is being processed (you can usually get content headers from the response at this point).
		* 3: The request is being processed; often some partial data is available from the response, but the server hasn't finished with its response.
		* 4: The response is complete; you can get the server's response and use it.
		*/
		if (request.readyState == 4)
		{
			if (request.status == 200)
			{
				errorSubmit(form, button, request.responseText)
			}
			else
			{
				alert('Ajax: Browser does not support! Status is ' + request.status);
			}
		}
	};
	request.send(params);
	return (false);
}

// handle errors
function errorSubmit(form, button, msg)
{
	header = "<b style=\"color: #000;\">Virhe!</b><br /><br /><span style=\"color: #ff0000;\">";
	if(msg)
	{
		switch(msg)
		{
			case "multiple_users_error":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"Tietokannasta l&ouml;ytyy useampi saman niminen k&auml;ytt&auml;j&auml;tunnus! Ota yhteys tukeen.</span>");
			break;
			case "email_error":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"S&auml;hk&ouml;postiosoitteen tulee olla aktiivinen!</span>");
			break;
			case "email_address_error":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"S&auml;hk&ouml;postiosoitteet on m&auml;&auml;ritelty ohjelmistoon v&auml;&auml;rin!</span>");
			break;
			case "email_notvalid":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"S&auml;hk&ouml;postiosoite ei kelpaa!</span>");
			break;
			case "email_exists":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"S&auml;hk&ouml;postiosoite on jo k&auml;yt&ouml;ss&auml;!</span>");
			break;
			case "email_function_error":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"Palvelin ei tue s&auml;hk&ouml;postin l&auml;hett&auml;mist&auml;!</span>");
			break;
			case "user_exists":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"K&auml;ytt&auml;j&auml;nimi on jo k&auml;yt&ouml;ss&auml;!</span>");
			break;
			case "login_error":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"Tarkista k&auml;ytt&auml;j&auml;nimi ja salasana!</span>");
			break;
			case "instance_exists":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"Instance with that name already exists!");
			break;
			case "characters_error":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"K&auml;yt&auml; ainoastaan sallittuja merkkej&auml;");
			break;
			case "fields":
				button.style.border = "1px solid #ff0000";
				tt(button, header+"* T&auml;yt&auml; kaikki kent&auml;t!</span>");
			break;
			case "refresh":
				button.style.border = "1px solid #00ff00";
				document.location.href = './';
			break;
			default:
				button.style.border = "1px solid #00ff00";
				document.location.href = msg;
			break;
		}
	}
	else
	{
		button.style.border = "1px solid #ff0000";
		tt(button, header+"M&auml;&auml;ritt&auml;m&auml;t&ouml;n virhe!</span>");
	}
}

// required fields error
function errorForm(target, button, msg)
{
	tt(button, "<b style=\"color: #000;\">Puutteelliset tiedot</b><br /><br /><span style=\"color: red\">"+msg+"</span>");
	target.style.border = "1px solid #ff0000";
	return (false);
}

// default function (use this)
function checkForm(form)
{
	var elem = form.elements; 
	button = elem["submit"];
	params = "";
	for(i = 0; i < elem.length; i++)
	{ 
		check = elem[i].title.substr(0, 8).toLowerCase();
		if(check == "required")
		{
			msg = elem[i].title.substr(10, elem[i].title.length);
			switch(elem[i].type)
			{
				case "select-one" : if(!elem[i].options[elem[i].selectedIndex].value != '') { return errorForm(elem[i], button, msg); } break;
				case "text": if(!elem[i].value) { return errorForm(elem[i], button, msg); } break;
				case "password": if(!elem[i].value) { return errorForm(elem[i], button, msg); } break;
				case "textarea": if(!elem[i].value) { return errorForm(elem[i], button, msg); } break;
				case "checkbox": if(!elem[i].checked) { return errorForm(elem[i], button, msg); } break;
				case "radio": if(!elem[i].checked) { return errorForm(elem[i], button, msg); } break;
			}
		}
		if(elem[i].type != "checkbox" || (elem[i].type == "checkbox" && elem[i].checked)) checkbox = true; else checkbox = false;
		if(elem[i].type != "radio" || (elem[i].type == "radio" && elem[i].checked)) radio = true; else radio = false;
		if(checkbox && radio) params += "&"+elem[i].name+"="+elem[i].value;
		if(elem[i].className != "none" && elem[i].type != "reset" && elem[i].type != "button") elem[i].style.border = '1px solid #00ff00';
	}
	return postAjax(form, params, button);
}

// default for required fields (use this)
function checkRequired(form)
{
	var elem = form.elements; 
	button = elem["submit"];
	if(!button) button = document.forms['dialog'];
	params = "";
	for(i = 0; i < elem.length; i++)
	{ 
		check = elem[i].title.substr(0, 8).toLowerCase();
		if(check == "required")
		{
			msg = elem[i].title.substr(10, elem[i].title.length);
			switch(elem[i].type)
			{
				case "select-one" : if(!elem[i].options[elem[i].selectedIndex].value != '') { return errorForm(elem[i], button, msg); } break;
				case "text": if(!elem[i].value) { return errorForm(elem[i], button, msg); } break;
				case "password": if(!elem[i].value) { return errorForm(elem[i], button, msg); } break;
				case "textarea": if(!elem[i].value) { return errorForm(elem[i], button, msg); } break;
				case "checkbox": if(!elem[i].checked) { return errorForm(elem[i], button, msg); } break;
				case "radio": if(!elem[i].checked) { return errorForm(elem[i], button, msg); } break;
			}
		}
		if(elem[i].type != "checkbox" || (elem[i].type == "checkbox" && elem[i].checked)) checkbox = true; else checkbox = false;
		if(elem[i].type != "radio" || (elem[i].type == "radio" && elem[i].checked)) radio = true; else radio = false;
		if(checkbox && radio) params += "&"+elem[i].name+"="+elem[i].value;
		if(elem[i].className != "none" && elem[i].type != "reset" && elem[i].type != "button") elem[i].style.border = '1px solid #00ff00';
	}
	return (true);
}
