/*
 Unless otherwise stated, this javascript snippet was coded by theBruney Designs :: http://thebruneysite.com
 Any one can use, but do not remove this notice, just add your own notice where you have scripted.
 
 Date: January 2010.
 */
 
 //I'll declare all global variables here.
 var txt = ''; //selected text
 var index = ''; //index of DIVs
 var func = 0;
 var browser; //user browser
 var output; //out text
 var DivId; //div id of codebox
 var TogID; //div id of togglebox 
 var kind = 0;
 
 function setSelAll(i){
	getSelText(i); //get selected raw text/code
	ZeroClip(i);
 }
 function setAllAll(i){
	kind = 0;
    getAllText(i); //get all raw text/code
	ZeroClip(i);
 }
 
  function HighlightAll(i){
    getTextDIV(i); //get all raw text/code
	ZeroClip(i);
 }

 function removeBox(i){

	 TogID = window.document.getElementById("togid"+i).value;
	 DivId = window.document.getElementById("divid"+i).value;
	 
	document.getElementById(TogID).innerHTML ="<input type=\"image\" src=\"/images/selcode_ic.png\"  title=\"Show Selected\" value=\"Selected Raw\" name=\"getSel\" onmousedown=\"setSelAll('"+i+"');\"  /> ";

	if (kind == 0)
		document.getElementById(TogID).innerHTML +="<input type=\"image\" src=\"/images/allcode_ic.png\" title=\"Show All\" value=\"All Raw\" name=\"getAll\" onmousedown=\"setAllAll('"+i+"');\" /> ";
	else
		document.getElementById(TogID).innerHTML +="<input type=\"image\" src=\"/images/allcode_ic.png\" title=\"Show All\" value=\"All Raw\" name=\"getAll\" onmousedown=\"HighlightAll('"+i+"');\" /> ";
		
	document.getElementById(TogID).innerHTML +="<input  id=\"divid"+i+"\" name=\"divid\" type=\"hidden\" value=\""+DivId+"\"  />";
	document.getElementById(TogID).innerHTML += "<input  id=\"togid"+i+"\" name=\"togid\" type=\"hidden\" value=\""+TogID+"\"  />";

	
 }
 function toggleSpace(i){
	TogID = window.document.getElementById("togid"+i).value;
	DivId = window.document.getElementById("divid"+i).value;
	
	document.getElementById(TogID).innerHTML = "<textarea id=\"output"+i+"\"  name=\"output"+i+"\" rows=\"5\" cols=\"65\"></textarea>";
	document.getElementById(TogID).innerHTML += "<input type=\"image\" src=\"/images/nocdbox_ic.png\" title=\"Remove Code Box\" id=\"removeBox\" name=\"removeBox\"  value=\"Remove Box\" onmousedown=\"removeBox("+i+");\"  /> ";
	document.getElementById(TogID).innerHTML += "<input type=\"image\" src=\"/images/clipcode_ic.png\" title=\"Copy to Clipboard\" id=\"clipCop"+i+"\" name=\"clipCop\"  value=\"Z ClipBoard\" onclick=\"ZeroClip('"+i+"');\" />";
	
	document.getElementById(TogID).innerHTML +="<input  id=\"divid"+i+"\" name=\"divid"+i+"\" type=\"hidden\" value=\""+DivId+"\"  />";
	document.getElementById(TogID).innerHTML += "<input  id=\"togid"+i+"\" name=\"togid"+i+"\" type=\"hidden\" value=\""+TogID+"\"  />";
	
 }
function getdivHTML(i){
	//get HTML code
	DivId = window.document.getElementById("divid"+i).value;
	toggleSpace(i);
	return document.getElementById(DivId).innerHTML;	
}

