window.onerror = errorInWindow;

var isExceptionBrowserMessage = true;
var exceptionCallBackMethod = null;
var exceptionAdditionalInfo = '';

var lastErrors = new Array();

function setExceptionRules (browserMessage, callBackMethod, additionalInfo)
{
  isExceptionBrowserMessage = browserMessage;
  exceptionCallBackMethod = callBackMethod;
  exceptionAdditionalInfo = additionalInfo;
}

function errorInWindow (mess, url, nstr)
{
  if (window.javaScriptErrorsHandling && !javaScriptErrorsHandling.logErrors)
  {
    return javaScriptErrorsHandling.hideErrorMessages;
  }
  
  if (!window.javaScriptErrorsHandling || !javaScriptErrorsHandling.errorHandlerUrl)
  {
    if (!window.javaScriptErrorsHandling || javaScriptErrorsHandling.hideErrorMessages == null)
    {
      return (isExceptionBrowserMessage) ? false : true;
    }
    else
    {
      return (isExceptionBrowserMessage) ? javaScriptErrorsHandling.hideErrorMessages : true;
    }
  }
  
  if (mess && mess.toLowerCase().indexOf('error loading script') != -1)
  {
    return (isExceptionBrowserMessage) ? javaScriptErrorsHandling.hideErrorMessages : true;
  }
  
  var i;
  var isUniqueError = true;
  var message = mess + ' in file: ' + url + ' line: ' + nstr;
  var str = '';
  var request = BonaPage.createRequest();
  
  if (request)
  {
    request.open('POST', javaScriptErrorsHandling.errorHandlerUrl, true);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    
    str += 'exceptionMessage=' + encodeURIComponent(message).replace(/\%20/g, '+');
    str += '&clientAdditionalInfo=' + encodeURIComponent(exceptionAdditionalInfo).replace(/\%20/g, '+');
    str += '&clientSystemInfo=' + encodeURIComponent(((window.navigator && window.navigator.userAgent) ? navigator.userAgent : 'Unknown browser')).replace(/\%20/g, '+');
    
    for (i = 0; i < lastErrors.length; i++)
    {
      if (lastErrors[i] == str)
      {
        isUniqueError = false;
      }
    }
    
    if (isUniqueError)
    {
      lastErrors.unshift(str);
      
      if (lastErrors.length > 10)
      {
        lastErrors.pop();
      }
      
      request.send(str);
    }
  }
  
  if (exceptionCallBackMethod && typeof(exceptionCallBackMethod) == 'function')
  {
    setTimeout(exceptionCallBackMethod, 1);
  }
  
  if (javaScriptErrorsHandling.hideErrorMessages == null)
  {
    return (isExceptionBrowserMessage) ? false : true;
  }
  else
  {
    return (isExceptionBrowserMessage) ? javaScriptErrorsHandling.hideErrorMessages : true;
  }
}


