/*

 * SocialEngineMods Apps v3.14

 * http://www.SocialEngineMods.Net

 *

 * Copyright SocialEngineMods.Net

 * This code is NOT an open source

 *

 */





Array.prototype.in_array = function(p_val) {

  for (var i = 0, l = this.length; i < l; i++) {

    if (this[i] == p_val) {

      return true

    }

  }

  return false

}

function semods_add_row(name, id) {

  if (typeof id == 'undefined') id = '';

  var el = document.getElementById(name + '_template').cloneNode(true);

  el.id = id;

  var moreRow = document.getElementById(name + "_addmorerow");

  moreRow.parentNode.insertBefore(el, moreRow);

  return el

}

if (SEMods.Browser.isIE || SEMods.Browser.isOpera) {

  document.getElementsByName = function(name, tag) {

    if (!tag) {

      tag = '*'

    }

    var elems = document.getElementsByTagName(tag);

    var res = []

    for (var i = 0; i < elems.length; i++) {

      att = elems[i].getAttribute('name');

      if (att == name) {

        res.push(elems[i])

      }

    }

    return res

  }

}

function hideMenuEx() {

  if ($(open_menu)) {

    hideMenu($(open_menu));

    open_menu = ''; // SE bug

  }

}

function apps_open_support_ticket(subject, message) {

  var form = document.createElement("FORM");

  form.action = "admin_semods_support.php";

  form.method = "POST";

  form.encoding = "multipart/encoded";

  var elem = document.createElement("INPUT");

  elem.type = "text";

  elem.name = "subject";

  elem.value = escape(subject);

  form.appendChild(elem);

  elem = document.createElement("INPUT");

  elem.type = "text";

  elem.name = "message";

  elem.value = escape(message);

  form.appendChild(elem);

  elem = document.createElement("INPUT");

  elem.type = "text";

  elem.name = "fresh";

  elem.value = 1;

  form.appendChild(elem);

  document.body.appendChild(form);

  form.submit()

}

function apps_notify_new_messages() {

  var elems = document.getElementsByTagName("A");

  for (var i = 0; i < elems.length; i++) {

    if (elems[i].href.match(/admin_apps_messages.php/)) {

      elems[i].style['backgroundColor'] = "#FFF4A5";

      break

    }

  }

}

function apps_menu_moreapps_onclick() {

  var apps = SEMods.B.ge("menu_dropdown_apps");

  var moreapps = SEMods.B.ge("menu_dropdown_moreapps");

  if (moreapps) {

    moreapps.style.left = SEMods.B.findX(apps) + 20 + 'px';

    moreapps.style.top = SEMods.B.findY(apps) - 6 + 'px';

    showMenu("menu_dropdown_moreapps")

  }

}

function apps_menu_main_more() {

  var position_elem = null;

  elems = document.getElementsByTagName("A");

  for (var i = 0; i < elems.length; i++) {

    if ((elems[i].className == 'top_menu_item') && elems[i].href.match(/javascript:apps_menu_main_more/)) {

      position_elem = elems[i];

      break

    }

  }

  if (!position_elem) return;

  position_elem.blur();

  position_elem = position_elem.parentNode.parentNode;

  var moreapps = SEMods.B.ge("menu_main_more_apps");

  if (moreapps) {

    ff_offset = SEMods.B.isFireFox ? 0 : 1;

    moreapps.style.left = SEMods.B.findX(position_elem) + 'px';

    moreapps.style.top = SEMods.B.findY(position_elem) + ff_offset + 'px';

    showMenu("menu_main_more_apps")

  }

}

function app_show_profile_onClick(app_id) {

  SEMods.B.hide("app_show_conf");

  SEMods.B.show("app_show_progress");

  SEMods.Apps.placeApp(app_id, SEMods.B.ge("app_show_profile").checked * 1, 1, 0, app_show_updated)

}

function app_show_userhome_onClick(app_id) {

  SEMods.B.hide("app_show_conf");

  SEMods.B.show("app_show_progress");

  SEMods.Apps.placeApp(app_id, SEMods.B.ge("app_show_userhome").checked * 1, 2, 0, app_show_updated)

}

function app_show_updated() {

  SEMods.B.hide("app_show_progress");

  SEMods.B.show("app_show_conf")

}

function apps_uninstall(app_id, page_id, view_id) {

  SEMods.Apps.removeApp(app_id, page_id, view_id);

  SEMods.B.hide('approw_' + app_id)

}

function apps_settings(app_id) {

  apps_settings_current_tab = '1';

  mooFaceboxExShow("", "user_apps_settings.php?id=" + app_id + "", 370)

}

var apps_settings_current_tab = '1';

function apps_settings_tab(tab_id) {

  SEMods.B.ge("settings_tab_" + apps_settings_current_tab).className = 'tab2';

  SEMods.B.hide("settings_content_" + apps_settings_current_tab);

  SEMods.B.show("settings_content_" + tab_id);

  SEMods.B.ge("settings_tab_" + tab_id).className = 'tab1';

  apps_settings_current_tab = tab_id

}

function apps_settings_placement_onChange(elem, app_id, page_id, view_id) {

  SEMods.Apps.ProfileDragDrop.page_id = 0;

  SEMods.Apps.ProfileDragDrop.view_id = 0;

  switch (elem.value) {

  case "tabs":

    apps_settings_placement_move_to(app_id, page_id, view_id, "tabs", 0);

    break;

  case 'apptab':

    apps_settings_placement_move_to(app_id, page_id, view_id, "apptab", 0);

    break;

  case 'sidebar':

    apps_settings_placement_move_to(app_id, page_id, view_id, "root", 0);

    break;

  case 'widebar':

    apps_settings_placement_move_to(app_id, page_id, view_id, "root", 1);

    break

  }

}

function apps_settings_placement_move_to(app_id, page_id, view_id, container, stripe) {

  SEMods.B.show("app_placement_progress");

  var ajax = new SEMods.Ajax(apps_settings_placement_move_to_onSuccess, apps_settings_placement_move_to_onFail);

  var params = 'task=movetocontainer&pid=' + page_id + '&vid=' + view_id + '&appid=' + app_id + '&container=' + container + '&stripe=' + stripe;

  ajax.post(SEMods.Apps.ProfileDragDrop.api_endpoint, params)

}

function apps_settings_placement_move_to_onSuccess() {

  SEMods.B.hide("app_placement_progress")

}

function apps_settings_placement_move_to_onFail() {

  SEMods.B.hide("app_placement_progress")

}

function apps_show_error_message(error_message) {

  if (typeof error_message == 'undefined') error_message = '';

  elem = SEMods.B.ge("apps_error_message_div");

  if (!elem) {

    return

  }

  if (error_message && (error_message != '')) {

    elem.innerHTML = error_message

  }

  mooFaceboxExShow("", "#apps_error_message_div")

}

function apps_inplace_edit(app_id) {

  hideMenuEx();

  SEMods.Apps.ProfileDragDrop.editContent(app_id)

}

function apps_edit_box(app_id) {

  hideMenuEx();

  SEMods.Apps.ProfileDragDrop.editContent(app_id)

}

function apps_get_appbox(app_id) {

  if (app_id.indexOf('_') != -1) {

    app_id = app_id.split('_')[1]

  }

  appbox = SEMods.B.ge('app_' + app_id);

  if (!appbox) appbox = SEMods.B.ge('core_' + app_id);

  if (!appbox) appbox = SEMods.B.ge('plugin_' + app_id);

  if (!appbox) appbox = SEMods.B.ge('widget_' + app_id);

  return appbox

}

function app_boxdialog(app_id, position) {

  if (app_id.indexOf('_') != -1) {

    app_id = app_id.split('_')[1]

  }

  box = SEMods.B.ge("appsettings_app_" + app_id);

  appbox = apps_get_appbox(app_id);

  var top = SEMods.B.findY(appbox);

  var left = SEMods.B.findX(appbox) + appbox.offsetWidth - 1;

  box.style.left = -9999 + 'px';

  box.style.top = -9999 + 'px';

  showMenu("appsettings_app_" + app_id);

  if ((left + box.offsetWidth) > document.body.offsetWidth) {

    left -= box.offsetWidth;

    box.className = "apps_settingsbox1"

  }

  box.style.left = left + 'px';

  box.style.top = top + 'px';

  showMenu("appsettings_app_" + app_id)

}

function app_tabdialog(app_id) {

  box = SEMods.B.ge("appsettings_" + app_id);

  appbox = SEMods.B.ge(app_id);

  if (!appbox || !box) return;

  do {

    appbox = appbox.previousSibling

  } while ( appbox . nodeType != 1 ) var left = SEMods.B.findX(appbox) + appbox.offsetWidth - 10;

  var top = SEMods.B.findY(appbox) - 1 + 3;

  box.style.left = left + 'px';

  box.style.top = top + 'px';

  showMenu("appsettings_" + app_id)

}

function apps_show_grip_item(app_id, app_name, tabs_type, apps_show_grip_item_callback) {

  if (typeof tabs_type == 'undefined') tabs_type = 'profile';

  if (typeof apps_show_grip_item_callback == 'undefined') apps_show_grip_item_callback = loadProfileTab;

  var elems = document.getElementsByName(tabs_type+"_tabs_wrap", "TD");

  for (var i = elems.length - 1; i >= 0; i--) {

    if (elems[i].style.display != 'none') {

      elems[i].style.display = 'none';

      break

    }

  }

  try {

    hideMenu(SEMods.B.ge("tabs_grip"));

    open_menu = ''; // SE bug

  } catch(ex) {}

  SEMods.B.ge(tabs_type+"_tabs_wrap_" + app_name).style.display = '';

  //loadProfileTab(app_name)

  apps_show_grip_item_callback(app_name);

}

function appbox_uninstall(app_id) {

  clean_app_id = app_id;

  if (app_id.indexOf('_') != -1) {

    clean_app_id = app_id.split('_')[1]

  }

  hideMenu(SEMods.B.ge("appsettings_app_" + clean_app_id));

  open_menu = ''; // SE bug

  SEMods.Apps.ProfileDragDrop.removeApp(app_id);

  appbox = apps_get_appbox(app_id);

  SEMods.B.hide(appbox)

}

function apps_removebox(app_id) {

  clean_app_id = app_id;

  if (app_id.indexOf('_') != -1) {

    clean_app_id = app_id.split('_')[1]

  }

  try {

    hideMenu(SEMods.B.ge("appsettings_app_" + clean_app_id))

    open_menu = ''; // SE bug

  } catch(ex) {};

  SEMods.Apps.ProfileDragDrop.removeBox(app_id);

  appbox = apps_get_appbox(app_id);

  SEMods.B.hide(appbox)

}

function appbox_moveto_sidebar(app_id) {

  clean_app_id = app_id;

  if (app_id.indexOf('_') != -1) {

    clean_app_id = app_id.split('_')[1]

  }

  SEMods.B.hide("appsettings_app_" + clean_app_id);

  SEMods.B.hide("appsettings_app_" + clean_app_id + "_moveto_sidebar");

  SEMods.B.show("appsettings_app_" + clean_app_id + "_moveto_apptab");

  SEMods.Apps.ProfileDragDrop.moveToContainer(app_id, "root", 0);

  loadProfileTab("profile")

}

function appbox_moveto_apptab(app_id) {

  clean_app_id = app_id;

  if (app_id.indexOf('_') != -1) {

    clean_app_id = app_id.split('_')[1]

  }

  SEMods.B.hide("appsettings_app_" + clean_app_id);

  SEMods.B.show("appsettings_app_" + clean_app_id + "_moveto_sidebar");

  SEMods.B.hide("appsettings_app_" + clean_app_id + "_moveto_apptab");

  SEMods.Apps.ProfileDragDrop.moveToContainer(app_id, "apptab", 0);

  SEMods.B.ge("profile_tabs_wrap_apps").style.display = '';

  loadProfileTab("apps")

}

function apps_add_totab_dialog() {

  box = $('add_to_tab');

  appbox = $('profile_tabs_add');

  if((box == null) || (appbox == null)) {

    return;

  }

  var left = SEMods.B.findX(appbox) + appbox.clientWidth - 5;

  var top = SEMods.B.findY(appbox);

  box.style.left = left + 'px';

  box.style.top = top + 'px';

  showMenu("add_to_tab")

}

function apps_tab_grip_dialog() {

  box = $('tabs_grip');

  appbox = $('profile_tabs_grip');

  if((box == null) || (appbox == null)) {

    return;

  }

  var left = SEMods.B.findX(appbox) + appbox.clientWidth - 4;

  var top = SEMods.B.findY(appbox);

  box.style.left = left + 'px';

  box.style.top = top + 'px';

  showMenu("tabs_grip")

}

function appbox_moveto_tab(app_id) {

  hideMenu(SEMods.B.ge("add_to_tab"));

  open_menu = ''; // SE bug

  SEMods.Apps.ProfileDragDrop.moveBoxToTabs(app_id)

}

function appbox_remove_from_tab(app_id) {

  hideMenu(SEMods.B.ge("appsettings_" + app_id));

  open_menu = ''; // SE bug

  SEMods.Apps.ProfileDragDrop.removeBoxFromTabs(app_id)

}

