var includedSources = new Array();
function in_array(needle, haystack) {
	for (var i = 0; i < haystack.length; i++) {
		if (haystack[i] == needle)
			return true;
	}
	return false;
}
function partial(func /*, 0..n args */) {
	var args = Array.prototype.slice.call(arguments).splice(1, arguments.length - 1);
	return function() {
		var allArguments = args.concat(Array.prototype.slice.call(arguments));
		return func.apply(this, allArguments);
	};
}
function loadHeaderOnce(currentSource, arraySource, finalCallback) {
	var oSource = arraySource[currentSource];
	if (!in_array(oSource, includedSources)) {
		includedSources[includedSources.length] = oSource;
		return loadHeader(currentSource, arraySource, finalCallback);
	} else if (currentSource == (arraySource.length - 1)) {
		return finalCallback();
	} else {
		return loadHeaderOnce(currentSource+1, arraySource, finalCallback);
	}
}
function loadHeader(currentSource, arraySource, finalCallback) {
	var oHead;
	var oFile;
	var oCallback;
	var oSource = arraySource[currentSource];
	var extension = oSource.substring(oSource.indexOf('.') + 1);
	if (extension.lastIndexOf('?') != -1)
		extension = extension.substring(0, extension.lastIndexOf('?'));

	if (currentSource < arraySource.length - 1)
		oCallback = partial(loadHeaderOnce, (currentSource + 1), arraySource, finalCallback);
	else
		oCallback = finalCallback;

	switch (extension) {
		case "js" : case "js.aspx":
			oHead = document.getElementsByTagName('head').item(0);
			oFile = document.createElement('script');
			oFile.setAttribute('language', 'javascript');
			oFile.setAttribute('type', 'text/javascript');
			oFile.setAttribute('src', oSource);
			// Todos
			oFile.onload = oCallback;
			// IE 6 & 7
			oFile.onreadystatechange = function() {
				if (this.readyState == 'loaded' || this.readyState == 'complete') {
					oCallback();
				}
			}
			oHead.appendChild(oFile);
			break;
		case "css":
			oHead = document.getElementsByTagName('head').item(0);
			oFile = document.createElement('link');
			oFile.setAttribute('rel', 'stylesheet');
			oFile.setAttribute('type', 'text/css');
			oFile.setAttribute('href', oSource);
			oCallback();
			oHead.appendChild(oFile);
			break;
	}
}
function cargarBuscadorAjax(urlBuscador, paramsBuscador, divLoader) {
	$.ajax({
		type: "GET",
		url: urlBuscador,
		data: paramsBuscador,
		beforeSend: function(XMLHttpRequest) { },
		success: function(msg) {
			$("#" + divLoader).html(msg);
		},
		error: function(objeto, error, objeto2) { }
	});
}
function cargarBuscador(url, params, includes, divBuscador) {
	urlBuscador = url;
	paramsBuscador = params;
	divLoader = divBuscador;

	var a_incluir = includes.split("#");
	loadHeaderOnce(0, a_incluir, partial(cargarBuscadorAjax,url, params, divBuscador));
}