// Overriden functions
ProcessImn = function() {
    if (typeof (ctx) == "undefined") return;
    if (ctx.CurrentUserId == -1) return;
    if (EnsureIMNControl() && IMNControlObj.PresenceEnabled) {
        imnElems = document.getElementsByName("imnmark");
        imnElemsCount = imnElems.length;
        ProcessImnMarkers();
    }
}

var originalMMU_GetMenuFromClientId = window.MMU_GetMenuFromClientId;
var customCreateUrlProcessed = false;
MMU_GetMenuFromClientId = function(clientId) {
    var menu = originalMMU_GetMenuFromClientId(clientId);
    if (customCreateUrlProcessed || !IsMatchingUrlFilters()) return menu;

    try {
        var elements = document.getElementsByTagName("ie:menuitem");
        if (elements) {
            for (var i = 0; i < elements.length; i++) {
                SetMenuItemCustomCreateUrl(elements[i]);
            }
        }
    } catch (e) { }

    customCreateUrlProcessed = true;

    return menu;
}

var originalSTSNavigate = window.STSNavigate;
STSNavigate = function(url) {
    if (!IsMatchingUrlFilters()) {
        originalSTSNavigate(url);
        return;
    }

    var newUrl = GetCreatePageUrlForNewWindow(url);
    if (newUrl == null) {
        originalSTSNavigate(url);
        return;
    }
    window.open(newUrl, 'CreateNewsWindow');
}

var originalAddSharedNamespaceMenuItems = window.AddSharedNamespaceMenuItems;
AddSharedNamespaceMenuItems = function(m, ctx)
{
    originalAddSharedNamespaceMenuItems(m, ctx);
    if (!IsMatchingUrlFilters()) return;

    var elements = document.getElementsByTagName("SPAN");
    if (elements) {
        for (var i = 0; i < elements.length; i++)
        {
            // VT: 19.10.2009 - "ID_EditProperties" in document libraries while "ID_EditItem" in lists
            if (elements[i].id == "ID_EditProperties") SetMenuItemCustomEditUrl(elements[i]);
            if (elements[i].id == "ID_EditItem") SetMenuItemCustomEditUrl(elements[i]);
        }
    }
}

Custom_AddDocLibMenuItems = function(m, ctx) {
  var languages = ["en-us", "sv-se"];
  //if (languages == null || window.languages.length == 0) return false;
  try {
    var currentItemUrl = GetAttributeFromItemTable(itemTable, "Url", "ServerUrl");
    if (!IsMatchingUrlFilters(currentItemUrl) ) return false;
    for (var i = 0; i < languages.length; i++) {
      var re = new RegExp('\.' + languages[i], 'i');
      if (currentItemUrl.match(re) != null ) return false;
      if (itemTable.innerText != null && itemTable.innerText.match(re) != null ) return false;
      if (itemTable.textContent != null && itemTable.textContent.match(re) != null ) return false;
    }
    //if (currentItemUrl.indexOf("'") > -1) currentItemUrl = currentItemUrl.replace("'", "\'");
    for (var i = 0; i < languages.length; i++) {
      var strDisplayText = "Create '" + languages[i] + "' version";
      var strAction = "CreateLocalizedListItem('" + currentItemUrl + "','" + languages[i] + "');";
      var strImagePath = "";
      CAMOpt(m, strDisplayText, strAction, strImagePath);
    }
    CAMSep(m);
  } catch (e) {
    alert(e.message);
  }
  return false;
}

Custom_AddListMenuItems = function(m, ctx) {
  return Custom_AddDocLibMenuItems(m, ctx);
}

var _original_commonShowModalDialog = window.commonShowModalDialog;
commonShowModalDialog = function(url, features, callback, args) {
  if( !IsMatchingUrlFilters2() ) {
    _original_commonShowModalDialog(url, features, callback, args);
    return;
  }
  var isReplaced = false;
  var re = new RegExp('assetimagepicker\\.aspx', 'i');
  if (url.match(re) != null) {
    url = url.replace(re, "finnexpo/FileImageUploader.aspx");
    isReplaced = true;
  }
  if (!isReplaced) {
    var re1 = new RegExp('cmsslwpaddeditlink\\.aspx', 'i');
    if (url.match(re1) != null) {
      url = url.replace(re1, "finnexpo/FileImageUploader.aspx");
      isReplaced = true;
      url = url + (url.indexOf('?') > -1 ? '&' : '?') + "defaultassetimagelocation=~Site/PublishingImages/";
      var re2 = new RegExp('participationid=(\\d+)', 'i');
      if (window.location.href.match(re2) != null) {
        url = url + RegExp.$1;
      } else {
        re2 = new RegExp('participationid%3d(\\d+)', 'i');
        if (window.location.href.match(re2) != null) {
          url = url + RegExp.$1;
        }
      }
    }
  }
  if (isReplaced) {
    features = "resizable:yes;status:no;scroll:yes;help:no;dialogWidth:840px;dialogHeight:720px;";
    var re3 = new RegExp('(lcid=\\d+)', 'i');
    if (window.location.href.match(re3) != null) {
      url = url + (url.indexOf('?') > -1 ? '&' : '?') + RegExp.$1;
    } else {
      re3 = new RegExp('(lcid)%3d(\\d+)', 'i');
      if (window.location.href.match(re3) != null) {
        url = url + (url.indexOf('?') > -1 ? '&' : '?') + RegExp.$1 + "=" + RegExp.$2;
      }
    }
    url += (url.indexOf('?') > -1 ? '&' : '?') + (new Date).getTime(); // This line is required in order to disable dialog page caching 
  }
  _original_commonShowModalDialog(url, features, callback, args);
}