function getTextDIV(i){
 DivId = window.document.getElementById("divid"+i).value;

 kind = 1;
	if (document.selection)
	{
	document.selection.empty(); 
	var div = document.body.createTextRange();
	div.moveToElementText(document.getElementById(DivId));
	div.select();
	getSelText(i);
	}
	else
	{
	window.getSelection().removeAllRanges();
	var div = document.createRange();
	div.setStartBefore(document.getElementById(DivId));
	div.setEndAfter(document.getElementById(DivId));
	window.getSelection().addRange(div);
	getSelText(i);
	}
}

function stripHTML(i){
	//Get rid of HTML tags
	var strInputCode = getdivHTML(i);
	strInputCode = strInputCode.replace(/&(lt|gt);/g, function (strMatch, p1){
 		 	return (p1 == "lt")? "<" : ">";
 	});
	
	var strTagStrippedText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
    return strTagStrippedText;		
}

function getAllText(i)
{
	//Copy all data
	var n_index = i;
	var strippedText = stripHTML(i);
	
	browser = detectBrowser();
	
	if ((browser=="Microsoft Internet Explorer")){
		
		window.clipboardData.setData('Text', strippedText);
		output = window.clipboardData.getData('Text');
		
		output = output.tokenize("\n", "\r", true);
		joinString = getString("\n");
		output = output.join(joinString);
		window.document.getElementById("output"+n_index).value = output; 
	}
	else if (browser =="Opera"){
	
		 //get rid of all those spaces
		 output = strippedText.tokenize(" ", "\r", true);
		 joinString = getString("");
		 output = output.join(joinString);
		 
		 //Trim once more
		 output = output.tokenize("\n", "", true);
		 joinString = getString("\r"); 
		 
		 window.document.getElementById("output"+n_index).value = output.join(joinString);
	}
	else {
		//Remove all those extra new lines, and then replace with return \r
		 output = strippedText.tokenize("\n", " ", true);
		 joinString = getString("\r");
		 output = output.join(joinString);
		 window.document.getElementById("output"+n_index).value = output; 
	}
	
    
}

function ZeroClip(index){
	/*=================ZeroClip===========: Owner: 	jhuckaby
    get your own at: http://code.google.com/p/zeroclipboard/ */
	var clip = null;
	ZeroClipboard.setMoviePath('http://newtbs.thebruneysite.com/swf/ZeroClipboard.swf');
	clip = new ZeroClipboard.Client();
	//event
	
	
	clip.addEventListener('mousedown',function() { 
	clip.setText(document.getElementById('output'+index).value);
	});
	
	/*clip.addEventListener('complete',function(client,text) {
	alert('copied: ' + text); 
	
});*/

clip.glue('clipCop'+index);
}	
		
		
function getSelText(i)
{

     //get user selection
     if (window.getSelection)
    {
        index = i;
		txt = window.getSelection();
		
    }
    if (document.getSelection)
    {
        index = i;
		txt = document.getSelection();
		
    }
    if (document.selection)
    {
		index = i;
        txt = document.selection.createRange().text;
    }
	
	tokenizeString();
}

function tokenizeString()
  {
	 //Call tokenize, newline and join String function, then output
	 
     var input = txt;
	 var m_index = index;
     var ignoreEmptyTokens = true;
	 
     var seperator = "#";
     var trim = "\n";
	 var output;
	 var joinString;
	 
	toggleSpace(m_index);
	browser = detectBrowser();
	
	 if ( isChrome() || isSaf() ){
			window.document.getElementById("output"+m_index).value = txt;
	}
	else if (browser == "Microsoft Internet Explorer"){
			
			 var finalout = input;
			 var tbsTokens = new Array("}","{",";");
			 for (var t = 0; t < 4; t++)
			 finalout = goNewLine(finalout,tbsTokens[t]);
			 window.document.getElementById("output"+m_index).value = finalout;
	}

	else{ 

		 output = input.tokenize(seperator, trim, ignoreEmptyTokens);
		 joinString = getString("\r");
		
		 input = output.join(joinString);
		 output = input.tokenize("\n", "\r", ignoreEmptyTokens);
		 joinString = getString("\r"); 
		
		 window.document.getElementById("output"+m_index).value = output.join(joinString);
		}
  }
 

