var onAjaxSubmit = function(event)
{
	var event = event || window.event;
	var outer = this;
	
	if(outer.tagName.toLowerCase() == 'select')
	{
		outer = outer.parentNode.parentNode;
	}
	
	var rawData = '';
	
	var inputs = outer.getElementsByTagName('input');
	for(var i=0; i<inputs.length;i++)
	{
		var input = inputs[i];
		
		switch(input.type)
		{
			case 'radio' :
				if(input.selected)
				{
					rawData += input.name + '=' + input.value + '&';  
				}
			break;
			case 'checkbox' :
				if(input.checked)
				{
					rawData += input.name + '=' + input.value + '&';  
				}
			break;
			default :
			case 'text' :
				rawData += input.name + '=' + input.value + '&';  
			break;
		}
	}
	
	var selects = outer.getElementsByTagName('select');
	for(var i=0; i<selects.length;i++)
	{
		rawData += selects[i].name + '=' + selects[i].value + '&';  
	}
	
	var textareas = outer.getElementsByTagName('textarea');
	for(var i=0; i<textareas.length;i++)
	{
		rawData += textareas[i].name + '=' + textareas[i].value + '&';  
	}
	
	rh(outer).ajax(
	{
		url:outer.action,
		type:'POST',
		rawPost:rawData,
		ready:function(x)
		{
			var target = document.getElementById(outer.target);
			target.innerHTML = getHTMLFromString(x.text, outer.target);
			parseHTMLContents(target);
		}
	});
	
	if(event)
	{
		if(event.stopPropagation)
			event.stopPropagation();
		else if(event.preventDefault)
			event.preventDefault();
	}
	
	return false;
}

function getHTMLFromString(text, id)
{
	var div = document.createElement('div');
	div.innerHTML = text;
	var body = document.getElementsByTagName("body")[0];
	body.insertBefore(div, body.firstChild);
	var html = document.getElementById(id).innerHTML;
	body.removeChild(div);
	return html;
}

function parseHTMLContents(target)
{
	rh('a.ajax', target).click(onAjaxClick);
	rh('form.ajax', target).submit(onAjaxSubmit);
	rh('input', target).filterAttribute('type', 'text').focus(function(){ if(this.value == this.defaultValue) this.value = ''; }).blur(function(){ if(this.value == '') this.value = this.defaultValue; });
	rh('script', target).each(function()
	{
		var script = document.createElement('script');
		script.type = this.type;
		script.setAttribute("type", this.type);
		
		if(this.src.length)
		{
			script.src = this.src;
		}
		else
		{
			script.text = this.innerHTML;
			script.appendChild(document.createTextNode(this.innerHTML))
		}
		
		this.parentNode.removeChild(this);
		var head = document.getElementsByTagName('head')[0];
		head.appendChild(script);
	});
}

var onAjaxClick = function(event)
{
	var event = event || window.event;
	var outer = this;
	
	var pos_lang = this.href.lastIndexOf('/' + lang + '/');
	
	if(pos_lang != -1)
	{
		var new_anchor = this.href.substr(pos_lang);
		
		var new_href = document.location.href;
		var pos_anchor = new_href.indexOf('#');
		
		if(pos_anchor != -1)
		{
			new_href = new_href.substr(0, pos_anchor);
		}
		
		document.location.href = new_href + '#' + new_anchor;
	}
	
	rh(this).ajax(
	{
		url:this.href,
		ready:function(x)
		{
			var target = document.getElementById(outer.target);
			target.innerHTML = getHTMLFromString(x.text, outer.target);
			parseHTMLContents(target);
		}
	});
	
	if(event.stopPropagation)
		event.stopPropagation();
	else if(event.preventDefault)
		event.preventDefault();
	
	return false;
};

rh(function()
{
	/* INITIAL */
	// load anchor from URL
	var anchor = null;
	
	var href = document.location.href;
	var pos = href.indexOf('#');
	
	if(pos != -1)
	{
		anchor = href.substr(pos + 2);
		href = href.substr(0, pos);
		
		if(href.indexOf(anchor) == -1)
		{
			rh(document).ajax(
			{
				url : document.getElementsByTagName('base')[0].href + anchor,
				
				ready:function(x)
				{
					var target = document.getElementById('ajax-content');
					target.innerHTML = getHTMLFromString(x.text, 'ajax-content');
					parseHTMLContents(target);
				}
			});
		}
	}
	
	// replace all a.ajax elements
	
	
	
	rh('input').filterAttribute('type', 'text').focus(function(){ if(this.value == this.defaultValue) this.value = ''; }).blur(function(){ if(this.value == '') this.value = this.defaultValue; });
	rh('a.ajax').click(onAjaxClick);
	rh('form.ajax').submit(onAjaxSubmit);
});