function apps_cancelEvent(e) {

  var e = e ? e: window.event;

  if (e.preventDefault) e.preventDefault();

  if (e.stopPropagation) e.stopPropagation();

  e.cancelBubble = true;

  e.returnValue = false;

  return false

}

function apps_tab_editor(page_id, view_id) {

  TBEX_show('Rearrange Tabs', 'user_apps_tabeditor.php?pid='+page_id+'&vid=' + view_id + '&TBEX_iframe=true&height=500&width=300', '', '', 1, apps_tab_editor_close_callback)

}

function apps_tab_editor_close_callback() {

  document.location = document.location;

}

SEMods.Apps = function() {};

SEMods.Apps = {

  api_endpoint: 'ajax_semods_apps.php?',

  api_content_endpoint: 'appcontent.php?',

  app_url: '',

  removeApp: function(app_id, page_id, view_id) {

    var ajax = new SEMods.Ajax();

    var params = 'task=removeapp' + '&appid=' + app_id;

    if (typeof page_id != 'undefined') params += '&pid=' + page_id;

    if (typeof view_id != 'undefined') params += '&vid=' + view_id;

    ajax.post(this.api_endpoint, params)

  },

  placeApp: function(app_id, show, page_id, view_id, placeApp_callback) {

    if (typeof view_id == 'undefined') view_id = 0;

    if (show == 0) task = 'removebox';

    else task = 'placeapp';

    new SEMods.Apps.AppPlacer(task, app_id, page_id, view_id, placeApp_callback)

  },

  hideNotification: function(id) {

    SEMods.B.hide("appnotify_" + id);

    var ajax = new SEMods.Ajax();

    ajax.post(this.api_endpoint, 'task=hidenotification' + '&notificationid=' + id)

  },

  cleanAppId: function(app_id) {

    clean_app_id = app_id;

    if (app_id.indexOf('_') != -1) {

      clean_app_id = app_id.split('_')[1]

    }

    return clean_app_id

  },

  register_on_drop: function(app_id, callback) {

    return SEMods.Apps.ProfileDragDrop.register_callback(app_id, "onDrop", callback)

  },

  register_on_ajax_load: function(app_id, callback) {

    return SEMods.Apps.ProfileDragDrop.register_callback(app_id, "onAjaxLoad", callback)

  },

  get_stripe_type: function(container, stripe) {

    return SEMods.Apps.ProfileDragDrop.getStripeType(container, stripe)

  }

};

SEMods.Apps.Language = function() {};

SEMods.Apps.Language = {}

SEMods.Apps.Tabs = function() {};

SEMods.Apps.Tabs = {

  instance: 'apps_tab1',

  visible_tab: '',

  full_screen: false,

  full_screen_exclude: ["profile", "friends", "comments"],

  loadProfileTab: function(tabId, tabBase, full_screen) {

    if (typeof full_screen == 'undefined') full_screen = this.full_screen;

    if (full_screen) {

      if (document.getElementById(tabBase + "_leftside")) {

        if (this.full_screen_exclude.in_array(tabId)) {

          document.getElementById(tabBase + "_leftside").style.display = ""

        } else {

          document.getElementById(tabBase + "_leftside").style.display = "none"

        }

      }

    }

    if (this.visible_tab == '') {

      var elems = document.getElementsByName(tabBase + "_tabs_wrap", "TD");

      if (elems.length > 0) {

        guess_tab_id = elems[0].id;

        guess_tab_id = guess_tab_id.substring(18);

        this.visible_tab = guess_tab_id

      }

    }

    if (tabId == this.visible_tab) {

      return false

    }

    if (elem = SEMods.B.ge(tabBase + '_tabs_' + tabId)) {

      cells = elem.getElementsByTagName("TD");

      for (i = 0; i < cells.length; i++) {

        if (cells[i].className == "apps_tabsetting") {

          SEMods.B.show(cells[i]);

          cells[i].parentNode.parentNode.parentNode.className = "apps_activetab";

          break

        }

      }

    }

    if (elem = SEMods.B.ge(tabBase + '_tabs_' + this.visible_tab)) {

      cells = elem.getElementsByTagName("TD");

      for (i = 0; i < cells.length; i++) {

        if (cells[i].className == "apps_tabsetting") {

          SEMods.B.hide(cells[i]);

          cells[i].parentNode.parentNode.parentNode.className = "apps_inactivetab";

          break

        }

      }

    }

    if ($(tabBase + '_' + tabId)) {

      $(tabBase + '_tabs_' + tabId).className = this.instance + '2';

      $(tabBase + '_' + tabId).style.display = "block";

      if ($(tabBase + '_tabs_' + this.visible_tab)) {

        $(tabBase + '_tabs_' + this.visible_tab).className = this.instance;

        $(tabBase + '_' + this.visible_tab).style.display = "none"

      }

      this.visible_tab = tabId

    }

  }

}

SEMods.Apps.AppPlacer = function(task, app_id, page_id, view_id, placeApp_callback) {

  this.app_id = app_id;

  this.page_id = page_id;

  this.view_id = view_id;

  this.placeApp_callback = placeApp_callback;

  this.init(task)

};

SEMods.Apps.AppPlacer.prototype = {

  app_id: '',

  init: function(task) {

    clean_app_id = SEMods.Apps.cleanAppId(this.app_id);

    var ajax = new SEMods.Ajax(this.onSetPagePlacementSuccess.bind(this), this.onSetPagePlacementFail.bind(this));

    var params = 'task=' + task + '&pid=' + this.page_id + '&vid=' + this.view_id + '&appid=' + clean_app_id + '&user=' + SEMods.Apps.ProfileDragDrop.owner;

    ajax.post(SEMods.Apps.api_endpoint, params)

  },

  onSetPagePlacementSuccess: function(obj, responseText) {

    var r = [];

    try {

      r = eval('(' + responseText + ')')

    } catch(e) {

      r.status = 1

    };

    if (r.status == 0) {

      if (this.placeApp_callback) this.placeApp_callback(this.app_id)

    } else {

      apps_show_error_message(r.err_msg ? r.err_msg: '');

      SEMods.B.hide(this.app_id)

    }

  },

  onSetPagePlacementFail: function(obj, responseText) {

    apps_show_error_message()

  }

}

SEMods.Apps.Utils = {};

SEMods.Apps.Utils = {

  parseHTML: function(_source) {

    var source = _source;

    var scripts = new Array();

    while (source.indexOf("<script") > -1 || source.indexOf("</script") > -1) {

      var s = source.indexOf("<script");

      var s_e = source.indexOf(">", s);

      var e = source.indexOf("</script", s);

      var e_e = source.indexOf(">", e);

      script_meta = source.substring(s + 8, s_e);

      script_src = script_meta.match(/src="([^"]*)"/);

      script_src = script_src ? script_src[1] : '';

      scripts.push({

        'data': source.substring(s_e + 1, e),

        'src': script_src,

        'type': 'script'

      });

      source = source.substring(0, s) + source.substring(e_e + 1)

    }

    for (var i = 0; i < scripts.length; i++) {

      try {

        var head = document.getElementsByTagName("head")[0] || document.documentElement,

        script = document.createElement("script");

        script.type = "text/javascript";

        if (scripts[i].src) {

          script.src = scripts[i].src

        } else {

          if (SEMods.B.isIE) script.text = scripts[i].data;

          else script.appendChild(document.createTextNode(scripts[i].data))

        }

        head.insertBefore(script, head.firstChild)

      } catch(ex) {}

    }

    var scripts = new Array();

    while (source.indexOf("<style") > -1 || source.indexOf("</style") > -1) {

      var s = source.indexOf("<style");

      var s_e = source.indexOf(">", s);

      var e = source.indexOf("</style", s);

      var e_e = source.indexOf(">", e);

      script_meta = source.substring(s + 7, s_e);

      script_src = script_meta.match(/src="([^"]*)"/);

      script_src = script_src ? script_src[1] : '';

      scripts.push({

        'data': source.substring(s_e + 1, e),

        'src': script_src,

        'type': 'css'

      });

      source = source.substring(0, s) + source.substring(e_e + 1)

    }

    for (var i = 0; i < scripts.length; i++) {

      try {

        var head = document.getElementsByTagName("head")[0] || document.documentElement,

        script = document.createElement("style");

        script.type = 'text/css';

        if (SEMods.B.isIE) script.styleSheet.cssText = scripts[i].data;

        else script.appendChild(document.createTextNode(scripts[i].data));

        head.insertBefore(script, head.firstChild)

      } catch(ex) {}

    }

    return source

  }

}

SEMods.Apps.ContentEditor = function(page_id, view_id, app_id, app_block_id, stripe_id, placement, container, owner, editinplace) {

  this.page_id = page_id;

  this.view_id = view_id;

  this.app_id = app_id;

  this.app_block_id = app_block_id;

  this.stripe_id = stripe_id;

  this.placement = placement;

  this.container = container;

  this.owner = owner;

  this.editinplace = editinplace

};

SEMods.Apps.ContentEditor.prototype = {

  xx: '',

  edit: function() {

    var params = 'task=editcontent' + '&pageid=' + this.page_id + '&viewid=' + this.view_id + '&id=' + this.app_id + '&appid=' + this.app_block_id + '&stripe=' + this.stripe_id + '&placement=' + this.placement + '&container=' + this.container + '&user=' + this.owner;

    if (this.editinplace == 1) {

      content_box = SEMods.B.ge("appcontent_" + this.app_block_id);

      content_box.innerHTML = "Loading...";

      var ajax = new SEMods.Ajax(this.onEditContentLoadSuccess.bind(this), this.onEditContentLoadFail.bind(this));

      ajax.post(SEMods.Apps.api_content_endpoint, params)

    } else if (this.editinplace == 2) {

      TBEX_show('EDIT', SEMods.Apps.api_content_endpoint + params + '&TBEX_iframe=true', '', '', 1)

    } else {

      document.location = "user_apps_canvas.php?id=" + this.app_id + "&pageid=" + this.page_id + '&viewid=' + this.view_id + '&task=editcontent' + '&returnafteredit=' + encodeURIComponent(document.location)

    }

  },

  attachEvents: function() {},

  submit_form: function() {

    var values = [];

    var elems = this.form.getElementsByTagName("INPUT");

    for (var i = 0; i < elems.length; i++) {

      if (elems[i].type == "radio" || elems[i].type == "checkbox") {

        if (elems[i].checked) {

          values.push(encodeURIComponent(elems[i].name) + '=' + encodeURIComponent(elems[i].value))

        }

      } else {

        values.push(encodeURIComponent(elems[i].name) + '=' + encodeURIComponent(elems[i].value))

      }

    }

    var elems = this.form.getElementsByTagName("SELECT");

    for (var i = 0; i < elems.length; i++) {

      values.push(encodeURIComponent(elems[i].name) + '=' + encodeURIComponent(elems[i].value))

    }

    var elems = this.form.getElementsByTagName("TEXTAREA");

    for (var i = 0; i < elems.length; i++) {

      values.push(elems[i].name + '=' + encodeURIComponent( SEMods.B.isFireFox ? elems[i].value.replace(/\n/g, "\r\n") : elems[i].value ) );

    }

    values.push('pageid=' + this.page_id);

    values.push('viewid=' + this.view_id);

    values.push('id=' + this.app_id);

    values.push('appid=' + this.app_block_id);

    values.push('stripe=' + this.stripe_id);

    values.push('placement=' + this.placement);

    values.push('container=' + this.container);

    values.push('user=' + this.owner);

    values.push('task=doajaxsave');

    values = values.join("&");

    content_box = SEMods.B.ge("appcontent_" + this.app_block_id);

    content_box.innerHTML = "Saving...";

    var ajax = new SEMods.Ajax(this.onEditContentSaveSuccess.bind(this), this.onEditContentSaveFail.bind(this));

    ajax.post(SEMods.Apps.api_content_endpoint, values)

  },

  onSubmit: function(e) {

    this.submit_form();

    return this._cancelEvent(e)

  },

  _cancelEvent: function(e) {

    var e = e ? e: window.event;

    if (e.preventDefault) e.preventDefault();

    if (e.stopPropagation) e.stopPropagation();

    e.cancelBubble = true;

    e.returnValue = false;

    return false

  },

  onCancel: function() {

    var contentbox = SEMods.B.ge("appcontent_" + this.app_block_id);

    //SEMods.Apps.ProfileDragDrop.reloadContentEx(this.app_block_id)

    SEMods.Apps.ProfileDragDrop.reloadContent(this.app_block_id, this.stripe_id, this.container);

  },

  onEditContentSaveSuccess: function(obj, responseText) {

    this.onEditContentSuccess(obj, responseText, 0)

  },

  onEditContentSaveFail: function(obj, responseText) {

    apps_show_error_message()

  },

  onEditContentSuccess: function(obj, responseText, editing) {

    var r = [];

    try {

      r = eval('(' + responseText + ')')

    } catch(e) {

      r.status = 1;

      r.html = ''

    };

    if (r.status == 0) {

      var contentbox = SEMods.B.ge("appcontent_" + this.app_block_id);

      contentbox.innerHTML = SEMods.Apps.Utils.parseHTML(r.html);

      if (r.appid) {

        identity = SEMods.Apps.ProfileDragDrop.getBoxIdentity(r.appid);

        if (identity && identity.onAjaxLoad) {

          identity.onAjaxLoad(identity, editing)

        }

      }

      var elems = contentbox.getElementsByTagName("FORM");

      for (var i = 0; i < elems.length; i++) {

        if (elems[i].name == "form_editcontent") {

          this.form = elems[i];

          SEMods.B.addEvent(elems[i], "submit", this.onSubmit.bind(this))

        }

      }

      var elems = contentbox.getElementsByTagName("INPUT");

      for (var i = 0; i < elems.length; i++) {

        if (elems[i].name == "form_editcontent_cancel") {

          SEMods.B.addEvent(elems[i], "click", this.onCancel.bind(this))

        }

      }

    } else {

      apps_show_error_message(r.err_msg ? r.err_msg: '')

    }

  },

  onEditContentLoadSuccess: function(obj, responseText) {

    this.onEditContentSuccess(obj, responseText, 1)

  },

  onEditContentLoadFail: function(obj, responseText) {

    apps_show_error_message()

  }

}

