
      var DOMLoaded = false;
      document.observe('dom:loaded', function(){
        DOMLoaded = true;
      });

      function __tip(message)
      {
        if (DOMLoaded)
        {
          Tip(message, BALLOON, true, ABOVE, true, OFFSETX, -10, WIDTH, 240, TEXTALIGN, 'justify', FADEIN, 300, FADEOUT, 300, PADDING, 8);
        }
      }
      
      function __mps(text)
      {
        if (text && text.indexOf)
        {
          if (text.indexOf('/') > -1)
          {
            text = text.replace(/\//g, '{{SLASH}}');
          }
          if (text.indexOf('&') > -1)
          {
            text = text.replace(/\&/g, '{{ANDAMP}}');
          }
          if (text.indexOf('&') > -1)
          {
            text = text.replace(/\+/g, '{{PLUS}}');
          }
        }
        return text;
      }

      function __fnMakeUpdateCall(type, method, params, onComplete)
      {
        __fnMakeCustomUpdateCall('/__service/' + type + '/' + method + '/default.aspx', 'POST', '__ServiceParameters=' + params, null, onComplete);
      }

      function __fnMakeCustomUpdateCall(url, verb, body, context, onComplete)
      {
        var wRequest;
        wRequest = new Sys.Net.WebRequest();
        wRequest.set_url(url);
        wRequest.set_httpVerb(verb);
        wRequest.set_body(body);
        if (onComplete != null)
        {
          wRequest.add_completed(onComplete);
        }
        if (context != null)
        {
          wRequest.set_userContext(context);
        }

        var executor;
        executor = new Sys.Net.XMLHttpExecutor();
        wRequest.set_executor(executor); 
        executor.executeRequest();
      }

      function __fnGetServiceResponse(type, method, params)
      {
        var wRequest;
        wRequest = new Sys.Net.WebRequest();
        wRequest.set_url('/__service/' + type + '/' + method + '/default.aspx');
        wRequest.set_httpVerb('POST');
        wRequest.set_body('__ServiceParameters=' + params);
        var executor;
        executor = new Sys.Net.XMLHttpExecutor();
        wRequest.set_executor(executor); 
        executor.executeRequest();
        while (!executor.get_responseAvailable())
        {
        }
        return executor.get_responseData();
      }

      function realCMS__DataObjectSave(id, dataObjectType, collectionID, onSaveMethod, userVersion, extraInfoID, fieldNames, formIDs, types)
      {
        var fields = fieldNames.split('|');
        var ids = formIDs.split('|');
        var fieldTypes = types.split('|');
        var params = 'DataObjectID=' + id + '/DataObjectType=' + dataObjectType + '/DataObjectCollectionID=' + collectionID + '/UserVersion=' + userVersion + '/OnSaveMethod=' + onSaveMethod + '/CreateNotifications=' + $get('cn_' + extraInfoID).value + '/';
        
        for (var i = 0; i < ids.length; i++)
        {
          if (fieldTypes[i] != '')
          {
            var v = realCMS__DataObjectGetValue(fieldTypes[i], ids[i]);
            if (v.indexOf != null && v.indexOf != 'undefined')
            {
              v = __mps(v);
            }
            params += fields[i] + '=' + v + '/';
          }
        }

        __fnMakeUpdateCall('RealCMS.Core.DataObjectEditor', 'DataObjectSave', params, null);
      }
      
      function realCMS__DataObjectGetValue(type, field)
      {
        var v = '';
        switch (type)
        {
          case 'TextBox':
          case 'Password':
          case 'TextArea':
          case 'ImageSelector':
          case 'Page':
          case 'PageList':
          case 'GroupList':
          case 'PageSelector':
          case 'MultiPageSelector':
          case 'UserList':
          case 'ColourPicker':
          
            if (type == 'Page' || type == 'PageList' || type == 'PageSelector' || type == 'MultiPageSelector')
            {
              field += '_selectedPages';
            }
            
            if (document.getElementById(field))
            {
              v = document.getElementById(field).value;
            }
          
            break;
          case 'HTML':

            try
            {
              var oEditor = FCKeditorAPI.GetInstance(field);
              if (oEditor != null)
              {
                v = oEditor.GetHTML();
              }
            }
            catch(e) { }
          
            break;
            
          case 'DropDown':
          case 'DynamicDropDown':
          case 'LanguagePicker':
        
            v = Form.Element.getValue(field);
            
            break;
          case 'Date':
                var vDateField = $find(field);
                if (vDateField)
                {
                  v = vDateField.get_selectedDate();
                  try
                  {
                    v = v.format('dd-MM-yyyy');
                  }
                  catch(e) {}
                }
            break;
          case 'Checkbox':
            if (document.getElementById(field).checked)
            {
               v = 'true';
            }
            else
            {
              v = 'false';
            }
            break;
        }
        return v;
      }
      
      function realCMS__DataObjectSetValue(ctlType, ctlID, ctlValue)
      {
          switch (ctlType)
          {
            case 'TextBox':
            case 'Password':
            case 'TextArea':
            case 'ImageSelector':
            case 'ColourPicker':
            
              if (document.getElementById(ctlID))
              {
                document.getElementById(ctlID).value = ctlValue;
              }
              
              if (ctlType == 'ImageSelector')
              {
                GetSelectedImageHTML(ctlID + '_c');
              }
            
              break;
            case 'HTML':

              try
              {
                var oEditor = FCKeditorAPI.GetInstance(ctlID);
                if (oEditor != null)
                {
                  oEditor.SetHTML(ctlValue);
                }
              }
              catch(e) { }
            
              break;
              
            case 'DropDown':
            case 'DynamicDropDown':
            case 'LanguagePicker':
              
              var ddl = document.getElementById(ctlID);
              
              if (ctlType == 'DynamicDropDown')
              {
                ddl.options.length = 0;
                var dynamicIter = 0;
                var dynamicOptions = ctlValue.split('}}|{{');
                for (dynamicIter = 0; dynamicIter < dynamicOptions.length; dynamicIter++)
                {
                  if (dynamicIter == (dynamicOptions.length - 1))
                  {
                    break;
                  }
                  var dynOpt = new Option(dynamicOptions[dynamicIter + 1], dynamicOptions[dynamicIter]);
                  ddl.options[ddl.options.length] = dynOpt;
                  dynamicIter++;
                }
                ctlValue = dynamicOptions[dynamicIter];
              }
              
              Form.Element.setValue(ctlID, ctlValue);
              
              break;
            case 'Date':
                if (ctlValue != '')
                {
                  var vDateField = $find(ctlID);
                  if (vDateField)
                  {
                    vDateField.set_selectedDate(ctlValue);
                  }
                }
              break;
            case 'Checkbox':
              if (document.getElementById(ctlID))
              {
                if (ctlValue == 'true')
                {
                  document.getElementById(ctlID).checked = true;
                }
                else
                {
                  document.getElementById(ctlID).checked = false;
                }
              }
              break;
            case 'DataObjectCollection':
              try
              {
                eval("__dataObjectCollectionEditorInit_" + ctlID + "('" + ctlValue + "')");
              }
              catch(e) { }
              break;
            case 'Page':
            case 'PageList':
            case 'PageSelector':
            case 'MultiPageSelector':
              ctlID += '_selectedPages';
              $get(ctlID).value = ctlValue;
              eval('__rcmsPageSelectorUpdate(\'' + ctlID + '\')');
              break;
            case 'GroupList':
              $get(ctlID).value = ctlValue;
              eval('__rcmsGroupSelectorUpdate(\'' + ctlID + '\')');
              break;
            case 'UserList':
              $get(ctlID).value = ctlValue;
              eval('__rcmsUserSelectorUpdate(\'' + ctlID + '\')');
              break;
          }
      }

      function realCMS__DataObjectEditInit(data)
      {
        var splitData = data.split('}}{{');
        for (var i = 0; i < splitData.length; i++)
        {
          var ctlID = splitData[i];
          var ctlType = splitData[i+1];
          var ctlValue = splitData[i+2];
          
          realCMS__DataObjectSetValue(ctlType, ctlID, ctlValue);

          i = i + 2;
        }
      }
      
      function __updateDialogPos(id, width, fillPage)
      {
        if ($get(id))
        {
          $get(id).style.position = 'absolute';
          $get(id).style.zIndex = ($get(id + '_d') != null && $get(id + '_d').value == '1' ? '600' : '800');

          if (fillPage)
          {
            $get(id + '_in').style.width = Math.ceil(parseInt(vpWidth * 0.96)) + 'px';
            $get(id).style.width = Math.ceil(parseInt(vpWidth * 0.96)) + 'px';
            $get(id + '_in').style.height = Math.ceil(parseInt(vpHeight * 0.8)) + 'px';
            $get(id).style.top = '1%';
            $get(id).style.left = '1%';
          }
          else
          {
            if (parseInt(width) > 0)
            {
              $get(id).style.width = width + 'px';
            }
            
            if ($get(id + '_x'))
            {
              $get(id).style.left = $get(id + '_x').value + 'px';
            }
            else
            {
              $get(id).style.left = Math.floor((vpWidth - parseInt(width)) / 2) + 'px';
            }
            
            if ($get(id + '_y'))
            {
              $get(id).style.top = $get(id + '_y').value + 'px';
            }
            else
            {
              $get(id).style.top = (parseInt(parseInt(document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop)) + 50) + 'px';
            }
          }
          $get(id).style.display = 'none';
        }
      }

		  function __tmlSaveOrder(listid, type, method, pageid, zoneid)
      {
        if ($get('__' + listid + '_moduleOrder').value != Sortable.serialize(listid))
        {
          __fnMakeUpdateCall(type, method, 'PageID=' + pageid + '/ZoneID=' + zoneid + '/Order=' + __mps(Sortable.serialize(listid)) + '/', null)
          $get('__' + listid + '_moduleOrder').value = Sortable.serialize(listid);
        }
	    }
      
      function realCMS__ShowShade(shadeID)
      {
        var scrollTop = parseInt(document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
        $get(shadeID).style.height = (parseInt(screen.height) + scrollTop) + 'px';
        $get(shadeID).style.width = '100%';
        $get(shadeID).style.left = '0px';
        $get(shadeID).style.display = 'block';
      }
    
      var vpWidth, vpHeight;

      if (window.innerWidth)
      {
        vpWidth = window.innerWidth;
        vpHeight = window.innerHeight;
      }
      else if (document.documentElement && document.documentElement.clientWidth)
      {
        vpWidth = document.documentElement.clientWidth;
        vpHeight = document.documentElement.clientHeight;
      }
      else
      {
        if (document.getElementsByTagName('body')[0])
        {
          vpWidth = document.getElementsByTagName('body')[0].clientWidth;
          vpHeight = document.getElementsByTagName('body')[0].clientHeight;
        }
      }
      
      function rcms__GetWindowScrollTop()
      {
        var y;
        if (self.pageYOffset)
        {
	        y = self.pageYOffset;
        }
        else if (document.documentElement && document.documentElement.scrollTop)
        {
	        y = document.documentElement.scrollTop;
        }
        else if (document.body)
        {
	        y = document.body.scrollTop;
        }
        return y;
      }
      
      function rcms__GetWindowScrollLeft()
      {
        var x;
        if (self.pageYOffset)
        {
	        x = self.pageXOffset;
        }
        else if (document.documentElement && document.documentElement.scrollTop)
        {
	        x = document.documentElement.scrollLeft;
        }
        else if (document.body)
        {
	        x = document.body.scrollLeft;
        }
        return x;
      }
    
      document.observe('dom:loaded', function(){
        $get('realCMS__EditorShade').style.width = vpWidth + 'px';
        $get('realCMS__EditorShade').style.height = vpHeight + 'px';
        
        if (typeof(AjaxControlToolkit) !== 'undefined')
        {
          try { AjaxControlToolkit.Animation.OpacityAction.play($get('realCMS__EditorShade'), 0.1, 1, 0.8); }
          catch (e) { }
        }
      });
      