/**
*
* Copyright 2005 Sabre Airline Solutions
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language governing permissions
* and limitations under the License.
**/
// This module does NOT depend on prototype.js
/**
* @namespace Main Rico object
*/
var Rico = {
Version: '2.1',
loadRequested: 1,
loadComplete: 2,
init : function() {
try { // fix IE background image flicker (credit: www.mister-pixel.com)
document.execCommand("BackgroundImageCache", false, true);
} catch(err) {}
this.preloadMsgs='';
var elements = document.getElementsByTagName('script');
this.baseHref= location.protocol + "//" + location.host;
this.loadedFiles={};
this.windowIsLoaded=false;
this.onLoadCallbacks=[];
var filename,ricoFilename;
for (var i=0; i<elements.length; i++) {
if (!elements[i].src) continue;
var src = elements[i].src;
var slashIdx = src.lastIndexOf('/');
var path = src.substring(0, slashIdx+1);
filename = src.substring(slashIdx+1);
var parmPos = filename.indexOf('?');
if (parmPos > 0) filename = filename.substring(0, parmPos);
this.loadedFiles[filename]=this.loadComplete;
if (filename == 'rico.js' || filename == 'min.rico.js') {
ricoFilename=filename;
var isRailsPath = (path.indexOf("/javascripts") >= 0);
if (isRailsPath){
this.jsDir = "/javascripts/";
this.cssDir = "/stylesheets/";
this.imgDir = "/images/";
this.htmDir = "/";
this.xslDir = "/";
} else {
this.jsDir = path;
this.cssDir = path+'css/';
this.imgDir = path+'images/';
this.htmDir = path;
this.xslDir = path;
}
}
}
if (!ricoFilename) throw('unable to locate rico.js or min.rico.js script element');
if (typeof Prototype=='undefined') {
if (typeof(google)=='object' && google.load)
google.load('prototype', '1.6');
else
this.include('prototype.js');
}
if (ricoFilename == 'rico.js') {
this.include('ricoCommon.js');
this.languageInclude('en'); // in case a phrase is missing from a translation
}
var onloadAction=function() { Rico.windowLoaded(); };
if (window.addEventListener)
window.addEventListener('load', onloadAction, false);
else if (window.attachEvent)
window.attachEvent('onload', onloadAction);
this.onLoad(function() { Rico.writeDebugMsg('Pre-load messages:\n'+Rico.preloadMsgs); });
},
// Array entries can reference a javascript file or css stylesheet
// A dependency on another module can be indicated with a plus-sign prefix: '+DependsOnModule'
moduleDependencies : {
Accordion : ['ricoBehaviors.js','ricoEffects.js','ricoComponents.js'],
Color : ['ricoStyles.js'],
Corner : ['ricoStyles.js'],
DragAndDrop: ['ricoStyles.js','ricoEffects.js','ricoDragDrop.js'],
Effect : ['ricoEffects.js'],
Calendar : ['ricoCalendar.js', 'ricoCalendar.css'],
Tree : ['ricoTree.js', 'ricoTree.css'],
ColorPicker: ['ricoColorPicker.js', 'ricoStyles.js', 'ricoColorPicker.css'],
CustomMenu : ['ricoMenu.js', 'ricoMenu.css'],
SimpleGrid : ['+Effect', 'ricoGridCommon.js', 'ricoGrid.css', 'ricoSimpleGrid.js'],
LiveGridBasic : ['ricoGridCommon.js', 'ricoGrid.css', 'ricoBehaviors.js', 'ricoLiveGrid.js'],
LiveGrid : ['+Effect', '+LiveGridBasic', 'ricoLiveGridControls.js'],
LiveGridMenu : ['+CustomMenu', 'ricoLiveGridMenu.js'],
LiveGridAjax : ['+LiveGrid', 'ricoLiveGridAjax.js'],
LiveGridJSON : ['+LiveGridAjax', 'ricoLiveGridJSON.js'],
LiveGridForms : ['+LiveGridAjax', '+LiveGridMenu', '+Accordion', '+Corner', 'ricoLiveGridForms.js', 'ricoLiveGridForms.css'],
SpreadSheet : ['+SimpleGrid', 'ricoSheet.js', 'ricoSheet.css']
},
languages : {
de: "translations/ricoLocale_de.js",
en: "translations/ricoLocale_en.js",
es: "translations/ricoLocale_es.js",
fr: "translations/ricoLocale_fr.js",
it: "translations/ricoLocale_it.js",
ja: "translations/ricoLocale_ja.js",
ko: "translations/ricoLocale_ko.js",
pt: "translations/ricoLocale_pt.js",
zh: "translations/ricoLocale_zh.js"
},
languageInclude : function(lang2) {
var filename=this.languages[lang2];
if (filename) this.include(filename);
return !!filename;
},
acceptLanguage : function(acceptLang) {
var arLang=acceptLang.toLowerCase().split(',');
for (var i=0; i<arLang.length; i++) {
var lang2=arLang[i].match(/\w\w/);
if (!lang2) continue;
if (this.languageInclude(lang2)) return true;
}
return false;
},
// Expects one or more module or file names
loadModule : function() {
for (var a=0, length=arguments.length; a<length; a++) {
var name=arguments[a];
var dep=this.moduleDependencies[name];
if (dep) {
for (var i=0; i<dep.length; i++) {
if (dep[i].substring(0,1)=='+') {
this.loadModule(dep[i].slice(1));
} else {
this.include(dep[i]);
}
}
} else {
this.include(name);
}
}
},
include : function(filename) {
if (this.loadedFiles[filename]) return;
this.addPreloadMsg('include: '+filename);
var ext = filename.substr(filename.lastIndexOf('.')+1);
switch (ext.toLowerCase()) {
case 'js':
this.loadedFiles[filename]=filename.substring(0,4)=='rico' ? this.loadRequested : this.loadComplete;
document.write("<script type='text/javascript' src='"+this.jsDir+filename+"'><\/script>");
return;
case 'css':
var el = document.createElement('link');
el.type = 'text/css';
el.rel = 'stylesheet';
el.href = this.cssDir+filename;
this.loadedFiles[filename]=this.loadComplete;
document.getElementsByTagName('head')[0].appendChild(el);
return;
}
},
// called after a script file has finished loading
includeLoaded: function(filename) {
this.loadedFiles[filename]=this.loadComplete;
this.checkIfComplete();
},
// called by the document onload event
windowLoaded: function() {
this.windowIsLoaded=true;
this.checkIfComplete();
},
checkIfComplete: function() {
var waitingFor=this.windowIsLoaded ? '' : 'window';
for(var filename in this.loadedFiles) {
if (this.loadedFiles[filename]==this.loadRequested)
waitingFor+=' '+filename;
}
//window.status='waitingFor: '+waitingFor;
this.addPreloadMsg('waitingFor: '+waitingFor);
if (waitingFor.length==0) {
this.addPreloadMsg('Processing callbacks');
while (this.onLoadCallbacks.length > 0) {
var callback=this.onLoadCallbacks.shift();
if (callback) callback();
}
}
},
onLoad: function(callback,frontOfQ) {
if (frontOfQ)
this.onLoadCallbacks.unshift(callback);
else
this.onLoadCallbacks.push(callback);
this.checkIfComplete();
},
isKonqueror : navigator.userAgent.toLowerCase().indexOf("konqueror") >= 0,
// logging funtions
startTime : new Date(),
timeStamp: function() {
var stamp = new Date();
return (stamp.getTime()-this.startTime.getTime())+": ";
},
setDebugArea: function(id, forceit) {
if (!this.debugArea || forceit) {
var newarea=document.getElementById(id);
if (!newarea) return;
this.debugArea=newarea;
newarea.value='';
}
},
addPreloadMsg: function(msg) {
this.preloadMsgs+=Rico.timeStamp()+msg+"\n";
},
writeDebugMsg: function(msg, resetFlag) {
if (this.debugArea) {
if (resetFlag) this.debugArea.value='';
this.debugArea.value+=this.timeStamp()+msg+"\n";
} else if (window.console) {
if (window.console.firebug)
window.console.log(this.timeStamp(),msg);
else
window.console.log(this.timeStamp()+msg);
} else if (window.opera) {
window.opera.postError(this.timeStamp()+msg);
}
}
}
Rico.init();
|