var sz_util =
{
  getRegionWH: function( elem )
  {
    var region    = YAHOO.util.Dom.getRegion(elem);
    region.width  = region.right - region.left;
    region.height = region.bottom - region.top;

    return region;
  },

  ajaxRequest: function(method, req_url, callback, args) 
  {
    if (method == "POST") {
      if (args && args.length) {
        args = [args, '&fb_sig_user=',fb_sig_user,'&fb_sig_session_key',fb_sig_session_key].join("");
      } else {
        args = ['fb_sig_user=',fb_sig_user,'&fb_sig_session_key',fb_sig_session_key].join("");
      }
    } else {
      var urlobj = new URL(req_url);

      if (typeof(fb_sig_user) != "undefined") 
      {
        urlobj.addArg('fb_sig_user', fb_sig_user, false);
        urlobj.addArg('fb_sig_session_key', fb_sig_session_key, false);
      }
      req_url = urlobj.getUrlStr();
    }

    YAHOO.util.Connect.asyncRequest(method, req_url, callback, args);
  }
};


var URL = function( url_str )
{
  this.parseUrlStr = function(url_str)
  {
    var proto_arr = url_str.split("://");

    if (proto_arr.length > 0) {
      this.proto = proto_arr.shift();
    } else {
      this.proto = "http";
    }
    
    if (proto_arr.length < 1) {
      console.error("Unparsable URL ", url_str);
      return;
    }

    host_arr = proto_arr.shift().split("/");

    if (host_arr.length > 0) {
      this.host = host_arr.shift();
    }

    var post_host = '';
    if (host_arr.length > 0) {
      var post_host = host_arr.join("/"); 
    }

    var path_arr = post_host.split("?");

    var path_str = '';
    if (path_arr.length > 0) {
      path_str = path_arr.shift();
    }
    this.path = "/" + path_str;

    var query_arr = [];
    if (path_arr.length > 0) {
      query_arr = path_arr.shift().split("#");
    }

    var query_str = '';
    if (query_arr.length > 0) {
      query_str = query_arr.shift();
    }

    var hash_str = '';
    if (query_arr.length > 0) {
      hash_str = query_arr.shift();
    }
    if (hash_str && hash_str != '') {
      this.hash = "#" + hash_str;
    }
    
    var querystr_arr = query_str.split("&");
    for (var qs_idx in querystr_arr)
    {
      var pair_arr = querystr_arr[qs_idx].split("=");
      var key = pair_arr.shift();
      var val = pair_arr.shift();
      var val_arr = [];
      if (val) {
        val_arr = val.split(",");
        for (var val_idx in val_arr)
        {
          this.addArg(key, val_arr[val_idx], true);
        }
      } else if (key) {
        this.addArg(key, '', true);
      }
    }
  }

  this.getUrlStr = function()
  {
    var query_str_list = [];
    for (var key in this.query_args) 
    {
      var val_list = this.query_args[key];

      if (val_list.length > 0) 
      {
        var esc_val_list = [];
        for (var val_idx in val_list) {
          var val = val_list[val_idx];
          esc_val_list.push(escape(val));
        }
        query_str_list.push( [ escape(key), "=", esc_val_list.join(",") ].join("") );
      }
    }
    var query_str = '';
    if (query_str_list.length > 0) {
      query_str = [ '?', query_str_list.join("&") ].join("");
    }

    return [ 
        (this.proto ? this.proto : 'http') , "://" , 
        (this.host  ? this.host : "www.dipity.com" ) , 
        (this.path  ? this.path : "/") , 
        query_str , 
        this.hash 
            ].join("");
  }

  this.resetArg = function( key ) {
    this.query_args[key] = [];
  }

  this.addArg = function( key, val, allowMulti )
  {
    if (typeof(this.query_args[key]) != "undefined" && allowMulti != false) {
      this.query_args[key].push(val);
    } else {
      if (typeof(val) == "string") {
        this.query_args[key] = [ val ];
      } else if (typeof(val) != "undefined") {
        this.query_args[key] = val;
      }
    }
  }

  this.removeArg = function( key )
  {
    if (typeof(this.query_args[key]) != "undefined") {
      this.query_args[key] = null;
    }
  }

  this.getArg = function( key )
  {
    if (this.query_args[key]) {
      return this.query_args[key];
    } else {
      return "";
    }
  }

  this.proto = '';
  this.host  = '';
  this.path  = '';
  this.query_args = {};
  this.hash  = '';

  if (url_str != null) {
    this.parseUrlStr(url_str);
  }

};
