//Note: this object uses Vector, and Hashtable objects so to use this object we must include following js files
// /default/javascript/core/JavaUtil.js
var CHTMLEncoder = new _CHTMLEncoder();

_CHTMLEncoder.prototype.getInstance = _CHTMLEncoder_getInstance;
_CHTMLEncoder.prototype.toString = _CHTMLEncoder_toString;
_CHTMLEncoder.prototype.loadHtmlTextTable = _CHTMLEncoder_loadHtmlTextTable;
_CHTMLEncoder.prototype.loadHtmlCDATATable = _CHTMLEncoder_loadHtmlCDATATable;
_CHTMLEncoder.prototype.loadHtmlHrefTable = _CHTMLEncoder_loadHtmlHrefTable;
_CHTMLEncoder.prototype.escapeTEXT = _CHTMLEncoder_escapeTEXT;
_CHTMLEncoder.prototype.escapeCDATA = _CHTMLEncoder_escapeCDATA;
_CHTMLEncoder.prototype.escapeHREF = _CHTMLEncoder_escapeHREF;
_CHTMLEncoder.prototype.escape = _CHTMLEncoder_escape;



// Constructor of _CHTMLEncoder object (equivalent to a com.snapfish.core.servlet.CLinkManager java object)
// @param String an url it can be http://www.snapfish.com/getShoeBox/pns/... or /getShoeBox/pns/... or /getShoeBox, ...
function _CHTMLEncoder()
{
	this.m_htmlTextTable = Hashtable.getInstance();
    this.m_htmlCDATATable = Hashtable.getInstance();
    this.m_htmlHrefTable = Hashtable.getInstance();
	_CHTMLEncoder_loadHtmlTextTable(this.m_htmlTextTable);
	_CHTMLEncoder_loadHtmlCDATATable(this.m_htmlCDATATable);
	_CHTMLEncoder_loadHtmlHrefTable(this.m_htmlHrefTable);
    return this;
}

function _CHTMLEncoder_getInstance()
{
	return new _CHTMLEncoder();
}

function _CHTMLEncoder_toString()
{
    var str = "m_url ";
    return str;
}

function _CHTMLEncoder_loadHtmlTextTable(htmlTextTable)
{

	//#DOUBLE QUOTE
	htmlTextTable.put('"','&#34;');

	//#AMPERSAND
	htmlTextTable.put('&','&amp;');

	//#APOSTROPHE
	htmlTextTable.put('\'','&#39;')

	//#LESS THAN (either &lt or &#60;)
	htmlTextTable.put('<','&#60;');

	//#GREATER THAN (either &lt or &#62;)
	htmlTextTable.put('>','&#62;');

	//#PERCENTAGE
	htmlTextTable.put('%','&#37;');

	//#BACKSLASH
	htmlTextTable.put('\\','&#92;');

}

function _CHTMLEncoder_loadHtmlCDATATable(htmlCDATATable)
{

	//#SPACE
	htmlCDATATable.put(' ','&#32;');

	//#DOUBLE QUOTE
	htmlCDATATable.put('"','&#34;');

	//#NUMBER SIGN
	htmlCDATATable.put('#','&#35;');

	//#AMPERSAND
	htmlCDATATable.put('&','&amp;');

	//#APOSTROPHE
	htmlCDATATable.put('\'','&#39;');

	//#LESS THAN (either &lt or &#60;)
	htmlCDATATable.put('<','&#60;');

	//#GREATER THAN (either &lt or &#62;)
	htmlCDATATable.put('>','&#62;');

	//#BACKSLASH
	htmlCDATATable.put('\\','&#92;');

}

function _CHTMLEncoder_loadHtmlHrefTable(htmlHrefTable)
{

	//#SPACE(&#32;)
	htmlHrefTable.put(' ','&#32;');

	//#DOUBLE QUOTE
	htmlHrefTable.put('"','&#34;');

	//#NUMBER SIGN
	htmlHrefTable.put('#','&#35;');

	//#AMPERSAND
	htmlHrefTable.put('&','&amp;');

	//#APOSTROPHE
	htmlHrefTable.put('\'','&#39;');

	//#LESS THAN (either &lt or &#60;)
	htmlHrefTable.put('<','&#60;');

	//#GREATER THAN (either &lt or &#62;)
	htmlHrefTable.put('>','&#62;');

	//#BACKSLASH
	htmlHrefTable.put('\\','&#92;');

}

function _CHTMLEncoder_escapeTEXT(str)
{
	return this.escape(this.m_htmlTextTable,str);
}

function _CHTMLEncoder_escapeCDATA(str)
{
	return this.escape(this.m_htmlCDATATable,str);
}

function _CHTMLEncoder_escapeHREF(str)
{
	return this.escape(this.m_htmlHrefTable,str);
}

function _CHTMLEncoder_escape(htmlTable,str)
{

        var buffer = '';
        if( str == null || str == '' )
            return buffer;

        for(var i=0; i<str.length ; i++)
        {
            var old = str.charAt(i) ;
            var encodeTo = htmlTable.get( old ) ;
            if(encodeTo == null ) {
                //endcoder is not defined for this character, so do not encode
                buffer += old  ;
                continue ;
            }   //end of if
            //remove the white space (if exists in properties file)
            //and append encoded-trimmed string to the buffer
            buffer += encodeTo ;

        }   //end of for

        return buffer ;
}