SEMods.Apps.ProfileDragDrop = function(e) {};

SEMods.Apps.ProfileDragDrop = {

  dropTargets: null,

  stripes: null,

  api_endpoint: 'ajax_semods_apps.php?',

  api_content_endpoint: 'appcontent.php?',

  dropTarget: null,

  objects: [],

  stripes_map: [],

  header_class: 'header',

  page_id: 2,

  view_id: 0,

  header_control_element: "TD",

  enforce_placements: true,

  auto_save_layout: true,

  flying: false,

  owner: '',

  state: 0,

  callbacks_register_queue: [],

  removeApp: function(app_id) {

    var ajax = new SEMods.Ajax(this.onMoveBoxSuccess.bind(this), this.onMoveBoxFail.bind(this));

    var params = 'task=removeapp&pid=' + this.page_id + '&vid=' + this.view_id + '&appid=' + app_id + '&user=' + this.owner;

    ajax.post(this.api_endpoint, params)

  },

  removeBox: function(app_id) {

    var ajax = new SEMods.Ajax(this.onMoveBoxSuccess.bind(this), this.onMoveBoxFail.bind(this));

    var params = 'task=removebox&pid=' + this.page_id + '&vid=' + this.view_id + '&appid=' + app_id + '&user=' + this.owner;

    ajax.post(this.api_endpoint, params)

  },

  moveBoxToTabs: function(app_id) {

    var ajax = new SEMods.Ajax(this.onMoveBoxSuccess.bind(this), this.onMoveBoxFail.bind(this));

    var params = 'task=movetotabs&pid=' + this.page_id + '&vid=' + this.view_id + '&appid=' + app_id + '&user=' + this.owner;

    ajax.post(this.api_endpoint, params)

  },

  removeBoxFromTabs: function(app_id) {

    var ajax = new SEMods.Ajax(this.onMoveBoxSuccess.bind(this), this.onMoveBoxFail.bind(this));

    var params = 'task=removefromtabs&pid=' + this.page_id + '&vid=' + this.view_id + '&appid=' + app_id + '&user=' + this.owner;

    ajax.post(this.api_endpoint, params)

  },

  onMoveBoxSuccess: function(obj, responseText) {

    var r = [];

    try {

      r = eval('(' + responseText + ')')

    } catch(e) {

      r.status = 1;

      r.appid = ''

    };

    if (r.status == 0) {

      if (r.reload) document.location = document.location;

      if (r.url) {

        document.location = r.url

      }

    } else {

      apps_show_error_message(r.err_msg ? r.err_msg: '')

    }

  },

  onMoveBoxFail: function(obj, responseText) {

    apps_show_error_message()

  },

  getAppBox: function(app_id) {

    if (app_id.indexOf('_') != -1) {

      app_id = app_id.split('_')[1]

    }

    appbox = SEMods.B.ge('app_' + app_id);

    if (!appbox) appbox = SEMods.B.ge('core_' + app_id);

    if (!appbox) appbox = SEMods.B.ge('plugin_' + app_id);

    if (!appbox) appbox = SEMods.B.ge('widget_' + app_id);

    return appbox

  },

  moveToContainer: function(app_id, container, stripe_id) {

    this.buildStripes();

    var stripe;

    for (var i in SEMods.Apps.ProfileDragDrop.stripes) {

      stripe = SEMods.Apps.ProfileDragDrop.stripes[i];

      if (stripe.id == stripe_id && stripe.c == container) {

        elem = this.getAppBox(app_id);

        elem = elem.parentNode.removeChild(elem);

        stripe.e.appendChild(elem);

        box = this.getBoxIdentity(app_id);

        box.container = container;

        box.stripe = stripe_id;

        moved = true;

        break

      }

    }

    if (moved) {

      if (box.contentvaries) {

        this.reloadContent(app_id, stripe_id, container)

      }

      this.updateLayout(true)

    }

  },

  buildDropTargets: function() {

    var elem;

    this.dropTargets = new Array();

    for (var obj in this.objects) {

      if (!this.objects[obj].box) continue;

      elem = this.objects[obj].box;

      if (!this.dropTargets[this.objects[obj].container]) this.dropTargets[this.objects[obj].container] = new Array();

      this.dropTargets[this.objects[obj].container].push({

        'x': SEMods.B.findX(elem),

        'y': SEMods.B.findY(elem),

        'x1': SEMods.B.findX(elem) + elem.offsetWidth,

        'y1': SEMods.B.findY(elem) + elem.offsetHeight,

        'e': elem

      })

    }

    return this.dropTargets

  },

  getDropTargets: function(container) {

    return this.dropTargets ? this.dropTargets[container] : this.buildDropTargets()

  },

  buildStripes: function() {

    this.stripes = [];

    var tdtags = this.getElementsByName_compat("semods_container", "DIV");

    for (var tdtag = 0; tdtag < tdtags.length; tdtag++) {

      if (tdtags[tdtag].getAttribute('stripe') && tdtags[tdtag].getAttribute('container')) {

        x = SEMods.B.findX(tdtags[tdtag]);

        y = SEMods.B.findY(tdtags[tdtag]);

        var stripe = {

          'x': x,

          'y': y,

          'x1': x + tdtags[tdtag].offsetWidth,

          'y1': y + tdtags[tdtag].offsetHeight,

          'e': tdtags[tdtag],

          'id': tdtags[tdtag].getAttribute('stripe'),

          'c': tdtags[tdtag].getAttribute('container')

        };

        if (tdtags[tdtag].lastChild) {

          for (var node = tdtags[tdtag].lastChild; node.previousSibling; node = node.previousSibling) {

            if (node.nodeType != 3) {

              stripe.y1 = SEMods.B.findY(node) + node.offsetHeight;

              break

            }

          }

        } else {

          stripe.y1 = stripe.y + 10

        }

        this.stripes.push(stripe)

      }

    }

  },

  getStripe: function(x, y) {

    for (var stripe in this.stripes) {

      if ((x > this.stripes[stripe].x) && (x < this.stripes[stripe].x1)) {

        return this.stripes[stripe]

      }

    }

    return null

  },

  getElementsByName_compat: function(name, tag) {

    if (!tag) {

      tag = '*'

    }

    if (SEMods.B.isIE) {

      var elems = document.getElementsByTagName(tag);

      var res = []

      for (var i = 0; i < elems.length; i++) {

        att = elems[i].getAttribute('name');

        if (att == name) {

          res.push(elems[i])

        }

      }

      return res

    } else {

      return document.getElementsByName(name, tag)

    }

  },

  app_profiledragdrop_onload: function(e, elem) {

    this.dropTargets = new Array();

    var elems = this.getElementsByName_compat("semods_appbox", "DIV");

    for (var i = 0; i < elems.length; i++) {

      var elem;

      box = this.getBoxIdentity(elems[i].id);

      var tdtags = elems[i].getElementsByTagName(this.header_control_element);

      for (var tdtag = 0; tdtag < tdtags.length; tdtag++) {

        if (tdtags[tdtag].className == this.header_class) {

          if (!box.locked || !this.enforce_placements) {

            tdtags[tdtag].style.cursor = "move";

            if (SEMods.B.isIE) {

              SEMods.B.addEvent(tdtags[tdtag], "mousedown",

              function(e) {

                SEMods.Apps.ProfileDragDrop.app_profiledragdrop_mousedown(e)

              })

            } else {

              SEMods.B.addEvent(tdtags[tdtag], "mousedown",

              function(e) {

                SEMods.Apps.ProfileDragDrop.app_profiledragdrop_mousedown(e, this)

              })

            }

          } else {}

          app_id = SEMods.Apps.cleanAppId(elems[i].id);

          appsettings_box = SEMods.B.ge("appsettings_app_" + app_id);

          if (this.flat_properties) {

            if (!this.no_appsettings && (!box.mandatory || box.editinplace || ((box.container == 'apptab') && appsettings_box))) {

              header_elem = document.createElement("DIV");

              header_elem.className = "apps_settings_titlediv";

              header_elem.innerHTML = tdtags[tdtag].innerHTML;

              tdtags[tdtag].innerHTML = '';

              tdtags[tdtag].appendChild(header_elem);

              if (!box.mandatory) {

                selem = document.createElement("DIV");

                selem.xapp_id = elems[i].id;

                selem.className = "apps_box_close";

                if (SEMods.B.isIE) {

                  SEMods.B.addEvent(selem, "click",

                  function(e) {

                    var src = (e.srcElement) ? e.srcElement: e.target;

                    apps_removebox(src.xapp_id)

                  })

                } else {

                  SEMods.B.addEvent(selem, "click",

                  function(e) {

                    apps_removebox(this.xapp_id);

                    return apps_cancelEvent(e)

                  })

                }

                tdtags[tdtag].appendChild(selem)

              }

              if (box.editinplace && (SEMods.Apps.PageEditor.designmode != 2)) {

                selem = document.createElement("DIV");

                selem.app_id = elems[i].id;

                selem.className = "apps_box_edit";

                selem.innerHTML = "<a href='javascript:void(0)' onclick='apps_edit_box(\"" + elems[i].id + "\")'>edit</a>"

                tdtags[tdtag].appendChild(selem)

              }

              var show_settings_icon = false;

              if ((box.container == 'apptab') && appsettings_box) {

                show_settings_icon = true

              }

              if (show_settings_icon) {

                selem = document.createElement("DIV");

                selem.id = elems[i].id + "_settingsdiv";

                selem.className = "apps_settings";

                if (SEMods.B.isIE) {

                  SEMods.B.addEvent(selem, "click",

                  function(e) {

                    var src = (e.srcElement) ? e.srcElement: e.target;

                    app_boxdialog(src.id)

                  })

                } else {

                  SEMods.B.addEvent(selem, "click",

                  function() {

                    app_boxdialog(this.id)

                  })

                }

                tdtags[tdtag].appendChild(selem)

              }

              if (this.header_control_element == "DIV") {

                clearfix_elem = document.createElement("DIV");

                clearfix_elem.style['clear'] = "both";

                tdtags[tdtag].appendChild(clearfix_elem)

              }

            }

          } else {

            box = SEMods.B.ge("appsettings_app_" + app_id);

            if (!this.no_appsettings && box) {

              header_elem = document.createElement("DIV");

              header_elem.className = "apps_settings_titlediv";

              header_elem.innerHTML = tdtags[tdtag].innerHTML;

              selem = document.createElement("DIV");

              selem.id = elems[i].id + "_settingsdiv";

              selem.className = "apps_settings";

              if (SEMods.B.isIE) {

                SEMods.B.addEvent(selem, "click",

                function(e) {

                  var src = (e.srcElement) ? e.srcElement: e.target;

                  app_boxdialog(src.id)

                })

              } else {

                SEMods.B.addEvent(selem, "click",

                function() {

                  app_boxdialog(this.id)

                })

              }

              tdtags[tdtag].innerHTML = '';

              tdtags[tdtag].appendChild(header_elem);

              tdtags[tdtag].appendChild(selem);

              if (this.header_control_element == "DIV") {

                clearfix_elem = document.createElement("DIV");

                clearfix_elem.style['clear'] = "both";

                tdtags[tdtag].appendChild(clearfix_elem)

              }

            }

          }

          tdtags[tdtag].app_id = elems[i].id;

          this.objects[elems[i].id].box = elems[i];

          break

        }

      }

    }

    for (var obj in this.objects) {

      if (this.objects[obj].box) continue;

      elem = SEMods.B.ge("appcontent_" + obj);

      if ((elem) && (elem.innerHTML.length > 1000)) {

        this.objects[obj].box = SEMods.B.ge(obj)

      }

    }

    var div = document.createElement("DIV");

    div.className = 'app_profiledragdrop_flyingbox';

    div.style.display = 'none';

    this.flying_box = div;

    document.body.insertBefore(div, document.body.firstChild);

    div = document.createElement("DIV");

    div.className = 'app_profiledragdrop_droptarget';

    this.drop_box = div;

    this.state = 2;

    for (var callback_i = 0; callback_i < this.callbacks_register_queue.length; callback_i++) {

      cb = this.callbacks_register_queue[callback_i];

      this._register_callback(cb.app_id, cb.callback_id, cb.callback)

    }

  },

  register_callback: function(app_id, callback_id, callback) {

    if (this.state >= 2) {

      this._register_callback(app_id, callback_id, callback)

    } else {

      this.callbacks_register_queue.push({

        'app_id': app_id,

        'callback_id': callback_id,

        'callback': callback

      })

    }

  },

  _register_callback: function(app_id, callback_id, callback) {

    identity = SEMods.Apps.ProfileDragDrop.getBoxIdentity('app_' + app_id);

    if (!identity) {

      identity = SEMods.Apps.ProfileDragDrop.getBoxIdentity('widget_' + app_id)

    }

    if (!identity) {

      return

    }

    identity[callback_id] = callback

  },

  add_new_objects: function(newobjects, options) {

    if (typeof options == 'undefined' || typeof options.header_class == 'undefined') {

      header_class = "header"

    }

    if (typeof options == 'undefined' || typeof options.header_control_element == 'undefined') {

      header_control_element = "TD"

    }

    for (var obj in newobjects) {

      var elem = SEMods.B.ge(obj);

      if (elem) {

        var tdtags = elem.getElementsByTagName(header_control_element);

        for (var tdtag = 0; tdtag < tdtags.length; tdtag++) {

          if (tdtags[tdtag].className == header_class) {

            tdtags[tdtag].style.cursor = "move";

            if (SEMods.B.isIE) {

              SEMods.B.addEvent(elem, "mousedown",

              function(e) {

                SEMods.Apps.ProfileDragDrop.app_profiledragdrop_mousedown(e)

              })

            } else {

              SEMods.B.addEvent(elem, "mousedown",

              function(e) {

                SEMods.Apps.ProfileDragDrop.app_profiledragdrop_mousedown(e, this)

              })

            }

            box = newobjects[obj];

            header_elem = document.createElement("DIV");

            header_elem.className = "apps_settings_titlediv";

            header_elem.innerHTML = tdtags[tdtag].innerHTML;

            tdtags[tdtag].innerHTML = '';

            tdtags[tdtag].appendChild(header_elem);

            if (this.flat_properties) {

              if (!box.mandatory) {

                selem = document.createElement("DIV");

                selem.xapp_id = obj;

                selem.className = "apps_box_close";

                if (SEMods.B.isIE) {

                  SEMods.B.addEvent(selem, "click",

                  function(e) {

                    var src = (e.srcElement) ? e.srcElement: e.target;

                    apps_removebox(src.xapp_id)

                  })

                } else {

                  SEMods.B.addEvent(selem, "click",

                  function(e) {

                    apps_removebox(this.xapp_id);

                    return apps_cancelEvent(e)

                  })

                }

                tdtags[tdtag].appendChild(selem)

              }

              if (box.editinplace && (SEMods.Apps.PageEditor.designmode != 2)) {

                selem = document.createElement("DIV");

                selem.app_id = obj;

                selem.className = "apps_box_edit";

                selem.innerHTML = "<a href='javascript:void(0)' onclick='apps_edit_box(\"" + obj + "\")'>edit</a>"

                tdtags[tdtag].appendChild(selem)

              }

            } else {

              selem = document.createElement("DIV");

              selem.id = obj + "_settingsdiv";

              selem.className = "apps_settings";

              if (SEMods.B.isIE) {

                SEMods.B.addEvent(selem, "click",

                function(e) {

                  var src = (e.srcElement) ? e.srcElement: e.target;

                  app_boxdialog(src.id)

                })

              } else {

                SEMods.B.addEvent(selem, "click",

                function() {

                  app_boxdialog(this.id)

                })

              }

              tdtags[tdtag].appendChild(selem)

            }

            if (header_control_element == "DIV") {

              clearfix_elem = document.createElement("DIV");

              clearfix_elem.style['clear'] = "both";

              tdtags[tdtag].appendChild(clearfix_elem)

            }

            tdtags[tdtag].app_id = obj;

            this.objects[obj] = newobjects[obj];

            this.objects[obj].box = elem;

            if (typeof options != 'undefined' && typeof options.onDrop != 'undefined') {

              this.objects[obj].onDrop = options.onDrop

            }

          }

        }

      }

    }

  },

  app_profiledragdrop_mousedown: function(e, elem) {

    if (this.flying) return;

    var src = (e.srcElement) ? e.srcElement: e.target;

    if (src.className == "apps_settings_titlediv") {

      src = src.parentNode

    }

    if (!src.app_id) return;

    new SEMods.Apps.ProfileDragDrop.FlyingBox(SEMods.Apps.ProfileDragDrop, e, this.objects[src.app_id].box);

    try {

      if (SEMods.Apps.PageEditor.apps_pageeditmenu_hideall) {

        SEMods.Apps.PageEditor.apps_pageeditmenu_hideall();

        SEMods.Apps.PageEditor.onDragStart2()

      }

    } catch(ex) {}

  },

  getBoxIdentity: function(id) {

    return this.objects[id]

  },

  showWarningBox: function(x, y, minLeft, maxLeft) {

    if (!this.warning_box) {

      this.warning_box = SEMods.B.ge("apps_profiledragdrop_warningbox")

    }

    this.warning_box.style.top = y + 30 + 'px';

    SEMods.B.show(this.warning_box);

    var boxX = x - this.warning_box.offsetWidth / 2;

    if ((boxX + this.warning_box.offsetWidth + 10) > maxLeft) boxX = maxLeft - this.warning_box.offsetWidth - 10;

    else if (boxX < minLeft) boxX = minLeft + 10;

    this.warning_box.style.left = boxX + 'px'

  },

  hideWarningBox: function() {

    if (this.warning_box) {

      SEMods.B.hide(this.warning_box)

    }

  },

  reloadContentEx: function(app_id) {

    var identity = this.getBoxIdentity(app_id);

    this.reloadContent(app_id, identity.stripe, identity.container)

  },

  reloadContent: function(app_id, stripe, container) {

    clean_app_id = SEMods.Apps.cleanAppId(app_id);

    content_box = SEMods.B.ge("appcontent_" + app_id);

    content_box.innerHTML = "Loading...";

    var ajax = new SEMods.Ajax(this.onReloadContentSuccess.bind(this), this.onReloadContentFail.bind(this));

    var stripe_type = '';

    try {

      stripe_type = this.stripes_map[container][stripe];

    } catch(e) {

    };

    var params = 'task=ajaxload&pageid=' + this.page_id + '&viewid=' + this.view_id + '&id=' + clean_app_id + '&appid=' + app_id + '&stripe=' + stripe + '&placement=' + stripe_type + '&container=' + container + '&user=' + this.owner;

    ajax.post(this.api_content_endpoint, params)

  },

  getStripeType: function(container, stripe) {

    return this.stripes_map[container][stripe]

  },

  editContent: function(app_id) {

    clean_app_id = SEMods.Apps.cleanAppId(app_id);

    var identity = this.getBoxIdentity(app_id);

    var stripe_type = '';

    if (typeof identity == 'undefined') {

      identity = {

        'container': 'root',

        'stripe': 0,

        'editinplace': 1

      }

    } else {

      stripe_type = this.stripes_map[identity.container][identity.stripe]

    }

    new SEMods.Apps.ContentEditor(this.page_id, this.view_id, clean_app_id, app_id, identity.stripe, stripe_type, identity.container, this.owner, identity.editinplace).edit()

  },

  onReloadContentSuccess: function(obj, responseText) {

    var r = [];

    try {

      r = eval('(' + responseText + ')')

    } catch(e) {

      r.status = 1;

      r.html = '';

      r.appid = ''

    };

    if (r.appid != '' && r.html != '') {

      SEMods.B.ge("appcontent_" + r.appid).innerHTML = SEMods.Apps.Utils.parseHTML(r.html);

      identity = SEMods.Apps.ProfileDragDrop.getBoxIdentity(r.appid);

      if (identity && identity.onAjaxLoad) {

        identity.onAjaxLoad(identity, 0)

      }

    } else {

      apps_show_error_message(r.err_msg ? r.err_msg: '')

    }

  },

  onReloadContentFail: function(obj, r) {

    apps_show_error_message(r.err_msg ? r.err_msg: '')

  },

  updateLayout: function(rebuild_stripes) {

    if (!this.auto_save_layout) return;

    this._updateLayout(rebuild_stripes)

  },

  _updateLayout: function(rebuild_stripes) {

    this.buildLayout();

    var params = 'task=updatelayout&pid=' + this.page_id + '&vid=' + this.view_id + '&user=' + this.owner + '&layout=' + SEMods.Apps.JSON.encode(this.layout);

    var ajax = new SEMods.Ajax();

    ajax.post(this.api_endpoint, params)

  },

  buildLayout: function() {

    if (!this.stripes) this.buildStripes();

    layout = {};

    stripes = SEMods.Apps.ProfileDragDrop.stripes;

    for (var i = 0; i < stripes.length; i++) {

      if (!layout[stripes[i].c]) layout[stripes[i].c] = [];

      layout[stripes[i].c]["" + stripes[i].id] = []

    }

    var boxes = document.getElementsByName("semods_appbox", "DIV");

    for (var b = 0; b < boxes.length; b++) {

      identity = this.getBoxIdentity(boxes[b].id);

      if (!layout[identity.container] || !layout[identity.container][identity.stripe]) continue;

      layout[identity.container][identity.stripe].push(boxes[b].id)

    }

    SEMods.Apps.ProfileDragDrop.layout = layout

  }

};

