(function()
{
  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 isMac = uAgent.indexOf('Mac') != -1;
  var isNS7 = uAgent.indexOf('Netscape/7') != -1;
  var isNS71 = uAgent.indexOf('Netscape/7.1') != -1;
  var winLocationHref = window.location.href;
  var winLocationDomain = winLocationHref.replace(/^(https?\:\/\/[^\/\:]+)(\/|\:)?.*$/i, '$1');
  var isWidgetMode = (winLocationHref.indexOf('widget/index.html') != -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.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; if (e.preventDefault) e.preventDefault(); else e.returnValue = false; };
  var $getInnerWidth = function () { return ((isIE) ? ((document.documentElement.clientWidth) ? document.documentElement.clientWidth : document.body.clientWidth) : (($getScrollHeight() > window.innerHeight || $getElementStyle($$('HTML')[0], 'overflowY') == 'scroll') ? window.innerWidth - BonaPage.getScrollBarWidth() : window.innerWidth)) };
  var $getInnerHeight = function () { return ((isIE) ? ((document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.body.clientHeight) : (($getScrollWidth() > window.innerWidth) ? window.innerHeight - BonaPage.getScrollBarWidth() : window.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 c = o.nextSibling; while (c && c.nodeName.toUpperCase() != t.toUpperCase()) c = c.nextSibling; return (c && c.nodeName.toUpperCase() == t.toUpperCase()) ? 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 $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 $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 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 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.getLocationHref = function () { return winLocationHref; };
    BonaPage.getLocationDomain = function () { return winLocationDomain; };
    
    BonaPage.$ = $;
    BonaPage.$$ = $$;
    BonaPage.$bonaObject = $bonaObject;
    BonaPage.reloadCurrentPage = $reloadCurrentPage;
    BonaPage.getUniqueIdentifier = $getUniqueIdentifier;
    BonaPage.addHandler = $addHandler;
    BonaPage.removeHandler = $removeHandler;
    BonaPage.stopEvent = $stopEvent;
    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.setElementOpacity = $setElementOpacity;
    BonaPage.preventPressEnter = $preventPressEnter;
    
    BonaPage.getScrollBarWidth = getScrollBarWidth;
    BonaPage.updateValidators = updateValidators;
    BonaPage.isValidatorValid = isValidatorValid;
    BonaPage.encodeHtml = encodeHtml;
    BonaPage.formatString = formatString;
    
    BonaPage.getDomainList = function () { return domainList; };
    
    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;
    
    setPageState(BonaPage.PAGE_LOADING);
  }
  
  function initBonaPage ()
  {
    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.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();
        //runHacks();
        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();
        //setEmulateMode();
        runPageStateHandlers(BonaPage.PAGE_PARSED);
        //runHacks();        
        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)
  {
    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--;
      }
    }
  }
  
  
  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])
            {
               
              //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';
              BonaPage.dynamicMenuSpanItems[this.id].dynamicMenu.style.visibility = 'hidden';
                   
             window.setTimeout(function()
             {
                var menuTop = BonaPage.dynamicMenuVariables.container.offsetHeight;
                if (!(isIE && isIE == 6))
                {
                    menuTop+=BonaPage.dynamicMenuVariables.container.offsetTop;
                }  
                                 
                BonaPage.dynamicMenuSpanItems[BonaPage.dynamicMenuVariables.container.id].dynamicMenu.style.top = menuTop+'px';
                BonaPage.dynamicMenuSpanItems[BonaPage.dynamicMenuVariables.container.id].dynamicMenu.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';
        }
      }
    }
  }
  
  
  function dynamicMenuDisable()
  {
    BonaPage.dynamicMenuItems.disabled = true;
  }
  
  /* Disabling dynamic menu for Auroras and Transparents */
  if (window.bonaPage_ThemeId != null)
  {
    if (bonaPage_ThemeId.indexOf('Theme21') == -1
        &&
        bonaPage_ThemeId.indexOf('Theme22') == -1
        &&
        bonaPage_ThemeId.indexOf('Theme12') == -1)
    {
      BonaPage.addPageStateHandler(BonaPage.PAGE_PARSED, dynamicMenuLite);
    }
  }
    
  
  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) == 'index.html')
            {
              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 = top.adminpanel;
    }
    catch(e){};
    
    if (adminPanel)
    {
      if (top.adminpanel && top.contentarea && window == top.contentarea && top.contentarea.BonaPage.themeVersion != top.BonaPage.themeVersion &&
          top.BonaEditor && top.BonaEditor.toolbar && top.BonaEditor.toolbar.isObjValid)
      {
        top.BonaPage.themeVersion = top.contentarea.BonaPage.themeVersion;
        top.BonaEditor.toolbar.reInitFormatingDropdown(top.BonaPage.themeVersion.toString() + top.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 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 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;
    });
}


//======================================================================


function TopCacheProvider()
{
    this.Clear = function (key)
    {
        if (!top.cache)
        {
          return;
        }
        
        if (!key)
        {
            top.cache = null;
            top.cache = new Object();
        }
        else
        {
            top.cache[key] = null;
        }
    }
    
    this.Store = function (key, value)
    {
        if (!top.cache)
        {
            top.cache = new Object();
        }
    
        top.cache[key] = value;
    }
    
    this.Contains = function (key)
    {
        return top.cache ? (top.cache[key] ? true : false) : false;
    }
    
    this.Retrive = function (key)
    {
        return top.cache ? top.cache[key] : null;
    }
    
    return this;
}


function CacheItem(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;
}

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.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] == value)
            {
                return i;
            }
        }    
    }
        
    return -1;
}


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, ''); 
}


if(typeof(Sys) !== "undefined")
  Sys.Application.notifyScriptLoaded();