var MD5 = function (string) {
function RotateLeft(lValue, iShiftBits) {return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));}
function AddUnsigned(lX,lY) {var lX4,lY4,lX8,lY8,lResult;lX8 = (lX & 0x80000000);lY8 = (lY & 0x80000000);lX4 = (lX & 0x40000000);lY4 = (lY & 0x40000000);lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);if (lX4 & lY4) {return (lResult ^ 0x80000000 ^ lX8 ^ lY8);}
if (lX4 | lY4) {if (lResult & 0x40000000) {return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);} else {return (lResult ^ 0x40000000 ^ lX8 ^ lY8);}
} else {return (lResult ^ lX8 ^ lY8);}
}
function F(x,y,z) { return (x & y) | ((~x) & z); }
function G(x,y,z) { return (x & z) | (y & (~z)); }
function H(x,y,z) { return (x ^ y ^ z); }
function I(x,y,z) { return (y ^ (x | (~z))); }
function FF(a,b,c,d,x,s,ac) {a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));return AddUnsigned(RotateLeft(a, s), b);};
function GG(a,b,c,d,x,s,ac) {a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));return AddUnsigned(RotateLeft(a, s), b);};
function HH(a,b,c,d,x,s,ac) {a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));return AddUnsigned(RotateLeft(a, s), b);};
function II(a,b,c,d,x,s,ac) {a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));return AddUnsigned(RotateLeft(a, s), b);};
function ConvertToWordArray(string) {var lWordCount;var lMessageLength = string.length;var lNumberOfWords_temp1=lMessageLength + 8;var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;var lNumberOfWords = (lNumberOfWords_temp2+1)*16;var lWordArray=Array(lNumberOfWords-1);var lBytePosition = 0;var lByteCount = 0;while ( lByteCount < lMessageLength ) {lWordCount = (lByteCount-(lByteCount % 4))/4;lBytePosition = (lByteCount % 4)*8;lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));lByteCount++;}
lWordCount = (lByteCount-(lByteCount % 4))/4;lBytePosition = (lByteCount % 4)*8;lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);lWordArray[lNumberOfWords-2] = lMessageLength<<3;lWordArray[lNumberOfWords-1] = lMessageLength>>>29;return lWordArray;};
function WordToHex(lValue) {var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;for (lCount = 0;lCount<=3;lCount++) {lByte = (lValue>>>(lCount*8)) & 255;WordToHexValue_temp = "0" + lByte.toString(16);WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);}
return WordToHexValue;};
function Utf8Encode(string) {string = string.replace(/\r\n/g,"\n");var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {utftext += String.fromCharCode(c);}
else if((c > 127) && (c < 2048)) {utftext += String.fromCharCode((c >> 6) | 192);utftext += String.fromCharCode((c & 63) | 128);}
else {utftext += String.fromCharCode((c >> 12) | 224);utftext += String.fromCharCode(((c >> 6) & 63) | 128);utftext += String.fromCharCode((c & 63) | 128);}
}
return utftext;};
var x=Array();var k,AA,BB,CC,DD,a,b,c,d;var S11=7, S12=12, S13=17, S14=22;var S21=5, S22=9 , S23=14, S24=20;var S31=4, S32=11, S33=16, S34=23;var S41=6, S42=10, S43=15, S44=21;
string = Utf8Encode(string);
x = ConvertToWordArray(string);
a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
for (k=0;k<x.length;k+=16) {AA=a; BB=b; CC=c; DD=d;a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);c=FF(c,d,a,b,x[k+2], S13,0x242070DB);b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);c=FF(c,d,a,b,x[k+6], S13,0xA8304613);b=FF(b,c,d,a,x[k+7], S14,0xFD469501);a=FF(a,b,c,d,x[k+8], S11,0x698098D8);d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);a=FF(a,b,c,d,x[k+12],S11,0x6B901122);d=FF(d,a,b,c,x[k+13],S12,0xFD987193);c=FF(c,d,a,b,x[k+14],S13,0xA679438E);b=FF(b,c,d,a,x[k+15],S14,0x49B40821);a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);d=GG(d,a,b,c,x[k+6], S22,0xC040B340);c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);d=GG(d,a,b,c,x[k+10],S22,0x2441453);c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);d=HH(d,a,b,c,x[k+8], S32,0x8771F681);c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);b=HH(b,c,d,a,x[k+6], S34,0x4881D05);a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);a=II(a,b,c,d,x[k+0], S41,0xF4292244);d=II(d,a,b,c,x[k+7], S42,0x432AFF97);c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);b=II(b,c,d,a,x[k+5], S44,0xFC93A039);a=II(a,b,c,d,x[k+12],S41,0x655B59C3);d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);b=II(b,c,d,a,x[k+1], S44,0x85845DD1);a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);c=II(c,d,a,b,x[k+6], S43,0xA3014314);b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);a=II(a,b,c,d,x[k+4], S41,0xF7537E82);d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);b=II(b,c,d,a,x[k+9], S44,0xEB86D391);a=AddUnsigned(a,AA);b=AddUnsigned(b,BB);c=AddUnsigned(c,CC);d=AddUnsigned(d,DD);}
var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
return temp.toLowerCase();}
function ESCAPE_TO_HTML(str) {if (str === undefined || str === null) return '';return (str+'').replace(/([\"\&\<\>\'])/g, ESCAPE_TO_HTML.rep);}
ESCAPE_TO_HTML.map = {'"':'&quot;', '&':'&amp;', '<':'&lt;', '>':'&gt;', '\'':'&#39;'}
ESCAPE_TO_HTML.rep = function(a,b) { return ESCAPE_TO_HTML.map[b]||b; }
function waitForObject(objectStr, cbFunction, cbArgument) {var objectExists = false;try	{eval('('+objectStr+')');objectExists = true;} catch (e) {

}
if (objectExists) {cbFunction(cbArgument);} else {setTimeout( function() { waitForObject(objectStr, cbFunction, cbArgument); }, 50);}
}
function $(element) {if (arguments.length > 1) {for (var i = 0, elements = [], length = arguments.length; i < length; i++)
elements.push($(arguments[i]));return elements;}
element = document.getElementById(element);return element;}
var getQueryAndParams = function(params){
var query = document.location.search;if (!query){query = '';query = query.substring(1);}
query = query.substring(1);if (!isEmpty(params)) {if (params.indexOf('?')!== -1)
params = params.substring(1);var qMap = new ParamMap();qMap.init(query);var pMap = new ParamMap();pMap.init(params);
query = pMap.merge(qMap).toParamString('=','&');}
return query;}
var filterParams = function(params,filter)
{var paramsArray = params.split('&');for (var i = 0; i < paramsArray.length; i++)
{var pair = paramsArray[i].split('=');if (decodeURIComponent(pair[0]) == filter)
{
paramsArray.splice(i,1);
i--;}
}
var filteredParams = paramsArray.join("&");return filteredParams;}
function isEmpty(s) {return (!s || (s == null) || (s.length == 0))
}
var compareNodeID = function (source,target) {var compSource,compTarget;if (source.indexOf('navurl://')===-1)
{compSource = "navurl://"+MD5(source);}
else
compSource = source;if (target.indexOf('navurl://')===-1)
{compTarget = "navurl://"+MD5(target);}
else
compTarget = target;
if (compSource === compTarget)
return true;if (escape(compSource) === compTarget)
return true;if (escape(compTarget) === compSource)
return true;return false;}
function findItemInArray(arr, val) {for (var i = 0; i < arr.length; i++)
if (arr[i] == val)
return i;
return -1;}
function findAbsolutePosition(elm) {if (elm.getBoundingClientRect){var bound=elm.getBoundingClientRect();return {"x":bound.left+document.body.scrollLeft, "y":bound.top+document.body.scrollTop};}
else {var offsetTrail = elm;var offsetX = 0;var offsetY = 0;while (offsetTrail){offsetX += offsetTrail.offsetLeft - (offsetTrail.parentNode? offsetTrail.parentNode.scrollLeft: 0);offsetY += offsetTrail.offsetTop;offsetTrail = offsetTrail.offsetParent;}
if (navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != 'undefined'){offsetX += document.body.leftMargin;offsetY += document.body.topMargin;}
return {"x":offsetX,"y":offsetY};}
}
function messageFormat(message, parameters)
{if (!message) return "";if (!parameters) return message;
var i;var result = message;for (i = 0; i < parameters.length; i++)
{var regex = new RegExp("[{]" + i + "[}]", "g");result = result.replace(regex, parameters[i]);}
return result;}
function getAbsolutePosition(element)
{var r = { x: element.offsetLeft, y: element.offsetTop };if (element.offsetParent)
{var tmp = getAbsolutePosition(element.offsetParent);r.x += tmp.x;r.y += tmp.y;}
return r;}
function mouseCoords(ev){if(ev.pageX || ev.pageY){return {x:ev.pageX, y:ev.pageY};}
return {x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,y:ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
var BrowserDetection=function(){var agt = navigator.userAgent.toLowerCase();var applewebkit = is_ie = (agt.indexOf("applewebkit") != -1);var is_ie = (agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1);var is_gecko = agt.indexOf("gecko") != -1;var is_safari_mac = applewebkit && (agt.indexOf("mac") != -1);var is_firefox = agt.indexOf("firefox") != -1;var is_firefox_linux = is_firefox && (agt.indexOf("linux") != -1);return {"is_ie":is_ie, "is_gecko":is_gecko ,"applewebkit":applewebkit, "is_safari_mac":is_safari_mac, "is_firefox":is_firefox, "is_firefox_linux":is_firefox_linux};}();
function walkTheDOM(elm, fnc){fnc(elm);elm = elm.firstChild;while(elm){walkTheDOM(elm,fnc);elm = elm.nextSibling;}
}
function setElementText(element, text)
{if(!element)
return;if(BrowserDetection.is_ie)
element.innerText = text;else
element.textContent = text;}
function clearAllEventsFromElement(startElm){walkTheDOM(
startElm,function(elm){
if (elm.onclick)
elm.onclick = null;if (elm.onmouseout)
elm.onmouseout = null;if (elm.onmouseover)
elm.onmouseover = null;if (elm.onmousedown)
elm.onmousedown = null;if (elm.onmouseup)
elm.onmouseup = null;if (elm.onkeydown)
elm.onkeydown = null;if (elm.onfocus)
elm.onfocus = null;if (elm.onblur)
elm.onblur = null;}
)
};
StringBuilder = function(stringToAdd)
{var h = new Array();if(stringToAdd)
h[0] = stringToAdd;this.Append = Append;this.AppendLine = AppendLine;this.ToString = ToString;this.Clear = Clear;this.Length = Length;this.GetType = GetType;
function Append(stringToAppend)
{h[h.length] = stringToAppend;}
function AppendLine(stringToAppend)
{h[h.length] = stringToAppend;h[h.length] = "\r\n";}
function ToString()
{if(!h)
return "";
if(h.length<2)
return (h[0])?h[0]:"";
var a = h.join('');h = new Array();h[0] = a;return a;}
function Clear()
{h = new Array();}
function Length()
{if(!h)
return 0;
if(h.length<2)
return (h[0])?h[0].length:0;
var a = h.join('');h = new Array();h[0] = a;return a.length;}
function GetType()
{return "StringBuilder";}
};var ParamMap = function(){
var _map = new Array();var _mapSize = 0;
var init = function(paramStr){_map = new Array();_mapSize = 0;if (!isEmpty(paramStr)){if (paramStr.indexOf('?')==0)
paramStr=paramStr.substr(1);tempStrArr = paramStr.split('&');
if (tempStrArr!=null){
for (i in tempStrArr){binding = tempStrArr[i].split('=');putValue(binding[0],binding[1]);}
}
}
}
var putValue = function(key,value){if (!containsKey(key) && key!=""){_mapSize++;_map[key]=value;}
}
var containsKey = function(key){return ( typeof(_map[key]) != 'undefined');}
var getValue = function(key){return _map[key];}
var remove = function(key){if (containsKey(key)){_mapSize--;delete _map[key];}
}
var getMap = function(){return _map;}
var getSize = function(){return _mapSize;}
var clone = function(){var ret = new ParamMap();for (i in _map)
ret.putValue(i,getValue(i));return ret;}
var toParamString = function(keyValSeperator,paramSeperator){var retVal = [];if (!keyValSeperator)
keyValSeperator = '=';if (!paramSeperator)
paramSeperator = '&';for (i in _map)
retVal.push(i,keyValSeperator,_map[i],paramSeperator);retVal = retVal.join("");
return retVal.substr(0,retVal.length - paramSeperator.length);}
var merge = function(other){
var ret = this.clone();
otherMap = other.getMap();for (i in otherMap){if (!ret.containsKey(i))
ret.putValue(i,other.getValue(i));}
return ret;}
var equals = function(other){var equal = true;equal = (this.getSize() == other.getSize());if (!equal)
for (i in _map){if (!other.containsKey(i)){equal =false;continue;}
}
if (!equal){var otherMap = other.getMap();for (i in otherMap){if (!containsKey(i)){equal =false;continue;}
}
}
return equal;}
return {init :init,getValue :getValue,putValue :putValue,containsKey :containsKey,remove :remove,getMap :getMap,getSize :getSize,clone :clone,toParamString :toParamString,merge :merge,equals :equals
}
};