SEMods.Apps.ProfileDragDrop.FlyingBox = function(master, e, elem) {

  this.disableSelection(elem);

  this.master = master;

  this.master.flying = true;

  this.srcElement = elem;

  this.init(e, elem);

  if (typeof hideMenu != 'undefined') {

    hideMenuEx()

  }

};

SEMods.Apps.ProfileDragDrop.FlyingBox.prototype = {

  master: null,

  obj: null,

  srcElement: null,

  offsetX: 0,

  offsetY: 0,

  curDropTarget: null,

  identity: [],

  autoScrollSpeed: 10,

  mouseX: 0,

  mouseY: 0,

  mouseDocX: 0,

  mouseDocY: 0,

  lazyMouseY: 0,

  scrollVelocity: 0,

  mouseDownSaver: null,

  init: function(e, elem) {

    SEMods.Apps.ProfileDragDrop.dropTargets = null;

    SEMods.Apps.ProfileDragDrop.buildStripes();

    this.identity = SEMods.Apps.ProfileDragDrop.getBoxIdentity(this.srcElement.id);

    this.createElement(e);

    this.documentHeight = document.documentElement.clientHeight;

    this.documentScrollHeight = document.documentElement.scrollHeight + 100 + this.obj.offsetHeight;

    this._addEvent(document.body, "mouseup", this.onMouseUp.bind(this));

    document.body.selectstart = function() {

      return false

    };

    this._addEvent(document.body, "selectstart",

    function() {

      return false

    });

    this._addEvent(document.body, "mousemove", this.onMouseMove.bind(this));

    this.mouseDownSaver = document.onmousedown;

    document.onmousedown = function() {

      return false

    }

  },

  disableSelection: function(element) {

    this.eventsaver_onselectstart = element.onselectstart;

    element.onselectstart = function() {

      return false

    };

    element.unselectable = "on";

    element.style.MozUserSelect = "none"

  },

  enableSelection: function(element) {

    element.onselectstart = this.eventsaver_onselectstart;

    element.unselectable = "off";

    element.style.MozUserSelect = ""

  },

  autoScroll: function(e) {

    if (SEMods.Browser.isOpera) return;

    if (e.clientY < 50 || e.clientY > (this.documentHeight - 50)) {

      if (e.clientY < 50 && !this.autoScrollActive) {

        this.autoScrollActive = true;

        this.scrollVelocity = this.autoScrollSpeed * -1;

        setTimeout(this.autoScroller.bind(this), 5)

      }

      if (e.clientY > (this.documentHeight - 50) && document.documentElement.scrollHeight <= this.documentScrollHeight && !this.autoScrollActive) {

        this.autoScrollActive = true;

        this.scrollVelocity = this.autoScrollSpeed;

        setTimeout(this.autoScroller.bind(this), 5)

      }

    } else {

      this.autoScrollActive = false

    }

  },

  autoScroller: function(direction, yPos) {

    if (document.documentElement.scrollHeight > this.documentScrollHeight && this.scrollVelocity > 0) return;

    window.scrollBy(0, this.scrollVelocity);

    if (!this.obj) return;

    if (this.scrollVelocity < 0) {

      if (document.documentElement.scrollTop > 0) {

        this.obj.style.top = parseInt(this.obj.style.top) + this.scrollVelocity + 'px';

        this.lazyMouseY += this.scrollVelocity

      } else {

        this.autoScrollActive = false

      }

    } else {

      if (this.mouseY > (this.documentHeight - 50)) {

        this.obj.style.top = parseInt(this.obj.style.top) + this.scrollVelocity + 'px';

        this.lazyMouseY += this.scrollVelocity

      } else {

        this.autoScrollActive = false

      }

    }

    this.mouseMoveHandler(this.mouseDocX, this.mouseDocY + this.lazyMouseY);

    if (this.autoScrollActive) setTimeout(this.autoScroller.bind(this), 5)

  },

  createElement: function(e) {

    this.master.flying_box.style.width = this.srcElement.offsetWidth + 'px';

    this.master.flying_box.style.height = this.srcElement.offsetHeight + 'px';

    this.master.flying_box.style.display = 'block';

    this.master.drop_box.style.height = (this.srcElement.offsetHeight > 200 ? 200 : this.srcElement.offsetHeight) + 'px';

    this.master.drop_box.style.width = '99%';

    this.master.drop_box.style.display = 'block';

    this.offsetX = SEMods.B.mousePosX(e) - SEMods.B.findX(this.srcElement);

    this.offsetY = SEMods.B.mousePosY(e) - SEMods.B.findY(this.srcElement);

    if (Math.abs(this.offsetY) > 30) {

      var scrollTop = 0;

      var scrollLeft = 0;

      obj = this.srcElement;

      if (obj.parentNode) {

        while (obj.parentNode) {

          scrollTop += obj.scrollTop;

          scrollLeft += obj.scrollLeft;

          obj = obj.parentNode

        }

      }

      this.offsetY += scrollTop;

      this.offsetX += scrollLeft;

      this.offsetX -= (document.documentElement && document.documentElement.scrollLeft) ? 2 * document.documentElement.scrollLeft: 2 * document.body.scrollLeft;

      this.offsetY -= (document.documentElement && document.documentElement.scrollTop) ? 2 * document.documentElement.scrollTop: 2 * document.body.scrollTop

    }

    if (Math.abs(this.offsetY) > 30) {

      this.offsetY = 15

    }

    if (Math.abs(this.offsetX) > this.srcElement.offsetWidth) {

      this.offsetX = 100

    }

    this.master.flying_box.style.left = SEMods.B.mousePosX(e) - this.offsetX + 'px';

    this.master.flying_box.style.top = SEMods.B.mousePosY(e) - this.offsetY + 'px';

    this.obj = this.master.flying_box;

    this.curDropTarget = this.master.drop_box;

    this.curDropTarget.stripe = this.master.objects[this.srcElement.id].stripe;

    this.curDropTarget.container = this.master.objects[this.srcElement.id].container;

    this.master.flying_box.appendChild(this.srcElement.parentNode.replaceChild(this.master.drop_box, this.srcElement))

  },

  getElementStyle: function(elem, IEStyleProp, CSSStyleProp) {

    if (elem.currentStyle) {

      return elem.currentStyle[IEStyleProp]

    } else if (window.getComputedStyle) {

      var compStyle = window.getComputedStyle(elem, "");

      return compStyle.getPropertyValue(CSSStyleProp)

    }

    return ""

  },

  mouseMoveHandler: function(x, y) {

    if (!SEMods.Apps.ProfileDragDrop.lock_vertical_move) {

      this.obj.style.left = x - this.offsetX + 'px'

    }

    this.obj.style.top = y - this.offsetY + 'px';

    var stripe = SEMods.Apps.ProfileDragDrop.getStripe(x, y);

    if (stripe == null) return;

    var stripe_id = stripe.id;

    if (SEMods.Apps.ProfileDragDrop.enforce_placements) {

      if (this.identity.stripes.in_array(stripe_id) && (this.identity.container == stripe.c)) {

        SEMods.Apps.ProfileDragDrop.hideWarningBox()

      } else {

        SEMods.Apps.ProfileDragDrop.showWarningBox(x, y - this.offsetY, x - this.offsetX, x - this.offsetX + this.obj.offsetWidth);

        return

      }

    }

    var elem = null;

    var targetX, targetY;

    var target;

    var found_placement = false;

    var curDropTargetX = SEMods.B.findX(this.curDropTarget);

    var curDropTargetY = SEMods.B.findY(this.curDropTarget);

    if ((x >= curDropTargetX) && (x <= curDropTargetX + this.curDropTarget.offsetWidth) && (y >= curDropTargetY) && (y <= curDropTargetY + this.curDropTarget.offsetHeight)) {

      return

    }

    var targets = SEMods.Apps.ProfileDragDrop.getDropTargets(this.identity.container);

    for (var i = 0; i < targets.length; i++) {

      target = targets[i];

      if (this.srcElement == target.e) continue;

      targetX = SEMods.B.findX(target.e);

      targetY = SEMods.B.findY(target.e);

      targetHeight = target.e.offsetHeight;

      if ((x >= targetX) && (x <= targetX + target.e.offsetWidth)) {

        if ((y > (targetY - 20)) && (y < (targetY + targetHeight / 2))) {

          found_placement = true;

          if (this.curDropTarget != target.e.previousSibling) {

            target.e.parentNode.insertBefore(this.curDropTarget, target.e)

          }

          break

        }

        if ((y >= (targetY + targetHeight / 2)) && (y <= (targetY + targetHeight))) {

          found_placement = true;

          if (target.e.nextSibling) {

            if (this.curDropTarget != target.e.nextSibling) {

              target.e.parentNode.insertBefore(this.curDropTarget, target.e.nextSibling)

            }

          } else {

            target.e.parentNode.appendChild(this.curDropTarget, target.e)

          }

          break

        }

      }

    }

    var node = null;

    if (!found_placement) {

      for (var i = 0; i < SEMods.Apps.ProfileDragDrop.stripes.length; i++) {

        stripe = SEMods.Apps.ProfileDragDrop.stripes[i];

        if ((stripe.id == this.curDropTarget.stripe) && (stripe.c == this.curDropTarget.container)) {

          continue

        }

        if ((x >= stripe.x) && (x <= stripe.x1) && (y >= stripe.y) && (y <= stripe.y + stripe.e.offsetHeight)) {

          var y1 = stripe.y;

          for (var i = stripe.e.childNodes.length - 1; i >= 0; i--) {

            node = stripe.e.childNodes[i];

            if (node.nodeType == 1) {

              y1 = SEMods.B.findY(node) + node.offsetHeight;

              break

            }

          }

          if (y > y1) {

            if (node != this.curDropTarget) {

              stripe.e.appendChild(this.curDropTarget)

            }

            found_placement = true;

            break

          }

          if (stripe.e.firstChild != this.curDropTarget) {

            stripe.e.insertBefore(this.curDropTarget, stripe.e.firstChild);

            found_placement = true;

            break

          }

        }

      }

    }

    if (!found_placement) {

      for (var i = 0; i < SEMods.Apps.ProfileDragDrop.stripes.length; i++) {

        stripe = SEMods.Apps.ProfileDragDrop.stripes[i];

        if ((x >= stripe.x) && (x <= stripe.x1)) {

          if (y <= stripe.y) {

            if (stripe.e.firstChild != this.curDropTarget) {

              stripe.e.insertBefore(this.curDropTarget, stripe.e.firstChild)

            }

          } else if (y >= stripe.y + stripe.e.offsetHeight) {

            if (stripe.e.lastChild != this.curDropTarget) {

              stripe.e.appendChild(this.curDropTarget)

            }

          }

          found_placement = true;

          break

        }

      }

    }

    var node = null;

    if (found_placement) {

      this.curDropTarget.stripe = stripe.id;

      this.curDropTarget.container = stripe.c

    }

  },

  onMouseMove: function(e) {

    var x = SEMods.B.mousePosX(e);

    var y = SEMods.B.mousePosY(e);

    this.lazyMouseY = 0;

    this.mouseX = e.clientX;

    this.mouseY = e.clientY;

    this.mouseDocX = x;

    this.mouseDocY = y;

    this.mouseMoveHandler(x, y);

    this.autoScroll(e);

    return this._cancelEvent(e)

  },

  onMouseUp: function(e) {

    if (!e) var e = window.event;

    var src = (e.srcElement) ? e.srcElement: e.target;

    if (this.curDropTarget) {

      if (this.identity.stripe != this.curDropTarget.stripe) {

        stripe_switched = true

      } else {

        stripe_switched = false

      }

      this.curDropTarget.parentNode.replaceChild(this.srcElement, this.curDropTarget);

      this.master.flying_box.style.display = 'none';

      this.master.drop_box.style.display = 'none';

      this.identity.stripe = this.curDropTarget.stripe;

      this.identity.container = this.curDropTarget.container

    }

    SEMods.Apps.ProfileDragDrop.hideWarningBox();

    this.master.flying = false;

    this._removeEvent(document.body, "mouseup");

    this._removeEvent(document.body, "dragend");

    this._removeEvent(document.body, "mousemove");

    this._removeEvent(document.body, "drag");

    this._removeEvent(document.body, "selectstart");

    this.enableSelection(this.srcElement);

    document.onmousedown = this.mouseDownSaver;

    var success = true;

    if (this.identity.onDrop) {

      success = this.identity.onDrop(this.identity)

    }

    if (success != false) {

      if (stripe_switched && this.identity.contentvaries) {

        SEMods.Apps.ProfileDragDrop.reloadContent(this.srcElement.id, this.identity.stripe, this.identity.container)

      }

      SEMods.Apps.ProfileDragDrop.updateLayout()

    }

  },

  _addEvent: function($obj, $event, $handler) {

    var fn = $handler;

    if (!$obj.attachedEvents) $obj.attachedEvents = new Array();

    if ($obj.attachedEvents[$event]) this._removeEvent($obj, $event);

    $obj.attachedEvents[$event] = fn;

    if (typeof $obj.addEventListener != 'undefined') $obj.addEventListener($event, $handler, false);

    else if (typeof $obj.attachEvent != 'undefined') $obj.attachEvent('on' + $event, $handler)

  },

  _removeEvent: function($obj, $event) {

    if (!$obj.attachedEvents || !$obj.attachedEvents[$event]) return;

    if (typeof $obj.removeEventListener != 'undefined') $obj.removeEventListener($event, $obj.attachedEvents[$event], false);

    else if (typeof $obj.detachEvent != 'undefined') $obj.detachEvent('on' + $event, $obj.attachedEvents[$event])

  },

  _cancelEvent: function(e) {

    var e = e ? e: window.event;

    if (e.preventDefault) e.preventDefault();

    if (e.stopPropagation) e.stopPropagation();

    e.cancelBubble = true;

    e.returnValue = false;

    return false

  }

}

