// Stolen from Renko, thanks dude :)
function send_to_clipboard(mytext) 
{
  if (window.clipboardData) 
    {
	   // the IE-manier
	  window.clipboardData.setData("Text", mytext);
		     
    // waarschijnlijk niet de beste manier om Moz/NS te detecteren;
   // het is mij echter onbekend vanaf welke versie dit precies werkt:
	  }
    else if (window.netscape) 
   { 
	    try
	     {
	        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
	        var gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
	        gClipboardHelper.copyString(mytext);
	      }
	    catch(err) 
	     {
        window.open('howtosign.html', '', 'height=350, width=500');
      } 
  }
}

function deCAPACITATE()
{
	var autocopy = document.getElementById("autocopy").checked;
      elem = document.getElementById("decap");
		stripSpaces(elem);
		elem.value = elem.value.toLowerCase();
		// also: everything after .!? is a capital..
		var regexp = /(\. |! |\? )(\w)(\w*)/gi; // match period followed by text, we save the first letter
		elem.value = elem.value.replace(regexp,function(all,s1,s2,s3){return s1+s2.toUpperCase()+s3;});		
		var regexp = /^(\w)(\w*)/mi; // match start of text followed by text, we save the first letter
		elem.value = elem.value.replace(regexp,function(all,s1,s2){return s1.toUpperCase()+s2;});		
	correctApo(elem);
	dashCap(elem);
	letterI(elem);
	reCapConsonantWords(elem);
	acroCap(elem);
	romans(elem);	
	// select the text for easy copying
	elem.select();
	if(autocopy)
	{
		var s = elem.value;
		s  = s.replace(/<br\/?>/gi,"\n"); 
		send_to_clipboard(s);
	}
}


function CamelCap()
{
	var autocopy = document.getElementById("autocopy").checked;
      elem = document.getElementById("decap");
		stripSpaces(elem);
		elem.value = elem.value.toLowerCase();
		// now Camel Cap Every Word
		var regexp = /(\s)(\w)(\w*)/gi; // match whitespcae followed by text, we save the first letter
		elem.value = elem.value.replace(regexp,function(all,s1,s2,s3){return " "+s2.toUpperCase()+s3;});		
		var regexp = /^(\w)(\w*)/mi; // match start of text followed by text, we save the first letter
		elem.value = elem.value.replace(regexp,function(all,s1,s2){return s1.toUpperCase()+s2;});		
	correctApo(elem);
	dashCap(elem);
	reCapConsonantWords(elem);
	acroCap(elem);
	romans(elem);
	elem.select();
	if(autocopy)
	{
		var s = elem.value;
		s  = s.replace(/<br\/?>/gi,"\n"); 
		send_to_clipboard(s);
	}
}
// and the I dis foo should keep the I...
function letterI(element)
{
	element.value = element.value.replace(/(\si\s)/g,function(all,s1){return s1.toUpperCase();});
}

// acronyms like S.L., but also R&D
function acroCap(element)
{
	element.value = element.value.replace(/ (\w\.)(\w.)*/gi,function(all){return all.toUpperCase();});
	element.value = element.value.replace(/ \w&\w /gi,function(all){return all.toUpperCase();});
}

// consonant-only words are probably acronyms (more than one cahracter
function reCapConsonantWords(element)
{
	// match all non-vowels between word boundaries
	element.value = element.value.replace(/\b([bcdfghjklmnpqrstvwxz]{2,})\b/g,function(all,s1){return s1.toUpperCase();});
}


// remove extra spaces
function stripSpaces(element)
{
	var regexp = /(\s)+/g;
	element.value = element.value.replace(regexp," ");
	element.value = element.value.replace(/(\s)+\./g,"."); // no spaces before .
	element.value = element.value.replace(/^\s/,""); // remove spaces at start of input
	element.value = element.value.replace(/\s$/,""); // remove spaces at end of input
	
}

// correct words like Hathford-Asquith (dashes)
function dashCap(element)
{
	var re = /(\w)(\w*)-/g;
	element.value = element.value.replace(re,function(all,s1,s2){return s1.toUpperCase()+s2+"-";});
	element.value = element.value.replace(/-(\w)/g,function(all,s1){return "-"+s1.toUpperCase();});
}

// roman numerals
// for sime reason, we need the 'all' param here...
function romans(element)
{
	element.value = element.value.replace(/\b([ivxlcdm])+\b/ig,function(all,s1){return all.toUpperCase();});
}

// correct apostrophes: D'artagnan -> d'Artagnan
// but for english text: isn't etc, so \w'\w\s don't do it
// SO: only with \s\w'\w\w+\s
function correctApo(element)
{
	// unfortunately, js doesn't have negative lookbehind, so lines starting with d'A won't have D'A...
	element.value = element.value.replace(/ (\w)'([a-z])/g,function(all,s1,s2,s3){return " "+s1.toLowerCase()+"'"+s2.toUpperCase();});
	element.value = element.value.replace(/(\w)'(\w)\s/g,function(all,s1,s2){return s1+"'"+s2.toLowerCase()+" ";});
}

