zptravel.js
Summary
Zapatec Travel application based on Zapatec Suite. Common
functions.
Copyright (c) 2004-2009 by Zapatec, Inc.
http://www.zapatec.com
1700 MLK Way, Berkeley, California,
94709, U.S.A.
All rights reserved.
Zapatec.Travel = function() {};
window.onload = function(){
Zapatec.Travel.SearchForm = new Zapatec.Form({
form: 'zpTravelSearchFlightForm',
strict: true,
showErrorsOnSubmit: true,
submitValidFunc: function(){ Zapatec.Travel.message('Search started.'); },
asyncSubmitFunc: Zapatec.Travel.parseSessionId,
statusImgPos: 'beforeField',
showErrors: function(el,msg){
el.style.backgroundColor = (typeof(msg)!=='undefined') ? '#F9CFA6' : '#FFFFFF';
document.getElementById(el.id+'_req').style.display = (typeof(msg)!=='undefined') ? '' : 'none';
},
statusImgPos: null,
startupFocusPosition: 'firstRequiredField',
theme: 'zptravelform',
themePath: Zapatec.Travel.baseDir+'apps/travel/',
hideUntilThemeLoaded: true,
putTabIndexesOnError: false
});
Zapatec.Travel.sessionId = '';
Zapatec.EventDriven.removeEvent('zpTravelGotSessionId');
}
Zapatec.Travel.sessionId = '';
Zapatec.Travel.initSession = function() {
Zapatec.Travel.sessionId = '';
Zapatec.EventDriven.removeEvent('zpTravelGotSessionId');
};
Zapatec.Travel.parseSessionId = function(oSession) {
if (oSession && oSession.sid) {
Zapatec.Travel.sessionId = oSession.sid;
Zapatec.Travel.searchFlight();
Zapatec.Travel.startSearchFlight();
return;
}
var strError = '';
if (oSession && oSession.error) {
strError = oSession.error;
}
Zapatec.Travel.error('Cannot open session: ' + strError);
};
Zapatec.Travel.searchId = '';
Zapatec.Travel.morePending = false;
Zapatec.Travel.searchInstance = '';
Zapatec.Travel.pollTimeout = null;
Zapatec.Travel.grid = null;
Zapatec.Travel.PopupBigChart = null;
Zapatec.Travel.initSearch = function() {
Zapatec.EventDriven.removeEvent('zpTravelGotSearchId');
Zapatec.EventDriven.removeEvent('zpTravelScheduleNextPoll');
if (Zapatec.Travel.pollTimeout) {
clearTimeout(Zapatec.Travel.pollTimeout);
Zapatec.Travel.pollTimeout = null;
}
Zapatec.Travel.searchId = '';
Zapatec.Travel.morePending = false;
Zapatec.Travel.searchInstance = '';
};
Zapatec.Travel.parseSearchId = function(oSearch) {
if (oSearch && oSearch.searchid) {
Zapatec.Travel.searchId = oSearch.searchid;
Zapatec.EventDriven.fireEvent('zpTravelGotSearchId');
return;
}
var aError = [];
if (oSearch) {
if (oSearch.title) {
aError.push(oSearch.title);
}
if (oSearch.message) {
aError.push(oSearch.message);
}
if (oSearch.detail) {
aError.push(oSearch.detail);
}
if (oSearch.origin) {
aError.push('Ambiguous location. Try one of the following:');
aError.push(oSearch.origin);
}
}
Zapatec.Travel.error('Cannot start search: ' + aError.join('\n'));
Zapatec.Travel.searchShow();
};
Zapatec.Travel.parsePoll = function(oData) {
if (!oData) {
return;
}
if (oData.morepending && oData.morepending == 'true') {
Zapatec.Travel.morePending = true;
} else {
Zapatec.Travel.morePending = false;
}
if (typeof oData.searchinstance != 'undefined') {
Zapatec.Travel.searchInstance = oData.searchinstance;
} else {
Zapatec.Travel.searchInstance = '';
}
if ((oData.rows instanceof Array) && oData.rows.length) {
setTimeout(function() {
Zapatec.Travel.grid.resetFilters();
Zapatec.Travel.grid.splice({
atRow: 0,
howMany: Zapatec.Travel.grid.totalRecords(),
rows: oData.rows
});
setTimeout(Zapatec.Travel.finishPoll, 0);
}, 0);
} else if(Zapatec.Travel.morePending===false) {
Zapatec.Travel.finishPoll();
}
};
Zapatec.Travel.finishPoll = function() {
if (Zapatec.Travel.morePending) {
Zapatec.EventDriven.fireEvent('zpTravelScheduleNextPoll');
} else {
Zapatec.Travel.chartIsLarger = false;
Zapatec.Travel.PopupBigChart = new Zapatec.Window.setup({
theme: 'winxp',
title: 'Flight\'s chart',
initialState : 'hidden',
divContent: 'zpTFCBContainer',
showCloseButton: true,
canResize: true,
width: 380,
height: 495,
showStatus: false,
hideOnClose: true,
eventListeners: {
onClose: function(){
Zapatec.Travel.chartIsLarger = false;
document.getElementById('zpTFCBContainer').style.display = 'none';
document.getElementById('zpTFCB').innerHTML = '';
document.getElementById('zpTravelFlightChartContainer').style.display = '';
}
}
});
// Remove progress
Zapatec.Travel.progressBarUpdate(100);
Zapatec.Travel.message('');
}
};
/**
* Holds pagination slider object.
* @private
*/
Zapatec.Travel.paginationSliderOnBottom = null;
Zapatec.Travel.paginationSliderOnTop = null;
//MXCODER para paginacion ONTOP
/**
* Gets called by the pagination slider to update the grid.
*
* @private
* @param {object} iValue New page number
*/
Zapatec.Travel.onPaginationSliderMove = function(iValue) {
Zapatec.Travel.grid.gotoPage(Math.ceil(iValue));
//Update both sliders
Zapatec.Travel.paginationSliderOnTop.setPos(Math.ceil(iValue));
Zapatec.Travel.paginationSliderOnBottom.setPos(Math.ceil(iValue));
};
/**
* Gets called by the grid to display pagination.
*
* @private
* @param {object} oGrid Grid object
*/
Zapatec.Travel.displayPagination = function(oGrid) {
// Get number of pages
var iPages = oGrid.totalPages();
if (iPages < 2) {
document.getElementById('zpTravelGridPaginationOnTop').style.display = 'none';
document.getElementById('zpTravelGridPaginationOnBottom').style.display = 'none';
return;
} else {
document.getElementById('zpTravelGridPaginationOnTop').style.display = '';
document.getElementById('zpTravelGridPaginationOnBottom').style.display = '';
}
// Gat current page
var iCurrentPage = oGrid.getCurrentPageNumber();
// Print current page number
document.getElementById('zpTravelGridPaginationContainerOnTop').innerHTML = 'Page '+iCurrentPage+' of '+iPages+' : ';
document.getElementById('zpTravelGridPaginationContainerOnBottom').innerHTML = 'Page '+iCurrentPage+' of '+iPages+' : ';
// Reset slider
if (Zapatec.Travel.paginationSliderOnTop && Zapatec.Travel.paginationSliderOnBottom) {
// Need to reset slider only after filtering or searching
var aSliderRange = Zapatec.Travel.paginationSliderOnBottom.config.range;
if (!(aSliderRange instanceof Array) || aSliderRange[1] != iPages - 1) {
Zapatec.Travel.paginationSliderOnBottom.setRange(0, iPages - 1);
Zapatec.Travel.paginationSliderOnTop.setRange(0, iPages - 1);
}
} else {
// Initialize slider
Zapatec.Travel.paginationSliderOnTop = new Zapatec.Slider({
div: 'zpTravelGridPaginationSliderOnTop',
length: 99,
orientation: 'H',
step: 1,
range: [0, iPages - 1],
newPosition: Zapatec.Travel.onPaginationSliderMove
});
Zapatec.Travel.paginationSliderOnBottom = new Zapatec.Slider({
div: 'zpTravelGridPaginationSliderOnBottom',
length: 99,
orientation: 'H',
step: 1,
range: [0, iPages - 1],
newPosition: Zapatec.Travel.onPaginationSliderMove
});
}
// Get number of results per page
var aSelectd = ['', '', '', ''];
var oConfig = oGrid.getConfiguration();
if (oConfig.rowsPerPage == 5) {
aSelectd[0] = ' selected';
} else if (oConfig.rowsPerPage == 15) {
aSelectd[2] = ' selected';
} else if (oConfig.rowsPerPage == 20) {
aSelectd[3] = ' selected';
} else {
// Default is 10
aSelectd[1] = ' selected';
}
// Print number of results per page
document.getElementById('zpTravelGridPaginationPerPageOnTop').innerHTML =
'<select onclick="Zapatec.Travel.setResultsPerPage(\
this[this.selectedIndex].value)">\
<option value="5"' + aSelectd[0] + '>5</option>\
<option value="10"' + aSelectd[1] + '>10</option>\
<option value="15"' + aSelectd[2] + '>15</option>\
<option value="20"' + aSelectd[3] + '>20</option>\
</select>';
document.getElementById('zpTravelGridPaginationPerPageOnBottom').innerHTML = document.getElementById('zpTravelGridPaginationPerPageOnTop').innerHTML;
};
/**
* Changes number of results per page.
*
* @private
* @param {number} iRowsPerPage Number of results per page
*/
Zapatec.Travel.setResultsPerPage = function(iRowsPerPage) {
// Check argument
var oConfig = Zapatec.Travel.grid.getConfiguration();
if (oConfig.rowsPerPage == iRowsPerPage) {
return;
}
// Reconfigure grid
Zapatec.Travel.grid.reconfigure({
rowsPerPage: iRowsPerPage
});
// Go to first page
Zapatec.Travel.grid.gotoPage(0);
};
/**
* Holds reference to the progress bar object to be able to update it.
* @private
*/
Zapatec.Travel.progressBar = null;
/**
* Shows progress bar.
*
* @private
* @param {string} strMessage Message
*/
Zapatec.Travel.progressBarUpdate = function(iProgress) {
var oProgressBarContainer =
document.getElementById('zpTravelProgressBarContainer');
var oResultContainer = document.getElementById('zpTravelResultContainer');
if (oProgressBarContainer) {
/*
if (!Zapatec.Travel.progressBar) {
Zapatec.Travel.progressBar = new Zapatec.Progress({
container: oProgressBarContainer
});
}
*/
if (iProgress == 100) {
oProgressBarContainer.style.display = 'none';
if (oResultContainer) {
oResultContainer.style.display = '';
oResultContainer.innerHTML = 'Found ' +
Zapatec.Travel.grid.getRows().length + ' results';
}
} else {
oProgressBarContainer.style.display = '';
if (oResultContainer) {
oResultContainer.style.display = 'none';
}
}
}
};
/**
* Shows progress message.
*
* @private
* @param {string} strMessage Message
*/
Zapatec.Travel.message = function(strMessage) {
var oMessageContainer = document.getElementById('zpTravelMessageContainer');
if (oMessageContainer) {
if (strMessage) {
oMessageContainer.style.display = '';
} else {
oMessageContainer.style.display = 'none';
// To prevent undesirable effect
strMessage = ' ';
}
oMessageContainer.innerHTML = strMessage;
}
};
/**
* Shows error message.
*
* @private
* @param {string} strError Error message
*/
Zapatec.Travel.error = function(strError) {
// Stop progress bar
Zapatec.Travel.progressBarUpdate(100);
// Show error
Zapatec.Travel.message(strError.replace(/(\r\n|\n)/g, '<br/>'));
// Duplicate error in alert box
alert(strError);
};
/**
* Shows search form.
* @private
*/
Zapatec.Travel.searchShow = function() {
var oClosed = document.getElementById('zpTravelSearchClosed');
if (!oClosed) {
alert('Cannot find zpTravelSearchClosed element.');
return;
}
var oOpened = document.getElementById('zpTravelSearchOpened');
if (!oOpened) {
alert('Cannot find zpTravelSearchOpened element.');
return;
}
oClosed.style.display = 'none';
oOpened.style.display = '';
};
/**
* Hides search form.
* @private
*/
Zapatec.Travel.searchHide = function() {
var oClosed = document.getElementById('zpTravelSearchClosed');
if (!oClosed) {
alert('Cannot find zpTravelSearchClosed element.');
return;
}
var oOpened = document.getElementById('zpTravelSearchOpened');
if (!oOpened) {
alert('Cannot find zpTravelSearchOpened element.');
return;
}
oClosed.style.display = '';
oOpened.style.display = 'none';
};
/**
* Compares two dates. Needed for calendar.
*
* @private
* @param {object} oDate1 First Date object
* @param {object} oDate2 Second Date object
* @return -1 => oDate1 > oDate2, 0 => equal, 1 => oDate1 < oDate2
* @type number
*/
Zapatec.Travel.compareDates = function(oDate1, oDate2) {
var iYear1 = oDate1.getYear();
var iYear2 = oDate2.getYear();
if (iYear1 > iYear2) {
return -1;
}
if (iYear2 > iYear1) {
return 1;
}
var iMonth1 = oDate1.getMonth();
var iMonth2 = oDate2.getMonth();
if (iMonth1 > iMonth2) {
return -1;
}
if (iMonth2 > iMonth1) {
return 1;
}
var iDay1 = oDate1.getDate();
var iDay2 = oDate2.getDate();
if (iDay1 > iDay2) {
return -1;
}
if (iDay2 > iDay1) {
return 1;
}
return 0;
};
/**
* Converts date string into object. Needed for calendar.
*
* @private
* @param {string} sDate Date string in MM/DD/YY or MM/DD/YYYY format
* @return Date object
* @type object
*/
Zapatec.Travel.stringToDate = function(sDate) {
var aDate = sDate.split('/');
var iYear = aDate[2] * 1;
if (iYear < 2000) {
iYear += 2000;
}
var iMonth = aDate[0] * 1;
var iDay = aDate[1] * 1;
if (iYear && iMonth && iDay) {
return new Date(iYear, iMonth - 1, iDay);
}
};
Documentation generated by
JSDoc on Thu May 21 12:20:07 2009