SEMods.Apps.JSON = new

function() {

  this.encode = function() {

    var self = arguments.length ? arguments[0] : this,

    result,

    tmp;

    if (self === null) result = "null";

    else if (self !== undefined && (tmp = $[typeof self](self))) {

      switch (tmp) {

      case Array:

        result = [];

        for (var i = 0, j = 0, k = self.length; j < k; j++) {

          if (self[j] !== undefined && (tmp = JSON.encode(self[j]))) result[i++] = tmp

        };

        result = "[".concat(result.join(","), "]");

        break;

      case Boolean:

        result = String(self);

        break;

      case Date:

        result = '"'.concat(self.getFullYear(), '-', d(self.getMonth() + 1), '-', d(self.getDate()), 'T', d(self.getHours()), ':', d(self.getMinutes()), ':', d(self.getSeconds()), '"');

        break;

      case Function:

        break;

      case Number:

        result = isFinite(self) ? String(self) : "null";

        break;

      case String:

        result = '"'.concat(self.replace(rs, s).replace(ru, u), '"');

        break;

      default:

        var i = 0,

        key;

        result = [];

        for (key in self) {

          if (self[key] !== undefined && (tmp = JSON.encode(self[key]))) result[i++] = '"'.concat(key.replace(rs, s).replace(ru, u), '":', tmp)

        };

        result = "{".concat(result.join(","), "}");

        break

      }

    };

    return result

  };

  this.toDate = function() {

    var self = arguments.length ? arguments[0] : this,

    result;

    if (rd.test(self)) {

      result = new Date;

      result.setHours(i(self, 11, 2));

      result.setMinutes(i(self, 14, 2));

      result.setSeconds(i(self, 17, 2));

      result.setMonth(i(self, 5, 2) - 1);

      result.setDate(i(self, 8, 2));

      result.setFullYear(i(self, 0, 4))

    } else if (rt.test(self)) result = new Date(self * 1000);

    return result

  };

  var c = {

    "\b": "b",

    "\t": "t",

    "\n": "n",

    "\f": "f",

    "\r": "r",

    '"': '"',

    "\\": "\\",

    "/": "/"

  },

  d = function(n) {

    return n < 10 ? "0".concat(n) : n

  },

  e = function(c, f, e) {

    e = eval;

    delete eval;

    if (typeof eval === "undefined") eval = e;

    f = eval("" + c);

    eval = e;

    return f

  },

  i = function(e, p, l) {

    return 1 * e.substr(p, l)

  },

  p = ["", "000", "00", "0", ""],

  rc = null,

  rd = /^[0-9]{4}\-[0-9]{2}\-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/,

  rs = /(\x5c|\x2F|\x22|[\x0c-\x0d]|[\x08-\x0a])/g,

  rt = /^([0-9]+|[0-9]+[,\.][0-9]{1,3})$/,

  ru = /([\x00-\x07]|\x0b|[\x0e-\x1f])/g,

  s = function(i, d) {

    return "\\".concat(c[d])

  },

  u = function(i, d) {

    var n = d.charCodeAt(0).toString(16);

    return "\\u".concat(p[n.length], n)

  },

  v = function(k, v) {

    return $[typeof result](result) !== Function && (v.hasOwnProperty ? v.hasOwnProperty(k) : v.constructor.prototype[k] !== v[k])

  },

  $ = {

    "boolean": function() {

      return Boolean

    },

    "function": function() {

      return Function

    },

    "number": function() {

      return Number

    },

    "object": function(o) {

      return o instanceof o.constructor ? o.constructor: null

    },

    "string": function() {

      return String

    },

    "undefined": function() {

      return null

    }

  },

  $$ = function(m) {

    function $(c, t) {

      t = c[m];

      delete c[m];

      try {

        e(c)

      } catch(z) {

        c[m] = t;

        return 1

      }

    };

    return $(Array) && $(Object)

  };

  try {

    rc = new RegExp('^("(\\\\.|[^"\\\\\\n\\r])*?"|[,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t])+?$')

  } catch(z) {

    rc = /^(true|false|null|\[.*\]|\{.*\}|".*"|\d+|\d+\.\d+)$/

  }

};