function goNewLine(input, token){
			 var pos = 0;
			 var lastpos = -1;
			 var extractStr="";
			 var extractStr2="";
			
			do{
			      
				  lastpos = input.indexOf(token,pos);
				  
				  extractStr = ""; //empty container
				  if (lastpos != -1) { //if the token is found
				  for (var k=pos; k<=lastpos; k++) //from the begin pos to last
				  extractStr += input.charAt(k); //get the chars and store them into extractStr
				  
				  extractStr2 += extractStr; //attach to string
				  extractStr2 += "\n"; //now create new line after token
				  pos = lastpos+1; //create a new start pos
				 }
				 
				
			 } while (lastpos != -1); //do this for all tokens of the input text
			 
			 if ( (input.lastIndexOf(token)) != (input.length-1)) //sometimes there  is remainder text after the last token
			 for (var k=pos; k<=(input.length+1); k++) //from the pos of last found token to the length of the string
			 extractStr2 += input.charAt(k); //add all the remainder chars to result
			 
	return extractStr2;
}
 /*
 The following two functions, getString() and tokenize() was scripted by:
 */
/*******************************************************************/
/***                                                             ***/
/***   Tokenizer.js - JavaScript String Tokenizer Function       ***/
/***                                                             ***/
/***   Version   : 0.2                                           ***/
/***   Date      : 01.05.2005                                    ***/
/***   Copyright : 2005 Adrian Zentner                           ***/
/***   Website   : http://www.adrian.zentner.name/               ***/
/***                                                             ***/
/***   This library is free software. It can be freely used as   ***/
/***   long as this this copyright notice is not removed.        ***/
/***                                                             ***/
/*******************************************************************/
function getString()
  {
     var myString = getString.arguments[0];
 
     while(myString.indexOf("\\n") != -1)
       myString = myString.replace("\\n","\n");

     while(myString.indexOf("\\f") != -1)
       myString = myString.replace("\\f","\f");

     while(myString.indexOf("\\b") != -1)
       myString = myString.replace("\\b","\b");

     while(myString.indexOf("\\r") != -1)
       myString = myString.replace("\\r","\r");

     while(myString.indexOf("\\t") != -1)
       myString = myString.replace("\\t","\t");

     return myString;
  }
  
String.prototype.tokenize = tokenize;
// Input-Seperator:  #
// Trim:   			 \n
// Output-Seperator:  \r
function tokenize()
  {
     var input             = "";
     var separator         = " ";
     var trim              = "";
     var ignoreEmptyTokens = true;

     try {
       String(this.toLowerCase());
     }
     catch(e) {
       window.alert("Tokenizer Usage: string myTokens[] = myString.tokenize(string separator, string trim, boolean ignoreEmptyTokens);");
       return;
     }

     if(typeof(this) != "undefined")
       {
          input = String(this);
       }

     if(typeof(tokenize.arguments[0]) != "undefined")
       {
          separator = String(tokenize.arguments[0]);
       }

     if(typeof(tokenize.arguments[1]) != "undefined")
       {
          trim = String(tokenize.arguments[1]);
       }

     if(typeof(tokenize.arguments[2]) != "undefined")
       {
          if(!tokenize.arguments[2])
            ignoreEmptyTokens = false;
       }

     var array = input.split(separator);

     if(trim)
       for(var i=0; i<array.length; i++)
         {
           while(array[i].slice(0, trim.length) == trim)
             array[i] = array[i].slice(trim.length);
           while(array[i].slice(array[i].length-trim.length) == trim)
             array[i] = array[i].slice(0, array[i].length-trim.length);
         }

     var token = new Array();
     if(ignoreEmptyTokens)
       {
          for(var i=0; i<array.length; i++)
            if(array[i] != "")
              token.push(array[i]);
       }
     else
       {
          token = array;
       }

     return token;
  }
