﻿
//=====================================================================
// Custom functions from Core.js.
// These need to be defined even when core.js isn't loaded.
//

function CustomEscapeProperly(str)
{
    var UTF8_1ST_OF_2=0xc0   ;
    var UTF8_1ST_OF_3=0xe0   ;
    var UTF8_1ST_OF_4=0xf0   ;
    var UTF8_TRAIL=0x80   ;
    var HIGH_SURROGATE_BITS=0xD800 ;
    var LOW_SURROGATE_BITS=0xDC00 ;
    var SURROGATE_6_BIT=0xFC00 ;
    var SURROGATE_ID_BITS=0xF800 ;
    var SURROGATE_OFFSET=0x10000;

	var strOut="";
	var strByte="";
	var ix=0;
	var strEscaped=" \"%<>\'&";
	if (typeof(str)=="undefined")
		return "";
	for (ix=0; ix < str.length; ix++)
	{
		var charCode=str.charCodeAt(ix);
		var curChar=str.charAt(ix);
		if (charCode <=0x7f)
		{
			if ( (charCode >=97 && charCode <=122) ||
				 (charCode >=65 && charCode <=90) ||
				 (charCode >=48 && charCode <=57) )
			{
				strOut+=curChar;
			}
			else if (charCode <=0x0f)
			{
				strOut+="%0"+charCode.toString(16).toUpperCase();
			}
			else if (charCode <=0x7f)
			{
				strOut+="%"+charCode.toString(16).toUpperCase();
			}
		}
		else if (charCode <=0x07ff)
		{
			strByte=UTF8_1ST_OF_2 | (charCode >> 6);
			strOut+="%"+strByte.toString(16).toUpperCase() ;
			strByte=UTF8_TRAIL | (charCode & 0x003f);
			strOut+="%"+strByte.toString(16).toUpperCase();
		}
		else if ((charCode & SURROGATE_6_BIT) !=HIGH_SURROGATE_BITS)
		{
			strByte=UTF8_1ST_OF_3 | (charCode >> 12);
			strOut+="%"+strByte.toString(16).toUpperCase();
			strByte=UTF8_TRAIL | ((charCode & 0x0fc0) >> 6);
			strOut+="%"+strByte.toString(16).toUpperCase();
			strByte=UTF8_TRAIL | (charCode & 0x003f);
			strOut+="%"+strByte.toString(16).toUpperCase();
		}
		else if (ix < str.length - 1)
		{
			var charCode=(charCode & 0x03FF) << 10;
			ix++;
			var nextCharCode=str.charCodeAt(ix);
			charCode |=nextCharCode & 0x03FF;
			charCode+=SURROGATE_OFFSET;
			strByte=UTF8_1ST_OF_4 | (charCode >> 18);
			strOut+="%"+strByte.toString(16).toUpperCase();
			strByte=UTF8_TRAIL | ((charCode & 0x3f000) >> 12);
			strOut+="%"+strByte.toString(16).toUpperCase();
			strByte=UTF8_TRAIL | ((charCode & 0x0fc0) >> 6);
			strOut+="%"+strByte.toString(16).toUpperCase();
			strByte=UTF8_TRAIL | (charCode & 0x003f);
			strOut+="%"+strByte.toString(16).toUpperCase();
		}
	}
	return strOut;
}

function CustomSubmitSearchRedirect(strUrl,inputName)
{
	var frm=document.forms["frmSiteSearch"];
	if (frm==null)
	{
		if (typeof(MSOWebPartPageFormName) !="undefined")
			frm=document.forms[MSOWebPartPageFormName];
	}
	if (frm !=null)
	{
		var searchText=frm.elements[inputName].value;
		strUrl=strUrl+"?k="+CustomEscapeProperly(searchText);
		var searchScope=frm.elements["SearchScope"];
		if (searchScope !=null)
		{
			var searchScopeUrl=searchScope.value;
			if (searchScopeUrl)
			{
				strUrl=strUrl+"&u="+CustomEscapeProperly(searchScopeUrl);
			}
		}
		frm.action=strUrl;
		frm.submit();
	}
}

