//**********************************************************************************
//
//Copy from core.js (JPFigueiredo: 2009-09-10)
//
//**********************************************************************************
function escapeProperlyCoreCore(str, bAsUrl, bForFilterQuery, bForCallback) {
	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 (bAsUrl && (curChar == '#' || curChar == '?')) {
			strOut += str.substr(ix);
			break;
		}
		if (bForFilterQuery && curChar == '&') {
			strOut += curChar;
			continue;
		}
		if (charCode <= 0x7f) {
			if (bForCallback) {
				strOut += curChar;
			}
			else {
				if ((charCode >= 97 && charCode <= 122) ||
					 (charCode >= 65 && charCode <= 90) ||
					 (charCode >= 48 && charCode <= 57) ||
					 (bAsUrl && (charCode >= 32 && charCode <= 95) && strEscaped.indexOf(curChar) < 0)) {
					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 escapeProperly(str) {
	return escapeProperlyCoreCore(str, false, false, false);
}
function SearchKeyDown(event, strUrl) {
	if (IsKeyDownSubmit(event)) {
		SubmitSearchRedirect(strUrl);
		return false;
	}
	return true;
}
function IsKeyDownSubmit(event) {
	if (event != null) {
		var charCode;
		var bKeyModifiers;
		if (browseris.ie) {
			charCode = event.keyCode;
			bKeyModifiers = event.altKey || event.ctrlKey;
		}
		else {
			charCode = event.which;
			bKeyModifiers = event.modifers &
						   (event.ALT_MASK | event.CONTROL_MASK);
		}
		if ((charCode == 13) && !bKeyModifiers)
			return true;
	}
	return false;
}
function SubmitSearchRedirect(strUrl) {
	var frm = document.forms["frmSiteSearch"];
	if (frm == null) {
		if (typeof (MSOWebPartPageFormName) != "undefined")
			frm = document.forms[MSOWebPartPageFormName];
	}
	if (frm != null) {
		var searchText = frm.elements["SearchString"].value;
		strUrl = strUrl + "?k=" + escapeProperly(searchText);
		var searchScope = frm.elements["SearchScope"];
		if (searchScope != null) {
			var searchScopeUrl = searchScope.value;
			if (searchScopeUrl) {
				strUrl = strUrl + "&u=" + escapeProperly(searchScopeUrl);
			}
		}
		frm.action = strUrl;
		frm.submit();
	}
}

//**********************************************************************************
//
//Copy from init.js (JPFigueiredo: 2009-09-10)
//
//**********************************************************************************


var g_updateFormDigestPageLoaded = new Date();
function UpdateFormDigest(serverRelativeWebUrl, updateInterval) {
	try {
		if ((g_updateFormDigestPageLoaded == null) || (typeof (g_updateFormDigestPageLoaded) != "object")) {
			return;
		}
		var now = new Date();
		if (now.getTime() - g_updateFormDigestPageLoaded.getTime() < updateInterval) {
			return;
		}
		if ((serverRelativeWebUrl == null) || (serverRelativeWebUrl.length <= 0)) {
			return;
		}
		var formDigestElement = document.getElementsByName("__REQUESTDIGEST")[0];
		if ((formDigestElement == null) || (formDigestElement.tagName.toLowerCase() != "input") || (formDigestElement.type.toLowerCase() != "hidden") ||
			(formDigestElement.value == null) || (formDigestElement.value.length <= 0)) {
			return;
		}
		var request = null;
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (ex) {
			request = null;
		}
		if (request == null) {
			try {
				request = new XMLHttpRequest();
			}
			catch (ex) {
				request = null;
			}
		}
		if (request == null) {
			return;
		}
		request.open("POST", GetUrlFromWebUrlAndWebRelativeUrl(serverRelativeWebUrl, "_vti_bin/sites.asmx"), false);
		request.setRequestHeader("Content-Type", "text/xml");
		request.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/GetUpdatedFormDigest");
		request.send("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" + "  <soap:Body>" + "    <GetUpdatedFormDigest xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\" />" + "  </soap:Body>" + "</soap:Envelope>");
		var responseText = request.responseText;
		if ((responseText == null) || (responseText.length <= 0)) {
			return;
		}
		var startTag = '<GetUpdatedFormDigestResult>';
		var endTag = '</GetUpdatedFormDigestResult>';
		var startTagIndex = responseText.indexOf(startTag);
		var endTagIndex = responseText.indexOf(endTag, startTagIndex + startTag.length);
		var newFormDigest = null;
		if ((startTagIndex >= 0) && (endTagIndex > startTagIndex)) {
			var newFormDigest = responseText.substring(startTagIndex + startTag.length, endTagIndex);
		}
		if ((newFormDigest == null) || (newFormDigest.length <= 0)) {
			return;
		}
		var oldValue = formDigestElement.value;
		formDigestElement.value = newFormDigest;
	}
	catch (ex) {
	}
}

var _spFormOnSubmitCalled = false;
var _spSuppressFormOnSubmitWrapper = false;
function _spFormOnSubmitWrapper() {
	if (_spSuppressFormOnSubmitWrapper) {
		return true;
	}
	if (_spFormOnSubmitCalled) {
		return false;
	}
	if (typeof (_spFormOnSubmit) == "function") {
		var retval = _spFormOnSubmit();
		var testval = false;
		if (typeof (retval) == typeof (testval) && retval == testval) {
			return false;
		}
	}
	RestoreToOriginalFormAction();
	_spFormOnSubmitCalled = true;
	return true;
}

var _spEscapedFormAction;
var _spOriginalFormAction;
function RestoreToOriginalFormAction() {
	if (_spOriginalFormAction != null) {
		if (_spEscapedFormAction == document.forms[0].action) {
			document.forms[0].action = _spOriginalFormAction;
		}
		_spOriginalFormAction = null;
		_spEscapedFormAction = null;
	}
}

function Browseris() {
	var agt = navigator.userAgent.toLowerCase();
	this.osver = 1.0;
	if (agt) {
		var stOSVer = agt.substring(agt.indexOf("windows ") + 11);
		this.osver = parseFloat(stOSVer);
	}
	this.major = parseInt(navigator.appVersion);
	this.nav = ((agt.indexOf('mozilla') != -1) && ((agt.indexOf('spoofer') == -1) && (agt.indexOf('compatible') == -1)));
	this.nav6 = this.nav && (this.major == 5);
	this.nav6up = this.nav && (this.major >= 5);
	this.nav7up = false;
	if (this.nav6up) {
		var navIdx = agt.indexOf("netscape/");
		if (navIdx >= 0)
			this.nav7up = parseInt(agt.substring(navIdx + 9)) >= 7;
	}
	this.ie = (agt.indexOf("msie") != -1);
	this.aol = this.ie && agt.indexOf(" aol ") != -1;
	if (this.ie) {
		var stIEVer = agt.substring(agt.indexOf("msie ") + 5);
		this.iever = parseInt(stIEVer);
		this.verIEFull = parseFloat(stIEVer);
	}
	else
		this.iever = 0;
	this.ie4up = this.ie && (this.major >= 4);
	this.ie5up = this.ie && (this.iever >= 5);
	this.ie55up = this.ie && (this.verIEFull >= 5.5);
	this.ie6up = this.ie && (this.iever >= 6);
	this.winnt = ((agt.indexOf("winnt") != -1) || (agt.indexOf("windows nt") != -1));
	this.win32 = ((this.major >= 4) && (navigator.platform == "Win32")) ||
		(agt.indexOf("win32") != -1) || (agt.indexOf("32bit") != -1);
	this.mac = (agt.indexOf("mac") != -1);
	this.w3c = this.nav6up;
	this.safari = (agt.indexOf("safari") != -1);
	this.safari125up = false;
	if (this.safari && this.major >= 5) {
		var navIdx = agt.indexOf("safari/");
		if (navIdx >= 0)
			this.safari125up = parseInt(agt.substring(navIdx + 7)) >= 125;
	}
}
var browseris = new Browseris();


//**********************************************************************************
//
//Copy from datepicker.js (JPFigueiredo: 2009-10-28)
//
//**********************************************************************************

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;
