function tmAjax(id,url,title,rss,async) {
	var xmlHttp;
	try {
		xmlHttp=new XMLHttpRequest();
	} catch (e) {
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	
	xmlHttp.onreadystatechange=function(){
		if (xmlHttp.readyState == 1) {
			document.getElementById('loading').innerHTML = '<img src="/images/icons/loading.gif"/>';
		} else if (xmlHttp.readyState == 4) {
			if (title) {
				document.getElementById('title').innerHTML = title; 
			}
			if (rss) {
				document.getElementById('rss').href = rss;
			}
			document.getElementById('loading').innerHTML = '';
			if (id) {
				document.getElementById(id).innerHTML = xmlHttp.responseText;
			}
		}
	};
	xmlHttp.open("GET",url,async);
	xmlHttp.send(null);
	return false;
}

loader = new Image();
loader.src='/images/icons/loading.gif';

function tmToggle(i) {
	var img = document.getElementById("a"+i);
	var obj = document.getElementById("aj"+i);
	
	if (obj.style.display == "none") {
		obj.style.display = "";
		img.src = '/images/iconmin.gif';
		tmAjax('aj'+i,'/feed/readajax/id/'+i,0,0,1);
	} else {
		obj.style.display = "none";
		img.src = "/images/iconplus.gif";
	}
}

var searchTimer = null;
var searchRunning = false;
var searchTitle = null;
var nosearchTitle = null;

function tmDosearch() {
	keyword = document.getElementById('search').value;
	tit = document.getElementById('title');

	if (keyword.length > 2) {
		tit.innerHTML = searchTitle + ": " + keyword;
		document.getElementById('rss').href = '/rss/search/'+keyword;
		tmAjax('content','/items/search/'+keyword,0,0,1);
		
	} else if (keyword.length === 0) {
		tit.innerHTML = nosearchTitle;
		document.getElementById('rss').href = '/rss';
		tmAjax('content','/items/all',0,0,1);
	}
	
	searchRunning = false;
}

function tmSearch(txt,btxt) {

	searchTitle = txt;
	nosearchTitle = btxt;

	if (searchRunning) {
		clearTimeout(searchTimer);
	}
	searchRunning = true;
	searchTimer = setTimeout('tmDosearch()',1000);
}


function validateForm(url) {
	var xmlHttp;
	try {
		xmlHttp=new XMLHttpRequest();
	} catch (e) {
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	
	xmlHttp.onreadystatechange=function(){
		if (xmlHttp.readyState == 1) {
			document.getElementById('loading').innerHTML = '<img src="/images/icons/loading.gif"/>';
		} else if (xmlHttp.readyState == 4) {
			document.getElementById('loading').innerHTML = '';
			var formdata = eval("(" + xmlHttp.responseText + ")");
			var filldata = formdata[0];
			
			// Traverse array and fill form fields
			for (var fid in filldata) {
				ff = document.getElementById(fid);
				if (ff) {
					ff.value = eval('filldata.'+fid);
				}
			}
			
		}
	};
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
	
	// Create validate handlers for all formfields
	
	var valfunc = "";
	for (var field in document.forms[0].elements) {
		var ffield = document.forms[0].elements[field];
		if (ffield.id && ffield.type!="button" && ffield.type!="submit") {
			if (ffield.type == 'input') {
				eval('ffield.onblur = function() { validateField(\'/user/validate\',\'' + ffield.id + '\'); };');
			} else {
				eval('ffield.onchange = function() { validateField(\'/user/validate\',\'' + ffield.id + '\'); };');
			}
			// Add handler to form submission handler
			var valfunc = valfunc + 'validateField(\'/user/validate\',\'' + ffield.id + '\'); ';
		}
		
	}

	// Create validate handler for form submission
	eval('document.getElementById(\'save\').onclick = function() { ' + valfunc + ' }');
	
	// FIXME: Put focus on first editable field
	
	return false;	
	
}

function validateField(url,id) {

	var xmlHttp;
	try {
		xmlHttp=new XMLHttpRequest();
	} catch (e) {
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	
	xmlHttp.onreadystatechange=function(){
		if (xmlHttp.readyState == 1) {
			document.getElementById('loading').innerHTML = '<img src="/images/icons/loading.gif"/>';
		} else if (xmlHttp.readyState == 4) {
			document.getElementById('loading').innerHTML = '';
			var responsedata = eval('(' + xmlHttp.responseText + ')');
			
			if (responsedata.validated) {
				document.getElementById(id).className = '';
				document.getElementById('save').disabled = '';
				if (responsedata.msg) { 
					document.getElementById(id + "msg").innerHTML = responsedata.msg; 
				} else {
					document.getElementById(id + "msg").innerHTML = ''; 
				}
			} else {
				document.getElementById(id).className = 'error';
				document.getElementById('save').disabled = "disabled";
				if (responsedata.msg) { document.getElementById(id + "msg").innerHTML = responsedata.msg; }
			}
		}
	};
	xmlHttp.open("GET",url + '/'+ id + '/' + document.getElementById(id).value,true);
	xmlHttp.send(null);
	return false;	
}

