function fetchAjax(ajax_cls, view, json_cls, json_class_params, json_method, json_method_params, sendType, respType, func, funcParams, loader, view_params, keepFuncParamsAsArray)
{
	var XMLHttpRequestObject = false;
	if (window.XMLHttpRequest)
		XMLHttpRequestObject = new XMLHttpRequest();
	else if (window.ActiveXObject)
		XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");

	if(arguments.length>=11)
		if(is_array(loader))
			document.getElementById(loader[0]).innerHTML=loader[1];

	var ClassParamList="";

        if(is_array(json_class_params)) {
            for(x=0;x<json_class_params.length;x++)
                ClassParamList+="&json_class_params["+x+"]="+json_class_params[x];
        }else
            ClassParamList = json_class_params;


	var MethodParamList="";

        if(is_array(json_method_params)) {
            for(x=0;x<json_method_params.length;x++)
                MethodParamList+="&json_method_params["+x+"]="+json_method_params[x];
        }else
            MethodParamList = json_method_params;

        var ParamList = null;
        if(arguments.length>=10)
	{
		if(is_array(funcParams))
		{
			if(arguments.length>=13)
			{
				ParamList=funcParams;
			}else if(is_array(funcParams)){
                            
				for(a=0;a<funcParams.length;a++)
				{
					if(is_string(funcParams[a]) || is_numeric(funcParams[a]))
						vari='"'+funcParams[a]+'"';
					else
						vari='"'+funcParams[a]+'"';

					if(a<funcParams.length-1)
						ParamList+=vari+",";
					else
						ParamList+=vari;
				}
			}else{
                            ParamList = funcParams;
                        }
		}else{
                    ParamList = funcParams;
                }


            var ViewParamList="";

            if(arguments.length>=12) {
                if(is_array(view_params)) {
                    for(x=0;x<view_params.length;x++)
                        ViewParamList+="&view_params["+x+"]="+view_params[x];
                }else
                    ViewParamList = view_params;
            }
	}        

        if(XMLHttpRequestObject)
	{
                url = '../../../../ajax/handler.php?ajax_cls='+ajax_cls+'&view='+view+'&json_cls='+json_cls+'&json_method='+json_method+'&type='+respType;
                                        
                var sendVars="&xyz=1";

                sendVars += ClassParamList + MethodParamList + ViewParamList;

                if(sendType=='p')
                    url += sendVars;

                XMLHttpRequestObject.open((sendType=='p'?"POST":"GET"), url);
		XMLHttpRequestObject.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

		XMLHttpRequestObject.onreadystatechange = function()
		{
			if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200)
			{
				var ergParams=new Array();
                                    ergParams[0]=(respType=="XML"?XMLHttpRequestObject.responseXML:XMLHttpRequestObject.responseText);

				if(func!=0){                                    
					func(ergParams[0],eval(ParamList));
                                }else
					return ergParams[0];
				delete XMLHttpRequestObject;
				XMLHttpRequestObject = null;
			}

		}

                if(sendType=='p')
                    sendVars = null;

                if(func!=0)
			XMLHttpRequestObject.send(sendVars);
		else                     
			return XMLHttpRequestObject.send(sendVars);
	}
}

function is_array( mixed_var )
{
    return ( mixed_var instanceof Array );
}

function is_string( mixed_var ){
     return (typeof( mixed_var ) == 'string');
}

function is_numeric( mixed_var ){
     return !isNaN( mixed_var );
}  