(function()
{
  var winLocationHref = window.location.href;
  var winLocationDomain = winLocationHref.replace(/^(https?\:\/\/[^\/\:]+)(\/|\:)?.*$/i, '$1');
  
  $getTopWindow = function ()
  {
    try
    {
      if (top && top.document && top.location.href.replace(/^(https?\:\/\/[^\/\:]+)(\/|\:)?.*$/i, '$1') == winLocationDomain.toLowerCase())
      {
        return top;
      }
      else
      {
        return getwp(window);
      }
    }
    catch (err)
    {
      return getwp(window);
    }
    
    function getwp (w)
    {
      try
      {
        if (w.parent && w.location.href != w.parent.location.href)
        {
          if (w.parent.location.href.toLowerCase().replace(/^(https?\:\/\/[^\/\:]+)(\/|\:)?.*$/i, '$1') == winLocationDomain.toLowerCase())
          {
            return getwp(w.parent);
          }
          else
          {
            return w;
          }
        }
        else
        {
          return w;
        }
      }
      catch (err)
      {
        return w;
      }
    }
  }
  
  var topWin = $getTopWindow();
  var $getContentWindow = function () { return (topWin.contentarea) ? topWin.contentarea : topWin; };
  var contentWin = topWin;
  var $initContentWindow = function () { contentWin = $getContentWindow(); if (!contentWin.BonaPage || !contentWin.BonaPage.isObjValid) { contentWin = topWin; setTimeout($initContentWindow, 37); } };
  var addInitContentWindow = function () { if (!topWin.BonaPage || !topWin.BonaPage.isObjValid) { setTimeout(addInitContentWindow, 37); return; } topWin.BonaPage.addPageStateHandler(topWin.BonaPage.PAGE_PARSED, $initContentWindow) };
  addInitContentWindow();
  
  var isIE = (document.all && window.clientInformation) ? parseInt(window.clientInformation.userAgent.substr(window.clientInformation.userAgent.indexOf('MSIE ') + 5, 3)) : 0;
  var uAgent = navigator.userAgent;
  var isMSIE = (navigator.appName == "Microsoft Internet Explorer");
  var isMSIE5 = isMSIE && (uAgent.indexOf('MSIE 5') != -1);
  var isMSIE5_0 = isMSIE && (uAgent.indexOf('MSIE 5.0') != -1);
  var isMSIE7 = isMSIE && (uAgent.indexOf('MSIE 7') != -1);
  var isMSIE8 = isMSIE && (uAgent.indexOf('MSIE 8') != -1);
  var isMSIE9 = isMSIE && (uAgent.indexOf('MSIE 9') != -1);
  var isSafari = uAgent.indexOf('Safari') != -1;
  var isOpera = uAgent.indexOf('Opera') != -1;
  var isGecko = uAgent.indexOf('Gecko') != -1 && !isSafari && !isOpera;
  var isWebKit = (uAgent.indexOf('WebKit') != -1 && window.devicePixelRatio) ? true : false;
  var matchWebKitVer = (isWebKit) ? uAgent.match(/[\s\S]*?(?:Version|Chrome)\/(\d+)\.?(\d*)\.?(\d*)[\s\S]*/i) : null;
  var webKitVer = (matchWebKitVer && matchWebKitVer[1]) ? matchWebKitVer[1] : 5;
  var webKitVer1 = (matchWebKitVer && matchWebKitVer[2]) ? matchWebKitVer[2] : 0;
  var webKitVer2 = (matchWebKitVer && matchWebKitVer[3]) ? matchWebKitVer[3] : 0;
  //var webKitVer = (isWebKit) ? uAgent.replace(/[\s\S]*?(?:Version|Chrome)\/(\d+)[\s\S]*/i, '$1') : null;
  //var webKitVer1 = (isWebKit) ? uAgent.replace(/[\s\S]*?(?:Version|Chrome)\/\d+\.(\d*)[\s\S]*/i, '$1') : null;
  //var webKitVer2 = (isWebKit) ? uAgent.replace(/[\s\S]*?(?:Version|Chrome)\/\d+\.\d+\.(\d*)[\s\S]*/i, '$1') : null;
  isWebKit = (isWebKit && ((uAgent.indexOf('Version/') != -1 && (webKitVer == 4 && ((webKitVer1 == 0 && webKitVer2 >= 4) || webKitVer1 > 0)) || webKitVer > 4) || (uAgent.indexOf('Chrome/') != -1 && webKitVer >= 3))) ? true : false;
  var isMac = uAgent.indexOf('Mac') != -1;
  var isNS7 = uAgent.indexOf('Netscape/7') != -1;
  var isNS71 = uAgent.indexOf('Netscape/7.1') != -1;
  var isWidgetMode = (winLocationHref.indexOf('/widget/') != -1) ? true : false;
  
  var $ = function (id) { return document.getElementById(id); };
  var $$ = function (t, o) { var i, j, ec, mc, r = new Array(); if (t) var m = t.split('.'); else var m = ['*']; o = (o) ? ((typeof(o) == 'string') ? $(o) : o) : document; var el = o.getElementsByTagName(((m[0]) ? m[0] : '*')); if (m.length == 1) { for (i = 0; i < el.length; i++) r.push(el[i]); return r; } for (i = 0; i < el.length; i++) { ec = el[i].className; for (j = 1; j < m.length; j++) { mc = m[j]; if (ec.indexOf(mc) == -1) break; else if (!((m.length == 2 && ec.indexOf(' ') == -1 && ec == mc) || (new RegExp('(?:^|\\s+)' + mc + '(?:\\s+|$)')).test(ec))) break; } if (j == m.length) r.push(el[i]); } return r; };
  var $bonaObject = function (o, w) { return new BonaObject(o, w); };
  var $addHandler = function (o, e, h) { if (isIE) o.attachEvent('on' + e, h); else o.addEventListener(e, h, false); };
  var $removeHandler = function (o, e, h) { if (isIE) o.detachEvent('on' + e, h); else o.removeEventListener(e, h, false); };
  var $stopEvent = function (e) { if (!e && event) e = event; if (!e) return false; if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; if (e.preventDefault) e.preventDefault(); else e.returnValue = false; return false;};
  var $stopEnter = function (e) { if (!e && event) e = event; if (!e) return; var key = (isIE) ? e.keyCode : e.which; if (key == 13) $stopEvent(e); };
  var $getInnerWidth = function (w, wos) { if(!w) w = window; var d = w.document; return ((isIE) ? ((d.documentElement.clientWidth) ? d.documentElement.clientWidth : d.body.clientWidth) : ((wos) ? w.innerWidth : (($getScrollHeight() > w.innerHeight || $getElementStyle($$('HTML')[0], 'overflowY') == 'scroll') ? w.innerWidth - BonaPage.getScrollBarWidth() : w.innerWidth))) };
  var $getInnerHeight = function (w) { if(!w) w = window; var d = w.document; return ((isIE) ? ((d.documentElement.clientHeight) ? d.documentElement.clientHeight : d.body.clientHeight) : (($getScrollWidth() > w.innerWidth) ? w.innerHeight - BonaPage.getScrollBarWidth() : w.innerHeight)) };
  var $getScrollLeft = function () { return ((typeof(window.pageXOffset) == 'number') ? window.pageXOffset : ((document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : ((document.body && document.body.scrollLeft) ? document.body.scrollLeft : 0))) };
  var $getScrollTop = function () { return ((typeof(window.pageYOffset) == 'number') ? window.pageYOffset : ((document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : ((document.body && document.body.scrollTop) ? document.body.scrollTop : 0))) };
  var $setScrollTop = function (n) { try { if (typeof(window.pageYOffset) == 'number') window.pageYOffset = n; else if (document.documentElement && document.documentElement.scrollTop) document.documentElement.scrollTop = n; else if (document.body && document.body.scrollTop) document.body.scrollTop = n; } catch(err) {} };
  var $getScrollWidth = function () { return document.body.scrollWidth; }
  var $getScrollHeight = function () { return document.body.scrollHeight; }
  var $getFirstChildByTagName = function (o, t) { var c = o.firstChild; while (c && c.nodeName.toUpperCase() != t.toUpperCase()) c = c.nextSibling; return (c && c.nodeName.toUpperCase() == t.toUpperCase()) ? c : null; }
  var $getNextSiblingByTagName = function (o, t) { var re = (t) ? ('|' + (t.split(/\,/).join('|')) + '|').toUpperCase() : ''; var c = o.nextSibling; while (c && re.indexOf('|' + c.nodeName.toUpperCase() + '|') == -1 && (re || c.nodeType != 1)) c = c.nextSibling; return (c && (re.indexOf('|' + c.nodeName.toUpperCase() + '|') != -1 || (!re && c.nodeType == 1))) ? c : null; }
  var $getPreviousSiblingByTagName = function (o, t) { var re = (t) ? ('|' + (t.split(/\,/).join('|')) + '|').toUpperCase() : ''; var c = o.previousSibling; while (c && re.indexOf('|' + c.nodeName.toUpperCase() + '|') == -1 && (re || c.nodeType != 1)) c = c.previousSibling; return (c && (re.indexOf('|' + c.nodeName.toUpperCase() + '|') != -1 || (!re && c.nodeType == 1))) ? c : null; }
  var $getElementXY = function (o) { var p; x = 0; y = 0; if (o.offsetParent) { p = o; while (p.offsetParent) { p = p.offsetParent; x += p.offsetLeft; y += p.offsetTop; } } x += o.offsetLeft; y += o.offsetTop; o.X = x; o.Y = y; return {X : x, Y : y}; }
  var $getElementStyle = function (obj, att) { return ((isIE) ? obj.currentStyle[att] : getComputedStyle(obj, null)[att]); };
  var $getElementStyleInt = function (obj, att) { return parseInt($getElementStyle(obj, att)); };
  var $converColorToHex = function (c) { var m = c.match(/^\s*\#?([ABCDEF0-9]{3}|[ABCDEF0-9]{6})\s*$/i); if (m && m.length == 2) return m[1].toUpperCase(); else if (name2HexColorsList[c]) return name2HexColorsList[c]; else if (c.toString().toLowerCase().indexOf('rgb') != -1) { m = c.match(/(\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})/); if (m && m.length == 4) return ((((parseInt(m[1]).toString(16).length == 1) ? '0' : '') + parseInt(m[1]).toString(16).toUpperCase()) + (((parseInt(m[2]).toString(16).length == 1) ? '0' : '') + parseInt(m[2]).toString(16).toUpperCase()) + (((parseInt(m[3]).toString(16).length == 1) ? '0' : '') + parseInt(m[3]).toString(16).toUpperCase())); } else return null; }
  var $setElementOpacity = function (obj, op) { if (isIE) { obj.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + op + ')'; } else { obj.style.MozOpacity = op / 100; obj.style.KhtmlOpacity = op / 100; obj.style.opacity = op / 100; } };
  var $getHashFromArray = function (arr) { var i, obj = new Object(); for (i = 0; i < arr.length; i++) obj[arr[i]] = true; return obj; };
  var $getHashFromArrayObjects = function (arr, key) { var i, obj = new Object(); for (i = 0; i < arr.length; i++) obj[arr[i][key]] = arr[i]; return obj; };
  var $reloadCurrentPage = function() { window.location.replace(window.location.toString().replace(/#.*$/mg, "")); };
  var $loadPage = function(url) { window.location.replace(url); };
  var $getUniqueIdentifier = function() { return Math.random() * (new Date()).getTime() * 10000; };
  var $preventPressEnter = function (e) { if (!e && window.event) e = window.event; if (e) { var key = (isIE) ? e.keyCode : e.which; if (key == 13) { if (isIE) { e.cancelBubble = true; e.returnValue = false; } else { e.stopPropagation(); e.preventDefault(); } return false; }}}
  var $getUrlFragment = function (w) { var wnd = w || window; if (!wnd.location) return ''; var match = (/#([^#]+)$/gi).exec(wnd.location.toString()); return match ? match[1] : '' };
  var $setUrlFragment = function (value, w) { var wnd = w || window; if (!wnd.location) return ''; var match = (/#([^#]*)$/gi).exec(wnd.location.toString()); var activeUrl = wnd.location.toString(); var newUrl = match ? activeUrl.replace(/#([^#]+)$/gi, "#" + value) : activeUrl + "#" + value; wnd.location.replace(newUrl) };
  var $encodeUriEx = function (value) { if (!value) return ''; return encodeURIComponent(value).replace(/(?:\!|\*|\(|\)|\')/g, function (char) { return '%' + char.charCodeAt(0).toString(16); }) };
  var $clientRedirect = function (url) { window.location = url; }
  var $highLightElement = function(elem)	{ elem.className += ' hover'; }
  var $grayOutElement = function(elem)	{ elem.className = elem.className.replace(' hover', ''); }
  
  var domainList = 'aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zr|zw';
  var name2HexColorsList = {aliceblue:'F0F8FF',antiquewhite:'FAEBD7',aqua:'00FFFF',aquamarine:'7FFFD4',azure:'F0FFFF',beige:'F5F5DC',bisque:'FFE4C4',black:'000000',blanchedalmond:'FFEBCD',blue:'0000FF',blueviolet:'8A2BE2',brown:'A52A2A',burlywood:'DEB887',cadetblue:'5F9EA0',chartreuse:'7FFF00',chocolate:'D2691E',coral:'FF7F50',cornflowerblue:'6495ED',cornsilk:'FFF8DC',crimson:'DC143C',cyan:'00FFFF',darkblue:'00008B',darkcyan:'008B8B',darkgoldenrod:'B8860B',darkgray:'A9A9A9',darkgreen:'006400',darkkhaki:'BDB76B',darkmagenta:'8B008B',darkolivegreen:'556B2F',darkorange:'FF8C00',darkorchid:'9932CC',darkred:'8B0000',darksalmon:'E9967A',darkseagreen:'8FBC8B',darkslateblue:'483D8B',darkslategray:'2F4F4F',darkturquoise:'00CED1',darkviolet:'9400D3',deeppink:'FF1493',deepskyblue:'00BFFF',dimgray:'696969',dodgerblue:'1E90FF',firebrick:'B22222',floralwhite:'FFFAF0',forestgreen:'228B22',fuchsia:'FF00FF',gainsboro:'DCDCDC',ghostwhite:'F8F8FF',gold:'FFD700',goldenrod:'DAA520',gray:'808080',green:'008000',greenyellow:'ADFF2F',honeydew:'F0FFF0',hotpink:'FF69B4',indianred:'CD5C5C',indigo:'4B0082',ivory:'FFFFF0',khaki:'F0E68C',lavender:'E6E6FA',lavenderblush:'FFF0F5',lawngreen:'7CFC00',lemonchiffon:'FFFACD',lightblue:'ADD8E6',lightcoral:'F08080',lightcyan:'E0FFFF',lightgoldenrodyellow:'FAFAD2',lightgreen:'90EE90',lightgrey:'D3D3D3',lightpink:'FFB6C1',lightsalmon:'FFA07A',lightseagreen:'20B2AA',lightskyblue:'87CEFA',lightslategray:'778899',lightsteelblue:'B0C4DE',lightyellow:'FFFFE0',lime:'00FF00',limegreen:'32CD32',linen:'FAF0E6',magenta:'FF00FF',maroon:'800000',mediumaquamarine:'66CDAA',mediumblue:'0000CD',mediumorchid:'BA55D3',mediumpurple:'9370DB',mediumseagreen:'3CB371',mediumslateblue:'7B68EE',mediumspringgreen:'00FA9A',mediumturquoise:'48D1CC',mediumvioletred:'C71585',midnightblue:'191970',mintcream:'F5FFFA',mistyrose:'FFE4E1',moccasin:'FFE4B5',navajowhite:'FFDEAD',navy:'000080',oldlace:'FDF5E6',olive:'808000',olivedrab:'6B8E23',orange:'FFA500',orangered:'FF4500',orchid:'DA70D6',palegoldenrod:'EEE8AA',palegreen:'98FB98',paleturquoise:'AFEEEE',palevioletred:'DB7093',papayawhip:'FFEFD5',peachpuff:'FFDAB9',peru:'CD853F',pink:'FFC0CB',plum:'DDA0DD',powderblue:'B0E0E6',purple:'800080',red:'FF0000',rosybrown:'BC8F8F',royalblue:'4169E1',saddlebrown:'8B4513',salmon:'FA8072',sandybrown:'F4A460',seagreen:'2E8B57',seashell:'FFF5EE',sienna:'A0522D',silver:'C0C0C0',skyblue:'87CEEB',slateblue:'6A5ACD',slategray:'708090',snow:'FFFAFA',springgreen:'00FF7F',steelblue:'4682B4',tan:'D2B48C',teal:'008080',thistle:'D8BFD8',tomato:'FF6347',turquoise:'40E0D0',violet:'EE82EE',wheat:'F5DEB3',white:'FFFFFF',whitesmoke:'F5F5F5',yellow:'FFFF00',yellowgreen:'9ACD32'};
  
  var loadingTimeout = false;
  
  if(!window.BonaPage)
  {
    BonaPage = new Object();
    BonaPage.isObjValid = false;
    
    BonaPage.PAGE_LOADING = 10;
    BonaPage.PAGE_LOADED = 20;
    BonaPage.PAGE_LOADEDORTIMEOUT = 100;
    BonaPage.PAGE_PARSING = 30;
    BonaPage.PAGE_PARSED = 40;
    BonaPage.PAGE_UNLOADING = 50;
    BonaPage.PAGE_UNLOADED = 60;
    BonaPage.UPDATEPANEL_UNDEFINED = 70;
    BonaPage.UPDATEPANEL_LOADING = 80;
    BonaPage.UPDATEPANEL_LOADED = 90;
    
    BonaPage.HANDLERTYPE_ONCE = 10;
    BonaPage.HANDLERTYPE_ALWAYS = 20;
    
    BonaPage.setPageState = setPageState;
    BonaPage.addPageStateHandler = addPageStateHandler;
    BonaPage.runPageStateHandlers = runPageStateHandlers;
    
    BonaPage.getLocationHref = function () { return winLocationHref; };
    BonaPage.getLocationDomain = function () { return winLocationDomain; };
    
    BonaPage.$ = $;
    BonaPage.$$ = $$;
    BonaPage.$bonaObject = $bonaObject;
    BonaPage.topWindow = topWin;
    BonaPage.getTopWindow = $getTopWindow;
    BonaPage.contentWindow = contentWin;
    BonaPage.getContentWindow = $getContentWindow;
    BonaPage.reloadCurrentPage = $reloadCurrentPage;
    BonaPage.loadPage = $loadPage;
    BonaPage.getUniqueIdentifier = $getUniqueIdentifier;
    BonaPage.addHandler = $addHandler;
    BonaPage.removeHandler = $removeHandler;
    BonaPage.stopEvent = $stopEvent;
    BonaPage.stopEnter = $stopEnter;
    BonaPage.getInnerWidth = $getInnerWidth;
    BonaPage.getInnerHeight = $getInnerHeight;
    BonaPage.getScrollLeft = $getScrollLeft;
    BonaPage.getScrollTop = $getScrollTop;
    BonaPage.setScrollTop = $setScrollTop;
    BonaPage.getScrollWidth = $getScrollWidth;
    BonaPage.getScrollHeight = $getScrollHeight;
    BonaPage.getFirstChildByTagName = $getFirstChildByTagName;
    BonaPage.getNextSiblingByTagName = $getNextSiblingByTagName;
    BonaPage.getElementXY = $getElementXY;
    BonaPage.getElementStyle = $getElementStyle;
    BonaPage.getElementStyleInt = $getElementStyleInt;
    BonaPage.converColorToHex = $converColorToHex;
    BonaPage.setElementOpacity = $setElementOpacity;
    BonaPage.preventPressEnter = $preventPressEnter;
    BonaPage.getUrlFragment = $getUrlFragment;
    BonaPage.setUrlFragment = $setUrlFragment;
    
    BonaPage.getScrollBarWidth = getScrollBarWidth;
    BonaPage.updateValidators = updateValidators;
    BonaPage.isValidatorValid = isValidatorValid;
    BonaPage.encodeHtml = encodeHtml;
    BonaPage.decodeHtml = decodeHtml;
    BonaPage.encodeUriEx = $encodeUriEx;
    BonaPage.formatString = formatString;
    BonaPage.formatStringNamed = formatStringNamed;
    BonaPage.createRequest = createRequest;
    BonaPage.webRequest = webRequest;
    BonaPage.goToTopWindow = goToTopWindow;
    BonaPage.clientRedirect = $clientRedirect;
    
    BonaPage.showPageShadingContainer = showPageShadingContainer;
    BonaPage.hidePageShadingContainer = hidePageShadingContainer;
    
    BonaPage.getDomainList = function () { return domainList; };
    
    BonaPage.Objects = 
    {
      clone: $cloneObject,
      extend: $extendObject
    }
    
    BonaPage.Utils = new Object();
    BonaPage.Utils.wordWrap = wordWrap;
    BonaPage.Utils.getXY = getXY;
    BonaPage.Utils.getAbsoluteXY = getAbsoluteXY;
    BonaPage.Utils.getHashFromArray = $getHashFromArray;
    BonaPage.Utils.getHashFromArrayObjects = $getHashFromArrayObjects;
    BonaPage.Utils.dynamicMenuDisable = dynamicMenuDisable;
    BonaPage.Utils.fixPNG = fixPNG;
    BonaPage.Utils.fixGeckoTables = fixGeckoTables;
    BonaPage.Utils.getAttrEx = getAttrEx;
    BonaPage.Utils.highLightElement = $highLightElement;
    BonaPage.Utils.grayOutElement = $grayOutElement;
    setPageState(BonaPage.PAGE_LOADING);
  }
  
  function initBonaPage ()
  {
    BonaPage.statRes = bonaPage_StatRes;
    BonaPage.themesPath = bonaPage_ThemesPath + 'App_Themes/';
    BonaPage.themesSharedPath = bonaPage_ThemesPath + 'App_Themes/Shared/';
    BonaPage.themesSharedImgPath = bonaPage_ThemesPath + 'App_Themes/Shared/images/';
    BonaPage.themesHdrImgPath = bonaPage_ThemesPath + 'App_Themes/HeaderBackgroundImages/';
    
    BonaPage.adminPath = bonaPage_StatRes + 'Admin/';
    BonaPage.adminResPath = bonaPage_StatRes + 'Admin/html_res/';
    BonaPage.adminResImgPath = bonaPage_StatRes + 'Admin/html_res/images/';
    
    if (document.getElementById('idBonaPageScript'))
    {
      BonaPage.version = document.getElementById('idBonaPageScript').src.replace(/^.*?\?([\d.]+)(?:[^\d.]+$|$)/, "$1");
      BonaPage.fullVersion = (window.bonaPage_ThemeId != null) ? (BonaPage.version + "." + window.bonaPage_ThemeVer) : BonaPage.version;
    }
    
    BonaPage.themeVersion = (window.bonaPage_ThemeVer != null) ? window.bonaPage_ThemeVer : '';
    
    BonaPage.Browser = new Object();
    BonaPage.Browser.isIE = isIE;
    BonaPage.Browser.isMSIE = isMSIE;
    BonaPage.Browser.isMSIE5 = isMSIE5;
    BonaPage.Browser.isMSIE5_0 = isMSIE5_0;
    BonaPage.Browser.isMSIE7 = isMSIE7;
    BonaPage.Browser.isMSIE8 = isMSIE8;
    BonaPage.Browser.isMSIE9 = isMSIE9;
    BonaPage.Browser.isGecko = isGecko;
    BonaPage.Browser.isSafari = isSafari;
    BonaPage.Browser.isOpera = isOpera;
    BonaPage.Browser.isWebKit = isWebKit;
    BonaPage.Browser.isMac = isMac;
    BonaPage.Browser.isNS7 = isNS7;
    BonaPage.Browser.isNS71 = isNS71;
    
    BonaPage.State = new Object();
    BonaPage.State.isPageLoading = true;
    BonaPage.State.isPageLoaded = false;
    BonaPage.State.isPageLoadedOrTimeout = false;
    BonaPage.State.isPageParsing = true;
    BonaPage.State.isPageParsed = false;
    BonaPage.State.isPageUnloading = false;
    BonaPage.State.isPageUnloaded = false;
    BonaPage.State.isPageUnloaded = false;
    BonaPage.State.isUpdatePanelUndefined = true;
    BonaPage.State.isUpdatePanelLoading = false;
    BonaPage.State.isUpdatePanelLoaded = false;
    
    BonaPage.isWidgetMode = isWidgetMode;
    BonaPage.isEmulatedMode = false;
    
    stateHandlers = new Object();
    stateHandlers[BonaPage.PAGE_LOADING] = new Array();
    stateHandlers[BonaPage.PAGE_LOADED] = new Array();
    stateHandlers[BonaPage.PAGE_LOADEDORTIMEOUT] = new Array();
    stateHandlers[BonaPage.PAGE_PARSING] = new Array();
    stateHandlers[BonaPage.PAGE_PARSED] = new Array();
    stateHandlers[BonaPage.PAGE_UNLOADING] = new Array();
    stateHandlers[BonaPage.PAGE_UNLOADED] = new Array();
    stateHandlers[BonaPage.UPDATEPANEL_UNDEFINED] = new Array();
    stateHandlers[BonaPage.UPDATEPANEL_LOADING] = new Array();
    stateHandlers[BonaPage.UPDATEPANEL_LOADED] = new Array();
    
    BonaPage.addHandler(window, 'load', setPageStateLoaded);
    BonaPage.addHandler(window, 'beforeunload', setPageStateUnloading);
    BonaPage.addHandler(window, 'unload', setPageStateUnloaded);
    
    BonaPage.isObjValid = true;
  }
  
  
  function runHacks() // :)
  {
    var elements = ['idPasswordBox', 'idRememberMe', 'idSubmitBox'];
    
    for (var i = 0; i < elements.length; i++)
    {
      var element = BonaPage.$(elements[i]);

      if (element)
      {
        element.style.display = "block";
      }
    }
  }
  
  
  function setPageStateLoaded ()
  {
    if (loadingTimeout)
    {
      clearTimeout(loadingTimeout);
    }
    
    setPageState(BonaPage.PAGE_LOADED);
  }
  
  
  function setPageStateLoadedOrTimeout ()
  {
    setPageState(BonaPage.PAGE_LOADEDORTIMEOUT);
  }
  
  
  function setPageStateUnloading ()
  {
    setPageState(BonaPage.PAGE_UNLOADING);
  }
  
  
  function setPageStateUnloaded ()
  {
    setPageState(BonaPage.PAGE_UNLOADED);
    BonaPage.removeHandler(window, 'load', setPageStateLoaded);
    BonaPage.removeHandler(window, 'beforeunload', setPageStateUnloading);
    BonaPage.removeHandler(window, 'unload', setPageStateUnloaded);
  }
    
  
  function addUpdatePanelHandlers ()
  {
    if (window.Sys && Sys.WebForms && Sys.WebForms.PageRequestManager && typeof(Sys.WebForms.PageRequestManager.getInstance) == 'function')
    {
      var prm = Sys.WebForms.PageRequestManager.getInstance();
      if (prm)
      {
        prm.add_beginRequest(beginRequestHandler);
        prm.add_endRequest(endRequestHandler);
      }
    }
  }
  
  
  function beginRequestHandler (sender, args)
  {
    setPageState(BonaPage.UPDATEPANEL_LOADING);
  }
  
  
  function endRequestHandler (sender, args)
  {
    setPageState(BonaPage.UPDATEPANEL_LOADED);
  }
  
  
  function setPageState (state)
  {
    switch (state)
    {
      case BonaPage.PAGE_LOADING:
        initBonaPage();
        runPageStateHandlers(BonaPage.PAGE_LOADING);
        break;
        
      case BonaPage.PAGE_LOADED:
        BonaPage.State[BonaPage.PAGE_LOADING] = BonaPage.State.isPageLoading = false;
        BonaPage.State[BonaPage.PAGE_LOADED] = BonaPage.State.isPageLoaded = true;
        BonaPage.State[BonaPage.PAGE_PARSING] = BonaPage.State.isPageParsing = false;
        BonaPage.State[BonaPage.PAGE_PARSED] = BonaPage.State.isPageParsed = true;
        BonaPage.State[BonaPage.PAGE_UNLOADING] = BonaPage.State.isPageUnloading = false;
        BonaPage.State[BonaPage.PAGE_UNLOADED] = BonaPage.State.isPageUnloaded = false;
        runPageStateHandlers(BonaPage.PAGE_LOADED);
        break;
        
      case BonaPage.PAGE_LOADEDORTIMEOUT:
        setPageStateLoaded();
        
      case BonaPage.PAGE_PARSING:
        BonaPage.State[BonaPage.PAGE_LOADING] = BonaPage.State.isPageLoading = true;
        BonaPage.State[BonaPage.PAGE_LOADED] = BonaPage.State.isPageLoaded = false;
        BonaPage.State[BonaPage.PAGE_PARSING] = BonaPage.State.isPageParsing = true;
        BonaPage.State[BonaPage.PAGE_PARSED] = BonaPage.State.isPageParsed = false;
        BonaPage.State[BonaPage.PAGE_UNLOADING] = BonaPage.State.isPageUnloading = false;
        BonaPage.State[BonaPage.PAGE_UNLOADED] = BonaPage.State.isPageUnloaded = false;
        runPageStateHandlers(BonaPage.PAGE_PARSING);
        break;
        
      case BonaPage.PAGE_PARSED:
        BonaPage.State[BonaPage.PAGE_LOADING] = BonaPage.State.isPageLoading = true;
        BonaPage.State[BonaPage.PAGE_LOADED] = BonaPage.State.isPageLoaded = false;
        BonaPage.State[BonaPage.PAGE_PARSING] = BonaPage.State.isPageParsing = false;
        BonaPage.State[BonaPage.PAGE_PARSED] = BonaPage.State.isPageParsed = true;
        BonaPage.State[BonaPage.PAGE_UNLOADING] = BonaPage.State.isPageUnloading = false;
        BonaPage.State[BonaPage.PAGE_UNLOADED] = BonaPage.State.isPageUnloaded = false;
        loadingTimeout = setTimeout(setPageStateLoadedOrTimeout, 10000);
        addUpdatePanelHandlers();
        runPageStateHandlers(BonaPage.PAGE_PARSED);
        break;
        
      case BonaPage.PAGE_UNLOADING:
        BonaPage.State[BonaPage.PAGE_LOADING] = BonaPage.State.isPageLoading = false;
        BonaPage.State[BonaPage.PAGE_LOADED] = BonaPage.State.isPageLoaded = true;
        BonaPage.State[BonaPage.PAGE_PARSING] = BonaPage.State.isPageParsing = false;
        BonaPage.State[BonaPage.PAGE_PARSED] = BonaPage.State.isPageParsed = true;
        BonaPage.State[BonaPage.PAGE_UNLOADING] = BonaPage.State.isPageUnloading = true;
        BonaPage.State[BonaPage.PAGE_UNLOADED] = BonaPage.State.isPageUnloaded = false;
        runPageStateHandlers(BonaPage.PAGE_UNLOADING);
        break;
        
      case BonaPage.PAGE_UNLOADED:
        BonaPage.State[BonaPage.PAGE_LOADING] = BonaPage.State.isPageLoading = false;
        BonaPage.State[BonaPage.PAGE_LOADED] = BonaPage.State.isPageLoaded = true;
        BonaPage.State[BonaPage.PAGE_PARSING] = BonaPage.State.isPageParsing = false;
        BonaPage.State[BonaPage.PAGE_PARSED] = BonaPage.State.isPageParsed = true;
        BonaPage.State[BonaPage.PAGE_UNLOADING] = BonaPage.State.isPageUnloading = false;
        BonaPage.State[BonaPage.PAGE_UNLOADED] = BonaPage.State.isPageUnloaded = true;
        BonaPage.State[BonaPage.UPDATEPANEL_UNDEFINED] = BonaPage.State.isUpdatePanelUndefined = true;
        BonaPage.State[BonaPage.UPDATEPANEL_LOADING] = BonaPage.State.isUpdatePanelLoading = false;
        BonaPage.State[BonaPage.UPDATEPANEL_LOADED] = BonaPage.State.isUpdatePanelLoaded = false;
        runPageStateHandlers(BonaPage.PAGE_UNLOADED);
        break;
        
      case BonaPage.UPDATEPANEL_LOADING:
        BonaPage.State[BonaPage.UPDATEPANEL_UNDEFINED] = BonaPage.State.isUpdatePanelUndefined = false;
        BonaPage.State[BonaPage.UPDATEPANEL_LOADING] = BonaPage.State.isUpdatePanelLoading = true;
        BonaPage.State[BonaPage.UPDATEPANEL_LOADED] = BonaPage.State.isUpdatePanelLoaded = false;
        runPageStateHandlers(BonaPage.UPDATEPANEL_LOADING);
        break;
        
      case BonaPage.UPDATEPANEL_LOADED:
        BonaPage.State[BonaPage.UPDATEPANEL_UNDEFINED] = BonaPage.State.isUpdatePanelUndefined = false;
        BonaPage.State[BonaPage.UPDATEPANEL_LOADING] = BonaPage.State.isUpdatePanelLoading = false;
        BonaPage.State[BonaPage.UPDATEPANEL_LOADED] = BonaPage.State.isUpdatePanelLoaded = true;
        runPageStateHandlers(BonaPage.UPDATEPANEL_LOADED);
        break;
    }
  }
  
  
  function addPageStateHandler (state, handler, type, container)
  {
    var i = stateHandlers[state].length;
    type = type || BonaPage.HANDLERTYPE_ONCE;
  
    if (BonaPage.State[state])
    {
      handler();
    }
    
    if (!BonaPage.State[state] || type == BonaPage.HANDLERTYPE_ALWAYS)
    {
      stateHandlers[state][i] = new Object();
      stateHandlers[state][i].type = type;
      stateHandlers[state][i].handler = handler;
    }
  }
  
  
  function runPageStateHandlers (state)
  {
    var i;
    
    for (i = 0; i < stateHandlers[state].length; i++)
    {    
      stateHandlers[state][i].handler();
       
      if (stateHandlers[state][i].type == BonaPage.HANDLERTYPE_ONCE)
      {
        stateHandlers[state].splice(i, 1);
        i--;
      }
    }
  }
  
  
  var httpFactory = null;
  var httpFactories =
  [
    function() { return new XMLHttpRequest(); },
    function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
    function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
  ];

  function createRequest()
  {
    var i;
    var factory, request;
    
    if (httpFactory != null)
    {
      return httpFactory();
    }
    
    for (i = 0; i < httpFactories.length; i++)
    {
      try
      {
        factory = httpFactories[i];
        request = factory();
        
        if (request != null)
        {
          httpFactory = factory;
          return request;
        }
      }
      catch (e)
      {
        continue;
      }
    }
    
    httpFactory = false;
    return null;
  }
  
  
  function wordWrap (containerId, containerOverflow)
  {
    var i;
    var container = $(containerId);
    var ovarflow = (containerOverflow) ? containerOverflow : 'visible';
    var a = container.innerHTML.split('');
    var str = '';
    
    container.style.overflow = 'auto';
    
    if (container.scrollWidth > container.offsetWidth)
    {
      for (i = 0; i < a.length; i++)
      {
        str += a[i];
        container.innerHTML = str;
        
        if (container.scrollWidth > container.offsetWidth)
        {
          str = str.substring(0, str.length - 1);
          str += '<br>';
          container.innerHTML = str;
          i--;
        }
      }
    }
    
    container.style.overflow = ovarflow;
  }
  
  
  BonaPage.dynamicMenuItems = new Object();
  BonaPage.dynamicMenuVariables = new Object();
  
  function dynamicMenuLite ()
  {
    var i, j;
    var mainMenu = $('idMainMenuContainer');
    var spanItem, divs, dynamicMenuContainer, dynamicMenu;
    BonaPage.dynamicMenuSpanItems = new Object();
    BonaPage.dynamicMenuCloseTimeout = false;
    
    for (i in BonaPage.dynamicMenuItems)
    {
      spanItem = $(i);
      
      if (spanItem)
      {
        dynamicMenuContainer = null;
        dynamicMenu = $(BonaPage.dynamicMenuItems[i]);
        divs = spanItem.getElementsByTagName('DIV');
        
        for (j = 0; j < divs.length; j++)
        {
          if (divs[j].className.indexOf('dynamicMenuLevelContainer') != -1)
          {
            dynamicMenuContainer = divs[j];
            break;
          }
        }
        
        if (isIE && isIE == 6)
        {
          spanItem.style.position = 'relative';
        }
      }
      
      if (spanItem && dynamicMenuContainer && dynamicMenu)
      {
        BonaPage.dynamicMenuSpanItems[spanItem.id] = new Object();
        BonaPage.dynamicMenuSpanItems[spanItem.id].dynamicMenuContainer = dynamicMenuContainer;
        BonaPage.dynamicMenuSpanItems[spanItem.id].dynamicMenu = dynamicMenu;
        
        spanItem.onmouseover = function ()
        {
          if (BonaPage.dynamicMenuCloseTimeout)
          {
            clearTimeout(BonaPage.dynamicMenuCloseTimeout);
          }
          
          if (BonaPage.dynamicMenuItems.disabled)
          {
            return true;
          }
          
          if (BonaPage.dynamicMenuSpanItems[this.id].dynamicMenuContainer.style.display != 'block')
          {
            closeDynamicMenuDo();
                      
            if (BonaPage.dynamicMenuSpanItems[this.id])
            {
               
              //top corners
              if ($getElementStyle(BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.previousSibling, 'visibility') == 'visible')
              {
                  if (isIE && isIE == 6)
                  {
                    BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.previousSibling.style.left = '0px';
                    BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.previousSibling.style.top = this.offsetHeight + 'px';
                  }
                  else
                  {
                    BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.previousSibling.style.left = this.offsetLeft + 'px';
                    BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.previousSibling.style.top = (this.offsetTop + this.offsetHeight) + 'px';
                  }
                  
                  BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.previousSibling.style.zIndex = '304';
                  BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.previousSibling.style.display = 'block';
                  
                  BonaPage.dynamicMenuVariables.topCorners=BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.previousSibling;
                  BonaPage.dynamicMenuVariables.topCorners.style.visibility="hidden";

              }
              
              
              //menu ul containers
              if (isIE && isIE == 6)
              {
                BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.style.left = '0px';
                //BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.style.top = this.offsetHeight + 'px';
              }
              else
              {
                BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.style.left = this.offsetLeft + 'px';
                //BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.style.top = (this.offsetTop + this.offsetHeight ) + 'px';
                
              }
              
              BonaPage.dynamicMenuVariables.container=this;
              BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.style.zIndex = '304';
              BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.style.display = 'block';
              BonaPage.dynamicMenuSpanItems[this.id].dynamicMenuContainer.style.display = 'block';
              
              
              //bottom corners
              if ($getElementStyle(BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.nextSibling, 'visibility') == 'visible')
              {
                  if (isIE && isIE == 6)
                  {
                    BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.nextSibling.style.left = '0px';
                    //BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.nextSibling.style.top = this.offsetHeight + 'px';
                  }
                  else
                  {
                    BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.nextSibling.style.left = this.offsetLeft + 'px';
                    //BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.nextSibling.style.top = (this.offsetTop + this.offsetHeight) + 'px';
                  }
                  
                  BonaPage.dynamicMenuVariables.bottomCorners=BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.nextSibling;
                  BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.nextSibling.style.zIndex = '304';
                  BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.nextSibling.style.display = 'block';
                  BonaPage.dynamicMenuVariables.bottomCorners.style.visibility="hidden";
              }
             
             
             BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.style.visibility = 'hidden';
              
             window.setTimeout(function()
             {
                
                var topCornersHeight=0; 
                
                if (BonaPage.dynamicMenuVariables.topCorners!=null)
                {
                    topCornersHeight=BonaPage.dynamicMenuVariables.topCorners.offsetHeight;
                    BonaPage.dynamicMenuVariables.topCorners.style.visibility="visible";
                }
                   
                var menuTop = BonaPage.dynamicMenuVariables.container.offsetHeight + topCornersHeight;
                
                if (!(isIE && isIE == 6))
                {
                    menuTop+=BonaPage.dynamicMenuVariables.container.offsetTop;
                }  
                
                var cornersTop= menuTop+BonaPage.dynamicMenuSpanItems[BonaPage.dynamicMenuVariables.container.id].dynamicMenu.offsetHeight;
                BonaPage.dynamicMenuSpanItems[BonaPage.dynamicMenuVariables.container.id].dynamicMenu.style.top = menuTop+'px';
                BonaPage.dynamicMenuSpanItems[BonaPage.dynamicMenuVariables.container.id].dynamicMenu.style.visibility="visible";
                
                if (BonaPage.dynamicMenuVariables.bottomCorners!=null)
                {
                    BonaPage.dynamicMenuVariables.bottomCorners.style.top= cornersTop+'px';
                    BonaPage.dynamicMenuVariables.bottomCorners.style.visibility="visible";
                }
                
                 //alert(BonaPage.dynamicMenuVariables.bottomCorners.style.top);
                //BonaPage.dynamicMenuSpanItems[BonaPage.dynamicMenuVariables.container.id].dynamicMenu.style.display = "none";
             },
             3);
              
              
            }
          }
        }
        
        spanItem.onmouseout = function ()
        {   
          if (BonaPage.dynamicMenuCloseTimeout)
          {
            clearTimeout(BonaPage.dynamicMenuCloseTimeout);
          }
          
          if (BonaPage.dynamicMenuItems.disabled)
          {
            return true;
          }
          
          BonaPage.dynamicMenuCloseTimeout = setTimeout(function () { closeDynamicMenuDo(); }, 7);
        }
      }
    }
    
    function closeDynamicMenuDo ()
    {
      var i;
      if (BonaPage.dynamicMenuCloseTimeout)
      {
        clearTimeout(BonaPage.dynamicMenuCloseTimeout);
      }
      
      for (i in BonaPage.dynamicMenuSpanItems)
      {
        if (BonaPage.dynamicMenuSpanItems[i].dynamicMenuContainer.style.display != 'none')
        {
          BonaPage.dynamicMenuSpanItems[i].dynamicMenu.style.left = '0px';
          BonaPage.dynamicMenuSpanItems[i].dynamicMenu.style.top = '-10px';
          BonaPage.dynamicMenuSpanItems[i].dynamicMenu.style.zIndex = '303';
          BonaPage.dynamicMenuSpanItems[i].dynamicMenu.style.display = 'none';
          BonaPage.dynamicMenuSpanItems[i].dynamicMenuContainer.style.display = 'none';
                  BonaPage.dynamicMenuSpanItems[i].dynamicMenu.nextSibling.style.zIndex = '303';
                  BonaPage.dynamicMenuSpanItems[i].dynamicMenu.nextSibling.style.display = 'none';
                  BonaPage.dynamicMenuSpanItems[i].dynamicMenu.nextSibling.style.visibility = 'hidden';
                  BonaPage.dynamicMenuSpanItems[i].dynamicMenu.previousSibling.style.zIndex = '303';
                  BonaPage.dynamicMenuSpanItems[i].dynamicMenu.previousSibling.style.display = 'none';
                  BonaPage.dynamicMenuSpanItems[i].dynamicMenu.previousSibling.style.visibility = 'hidden';
        }
      }
    }
  }
  
  
  function dynamicMenuDisable()
  {
    BonaPage.dynamicMenuItems.disabled = true;
  }
  
  /* Disabling dynamic menu for Auroras under IE6 */
  if (window.bonaPage_ThemeId != null)
  {
    if (!
         (
           (bonaPage_ThemeId.indexOf('Theme21') != -1 
             || 
            bonaPage_ThemeId.indexOf('Theme22') != -1) 
          && isIE && isIE <= 6
         )
       )
    {
      BonaPage.addPageStateHandler(BonaPage.PAGE_PARSED, dynamicMenuLite);
    }
  }
  
  
  function fixPNG ()
  {
    var i;
    var obj, src;
    var bodyClass = document.body.className;
    
    if ((bodyClass.indexOf('publicContentView') == -1 && bodyClass.indexOf('memberContentView') == -1 && bodyClass.indexOf('adminContentView') == -1) || (bodyClass.indexOf('customizeContentView') != -1))
    {
      return;
    }
    
    var shim = BonaPage.themesSharedImgPath + 'z.gif';
    var pics=BonaPage.$$('IMG.artText');
    
    for (i = 0; i < pics.length; i++)
    {
      obj = pics[i];
      src = obj.src;
      
      if (src.toUpperCase().indexOf('.PNG') <= 0)
      {
          continue;
      }
      
      obj.style.width = obj.width + "px";
      obj.style.height = obj.height + "px";
      obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "?sid="+BonaPage.getUniqueIdentifier()+"', sizingMethod='scale')";
      obj.src = shim;
    }
  }
  
  if (isIE && isIE <= 6)
  {
    BonaPage.addPageStateHandler(BonaPage.PAGE_LOADED, fixPNG);
  }
  
  
  function fixGeckoTables (newWin, newTable)
  {
    var i, j;
    var tMargin, tMarginLeft, tMarginRight, tMarginTop, tMarginBottom;
    var tableBorder, tdBorder, nextTdBorder, calcBorder, calcMargin;
    var tableCurrent, tdCurrent;
    var pWin = newWin || window; 
    var waTables = (newTable) ? [newTable] : pWin.document.body.getElementsByTagName('TABLE');
    
    if (!waTables || !waTables.length)
    {
      return false;
    }
    
    for (i = 0; i < waTables.length; i++)
    {
      if (waTables[i].getAttribute('watable', 0))
      {
        tableCurrent = waTables[i];
        
        if (!tableCurrent || !tableCurrent.style)
        {
          continue;
        }
        
        tMargin = (tableCurrent.style.margin) ? tableCurrent.style.margin : $getElementStyle(tableCurrent, 'margin');
        tMargin = (!isNaN(parseInt(tMargin)) && parseInt(tMargin) != 0);
        
        tMarginLeft = (tableCurrent.style.marginLeft) ? tableCurrent.style.marginLeft : $getElementStyle(tableCurrent, 'marginLeft');
        tMarginLeft = (!isNaN(parseInt(tMarginLeft)) && parseInt(tMarginLeft) != 0);
        
        tMarginRight = (tableCurrent.style.marginRight) ? tableCurrent.style.marginRight : $getElementStyle(tableCurrent, 'marginRight');
        tMarginRight = (!isNaN(parseInt(tMarginRight)) && parseInt(tMarginRight) != 0);
        
        tMarginTop = (tableCurrent.style.marginTop) ? tableCurrent.style.marginTop : $getElementStyle(tableCurrent, 'marginTop');
        tMarginTop = (!isNaN(parseInt(tMarginTop)) && parseInt(tMarginTop) != 0);
        
        tMarginBottom = (tableCurrent.style.marginBottom) ? tableCurrent.style.marginBottom : $getElementStyle(tableCurrent, 'marginBottom');
        tMarginBottom = (!isNaN(parseInt(tMarginBottom)) && parseInt(tMarginBottom) != 0);
        
        if (tableCurrent.style.borderCollapse.toLowerCase() == 'collapse' && !tMargin)
        {
          if (!tableCurrent.getAttribute('align', 0) || tableCurrent.getAttribute('align', 0).toLowerCase() != 'center')
          {
            if (!waTables[i].getAttribute('wamarginleft', 0) && !tMarginLeft)
            {
              tableBorder = (tableCurrent.style.borderLeftWidth) ? tableCurrent.style.borderLeftWidth : $getElementStyle(tableCurrent, 'borderLeftWidth');
              tableBorder = (!isNaN(parseInt(tableBorder))) ? parseInt(tableBorder) : 0;
              tdBorder = 0;
              
              for (j = 0; (j < tableCurrent.rows.length && j < 17); j++)
              {
                if (tableCurrent.rows[j].cells && tableCurrent.rows[j].cells.length > 0)
                {
                  tdCurrent = tableCurrent.rows[j].cells[0];
                  
                  if (tdCurrent && tdCurrent.style)
                  {
                    nextTdBorder = (tdCurrent.style.borderLeftWidth) ? tdCurrent.style.borderLeftWidth : $getElementStyle(tdCurrent, 'borderLeftWidth');
                    nextTdBorder = (!isNaN(parseInt(nextTdBorder))) ? parseInt(nextTdBorder) : 0;
                    
                    if (nextTdBorder > tdBorder)
                    {
                      tdBorder = nextTdBorder;
                    }
                  }
                }
              }
              
              calcBorder = (tableBorder > tdBorder) ? tableBorder : tdBorder;
              
              if (calcBorder > 0)
              {
                calcMargin = Math.ceil(calcBorder / 2);
                tableCurrent.style.marginLeft = calcMargin + 'px';
                tableCurrent.setAttribute('wamarginleft', 1, 0);
              }
            }
            
            if (!waTables[i].getAttribute('wamarginright', 0) && !tMarginRight)
            {
              tableBorder = (tableCurrent.style.borderRightWidth) ? tableCurrent.style.borderRightWidth : $getElementStyle(tableCurrent, 'borderRightWidth');
              tableBorder = (!isNaN(parseInt(tableBorder))) ? parseInt(tableBorder) : 0;
              tdBorder = 0;
              
              for (j = 0; (j < tableCurrent.rows.length && j < 17); j++)
              {
                if (tableCurrent.rows[j].cells && tableCurrent.rows[j].cells.length > 0)
                {
                  tdCurrent = tableCurrent.rows[j].cells[tableCurrent.rows[j].cells.length - 1];
                  
                  if (tdCurrent && tdCurrent.style)
                  {
                    nextTdBorder = (tdCurrent.style.borderRightWidth) ? tdCurrent.style.borderRightWidth : $getElementStyle(tdCurrent, 'borderRightWidth');
                    nextTdBorder = (!isNaN(parseInt(nextTdBorder))) ? parseInt(nextTdBorder) : 0;
                    
                    if (nextTdBorder > tdBorder)
                    {
                      tdBorder = nextTdBorder;
                    }
                  }
                }
              }
              
              calcBorder = (tableBorder > tdBorder) ? tableBorder : tdBorder;
              
              if (calcBorder > 0)
              {
                calcMargin = Math.ceil(calcBorder / 2);
                tableCurrent.style.marginRight = calcMargin + 'px';
                tableCurrent.setAttribute('wamarginright', 1, 0);
              }
            }
          }
          
          if (!waTables[i].getAttribute('wamargintop', 0) && !tMarginTop)
          {
            tableBorder = (tableCurrent.style.borderTopWidth) ? tableCurrent.style.borderTopWidth : $getElementStyle(tableCurrent, 'borderTopWidth');
            tableBorder = (!isNaN(parseInt(tableBorder))) ? parseInt(tableBorder) : 0;
            tdBorder = 0;
            
            if (tableCurrent.rows && tableCurrent.rows.length > 0 && tableCurrent.rows[0] && tableCurrent.rows[0].cells)
            {
              for (j = 0; (j < tableCurrent.rows[0].cells.length && j < 17); j++)
              {
                tdCurrent = tableCurrent.rows[0].cells[j];
                
                if (tdCurrent && tdCurrent.style)
                {
                  nextTdBorder = (tdCurrent.style.borderTopWidth) ? tdCurrent.style.borderTopWidth : $getElementStyle(tdCurrent, 'borderTopWidth');
                  nextTdBorder = (!isNaN(parseInt(nextTdBorder))) ? parseInt(nextTdBorder) : 0;
                  
                  if (nextTdBorder > tdBorder)
                  {
                    tdBorder = nextTdBorder;
                  }
                }
              }
            }
            
            calcBorder = (tableBorder > tdBorder) ? tableBorder : tdBorder;
            
            if (calcBorder > 0)
            {
              calcMargin = Math.ceil(calcBorder / 2);
              tableCurrent.style.marginTop = calcMargin + 'px';
              tableCurrent.setAttribute('wamargintop', 1, 0);
            }
          }
          
          if (!waTables[i].getAttribute('wamarginbottom', 0) && !tMarginBottom)
          {
            tableBorder = (tableCurrent.style.borderBottomWidth) ? tableCurrent.style.borderBottomWidth : $getElementStyle(tableCurrent, 'borderBottomWidth');
            tableBorder = (!isNaN(parseInt(tableBorder))) ? parseInt(tableBorder) : 0;
            tdBorder = 0;
            
            if (tableCurrent.rows && tableCurrent.rows.length > 0 && tableCurrent.rows[tableCurrent.rows.length - 1] && tableCurrent.rows[tableCurrent.rows.length - 1].cells)
            {
              for (j = 0; (j < tableCurrent.rows[tableCurrent.rows.length - 1].cells.length && j < 17); j++)
              {
                tdCurrent = tableCurrent.rows[tableCurrent.rows.length - 1].cells[j];
                
                if (tdCurrent && tdCurrent.style)
                {
                  nextTdBorder = (tdCurrent.style.borderBottomWidth) ? tdCurrent.style.borderBottomWidth : $getElementStyle(tdCurrent, 'borderBottomWidth');
                  nextTdBorder = (!isNaN(parseInt(nextTdBorder))) ? parseInt(nextTdBorder) : 0;
                  
                  if (nextTdBorder > tdBorder)
                  {
                    tdBorder = nextTdBorder;
                  }
                }
              }
            }
            
            calcBorder = (tableBorder > tdBorder) ? tableBorder : tdBorder;
            
            if (calcBorder > 0)
            {
              calcMargin = Math.ceil(calcBorder / 2);
              tableCurrent.style.marginBottom = calcMargin + 'px';
              tableCurrent.setAttribute('wamarginbottom', 1, 0);
            }
          }
        }
      }
    }
  }
  
  if (isGecko)
  {
    BonaPage.addPageStateHandler(BonaPage.PAGE_PARSED, fixGeckoTables);
  }
  
  
  function getAttrEx(el, attrName)
  {
    //var topWin = topWin.contentarea ? topWin.contentarea : top;
    if (el == null) return false;
    
    var attr = (el.style[attrName]) ? el.style[attrName] : $getElementStyle(el, attrName);

    if (attr == null ||
       (attr == 'transparent' && attrName == 'backgroundColor')||
       (attr == 'none' && attrName == 'backgroundImage'))
    {
      return false
    }
    else
    {
      return attr;
    }
  }
  
  
  function setEmulateMode()
  {
    var i;
    var docFormAction = null;
    var eLinks;
    
    if (window.name && window.name == 'nmCustomThemePreviewIFrame')
    {
      if (document.forms && document.forms[0] && document.forms[0].action)
      {
        docForm = document.forms[0].action;
      }
      
      if (docForm.indexOf('javascript:') == -1 && docForm.indexOf('emulatemode=1') == -1)
      {
        document.forms[0].action = docForm + ((docForm.indexOf('?') == -1) ? '?' : '&') + 'emulatemode=1';
      }
      
      if (document.links && document.links.length > 0)
      {
        eLinks = document.links;
        
        for (i = 0; i < eLinks.length; i++)
        {
          if (eLinks[i].target == '_top')
          {
            eLinks[i].target = '_self';
            
            if (eLinks[i].href.substr(eLinks[i].href.length - 1) == '/')
            {
              eLinks[i].href = '/default.aspx?emulatemode=1';
            }
          }
        }
      }
    }
  }
  
  
  if (window.name && window.name == 'nmCustomThemePreviewIFrame')
  {
    BonaPage.isEmulatedMode = true;
    
    if (winLocationHref.indexOf('javascript:') == -1 && winLocationHref.indexOf('emulatemode=1') == -1)
    {
      window.location.replace(winLocationHref + ((winLocationHref.indexOf('?') == -1) ? '?' : '&') + 'emulatemode=1');
    }
    
    window.AdminPanel = new Object();
    window.AdminPanel.reset = function(){};
    window.AdminPanel.update = function(){};
    window.AdminPanel.setTopTab = function(){};
    window.AdminPanel.addToolbarButton = function(){};
    window.AdminPanel.resetToolbarButtons = function(){};
    window.AdminPanel.setStatusMessage = function(){};
    window.AdminPanel.showWaitMessage = function(){};
    window.AdminPanel.hideWaitMessage = function(){};
    window.AdminPanel.persistButtonStateOnBeforeUnload = function(){};
    window.AdminPanel.showInfoMessage = function(){};
    window.AdminPanel.showNoticeMessage = function(){};
    window.AdminPanel.showButtons = function(){};
    window.AdminPanel.hideButtons = function(){};
    window.AdminPanel.setToolbarMessage = function(){};
    window.AdminPanel.clearCache = function(){};
    window.AdminPanel.addHandler = function(){};
  }
  
  
  function setStylesVersion ()
  {
    var adminPanel;
    
    try
    {
      adminPanel = topWin.adminpanel;
    }
    catch(e){};
    
    if (adminPanel)
    {
      if (topWin.adminpanel && topWin.contentarea && window == topWin.contentarea && topWin.contentarea.BonaPage.themeVersion != topWin.BonaPage.themeVersion &&
          topWin.BonaEditor && topWin.BonaEditor.toolbar && topWin.BonaEditor.toolbar.isObjValid)
      {
        topWin.BonaPage.themeVersion = topWin.contentarea.BonaPage.themeVersion;
        topWin.BonaEditor.toolbar.reInitFormatingDropdown(topWin.BonaPage.themeVersion.toString() + topWin.BonaPage.version.toString());
      }
    }
  }
  
  BonaPage.addPageStateHandler(BonaPage.PAGE_PARSED, setStylesVersion);


  var scrollBarWidth = null;
  
  function getScrollBarWidth ()
  {
    if(!scrollBarWidth)
    {
      var objDiv = document.createElement('DIV');
      
      if(objDiv)
      {
        objDiv.style.position = 'absolute';
        objDiv.style.left = objDiv.style.top = '-1000px';
        objDiv.style.width = objDiv.style.height = '100px';
        objDiv.style.overflow = 'scroll';
        objDiv.style.visibility = 'hidden';
        
        if(document.body)
        {
          document.body.appendChild(objDiv);
          
          if(objDiv && objDiv.offsetWidth && objDiv.clientWidth)
          {
            scrollBarWidth = objDiv.offsetWidth - objDiv.clientWidth;
          }
        }
      }
    }
    
    if(objDiv)
    {
      objDiv.parentNode.removeChild(objDiv);
    }
    
    return scrollBarWidth;
  }
  
  
  function getXY (obj)
  {
    var parTemp;
    obj.X = 0;
    obj.Y = 0;
    
    if(obj.offsetParent)
    {
      parTemp = obj;
      
      while(parTemp.offsetParent)
      {
        parTemp = parTemp.offsetParent;
        obj.X += parTemp.offsetLeft;
        obj.Y += parTemp.offsetTop;
      }
    }
    
    obj.X += obj.offsetLeft;
    obj.Y += obj.offsetTop;
    
    return {x : obj.X, y : obj.Y};
  }
  
  function getAbsoluteXY (obj)
  {
    var parTemp;
    obj.X = 0;
    obj.Y = 0;
    
    if(obj.parentNode)
    {
      parTemp = obj;
      
      while(parTemp.nodeName.toUpperCase() != 'BODY')
      {
        parTemp = parTemp.parentNode;
        var position = BonaPage.getElementStyle(parTemp, 'position').toLowerCase();

        if (position == 'absolute' || position == 'relative')
        {
          obj.X += parTemp.offsetLeft;
          obj.Y += parTemp.offsetTop;
        }
      }
    }
    
    obj.X += obj.offsetLeft;
    obj.Y += obj.offsetTop;
    
    return {x : obj.X, y : obj.Y};
  }
  
  
  function updateValidators(myValidationGroup)
  {
      for (var i = 0; i < Page_Validators.length; i++) 
      {
          ValidatorValidate(Page_Validators[i], myValidationGroup, null);
      }      
      ValidatorUpdateIsValid();
  }
  
  
  function isValidatorValid(validator)
  {   
      if (validator.controltovalidate)
      {
            // validator property is object
            ValidatorValidate(validator, validator.validationGroup, null);
            return validator.isvalid;
      }
        
      // validator property is string (name)  
        
      for (var i = 0; i < Page_Validators.length; i++) 
      {
          var validatorName = Page_Validators[i]["name"] ? Page_Validators[i]["name"] : ""; 
          
          if (validatorName.toLowerCase() == validator.toLowerCase())
          {
                ValidatorValidate(Page_Validators[i], Page_Validators[i].validationGroup, null);
                return Page_Validators[i].isvalid;
          }
      }      
      
      alert("Validator name not found");  
  }
  
  
  function formatString(template, args)
  {
     var result = template;
     
     for (var i = 1; i < arguments.length; i++)
     {
        var regex = new RegExp('\\{' + (i - 1) + '\\}', 'gi');
        result = result.replace(regex, arguments[i]);     
     }
  
     return result;
  }
  
  
  function formatStringNamed(template, argsObject)
  {
     var result = template;
     
     for (var key in argsObject)
     {
        var value = argsObject[key];
        var regex = new RegExp('\\{' + key + '\\}', 'gi');
        
        result = result.replace(regex, value);     
     }
  
     return result;
  }
  
  
  function encodeHtml(html)
  {
	  var result = '';
    
	  for (var i = 0; i < html.length; i++)
	  {
		  var charCode = html.charCodeAt(i);
  		var ch = html.charAt(i);
  		
		  if (charCode > 0xA0 && charCode < 0x100)
		  {
			  result += '&#' + charCode + ';';
		  }
		  else if (ch == '&')
		  {
		    result += "&amp;";
		  }
		  else if (ch == '<')
		  {
		    result += "&lt;";
		  }
		  else if (ch == '>')
		  {
		    result += "&gt;";		  
		  }
		  else if (ch == '"')
		  {
		    result += "&quot;";
		  }
		  else
		  {
			  result += ch;
		  }
	  }
  	
	  return result;
  }
  
  
  function decodeHtml(html)
  {
    return html.replace(/\&([A-Za-z0-9#]+)\;/ig, function (str, ent)
    {
      if (ent.indexOf('#') == 0)
      {
        ent = ent.substr(1);
        return String.fromCharCode(ent);
      }
      else
      {
        switch (ent.toLowerCase())
        {
          case 'amp':
            return '&';
            break;
          case 'lt':
            return '<';
            break;
          case 'gt':
            return '>';
            break;
          case 'quot':
            return '"';
            break;
          default:
            return '&' + ent + ';';
        }
      }
    });
  }
  
  
  function webRequest(parameters)
  {
    var wRequest = new Sys.Net.WebRequest();
    wRequest.set_url(parameters.url);  
    
    wRequest.set_httpVerb(parameters.verb || "GET");
    wRequest.set_userContext(parameters.context);
            
    wRequest.add_completed(parameters.completedCallback || function() {} );
    
    wRequest.invoke();  
  }
  
  
  function goToTopWindow()
  {
    try
    {
      var tmp = top.location.href;
      
      if (!tmp)
      {
        top.location = self.location;
      }
    }
    catch (err)
    {
      try
      {
        if (self != top)
        {
          top.location = self.location;
        }
      }
      catch (err)
      {
        try
        {
          if (self != top)
          {
            top = self;
          }
          
          return false;
        }
        catch (err)
        {
          return false;
        }
      }
      
      return false;
    }
  }
  
  
  var pageShadingHolder;
  var pageShadingContainer;
  var pageShadingWaitMessage;
  var pageShadingWaitMessageText;
  var pageShadingContainerState = null;

  function createPageShadingContainer ()
  {
    var waitMessage = 'Please wait...';
    var waitMessageImgURL = '/Admin/html_res/images/async-load-progress-01.gif';
    var waitMessageHTML = '<div id="idPageShadingWaitMessage" style="display: none; position: absolute; width: 350px; text-align: center;">' + ((waitMessageImgURL) ? '<img src="' + waitMessageImgURL + '" border="0"><br>&nbsp;<br>&nbsp;&nbsp;' : '') + '<span id="idPageShadingWaitMessageText" style="font-size: 12px; font-weight: bold;">' + ((waitMessage) ? waitMessage : '') + '</span>' + '</div>';
    var pageShadingContainerHtml = '<div id="idPageShadingContainer" style="position: absolute; left: -3700px; top: -3700px; width: 1px; height: 1px; z-index: 7337; overflow: hidden; visibility: hidden; background-color: #FFFFFF; ' + ((BonaPage.Browser.isIE) ? 'filter: progid:DXImageTransform.Microsoft.Alpha(opacity=73);' : '-moz-opacity: 0.73; -khtml-opacity: 0.73; opacity: 0.73;') + '">' + waitMessageHTML + '</div>';
    
    pageShadingHolder = document.createElement('SPAN');
    pageShadingHolder.innerHTML = pageShadingContainerHtml;
    
    if (isIE)
    {
      setTimeout(createPageShadingContainerStep1, 137);
    }
    else
    {
      createPageShadingContainerStep1();
    }
  }
  
  
  function createPageShadingContainerStep1 ()
  {
    document.body.appendChild(pageShadingHolder);
    pageShadingContainer = document.getElementById('idPageShadingContainer');
    pageShadingWaitMessage = document.getElementById('idPageShadingWaitMessage');
    pageShadingWaitMessageText = document.getElementById('idPageShadingWaitMessageText');
    pageShadingContainerState = false;
  }


  function showPageShadingContainer (showWaitMessage, newWaitMessageText)
  {
    if (pageShadingContainerState === null)
    {
      setTimeout(showPageShadingContainer, 137);
    }
    
    if (pageShadingContainerState)
    {
      return;
    }
    
    pageShadingContainerState = true;
    pageShadingWaitMessageText.innerHTML = (newWaitMessageText == null) ? 'Please wait...' : newWaitMessageText;
    pageShadingWaitMessage.style.display = (showWaitMessage) ? 'block' : 'none';
    pageShadingContainer.style.visibility = 'visible';
    setTimeout(function() { setPageShadingContainerSize(showWaitMessage); }, 10);
    BonaPage.addHandler(window, 'resize', setPageShadingContainerSize);
    pageShadingContainerState = true;
  }


  function hidePageShadingContainer ()
  {
    if (pageShadingContainerState === null)
    {
      setTimeout(hidePageShadingContainer, 137);
    }
    
    if (!pageShadingContainerState)
    {
      return;
    }
    
    pageShadingContainerState = false;
    BonaPage.removeHandler(window, 'resize', setPageShadingContainerSize);
    pageShadingContainer.style.visibility = 'hidden';
    pageShadingContainer.style.left = '-3700px';
    pageShadingContainer.style.top = '-3700px';
    pageShadingContainer.style.width = '1px';
    pageShadingContainer.style.height = '1px';
    pageShadingContainer.style.overflow = 'hidden';
    pageShadingWaitMessage.style.display = 'none';
    pageShadingContainerState = false;    
  }


  function setPageShadingContainerSize (showWaitMessage)
  {
    if (pageShadingContainerState === null)
    {
      setTimeout(setPageShadingContainerSize, 137);
    }
    
    pageShadingContainer.style.left = '0px';
    pageShadingContainer.style.top = '0px';
    pageShadingContainer.style.width = BonaPage.getScrollWidth() + 'px';
    pageShadingContainer.style.height = BonaPage.getScrollHeight() + 'px';

    if (showWaitMessage || pageShadingWaitMessage.style.display == 'block')
    {
      pageShadingWaitMessage.style.left = Math.floor((BonaPage.getInnerWidth() - pageShadingWaitMessage.offsetWidth) / 2) + 'px';
      pageShadingWaitMessage.style.top = Math.floor((BonaPage.getInnerHeight() - pageShadingWaitMessage.offsetHeight) / 2) + 'px';
    }
  }
  
  
  function $cloneObject(sourceObject)
  {
    var result = {};
    
    for (var i in sourceObject)
    {
      if (sourceObject[i] == null)
      {
        result[i] = null;
        continue;
      }
    
      if (typeof(sourceObject[i]) == 'object')
      {
        result[i] = $cloneObject(sourceObject[i]);
      }     // todo proper array cloning      
      else
      {
        result[i] = sourceObject[i];
      }
    }
    
    return result;
  }
  

  function $extendObject (sourceObject, newObject)
  {
    if (!newObject)
    {
      return $cloneObject(sourceObject);
    }
    
    var result = $cloneObject(newObject);
    
    for (var i in sourceObject)
    {
      if (sourceObject[i] == null)
      {
        result[i] == null;
        continue;
      }
      
      if (typeof(sourceObject[i]) == 'object')
      {
        result[i] = $extendObject(sourceObject[i], result[i]);
      }
      else
      {
        result[i] = result[i] || sourceObject[i];
      }
    }

    return result;
  }
  

  BonaPage.addPageStateHandler(BonaPage.PAGE_PARSED, createPageShadingContainer);
  

}) ();


//======================================================================


function BonaObject(element, elementWindow) 
{
    if (typeof(element) === "string" ) 
    {
        this.object = BonaPage.$(element);

        if (!this.object) 
        {
            throw element + " object not found";
        }
    }
    else if (typeof (element) === "object") 
    {
        this.object = element;
    }
    else 
    {
        alert('unknown element');
    }
    
    this.elementWindow = elementWindow || window;

    if (this.object.bonaObject) 
    {
        return this.object.bonaObject;
    }
    else 
    {
        this.object.bonaObject = this;
    }
    
    var pThis = this;

    this.animation = new (function f() 
    {
        var animation = 
        {
            queue: [],
            activeAnimation:
            {
                settings: null,
                timer: null,
                step: null,
                steps: null
            },
            refreshTimeout: 30
        };

        animation.effects =
        {
            halfSinus: function(value, activeStep, totalSteps) 
            {
                var present = activeStep / totalSteps;
                return Math.sin(present * Math.PI / 2) * value;
            },

            halfCosinus: function(value, activeStep, totalSteps) 
            {
                var present = activeStep / totalSteps;
                return (1 - Math.cos(present * Math.PI / 2)) * value;
            },

            fullSinus: function(value, activeStep, totalSteps) 
            {
                var present = activeStep / totalSteps;
                return (Math.sin(present * Math.PI - Math.PI / 2) + 1) * value / 2;
            },
            
            linear: function(value, activeStep, totalSteps) 
            {
                return activeStep / totalSteps * value;
            }
        };

        animation.add = function(params, settings) 
        {
            var newAnimation = 
            {
                settings: settings,
                rawData: params,
                properties: []
            };

            this.queue.push(newAnimation);
            checkQueue();
        };

        function initializeNewAnimationProperties(newAnimation) 
        {
            for (var styleName in newAnimation.rawData) 
            {
                var propertyInfo = parseCssProperty(computeStyle(pThis.object, styleName));
                var parsedValue = parseAnimationProperty(newAnimation.rawData[styleName].value);

                newAnimation.properties.push(
                {
                    name: styleName,
                    from: propertyInfo.value,
                    to: parsedValue.modification == '='
                        ? eval(propertyInfo.value + parsedValue.operation + parsedValue.value)
                        : parsedValue.value,
                    unit: parsedValue.unit,
                    effect: getEffectByName(newAnimation.rawData[styleName].effect || "fullSinus")
                });
            }
        }

        function checkQueue() 
        {
            if (animation.activeAnimation.settings != null || animation.queue.length == 0) 
            {
                return;
            }

            var newAnimation = animation.queue.shift();
            initializeNewAnimationProperties(newAnimation);

            animation.activeAnimation =
            {
                settings: newAnimation,
                timer: pThis.elementWindow.setTimeout(function() { animateStep(); }, animation.refreshTimeout),
                step: 0,
                steps: newAnimation.settings.time / animation.refreshTimeout
            };

            animateStep();
        }

        function animateStep() 
        {     
            if (animation.activeAnimation.step > animation.activeAnimation.steps + 1)
            {
                if (animation.activeAnimation.timer) 
                {
                    pThis.elementWindow.clearTimeout(animation.activeAnimation.timer);
                }
                
                if (animation.activeAnimation.settings && animation.activeAnimation.settings.settings.onAnimateCompleteCallBack)
                {
                    animation.activeAnimation.settings.settings.onAnimateCompleteCallBack();
                }

                animation.activeAnimation.settings = null;
                
                checkQueue();
                return;
            }
               
            for (var i = 0; i < animation.activeAnimation.settings.properties.length; i++) 
            {
                var property = animation.activeAnimation.settings.properties[i];
                var newValue = getNewProperyValue(property);

                pThis.object.style[property.name] = newValue;
            }
            
            if (animation.activeAnimation.settings.settings.onAnimateStepCallBack)
            {
                animation.activeAnimation.settings.settings.onAnimateStepCallBack();
            }
            
            animation.activeAnimation.step++;
            animation.activeAnimation.timer = pThis.elementWindow.setTimeout(function() { animateStep(); }, animation.refreshTimeout);
        }

        function getNewProperyValue(property) 
        {
            if (animation.activeAnimation.step >= animation.activeAnimation.steps) 
            {
                return property.to + property.unit;
            }

            var propertyDelta = property.effect(
                    property.to - property.from,
                    animation.activeAnimation.step,
                    animation.activeAnimation.steps);

            return (property.from + propertyDelta) + property.unit;
        }


        function getEffectByName(name) 
        {
            return animation.effects[name];
        }

        function computeStyle(element, style) 
        {
            return pThis.elementWindow.BonaPage.Browser.isIE
                ? element.currentStyle[style] 
                : pThis.elementWindow.getComputedStyle(element, null)[style];
        }

        function parseAnimationProperty(value) 
        {            
            var parsingRegEx = /^(?:([+-\\*])(=))?(\-?[0-9]+(?:\.[0-9]+)?)([a-z%]+)?$/im;
            var match = parsingRegEx.exec(value);

            if (!match)
            {
                throw 'unable to parse value: ' + value;
            }

            var result = 
            {
                operation: match[1],
                modification: match[2],
                value: parseInt(match[3], 0),
                unit: match[4] || 'px'
            }

            return result;
        }
        
        function parseCssProperty(value) 
        {            
            var parsingRegEx = /^(\-?[0-9]+(?:\.[0-9]+)?)([a-z%]+)?$/im;
            var match = parsingRegEx.exec(value);
            var result;
            
            if (!match)
            {
                result = 
                {
                    value: 0,
                    unit: 'px'
                }
            }
            else
            {
                result = 
                {
                    value: parseInt(match[1], 0),
                    unit: match[2] || 'px'
                }
            }

            return result;
        }

        return animation;
    });
}



/***************************
	
	    OBJECTS
	     
***************************/

window.TopCacheProvider = function()
{
    var topWin = BonaPage.topWindow;
    
    this.Clear = function (key)
    {
        if (!topWin.cache)
        {
          return;
        }
        
        if (!key)
        {
            topWin.cache = null;
            topWin.cache = new Object();
        }
        else
        {
            topWin.cache[key] = null;
        }
    }
    
    this.Store = function (key, value)
    {
        if (!topWin.cache)
        {
            topWin.cache = new Object();
        }
    
        topWin.cache[key] = value;
    }
    
    this.Contains = function (key)
    {
        return topWin.cache ? (topWin.cache[key] ? true : false) : false;
    }
    
    this.Retrive = function (key)
    {
        return topWin.cache ? topWin.cache[key] : null;
    }
    
    return this;
}


window.CacheItem = function(chacheProvider, key)
{
    var chacheProvider = chacheProvider ? chacheProvider : null;
    var key = key ? key : null;
    
    if (!chacheProvider)
    {
        alert("cache provider required");
    }
    
    if (!key)
    {
        alert("key required");
    }
    
    this.Get = function()
    {
        return chacheProvider.Retrive(key);
    }
    
    this.Set = function(value)
    {
        chacheProvider.Store(key, value);
    }
    
    this.IsNull = function()
    {
        return (this.Get() == null);
    }
    
    return this;
}


window.BonaDialogHandler = function (settings)
{
	// private variables
  var pThis = this;
    
  // public variables
  pThis.settings = settings;
  pThis.objects = 
  {
      bonaDialog: null
  };

  // public events
  pThis.onDialogOpen = settings.onDialogOpen || null;
  pThis.onDialogInit = settings.onDialogInit || null;
  pThis.afterDialogInit = settings.afterDialogInit || null;
  pThis.afterDialogOpen = settings.afterDialogOpen || null;
  pThis.onDialogOk = settings.onDialogOk || null;  
  pThis.onDialogClose = settings.onDialogClose || null;
  
  
  // initialization
  pThis.initialize = function(settings)
  {
    pThis.settings = BonaPage.Objects.extend(pThis.settings, settings);
    
    initalizeDialog();
    pThis.initialized = true;
  }
    
  pThis.dispose = function()
	{
	  if (!pThis.initialized)
	  {
		  return;
	  }
		
		// dispose logic goes here
		
		pThis.initialized = false;
	}
    
    
  /***************************
	     PUBLIC FUNCTIONS
	***************************/

	pThis.open = open;
	pThis.close = close;
	pThis.generateReloadUrl = settings.generateReloadUrl || generateReloadUrl;
	pThis.generateDirectUrl = settings.generateDirectUrl || generateDirectUrl;
	
	
	/***************************
	     PRIVATE FUNCTIONS
	***************************/
	
	function open(windowProperties, callBackParameters, directAccessParameters)
  { 
    if (!pThis.initialized)
    {
      pThis.initialize(callBackParameters);
    }
   
    if (!pThis.objects.bonaDialog)
    {   
      setTimeout(
        function() 
        { 
          open(windowProperties, callBackParameters, directAccessParameters); 
        }, 
        100);
            
      return;
    }
    
    windowProperties = prepareWindowProperties(directAccessParameters, windowProperties);
    
    applyCallBackParameters(callBackParameters);
    
    raiseEvent(pThis.onDialogOpen, {windowProperties: windowProperties, callBackParameters: callBackParameters, directAccessParameters: directAccessParameters});
    pThis.objects.bonaDialog.parameters = directAccessParameters;
    
    window.setTimeout(
      function()
      {
        pThis.objects.bonaDialog.showDialog(windowProperties);
        raiseEvent(pThis.afterDialogOpen, {windowProperties: windowProperties, callBackParameters: callBackParameters, directAccessParameters: directAccessParameters});
      },
      100);
  } 

    
  function close()
  { 
      if (!pThis.initialized)
      {
          return;
      }
      
      pThis.objects.bonaDialog.closeWindow();
  }
  
  
  function onDialogOk()
  {
    if (pThis.onDialogOk && pThis.onDialogOk.call(pThis, pThis.objects.bonaDialog.getReturnedParameters()) == false)
    {
      return;
    }
    
    close();
  }
  
  
  function onDialogClose()
  {
    if (pThis.onDialogClose && pThis.onDialogClose.call(pThis, pThis.objects.bonaDialog.getReturnedParameters()) == false)
    {
      return;
    }
    
    close();
  }
  
  
  function applyCallBackParameters(callBackParameters)
  {
    for (var parameterName in callBackParameters)
    {
      pThis.objects.bonaDialog.setReturnedParameters(parameterName, callBackParameters[parameterName]);
    }
  }
  
  
  function prepareWindowProperties(parameters, windowProperties)
  {
    windowProperties = windowProperties || {};
    windowProperties.newReloadUrl = windowProperties.newReloadUrl || pThis.generateReloadUrl.call(pThis, BonaPage.Objects.extend(pThis.settings, parameters));
    windowProperties.pCallBackSaveNew = windowProperties.pCallBackSaveNew || onDialogOk;
    windowProperties.pCallBackCloseNew = windowProperties.pCallBackCloseNew || onDialogClose;
    
    return windowProperties;
  }
  
  
  function generateReloadUrl(parameters)
  {
    if (!pThis.settings.dialogParameters.reloadURLTemplate)
    {
      return '';
    }
    
    return BonaPage.formatStringNamed(pThis.settings.dialogParameters.reloadURLTemplate, parameters);
  }
  
  
  function generateDirectUrl(parameters)
  {
    if (!pThis.settings.dialogParameters.directURLTemplate)
    {
      return '';
    }
    
    return BonaPage.formatStringNamed(pThis.settings.dialogParameters.directURLTemplate, parameters);
  }
	
	
	function initalizeDialog()
	{
    if (typeof(BonaPage.topWindow.BonaDialog) == 'undefined' || !BonaPage.topWindow.BonaDialog)
    {
      setTimeout(initalizeDialog, 100);
      return;
    }
    
    if (!pThis.settings.dialogParameters.directURL)
    {
      pThis.settings.dialogParameters.directURL = pThis.generateDirectUrl.call(pThis, pThis.settings);
    }
    
    if (!pThis.settings.dialogParameters.reloadURL)
    {
      pThis.settings.dialogParameters.reloadURL = pThis.generateReloadUrl.call(pThis, pThis.settings);
    }
    
    raiseEvent(pThis.onDialogInit);
    pThis.objects.bonaDialog = BonaPage.topWindow.BonaDialog.createInnerWindow(pThis.settings.name, pThis.settings.dialogParameters);   
    raiseEvent(pThis.afterDialogInit);
	}
	
	
	function raiseEvent(ev)
	{
    if (ev)
    {
      var args = [];
      
      for (var i = 0; i < arguments.length; i++)
      {
        args.push(arguments);
      }
      
      ev.apply(pThis, args.length > 1 ? args.splice(0,1) : []);
    }
	} 
}


/***************************
	
	    PROTOTYPES
	     
***************************/


Array.prototype.first = function(delegate, defaultValue)
{
    if (typeof(delegate) == "function")
    {
        for (var i = 0; i < this.length; i++)
        {
            if (delegate(this[i]))
            {
                return this[i];
            }
        }
    }
    else
    {
        for (var i = 0; i < this.length; i++)
        {
            if (this[i] == value)
            {
                return this[i];
            }
        }        
    }   
        
    return defaultValue;
}

Array.prototype.where = function(delegate)
{
    var result = [];
    
    for (var i = 0; i < this.length; i++)
    {
        if (delegate(this[i], i))
        {
            result.push(this[i]);
        }
    }
    
    return result;
}

Array.prototype.select = function(delegate)
{
    var result = [];
    
    for (var i = 0; i < this.length; i++)
    {
        result.push(delegate(this[i], i));
    }
    
    return result;
}


Array.prototype.waSum = function(delegate)
{
    var records = this.select(delegate);
    var result = 0;
    
    for (var i = 0; i < records.length; i++)
    {
        result += records[i];
    }
    
    return result;
}

Array.prototype.forEach = function(delegate)
{
    for (var i = 0; i < this.length; i++)
    {
        delegate(this[i], i);
    }
    
    return this;
}

Array.prototype.indexOf = function(delegate)
{
    if (typeof(delegate) == "function")
    {
        for (var i = 0; i < this.length; i++)
        {
            if (delegate(this[i]))
            {
                return i;
            }
        }    
    }
    else
    {
        for (var i = 0; i < this.length; i++)
        {
            if (this[i] == delegate)
            {
                return i;
            }
        }    
    }
        
    return -1;
}


Array.prototype.findFirst = function(delegate)
{
    return this[this.indexOf(delegate)];
}


Array.prototype.contains = function(value)
{
    return this.indexOf(value) != -1;
}

Array.prototype.reTestOr = function(value)
{
    for (var i = 0; i < this.length; i++)
    {
        if (this[i].test(value))
        {
            return true;
        }
    }
    
    return false;
}

Array.prototype.reTestAnd = function(value)
{
    for (var i = 0; i < this.length; i++)
    {
        if (!this[i].test(value))
        {
            return false;
        }
    }
    
    return true;
}

Array.prototype.clone = function(value)
{
    var result = new Array();
    
    for (var i = 0; i < this.length; i++)
    {
        result.push(this[i]);
    }
    
    return result;
}

String.prototype.gtrim = function ()
{
  return this.replace(/^[\s\n\r]*|[\s\n\r]*$/ig, ''); 
}

String.prototype.gltrim = function ()
{
  return this.replace(/^[\s\n\r]*/ig, ''); 
}

String.prototype.grtrim = function ()
{
  return this.replace(/[\s\n\r]*$/ig, ''); 
}


/***************************
	
	       OTHER
	     
***************************/

/* MS Validators fix */

BonaPage.addPageStateHandler (BonaPage.PAGE_PARSED, function() {

    if (!window.ValidatorOnChange)
    {
        return;
    }

    window.ValidatorOnChange = function (event)
    {
        if (!event) 
        {
            event = window.event;
        }

        Page_InvalidControlToBeFocused = null;

        var targetedControl;

        if ((typeof(event.srcElement) != "undefined") && (event.srcElement != null)) 
        {
            targetedControl = event.srcElement;
        }
        else 
        {
            targetedControl = event.target;
        }
        
        if (targetedControl.tagName.toLowerCase() == "label") 
        {
            targetedControl = document.getElementById(targetedControl.htmlFor);     
        }

        var vals = targetedControl.Validators || [];
        
        for (var i = 0; i < vals.length; i++) 
        {
            ValidatorValidate(vals[i], null, event);
        }

        ValidatorUpdateIsValid();
    }
    
});




if(typeof(Sys) !== "undefined")
  Sys.Application.notifyScriptLoaded();
