String.prototype.trim = function () { return this.replace(/^\s+/g, '').replace(/\s+$/g, '');}
String.prototype.csv = function () { return this.replace(/\s+/g, ',');}
function getNodeValue(obj, nodeName) {var st = "";if (obj.hasChildNodes() ){var i = 0;while ((st == "") && (i < obj.childNodes.length)){if(!obj.childNodes[i].firstChild) return "";st = (obj.childNodes[i].nodeName == nodeName)?obj.childNodes[i].firstChild.nodeValue : getNodeValue(obj.childNodes[i], nodeName);i++;}}return st.trim();}
function dbs( aString ){getCritterByID('debug').innerHTML = "<b>"+aString+"</b>";}
function objToString(anObj, showFunctions ) { var sep= '<br/>';var st = "";if(!showFunctions)showFunctions=false;for(var prop in anObj){try{if(!showFunctions){if ((prop.charAt(0) == '$')||((typeof anObj[prop]) == 'function'))continue;}if (st != "") st += sep;st +='<font color=yellow>' + prop + '-></font>' + anObj[prop];}catch( e ){ st += " caught one " + e;}}return st;}
var blockreq;
function setwatch( entry ){
   	url = "http://tvtropes.org/pmwiki/watchlist.php?action=watch&entry="+entry;
    sendurl(url);
    if(blockreq && blockloaded()){
		getCritterByID('watchmsg').innerHTML += '<br/><span class="asscaps">' + blockreq.responseText +'</span>';
		getCritterByID('watchmsg2').innerHTML += '<br/><span class="asscaps">' + blockreq.responseText +'</span>';
	}
}
function dropwatch( entry ){
   	url = "http://tvtropes.org/pmwiki/watchlist.php?action=dropwatch&entry="+entry;
    sendurl(url);
    if(blockreq && blockloaded()){
		getCritterByID('watchmsg').innerHTML += '<br/><span class="asscaps">' + blockreq.responseText +'</span>';
		getCritterByID('watchmsg2').innerHTML += '<br/><span class="asscaps">' + blockreq.responseText +'</span>';
	}
}
function dotemplate(){
var mediacats = "\r\n\r\n!!Examples:"
	+"\r\n\r\n[[foldercontrol]]\r\n\r\n[[folder:Advertising]]\r\n[[/folder]]\r\n\r\n[[folder:Alternate Reality Games]]\r\n[[/folder]]\r\n\r\n[[folder:Anime and Manga]]\r\n[[/folder]]\r\n\r\n[[folder:Board Games]]\r\n[[/folder]]"
	+"\r\n\r\n[[folder:Card Games]]\r\n[[/folder]]\r\n\r\n[[folder:Comic Books]]\r\n[[/folder]]\r\n\r\n[[folder:Fairy Tales]]\r\n[[/folder]]\r\n\r\n[[folder:Fan Fic]]\r\n[[/folder]]\r\n\r\n[[folder:Film]]\r\n[[/folder]]"
	+"\r\n\r\n[[folder:Folk Lore]]\r\n[[/folder]]\r\n\r\n[[folder:Literature]]\r\n[[/folder]]\r\n\r\n[[folder:Live Action TV]]\r\n[[/folder]]\r\n\r\n[[folder:Machinima]]\r\n[[/folder]]"
	+"\r\n\r\n[[folder:Magazines]]\r\n[[/folder]]\r\n\r\n[[folder:Music]]\r\n[[/folder]]\r\n\r\n[[folder:Music And Sound Effects]]\r\n[[/folder]]\r\n\r\n[[folder:Music Videos]]\r\n[[/folder]]"
	+"\r\n\r\n[[folder:New Media]]\r\n[[/folder]]\r\n\r\n[[folder:Newspaper Comics]]\r\n[[/folder]]\r\n\r\n[[folder:Oral Tradition]]\r\n[[/folder]]\r\n\r\n[[folder:Radio]]\r\n[[/folder]]"
	+"\r\n\r\n[[/folder]]\r\n\r\n[[folder:Sound FX]]\r\n[[/folder]]\r\n\r\n[[folder:Tabletop Games]]\r\n[[/folder]]"
	+"\r\n\r\n[[folder:Theater]]\r\n[[/folder]]\r\n\r\n[[folder:Toys]]\r\n[[/folder]]\r\n\r\n[[folder:Video Games]]\r\n[[/folder]]\r\n\r\n[[folder:Webcomics]]\r\n[[/folder]]"
	+"\r\n\r\n[[folder:Western Animation]]\r\n[[/folder]]\r\n\r\n[[folder:Web Animation]]\r\n[[/folder]]\r\n\r\n[[folder:Web Original]]\r\n[[/folder]]\r\n\r\n";
    object('editarea').value += mediacats;
    return false;
}
///////////////////////////////
function getCritterByID(objectId){

  if(document.getElementById && document.getElementById(objectId)){
  	return document.getElementById(objectId);
  }else if (document.all && document.all(objectId)){
  	return document.all(objectId);
  }else if (document.layers && document.layers[objectId]){
  	return document.layers[objectId];
  } else  {	return false; }
}
function indent_rational(){
	var text = ""+getCritterByID('editarea').value;
	text = text.replace(/\*{4,}/g, '3**');
	getCritterByID('editarea').value = text;
}
function togglepanel(id){

    closeall(id);
	var ele = getCritterByID(id);
	if( ele.style.display=='none')
	    ele.style.display='block';
	else
	    ele.style.display='none';
}
function closeall(id){
	if(!getCritterByID('wikileftpage')) return;
	var divs = getCritterByID('wikileftpage').getElementsByTagName('div');

	for(var i=0;i<divs.length;i++){
		if(divs[i].id != id && divs[i].getAttribute('iscat')=='true')
		divs[i].style.display='none';
	}
}
function setindexmarkup(){

	var editarea = getCritterByID("editarea");
	var list = getCritterByID("indexes");
	var item = ""+list.options[list.selectedIndex].value;
	var tag = item.match(/\[\[anime\]\]/);
	item = item.replace(/\[\[anime\]\]/, '');
	if(!tag) tag = item.match(/\[\[animated\]\]/);
	item = item.replace(/\[\[animated\]\]/, '');
	if(!tag) tag = item.match(/\[\[sf\]\]/);
	item = item.replace(/\[\[sf\]\]/, '');
	if(!tag) tag = item.match(/\[\[romance\]\]/);
	item = item.replace(/\[\[romance\]\]/, '');
	editarea.value += "\r\n<<|"+item+"|>>"+(tag?tag:'')+"\r\n";
}
function checkauthor(event){

	var authorinput = getCritterByID("authorinput");
	var author = ""+authorinput.value;
	author = author.trim();
	if(author==""){
        getCritterByID("inputform").action="#";
		getCritterByID("inputmessage").innerHTML=
		"please make up a wiki handle";
		authorinput.focus();
		return false;
	}
	return true;
}
function blockloaded() {return blockreq.status == 200;}
function reqok(){return (blockreq && blockloaded());}
function sendurl(url){

	delete	blockreq;
	if (window.XMLHttpRequest) {

		blockreq = new XMLHttpRequest();
	    blockreq.open("get", url, false);
	    blockreq.send(null);

	} else if (window.ActiveXObject) {
		try { blockreq = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e1) {
	  		try {	blockreq = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) {
	    		// No HTTP request for you! I suppose a message about a browser upgrade should go here.
	  		}//second try
		}//first try
	 	if (blockreq) {

	        blockreq.open("get", url, false);
	        blockreq.send();
	    }
	}// if activex
}
////////////////////////////////////
function unlock(page) {

	var url = "http://"+window.location.hostname
	url += "/pmwiki/unlock.php?pagename="+page;
    	sendurl(url);
	var rd = ""+window.location.href;
	rd = rd.replace('?action=edit', '');
	window.location.href = rd;
}
////////////////////////////////////
function getselection(pulldown) {

  var st = "";
  for (var i=0; i<pulldown.options.length; i++)
	  if (pulldown.options[i].selected) {

		    if (pulldown.options[i].value)
				st = pulldown.options[i].value;
		    else
				st = pulldown.options[i].text;
		    break;
	    }
  return st;
}
// code approach by Tangent128
function createanchor(subject, url) {
    subject.setAttribute('href',url);
}
function submitsearch(){
	var searchform = getCritterByID('searcher');
	searchform.setAttribute('action', 'http://tvtropes.org/pmwiki/pmwiki.php/Main/SearchWiki');
	searchform.submit();
	
}
function object(objectId){

  if(document.getElementById && document.getElementById(objectId)){
  	return document.getElementById(objectId);
  }else if (document.all && document.all(objectId)){
  	return document.all(objectId);
  }else if (document.layers && document.layers[objectId]){
  	return document.layers[objectId];
  } else  {	return false; }
}
function findfor(){
	var target = ""+object('findfor').value;
	if(target=="")return;
	window.location.href = 'http://tvtropes.org/pmwiki/el.php?findfor='+target;
}
function toggleinline(anchor){
	var tgt = anchor.getElementsByTagName('div')[0];
	if(	tgt.style.display=='none' )	tgt.style.display='inline';
	else 	tgt.style.display='none';
}
var last_toggle = 'none';
function toggleAllFolders(){
	var divs = window.document.getElementsByTagName('div');
	for(var i=0;i<divs.length;i++){
		if(divs[i].getAttribute('isfolder')=='true')
			if(last_toggle=='block') divs[i].style.display='none';
				else divs[i].style.display='block';
	}
	last_toggle = (last_toggle=='block'?'none':'block');
}
function togglefolder(id){
	var ele = object(id);
	if( ele.style.display=='none')
	ele.style.display='block';else ele.style.display='none';
}
function do_preview(){
	object('source').value = object('editarea').value;
	return false;
} 
function setAllFolders(how){
	var way = ""+how;
	if(way=="")way="block";
	if(way=="closed")way="none";
	if(way=="open")way="block";
	var divs = window.document.getElementsByTagName('div');
	for(var i=0;i<divs.length;i++){
		if(divs[i].getAttribute('isfolder') && divs[i].getAttribute('isfolder')=='true')
			divs[i].style.display=way;

		var thisClass = ""+divs[i].getAttribute('class');
		if(thisClass=='folderlabel'){
			var thelabel = ""+divs[i].innerHTML;
			if(thelabel.indexOf('open/close all folders')!=-1)
				divs[i].setAttribute('class', 'folderlabelopen');
		}
	}
	last_toggle = way;
}
