/* 
 * JavaScript
 * 
 * Created on: 04.09.2006
 *
 * Project: URL Paramenter Tools
 * File:    url_tools.js
 * 
 * @autor Artur Wied <a.wied@zeitgenossen.de>
 * @version 0.2B3
 * @copyright 2006-2007 ZEITGENOSSEN
 *
*/

/**
 * @package getParStr()
 * 
 * gibt ein String von Paramenter aus URL (http://laden/index.php?par=val)
 *
 * Beispielabruf:
 *
 * var parstr = getParStr(window.location.href);
 * 
 * @param string url "http://laden/index.php?par1=val&par2=val&par3=val"
 * @return string gibt alle Parameter aus
 * */
function getParStr(url) {
  if (url.indexOf('?') != -1) {
    return url.substr(url.indexOf('?') + 1);
  } else 
    return false;
}

/**
 * @package getUrlStr()
 * 
 * entfernt aus einem URL String alle Parameter
 *
 * Beispielabruf:
 * 
 * var urlnopar = getUrlStr(window.location.href);
 *
 * @param string url "http://laden/index.php?par1=val&par2=val&par3=val"
 * @return gibt URL ohne Parameter zurück
 * */
function getUrlStr(url) {
  if (url.indexOf('?') != -1) {
    return url.substr(0, url.indexOf('?'));
  } else 
    return url;
}

/**
 * @package par2object()
 * 
 * generiert ein Object aus einem Parameter String
 * 
 * Beispielabruf:
 * 
 * var parobject = par2object(getParStr(window.location.href));
 * 
 * @param string par Parameter als String in Form "par1=val&par2=val"
 * @return object gibt Parameter als Obecteigenschaften aus
 * */
function par2object(par){
  var out = new Object();
  if (par.indexOf('&') != -1) {
    var rpar = par.split('&');
  } else {
    var rpar = new Array();
    rpar[0] = par;
  }
  for (var i = 0; i < rpar.length; i++) {
    var p = rpar[i];
    var parobject = p.split('=');
    out[parobject[0]] = parobject[1];
    }
  return out;
}

/**
 * @package object2par()
 * 
 * wandelt Objecteigenschaften in ein Parameter String um
 *
 * Beispielabruf:
 * 
 * var parobject = new Object();
 * parobject['par1'] = value;
 * parobject['par2'] = value;
 * parstr = object2par(parobject);
 *
 * @param object arpar Obect mit Eigenschaften
 * @return string gibt String aus Obecteigensschaften
 * */
function object2par(arpar) {
  var out = new Array;
  var i = 0;
  for (var e in arpar) {
    out[i] = e + '=' + arpar[e];
    i++;
  }
  return out.join('&');
}

/**
 * @package getUrlPar()
 *
 * gibt einen Parameter aus URL
 *
 * Beispielabruf:
 * 
 * var par = getUrlPar('http:/laden/index.php?par1=val&par2=val', 'par1');
 * 
 * @param string url URL mit Parametern
 * @param string par auszugebende Parameter
 * @return string gibt Value von den Parameter
 * */
function getUrlPar(url, par) {
  var parstr = getParStr(url);
  if (parstr)
  	var parobject = par2object(parstr);
  else return false;
  if (parobject[par])
    return parobject[par];
  else return false;
}

/**
 * @package delUrlPar()
 * 
 * löscht einen Parameter aus URL 
 * 
 * Beispielabruf:
 * 
 * var newurl = delUrlPar(oldurl, 'par1');
 *
 * @param string url URL mit Parameter 
 * @param string par zuloschende Parameter
 * @return string or bolean gibt bei Erfolg neue URL, anderfals false aus
 * */
function delUrlPar(url, par) {
  var parstr = getParStr(url);
  if (parstr)
    var parobject = par2object(parstr);
  else return false;
  del = delete parobject[par];
  if (del)
    return url.substr(0, url.indexOf('?')) + '?' + object2par(parobject);
  else return false;	
}

/**
 * @packege updateUrlPar()
 *
 * aktualiseirt Parametervalue in URl, oder fügt neue Parameter hinzu
 * 
 * Beispielabruf:
 * 
 * var newurl = updateUrlPar(oldurl, par1, val1, par2, val2);
 *
 * @param array [0] URL, [n] Parameter, [n+1] Parameterwert,
 * @return string gibt URL als String zurück
 * */
function updateUrlPar() {
  var parstr = getParStr(updateUrlPar.arguments[0]);
  var urlstr = getUrlStr(updateUrlPar.arguments[0]);
  if(parstr)
    var parobject = par2object(parstr);
  else 
    var parobject = new Object();
  for (var i = 1; i < updateUrlPar.arguments.length; i+=2) {
    parobject[updateUrlPar.arguments[i]] = updateUrlPar.arguments[i + 1];
  }
  return urlstr + '?' +  object2par(parobject);
}
