/*
 * Advanced Code Display
 *
 * A set of functions used to display code.
 * 
 * Functions:
 *
 * HighlightSyntax(target)
 * TogglePlainText(target)
 *
*/

function HighlightSyntax() {
	var SplitString = "GdlDJmd68adjd793JBndi51l";
	
	if (document.getElementsByName('code_div')) {
	
	 var code_divs = document.getElementsByName('code_div');
	 
	 for (i = 0; i < code_divs.length; i++) {
	 
	 
	  /* Retrieving the code: */
	  var code_div = code_divs[i].innerHTML;
	  
	  /* Removing top string from code, at end it will be added back: */
	  var Top_String = "KHFdhfis3579jFHkd8257902odfjoJKFeJKLJ2582";
	  var Top_HTML = '<span style="font-weight: bold; color: rgb(0, 0, 90); font-size: 16px;">Code Snippet (Syntax highlighted) - </span><a href="" onclick="ToggleWrap(this); return false;" style="font-size: 16px;">Toggle Wrap</a>';
	  code_div = ItReplace(Top_HTML, Top_String, code_div);
	  
	  /* Code Highlighting: Quotes */
	  var Q_String = "H25FuidYj3dl92BMVTFaaqq";
	  
	  /* Counting the amount of quotes in the code */
	  var Quote_Amount = 0;
	  for (a = 0; a < code_div.length; a++) {
		if (code_div.substr(a, 1) == '"') {
			Quote_Amount++;
		}
	  }
	  
	  /* Replacing quotes */
	  while (Quote_Amount > 0) {
	  
	    if ((Quote_Amount % 2) == 0) {
	      code_div = code_div.replace('"', "<span style='color:blue;'>" + Q_String); // "<span style='color:blue;'>" + Q_String
	    } else {
	      code_div = code_div.replace('"', Q_String + "</span>");
	    }
		Quote_Amount--;
	  }
	  
	  /* Highlighting keywords: */
	  code_div = ItReplace('if', '<span class="code_1">i' + SplitString + 'f</span>', code_div);
	  code_div = ItReplace('else', '<span class="code_1">el' + SplitString + 'se</span>', code_div);
	  code_div = ItReplace('for', '<span class="code_1">fo' + SplitString + 'r</span>', code_div);
	  code_div = ItReplace('while', '<span class="code_1">wh' + SplitString + 'ile</span>', code_div);
	  code_div = ItReplace('var ', '<span class="code_1">v' + SplitString + 'ar</span> ', code_div);
	  code_div = ItReplace('function', '<span class="code_1">func' + SplitString + 'tion</span>', code_div);
	  code_div = ItReplace('null', '<span class="code_1">nu' + SplitString + 'll</span>', code_div);
	  code_div = ItReplace('case', '<span class="code_1">c' + SplitString + 'ase</span>', code_div);
	  code_div = ItReplace('break', '<span class="code_1">br' + SplitString + 'eak</span>', code_div);
	  code_div = ItReplace('switch', '<span class="code_1">sw' + SplitString + 'itch</span>', code_div);
	  code_div = ItReplace('default', '<span class="code_1">defa' + SplitString + 'ult</span>', code_div);
	  code_div = ItReplace('try', '<span class="code_1">tr' + SplitString + 'y</span>', code_div);
	  code_div = ItReplace('catch', '<span class="code_1">ca' + SplitString + 'tch</span>', code_div);
	  
	  /* Highlighting hooks: */
	  var HL_String = "KLFKJK7Fdksjf676747k3f3s89";
	  var HR_String = "Bdkjdo23579dj242HNjdksf0s89";
	  code_div = ItReplace('(',  '<span class="code_2">' + HL_String + '</span>', code_div);
	  code_div = ItReplace(')',  '<span class="code_2">' + HR_String + '</span>', code_div);  
	  
	  /* Highlighting brackets: */
	  var BL_String = "FDI989gfdsjjs2482hdfAOpGdoQAQ";
	  var BR_String = "IFHI892ndjfoHdof45672YUdflaiy2";
	  code_div = ItReplace('{',  '<span class="code_2">' + BL_String + '</span>', code_div);
	  code_div = ItReplace('}',  '<span class="code_2">' + BR_String + '</span>', code_div);  
	  
	  /* Highlighting comments: */
	  var CL_String = "HGFdfja8935hdgalduj8kdHtf";
	  var CR_String = "dshHkdfe83hKfh92j5Hldafy25";
	  code_div = ItReplace('/*',  '<span style="color:green;">' + CL_String, code_div);
	  code_div = ItReplace('*/',  CR_String + '</span>', code_div);  
	 
	  /* Removing escape strings: */
	  code_div = ItReplace(SplitString, "", code_div);
	  code_div = ItReplace(HL_String, "(", code_div);
	  code_div = ItReplace(HR_String, ")", code_div);
	  code_div = ItReplace(BL_String, "{", code_div);
	  code_div = ItReplace(BR_String, "}", code_div);
	  code_div = ItReplace(CL_String, "/*", code_div);
	  code_div = ItReplace(CR_String, "*/", code_div);
	  code_div = ItReplace(Q_String, '"', code_div);
	  code_div = ItReplace(Top_String, Top_HTML, code_div);
	  
	  
	  /* Updating the div that contains the code: */
	  document.getElementsByName('code_div')[i].innerHTML = code_div;
	 
	 }
	
	}
	
}

function ToggleWrap(element_child) {

	var element = element_child.parentNode;
	
	if (element.style.whiteSpace == 'pre-wrap') {
	  element.style.whiteSpace = 'pre';
	} else if (element.style.whiteSpace == 'pre') {
	  element.style.whiteSpace = 'pre-wrap';
	}
}


function ItReplace(rep_text, to_be_rep_text, strText) {

 var ReplaceText = strText;
 var MatchIndex = ReplaceText.indexOf( rep_text );

 // Loop over the text as long as the rep_text still exists:
 while (MatchIndex != -1){
 
   // Replacing the rep_text with to_be_rep_text:
   ReplaceText = ReplaceText.replace( rep_text, to_be_rep_text )
 
   // Get the index of the rep_text:
   MatchIndex = ReplaceText.indexOf( rep_text );

 }
  
 return ReplaceText;
 
}

window.onload=function(){
setTimeout(function(){ HighlightSyntax(); }, 200);
}
