Resulta que estoy intentando hacer una página web en AJAX. Simplemente estoy ahora con el log-in de usuarios, que de momento funciona a las mil maravillas. Pero hay un problema: Esta página tiene un calendario-agenda, el cual señala los dias importantes, y viene con un archivo "calendar-setup.js". Bien, el problema viene que al juntar estos dos archivos, entran en conflicto, y el AJAX deja de funcionar. Quisiera saber si alguien sabría decirme el porque. Os dejo aquí el código de AJAX i el del calendario, a ver si alguien pudiera ver lo que entra en conflicto y entre todos podemos solucionarlo.
Calendar-setup
Código PHP:
Calendar.setup = function (params) {
function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };
param_default("inputField", null);
param_default("displayArea", null);
param_default("button", null);
param_default("eventName", "click");
param_default("ifFormat", "%Y/%m/%d");
param_default("daFormat", "%Y/%m/%d");
param_default("singleClick", true);
param_default("disableFunc", null);
param_default("dateStatusFunc", params["disableFunc"]); // takes precedence if both are defined
param_default("dateText", null);
param_default("firstDay", null);
param_default("align", "Br");
param_default("range", [1900, 2999]);
param_default("weekNumbers", true);
param_default("flat", null);
param_default("flatCallback", null);
param_default("onSelect", null);
param_default("onClose", null);
param_default("onUpdate", null);
param_default("date", null);
param_default("showsTime", false);
param_default("timeFormat", "24");
param_default("electric", true);
param_default("step", 2);
param_default("position", null);
param_default("cache", false);
param_default("showOthers", false);
param_default("multiple", null);
var tmp = ["inputField", "displayArea", "button"];
for (var i in tmp) {
if (typeof params[tmp[i]] == "string") {
params[tmp[i]] = document.getElementById(params[tmp[i]]);
}
}
if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) {
return false;
}
function onSelect(cal) {
var p = cal.params;
var update = (cal.dateClicked || p.electric);
if (update && p.inputField) {
p.inputField.value = cal.date.print(p.ifFormat);
if (typeof p.inputField.onchange == "function")
p.inputField.onchange();
}
if (update && p.displayArea)
p.displayArea.innerHTML = cal.date.print(p.daFormat);
if (update && typeof p.onUpdate == "function")
p.onUpdate(cal);
if (update && p.flat) {
if (typeof p.flatCallback == "function")
p.flatCallback(cal);
}
if (update && p.singleClick && cal.dateClicked)
cal.callCloseHandler();
};
if (params.flat != null) {
if (typeof params.flat == "string")
params.flat = document.getElementById(params.flat);
if (!params.flat) {
return false;
}
var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);
cal.showsOtherMonths = params.showOthers;
cal.showsTime = params.showsTime;
cal.time24 = (params.timeFormat == "24");
cal.params = params;
cal.weekNumbers = params.weekNumbers;
cal.setRange(params.range[0], params.range[1]);
cal.setDateStatusHandler(params.dateStatusFunc);
cal.getDateText = params.dateText;
if (params.ifFormat) {
cal.setDateFormat(params.ifFormat);
}
if (params.inputField && typeof params.inputField.value == "string") {
cal.parseDate(params.inputField.value);
}
cal.create(params.flat);
cal.show();
return false;
}
var triggerEl = params.button || params.displayArea || params.inputField;
triggerEl["on" + params.eventName] = function() {
var dateEl = params.inputField || params.displayArea;
var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
var mustCreate = false;
var cal = window.calendar;
if (dateEl)
params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt);
if (!(cal && params.cache)) {
window.calendar = cal = new Calendar(params.firstDay,
params.date,
params.onSelect || onSelect,
params.onClose || function(cal) { cal.hide(); });
cal.showsTime = params.showsTime;
cal.time24 = (params.timeFormat == "24");
cal.weekNumbers = params.weekNumbers;
mustCreate = true;
} else {
if (params.date)
cal.setDate(params.date);
cal.hide();
}
if (params.multiple) {
cal.multiple = {};
for (var i = params.multiple.length; --i >= 0;) {
var d = params.multiple[i];
var ds = d.print("%Y%m%d");
cal.multiple[ds] = d;
}
}
cal.showsOtherMonths = params.showOthers;
cal.yearStep = params.step;
cal.setRange(params.range[0], params.range[1]);
cal.params = params;
cal.setDateStatusHandler(params.dateStatusFunc);
cal.getDateText = params.dateText;
cal.setDateFormat(dateFmt);
if (mustCreate)
cal.create();
cal.refresh();
if (!params.position)
cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);
else
cal.showAt(params.position[0], params.position[1]);
return false;
};
return cal;
};
Código PHP:
function POST_AJAX(url, variables) {
objeto = false;
//creamos el onjeto XMLHttpRequest para poder enviar datos mediante ajax
if (window.XMLHttpRequest) { // Mozilla, Safari,...
objeto = new XMLHttpRequest();
if (objeto.overrideMimeType) {
objeto.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
objeto = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
objeto = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!objeto) {
alert("No se puede crear la instancia XMLHTTP");
return false;
}
objeto.open("POST", url, true); /* enviaremos los datos por el metodo POST hacia checar.php */
objeto.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); /*asignamos header. Esto no tiene relacion con el sistema de logeo. Solo es necesario para poder enviar los datos mediante ajax*/
objeto.setRequestHeader("Content-length", variables.length);
objeto.setRequestHeader("Connection", "close");
objeto.send(variables); /* enviamos las variables con un formato como este: "user=minombre&pass=123456&n=0" */
}
function enviar(id_form,n) {
if (n=='1') //si el formulario fue enviado al darle en el boton
{
document.getElementById('inp_enviar').innerHTML = '<input type="submit" class="MC_enviar" name="enviar" value="Enviar"/><img src="ajax.gif"/>';
if (vacio(document.getElementById(id_form).user.value)==false || vacio(document.getElementById(id_form).pass.value)==false)/*si alguno de los campos de user y pass estan vacios, entonces se imprime mensaje de error. NOTA: vacio() es una funcion que verifica que alla algo diferente a "" o puros espacios en blanco. Esta funcion esta mas abajo*/
{
document.getElementById('r').innerHTML = '<label class="res">Llena correctamente los campos</label>'; //"r" es un div que tenemos debajo del formulario para imprimir los mensajes de error.
document.getElementById('inp_enviar').innerHTML = '<input type="submit" class="MC_enviar" name="enviar" value="Enviar"/>';
}
else //s� SI habia llenado correctamente el user y pass, entonces se crear una cadena "variables" con los datos de user y pass con el siguiente formato: "user=minombre&pass=123456&n=0"
{
var Formulario = document.getElementById(id_form);
var longitudFormulario = Formulario.elements.length;
var variables = "";
var sepCampos = "";
for (var i=0; i<=Formulario.elements.length-1; i++)
{
variables += sepCampos+Formulario.elements[i].name + '=' + encodeURI(Formulario.elements[i].value);
sepCampos="&";
}
//indice para saber si envio formulario
variables += '&n=' + n;
POST_AJAX('checar.php', variables); //se envia el nombre del archivo donde se verificaran los datos en la BD y la cadena que se acaba de crear con los datos de user y pass, hacia la funcion POST_AJAX, que lo que hace es enviar los datos por medio de AJAX utilizando el metodo POST hacia "checar.php"
}
}
else //si el formulario fue enviado en el body onload solo para procesos
{
variables = 'n=' + n;
POST_AJAX('checar.php', variables);
}
}
function avisos() {
if ((objeto.readyState==4) && (objeto.status==200))
{
document.getElementById('form').innerHTML = objeto.responseText; //se inserta en el DIV "form" el mensaje de bienvenida que nos imprimio "checar.php"
}//end if
}
enviar('login','0'); //se envia a la funcion "enviar()" el id del formulario y el valor 0 (cero); Este valor (0) nos indicar� que el formulario esta siendo enviado cuando la pagina se esta cargando apenas. NO lo esta enviando el usuario
/*Esta funcion recorre una cadena en busca de algo diferente de espacios en blanco. Si la cadena contenia puros espacios en blanco entonces regresara False*/
function vacio(q) {
for ( i = 0; i < q.length; i++ ) {
if ( q.charAt(i) != " " ) { return true }
}
return false
}