function SetCookie ( name, value, expires, path, domain, secure ) {
   var exp_date = new Date ( expires );
   var cur_cookie =  name + "="+ escape ( value ) +
                     ( (expires) ? "; expires="+ exp_date.toGMTString() : "") +
                     ( (path) ? "; path="+ path : "") +
                     ( (domain) ? "; domain="+ domain : "") +
                     ( (secure) ? "; secure": "");

   document.cookie = cur_cookie;
}

var editors = [];
var editor_id;
var templates = {
   'menu'       : 1,
   'menu_en'    : 1,
   'address'    : 1,
   'address_en' : 1
};

tinyMCE.init({
   mode : "none",
   theme : "advanced",
   plugins : "save, table, contextmenu, paste, preview, advhr, advimage, advlink, style",
   theme_advanced_buttons1_add : "separator, preview, save",
   theme_advanced_buttons2_add : "separator,forecolor,backcolor,liststyle,separator,styleprops",
   theme_advanced_buttons3 : "tablecontrols",
   theme_advanced_disable: "help,formatselect",
   theme_advanced_toolbar_location : "top",
   theme_advanced_statusbar_location: "top",
   theme_advanced_toolbar_align : "left",
   theme_advanced_resizing: "true",
   content_css : "/cms/css/styles.css",
   theme_advanced_styles : "Title=title; Header 1=heading-large;Header 2=heading-medium; Header 3=heading-small; Paragraph=paragraph; Link=publication; Menu item=menu_link; Submenu item=submenu_link",
   file_browser_callback : "ajaxfilemanager",
   save_callback: "customSave",
   cleanup_on_startup : true,
   cleanup: true,
   convert_urls: false,
   inline_styles: true,
   extended_valid_elements : "hr[class|width|size|noshade], a[name|href|target|title|onclick]",
   cleanup_callback: "myCleanup"
});

function myCleanup(type, value) {
   switch (type) {
      case "get_from_editor":
         value = value.replace(/<p class="paragraph">*&nbsp;*<\/p>/gim, '');
         value = value.replace(/<\/a><br \/><br \/>/gim, '');
         value = value.replace(/<\/ul><br \/><\/li>/gim, '</ul></li>');
         if (editor_id == 'menu') {
            value = value.replace(/<br \/>/gim, '');
            value = value.replace(/style=".*?"/gim, '');
            return value;
         }
         break;
      case "insert_to_editor":
         value = value.replace(/<p class="paragraph">*&nbsp;*<\/p>/gim, '');
         value = value.replace(/<\/a><br \/><br \/>/gim, '');
         value = value.replace(/<\/ul><br \/><\/li>/gim, '</ul></li>');
         if (editor_id == 'menu') {
            value = value.replace(/<br \/>/gim, '');
            value = value.replace(/style=".*?"/gim, '');
            alert(value);
            return value;
         }
         break;
      case "get_from_editor_dom":
         break;
      case "insert_to_editor_dom":
         break;
   };
   return value;
}

function ajaxfilemanager(field_name, url, type, win) {
   var ajaxfilemanagerurl = "../../../../scripts/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php";
   switch (type) {
      case "image":
         ajaxfilemanagerurl += "?type=img";
         break;
      case "media":
         ajaxfilemanagerurl += "?type=media";
         break;
      case "flash": //for older versions of tinymce
         ajaxfilemanagerurl += "?type=media";
         break;
      case "file":
         ajaxfilemanagerurl += "?type=files";
         break;
      default:
         return false;
   }
   var fileBrowserWindow = new Array();
   fileBrowserWindow["file"] = ajaxfilemanagerurl;
   fileBrowserWindow["title"] = "Ajax File Manager";
   fileBrowserWindow["width"] = "782";
   fileBrowserWindow["height"] = "440";
   fileBrowserWindow["close_previous"] = "no";
   tinyMCE.openWindow(fileBrowserWindow, {
      window : win,
      input : field_name,
      resizable : "yes",
      inline : "yes",
      editor_id : tinyMCE.getWindowArg("editor_id")
   });

   return false;
}

function toggleEditor(id) {
   var elm = document.getElementById(id);
   var init_height = elm.style.height;
   /* Give some vertical space */
   elm.style.height = elm.offsetHeight + 100;
   /* toggle the editor */
   if (tinyMCE.getInstanceById(id) == null) {
            tinyMCE.execCommand('mceAddControl', false, id);
   } else {
      tinyMCE.execCommand('mceRemoveControl', false, id);
   }
   /* Return height to initial value */
   elm.style.height = init_height;
}

function xmlHttpRequest() {
   var xmlhttp = null; // Pessimistic...
   try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
      try {
         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
         xmlhttp = null;
      }
   }

   if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
      try {
         xmlhttp = new XMLHttpRequest();
      } catch (e) {
         xmlhttp = null;
      }
   }

   if (!xmlhttp && window.createRequest) {
      try {
         xmlhttp = window.createRequest();
      } catch (e) {
         xmlhttp = null;
      }
   }
   return xmlhttp;
}

function customSave(id, content) {
   /* Store the current editor */
   editor_id  = id;
   if (id != 'address') {
      content    = content.replace(/<p>/g, '<p class="paragraph">');
      if (id == 'menu') {
            content = content.replace(/<br \/>/gim, '');
            content = content.replace(/style=".*?"/gim, '');
            SetCookie("cur",0);
      }
   } else {
      content    = content.replace(/<p>/g, '');
      content    = content.replace(/<\/p>/g, '');
   }
   var page   = getPage();
   var params = "p="  + encodeURIComponent(page) + '&' +
                ((id in templates) ? "act=saveTm&" : "act=saveEl&") +
                "el=" + encodeURIComponent(id) + '&' +
                "c="  + encodeURIComponent(content);
   var req  = xmlHttpRequest();
   req.onreadystatechange = function() {
      if(req.readyState == 4) {
         var status;
         // Handle getting the status carefully, as FF is likely to throw an
         // exception in case of network error (or timeout)
         try {
            status = req.status;
         } catch (e) {
            /* The request failed due to a network error -- FF specific */
            assert(false, "Exception while trying to retrieve request status");
         }
         toggleEditor(editor_id);
         if (status == 200) {
         }
      }
   }
   req.open("POST", "/cgi-bin/cms.cgi", true);
   req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   req.send(params);
}

function getPage() {
   var query = window.location.search;
   var args = query.split('&');
   var page = args[0].split('=');
   return page[1];
}


