function parseQueryString(query) {

    var getArray = new Object();

    query = query.replace(/^\?/,"");

    if (query!="") {

      var valuePairs = query.split('&');

     

      for (var i=0;i<valuePairs.length;i++) {

         // [0] = key, [1] = value

         var tempPair = valuePairs[i].split('=');

      

         // Unescape converts the text back from URL encoding

         getArray[tempPair[0]] = unescape(tempPair[1]);

      }

    }

    return getArray;

}



function getQueryString(query){

    var querystring="";

    for (var key in query) if ((typeof key) == "string") if(key) querystring+="&"+(key + '=' + query[key])

    return querystring.replace(/^&/,"");

}







// Utility functions 

// -----------------



// DOM Helpers

// -------------

// conditionally register $(id) function, to avoid overriding of the prototype one.

if (typeof($)!="function") {

	$ = function(id){

		return document.getElementById(id);

	}

}

function hide(el){

    el.style.display='none';

}

function show(el){

    el.style.display='block';

}



// Event Helper

function addEvent(obj, evType, fn){

 if (obj.addEventListener){

    obj.addEventListener(evType, fn, true);

    return true;

 } else if (obj.attachEvent){

    var r = obj.attachEvent("on"+evType, fn);

    return r;

 } else {

    return false;

 }

} 



function cancelEvent(e)

{

    if (window.event){

        window.event.cancelBubble = true;

        window.event.returnValue = false;

        return;

    }

    if (e) {

        e.stopPropagation();

        e.preventDefault();

    }

}



// Ajax helpers

// -------------

var ajax_req = null;

function CreateXmlHttpReq(handler) {

  var xmlhttp = null;

  try {

    xmlhttp = new XMLHttpRequest();

  } catch(e) {

    try {

        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

    } catch(e) {

        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    }

  }

  xmlhttp.onreadystatechange = handler;

  return xmlhttp;

}

function DummyHandler() {

    return true;

}

function ajaxGet(url,handler) {

    var a = new Array("placeholder");

    for (var j=2; j<arguments.length; j++) {

        a[a.length] = arguments[j];

    }

    var myhandler = function() {

        var content = ajaxOk();

        if (content != false) {

            a[0] = content;

            try {

                return handler.apply(this, a);

            } catch(e) {

                return myDummyApply(handler, a);

            }

        }

    }

    ajax_req = CreateXmlHttpReq(myhandler);

    ajax_req.open("GET",url);

    ajax_req.send(null);

}

function ajaxSyncGet(url) {

    if($("ajaxLoading")) show($("ajaxLoading"))

    ajax_req = CreateXmlHttpReq(DummyHandler);

    url += (url.indexOf("?") == -1) ? "?" : "&";

	// AV TEST

	//alert("get "+ url);

    ajax_req.open("GET",url, false);

    ajax_req.send(null);

    if($("ajaxLoading")) hide($("ajaxLoading"))

    return ajax_req.responseText;

}

function ajaxSyncGetRand(url) {

    url += (url.indexOf("?") == -1) ? "?" : "&";

    url += "rand="+escape(Math.random());

    return ajaxSyncGet(url);

}

function myDummyApply(funcname,args) {

    var e = "funcname(";

    for (var i = 0; i < args.length; i++) {

        e += "args["+i+"]";

        if (i+1 != args.length) {

            e += ",";

        }

    }

    e += ");"

    return eval(e);

}

function ajaxGetRand(url,handler) {

    url += (url.indexOf("?") == -1) ? "?" : "&";

    url += "rand="+escape(Math.random());

    arguments[0] = url;

    try {

        return ajaxGet.apply(this,arguments);

    } catch(e) {

        return myDummyApply(ajaxGet,arguments);

    }

}

function ajaxOk() {

    if (ajax_req.readyState == 4 && ajax_req.status == 200) {

        return ajax_req.responseText;

    } else {

        return false;

    }

}

// Array Helpers

// -------------

// Array.find( function ) - Search an element and return array of position or false

Array.prototype.find = function(searchStr) {

  var returnArray = false;

  for (var i=0; i<this.length; i++) {

    if (typeof(searchStr) == 'function') {

      if (searchStr.test(this[i])) {

        if (!returnArray) { returnArray = [] }

        returnArray.push(i);

      }

    } else {

      if (this[i]===searchStr) {

        if (!returnArray) { returnArray = [] }

        returnArray.push(i);

      }

    }

  }

  return returnArray;

}

// Array.forEach( function ) - Apply a function to each element

Array.prototype.forEach = function( f ) {

 var i = 0, j, l = this.length;

 for( i=0; i<l; i++ ) { if( ( j = this[i] ) ) { f( j ); } }

};

// Array.removeAll( function ) - Remove all the occorences of obj from array

Array.prototype.removeAll = function( obj ) {

   for (var i in this )

      if ( this[i] == obj )

         this.splice( i, 1 );

}

String.prototype.capitalize = function(){ 

    return this.replace(/\w+/g, function(a){

        return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();

    });

};




