﻿var IOSec=new OutputEncoder();

function OutputEncoder()
{
	this.EncodeHtml=OutputEncoder_EncodeHtml;
	this.EncodeHtmlAttribute=OutputEncoder_EncodeHtmlAttribute;
	this.EncodeXml=OutputEncoder_EncodeXml;
	this.EncodeXmlAttribute=OutputEncoder_EncodeXmlAttribute;
	this.EncodeJs=OutputEncoder_EncodeJs;
	this.AsNumeric=OutputEncoder_AsNumeric;
	this.EncodeUrl=OutputEncoder_EncodeUrl;
	this.EncodeUrlDelims=OutputEncode_EncodeUrlDelims;
	this.TruncateUrlSafe=OutputEncode_TruncateUrlSafe;
	this.SingleByteHex=OutputEncoder_SingleByteHex;
	this.TwoByteHex=OutputEncoder_TwoByteHex;
	
}
function OutputEncoder_EncodeHtml(strInput)
{
	var c;
	var EncodeHtml='';
	for(var cnt=0;cnt<strInput.length;cnt++)
	{
		c=strInput.charCodeAt(cnt);
		if(((c>96)&&(c<123))||((c>64)&&(c<91))||(c==32)||((c>47)&&(c<58))||(c==46)||(c==44)||(c==45)||(c==95))
		{
			EncodeHtml=EncodeHtml+String.fromCharCode(c);
			
		}
		else
		{
			EncodeHtml=EncodeHtml+'&#'+c+';';
			
		}
		
	}
	return EncodeHtml;
	
}

function OutputEncoder_EncodeHtmlAttribute(strInput)
{
	var c;
	var EncodeHtmlAttribute='';
	for(var cnt=0;cnt<strInput.length;cnt++)
	{
		c=strInput.charCodeAt(cnt);
		if(((c>96)&&(c<123))||((c>64)&&(c<91))||((c>47)&&(c<58))||(c==46)||(c==44)||(c==45)||(c==95))
		{
			EncodeHtmlAttribute=EncodeHtmlAttribute+String.fromCharCode(c);
			
		}
		else
		{
			EncodeHtmlAttribute=EncodeHtmlAttribute+'&#'+c+';';
			
		}
		
	}
	return EncodeHtmlAttribute;
	
}

function OutputEncoder_EncodeXml(strInput)
{
	return OutputEncoder_EncodeHtml(strInput);
	
}

function OutputEncoder_EncodeXmlAttribute(strInput)
{
	return OutputEncoder_EncodeHtmlAttribute(strInput);
	
}

function OutputEncoder_EncodeJs(strInput)
{
	var c;
	var EncodeJs='';
	for(var cnt=0;cnt<strInput.length;cnt++)
	{
		c=strInput.charCodeAt(cnt);
		if(((c>96)&&(c<123))||((c>64)&&(c<91))||(c==32)||((c>47)&&(c<58))||(c==46)||(c==44)||(c==45)||(c==95))
		{
			EncodeJs=EncodeJs+String.fromCharCode(c);
			
		}
		else if(c>127)
		{
			EncodeJs=EncodeJs+'\\u'+OutputEncoder_TwoByteHex(c);
			
		}
		else
		{
			EncodeJs=EncodeJs+'\\x'+OutputEncoder_SingleByteHex(c);
			
		}
		
	}
	return'\''+EncodeJs+'\'';
	
}

function OutputEncoder_AsNumeric(strInput)
{
	if(isNaN(parseFloat(strInput)))
	{
		throw"IOSec.AsNumeric(): Error input ["+strInput+"] not a valid number.";
		
	}
	return strInput;
	
}

function OutputEncode_TruncateUrlSafe(strUrl,intMaxLength,strNotification)
{
	if(strUrl.length<=intMaxLength)
	{
		return strUrl;
		
	}
	var strEncNotification="";
	if(strNotification&&strNotification.length>0)
	{
		strEncNotification=OutputEncoder_EncodeUrl(strNotification);
		intMaxLength-=strEncNotification.length;
		
	}
	var strUrl=strUrl.substring(0,intMaxLength);
	for(var ii=1;ii<6;ii++)
	{
		if(strUrl.charAt(intMaxLength-ii)=="%")
		{
			strUrl=strUrl.substring(0,intMaxLength-ii);
			break;
			
		}
		
	}
	return strUrl+strEncNotification;
	
}

function OutputEncode_EncodeUrlDelims(strDelim,strInput)
{
	if(!strDelim)
	{
		return strInput;
		
	}
	var c;
	var d;
	var EncodeUrl='';
	for(var cnt=0;cnt<strInput.length;cnt++)
	{
		c=strInput.charCodeAt(cnt);
		if(37==c)
		{
			EncodeUrl=EncodeUrl+'%'+OutputEncoder_SingleByteHex(c);
			continue;
			
		}
		var encodedCharacter=strInput.charAt(cnt);
		for(var dcnt=0;dcnt<strDelim.length;dcnt++)
		{
			d=strDelim.charCodeAt(dcnt);
			if(d==c)
			{
				if(c>127)
				{
					encodedCharacter='%u'+OutputEncoder_TwoByteHex(c);
					
				}
				else
				{
					encodedCharacter='%'+OutputEncoder_SingleByteHex(c);
					
				}
				break;
				
			}
			
		}
		EncodeUrl+=encodedCharacter;
		
	}
	return EncodeUrl;
	
}

function OutputEncoder_EncodeUrl(strInput)
{
	var c;
	var EncodeUrl='';
	for(var cnt=0;cnt<strInput.length;cnt++)
	{
		c=strInput.charCodeAt(cnt);
		if(((c>96)&&(c<123))||((c>64)&&(c<91))||((c>47)&&(c<58))||(c==46)||(c==45)||(c==95))
		{
			EncodeUrl=EncodeUrl+String.fromCharCode(c);
			
		}
		else if(c>127)
		{
			EncodeUrl=EncodeUrl+'%u'+OutputEncoder_TwoByteHex(c);
			
		}
		else
		{
			EncodeUrl=EncodeUrl+'%'+OutputEncoder_SingleByteHex(c);
			
		}
		
	}
	return EncodeUrl;
	
}

function OutputEncoder_SingleByteHex(charC)
{
	var SingleByteHex=charC.toString(16);
	for(var cnt=SingleByteHex.length;cnt<2;cnt++)
	{
		SingleByteHex="0"+SingleByteHex;
		
	}
	return SingleByteHex;
	
}

function OutputEncoder_TwoByteHex(charC)
{
	var TwoByteHex=charC.toString(16);
	for(var cnt=TwoByteHex.length;cnt<4;cnt++)
	{
		TwoByteHex="0"+TwoByteHex;
		
	}
	return TwoByteHex;
	
}