SEMods.Apps.PageEditor = function() {};

SEMods.Apps.PageEditor = {

  apps_pagemenu_active: null,

  apps_pagemenu2_active: null,

  layout: {},

  page_id: 0,

  view_id: 0,

  editor_elem: null,

  editor_elem_html: '',

  editor_elem_slide_direction: 0,

  slide_timer: 0,

  slide_chain: [],

  status: 0,

  designmode: 0,

  pageeditor_slide: function() {

    var m = parseInt(this.editor_elem.style.top);

    var delta = Math.round(Math.max(2, Math.min(12, Math.abs(m) / 3)));

    if (this.editor_elem_slide_direction == 0) {

      if (m >= 0) {

        this.slide_timer = 0;

        next = this.slide_chain.pop();

        if (next) {

          next()

        }

        return

      }

    } else {

      if (m <= -this.editor_elem.offsetHeight) {

        this.slide_timer = 0;

        next = this.slide_chain.pop();

        if (next) {

          next()

        }

        return

      }

      delta = -delta

    }

    this.editor_elem.style.top = m + delta + "px";

    this.slide_timer = setTimeout(this.pageeditor_slide.bind(this), 50)

  },

  load_page_editor: function(page_id, view_id) {

    if (this.status > 0) return;

    this.status = 1;

    this.editor_elem = document.createElement("DIV");

    this.editor_elem.id = "pageeditor_wrapper";

    this.editor_elem.innerHTML = "<div id='pageeditor_topbar' Xstyle='height:30px'><div style='padding: 5px'><img style='float:left;margin-right: 4px' src='./images/apps_ajaxprogress1.gif'>Loading...</div></div>";

    this.editor_elem.style.top = -100 + 'px';

    document.body.appendChild(this.editor_elem);

    this.editor_elem.style.top = -this.editor_elem.offsetHeight + 'px';

    this.slide_timer = setTimeout(this.pageeditor_slide.bind(this), 50);

    this.page_id = page_id;

    this.view_id = view_id;

    var ajax = new SEMods.Ajax(this.onLayoutPageEditorSuccess.bind(this), this.onLayoutPageEditorFail.bind(this));

    var params = 'task=loadpageeditor&pid=' + this.page_id + '&vid=' + this.view_id + '&user=' + SEMods.Apps.ProfileDragDrop.owner;

    ajax.post(SEMods.Apps.api_endpoint, params)

  },

  load_page_editor2: function(page_id, view_id, default_section) {

    if (this.status == 2) {

      this.show_page_editor2();

      return;

    }

    if (!$("apps_overlay")) {

      new Element('div').setProperty('id', 'apps_overlay').inject(document.body);

      $('apps_overlay').setOpacity(0.6)

    }

    if (!$("apps_load")) {

      new Element('div').setProperty('id', 'apps_load').inject(document.body);

      $('apps_load').innerHTML = "<img src='./images/tbex_loadingAnimation.gif' alt='Loading' />"

    }

    $('apps_load').setStyle('display', 'block');

    this.editor_elem = document.createElement("DIV");

    this.editor_elem.id = "pageeditor2_wrapper";

    this.editor_elem.style.display = "none";

    document.body.appendChild(this.editor_elem);

    this.editor_elem_iframe = document.createElement("IFRAME");

    this.editor_elem_iframe.id = "pageeditor2_wrapper_iframe";

    this.editor_elem_iframe.style.display = "none";

    this.editor_elem_iframe.frameBorder = 0;

    document.body.appendChild(this.editor_elem_iframe);

    this.page_id = page_id;

    this.view_id = view_id;

    this.default_section = default_section;

    var ajax = new SEMods.Ajax(this.onLayoutPageEditor2Success.bind(this), this.onLayoutPageEditor2Fail.bind(this));

    var params = 'task=loadpageeditor2&pid=' + this.page_id + '&vid=' + this.view_id + '&user=' + SEMods.Apps.ProfileDragDrop.owner;

    ajax.post(SEMods.Apps.api_endpoint, params)

  },

  show_page_editor2 : function() {

    // adjust to screen height

    // pageeditmenu2_left (550), pageeditmenu2_right(550), pageeditor2_scroller_widgets(max-height: 480), pageeditor2_scroller_blocks(480), custom css textarea(450)

    var window_height = window.getHeight();

    var pageeditormenu2_height = 640;

    if(window_height < 700) {

      var height_shift = 100;

      $('pageeditmenu2_left').setStyle('height', 550 - height_shift + 'px');

      $('pageeditmenu2_right').setStyle('height', 550 - height_shift + 'px');

      $('pageeditor2_scroller_widgets').setStyle('max-height', 480 - height_shift + 'px');

      $('pageeditor2_scroller_blocks').setStyle('height', 480 - height_shift + 'px');

      if($('pageeditor2_style_customcss') != null) {

        $('pageeditor2_style_customcss').setStyle('height', 450 - height_shift + 'px');

      }

      pageeditormenu2_height -= height_shift;

    }

    $('pageeditor2_wrapper').setStyle('left', (window.getWidth() - 700) / 2 + 'px');

    $('pageeditor2_wrapper').setStyle('top', (window.getHeight() - pageeditormenu2_height) / 2 + 'px');

    $('pageeditor2_wrapper').setStyle('display', 'block');



    $('pageeditor2_wrapper_iframe').setStyle('height', pageeditormenu2_height + 'px');

    $('pageeditor2_wrapper_iframe').setStyle('left', (window.getWidth() - 700) / 2 + 'px');

    $('pageeditor2_wrapper_iframe').setStyle('top', (window.getHeight() - pageeditormenu2_height) / 2 + 'px');

    $('pageeditor2_wrapper_iframe').setStyle('display', 'block');



    $('apps_overlay').setStyle('display', 'block');

  },

  onAppPlaceCallback: function(identity) {

    if (identity.stripe == -1) {

      return

    }

    if (identity.placed) {

      return

    }

    identity.placed = true;

    SEMods.Apps.placeApp(identity.id, 1, SEMods.Apps.ProfileDragDrop.page_id, SEMods.Apps.ProfileDragDrop.view_id, SEMods.Apps.PageEditor.onAppPlaceFinished);

    return false

  },

  onAppPlaceFinished: function(app_id) {

    $('appcontent_' + app_id).highlight('#FFFFCC');

    SEMods.Apps.ProfileDragDrop.updateLayout();

    if (SEMods.Apps.PageEditor.designmode == 1) {

      SEMods.B.show('appcontent_' + app_id);

      SEMods.Apps.ProfileDragDrop.reloadContentEx(app_id)

    }

  },

  onDragStart2: function() {

    SEMods.Apps.PageEditor.padeeditor2_close()

  },

  padeeditor2_close: function() {

    $('pageeditor2_wrapper').setStyle('display', 'none');

    $('pageeditor2_wrapper_iframe').setStyle('display', 'none');

    $('apps_overlay').setStyle('display', 'none')

  },

  onLayoutPageEditor2Success: function(obj, responseText) {

    var r = [];

    try {

      r = eval('(' + responseText + ')')

    } catch(e) {

      r.status = 1

    };

    $('apps_load').setStyle('display', 'none');

    if (r.status == 0) {

      this.layout = r.layout;

      this.page_id = r.layout.page_id;

      this.view_id = r.layout.view_id;

      this.status = 2;

      this.designmode = 1;

      this.editor_elem_html = r.html;

      this.editor_elem.innerHTML = this.editor_elem_html;

      SEMods.Apps.ProfileDragDrop.add_new_objects(this.layout.newobjects, {

        'onDrop': SEMods.Apps.PageEditor.onAppPlaceCallback,

        'onDragStart': SEMods.Apps.PageEditor.onDragStart2.bind(this)

      });

      var elem = SEMods.B.ge("pageeditor2_appsettings");

      if (elem) {

        document.body.appendChild(elem.parentNode.removeChild(elem))

      }

      this.show_page_editor2();

      if (this.default_section) {

        SEMods.Apps.PageEditor.apps_pageeditmenu2_onclick(this.default_section)

      } else {

        SEMods.Apps.PageEditor.apps_pageeditmenu2_onclick('layout')

      }

    } else {

      this.status = 0;

      $('apps_overlay').setStyle('display', 'none');

      apps_show_error_message(r.err_msg ? r.err_msg: '')

    }

  },

  onLayoutPageEditorSuccess: function(obj, responseText) {

    var r = [];

    try {

      r = eval('(' + responseText + ')')

    } catch(e) {

      r.status = 1

    };

    this.slide_chain.unshift(function() {

      this.editor_elem_slide_direction = 1;

      this.slide_timer = setTimeout(this.pageeditor_slide.bind(this), 50)

    }.bind(this));

    if (r.status == 0) {

      this.layout = r.layout;

      this.page_id = r.layout.page_id;

      this.view_id = r.layout.view_id;

      this.status = 2;

      this.editor_elem_html = r.html;

      this.slide_chain.unshift(function() {

        this.editor_elem_slide_direction = 0;

        this.editor_elem.innerHTML = this.editor_elem_html;

        SEMods.Apps.ProfileDragDrop.add_new_objects(this.layout.newobjects, {

          'onDrop': SEMods.Apps.PageEditor.onAppPlaceCallback

        });

        this.slide_timer = setTimeout(this.pageeditor_slide.bind(this), 50)

      }.bind(this));

      this.slide_chain.unshift(function() {

        var elem = SEMods.B.ge("pageeditor_appsettings");

        if (elem) {

          document.body.appendChild(elem.parentNode.removeChild(elem))

        }

      }.bind(this))

    } else {

      this.status = 0;

      apps_show_error_message(r.err_msg ? r.err_msg: '')

    }

    if (this.slide_timer == 0) {

      var func = this.slide_chain.pop();

      func()

    }

  },

  onLayoutPageEditor2Fail: function(obj, responseText) {

    $('apps_load').setStyle('display', 'none');

    $('apps_overlay').setStyle('display', 'none');

    apps_show_error_message()

  },

  onLayoutPageEditorFail: function(obj, responseText) {

    apps_show_error_message()

  },

  save_layout: function() {

    if((this.layout.style_custom == 1) && ($('pageeditor2_style_customcss') != null)){

      //params += '&style_css=' + $('pageeditor2_style_customcss').value;

      this.layout.style_css = $('pageeditor2_style_customcss').value.replace(/"/g, "jsedq");

    } else {

      this.layout.style_css = '';

    }

    var ajax = new SEMods.Ajax(this.onSaveLayoutSuccess.bind(this), this.onSaveLayoutFail.bind(this));

    var params = 'task=savepagelayout&pid=' + this.page_id + '&vid=' + this.view_id + '&user=' + SEMods.Apps.ProfileDragDrop.owner;

    params += '&layout=' + SEMods.Apps.JSON.encode(this.layout);

    ajax.post(SEMods.Apps.api_endpoint, params)

  },

  onSaveLayoutSuccess: function(obj, responseText) {

    var r = [];

    try {

      r = eval('(' + responseText + ')')

    } catch(e) {

      r.status = 1

    };

    if (r.status == 0) {

      document.location = document.location

    } else {

      apps_show_error_message(r.err_msg ? r.err_msg: '')

    }

  },

  onSaveLayoutFail: function(obj, responseText) {

    apps_show_error_message()

  },

  apps_layoutmenu_onclick: function(id) {

    if (!SEMods.B.ge('widget_' + id).disabled) {

      SEMods.B.ge('widget_' + id).checked = !SEMods.B.ge('widget_' + id).checked;

      this.layout.widgets[id] = SEMods.B.ge('widget_' + id).checked * 1

    }

  },

  apps_pageeditmenu_onclick: function(id) {

    var apps_pagemenu_wasactive = this.apps_pagemenu_active;

    this.apps_pageeditmenu_hideall();

    if (apps_pagemenu_wasactive != id) {

      SEMods.B.ge("menubutton_" + id).className = "pageeditor_button_active";

      SEMods.B.show("pageeditor_menu_" + id);

      this.apps_pagemenu_active = id

    }

  },

  apps_pageeditmenu2_onclick: function(id) {

    var apps_pagemenu_wasactive = this.apps_pagemenu2_active;

    this.apps_pageeditmenu2_hideall();

    SEMods.B.ge("editor2_" + id).className = "pageeditor2_button_active";

    SEMods.B.show("pageeditor2_menu_" + id);

    this.apps_pagemenu2_active = id

  },

  apps_pageeditmenu2_hideall: function() {

    if (this.apps_pagemenu2_active) {

      SEMods.B.hide("pageeditor2_menu_" + this.apps_pagemenu2_active);

      SEMods.B.ge("editor2_" + this.apps_pagemenu2_active).className = '';

      this.apps_pagemenu2_active = null

    }

  },

  apps_pageeditmenu_hideall: function() {

    if (this.apps_pagemenu_active) {

      var elem = SEMods.B.ge("menubutton_" + this.apps_pagemenu_active);

      if (elem) elem.className = "pageeditor_button";

      SEMods.B.hide("pageeditor_menu_" + this.apps_pagemenu_active);

      this.apps_pagemenu_active = null

    }

  },

  apps_layout_select: function(id) {

    var elems = SEMods.Apps.ProfileDragDrop.getElementsByName_compat("apps_layout_selector", "A");

    for (var i = 0; i < elems.length; i++) {

      elems[i].className = "ymenu_item layout_unselected"

    }

    SEMods.B.ge("apps_layout_selector_" + id).className = "ymenu_item layout_selected";

    this.layout.layout_id = id

  },

  apps_theme_select: function(id) {

    var elems = SEMods.Apps.ProfileDragDrop.getElementsByName_compat("apps_style_selector", "A");

    for (var i = 0; i < elems.length; i++) {

      elems[i].className = "smenu_item style_unselected"

    }

    SEMods.B.ge("apps_style_selector_" + id).className = "smenu_item style_selected";

    this.layout.style_id = id

  },

  add_app: function(app_id) {

    this.onDragStart2();

    SEMods.Apps.ProfileDragDrop.buildStripes();

    identity = SEMods.Apps.ProfileDragDrop.getBoxIdentity(app_id);

    app_block_id = app_id;

    curDropTarget = SEMods.B.ge(app_block_id);

    stripe = SEMods.Apps.ProfileDragDrop.stripes[0];

    stripe.e.insertBefore(curDropTarget, stripe.e.firstChild);

    identity.stripe = stripe.id;

    identity.container = stripe.c;

    if (identity.onDrop) {

      identity.onDrop(identity)

    }

  },

  choose_style : function() {

    $('pageeditor2_style_choose').className = "active_style_tab";

    $('pageeditor2_style_custom').className = "";

    

    $('pageeditor2_style_custom_showroom').style.display = "none";

    $('pageeditor2_style_choose_showroom').style.display = "block";



    this.layout.style_custom = 0

  },

  custom_style : function() {

    $('pageeditor2_style_custom').className = "active_style_tab";

    $('pageeditor2_style_choose').className = "";

    

    $('pageeditor2_style_custom_showroom').style.display = "block";

    $('pageeditor2_style_choose_showroom').style.display = "none";



    this.layout.style_custom = 1

  },

  _cancelEvent: function(e) {

    var e = e ? e: window.event;

    if (e.preventDefault) e.preventDefault();

    if (e.stopPropagation) e.stopPropagation();

    e.cancelBubble = true;

    e.returnValue = false;

    return false

  }

}

SEMods.Paginator = function(ajax_endpoint, total_items, nohide) {

  this.ajax_endpoint = ajax_endpoint;

  this.total_items = total_items;

  if (nohide) this.nohide = true

}

SEMods.Paginator.prototype = {

  obj: null,

  ajax_endpoint: '',

  current_page: 1,

  total_items: 1,

  last_visible_item: 1,

  ajaxProgressElem: 'paginator_ajax_progress',

  ajaxContentElem: 'ajax_content',

  nohide: false,

  params: '',

  onError_callback: null,

  onComplete_callback: null,

  set_url: function(url) {

    this.ajax_endpoint = url

  },

  set_params: function(params) {

    this.params = params

  },

  paginate_left: function() {

    SEMods.B.ge("left_paginator").blur();

    if (this.current_page == 1) return false;

    this.paginate(this.current_page - 1)

  },

  paginate_right: function() {

    SEMods.B.ge("right_paginator").blur();

    if (this.total_items == this.last_visible_item) return false;

    this.paginate(this.current_page + 1)

  },

  paginate: function(page) {

    SEMods.B.toggle(this.ajaxProgressElem, this.ajaxContentElem);

    var ajax = new SEMods.Ajax(this.onPaginateSuccess.bind(this), this.onPaginateFail.bind(this));

    var params = "task=getitems" + "&p=" + page + this.params;

    ajax.post(this.ajax_endpoint, params)

  },

  refresh: function() {

    this.paginate(this.current_page)

  },

  hideAll: function() {

    SEMods.B.hide(this.ajaxProgressElem, this.ajaxContentElem, "paginator")

  },

  showAll: function() {

    SEMods.B.show(this.ajaxContentElem);

    if ((this.current_page == 1) && (this.last_visible_item == this.total_items)) {} else SEMods.B.show("paginator")

  },

  onPaginateSuccess: function(ajaxObj, responseText) {

    var r = [];

    try {

      r = eval('(' + responseText + ')')

    } catch(e) {

      r.status = 1;

      r.html = 'Error loading content.'

    };

    if (typeof r != 'object') {

      r = [];

      r.status = 1;

      r.html = 'Error loading content.'

    }

    if (r.status == 0) {

      this.current_page = r.page;

      this.total_items = r.total;

      this.last_visible_item = r.to;

      SEMods.B.ge("page_from").innerHTML = r.from;

      SEMods.B.ge("page_to").innerHTML = r.to;

      SEMods.B.ge("total_items").innerHTML = r.total;

      if (this.total_items == 0) {} else {

        if ((this.current_page == 1) && (this.last_visible_item == this.total_items)) {

          if (!this.nohide) SEMods.B.hide("paginator")

        } else {

          SEMods.B.show("paginator")

        }

      }

      if (this.current_page == 1) {

        SEMods.B.ge("left_paginator").className = "paginator_disabled"

      } else {

        SEMods.B.ge("left_paginator").className = ""

      }

      if (r.total == r.to) {

        SEMods.B.ge("right_paginator").className = "paginator_disabled"

      } else {

        SEMods.B.ge("right_paginator").className = ""

      }

    } else if (this.onError_callback) {

      this.onError_callback()

    }

    SEMods.B.ge(this.ajaxContentElem).innerHTML = r.html;

    SEMods.B.toggle(this.ajaxProgressElem, this.ajaxContentElem)

    if (this.onComplete_callback) {

      this.onComplete_callback();

    }

  },

  onPaginateFail: function(ajaxObj, respText) {

    SEMods.B.ge(this.ajaxContentElem).innerHTML = "Error";

    SEMods.B.toggle(this.ajaxProgressElem, this.ajaxContentElem);

    if (this.onError_callback) {

      this.onError_callback()

    }

  }

}

function SEModsBase() {};

SEModsBase.version = "1.0.1";

SEModsBase.prototype = {

  extend: function(source, value) {

    var extend = SEModsBase.prototype.extend;

    if (arguments.length == 2) {

      var ancestor = this[source];

      if ((ancestor instanceof Function) && (value instanceof Function) && ancestor.valueOf() != value.valueOf() && /\b_super\b/.test(value)) {

        var method = value;

        value = function() {

          var previous = this._super;

          this._super = ancestor;

          var returnValue = method.apply(this, arguments);

          this._super = previous;

          return returnValue

        };

        value.valueOf = function() {

          return method

        };

        value.toString = function() {

          return String(method)

        }

      }

      return this[source] = value

    } else if (source) {

      var _prototype = {

        toSource: null

      };

      var _protected = ["toString", "valueOf"];

      if (SEModsBase._prototyping) _protected[2] = "constructor";

      for (var i = 0;

      (name = _protected[i]); i++) {

        if (source[name] != _prototype[name]) {

          extend.call(this, name, source[name])

        }

      }

      for (var name in source) {

        if (!_prototype[name]) {

          extend.call(this, name, source[name])

        }

      }

    }

    return this

  },

  _super: function() {}

};

SEModsBase.extend = function(_instance, _static) {

  var extend = SEModsBase.prototype.extend;

  if (!_instance) _instance = {};

  if (_instance.constructor == Object) {

    _instance.constructor = new Function

  }

  SEModsBase._prototyping = true;

  var _prototype = new this;

  extend.call(_prototype, _instance);

  var constructor = _prototype.constructor;

  _prototype.constructor = this;

  delete SEModsBase._prototyping;

  var klass = function() {

    if (!SEModsBase._prototyping) constructor.apply(this, arguments);

    this.constructor = klass

  };

  klass.prototype = _prototype;

  klass.extend = this.extend;

  klass.toString = function() {

    return String(constructor)

  };

  extend.call(klass, _static);

  var object = constructor ? klass: _prototype;

  if (object.constructor instanceof Function) object.constructor();

  return object

};

var semods_app = SEModsBase.extend({

  app_id: '',

  page_id: '',

  view_id: '',

  instance_id: '',

  stripe: '',

  container: '',

  placement: '',

  app_block_id: '',

  owner: '',

  timer: null,

  timer_period: 60 * 1000,

  APPS_PAGE_PROFILE: 1,

  APPS_PAGE_USERHOME: 2,

  APPS_PAGE_MYPAGE: 3,

  APPS_PAGE_GROUP: 4,

  APPS_PAGE_HOME: 5,

  APPS_PAGE_EVENT: 6,

  APPS_PAGE_NETWORK: 7,

  APPS_PAGE_CANVAS: 100,

  constructor: function(app_id, page_id, view_id, instance_id, stripe_id, container, placement) {

    this.app_id = app_id;

    this.page_id = page_id;

    this.view_id = view_id;

    this.instance_id = instance_id;

    this.stripe_id = stripe_id;

    this.container = container;

    this.placement = placement;

    this.app_block_id = 'app_' + app_id

  },

  request: function(params, onDone, onFail) {

    var ajax = new SEMods.Ajax(onDone, onFail);

    var ajax_params = 'pageid=' + this.page_id + '&viewid=' + this.view_id + '&appid=' + this.app_id + '&instanceid=' + this.instance_id;

    if (this.stripe_id) {

      ajax_params += '&stripe=' + this.stripe_id

    }

    if (this.container) {

      ajax_params += '&container=' + this.container

    }

    if (this.placement) {

      ajax_params += '&placement=' + this.placement

    }

    if (params) {

      ajax_params += '&' + params

    }

    ajax.post(SEMods.Apps.ProfileDragDrop.api_content_endpoint, ajax_params)

  },

  set_timer_period_in_seconds: function(timer_period) {

    this.timer_period = timer_period * 1000

  },

  start_timer: function(timer_period) {

    if (typeof timer_period == 'undefined') timer_period = this.timer_period;

    if (timer_period == 0) return;

    if (this.on_timer) {

      this.timer = setTimeout(this.on_timer.bind(this), timer_period)

    }

  },

  stop_timer: function() {

    clearTimeout(this.timer)

  },

  register_on_drop: function() {

    if (this.on_drop) {

      SEMods.Apps.register_on_drop(this.app_id, this.on_drop.bind(this))

    }

  },

  register_on_ajax_load: function() {

    if (this.on_ajax_load) {

      SEMods.Apps.register_on_ajax_load(this.app_id, this.on_ajax_load.bind(this))

    }

  },

  submit_form: function(form_id) {

    var elem = SEMods.B.ge(form_id);

    if (!elem) {

      return

    }

    var editinplace = 1;

    var editor = new SEMods.Apps.ContentEditor(this.page_id, this.view_id, this.app_id, this.app_block_id, this.stripe_id, this.placement, this.container, this.owner, editinplace);

    editor.form = elem;

    editor.submit_form()

  },

  load_content: function() {

    SEMods.Apps.ProfileDragDrop.reloadContentEx(this.app_block_id)

  }

});







SEMods.Apps.RssFeedReader = {};

SEMods.Apps.RssFeedReader = {

  feeds : [],

  status : 0,

  app_id : 0,

  item_id : 0,

  iframe_elem : null,

  iframe_wrapper_elem : null,

  iframe_active : false,

  position_save_y : 0,

  reader_hidden : true,

  unread_count : 0,

  content_window : null,

  current_feed_item_id : null,

  overlay_iframe : null,  



  read_content_inline : false,

  

  setting_dock_to_menu : 1,

  setting_rssreader_enabled : 1,

  setting_show_bottom_ad : 0,

  setting_bottom_ad_height : 60,

  

  lang_feed_view : '',

  lang_web_view : '',

  

  browser_overlay_iframe : !SEMods.Browser.isOpera && !/Safari/i.test(navigator.userAgent),

  

  read_all : function() {

    $$('div.rss_feed_reader_headline').each( function(el) { el.removeClass('rss_feed_reader_headline_unread'); el.addClass('rss_feed_reader_headline_read');} );

    var read_items = [];

    for (var i in this.feeds[this.app_id].items) {

      this.feeds[this.app_id].items[i].unread = false;

      read_items.push(i);

    }

    this.unread_count = 0;

    this.update_unread_counter();

    

    read_items.join(',');



    var params = 'task=rss_feed_read_all&pid=' + SEMods.Apps.ProfileDragDrop.page_id+ '&vid=' + SEMods.Apps.ProfileDragDrop.view_id + '&appid=' + this.app_id + '&feed_read_items=' + read_items;

    new SEMods.Ajax().post(SEMods.Apps.ProfileDragDrop.api_endpoint, params)

  },



  unread_all : function() {

    $$('div.rss_feed_reader_headline').each( function(el) { el.removeClass('rss_feed_reader_headline_read'); el.addClass('rss_feed_reader_headline_unread');} );

    for (var i in this.feeds[this.app_id].items) {

      this.feeds[this.app_id].items[i].unread = true;

    }

    this.unread_count = $$('div.rss_feed_reader_headline').length;

    this.update_unread_counter();

    

    var params = 'task=rss_feed_unread_all&pid=' + SEMods.Apps.ProfileDragDrop.page_id+ '&vid=' + SEMods.Apps.ProfileDragDrop.view_id + '&appid=' + this.app_id;

    new SEMods.Ajax().post(SEMods.Apps.ProfileDragDrop.api_endpoint, params)

  },

  

  switch_content_view : function() {

    // iframe -> inline

    if(this.read_content_inline == 1) {

      $('rss_feed_reader_button_contentviewswitch').innerHTML = this.lang_feed_view;

      this.read_content_inline = 0;

    } else {

      $('rss_feed_reader_button_contentviewswitch').innerHTML = this.lang_web_view;

      this.read_content_inline = 1;

      this.iframe_active = 0;

      if(this.iframe_elem) {

        this.iframe_elem.parentNode.removeChild(this.iframe_elem);

      }

    }

    this.show_item(this.current_feed_item_id);

  },

  

  update_unread_counter : function() {

    $('rss_feed_reader_unreadcount').innerHTML = this.unread_count;

  },

  

  read_item : function (app_id,feed_item_id) {

    this.app_id = app_id;

    this.item_id = feed_item_id;

    

    this.current_feed_item_id = null;



    if(this.setting_rssreader_enabled == 1) {

      

      this.populate_items();

      this.show_feed_reader();

      this.show_item(feed_item_id);

      

    } else {

      

      this.show_item_in_new_window(feed_item_id);

      

    }

    

  },



  show_item_in_new_window : function(feed_item_id) {

    var feed_item = this.feeds[this.app_id].items[feed_item_id];

    if (typeof feed_item == 'undefined') {

      feed_item = this.current_feed_item_obj;

    }

    this.current_feed_item_id = feed_item_id;

    this.current_feed_item_obj = feed_item;



    if(feed_item.unread) {

      this.unread_count--;

      feed_item.unread = false;

      this.report_read_item(feed_item_id);

    }



    window.open(feed_item.link);



  },

  

  set_feed : function(app_id, feed) {

    this.feeds[app_id] = feed;

    

    // TODO: make new items slide from top

    if(!this.reader_hidden && (this.app_id == app_id)) {

      this.populate_items();

    }

    

  },

  

  show_item : function(feed_item_id) {

    var feed_item = this.feeds[this.app_id].items[feed_item_id];

    if (typeof feed_item == 'undefined') {

      // try to recover from current item

      feed_item = this.current_feed_item_obj;

    }

    this.current_feed_item_id = feed_item_id;

    this.current_feed_item_obj = feed_item;

    

    var src_elem = this.app_id + "_" + feed_item_id;

    

    try {

      $(src_elem).removeClass('rss_feed_reader_headline_unread');

      $(src_elem).addClass('rss_feed_reader_headline_read');

    } catch(ex) {}

      

    try {

      if(this.current_feed_item) {

        $(this.current_feed_item).removeClass('rss_feed_reader_headline_selected');

      }

    } catch(ex) {}

      

    try {

      this.current_feed_item = src_elem;

      $(src_elem).addClass('rss_feed_reader_headline_selected');

    } catch(ex) {}

    

    if(this.read_content_inline == 1) {

      $('rss_feed_reader_content_title_link').href = feed_item.link;

      $('rss_feed_reader_content_title_link').innerHTML = feed_item.title;

      $('rss_feed_reader_content_title_date').innerHTML = feed_item.date;

      $('rss_feed_reader_content_content').innerHTML = feed_item.content;

      $('rss_feed_reader_content_inline').style.display = 'block';

    } else {

      $('rss_feed_reader_content_inline').style.display = 'none';

      if(this.iframe_elem == null) {

        this.iframe_elem = document.createElement("IFRAME");

        this.iframe_elem.id = "rss_feed_reader_content_iframe";



        //var height_delta = 18; // offsets

        var height_delta = 2; // offsets



        $(this.iframe_elem).setStyle('height', $('rss_feed_reader_content').offsetHeight - height_delta + 'px');

        //$(this.iframe_elem).setStyle('width', $('rss_feed_reader_content').offsetWidth - 4 + 'px');

        $(this.iframe_elem).setStyle('width', $('rss_feed_reader_content').offsetWidth - 2 + 'px');

        this.iframe_elem.frameBorder = 0;

      }

      if(!this.iframe_active) {

        $('rss_feed_reader_content').appendChild(this.iframe_elem);

        this.iframe_active = true;

      }

      this.iframe_elem.src = feed_item.link;

        

    }

    

    if(feed_item.unread) {

      this.unread_count--;

      feed_item.unread = false;

      this.report_read_item(feed_item_id);

    }

    

    this.update_unread_counter();

    

  },

  

  report_read_item : function(feed_item_id) {

    var feed_item = this.feeds[this.app_id].items[feed_item_id];

    var ajax = new SEMods.Ajax();

    var params = 'task=rss_feed_read_item&pid=' + SEMods.Apps.ProfileDragDrop.page_id+ '&vid=' + SEMods.Apps.ProfileDragDrop.view_id + '&appid=' + this.app_id + '&feed_item_id=' + feed_item_id + '&feed_item_link=' + escape(feed_item.link) + '&feed_item_title=' + encodeURIComponent(feed_item.title);

    ajax.post(SEMods.Apps.ProfileDragDrop.api_endpoint, params)

  },

  

  populate_items : function() {





    items = '';

    var unread_count = 0;

    

    for (var i in this.feeds[this.app_id].items) {

      readundreadclass = this.feeds[this.app_id].items[i].unread ? "rss_feed_reader_headline_unread" : "rss_feed_reader_headline_read";

      if(this.feeds[this.app_id].items[i].unread) {

        unread_count++;

      }

      items += "<div id=\"" + this.app_id + "_" + this.feeds[this.app_id].items[i].id + "\" class=\"rss_feed_reader_headline " + readundreadclass + "\"><a onclick=\"SEMods.Apps.RssFeedReader.show_item('" + this.feeds[this.app_id].items[i].id + "'); this.blur(); return false\" href=\"\">" + this.feeds[this.app_id].items[i].title + "</a></div>";

    }

    this.unread_count = unread_count;



    $('rss_feed_reader_headlines').innerHTML = items;

    

  },

  

  show_feed_reader : function() {

    this.position_save_y = $(document.body).getScrollTop();

    

    if(this.browser_overlay_iframe) {

      if(this.iframe_wrapper_elem == null) {

        this.iframe_wrapper_elem = document.createElement("IFRAME");

        this.iframe_wrapper_elem.id = "rss_feed_reader_wrapper_iframe";

        this.iframe_wrapper_elem.style.display = "none";

        this.iframe_wrapper_elem.frameBorder = 0;

        document.body.appendChild(this.iframe_wrapper_elem);

      }

    }

    

    $('rss_feed_reader_wrapper').setStyle('display', 'block');    

    if(this.browser_overlay_iframe) {

      $('rss_feed_reader_wrapper_iframe').setStyle('display', 'block');

    }

    $(document.body).setStyle('overflow', 'hidden');

    document.body.scroll = "no";

    this.adjust_to_screen();



    new Fx.Scroll($(document.body)).set(0, 0);

    this.reader_hidden = false;



    if(!this.browser_overlay_iframe) {



      // hide "content" div

      var content_window = $$('div.content');

      if(content_window && content_window.length > 0) {

        this.content_window = content_window[0];

        if(SEMods.Browser.isIE) {

          this.content_window.setStyle('margin-left', '-9999px');    

        } else {

          this.content_window.style.display = "none";

        }

      }



    }

    

    

    // ad

    if(this.setting_show_bottom_ad == 1) {

      $('rss_feed_reader_ads').setStyle('height', this.setting_bottom_ad_height + 'px');    

      $('rss_feed_reader_ads').setStyle('display', 'block');    

    }



    // feed title

    var feed = this.feeds[this.app_id];

    $('rss_feed_reader_title_link').innerHTML = feed.title;



    this._addEvent(document.body, "resize", this.onResize.bind(this));

    

  },

  

  adjust_to_screen : function() {

    // adjust to screen height

    // pageeditmenu2_left (550), pageeditmenu2_right(550), pageeditor2_scroller_widgets(max-height: 480), pageeditor2_scroller_blocks(480)

    var window_height = window.getHeight();

    var window_width = window.getWidth();

    

    var height_shift = 0;

    

    if(this.setting_dock_to_menu == '1') {



      var content_window = $$('div.content');

      if(content_window && content_window.length > 0) {

        content_window = content_window[0];

        height_shift = SEMods.B.findY(content_window);

      }

      

    }

    

    var height_delta = 30 + 10 + 10 + 10 + 4*2;  // header height+padding + border (4)

    var width_delta = 5*2 + 4*2;  // margin + border



    // chat plugin

    var bottom_height_shift = 0;

    if($('seIM_tray') && ($$('td.seIMInvisible').length == 0) ) {

      bottom_height_shift = $('seIM_tray').getHeight();

    }

    

    $('rss_feed_reader_headlines').setStyle('height', window_height - height_shift - bottom_height_shift - height_delta + 'px');



    var content_height_shift = 0;



    if(this.setting_show_bottom_ad == 1) {

      content_height_shift += this.setting_bottom_ad_height; // ads

      //content_height_shift += 100; // ads

    }



      

    $('rss_feed_reader_content').setStyle('height', window_height - height_shift - bottom_height_shift - height_delta - content_height_shift + 'px');



    $('rss_feed_reader_wrapper').setStyle('width', window_width - width_delta + 'px');



    $('rss_feed_reader_wrapper').setStyle('left', '0px');

    $('rss_feed_reader_wrapper').setStyle('top', height_shift + 'px');

    $('rss_feed_reader_wrapper').setStyle('display', 'block');



    if(this.browser_overlay_iframe) {

      $('rss_feed_reader_wrapper_iframe').setStyle('width', window_width - width_delta + 'px');

      $('rss_feed_reader_wrapper_iframe').setStyle('left', '0px');

      $('rss_feed_reader_wrapper_iframe').setStyle('top', height_shift + 'px');

      $('rss_feed_reader_wrapper_iframe').setStyle('display', 'block');

      $('rss_feed_reader_wrapper_iframe').setStyle('height', $('rss_feed_reader_wrapper').getHeight() + 'px' );

    }



    if(!this.browser_overlay_iframe) {

      $('rss_feed_reader_wrapper').setStyle('z-index', '0');

    }



  },

  

  hide_feed_reader : function() {



    this._removeEvent(document.body, "resize");



    this.reader_hidden = true;



    if(!this.browser_overlay_iframe) {

      if(this.content_window) {

        if(SEMods.Browser.isIE) {

          this.content_window.setStyle('margin-left', '0px');    

        } else {

          this.content_window.style.display = "block";

        }

      }

    }





    new Fx.Scroll($(document.body)).set(0, this.position_save_y);



    $('rss_feed_reader_wrapper').setStyle('display', 'none');    

    if(this.browser_overlay_iframe) {

      $('rss_feed_reader_wrapper_iframe').setStyle('display', 'none');

    }

    $(document.body).setStyle('overflow', 'auto');

    document.body.scroll = "auto";

    

    // also hide iframe

    if(this.iframe_elem) {

      this.iframe_elem.src = "";

    }

    

  },

  

  onResize : function() {

    this.adjust_to_screen();

  },

  

  load_feed_reader : function() {

  },



  _addEvent: function($obj, $event, $handler) {

    var fn = $handler;

    if (!$obj.attachedEvents) $obj.attachedEvents = new Array();

    if ($obj.attachedEvents[$event]) this._removeEvent($obj, $event);

    $obj.attachedEvents[$event] = fn;

    if (typeof $obj.addEventListener != 'undefined') $obj.addEventListener($event, $handler, false);

    else if (typeof $obj.attachEvent != 'undefined') $obj.attachEvent('on' + $event, $handler)

  },

  _removeEvent: function($obj, $event) {

    if (!$obj.attachedEvents || !$obj.attachedEvents[$event]) return;

    if (typeof $obj.removeEventListener != 'undefined') $obj.removeEventListener($event, $obj.attachedEvents[$event], false);

    else if (typeof $obj.detachEvent != 'undefined') $obj.detachEvent('on' + $event, $obj.attachedEvents[$event])

  },

  _cancelEvent: function(e) {

    var e = e ? e: window.event;

    if (e.preventDefault) e.preventDefault();

    if (e.stopPropagation) e.stopPropagation();

    e.cancelBubble = true;

    e.returnValue = false;

    return false

  }

  

}

