 // helper function to suck out a parameter from a url
var Common = {
  gsub : function(gstring, prev_str, new_str){
    var new_gstring = gstring;
    var pos = new_gstring.indexOf(prev_str);
    if(pos > -1){
      new_gstring = "" + (new_gstring.substring(0, pos) + new_str + new_gstring.substring((pos + prev_str.length), new_gstring.length));
    }
    if(new_gstring.indexOf(prev_str) > -1){
      return Common.gsub(new_gstring, prev_str, new_str);
    }
    else{
      return new_gstring;
    }
  },
  track : function(url){
    if(typeof(window.pageTracker) != 'undefined'){
      window.pageTracker._trackPageview(url);
    }
    if(typeof(window.universal_pageTracker) != 'undefined'){
      window.universal_pageTracker._trackPageview(url);
    }
  },
  param_from_url : function(url, param_name){
     param_name = param_name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
     var regexS = "[\\?&]"+param_name+"=([^&#]*)";
     var regex = new RegExp( regexS );
     var results = regex.exec( url );
     if( results == null )
     return null;
     else
     return decodeURIComponent(results[1]);
  },
  // TODO this doesnt work yet!
  change_param_from_url : function(url, param_name, new_value){
    param_name = param_name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+param_name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( url );
    if( results == null )
     return url + '&'+param_name+'='&encodeURIComponent('new_value');
    else{
      //return url + '&'+param_name+'='&encodeURIComponent('new_value');
    }
  },
  set_parent_hash : function(parent_url, hash_name, hash_data){
    Common.set_parent_location(Common.change_hash_param(parent_url, hash_name, hash_data));
  },
  change_hash_param : function(url, param_name, new_value){
    var hash_idx = url.search('#')
    if(hash_idx == -1){
      return url + '#' + param_name + '=' + new_value;
    }

    param_name = param_name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&#]"+param_name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec(url.substr(hash_idx));
    if( results == null )
      return url + '&' + param_name + '=' + new_value;
    else{
      var idx = url.search(results[0])
      return (url.substr(0, idx+1) + param_name+'='+ encodeURIComponent(new_value) + url.substr(idx+results[0].length));
    }
  },
  set_parent_location : function(url){
    //might not have access to property
    try{
      parent.location = url;
    }
    catch(e){
      //
    }
  },
  preloadimg : function(src){
    var im = new Image();
    im.src = src;
  },
  createCookie : function (name,value,days) {
      if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
      }
      else var expires = "";
      document.cookie = name+"="+value+expires+"; path=/";
  },
  readCookie : function(name) {
      var nameEQ = name + "=";
      var ca = document.cookie.split(';');
      for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) {
          var str = c.substring(nameEQ.length, c.length);
          return decodeURIComponent(str.replace(/\+/g, '%20'));
        }
      }
      return null;
  },
  eraseCookie : function(name) {
      createCookie(name,"",-1);
  },
  track_time : function(url, time_array){
    for(var i=0; i<time_array.length; i++){
      window.track_time_index = 0;
      value = time_array[i];

      setTimeout(function(){
          var value = time_array[window.track_time_index];
          window.track_time_index++;
          $.get(url, { time : value});
        }, value*1000*60);
    }
    // do the last repeating interval
  },
  add_url_param : function(url, param_name, value){
    if(url.indexOf("\?") > 0){
      return (url + "&" + param_name + "=" + value);
    }
    else{
      return (url + "?" + param_name + "=" + value);
    }
  }
}
