// Licensed Materials - Property of IBM
//
// IBM Cognos Products: pps
//
// (C) Copyright IBM Corp. 2005, 2017
//
// US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
// Encoding Utilities
function CEncodingUtil() {};

CEncodingUtil.HtmlEncode = function(str)
{	
	var encodedStr = "";
	for (var i = 0; i < str.length; i++) {
		switch(str.charAt(i))
		{
		case '<':
			encodedStr += "&lt;";
			break;
		case '>':
		   	encodedStr += "&gt;";
			break;
		case '&':
		   	encodedStr += "&amp;";
			break;
		case '"':
		   	encodedStr += "&quot;";
			break;
		case '\'':
		   	encodedStr += "&#39;";
			break;
		default:
			encodedStr += str.charAt(i);
			break;
		}
	}
	return encodedStr;
}

CEncodingUtil.JavascriptEncode = function( str ){

	var encodedStr="";
	for (var i = 0; i < str.length; i++) {
		switch(str.charAt(i))
		{
		case '\'':
			encodedStr += "\\\'";
			break;
		case '"':
		   	encodedStr += "\\\"";
			break;
		case '\\':
			encodedStr += "\\\\";
			break;
		default:
			encodedStr += str.charAt(i);
			break;
		}
	}
	return encodedStr;
}

CEncodingUtil.UrlEncode = function( str ) {
	
	var encodedStr = escape(str);
	encodedStr = encodedStr.replace(/\+/g, "%2b");
	
	return encodedStr;
}


CEncodingUtil.EncodeStrOperand = function( str ) {
	var encodedStr = str.replace(/\t/g, "\\t");
	encodedStr = encodedStr.replace(/\"/g, "\\042");
	return encodedStr;
}


CEncodingUtil.EscapeQuote = function( str ){

	var encodedStr = "";
	for (var i = 0; i < str.length; i++) {
		switch(str.charAt(i))
		{
		case '"':
		   	encodedStr += "&quot;";
			break;
		default:
			encodedStr += str.charAt(i);
			break;
		}
	}
	return encodedStr;
}

//Xalan escapes extended characters that are sometime not unescaped by browser.
//This function provides a workaround to force browser to unescape the str.
CEncodingUtil.ForceUnescape = function( str ){

	var sUnescape = "<INPUT value=\"" + CEncodingUtil.ReplaceQuoteAndSpace(str, 0) + "\"/>";
	var p = document.createElement("P");
	p.innerHTML = sUnescape;

	sUnescape = CEncodingUtil.ReplaceQuoteAndSpace(p.childNodes[0].value, 1);
	return sUnescape;
}

//opt: 0 - encode quote and space; 1 - decode quote and space
CEncodingUtil.ReplaceQuoteAndSpace = function( str, opt ){

	var sResult, quotPattern, quotReplace, spacePattern, spaceReplace;
	
	if(opt == 0)
	{
		quotPattern = RegExp("\"", "g");
		quotReplace = "_quot_holder";
		spacePattern = RegExp(" ", "g");
		spaceReplace = "_space_holder";
	}
	else
	{
		quotPattern = RegExp("_quot_holder", "g");
		quotReplace = "\"";
		spacePattern = RegExp("_space_holder", "g");
		spaceReplace = " ";
	}
		
	sResult = str.replace(quotPattern, quotReplace);
	sResult = sResult.replace(spacePattern, spaceReplace);
	
	return sResult;
}