| 
/***
 *  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();
 
 |