Мой результат такой:
var param = [], locSearch = location.search;
if(locSearch != "") {
  param = (locSearch.substr(1)).split("&");
  for(var x = 0; x < param.length; x++) {
    var temp = param[x].split("=");
    param[temp[0]] = temp[1];
  };
};
Только вот сразу отмечу что я пока не взял во внимание '#'. location.search не берет во внимание данные начиная с '#'. И это хорошо. 
UPD: Вышло что-то очень смешное. В результате получился массив, в котором также содержаться объекты.
При обращении к переменной 
param через консоль:
param // return ["ech=1", "psi=OyLWT-qYJIzPsgbiwbnODw.1339433538360.3", "emsg=NCSR", "noj=1", "ei=OyLWT-qYJIzPsgbiwbnODw"]
В тоже время доступны и объекты:
param.psi // return "OyLWT-qYJIzPsgbiwbnODw.1339433538360.3"
Вот я и думаю - это хорошо или плохо? Добавить ли прилагательный массив?