function postLink(url)
{
  var form = new Element('form',
                 {method: 'post', action: url});
  $(document.body).insert(form);
  form.submit();
  return false;
}

function br2nl(text){
	text = text.replace(/<br \/>/ig,"\n");
	text = text.replace(/<br\/>/ig,"\n");
	text = text.replace(/<br>/ig,"\n");
	return text;
}

function nl2br(text){
	text = escape(text);
	var re_nlchar = null;
	
	if(text.indexOf('%0D%0A') > -1){
		re_nlchar = '%0D%0A' ;
	}else if(text.indexOf('%0A') > -1){
		re_nlchar = '%0A';
	}else if(text.indexOf('%0D') > -1){
		re_nlchar = '%0D';
	}
	
	if(re_nlchar!=null)
	{
		var newString = '';
		while(true)
		{
			var index = text.indexOf(re_nlchar);
			if(index>-1)
			{
				newString = newString + text.substr(0, index) + "<br />" + re_nlchar;
				text = text.substr(index + re_nlchar.length);
			}
			else
			{
				newString = newString + text;
				break;
			}
		}
		
		return unescape(newString);
	}
	
	return unescape(text);
}

/*
	actually gets the inner html and removes line breaks
*/
function getText(element)
{
	var text = element.innerHTML;
    var re_nlchar = null;
    
	text = escape(text);
	if(text.indexOf('%0D%0A') > -1){
		re_nlchar = /%0D%0A/g ;
	}else if(text.indexOf('%0A') > -1){
		re_nlchar = /%0A/g ;
	}else if(text.indexOf('%0D') > -1){
		re_nlchar = /%0D/g ;
	}
	
	if(re_nlchar!=null)
	{
		text = text.replace(re_nlchar,'');
	}
	
	/*
		unescapeHTML has a bug in IE, it will convert double encoded things into their character
		e.g. &amp;lt; becomes < when in all other browsers it becomes &lt;
	*/
    return br2nl(unescape(text)).unescapeHTML();
}

Element.addMethods('UL', {
	insertItemLexicographically: function(element, item, li)
	{
		element = $(element);
		if(!li)
		{
			li = new Element('li');
		}
		li.update(item);
		
		var itemText = item;
		if(!(typeof item === "string"))
		{
			itemText = getText(item);
		}
			
		var inserted = false;
		var items = element.select('li');
		for(var i=0;i<items.length;i++)
		{
			var x = items[i];
			
			if(itemText.toLowerCase()<getText(x).toLowerCase())
			{
				Element.insert(x, {before: li});
				inserted = true;
				break;
			}
		}
		if(!inserted) element.insert(li);
		
		return li;
	},
	
	sort: function(element)
	{
		element = $(element);
		var items = element.select('li');
		for(var i=0;i<items.length;i++)
		{
			var x = items[i];
			for(var j=0;j<items.length;j++)
			{
				var y = items[j];
				if(getText(x).toLowerCase()>getText(y).toLowerCase())
				{
					Element.insert(x, {before: y});
				}
			}
			
			items = element.select('li');
		}
	}
});

Element.addMethods('TABLE', {
	insertRowLexicographically: function(element, row, sortColumnIndex)
	{
		element = $(element).down('tbody');

		var rowText = null;
		if(typeof row === "string")
		{
			rowText = row;
		}
		else
		{
			var tds = $(row).select('td');
			rowText = getText(tds[sortColumnIndex]);
		}

		rowText = rowText.toLowerCase();

		var existingItems = element.select('tr');

		var inserted = false;

		for(var i = 0; i < existingItems.length; i++)
		{
			// get the text value of the column we're sorting by
			var tds = $(existingItems[i]).select('td');
			var existingItemText = getText(tds[sortColumnIndex]).toLowerCase();

			if(rowText < existingItemText)
			{
				existingItems[i].insert({before: row});
				inserted = true;
				break;
			}
		}

		if(!inserted)
		{
			element.insert(row);
		}
	}
});

Element.addMethods('DIV', {
	showLoading: function(element)
	{
		element = $(element);
		element.setOpacity(0.2);
		var position = element.viewportOffset();
		var dims = element.getDimensions();
		var img = new Element('img', { 'title': 'Loading, please wait', 'alt':'Loading, please wait', 'class': 'loaderRound', 'src': getImageUrl('ajax-loader-round-lg.gif') });
		img.absolutize();
		Element.clonePosition(img, element, { 
			offsetLeft: (dims.width/2) - 16,
			offsetTop: (dims.height/2) - 16
		});
		
		img.style.width = '32px';
		img.style.height = '32px';
		element.loadingImgId = img.identify();
		
		element.insert({after: img});
	},
	
	hideLoading: function(element)
	{
		element = $(element);
		element.setOpacity(1);
		var img = $(element.loadingImgId);
		if(img) img.remove();
	}
});

// turns "podcasts" into "http://whatever/podcasts", also takes controller into account, so cpd_dev.php is preserved
function genUrl(path)
{
	var split = window.location.toString().split('/');
	var url = '';
	var max = 0;

	if(window.location.toString().indexOf('.php') != -1)
	{
		max = 4;
	}
	else
	{
		max = 3;
	}

	for(var i = 0; i < max; i++)
	{
		url += split[i] + '/';
	}

	// sanitise input
	if(path[0] == '/')
	{
		path = path.substring(1);
	}

	return url + path;
}

