// QueryString Engine v1.0.1
//By James Campbell
(function($){
	$.qs = $.querystringvalues = $.queryStringValues = $.QueryStringValues = $.QueryStringvalues = $.queryStringValues = $.queryStringvalues = $.querystringValues = $.getqueryString = $.queryString = $.querystring = $.QueryString = $.Querystring = $.getQueryString = $.getquerystring = $.getQuerystring  = function(options)
	{
		defaults = {defaultvalue:"null"} ;
		options = $.extend(defaults , options);
		qs = location.search.substring(1, location.search.length);
		if (qs.length == 0) return options.defaultvalue;
			qs = qs.replace(/\+/g, ' ');
			var args = qs.split('&');
			for (var i = 0; i < args.length; i ++ ){
				var value;
				var pair = args[i].split('=');
				var name = unescape(pair[0]);

				value =  pair.length == 2 ? unescape(pair[1]) : name;

				if (name == options.id || i == options.id-1)
					return value;
			}
		return options.defaultvalue
	};
})(jQuery);


/**
* constructeur pour compatibilité...
*/
(function($){
		$.logs = $.log = function(v,obj) {return;};
		$.time = function(name) {return;};
})(jQuery);


/**
* Fixe le pb si console.log n'existe pas ...
*/
if (!("console" in window) || !("firebug" in console)){
	var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
	
	//	http://jquery.glyphix.com/jquery.debug/jquery.debug.js
	window.console = {};
	for (var i = 0; i < names.length; ++i){
		window.console[names[i]] = function(msg){};
	}
}
	
	
if(jQuery.qs({id:'firebug',defaultvalue:false})){

	if(typeof window['console'] == 'object' ){
		(function($){
			/** cf : http://getfirebug.com/console.html
			 **/		
			$logs=
			$.log = function(v,obj) { //return;
				$caller = this.caller || '';
				$arguments = $caller.arguments || '';
				if( typeof obj=='undefined' )
					console.log($caller, $arguments,"\t", v);
				else
					console.log($caller, $arguments,"\t", v, obj);
			};
		})(jQuery);
	}
}
/**
 * cache function
 */

(function($){
	$.c 	=
	$.cache = function(selector, unforce) {
		// no cache
		if( unforce ) return $(selector);
		// cache
		if( typeof $.cache.collector[selector] == 'undefined' )
			$.cache.collector[selector] = jQuery(selector);
		return $.cache.collector[selector];
	};
	$.cache.obj = function(name, unforce) {
		if( unforce ) return $(selector);
		selector = 'cache.obj.'+name;
		if( typeof $.cache.collector[selector] == 'undefined' )
			$.cache.collector[selector] = eval(name);
		return $.cache.collector[selector];
	};
	$.cache.reset = function() {
		$.cache.collector = {};
	};
	$.cache.remove = function(selector) {
		delete $.cache.collector[selector];
	};
	//  public access
	$.cache.collector = {};

})(jQuery);

/**
 * time function
 */

(function($){
    $.microtime = function(){
        return new Date().getTime();
    }
	$.timer = {}
	$.timeStop=
	$.time = function(name){
		parts = name.split("_SEP_");
		if( typeof $.timer[name] == 'undefined' ){
			$.timer[name]={time:new Date().getTime()}
			$.timer[parts[1]+parts[0]]=$.timer[name];
		}else{
			$.timer[name]['time']-= new Date().getTime();
			$.timer[parts[1]+parts[0]]=$.timer[name]['time'];
		}

		/*
			$.timer[ parts[1] ]={ parts[0] : $.timer[name] };
		}else{
			$.timer[name]['time']-= new Date().getTime();
			parts = name.split("_SEP_");
			$.timer[ parts[1] ]={ parts[0] : $.timer[name]['time'] };
		*/
		$.log('timer : ', $.timer);
	};
	$.timeStart=
	$.time.set = function(txt){
		rand =  $.rand();
		name = rand + '_SEP_' + txt;
		$.time(name);
		return name;
	};
	$.rand =function(){
		n=$.rand.count++;
		n='0000000000'+n;
		return n.substr(-5);
		//return Math.round(Math.random()*100000 );
	};
	$.rand.count=0;

})(jQuery);

(function($){
	$.array_diff = function (array) {
		var arr_dif = [];
		var i = 1;
		var argc = arguments.length;
		var argv = arguments;
		var key, key_c;
		var found=false;
		var cntr=0;

		for ( key in array ){
			// loop over other arrays
			for (i = 1; i< argc; i++){
				// find in the compare array
				found = false;
				for (key_c in argv[i]) {
					if (argv[i][key_c] == array[key]) {
						found = true;
						break;
					}
				}

				if(!found){
					//arr_dif[key] = array[key];
					arr_dif[cntr] = array[key];
					cntr++;
				}
			}
		}
		return arr_dif;
	}
	;
	$.camelize = function(str){
		$j.log('>>'+str)
		return str.length > 1
					? str.substring(0,1).toUpperCase()+str.substring(1).toLowerCase()
					:	str;
	}
    ;
	$.countObj= function(obj){
		var n=0;
		for(var e in obj)n++;
		return n;
	}
	;
	$.getIndexName= function(obj){
		var a=[];
		for(var e in obj)
			a.push( e );
		return a;
	}
	;
	$.getObject = function(str){
		str = $.camelize(str);
//		return $.cache.obj(str);

		var obj = eval(str);

		if( typeof obj == 'object')
			return obj;
		else{
			return eval("new "+str+"()" );
		}

		return obj;
	}
	;
	$.getArgs = function(param){
		arg='';
		txt='';
		args = function (p, name){
			this.level = ++this.level||0;
			this.tmp=0;
			for(var e in p){

				if( typeof p[e] == 'undefined' )
					p[e] ='';
				n=name||0?name+'['+(typeof e=='string'?e:this.tmp++)+']':e;

				if( typeof p[e] == 'object' && (e == 'originalEvent') )
					return arg;

				if(typeof p[e] == 'object')
					arguments.callee(p[e], n )
				else{
					arg+= '&'+n+'='+String(p[e]).replace(/&/g, "%26");
				}

/*
				try
				{

				(typeof p[e] == 'object')
					? arguments.callee(p[e], n )
					: arg+= '&'+n+'='+p[e]
				}catch(err){
					  txt+="There was an error on this page.\n\n";
					  txt+="Error description: " + err.description + "\n\n";
					  txt+="Click OK to continue.\n\n";
				}
*/

			}
			//alert(ptxt);
			return arg;
		}

		return ajaxargs = args(param);
	}


})(jQuery);

