function initi () {
  // rpc services our container supports
  gadgets.rpc.register('resize_iframe', this.setHeight);
  gadgets.rpc.register('set_pref', this.setUserPref);
  gadgets.rpc.register('set_title', this.setTitle);
  gadgets.rpc.register('requestNavigateTo', this.requestNavigateTo);
}

function setHeight (ht) {
  if (document.getElementById(this.f) != undefined) {
    var maxHeight = 4096
    // change the height of the gadget iframe, limit to maxHeight height
    if (ht > maxHeight) {
      ht = maxHeight;
    }
    if(ht) {
      document.getElementById(this.f).style.height = ht+'px'
    }
  }
}

function requestNavigateTo(view, opt_params) {
  if(document.getElementById(this.f)) {
    var mysrc = document.getElementById(this.f).src
    var params = _parseIframeUrl(mysrc);
    var url = _getUrlForView(view, params.owner, params.aid, params.mid);
    if (opt_params) {
      //var paramStr = Object.toJSON(opt_params);
      var paramStr = toJSON(opt_params);
      if (paramStr.length > 0) {
        url += '&appParams=' + encodeURIComponent(paramStr);
      }
    }
    if (url && document.location.href.indexOf(url) == -1) {
      document.location.href = url;
    }
  }
}

function _parseIframeUrl(url) {
  // parse the iframe url to extract the key = value pairs from it
  var ret = new Object();
  var hashParams = url.split('&');
  var param = key = val = '';
  for (i = 0 ; i < hashParams.length - 1 ; i++) {
    param = hashParams[i];
    key = param.substr(0, param.indexOf('='));
    val = param.substr(param.indexOf('=') + 1);
    ret[key] = val;
  }
  return ret;
}

function _getUrlForView(view, person, app, mod) {
  if (view === 'preview') {
          return '/os_application_preview.php?app_id='+app;
  } else if (view === 'profile') {
          return '/user.php';
  } else if (view === 'canvas') {
          return '/os_application.php?uid='+person+'&app_id='+app+'&mod_id='+mod;
  } else {
          return null;
  }
}

function setTitle (title) {
  if (document.getElementById(this.f+'_title')) {
    // update the title, and make sure we don't break it's html
    document.getElementById(this.f+'_title').innerHTML = title.replace(/&/g, '&amp;').replace(/</g, '&lt;').substr(0,30);
  }
}

function setUserPref(editToken, name, value) {
  if(document.getElementById(this.f)) {
    var mysrc = document.getElementById(this.f).src
    var params = _parseIframeUrl(mysrc);
    $.post(
        "ajax/os_save_user_pref.php",
          {
            'st' : encodeURIComponent(params.st),
            'name' : encodeURIComponent(name),
            'value' : encodeURIComponent(value)
          },
        function(htmlData) {
        }
      );
  }
}

gadgets.container = initi(); 