// Internal helpers for overriden functions

IsMatchingUrlFilters = function(url) {
    if (url == null || url.length == 0) url = window.location.href;
    var urlIncludeFilters = new RegExp('((/pressconferences/)|(/exhibitorpressconferences/)|(/uutisettiedotteet/)|(/newsreleasesforexhibitors/)|(/exhibitorpressreleases/)|(/exhibitornewsreleases\.aspx)|(/exhibitorpressconferences\.aspx)|(/ohjelmatiedot/)|(/osaston%20ohjelmaluettelo/)|(/programcatalog\.aspx)|(/programproposals\.aspx))', 'i');
    if (url.match(urlIncludeFilters) == null) return false; // Quit if no matches found

    //var urlExcludeFilters = new RegExp('((/forms/allitems\.aspx))', 'i');
    //if( url.match(urlExcludeFilters) ) return false;	       // Quit if any match found

    return true;
}

IsMatchingUrlFilters2 = function() {
    var url = window.location.href;
    var urlIncludeFilters = new RegExp('^https?\\://((web\\.finnexpo\\.fi)|(www\\.))', 'i');
    if (url.match(urlIncludeFilters) == null) return false; // Quit if no matches found

    return true;
}

GetLocaleOfCurrentSiteOrEmpty = function() {
    var localLocale = "";
    try {
        localLocale = Finnexpo_Global_Locale;
    }
    catch (e) {
        //alert(e.message);
        localLocale = "";
    }
    return localLocale;
}

GetCreatePageUrlForNewWindow = function(rawUrl) {
    if (rawUrl == null) return null;

    var re = new RegExp("((/_layouts/finnexpo/newsrelease.[^'\"]+)|(/_layouts/finnexpo/pressconference.[^'\"]+)|(/_layouts/finnexpo/programproposal.[^'\"]+)|(/_layouts/finnexpo/programannouncement.[^'\"]+))'?", "i");
    if (rawUrl.match(re) == null) {
        return null;
    } else {
        var newUrl = RegExp.$1 + "&WindowTarget=New";

        // use locale of current site
        var locale = GetLocaleOfCurrentSiteOrEmpty();
        if (locale != "") {
            // query string param should be the same as in LanguageHelper
            newUrl = newUrl + "&lcid=" + locale;
        }

        // VT: 26.10.09 - new window should be opened in the context of current SPWeb
        var locRE = new RegExp("^(.*)/[^/]*/Forms/", "i");
        if (window.location.href.match(locRE) != null) {
            newUrl = RegExp.$1 + newUrl;
        }
        return newUrl;
    }
}

SetMenuItemCustomCreateUrl = function(el) {
    var oldHandler = el.getAttribute('onMenuClick');
    if (oldHandler == null) return;

    // get create url
    var newUrl = GetCreatePageUrlForNewWindow(oldHandler);
    if (newUrl == null) return;

    el.setAttribute("onMenuClick", "javascript:window.open('" + newUrl + "', 'CreateNewsWindow');");
    //alert(el.getAttribute('onMenuClick'));
}

SetMenuItemCustomEditUrl = function(el) {
    var oldHandler = el.getAttribute('onMenuClick');
    if (oldHandler == null) return;

    // get edit url
    // VT: 19.10.2009 - "STSNavigateWithCheckoutAlert" in document libraries while "STSNavigate" in lists
    var re = new RegExp("STSNavigateWithCheckoutAlert\\(['\"](.+?)['\"]");
    if (oldHandler.match(re) == null)
    {
        re = new RegExp("STSNavigate\\(['\"](.+?)['\"]");
        if (oldHandler.match(re) == null) return;
    }

    var newUrl = RegExp.$1;
    if (newUrl) {
        newUrl = newUrl + "&WindowTarget=New";

        // use locale of current site
        var locale = GetLocaleOfCurrentSiteOrEmpty();
        if (locale != "") {
            // query string param should be the same as in LanguageHelper
            newUrl = newUrl + "&lcid=" + locale;
        }
        
        el.setAttribute("onMenuClick", "javascript:window.open('" + newUrl + "', 'EditNewsWindow1');");
        //alert(el.getAttribute('onMenuClick'));
    }
}

CreateLocalizedListItem = function(listItemUrl, language) {
  var requestHandler = null;
  if (typeof XMLHttpRequest != "undefined") {
    requestHandler = new XMLHttpRequest();
  } else if (typeof ActiveXObject != "undefined") {
    requestHandler = new ActiveXObject("Microsoft.XMLHTTP");
  } else {
    throw new Error("XMLHttpRequest is not supported");
  }
  try {
    var url = "/_layouts/finnexpo/CreateLocalizedVersion.ashx";
    var params = "url=" + listItemUrl + "&language=" + language;

    requestHandler.open("POST", url, true);
    requestHandler.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    requestHandler.setRequestHeader("Content-length", params.length);

    requestHandler.onreadystatechange = function() {
      if (requestHandler.readyState == 4) {
        if (requestHandler.responseText) {
          var popup = window.open("about:blank", null, "scrollbars=yes,resizable=yes,status=no,toolbar=no,menubar=no,location=no");
          popup.document.open();
          popup.document.write(requestHandler.responseText);
          popup.document.close();
        } else {
          window.location.reload(true);
        }
      }
    }

    window.status = "Processing...";
    requestHandler.send(params);

  } catch (e) {
    alert(e.message);
  }
}

