SlideShare a Scribd company logo
1 of 114
Tripsmart project.zip
Tripsmart/catalog.htmlHomeCatalogServicesToursSpainChinaN
ewsletter
Our products are backed by a 100% guarantee
Call today! 555-848-0807
TripSmart Copyright 2002 - 2013
Tripsmart/gaudi_draggon.jpg
Tripsmart/index.html
San Francisco this fall!
call today!
HomeCatalogServicesToursSpainChinaNewsletter
Welcome to TripSmart � the smart choice for the savvy
traveler. We're here to help you with all your travel needs.
Choose customized trips to any location or one of our Five-Star
Tours, recently rated first in customer satisfaction by Traveler
magazine. We are happy to arrange travel for small groups,
large groups, or individuals. Our specialty is custom itineraries
for independent travelers who enjoy travel at their own pace and
on their own schedule. With over 30 years of experience, we
can provide knowledgeable guides, comfortable and convenient
hotels, and dining recommendations for every size budget.
Call 555-848-0807 today to speak with one of our friendly staff.
TripSmart
1106 Beechwood
Fayetteville, AR 72704
555-848-0807
Contact Us
TripSmart Copyright 2002 - 2013
Tripsmart/newsletter.htmlHomeCatalogServicesToursSpainChin
aNewsletter
Our staff recently conducted a contest to determine ten top
travel tips for stress-free travel. We compiled over forty great
tips, but the following were selected as the winners. We hope
you will find them useful for your next trip!
Ten Tips for Stress-Free Travel Be organized.
Make a list of what you want to pack in each bag and
check it as you pack. Take this inventory with you in the event
your bags are lost or delayed. Then use the list again when you
repack, to make sure you haven’t left anything behind. Carry
important information with you.
Keep your important travel information in easy reach at all
times. Include a list of your flight numbers, confirmation
numbers for your travel and hotel reservations, and any car
rentals. And don’t forget printouts of your itinerary and
electronic tickets. Remember to bring your passport, and keep a
photocopy of it in another piece of baggage. Be sure to have
copies of prescriptions, emergency phone numbers, telephone
numbers and addresses of friends and relatives, complete lists
of medications, and credit card information. It’s not a bad idea
to email this information to yourself as a backup if you will
have email access. Pack smartly.
You know the old saying: lay out everything on your bed
you plan to take with you, then remove half of it. Pack the
remainder and carry your bags around the block once to make
sure you can handle them yourself. If in doubt, leave it out! Use
packing cubes or zip-top bags to organize your personal items,
such as underwear and socks. Make distinctive-looking luggage
tags with your name and address for easy identification, and be
sure to include the same information inside your luggage.
Include basic medical necessities.
Besides your prescription drugs, take a basic first aid kit
with the basics: bandages, anti-nausea medications, anti-
diarrhea medications, aspirin, antibiotics, and prescription
drugs. Wear comfortable shoes.
Blisters can ruin a wonderful trip. Wear comfortable shoes
and socks. Your priority should be comfortable, dry, warm feet
— not fashion. Don’t buy new shoes without breaking them in
first. Plan for airport security.
Slip-on shoes let you slip your shoes off quickly while
keeping an eye on your valuables. Having to tie and untie shoes
can be distracting and delay your progress through the line. Be
sure to pre-package your billfold, cell phone, keys, liquid items,
jewelry, and medications in zip-top bags. This will prevent
wasted time digging through your carry-on items or, worse yet,
being singled out for enhanced security. Keep a book, music, or
puzzle handy.
When delayed — whether in a car, hotel, or airplane — if
you have something to occupy you, you will deal with the
delays more easily. Delays are par for the course. Deal with
them creatively and your trip will be much less stressful. Pack
healthy snacks.
Healthy snacks in your carryon will keep you from being
tempted to purchase expensive airline or airport food. When
traveling in a car, you’ll make fewer unnecessary stops at fast-
food windows. Dried fruit, crackers, cheese, and peanut butter
can give you a quick energy boost and help keep you on budget.
Don’t forget hand sanitizers.
The individually wrapped hand sanitizing towelettes are
easy to tuck into pockets, purses, and backpacks. Since they are
not liquids, there is no limit to the number you can carry on
airplanes. Use them in bathrooms and before and after you eat
or drink. You can also use them to clean hotel remote controls
and doorknobs. Include cameras and accessories.
Remember to take extra batteries, memory cards for digital
cameras, a small tripod, chargers, and instruction manuals.
Learn to use the timer so you can include yourself in your
photos. Offer to take photos of others with their camera and
they will often return the favor for you with your camera. In
humid climates remember to give your camera a chance to
acclimate when you go outside to prevent a foggy lens.
TripSmart Copyright 2002 - 2013
Tripsmart/panda.jpg
Tripsmart/sea_lions.jpg
Tripsmart/services.htmlHomeCatalogServicesToursSpainChinaN
ewsletter
TripSmart
has several divisions of customer service to assist you in
planning and making
reservations for your trip, shopping for your trip wardrobe and
providing expert
guide services. Give us a call and we will be happy to connect
you with one
of the following departments: Reservations, Travel Outfitters,
or Escorted Tours.
If you are not quite ready to talk with one of our departments
and would prefer
doing some of your own research first, may we suggest
beginning with our Helpful
Links in Travel Planning.
Reservations
Our Reservations Department is staffed with five Certified
Travel Agents,
each of whom is eager to assist you in making your travel
plans. They have specialty
areas in Africa, the Caribbean, South America, Western
Europe, Eastern Europe,
Asia, Antarctica, and Hawaii and the South Pacific. They
also specialize in
Senior Travel, Family Travel, Student Travel, and Special
Needs Travel. Call
us at (555) 848-0807 extension 75 or e-mail us at
Reservations to begin making your travel plans now. We will be
happy to send you brochures
and listings of Internet addresses to help you get started.
We are open from
8:00 a.m. until 6:00 p.m. CST.
Travel
Outfitters
Our travel outfitters are seasoned travelers that have
accumulated a vast amount
of knowledge in appropriate travel clothing and accessories
for specific destinations.
Climate and seasons, of course, are important factors in
planning your wardrobe
for a trip. Area customs should also be taken in
consideration so as not to
offend the local residents with inappropriate dress. When
traveling abroad,
we always hope that our customers will represent our
country well as good ambassadors.
If they can be comfortable and stylish at the same time, we
have succeeded!
Our clothing is all affordable and packs well on long trips.
Most can be washed
easily in a hotel sink and hung to drip-dry overnight.
Browse through our on-line
catalog, then give us a call at (555) 433-7844 extension
85. We will
also be happy to mail you a catalog of our extensive
collection of travel clothing
and accessories.
Escorted
Tours
Our Escorted Tours department is always hard at work
planning the next exciting
destination to offer our TripSmart customers. We have
seven professional tour
guides that accompany our guests from the United States
point of departure to
their point of return.
Our current
feature package tour is to Spain. Our local escort is Don
Eugene. Don has traveled
Spain extensively and enjoys sharing his love for this
exciting country with
others. He will be
assisted after arrival in Spain with the services of
archeologist JoAnne Rife,
anthropologist Christina Elizabeth, and naturalist
Iris Albert. Call us at (555) 848-0807 extension 95 for
information on the Spain trip or to learn
about other destinations being currently scheduled.
Helpful
Links in Travel Planning
The following links may be helpful in your travel research.
Happy surfing!CNN Travel Channel - News affecting travel
plans to various destinationsUS Department of State - Travel
warnings, passport information, and moreYahoo! Currency
Converter - Calculate the exchange rate between two
currenciesThe Weather Channel - Weather, flight delays, and
driving conditions
TripSmart Copyright 2002 - 2013
Tripsmart/SpryMenuBar.js
// SpryMenuBar.js - version 0.12 - Spry Pre-Release 1.6.1
//
// Copyright (c) 2006. Adobe Systems Incorporated.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or
without
// modification, are permitted provided that the following
conditions are met:
//
// * Redistributions of source code must retain the above
copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
copyright notice,
// this list of conditions and the following disclaimer in the
documentation
// and/or other materials provided with the distribution.
// * Neither the name of Adobe Systems Incorporated nor the
names of its
// contributors may be used to endorse or promote products
derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
/****************************************************
***************************
SpryMenuBar.js
This file handles the JavaScript for Spry Menu Bar. You
should have no need
to edit this file. Some highlights of the MenuBar object is that
timers are
used to keep submenus from showing up until the user has
hovered over the parent
menu item for some time, as well as a timer for when they
leave a submenu to keep
showing that submenu until the timer fires.
*****************************************************
**************************/
var Spry; if (!Spry) Spry = {}; if (!Spry.Widget) Spry.Widget =
{};
Spry.BrowserSniff = function()
{
var b = navigator.appName.toString();
var up = navigator.platform.toString();
var ua = navigator.userAgent.toString();
this.mozilla = this.ie = this.opera = this.safari = false;
var re_opera = /Opera.([0-9.]*)/i;
var re_msie = /MSIE.([0-9.]*)/i;
var re_gecko = /gecko/i;
var re_safari = /(applewebkit|safari)/([d.]*)/i;
var r = false;
if ( (r = ua.match(re_opera))) {
this.opera = true;
this.version = parseFloat(r[1]);
} else if ( (r = ua.match(re_msie))) {
this.ie = true;
this.version = parseFloat(r[1]);
} else if ( (r = ua.match(re_safari))) {
this.safari = true;
this.version = parseFloat(r[2]);
} else if (ua.match(re_gecko)) {
var re_gecko_version = /rv:s*([0-9.]+)/i;
r = ua.match(re_gecko_version);
this.mozilla = true;
this.version = parseFloat(r[1]);
}
this.windows = this.mac = this.linux = false;
this.Platform = ua.match(/windows/i) ? "windows" :
(ua.match(/linux/i) ? "linux" :
(ua.match(/mac/i) ? "mac" :
ua.match(/unix/i)? "unix" :
"unknown"));
this[this.Platform] = true;
this.v = this.version;
if (this.safari && this.mac && this.mozilla) {
this.mozilla = false;
}
};
Spry.is = new Spry.BrowserSniff();
// Constructor for Menu Bar
// element should be an ID of an unordered list (<ul> tag)
// preloadImage1 and preloadImage2 are images for the rollover
state of a menu
Spry.Widget.MenuBar = function(element, opts)
{
this.init(element, opts);
};
Spry.Widget.MenuBar.prototype.init = function(element, opts)
{
this.element = this.getElement(element);
// represents the current (sub)menu we are operating on
this.currMenu = null;
this.showDelay = 250;
this.hideDelay = 600;
if(typeof document.getElementById == 'undefined' ||
(navigator.vendor == 'Apple Computer, Inc.' && typeof
window.XMLHttpRequest == 'undefined') || (Spry.is.ie &&
typeof document.uniqueID == 'undefined'))
{
// bail on older unsupported browsers
return;
}
// Fix IE6 CSS images flicker
if (Spry.is.ie && Spry.is.version < 7){
try {
document.execCommand("BackgroundImageCache", false,
true);
} catch(err) {}
}
this.upKeyCode = Spry.Widget.MenuBar.KEY_UP;
this.downKeyCode = Spry.Widget.MenuBar.KEY_DOWN;
this.leftKeyCode = Spry.Widget.MenuBar.KEY_LEFT;
this.rightKeyCode = Spry.Widget.MenuBar.KEY_RIGHT;
this.escKeyCode = Spry.Widget.MenuBar.KEY_ESC;
this.hoverClass = 'MenuBarItemHover';
this.subHoverClass = 'MenuBarItemSubmenuHover';
this.subVisibleClass ='MenuBarSubmenuVisible';
this.hasSubClass = 'MenuBarItemSubmenu';
this.activeClass = 'MenuBarActive';
this.isieClass = 'MenuBarItemIE';
this.verticalClass = 'MenuBarVertical';
this.horizontalClass = 'MenuBarHorizontal';
this.enableKeyboardNavigation = true;
this.hasFocus = false;
// load hover images now
if(opts)
{
for(var k in opts)
{
if (typeof this[k] == 'undefined')
{
var rollover = new Image;
rollover.src = opts[k];
}
}
Spry.Widget.MenuBar.setOptions(this, opts);
}
// safari doesn't support tabindex
if (Spry.is.safari)
this.enableKeyboardNavigation = false;
if(this.element)
{
this.currMenu = this.element;
var items = this.element.getElementsByTagName('li');
for(var i=0; i<items.length; i++)
{
if (i > 0 && this.enableKeyboardNavigation)
items[i].getElementsByTagName('a')[0].tabIndex='-1';
this.initialize(items[i], element);
if(Spry.is.ie)
{
this.addClassName(items[i], this.isieClass);
items[i].style.position = "static";
}
}
if (this.enableKeyboardNavigation)
{
var self = this;
this.addEventListener(document, 'keydown',
function(e){self.keyDown(e); }, false);
}
if(Spry.is.ie)
{
if(this.hasClassName(this.element,
this.verticalClass))
{
this.element.style.position = "relative";
}
var linkitems =
this.element.getElementsByTagName('a');
for(var i=0; i<linkitems.length; i++)
{
linkitems[i].style.position = "relative";
}
}
}
};
Spry.Widget.MenuBar.KEY_ESC = 27;
Spry.Widget.MenuBar.KEY_UP = 38;
Spry.Widget.MenuBar.KEY_DOWN = 40;
Spry.Widget.MenuBar.KEY_LEFT = 37;
Spry.Widget.MenuBar.KEY_RIGHT = 39;
Spry.Widget.MenuBar.prototype.getElement = function(ele)
{
if (ele && typeof ele == "string")
return document.getElementById(ele);
return ele;
};
Spry.Widget.MenuBar.prototype.hasClassName = function(ele,
className)
{
if (!ele || !className || !ele.className ||
ele.className.search(new RegExp("b" + className + "b"))
== -1)
{
return false;
}
return true;
};
Spry.Widget.MenuBar.prototype.addClassName = function(ele,
className)
{
if (!ele || !className || this.hasClassName(ele,
className))
return;
ele.className += (ele.className ? " " : "") + className;
};
Spry.Widget.MenuBar.prototype.removeClassName =
function(ele, className)
{
if (!ele || !className || !this.hasClassName(ele,
className))
return;
ele.className = ele.className.replace(new
RegExp("s*b" + className + "b", "g"), "");
};
// addEventListener for Menu Bar
// attach an event to a tag without creating obtrusive HTML
code
Spry.Widget.MenuBar.prototype.addEventListener =
function(element, eventType, handler, capture)
{
try
{
if (element.addEventListener)
{
element.addEventListener(eventType, handler,
capture);
}
else if (element.attachEvent)
{
element.attachEvent('on' + eventType, handler);
}
}
catch (e) {}
};
// createIframeLayer for Menu Bar
// creates an IFRAME underneath a menu so that it will show
above form controls and ActiveX
Spry.Widget.MenuBar.prototype.createIframeLayer =
function(menu)
{
var layer = document.createElement('iframe');
layer.tabIndex = '-1';
layer.src = 'javascript:""';
layer.frameBorder = '0';
layer.scrolling = 'no';
menu.parentNode.appendChild(layer);
layer.style.left = menu.offsetLeft + 'px';
layer.style.top = menu.offsetTop + 'px';
layer.style.width = menu.offsetWidth + 'px';
layer.style.height = menu.offsetHeight + 'px';
};
// removeIframeLayer for Menu Bar
// removes an IFRAME underneath a menu to reveal any form
controls and ActiveX
Spry.Widget.MenuBar.prototype.removeIframeLayer =
function(menu)
{
var layers = ((menu == this.element) ? menu :
menu.parentNode).getElementsByTagName('iframe');
while(layers.length > 0)
{
layers[0].parentNode.removeChild(layers[0]);
}
};
// clearMenus for Menu Bar
// root is the top level unordered list (<ul> tag)
Spry.Widget.MenuBar.prototype.clearMenus = function(root)
{
var menus = root.getElementsByTagName('ul');
for(var i=0; i<menus.length; i++)
this.hideSubmenu(menus[i]);
this.removeClassName(this.element, this.activeClass);
};
// bubbledTextEvent for Menu Bar
// identify bubbled up text events in Safari so we can ignore
them
Spry.Widget.MenuBar.prototype.bubbledTextEvent = function()
{
return Spry.is.safari && (event.target ==
event.relatedTarget.parentNode || (event.eventPhase == 3 &&
event.target.parentNode == event.relatedTarget));
};
// showSubmenu for Menu Bar
// set the proper CSS class on this menu to show it
Spry.Widget.MenuBar.prototype.showSubmenu =
function(menu)
{
if(this.currMenu)
{
this.clearMenus(this.currMenu);
this.currMenu = null;
}
if(menu)
{
this.addClassName(menu, this.subVisibleClass);
if(typeof document.all != 'undefined' &&
!Spry.is.opera && navigator.vendor != 'KDE')
{
if(!this.hasClassName(this.element,
this.horizontalClass) || menu.parentNode.parentNode !=
this.element)
{
menu.style.top =
menu.parentNode.offsetTop + 'px';
}
}
if(Spry.is.ie && Spry.is.version < 7)
{
this.createIframeLayer(menu);
}
}
this.addClassName(this.element, this.activeClass);
};
// hideSubmenu for Menu Bar
// remove the proper CSS class on this menu to hide it
Spry.Widget.MenuBar.prototype.hideSubmenu =
function(menu)
{
if(menu)
{
this.removeClassName(menu, this.subVisibleClass);
if(typeof document.all != 'undefined' &&
!Spry.is.opera && navigator.vendor != 'KDE')
{
menu.style.top = '';
menu.style.left = '';
}
if(Spry.is.ie && Spry.is.version < 7)
this.removeIframeLayer(menu);
}
};
// initialize for Menu Bar
// create event listeners for the Menu Bar widget so we can
properly
// show and hide submenus
Spry.Widget.MenuBar.prototype.initialize = function(listitem,
element)
{
var opentime, closetime;
var link = listitem.getElementsByTagName('a')[0];
var submenus = listitem.getElementsByTagName('ul');
var menu = (submenus.length > 0 ? submenus[0] : null);
if(menu)
this.addClassName(link, this.hasSubClass);
if(!Spry.is.ie)
{
// define a simple function that comes standard in IE
to determine
// if a node is within another node
listitem.contains = function(testNode)
{
// this refers to the list item
if(testNode == null)
return false;
if(testNode == this)
return true;
else
return this.contains(testNode.parentNode);
};
}
// need to save this for scope further down
var self = this;
this.addEventListener(listitem, 'mouseover',
function(e){self.mouseOver(listitem, e);}, false);
this.addEventListener(listitem, 'mouseout', function(e){if
(self.enableKeyboardNavigation) self.clearSelection();
self.mouseOut(listitem, e);}, false);
if (this.enableKeyboardNavigation)
{
this.addEventListener(link, 'blur',
function(e){self.onBlur(listitem);}, false);
this.addEventListener(link, 'focus',
function(e){self.keyFocus(listitem, e);}, false);
}
};
Spry.Widget.MenuBar.prototype.keyFocus = function (listitem,
e)
{
this.lastOpen = listitem.getElementsByTagName('a')[0];
this.addClassName(this.lastOpen,
listitem.getElementsByTagName('ul').length > 0 ?
this.subHoverClass : this.hoverClass);
this.hasFocus = true;
};
Spry.Widget.MenuBar.prototype.onBlur = function (listitem)
{
this.clearSelection(listitem);
};
Spry.Widget.MenuBar.prototype.clearSelection = function(el){
//search any intersection with the current open element
if (!this.lastOpen)
return;
if (el)
{
el = el.getElementsByTagName('a')[0];
// check children
var item = this.lastOpen;
while (item != this.element)
{
var tmp = el;
while (tmp != this.element)
{
if (tmp == item)
return;
try{
tmp = tmp.parentNode;
}catch(err){break;}
}
item = item.parentNode;
}
}
var item = this.lastOpen;
while (item != this.element)
{
this.hideSubmenu(item.parentNode);
var link = item.getElementsByTagName('a')[0];
this.removeClassName(link, this.hoverClass);
this.removeClassName(link, this.subHoverClass);
item = item.parentNode;
}
this.lastOpen = false;
};
Spry.Widget.MenuBar.prototype.keyDown = function (e)
{
if (!this.hasFocus)
return;
if (!this.lastOpen)
{
this.hasFocus = false;
return;
}
var e = e|| event;
var listitem = this.lastOpen.parentNode;
var link = this.lastOpen;
var submenus = listitem.getElementsByTagName('ul');
var menu = (submenus.length > 0 ? submenus[0] : null);
var hasSubMenu = (menu) ? true : false;
var opts = [listitem, menu, null, this.getSibling(listitem,
'previousSibling'), this.getSibling(listitem, 'nextSibling')];
if (!opts[3])
opts[2] =
(listitem.parentNode.parentNode.nodeName.toLowerCase() ==
'li')?listitem.parentNode.parentNode:null;
var found = 0;
switch (e.keyCode){
case this.upKeyCode:
found = this.getElementForKey(opts, 'y', 1);
break;
case this.downKeyCode:
found = this.getElementForKey(opts, 'y', -1);
break;
case this.leftKeyCode:
found = this.getElementForKey(opts, 'x', 1);
break;
case this.rightKeyCode:
found = this.getElementForKey(opts, 'x', -1);
break;
case this.escKeyCode:
case 9:
this.clearSelection();
this.hasFocus = false;
default: return;
}
switch (found)
{
case 0: return;
case 1:
//subopts
this.mouseOver(listitem, e);
break;
case 2:
//parent
this.mouseOut(opts[2], e);
break;
case 3:
case 4:
// left - right
this.removeClassName(link, hasSubMenu ?
this.subHoverClass : this.hoverClass);
break;
}
var link = opts[found].getElementsByTagName('a')[0];
if (opts[found].nodeName.toLowerCase() == 'ul')
opts[found] =
opts[found].getElementsByTagName('li')[0];
this.addClassName(link,
opts[found].getElementsByTagName('ul').length > 0 ?
this.subHoverClass : this.hoverClass);
this.lastOpen = link;
opts[found].getElementsByTagName('a')[0].focus();
//stop further event handling by the browser
return Spry.Widget.MenuBar.stopPropagation(e);
};
Spry.Widget.MenuBar.prototype.mouseOver = function
(listitem, e)
{
var link = listitem.getElementsByTagName('a')[0];
var submenus = listitem.getElementsByTagName('ul');
var menu = (submenus.length > 0 ? submenus[0] : null);
var hasSubMenu = (menu) ? true : false;
if (this.enableKeyboardNavigation)
this.clearSelection(listitem);
if(this.bubbledTextEvent())
{
// ignore bubbled text events
return;
}
if (listitem.closetime)
clearTimeout(listitem.closetime);
if(this.currMenu == listitem)
{
this.currMenu = null;
}
// move the focus too
if (this.hasFocus)
link.focus();
// show menu highlighting
this.addClassName(link, hasSubMenu ? this.subHoverClass
: this.hoverClass);
this.lastOpen = link;
if(menu && !this.hasClassName(menu,
this.subHoverClass))
{
var self = this;
listitem.opentime =
window.setTimeout(function(){self.showSubmenu(menu);},
this.showDelay);
}
};
Spry.Widget.MenuBar.prototype.mouseOut = function (listitem,
e)
{
var link = listitem.getElementsByTagName('a')[0];
var submenus = listitem.getElementsByTagName('ul');
var menu = (submenus.length > 0 ? submenus[0] : null);
var hasSubMenu = (menu) ? true : false;
if(this.bubbledTextEvent())
{
// ignore bubbled text events
return;
}
var related = (typeof e.relatedTarget != 'undefined' ?
e.relatedTarget : e.toElement);
if(!listitem.contains(related))
{
if (listitem.opentime)
clearTimeout(listitem.opentime);
this.currMenu = listitem;
// remove menu highlighting
this.removeClassName(link, hasSubMenu ?
this.subHoverClass : this.hoverClass);
if(menu)
{
var self = this;
listitem.closetime =
window.setTimeout(function(){self.hideSubmenu(menu);},
this.hideDelay);
}
if (this.hasFocus)
link.blur();
}
};
Spry.Widget.MenuBar.prototype.getSibling = function(element,
sibling)
{
var child = element[sibling];
while (child && child.nodeName.toLowerCase() !='li')
child = child[sibling];
return child;
};
Spry.Widget.MenuBar.prototype.getElementForKey =
function(els, prop, dir)
{
var found = 0;
var rect = Spry.Widget.MenuBar.getPosition;
var ref = rect(els[found]);
var hideSubmenu = false;
//make the subelement visible to compute the position
if (els[1] && !this.hasClassName(els[1],
this.MenuBarSubmenuVisible))
{
els[1].style.visibility = 'hidden';
this.showSubmenu(els[1]);
hideSubmenu = true;
}
var isVert = this.hasClassName(this.element,
this.verticalClass);
var hasParent =
els[0].parentNode.parentNode.nodeName.toLowerCase() == 'li'
? true : false;
for (var i = 1; i < els.length; i++){
//when navigating on the y axis in vertical menus,
ignore children and parents
if(prop=='y' && isVert && (i==1 || i==2))
{
continue;
}
//when navigationg on the x axis in the FIRST
LEVEL of horizontal menus, ignore children and parents
if(prop=='x' && !isVert && !hasParent && (i==1 ||
i==2))
{
continue;
}
if (els[i])
{
var tmp = rect(els[i]);
if ( (dir * tmp[prop]) < (dir * ref[prop]))
{
ref = tmp;
found = i;
}
}
}
// hide back the submenu
if (els[1] && hideSubmenu){
this.hideSubmenu(els[1]);
els[1].style.visibility = '';
}
return found;
};
Spry.Widget.MenuBar.camelize = function(str)
{
if (str.indexOf('-') == -1){
return str;
}
var oStringList = str.split('-');
var isFirstEntry = true;
var camelizedString = '';
for(var i=0; i < oStringList.length; i++)
{
if(oStringList[i].length>0)
{
if(isFirstEntry)
{
camelizedString = oStringList[i];
isFirstEntry = false;
}
else
{
var s = oStringList[i];
camelizedString +=
s.charAt(0).toUpperCase() + s.substring(1);
}
}
}
return camelizedString;
};
Spry.Widget.MenuBar.getStyleProp = function(element, prop)
{
var value;
try
{
if (element.style)
value =
element.style[Spry.Widget.MenuBar.camelize(prop)];
if (!value)
if (document.defaultView &&
document.defaultView.getComputedStyle)
{
var css =
document.defaultView.getComputedStyle(element, null);
value = css ? css.getPropertyValue(prop) :
null;
}
else if (element.currentStyle)
{
value =
element.currentStyle[Spry.Widget.MenuBar.camelize(prop)];
}
}
catch (e) {}
return value == 'auto' ? null : value;
};
Spry.Widget.MenuBar.getIntProp = function(element, prop)
{
var a =
parseInt(Spry.Widget.MenuBar.getStyleProp(element,
prop),10);
if (isNaN(a))
return 0;
return a;
};
Spry.Widget.MenuBar.getPosition = function(el, doc)
{
doc = doc || document;
if (typeof(el) == 'string') {
el = doc.getElementById(el);
}
if (!el) {
return false;
}
if (el.parentNode === null ||
Spry.Widget.MenuBar.getStyleProp(el, 'display') == 'none') {
//element must be visible to have a box
return false;
}
var ret = {x:0, y:0};
var parent = null;
var box;
if (el.getBoundingClientRect) { // IE
box = el.getBoundingClientRect();
var scrollTop = doc.documentElement.scrollTop ||
doc.body.scrollTop;
var scrollLeft = doc.documentElement.scrollLeft ||
doc.body.scrollLeft;
ret.x = box.left + scrollLeft;
ret.y = box.top + scrollTop;
} else if (doc.getBoxObjectFor) { // gecko
box = doc.getBoxObjectFor(el);
ret.x = box.x;
ret.y = box.y;
} else { // safari/opera
ret.x = el.offsetLeft;
ret.y = el.offsetTop;
parent = el.offsetParent;
if (parent != el) {
while (parent) {
ret.x += parent.offsetLeft;
ret.y += parent.offsetTop;
parent = parent.offsetParent;
}
}
// opera & (safari absolute) incorrectly account for
body offsetTop
if (Spry.is.opera || Spry.is.safari &&
Spry.Widget.MenuBar.getStyleProp(el, 'position') == 'absolute')
ret.y -= doc.body.offsetTop;
}
if (el.parentNode)
parent = el.parentNode;
else
parent = null;
if (parent.nodeName){
var cas = parent.nodeName.toUpperCase();
while (parent && cas != 'BODY' && cas != 'HTML')
{
cas = parent.nodeName.toUpperCase();
ret.x -= parent.scrollLeft;
ret.y -= parent.scrollTop;
if (parent.parentNode)
parent = parent.parentNode;
else
parent = null;
}
}
return ret;
};
Spry.Widget.MenuBar.stopPropagation = function(ev)
{
if (ev.stopPropagation)
ev.stopPropagation();
else
ev.cancelBubble = true;
if (ev.preventDefault)
ev.preventDefault();
else
ev.returnValue = false;
};
Spry.Widget.MenuBar.setOptions = function(obj, optionsObj,
ignoreUndefinedProps)
{
if (!optionsObj)
return;
for (var optionName in optionsObj)
{
if (ignoreUndefinedProps &&
optionsObj[optionName] == undefined)
continue;
obj[optionName] = optionsObj[optionName];
}
};
Tripsmart/SpryMenuBarHorizontal.css
@charset "UTF-8";
/* SpryMenuBarHorizontal.css - version 0.6 - Spry Pre-Release
1.6.1 */
/* Copyright (c) 2006. Adobe Systems Incorporated. All rights
reserved. */
/****************************************************
***************************
LAYOUT INFORMATION: describes box model, positioning,
z-order
*****************************************************
**************************/
/* The outermost container of the Menu Bar, an auto width box
with no margin or padding */
ul.MenuBarHorizontal
{
margin: 0;
padding: 0;
list-style-type: none;
font-size: 14px;
cursor: default;
width: auto;
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
}
/* Set the active Menu Bar with this class, currently setting z-
index to accomodate IE rendering bug:
http://therealcrisp.xs4all.nl/meuk/IE-zindexbug.html */
ul.MenuBarActive
{
z-index: 1000;
}
/* Menu item containers, position children relative to this
container and are a fixed width */
ul.MenuBarHorizontal li
{
margin: 0;
padding: 0;
list-style-type: none;
font-size: 100%;
position: relative;
text-align: center;
cursor: pointer;
width: 190px;
float: left;
height: 25px;
}
/* Submenus should appear below their parent (top: 0) with a
higher z-index, but they are initially off the left side of the
screen (-1000em) */
ul.MenuBarHorizontal ul
{
margin: 0;
padding: 0;
list-style-type: none;
font-size: 100%;
z-index: 1020;
cursor: default;
width: 8.2em;
position: absolute;
left: -1000em;
}
/* Submenu that is showing with class designation
MenuBarSubmenuVisible, we set left to auto so it comes onto
the screen below its parent menu item */
ul.MenuBarHorizontal ul.MenuBarSubmenuVisible
{
left: auto;
}
/* Menu item containers are same fixed width as parent */
ul.MenuBarHorizontal ul li
{
width: 8.2em;
}
/* Submenus should appear slightly overlapping to the right
(95%) and up (-5%) */
ul.MenuBarHorizontal ul ul
{
position: absolute;
margin: -5% 0 0 95%;
}
/* Submenu that is showing with class designation
MenuBarSubmenuVisible, we set left to 0 so it comes onto the
screen */
ul.MenuBarHorizontal ul.MenuBarSubmenuVisible
ul.MenuBarSubmenuVisible
{
left: auto;
top: 0;
}
/****************************************************
***************************
DESIGN INFORMATION: describes color scheme, borders,
fonts
*****************************************************
**************************/
/* Submenu containers have borders on all sides */
ul.MenuBarHorizontal ul
{
border: 1px solid #CCC;
}
/* Menu items are a light gray block with padding and no text
decoration */
ul.MenuBarHorizontal a
{
display: block;
cursor: pointer;
background-color: #663;
padding: 0.5em 0.75em;
color: #FFF;
text-decoration: none;
}
/* Menu items that have mouse over or focus have a blue
background and white text */
ul.MenuBarHorizontal a:hover, ul.MenuBarHorizontal a:focus
{
background-color: #C90;
color: #663;
}
/* Menu items that are open with submenus are set to
MenuBarItemHover with a blue background and white text */
ul.MenuBarHorizontal a.MenuBarItemHover,
ul.MenuBarHorizontal a.MenuBarItemSubmenuHover,
ul.MenuBarHorizontal a.MenuBarSubmenuVisible
{
background-color: #CC6;
color: #663;
}
/****************************************************
***************************
SUBMENU INDICATION: styles if there is a submenu under a
given menu item
*****************************************************
**************************/
/* Menu items that have a submenu have the class designation
MenuBarItemSubmenu and are set to use a background image
positioned on the far left (95%) and centered vertically (50%) */
ul.MenuBarHorizontal a.MenuBarItemSubmenu
{
background-image: url(SpryMenuBarDown.gif);
background-repeat: no-repeat;
background-position: 95% 50%;
}
/* Menu items that have a submenu have the class designation
MenuBarItemSubmenu and are set to use a background image
positioned on the far left (95%) and centered vertically (50%) */
ul.MenuBarHorizontal ul a.MenuBarItemSubmenu
{
background-image: url(SpryMenuBarRight.gif);
background-repeat: no-repeat;
background-position: 95% 50%;
}
/* Menu items that are open with submenus have the class
designation MenuBarItemSubmenuHover and are set to use a
"hover" background image positioned on the far left (95%) and
centered vertically (50%) */
ul.MenuBarHorizontal a.MenuBarItemSubmenuHover
{
background-image: url(SpryMenuBarDownHover.gif);
background-repeat: no-repeat;
background-position: 95% 50%;
}
/* Menu items that are open with submenus have the class
designation MenuBarItemSubmenuHover and are set to use a
"hover" background image positioned on the far left (95%) and
centered vertically (50%) */
ul.MenuBarHorizontal ul a.MenuBarItemSubmenuHover
{
background-image: url(SpryMenuBarRightHover.gif);
background-repeat: no-repeat;
background-position: 95% 50%;
}
/****************************************************
***************************
BROWSER HACKS: the hacks below should not be changed
unless you are an expert
*****************************************************
**************************/
/* HACK FOR IE: to make sure the sub menus show above form
controls, we underlay each submenu with an iframe */
ul.MenuBarHorizontal iframe
{
position: absolute;
z-index: 1010;
filter:alpha(opacity:0.1);
}
/* HACK FOR IE: to stabilize appearance of menu items; the
slash in float is to keep IE 5.0 from parsing */
@media screen, projection
{
ul.MenuBarHorizontal li.MenuBarItemIE
{
display: inline;
float: left;
background: #FFF;
}
}
Tripsmart/swfobject_modified.js
/*! SWFObject v2.0 <http://code.google.com/p/swfobject/>
Copyright (c) 2007 Geoff Stearns, Michael Williams, and
Bobby van der Sluis
This software is released under the MIT License
<http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject = function() {
var UNDEF = "undefined",
OBJECT = "object",
SHOCKWAVE_FLASH = "Shockwave Flash",
SHOCKWAVE_FLASH_AX =
"ShockwaveFlash.ShockwaveFlash",
FLASH_MIME_TYPE = "application/x-shockwave-
flash",
EXPRESS_INSTALL_ID = "SWFObjectExprInst",
win = window,
doc = document,
nav = navigator,
domLoadFnArr = [],
regObjArr = [],
timer = null,
storedAltContent = null,
storedAltContentId = null,
isDomLoaded = false,
isExpressInstallActive = false;
/* Centralized function for browser feature detection
- Proprietary feature detection (conditional
compiling) is used to detect Internet Explorer's features
- User agent string detection is only used when no
alternative is possible
- Is executed directly for optimal performance
*/
var ua = function() {
var w3cdom = typeof doc.getElementById != UNDEF
&& typeof doc.getElementsByTagName != UNDEF && typeof
doc.createElement != UNDEF && typeof doc.appendChild !=
UNDEF && typeof doc.replaceChild != UNDEF && typeof
doc.removeChild != UNDEF && typeof doc.cloneNode !=
UNDEF,
playerVersion = [0,0,0],
d = null;
if (typeof nav.plugins != UNDEF && typeof
nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
d =
nav.plugins[SHOCKWAVE_FLASH].description;
if (d) {
d = d.replace(/^.*s+(S+s+S+$)/, "$1");
playerVersion[0] =
parseInt(d.replace(/^(.*)..*$/, "$1"), 10);
playerVersion[1] =
parseInt(d.replace(/^.*.(.*)s.*$/, "$1"), 10);
playerVersion[2] = /r/.test(d) ?
parseInt(d.replace(/^.*r(.*)$/, "$1"), 10) : 0;
}
}
else if (typeof win.ActiveXObject != UNDEF) {
var a = null, fp6Crash = false;
try {
a = new
ActiveXObject(SHOCKWAVE_FLASH_AX + ".7");
}
catch(e) {
try {
a = new
ActiveXObject(SHOCKWAVE_FLASH_AX + ".6");
playerVersion = [6,0,21];
a.AllowScriptAccess = "always"; //
Introduced in fp6.0.47
}
catch(e) {
if (playerVersion[0] == 6) {
fp6Crash = true;
}
}
if (!fp6Crash) {
try {
a = new
ActiveXObject(SHOCKWAVE_FLASH_AX);
}
catch(e) {}
}
}
if (!fp6Crash && a) { // a will return null when
ActiveX is disabled
try {
d = a.GetVariable("$version"); // Will
crash fp6.0.21/23/29
if (d) {
d = d.split(" ")[1].split(",");
playerVersion = [parseInt(d[0],
10), parseInt(d[1], 10), parseInt(d[2], 10)];
}
}
catch(e) {}
}
}
var u = nav.userAgent.toLowerCase(),
p = nav.platform.toLowerCase(),
webkit = /webkit/.test(u) ?
parseFloat(u.replace(/^.*webkit/(d+(.d+)?).*$/, "$1")) :
false, // returns either the webkit version or false if not webkit
ie = false,
windows = p ? /win/.test(p) : /win/.test(u),
mac = p ? /mac/.test(p) : /mac/.test(u);
/*@cc_on
ie = true;
@if (@_win32)
windows = true;
@elif (@_mac)
mac = true;
@end
@*/
return { w3cdom:w3cdom, pv:playerVersion,
webkit:webkit, ie:ie, win:windows, mac:mac };
}();
/* Cross-browser onDomLoad
- Based on Dean Edwards' solution:
http://dean.edwards.name/weblog/2006/06/again/
- Will fire an event as soon as the DOM of a page is
loaded (supported by Gecko based browsers - like Firefox -, IE,
Opera9+, Safari)
*/
var onDomLoad = function() {
if (!ua.w3cdom) {
return;
}
addDomLoadEvent(main);
if (ua.ie && ua.win) {
try { // Avoid a possible Operation Aborted
error
doc.write("<scr" + "ipt id=__ie_ondomload
defer=true src=//:></scr" + "ipt>"); // String is split into pieces
to avoid Norton AV to add code that can cause errors
var s =
getElementById("__ie_ondomload");
if (s) {
s.onreadystatechange = function() {
if (this.readyState ==
"complete") {
this.parentNode.removeChild(this);
callDomLoadFunctions();
}
};
}
}
catch(e) {}
}
if (ua.webkit && typeof doc.readyState != UNDEF) {
timer = setInterval(function() { if
(/loaded|complete/.test(doc.readyState)) {
callDomLoadFunctions(); }}, 10);
}
if (typeof doc.addEventListener != UNDEF) {
doc.addEventListener("DOMContentLoaded",
callDomLoadFunctions, null);
}
addLoadEvent(callDomLoadFunctions);
}();
function callDomLoadFunctions() {
if (isDomLoaded) {
return;
}
if (ua.ie && ua.win) { // Test if we can really add
elements to the DOM; we don't want to fire it too early
var s = createElement("span");
try { // Avoid a possible Operation Aborted error
var t =
doc.getElementsByTagName("body")[0].appendChild(s);
t.parentNode.removeChild(t);
}
catch (e) {
return;
}
}
isDomLoaded = true;
if (timer) {
clearInterval(timer);
timer = null;
}
var dl = domLoadFnArr.length;
for (var i = 0; i < dl; i++) {
domLoadFnArr[i]();
}
}
function addDomLoadEvent(fn) {
if (isDomLoaded) {
fn();
}
else {
domLoadFnArr[domLoadFnArr.length] = fn; //
Array.push() is only available in IE5.5+
}
}
/* Cross-browser onload
- Based on James Edwards' solution:
http://brothercake.com/site/resources/scripts/onload/
- Will fire an event as soon as a web page including
all of its assets are loaded
*/
function addLoadEvent(fn) {
if (typeof win.addEventListener != UNDEF) {
win.addEventListener("load", fn, false);
}
else if (typeof doc.addEventListener != UNDEF) {
doc.addEventListener("load", fn, false);
}
else if (typeof win.attachEvent != UNDEF) {
win.attachEvent("onload", fn);
}
else if (typeof win.onload == "function") {
var fnOld = win.onload;
win.onload = function() {
fnOld();
fn();
};
}
else {
win.onload = fn;
}
}
/* Main function
- Will preferably execute onDomLoad, otherwise
onload (as a fallback)
*/
function main() { // Static publishing only
var rl = regObjArr.length;
for (var i = 0; i < rl; i++) { // For each registered
object element
var id = regObjArr[i].id;
if (ua.pv[0] > 0) {
var obj = getElementById(id);
if (obj) {
regObjArr[i].width =
obj.getAttribute("width") ? obj.getAttribute("width") : "0";
regObjArr[i].height =
obj.getAttribute("height") ? obj.getAttribute("height") : "0";
if
(hasPlayerVersion(regObjArr[i].swfVersion)) { // Flash plug-in
version >= Flash content version: Houston, we have a match!
if (ua.webkit && ua.webkit <
312) { // Older webkit engines ignore the object element's
nested param elements
fixParams(obj);
}
setVisibility(id, true);
}
else if (regObjArr[i].expressInstall
&& !isExpressInstallActive && hasPlayerVersion("6.0.65") &&
(ua.win || ua.mac)) { // Show the Adobe Express Install dialog if
set by the web page author and if supported (fp6.0.65+ on
Win/Mac OS only)
showExpressInstall(regObjArr[i]);
}
else { // Flash plug-in and Flash
content version mismatch: display alternative content instead of
Flash content
displayAltContent(obj);
}
}
}
else { // If no fp is installed, we let the object
element do its job (show alternative content)
setVisibility(id, true);
}
}
}
/* Fix nested param elements, which are ignored by older
webkit engines
- This includes Safari up to and including version
1.2.2 on Mac OS 10.3
- Fall back to the proprietary embed element
*/
function fixParams(obj) {
var nestedObj =
obj.getElementsByTagName(OBJECT)[0];
if (nestedObj) {
var e = createElement("embed"), a =
nestedObj.attributes;
if (a) {
var al = a.length;
for (var i = 0; i < al; i++) {
if (a[i].nodeName.toLowerCase() ==
"data") {
e.setAttribute("src",
a[i].nodeValue);
}
else {
e.setAttribute(a[i].nodeName,
a[i].nodeValue);
}
}
}
var c = nestedObj.childNodes;
if (c) {
var cl = c.length;
for (var j = 0; j < cl; j++) {
if (c[j].nodeType == 1 &&
c[j].nodeName.toLowerCase() == "param") {
e.setAttribute(c[j].getAttribute("name"),
c[j].getAttribute("value"));
}
}
}
obj.parentNode.replaceChild(e, obj);
}
}
/* Fix hanging audio/video threads and force open sockets
and NetConnections to disconnect
- Occurs when unloading a web page in IE using fp8+
and innerHTML/outerHTML
- Dynamic publishing only
*/
function fixObjectLeaks(id) {
if (ua.ie && ua.win && hasPlayerVersion("8.0.0")) {
win.attachEvent("onunload", function () {
var obj = getElementById(id);
if (obj) {
for (var i in obj) {
if (typeof obj[i] == "function") {
obj[i] = function() {};
}
}
obj.parentNode.removeChild(obj);
}
});
}
}
/* Show the Adobe Express Install dialog
- Reference:
http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a
253b75
*/
function showExpressInstall(regObj) {
isExpressInstallActive = true;
var obj = getElementById(regObj.id);
if (obj) {
if (regObj.altContentId) {
var ac =
getElementById(regObj.altContentId);
if (ac) {
storedAltContent = ac;
storedAltContentId =
regObj.altContentId;
}
}
else {
storedAltContent =
abstractAltContent(obj);
}
if (!(/%$/.test(regObj.width)) &&
parseInt(regObj.width, 10) < 310) {
regObj.width = "310";
}
if (!(/%$/.test(regObj.height)) &&
parseInt(regObj.height, 10) < 137) {
regObj.height = "137";
}
doc.title = doc.title.slice(0, 47) + " - Flash
Player Installation";
var pt = ua.ie && ua.win ? "ActiveX" :
"PlugIn",
dt = doc.title,
fv = "MMredirectURL=" + win.location +
"&MMplayerType=" + pt + "&MMdoctitle=" + dt,
replaceId = regObj.id;
// For IE when a SWF is loading (AND: not
available in cache) wait for the onload event to fire to remove
the original object element
// In IE you cannot properly cancel a loading
SWF file without breaking browser load references, also
obj.onreadystatechange doesn't work
if (ua.ie && ua.win && obj.readyState != 4) {
var newObj = createElement("div");
replaceId += "SWFObjectNew";
newObj.setAttribute("id", replaceId);
obj.parentNode.insertBefore(newObj, obj);
// Insert placeholder div that will be replaced by the object
element that loads expressinstall.swf
obj.style.display = "none";
win.attachEvent("onload", function() {
obj.parentNode.removeChild(obj); });
}
createSWF({ data:regObj.expressInstall,
id:EXPRESS_INSTALL_ID, width:regObj.width,
height:regObj.height }, { flashvars:fv }, replaceId);
}
}
/* Functions to abstract and display alternative content
*/
function displayAltContent(obj) {
if (ua.ie && ua.win && obj.readyState != 4) {
// For IE when a SWF is loading (AND: not
available in cache) wait for the onload event to fire to remove
the original object element
// In IE you cannot properly cancel a loading
SWF file without breaking browser load references, also
obj.onreadystatechange doesn't work
var el = createElement("div");
obj.parentNode.insertBefore(el, obj); // Insert
placeholder div that will be replaced by the alternative content
el.parentNode.replaceChild(abstractAltContent(obj), el);
obj.style.display = "none";
win.attachEvent("onload", function() {
obj.parentNode.removeChild(obj); });
}
else {
obj.parentNode.replaceChild(abstractAltContent(obj), obj);
}
}
function abstractAltContent(obj) {
var ac = createElement("div");
if (ua.win && ua.ie) {
ac.innerHTML = obj.innerHTML;
}
else {
var nestedObj =
obj.getElementsByTagName(OBJECT)[0];
if (nestedObj) {
var c = nestedObj.childNodes;
if (c) {
var cl = c.length;
for (var i = 0; i < cl; i++) {
if (!(c[i].nodeType == 1 &&
c[i].nodeName.toLowerCase() == "param") && !(c[i].nodeType
== 8)) {
ac.appendChild(c[i].cloneNode(true));
}
}
}
}
}
return ac;
}
/* Cross-browser dynamic SWF creation
*/
function createSWF(attObj, parObj, id) {
var r, el = getElementById(id);
if (typeof attObj.id == UNDEF) { // if no 'id' is
defined for the object element, it will inherit the 'id' from the
alternative content
attObj.id = id;
}
if (ua.ie && ua.win) { // IE, the object element and
W3C DOM methods do not combine: fall back to outerHTML
var att = "";
for (var i in attObj) {
if (attObj[i] != Object.prototype[i]) { //
Filter out prototype additions from other potential libraries, like
Object.prototype.toJSONString = function() {}
if (i == "data") {
parObj.movie = attObj[i];
}
else if (i.toLowerCase() ==
"styleclass") { // 'class' is an ECMA4 reserved keyword
att += ' class="' + attObj[i] + '"';
}
else if (i != "classid") {
att += ' ' + i + '="' + attObj[i] +
'"';
}
}
}
var par = "";
for (var j in parObj) {
if (parObj[j] != Object.prototype[j]) { //
Filter out prototype additions from other potential libraries
par += '<param name="' + j + '"
value="' + parObj[j] + '" />';
}
}
el.outerHTML = '<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' +
att + '>' + par + '</object>';
fixObjectLeaks(attObj.id); // This bug affects
dynamic publishing only
r = getElementById(attObj.id);
}
else if (ua.webkit && ua.webkit < 312) { // Older
webkit engines ignore the object element's nested param
elements: fall back to the proprietary embed element
var e = createElement("embed");
e.setAttribute("type", FLASH_MIME_TYPE);
for (var k in attObj) {
if (attObj[k] != Object.prototype[k]) { //
Filter out prototype additions from other potential libraries
if (k == "data") {
e.setAttribute("src", attObj[k]);
}
else if (k.toLowerCase() ==
"styleclass") { // 'class' is an ECMA4 reserved keyword
e.setAttribute("class", attObj[k]);
}
else if (k != "classid") { // Filter out
IE specific attribute
e.setAttribute(k, attObj[k]);
}
}
}
for (var l in parObj) {
if (parObj[l] != Object.prototype[l]) { //
Filter out prototype additions from other potential libraries
if (l != "movie") { // Filter out IE
specific param element
e.setAttribute(l, parObj[l]);
}
}
}
el.parentNode.replaceChild(e, el);
r = e;
}
else { // Well-behaving browsers
var o = createElement(OBJECT);
o.setAttribute("type", FLASH_MIME_TYPE);
for (var m in attObj) {
if (attObj[m] != Object.prototype[m]) { //
Filter out prototype additions from other potential libraries
if (m.toLowerCase() == "styleclass")
{ // 'class' is an ECMA4 reserved keyword
o.setAttribute("class",
attObj[m]);
}
else if (m != "classid") { // Filter out
IE specific attribute
o.setAttribute(m, attObj[m]);
}
}
}
for (var n in parObj) {
if (parObj[n] != Object.prototype[n] && n
!= "movie") { // Filter out prototype additions from other
potential libraries and IE specific param element
createObjParam(o, n, parObj[n]);
}
}
el.parentNode.replaceChild(o, el);
r = o;
}
return r;
}
function createObjParam(el, pName, pValue) {
var p = createElement("param");
p.setAttribute("name", pName);
p.setAttribute("value", pValue);
el.appendChild(p);
}
function getElementById(id) {
return doc.getElementById(id);
}
function createElement(el) {
return doc.createElement(el);
}
function hasPlayerVersion(rv) {
var pv = ua.pv, v = rv.split(".");
v[0] = parseInt(v[0], 10);
v[1] = parseInt(v[1], 10);
v[2] = parseInt(v[2], 10);
return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] >
v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ?
true : false;
}
/* Cross-browser dynamic CSS creation
- Based on Bobby van der Sluis' solution:
http://www.bobbyvandersluis.com/articles/dynamicCSS.php
*/
function createCSS(sel, decl) {
if (ua.ie && ua.mac) {
return;
}
var h = doc.getElementsByTagName("head")[0], s =
createElement("style");
s.setAttribute("type", "text/css");
s.setAttribute("media", "screen");
if (!(ua.ie && ua.win) && typeof doc.createTextNode
!= UNDEF) {
s.appendChild(doc.createTextNode(sel + " {" +
decl + "}"));
}
h.appendChild(s);
if (ua.ie && ua.win && typeof doc.styleSheets !=
UNDEF && doc.styleSheets.length > 0) {
var ls = doc.styleSheets[doc.styleSheets.length -
1];
if (typeof ls.addRule == OBJECT) {
ls.addRule(sel, decl);
}
}
}
function setVisibility(id, isVisible) {
var v = isVisible ? "inherit" : "hidden";
if (isDomLoaded) {
getElementById(id).style.visibility = v;
}
else {
createCSS("#" + id, "visibility:" + v);
}
}
function getTargetVersion(obj) {
if (!obj)
return 0;
var c = obj.childNodes;
var cl = c.length;
for (var i = 0; i < cl; i++) {
if (c[i].nodeType == 1 &&
c[i].nodeName.toLowerCase() == "object") {
c = c[i].childNodes;
cl = c.length;
i = 0;
}
if (c[i].nodeType == 1 &&
c[i].nodeName.toLowerCase() == "param" &&
c[i].getAttribute("name") == "swfversion") {
return c[i].getAttribute("value");
}
}
return 0;
}
function getExpressInstall(obj) {
if (!obj)
return "";
var c = obj.childNodes;
var cl = c.length;
for (var i = 0; i < cl; i++) {
if (c[i].nodeType == 1 &&
c[i].nodeName.toLowerCase() == "object") {
c = c[i].childNodes;
cl = c.length;
i = 0;
}
if (c[i].nodeType == 1 &&
c[i].nodeName.toLowerCase() == "param" &&
c[i].getAttribute("name") == "expressinstall") {
return c[i].getAttribute("value");
}
}
return "";
}
return {
/* Public API
- Reference:
http://code.google.com/p/swfobject/wiki/SWFObject_2_0_docu
mentation
*/
registerObject: function(objectIdStr, swfVersionStr,
xiSwfUrlStr) {
if (!ua.w3cdom || !objectIdStr) {
return;
}
var obj =
document.getElementById(objectIdStr);
var xi = getExpressInstall(obj);
var regObj = {};
regObj.id = objectIdStr;
regObj.swfVersion = swfVersionStr ?
swfVersionStr : getTargetVersion(obj);
regObj.expressInstall = xiSwfUrlStr ?
xiSwfUrlStr : ((xi != "") ? xi : false);
regObjArr[regObjArr.length] = regObj;
setVisibility(objectIdStr, false);
},
getObjectById: function(objectIdStr) {
var r = null;
if (ua.w3cdom && isDomLoaded) {
var o = getElementById(objectIdStr);
if (o) {
var n =
o.getElementsByTagName(OBJECT)[0];
if (!n || (n && typeof o.SetVariable !=
UNDEF)) {
r = o;
}
else if (typeof n.SetVariable !=
UNDEF) {
r = n;
}
}
}
return r;
},
embedSWF: function(swfUrlStr, replaceElemIdStr,
widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj,
parObj, attObj) {
if (!ua.w3cdom || !swfUrlStr || !replaceElemIdStr
|| !widthStr || !heightStr || !swfVersionStr) {
return;
}
widthStr += ""; // Auto-convert to string to make
it idiot proof
heightStr += "";
if (hasPlayerVersion(swfVersionStr)) {
setVisibility(replaceElemIdStr, false);
var att = (typeof attObj == OBJECT) ?
attObj : {};
att.data = swfUrlStr;
att.width = widthStr;
att.height = heightStr;
var par = (typeof parObj == OBJECT) ?
parObj : {};
if (typeof flashvarsObj == OBJECT) {
for (var i in flashvarsObj) {
if (flashvarsObj[i] !=
Object.prototype[i]) { // Filter out prototype additions from
other potential libraries
if (typeof par.flashvars !=
UNDEF) {
par.flashvars += "&" +
i + "=" + flashvarsObj[i];
}
else {
par.flashvars = i + "="
+ flashvarsObj[i];
}
}
}
}
addDomLoadEvent(function() {
createSWF(att, par,
replaceElemIdStr);
if (att.id == replaceElemIdStr) {
setVisibility(replaceElemIdStr,
true);
}
});
}
else if (xiSwfUrlStr && !isExpressInstallActive
&& hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) {
setVisibility(replaceElemIdStr, false);
addDomLoadEvent(function() {
var regObj = {};
regObj.id = regObj.altContentId =
replaceElemIdStr;
regObj.width = widthStr;
regObj.height = heightStr;
regObj.expressInstall = xiSwfUrlStr;
showExpressInstall(regObj);
});
}
},
getFlashPlayerVersion: function() {
return { major:ua.pv[0], minor:ua.pv[1],
release:ua.pv[2] };
},
hasFlashPlayerVersion:hasPlayerVersion,
createSWF: function(attObj, parObj,
replaceElemIdStr) {
if (ua.w3cdom && isDomLoaded) {
return createSWF(attObj, parObj,
replaceElemIdStr);
}
else {
return undefined;
}
},
createCSS: function(sel, decl) {
if (ua.w3cdom) {
createCSS(sel, decl);
}
},
addDomLoadEvent:addDomLoadEvent,
addLoadEvent:addLoadEvent,
getQueryParamValue: function(param) {
var q = doc.location.search || doc.location.hash;
if (param == null) {
return q;
}
if(q) {
var pairs = q.substring(1).split("&");
for (var i = 0; i < pairs.length; i++) {
if (pairs[i].substring(0,
pairs[i].indexOf("=")) == param) {
return
pairs[i].substring((pairs[i].indexOf("=") + 1));
}
}
}
return "";
},
// For internal usage only
expressInstallCallback: function() {
if (isExpressInstallActive && storedAltContent)
{
var obj =
getElementById(EXPRESS_INSTALL_ID);
if (obj) {
obj.parentNode.replaceChild(storedAltContent, obj);
if (storedAltContentId) {
setVisibility(storedAltContentId,
true);
if (ua.ie && ua.win) {
storedAltContent.style.display = "block";
}
}
storedAltContent = null;
storedAltContentId = null;
isExpressInstallActive = false;
}
}
}
};
}();
Tripsmart/Tour.css
#tour {
position:absolute;
left:621px;
top:308px;
width:300px;
height:162px;
z-index:1;
border: thin solid #000;
}
#san_francisco {
position:absolute;
left:438px;
top:394px;
width:214px;
height:58px;
z-index:2;
background-color: #FFFF99;
text-align: center;
font-size: medium;
border: thin solid #000;
}
Tripsmart/tours.htmlHomeCatalogServicesToursSpainChinaNew
sletter
Destinations: Spain and China
We are featuring two trips this month. Our Spain trip will
depart on May 5 for 16 days. We will arrive in Madrid, where
you will check in at the Intercontinental Hotel. The next
morning, we will begin your tour with the Royal Palace and end
the day at the Prado Museum, housing works by Spain's great
masters: Goya, Velazquez, and El Greco. We will depart from
Madrid and visit Toledo, Granada, and Cordoba, some of
Spain's most picqueresque cities. Granada features the 13-
century palace Alhambra with its beautiful gardens. Jerez, the
home of the Andalusioan School of Equestrian Art, is our next
stop. You will view a performance of the "dancing stallions"
and visit a bodega. Next is Seville, where you will have a
change to attend a traditional flamenco show. You may decide
to splurge on an authentic flamenco dress! We end the visit with
Barcelona where you will stay near the Barcelona Olympic Port.
You will view the work of Spain's most famous architect:
Gaudi, as you visit the unfinished Sagrada Familia Basilica
along with the Parc Guell, a UNESCO World Heritage Site.
The second trip we are featuring is to China. We will depart on
June 20 and arrive in Shanghai to stay three nights at the
Shanghai Four Seasons Hotel.Shanghai sights will include a
visit to the Bund, the Shanghai Museum, and a performace of
the Shanghai Acrobats. From Shanghai we will depart for our
three-day voyage down the Yangtze River on the River Dancer,
where we will visit The Three Gorges. Upon disembarking, we
will travel to Xian to view the Terra Cotta Warriors and explore
the Shaanxi Museum. Our tour ends in Bejjing with the
Forbidden City, Tiananmen Square, and a day trip to the Great
Wall of China.Our experienced guides all speak fluent English.
Our team includes ornithologist JoAnne Rife, zoologist Jenny
Williams, anthropologist Christina Elizabeth, and naturalist
Richard Newland. Private air transport will whisk us to more
distant game reserves with an opportunity to see the native
Pandas. This is truly a trip of a lifetime. Make your reservations
now! Please complete this form for additional information on
these tours.First NameLast NameStreetCityStateZip
CodePhoneE-mailI am Interested in:
Spain
China
TripSmart Copyright 2002 - 2013
Tripsmart/trip.css
body {
margin: 0;
padding: 0;
color: #000;
background-color: #FFF;
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
line-height: 1.4;
}
ul, ol, dl {
padding: 0;
margin: 0;
}
h1, h2, h3, h4, h5, h6, p {
margin-top: 0;
padding-right: 15px;
padding-left: 15px;
}
a img {
border: none;
}
a:link {
color: #42413C;
text-decoration: underline; }
a:visited {
color: #6E6C64;
text-decoration: underline;
}
a:hover, a:active, a:focus {
text-decoration: none;
}
.container {
width: 960px;
background: #FFF;
margin: 0 auto;
border: thin solid #030;
position: relative;
}
.header {
background-color: #FFF;
margin: 5px;
}
.content {
padding: 10px 0;
}
.footer {
text-align: center;
background-color: #FFF;
font-size: 12px;
font-weight: normal;
}
.fltrt {
float: right;
margin-left: 8px;
}
.fltlft {
float: left;
margin-right: 8px;
}
.clearfloat {
clear:both;
height:0;
font-size: 1px;
line-height: 0px;
}
Tripsmart/tripsmart.jpg
Tripsmart/tripsmart_styles.css
.paragraph_text {
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
color: #000;
}
.list_heading {
font-family: Arial, Helvetica, sans-serif;
font-size: 16px;
font-weight: bold;
color: #030;
}
.list_term {
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
font-weight: bold;
color: #000;
}
.reverse_text {
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
font-style: normal;
font-weight: bold;
color: #666633;
}
.item_numbers {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
font-style: normal;
font-weight: bold;
}
hr {
border: thin solid #663;
margin: 9px;
width: 930px;
}

More Related Content

Similar to Tripsmart project.zipTripsmartcatalog.htmlHomeCatalogServic.docx

Insurance Strategies for the Modern Nomad. Wanderlust Without Worry.
Insurance Strategies for the Modern Nomad. Wanderlust Without Worry.Insurance Strategies for the Modern Nomad. Wanderlust Without Worry.
Insurance Strategies for the Modern Nomad. Wanderlust Without Worry.WiseRoamer.com
 
Tpi Corporate Power Point Presentation Lora
Tpi Corporate Power Point Presentation   LoraTpi Corporate Power Point Presentation   Lora
Tpi Corporate Power Point Presentation Loradkeizer
 
What should we know before traveling
What should we know before travelingWhat should we know before traveling
What should we know before travelingGavin Manerowski
 
Don't Know How To Pack? Tips To Follow
Don't Know How To Pack? Tips To FollowDon't Know How To Pack? Tips To Follow
Don't Know How To Pack? Tips To Followzonkedepicurean79
 
don’t forget to keep these 5 Travel items
 don’t forget to keep these 5 Travel items don’t forget to keep these 5 Travel items
don’t forget to keep these 5 Travel itemskanika sharma
 
STUDY ABROAD SAFETY - GREAT DESTINATIONS HELPFUL TIPS
STUDY ABROAD SAFETY - GREAT DESTINATIONS  HELPFUL TIPSSTUDY ABROAD SAFETY - GREAT DESTINATIONS  HELPFUL TIPS
STUDY ABROAD SAFETY - GREAT DESTINATIONS HELPFUL TIPSGlobal Opportunities
 
Dreaming of the Road: A Trip-Planning Guide from American Family Insurance
Dreaming of the Road: A Trip-Planning Guide from American Family InsuranceDreaming of the Road: A Trip-Planning Guide from American Family Insurance
Dreaming of the Road: A Trip-Planning Guide from American Family InsuranceJessica Hartman
 
The Explorers Guide to Travel Photography & Destination Video (Whitepaper)
The Explorers Guide to Travel Photography & Destination Video (Whitepaper)The Explorers Guide to Travel Photography & Destination Video (Whitepaper)
The Explorers Guide to Travel Photography & Destination Video (Whitepaper)Shutterstock
 
Milestone Travel Consultants
Milestone Travel ConsultantsMilestone Travel Consultants
Milestone Travel ConsultantsSiddharth Gurjar
 
Jo travel tips.pdf
Jo travel tips.pdfJo travel tips.pdf
Jo travel tips.pdfssusercca931
 
Expert Travel Advice.docx
Expert Travel Advice.docxExpert Travel Advice.docx
Expert Travel Advice.docxPDRM
 
Worldwide Motorhoming Holidays From the Camping and Caravanning Club 2014/15 ...
Worldwide Motorhoming Holidays From the Camping and Caravanning Club 2014/15 ...Worldwide Motorhoming Holidays From the Camping and Caravanning Club 2014/15 ...
Worldwide Motorhoming Holidays From the Camping and Caravanning Club 2014/15 ...campandcaravan
 
X jill fisher-summer initiative 2013
X jill fisher-summer initiative 2013X jill fisher-summer initiative 2013
X jill fisher-summer initiative 2013aleparragonz
 
X jill fisher-summer initiative 2013
X jill fisher-summer initiative 2013X jill fisher-summer initiative 2013
X jill fisher-summer initiative 2013aleparragonz
 
Travel safetypresentation
Travel safetypresentationTravel safetypresentation
Travel safetypresentationShawnta Reta
 

Similar to Tripsmart project.zipTripsmartcatalog.htmlHomeCatalogServic.docx (20)

Insurance Strategies for the Modern Nomad. Wanderlust Without Worry.
Insurance Strategies for the Modern Nomad. Wanderlust Without Worry.Insurance Strategies for the Modern Nomad. Wanderlust Without Worry.
Insurance Strategies for the Modern Nomad. Wanderlust Without Worry.
 
Tpi Corporate Power Point Presentation Lora
Tpi Corporate Power Point Presentation   LoraTpi Corporate Power Point Presentation   Lora
Tpi Corporate Power Point Presentation Lora
 
What should we know before traveling
What should we know before travelingWhat should we know before traveling
What should we know before traveling
 
Don't Know How To Pack? Tips To Follow
Don't Know How To Pack? Tips To FollowDon't Know How To Pack? Tips To Follow
Don't Know How To Pack? Tips To Follow
 
don’t forget to keep these 5 Travel items
 don’t forget to keep these 5 Travel items don’t forget to keep these 5 Travel items
don’t forget to keep these 5 Travel items
 
Carry-on essentials for the USQ student abroad
Carry-on essentials for the USQ student abroadCarry-on essentials for the USQ student abroad
Carry-on essentials for the USQ student abroad
 
Student travel-guide
Student travel-guideStudent travel-guide
Student travel-guide
 
Awareness Guide
Awareness GuideAwareness Guide
Awareness Guide
 
STUDY ABROAD SAFETY - GREAT DESTINATIONS HELPFUL TIPS
STUDY ABROAD SAFETY - GREAT DESTINATIONS  HELPFUL TIPSSTUDY ABROAD SAFETY - GREAT DESTINATIONS  HELPFUL TIPS
STUDY ABROAD SAFETY - GREAT DESTINATIONS HELPFUL TIPS
 
Dreaming of the Road: A Trip-Planning Guide from American Family Insurance
Dreaming of the Road: A Trip-Planning Guide from American Family InsuranceDreaming of the Road: A Trip-Planning Guide from American Family Insurance
Dreaming of the Road: A Trip-Planning Guide from American Family Insurance
 
The Explorers Guide to Travel Photography & Destination Video (Whitepaper)
The Explorers Guide to Travel Photography & Destination Video (Whitepaper)The Explorers Guide to Travel Photography & Destination Video (Whitepaper)
The Explorers Guide to Travel Photography & Destination Video (Whitepaper)
 
Milestone Travel Consultants
Milestone Travel ConsultantsMilestone Travel Consultants
Milestone Travel Consultants
 
Jo travel tips.pdf
Jo travel tips.pdfJo travel tips.pdf
Jo travel tips.pdf
 
Expert Travel Advice.docx
Expert Travel Advice.docxExpert Travel Advice.docx
Expert Travel Advice.docx
 
Road Travel Safety
Road Travel SafetyRoad Travel Safety
Road Travel Safety
 
Paras Holidays Company Profile-PDF
Paras Holidays Company Profile-PDFParas Holidays Company Profile-PDF
Paras Holidays Company Profile-PDF
 
Worldwide Motorhoming Holidays From the Camping and Caravanning Club 2014/15 ...
Worldwide Motorhoming Holidays From the Camping and Caravanning Club 2014/15 ...Worldwide Motorhoming Holidays From the Camping and Caravanning Club 2014/15 ...
Worldwide Motorhoming Holidays From the Camping and Caravanning Club 2014/15 ...
 
X jill fisher-summer initiative 2013
X jill fisher-summer initiative 2013X jill fisher-summer initiative 2013
X jill fisher-summer initiative 2013
 
X jill fisher-summer initiative 2013
X jill fisher-summer initiative 2013X jill fisher-summer initiative 2013
X jill fisher-summer initiative 2013
 
Travel safetypresentation
Travel safetypresentationTravel safetypresentation
Travel safetypresentation
 

More from willcoxjanay

Critical Response Rubric Category 0 1 1.5 2 Timelin.docx
Critical Response Rubric Category 0 1 1.5 2 Timelin.docxCritical Response Rubric Category 0 1 1.5 2 Timelin.docx
Critical Response Rubric Category 0 1 1.5 2 Timelin.docxwillcoxjanay
 
Critical Response Rubric- Please view the videos provided on Asha De.docx
Critical Response Rubric- Please view the videos provided on Asha De.docxCritical Response Rubric- Please view the videos provided on Asha De.docx
Critical Response Rubric- Please view the videos provided on Asha De.docxwillcoxjanay
 
Critical Reflective AnalysisIn developing your genogram and learni.docx
Critical Reflective AnalysisIn developing your genogram and learni.docxCritical Reflective AnalysisIn developing your genogram and learni.docx
Critical Reflective AnalysisIn developing your genogram and learni.docxwillcoxjanay
 
Critical Reflection Projectzzz.docx
Critical Reflection Projectzzz.docxCritical Reflection Projectzzz.docx
Critical Reflection Projectzzz.docxwillcoxjanay
 
Critical reflection on the reading from Who Speaks for Justice, .docx
Critical reflection on the reading from Who Speaks for Justice, .docxCritical reflection on the reading from Who Speaks for Justice, .docx
Critical reflection on the reading from Who Speaks for Justice, .docxwillcoxjanay
 
Critical Reflection ExerciseStudents are expected to have co.docx
Critical Reflection ExerciseStudents are expected to have co.docxCritical Reflection ExerciseStudents are expected to have co.docx
Critical Reflection ExerciseStudents are expected to have co.docxwillcoxjanay
 
Critical Reading StrategiesThe University of Minnesota published.docx
Critical Reading StrategiesThe University of Minnesota published.docxCritical Reading StrategiesThe University of Minnesota published.docx
Critical Reading StrategiesThe University of Minnesota published.docxwillcoxjanay
 
Critical Qualitative Research Designpages 70–76Related to un.docx
Critical Qualitative Research Designpages 70–76Related to un.docxCritical Qualitative Research Designpages 70–76Related to un.docx
Critical Qualitative Research Designpages 70–76Related to un.docxwillcoxjanay
 
Critical InfrastructuresThe U.S. Department of Homeland Security h.docx
Critical InfrastructuresThe U.S. Department of Homeland Security h.docxCritical InfrastructuresThe U.S. Department of Homeland Security h.docx
Critical InfrastructuresThe U.S. Department of Homeland Security h.docxwillcoxjanay
 
Critical Infrastructure Protection Discussion Questions How.docx
Critical Infrastructure Protection Discussion Questions How.docxCritical Infrastructure Protection Discussion Questions How.docx
Critical Infrastructure Protection Discussion Questions How.docxwillcoxjanay
 
Critical InfrastructuresIn terms of critical infrastructure and ke.docx
Critical InfrastructuresIn terms of critical infrastructure and ke.docxCritical InfrastructuresIn terms of critical infrastructure and ke.docx
Critical InfrastructuresIn terms of critical infrastructure and ke.docxwillcoxjanay
 
Critical Infrastructure Case StudyPower plants are an important .docx
Critical Infrastructure Case StudyPower plants are an important .docxCritical Infrastructure Case StudyPower plants are an important .docx
Critical Infrastructure Case StudyPower plants are an important .docxwillcoxjanay
 
Critical Infrastructure and a CyberattackPresidential Decisi.docx
Critical Infrastructure and a CyberattackPresidential Decisi.docxCritical Infrastructure and a CyberattackPresidential Decisi.docx
Critical Infrastructure and a CyberattackPresidential Decisi.docxwillcoxjanay
 
Critical Incident Protection (CIP)Plans need to have your name o.docx
Critical Incident Protection (CIP)Plans need to have your name o.docxCritical Incident Protection (CIP)Plans need to have your name o.docx
Critical Incident Protection (CIP)Plans need to have your name o.docxwillcoxjanay
 
Critical Evaluation of Qualitative or Quantitative Research Stud.docx
Critical Evaluation of Qualitative or Quantitative Research Stud.docxCritical Evaluation of Qualitative or Quantitative Research Stud.docx
Critical Evaluation of Qualitative or Quantitative Research Stud.docxwillcoxjanay
 
Critical Analysis of Phillips argument in her essay Zombie Studies.docx
Critical Analysis of Phillips argument in her essay Zombie Studies.docxCritical Analysis of Phillips argument in her essay Zombie Studies.docx
Critical Analysis of Phillips argument in her essay Zombie Studies.docxwillcoxjanay
 
Critical Appraisal Process for Quantitative ResearchAs you cri.docx
Critical Appraisal Process for Quantitative ResearchAs you cri.docxCritical Appraisal Process for Quantitative ResearchAs you cri.docx
Critical Appraisal Process for Quantitative ResearchAs you cri.docxwillcoxjanay
 
CriteriaExcellentSuperiorGoodWork neededFailingIntrodu.docx
CriteriaExcellentSuperiorGoodWork neededFailingIntrodu.docxCriteriaExcellentSuperiorGoodWork neededFailingIntrodu.docx
CriteriaExcellentSuperiorGoodWork neededFailingIntrodu.docxwillcoxjanay
 
Critical analysis of primary literature - PracticePurposeThis.docx
Critical analysis of primary literature - PracticePurposeThis.docxCritical analysis of primary literature - PracticePurposeThis.docx
Critical analysis of primary literature - PracticePurposeThis.docxwillcoxjanay
 
Critical analysis of one relevant curriculum approach or model..docx
Critical analysis of one relevant curriculum approach or model..docxCritical analysis of one relevant curriculum approach or model..docx
Critical analysis of one relevant curriculum approach or model..docxwillcoxjanay
 

More from willcoxjanay (20)

Critical Response Rubric Category 0 1 1.5 2 Timelin.docx
Critical Response Rubric Category 0 1 1.5 2 Timelin.docxCritical Response Rubric Category 0 1 1.5 2 Timelin.docx
Critical Response Rubric Category 0 1 1.5 2 Timelin.docx
 
Critical Response Rubric- Please view the videos provided on Asha De.docx
Critical Response Rubric- Please view the videos provided on Asha De.docxCritical Response Rubric- Please view the videos provided on Asha De.docx
Critical Response Rubric- Please view the videos provided on Asha De.docx
 
Critical Reflective AnalysisIn developing your genogram and learni.docx
Critical Reflective AnalysisIn developing your genogram and learni.docxCritical Reflective AnalysisIn developing your genogram and learni.docx
Critical Reflective AnalysisIn developing your genogram and learni.docx
 
Critical Reflection Projectzzz.docx
Critical Reflection Projectzzz.docxCritical Reflection Projectzzz.docx
Critical Reflection Projectzzz.docx
 
Critical reflection on the reading from Who Speaks for Justice, .docx
Critical reflection on the reading from Who Speaks for Justice, .docxCritical reflection on the reading from Who Speaks for Justice, .docx
Critical reflection on the reading from Who Speaks for Justice, .docx
 
Critical Reflection ExerciseStudents are expected to have co.docx
Critical Reflection ExerciseStudents are expected to have co.docxCritical Reflection ExerciseStudents are expected to have co.docx
Critical Reflection ExerciseStudents are expected to have co.docx
 
Critical Reading StrategiesThe University of Minnesota published.docx
Critical Reading StrategiesThe University of Minnesota published.docxCritical Reading StrategiesThe University of Minnesota published.docx
Critical Reading StrategiesThe University of Minnesota published.docx
 
Critical Qualitative Research Designpages 70–76Related to un.docx
Critical Qualitative Research Designpages 70–76Related to un.docxCritical Qualitative Research Designpages 70–76Related to un.docx
Critical Qualitative Research Designpages 70–76Related to un.docx
 
Critical InfrastructuresThe U.S. Department of Homeland Security h.docx
Critical InfrastructuresThe U.S. Department of Homeland Security h.docxCritical InfrastructuresThe U.S. Department of Homeland Security h.docx
Critical InfrastructuresThe U.S. Department of Homeland Security h.docx
 
Critical Infrastructure Protection Discussion Questions How.docx
Critical Infrastructure Protection Discussion Questions How.docxCritical Infrastructure Protection Discussion Questions How.docx
Critical Infrastructure Protection Discussion Questions How.docx
 
Critical InfrastructuresIn terms of critical infrastructure and ke.docx
Critical InfrastructuresIn terms of critical infrastructure and ke.docxCritical InfrastructuresIn terms of critical infrastructure and ke.docx
Critical InfrastructuresIn terms of critical infrastructure and ke.docx
 
Critical Infrastructure Case StudyPower plants are an important .docx
Critical Infrastructure Case StudyPower plants are an important .docxCritical Infrastructure Case StudyPower plants are an important .docx
Critical Infrastructure Case StudyPower plants are an important .docx
 
Critical Infrastructure and a CyberattackPresidential Decisi.docx
Critical Infrastructure and a CyberattackPresidential Decisi.docxCritical Infrastructure and a CyberattackPresidential Decisi.docx
Critical Infrastructure and a CyberattackPresidential Decisi.docx
 
Critical Incident Protection (CIP)Plans need to have your name o.docx
Critical Incident Protection (CIP)Plans need to have your name o.docxCritical Incident Protection (CIP)Plans need to have your name o.docx
Critical Incident Protection (CIP)Plans need to have your name o.docx
 
Critical Evaluation of Qualitative or Quantitative Research Stud.docx
Critical Evaluation of Qualitative or Quantitative Research Stud.docxCritical Evaluation of Qualitative or Quantitative Research Stud.docx
Critical Evaluation of Qualitative or Quantitative Research Stud.docx
 
Critical Analysis of Phillips argument in her essay Zombie Studies.docx
Critical Analysis of Phillips argument in her essay Zombie Studies.docxCritical Analysis of Phillips argument in her essay Zombie Studies.docx
Critical Analysis of Phillips argument in her essay Zombie Studies.docx
 
Critical Appraisal Process for Quantitative ResearchAs you cri.docx
Critical Appraisal Process for Quantitative ResearchAs you cri.docxCritical Appraisal Process for Quantitative ResearchAs you cri.docx
Critical Appraisal Process for Quantitative ResearchAs you cri.docx
 
CriteriaExcellentSuperiorGoodWork neededFailingIntrodu.docx
CriteriaExcellentSuperiorGoodWork neededFailingIntrodu.docxCriteriaExcellentSuperiorGoodWork neededFailingIntrodu.docx
CriteriaExcellentSuperiorGoodWork neededFailingIntrodu.docx
 
Critical analysis of primary literature - PracticePurposeThis.docx
Critical analysis of primary literature - PracticePurposeThis.docxCritical analysis of primary literature - PracticePurposeThis.docx
Critical analysis of primary literature - PracticePurposeThis.docx
 
Critical analysis of one relevant curriculum approach or model..docx
Critical analysis of one relevant curriculum approach or model..docxCritical analysis of one relevant curriculum approach or model..docx
Critical analysis of one relevant curriculum approach or model..docx
 

Recently uploaded

Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfchloefrazer622
 
URLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website AppURLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website AppCeline George
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformChameera Dedduwage
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactPECB
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpinRaunakKeshri1
 
Introduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher EducationIntroduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher Educationpboyjonauth
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...Marc Dusseiller Dusjagr
 
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...RKavithamani
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104misteraugie
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationnomboosow
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxheathfieldcps1
 
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdfssuser54595a
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfJayanti Pande
 

Recently uploaded (20)

Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
URLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website AppURLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website App
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpin
 
Introduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher EducationIntroduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher Education
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
 
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
 
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 

Tripsmart project.zipTripsmartcatalog.htmlHomeCatalogServic.docx

  • 1. Tripsmart project.zip Tripsmart/catalog.htmlHomeCatalogServicesToursSpainChinaN ewsletter Our products are backed by a 100% guarantee Call today! 555-848-0807 TripSmart Copyright 2002 - 2013 Tripsmart/gaudi_draggon.jpg Tripsmart/index.html San Francisco this fall! call today! HomeCatalogServicesToursSpainChinaNewsletter Welcome to TripSmart � the smart choice for the savvy traveler. We're here to help you with all your travel needs. Choose customized trips to any location or one of our Five-Star Tours, recently rated first in customer satisfaction by Traveler magazine. We are happy to arrange travel for small groups, large groups, or individuals. Our specialty is custom itineraries for independent travelers who enjoy travel at their own pace and on their own schedule. With over 30 years of experience, we can provide knowledgeable guides, comfortable and convenient hotels, and dining recommendations for every size budget. Call 555-848-0807 today to speak with one of our friendly staff. TripSmart
  • 2. 1106 Beechwood Fayetteville, AR 72704 555-848-0807 Contact Us TripSmart Copyright 2002 - 2013 Tripsmart/newsletter.htmlHomeCatalogServicesToursSpainChin aNewsletter Our staff recently conducted a contest to determine ten top travel tips for stress-free travel. We compiled over forty great tips, but the following were selected as the winners. We hope you will find them useful for your next trip! Ten Tips for Stress-Free Travel Be organized. Make a list of what you want to pack in each bag and check it as you pack. Take this inventory with you in the event your bags are lost or delayed. Then use the list again when you repack, to make sure you haven’t left anything behind. Carry important information with you. Keep your important travel information in easy reach at all times. Include a list of your flight numbers, confirmation numbers for your travel and hotel reservations, and any car rentals. And don’t forget printouts of your itinerary and electronic tickets. Remember to bring your passport, and keep a photocopy of it in another piece of baggage. Be sure to have copies of prescriptions, emergency phone numbers, telephone numbers and addresses of friends and relatives, complete lists of medications, and credit card information. It’s not a bad idea to email this information to yourself as a backup if you will
  • 3. have email access. Pack smartly. You know the old saying: lay out everything on your bed you plan to take with you, then remove half of it. Pack the remainder and carry your bags around the block once to make sure you can handle them yourself. If in doubt, leave it out! Use packing cubes or zip-top bags to organize your personal items, such as underwear and socks. Make distinctive-looking luggage tags with your name and address for easy identification, and be sure to include the same information inside your luggage. Include basic medical necessities. Besides your prescription drugs, take a basic first aid kit with the basics: bandages, anti-nausea medications, anti- diarrhea medications, aspirin, antibiotics, and prescription drugs. Wear comfortable shoes. Blisters can ruin a wonderful trip. Wear comfortable shoes and socks. Your priority should be comfortable, dry, warm feet — not fashion. Don’t buy new shoes without breaking them in first. Plan for airport security. Slip-on shoes let you slip your shoes off quickly while keeping an eye on your valuables. Having to tie and untie shoes can be distracting and delay your progress through the line. Be sure to pre-package your billfold, cell phone, keys, liquid items, jewelry, and medications in zip-top bags. This will prevent wasted time digging through your carry-on items or, worse yet, being singled out for enhanced security. Keep a book, music, or puzzle handy. When delayed — whether in a car, hotel, or airplane — if you have something to occupy you, you will deal with the delays more easily. Delays are par for the course. Deal with them creatively and your trip will be much less stressful. Pack healthy snacks.
  • 4. Healthy snacks in your carryon will keep you from being tempted to purchase expensive airline or airport food. When traveling in a car, you’ll make fewer unnecessary stops at fast- food windows. Dried fruit, crackers, cheese, and peanut butter can give you a quick energy boost and help keep you on budget. Don’t forget hand sanitizers. The individually wrapped hand sanitizing towelettes are easy to tuck into pockets, purses, and backpacks. Since they are not liquids, there is no limit to the number you can carry on airplanes. Use them in bathrooms and before and after you eat or drink. You can also use them to clean hotel remote controls and doorknobs. Include cameras and accessories. Remember to take extra batteries, memory cards for digital cameras, a small tripod, chargers, and instruction manuals. Learn to use the timer so you can include yourself in your photos. Offer to take photos of others with their camera and they will often return the favor for you with your camera. In humid climates remember to give your camera a chance to acclimate when you go outside to prevent a foggy lens. TripSmart Copyright 2002 - 2013 Tripsmart/panda.jpg Tripsmart/sea_lions.jpg Tripsmart/services.htmlHomeCatalogServicesToursSpainChinaN ewsletter TripSmart has several divisions of customer service to assist you in planning and making reservations for your trip, shopping for your trip wardrobe and providing expert
  • 5. guide services. Give us a call and we will be happy to connect you with one of the following departments: Reservations, Travel Outfitters, or Escorted Tours. If you are not quite ready to talk with one of our departments and would prefer doing some of your own research first, may we suggest beginning with our Helpful Links in Travel Planning. Reservations Our Reservations Department is staffed with five Certified Travel Agents, each of whom is eager to assist you in making your travel plans. They have specialty areas in Africa, the Caribbean, South America, Western Europe, Eastern Europe, Asia, Antarctica, and Hawaii and the South Pacific. They also specialize in Senior Travel, Family Travel, Student Travel, and Special Needs Travel. Call us at (555) 848-0807 extension 75 or e-mail us at Reservations to begin making your travel plans now. We will be happy to send you brochures and listings of Internet addresses to help you get started. We are open from 8:00 a.m. until 6:00 p.m. CST. Travel Outfitters Our travel outfitters are seasoned travelers that have accumulated a vast amount of knowledge in appropriate travel clothing and accessories for specific destinations. Climate and seasons, of course, are important factors in planning your wardrobe
  • 6. for a trip. Area customs should also be taken in consideration so as not to offend the local residents with inappropriate dress. When traveling abroad, we always hope that our customers will represent our country well as good ambassadors. If they can be comfortable and stylish at the same time, we have succeeded! Our clothing is all affordable and packs well on long trips. Most can be washed easily in a hotel sink and hung to drip-dry overnight. Browse through our on-line catalog, then give us a call at (555) 433-7844 extension 85. We will also be happy to mail you a catalog of our extensive collection of travel clothing and accessories. Escorted Tours Our Escorted Tours department is always hard at work planning the next exciting destination to offer our TripSmart customers. We have seven professional tour guides that accompany our guests from the United States point of departure to their point of return. Our current feature package tour is to Spain. Our local escort is Don Eugene. Don has traveled Spain extensively and enjoys sharing his love for this exciting country with others. He will be assisted after arrival in Spain with the services of archeologist JoAnne Rife, anthropologist Christina Elizabeth, and naturalist
  • 7. Iris Albert. Call us at (555) 848-0807 extension 95 for information on the Spain trip or to learn about other destinations being currently scheduled. Helpful Links in Travel Planning The following links may be helpful in your travel research. Happy surfing!CNN Travel Channel - News affecting travel plans to various destinationsUS Department of State - Travel warnings, passport information, and moreYahoo! Currency Converter - Calculate the exchange rate between two currenciesThe Weather Channel - Weather, flight delays, and driving conditions TripSmart Copyright 2002 - 2013 Tripsmart/SpryMenuBar.js // SpryMenuBar.js - version 0.12 - Spry Pre-Release 1.6.1 // // Copyright (c) 2006. Adobe Systems Incorporated. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice,
  • 8. // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of Adobe Systems Incorporated nor the names of its // contributors may be used to endorse or promote products derived from this // software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  • 9. // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. /**************************************************** *************************** SpryMenuBar.js This file handles the JavaScript for Spry Menu Bar. You should have no need to edit this file. Some highlights of the MenuBar object is that timers are used to keep submenus from showing up until the user has hovered over the parent menu item for some time, as well as a timer for when they
  • 10. leave a submenu to keep showing that submenu until the timer fires. ***************************************************** **************************/ var Spry; if (!Spry) Spry = {}; if (!Spry.Widget) Spry.Widget = {}; Spry.BrowserSniff = function() { var b = navigator.appName.toString(); var up = navigator.platform.toString(); var ua = navigator.userAgent.toString(); this.mozilla = this.ie = this.opera = this.safari = false; var re_opera = /Opera.([0-9.]*)/i; var re_msie = /MSIE.([0-9.]*)/i; var re_gecko = /gecko/i;
  • 11. var re_safari = /(applewebkit|safari)/([d.]*)/i; var r = false; if ( (r = ua.match(re_opera))) { this.opera = true; this.version = parseFloat(r[1]); } else if ( (r = ua.match(re_msie))) { this.ie = true; this.version = parseFloat(r[1]); } else if ( (r = ua.match(re_safari))) { this.safari = true; this.version = parseFloat(r[2]); } else if (ua.match(re_gecko)) { var re_gecko_version = /rv:s*([0-9.]+)/i; r = ua.match(re_gecko_version); this.mozilla = true; this.version = parseFloat(r[1]); }
  • 12. this.windows = this.mac = this.linux = false; this.Platform = ua.match(/windows/i) ? "windows" : (ua.match(/linux/i) ? "linux" : (ua.match(/mac/i) ? "mac" : ua.match(/unix/i)? "unix" : "unknown")); this[this.Platform] = true; this.v = this.version; if (this.safari && this.mac && this.mozilla) { this.mozilla = false; } }; Spry.is = new Spry.BrowserSniff(); // Constructor for Menu Bar
  • 13. // element should be an ID of an unordered list (<ul> tag) // preloadImage1 and preloadImage2 are images for the rollover state of a menu Spry.Widget.MenuBar = function(element, opts) { this.init(element, opts); }; Spry.Widget.MenuBar.prototype.init = function(element, opts) { this.element = this.getElement(element); // represents the current (sub)menu we are operating on this.currMenu = null; this.showDelay = 250; this.hideDelay = 600; if(typeof document.getElementById == 'undefined' || (navigator.vendor == 'Apple Computer, Inc.' && typeof window.XMLHttpRequest == 'undefined') || (Spry.is.ie && typeof document.uniqueID == 'undefined'))
  • 14. { // bail on older unsupported browsers return; } // Fix IE6 CSS images flicker if (Spry.is.ie && Spry.is.version < 7){ try { document.execCommand("BackgroundImageCache", false, true); } catch(err) {} } this.upKeyCode = Spry.Widget.MenuBar.KEY_UP; this.downKeyCode = Spry.Widget.MenuBar.KEY_DOWN; this.leftKeyCode = Spry.Widget.MenuBar.KEY_LEFT; this.rightKeyCode = Spry.Widget.MenuBar.KEY_RIGHT; this.escKeyCode = Spry.Widget.MenuBar.KEY_ESC;
  • 15. this.hoverClass = 'MenuBarItemHover'; this.subHoverClass = 'MenuBarItemSubmenuHover'; this.subVisibleClass ='MenuBarSubmenuVisible'; this.hasSubClass = 'MenuBarItemSubmenu'; this.activeClass = 'MenuBarActive'; this.isieClass = 'MenuBarItemIE'; this.verticalClass = 'MenuBarVertical'; this.horizontalClass = 'MenuBarHorizontal'; this.enableKeyboardNavigation = true; this.hasFocus = false; // load hover images now if(opts) { for(var k in opts) { if (typeof this[k] == 'undefined')
  • 16. { var rollover = new Image; rollover.src = opts[k]; } } Spry.Widget.MenuBar.setOptions(this, opts); } // safari doesn't support tabindex if (Spry.is.safari) this.enableKeyboardNavigation = false; if(this.element) { this.currMenu = this.element; var items = this.element.getElementsByTagName('li'); for(var i=0; i<items.length; i++) {
  • 17. if (i > 0 && this.enableKeyboardNavigation) items[i].getElementsByTagName('a')[0].tabIndex='-1'; this.initialize(items[i], element); if(Spry.is.ie) { this.addClassName(items[i], this.isieClass); items[i].style.position = "static"; } } if (this.enableKeyboardNavigation) { var self = this; this.addEventListener(document, 'keydown', function(e){self.keyDown(e); }, false); } if(Spry.is.ie)
  • 18. { if(this.hasClassName(this.element, this.verticalClass)) { this.element.style.position = "relative"; } var linkitems = this.element.getElementsByTagName('a'); for(var i=0; i<linkitems.length; i++) { linkitems[i].style.position = "relative"; } } } }; Spry.Widget.MenuBar.KEY_ESC = 27; Spry.Widget.MenuBar.KEY_UP = 38; Spry.Widget.MenuBar.KEY_DOWN = 40; Spry.Widget.MenuBar.KEY_LEFT = 37;
  • 19. Spry.Widget.MenuBar.KEY_RIGHT = 39; Spry.Widget.MenuBar.prototype.getElement = function(ele) { if (ele && typeof ele == "string") return document.getElementById(ele); return ele; }; Spry.Widget.MenuBar.prototype.hasClassName = function(ele, className) { if (!ele || !className || !ele.className || ele.className.search(new RegExp("b" + className + "b")) == -1) { return false; } return true; };
  • 20. Spry.Widget.MenuBar.prototype.addClassName = function(ele, className) { if (!ele || !className || this.hasClassName(ele, className)) return; ele.className += (ele.className ? " " : "") + className; }; Spry.Widget.MenuBar.prototype.removeClassName = function(ele, className) { if (!ele || !className || !this.hasClassName(ele, className)) return; ele.className = ele.className.replace(new RegExp("s*b" + className + "b", "g"), ""); };
  • 21. // addEventListener for Menu Bar // attach an event to a tag without creating obtrusive HTML code Spry.Widget.MenuBar.prototype.addEventListener = function(element, eventType, handler, capture) { try { if (element.addEventListener) { element.addEventListener(eventType, handler, capture); } else if (element.attachEvent) { element.attachEvent('on' + eventType, handler); } } catch (e) {} };
  • 22. // createIframeLayer for Menu Bar // creates an IFRAME underneath a menu so that it will show above form controls and ActiveX Spry.Widget.MenuBar.prototype.createIframeLayer = function(menu) { var layer = document.createElement('iframe'); layer.tabIndex = '-1'; layer.src = 'javascript:""'; layer.frameBorder = '0'; layer.scrolling = 'no'; menu.parentNode.appendChild(layer); layer.style.left = menu.offsetLeft + 'px'; layer.style.top = menu.offsetTop + 'px'; layer.style.width = menu.offsetWidth + 'px'; layer.style.height = menu.offsetHeight + 'px'; };
  • 23. // removeIframeLayer for Menu Bar // removes an IFRAME underneath a menu to reveal any form controls and ActiveX Spry.Widget.MenuBar.prototype.removeIframeLayer = function(menu) { var layers = ((menu == this.element) ? menu : menu.parentNode).getElementsByTagName('iframe'); while(layers.length > 0) { layers[0].parentNode.removeChild(layers[0]); } }; // clearMenus for Menu Bar // root is the top level unordered list (<ul> tag) Spry.Widget.MenuBar.prototype.clearMenus = function(root) {
  • 24. var menus = root.getElementsByTagName('ul'); for(var i=0; i<menus.length; i++) this.hideSubmenu(menus[i]); this.removeClassName(this.element, this.activeClass); }; // bubbledTextEvent for Menu Bar // identify bubbled up text events in Safari so we can ignore them Spry.Widget.MenuBar.prototype.bubbledTextEvent = function() { return Spry.is.safari && (event.target == event.relatedTarget.parentNode || (event.eventPhase == 3 && event.target.parentNode == event.relatedTarget)); }; // showSubmenu for Menu Bar // set the proper CSS class on this menu to show it Spry.Widget.MenuBar.prototype.showSubmenu =
  • 25. function(menu) { if(this.currMenu) { this.clearMenus(this.currMenu); this.currMenu = null; } if(menu) { this.addClassName(menu, this.subVisibleClass); if(typeof document.all != 'undefined' && !Spry.is.opera && navigator.vendor != 'KDE') { if(!this.hasClassName(this.element, this.horizontalClass) || menu.parentNode.parentNode != this.element) { menu.style.top = menu.parentNode.offsetTop + 'px';
  • 26. } } if(Spry.is.ie && Spry.is.version < 7) { this.createIframeLayer(menu); } } this.addClassName(this.element, this.activeClass); }; // hideSubmenu for Menu Bar // remove the proper CSS class on this menu to hide it Spry.Widget.MenuBar.prototype.hideSubmenu = function(menu) { if(menu) { this.removeClassName(menu, this.subVisibleClass); if(typeof document.all != 'undefined' &&
  • 27. !Spry.is.opera && navigator.vendor != 'KDE') { menu.style.top = ''; menu.style.left = ''; } if(Spry.is.ie && Spry.is.version < 7) this.removeIframeLayer(menu); } }; // initialize for Menu Bar // create event listeners for the Menu Bar widget so we can properly // show and hide submenus Spry.Widget.MenuBar.prototype.initialize = function(listitem, element) { var opentime, closetime; var link = listitem.getElementsByTagName('a')[0];
  • 28. var submenus = listitem.getElementsByTagName('ul'); var menu = (submenus.length > 0 ? submenus[0] : null); if(menu) this.addClassName(link, this.hasSubClass); if(!Spry.is.ie) { // define a simple function that comes standard in IE to determine // if a node is within another node listitem.contains = function(testNode) { // this refers to the list item if(testNode == null) return false; if(testNode == this) return true;
  • 29. else return this.contains(testNode.parentNode); }; } // need to save this for scope further down var self = this; this.addEventListener(listitem, 'mouseover', function(e){self.mouseOver(listitem, e);}, false); this.addEventListener(listitem, 'mouseout', function(e){if (self.enableKeyboardNavigation) self.clearSelection(); self.mouseOut(listitem, e);}, false); if (this.enableKeyboardNavigation) { this.addEventListener(link, 'blur', function(e){self.onBlur(listitem);}, false); this.addEventListener(link, 'focus', function(e){self.keyFocus(listitem, e);}, false); }
  • 30. }; Spry.Widget.MenuBar.prototype.keyFocus = function (listitem, e) { this.lastOpen = listitem.getElementsByTagName('a')[0]; this.addClassName(this.lastOpen, listitem.getElementsByTagName('ul').length > 0 ? this.subHoverClass : this.hoverClass); this.hasFocus = true; }; Spry.Widget.MenuBar.prototype.onBlur = function (listitem) { this.clearSelection(listitem); }; Spry.Widget.MenuBar.prototype.clearSelection = function(el){ //search any intersection with the current open element if (!this.lastOpen) return; if (el)
  • 31. { el = el.getElementsByTagName('a')[0]; // check children var item = this.lastOpen; while (item != this.element) { var tmp = el; while (tmp != this.element) { if (tmp == item) return; try{ tmp = tmp.parentNode; }catch(err){break;} } item = item.parentNode; }
  • 32. } var item = this.lastOpen; while (item != this.element) { this.hideSubmenu(item.parentNode); var link = item.getElementsByTagName('a')[0]; this.removeClassName(link, this.hoverClass); this.removeClassName(link, this.subHoverClass); item = item.parentNode; } this.lastOpen = false; }; Spry.Widget.MenuBar.prototype.keyDown = function (e) { if (!this.hasFocus) return; if (!this.lastOpen)
  • 33. { this.hasFocus = false; return; } var e = e|| event; var listitem = this.lastOpen.parentNode; var link = this.lastOpen; var submenus = listitem.getElementsByTagName('ul'); var menu = (submenus.length > 0 ? submenus[0] : null); var hasSubMenu = (menu) ? true : false; var opts = [listitem, menu, null, this.getSibling(listitem, 'previousSibling'), this.getSibling(listitem, 'nextSibling')]; if (!opts[3]) opts[2] = (listitem.parentNode.parentNode.nodeName.toLowerCase() == 'li')?listitem.parentNode.parentNode:null;
  • 34. var found = 0; switch (e.keyCode){ case this.upKeyCode: found = this.getElementForKey(opts, 'y', 1); break; case this.downKeyCode: found = this.getElementForKey(opts, 'y', -1); break; case this.leftKeyCode: found = this.getElementForKey(opts, 'x', 1); break; case this.rightKeyCode: found = this.getElementForKey(opts, 'x', -1); break; case this.escKeyCode: case 9: this.clearSelection();
  • 35. this.hasFocus = false; default: return; } switch (found) { case 0: return; case 1: //subopts this.mouseOver(listitem, e); break; case 2: //parent this.mouseOut(opts[2], e); break; case 3: case 4: // left - right this.removeClassName(link, hasSubMenu ? this.subHoverClass : this.hoverClass);
  • 36. break; } var link = opts[found].getElementsByTagName('a')[0]; if (opts[found].nodeName.toLowerCase() == 'ul') opts[found] = opts[found].getElementsByTagName('li')[0]; this.addClassName(link, opts[found].getElementsByTagName('ul').length > 0 ? this.subHoverClass : this.hoverClass); this.lastOpen = link; opts[found].getElementsByTagName('a')[0].focus(); //stop further event handling by the browser return Spry.Widget.MenuBar.stopPropagation(e); }; Spry.Widget.MenuBar.prototype.mouseOver = function (listitem, e) { var link = listitem.getElementsByTagName('a')[0];
  • 37. var submenus = listitem.getElementsByTagName('ul'); var menu = (submenus.length > 0 ? submenus[0] : null); var hasSubMenu = (menu) ? true : false; if (this.enableKeyboardNavigation) this.clearSelection(listitem); if(this.bubbledTextEvent()) { // ignore bubbled text events return; } if (listitem.closetime) clearTimeout(listitem.closetime); if(this.currMenu == listitem) { this.currMenu = null;
  • 38. } // move the focus too if (this.hasFocus) link.focus(); // show menu highlighting this.addClassName(link, hasSubMenu ? this.subHoverClass : this.hoverClass); this.lastOpen = link; if(menu && !this.hasClassName(menu, this.subHoverClass)) { var self = this; listitem.opentime = window.setTimeout(function(){self.showSubmenu(menu);}, this.showDelay); } }; Spry.Widget.MenuBar.prototype.mouseOut = function (listitem,
  • 39. e) { var link = listitem.getElementsByTagName('a')[0]; var submenus = listitem.getElementsByTagName('ul'); var menu = (submenus.length > 0 ? submenus[0] : null); var hasSubMenu = (menu) ? true : false; if(this.bubbledTextEvent()) { // ignore bubbled text events return; } var related = (typeof e.relatedTarget != 'undefined' ? e.relatedTarget : e.toElement); if(!listitem.contains(related)) { if (listitem.opentime) clearTimeout(listitem.opentime); this.currMenu = listitem;
  • 40. // remove menu highlighting this.removeClassName(link, hasSubMenu ? this.subHoverClass : this.hoverClass); if(menu) { var self = this; listitem.closetime = window.setTimeout(function(){self.hideSubmenu(menu);}, this.hideDelay); } if (this.hasFocus) link.blur(); } }; Spry.Widget.MenuBar.prototype.getSibling = function(element, sibling) { var child = element[sibling]; while (child && child.nodeName.toLowerCase() !='li')
  • 41. child = child[sibling]; return child; }; Spry.Widget.MenuBar.prototype.getElementForKey = function(els, prop, dir) { var found = 0; var rect = Spry.Widget.MenuBar.getPosition; var ref = rect(els[found]); var hideSubmenu = false; //make the subelement visible to compute the position if (els[1] && !this.hasClassName(els[1], this.MenuBarSubmenuVisible)) { els[1].style.visibility = 'hidden'; this.showSubmenu(els[1]); hideSubmenu = true;
  • 42. } var isVert = this.hasClassName(this.element, this.verticalClass); var hasParent = els[0].parentNode.parentNode.nodeName.toLowerCase() == 'li' ? true : false; for (var i = 1; i < els.length; i++){ //when navigating on the y axis in vertical menus, ignore children and parents if(prop=='y' && isVert && (i==1 || i==2)) { continue; } //when navigationg on the x axis in the FIRST LEVEL of horizontal menus, ignore children and parents if(prop=='x' && !isVert && !hasParent && (i==1 || i==2)) { continue;
  • 43. } if (els[i]) { var tmp = rect(els[i]); if ( (dir * tmp[prop]) < (dir * ref[prop])) { ref = tmp; found = i; } } } // hide back the submenu if (els[1] && hideSubmenu){ this.hideSubmenu(els[1]); els[1].style.visibility = ''; }
  • 44. return found; }; Spry.Widget.MenuBar.camelize = function(str) { if (str.indexOf('-') == -1){ return str; } var oStringList = str.split('-'); var isFirstEntry = true; var camelizedString = ''; for(var i=0; i < oStringList.length; i++) { if(oStringList[i].length>0) { if(isFirstEntry) {
  • 45. camelizedString = oStringList[i]; isFirstEntry = false; } else { var s = oStringList[i]; camelizedString += s.charAt(0).toUpperCase() + s.substring(1); } } } return camelizedString; }; Spry.Widget.MenuBar.getStyleProp = function(element, prop) { var value;
  • 46. try { if (element.style) value = element.style[Spry.Widget.MenuBar.camelize(prop)]; if (!value) if (document.defaultView && document.defaultView.getComputedStyle) { var css = document.defaultView.getComputedStyle(element, null); value = css ? css.getPropertyValue(prop) : null; } else if (element.currentStyle) { value = element.currentStyle[Spry.Widget.MenuBar.camelize(prop)]; } }
  • 47. catch (e) {} return value == 'auto' ? null : value; }; Spry.Widget.MenuBar.getIntProp = function(element, prop) { var a = parseInt(Spry.Widget.MenuBar.getStyleProp(element, prop),10); if (isNaN(a)) return 0; return a; }; Spry.Widget.MenuBar.getPosition = function(el, doc) { doc = doc || document; if (typeof(el) == 'string') { el = doc.getElementById(el);
  • 48. } if (!el) { return false; } if (el.parentNode === null || Spry.Widget.MenuBar.getStyleProp(el, 'display') == 'none') { //element must be visible to have a box return false; } var ret = {x:0, y:0}; var parent = null; var box; if (el.getBoundingClientRect) { // IE box = el.getBoundingClientRect();
  • 49. var scrollTop = doc.documentElement.scrollTop || doc.body.scrollTop; var scrollLeft = doc.documentElement.scrollLeft || doc.body.scrollLeft; ret.x = box.left + scrollLeft; ret.y = box.top + scrollTop; } else if (doc.getBoxObjectFor) { // gecko box = doc.getBoxObjectFor(el); ret.x = box.x; ret.y = box.y; } else { // safari/opera ret.x = el.offsetLeft; ret.y = el.offsetTop; parent = el.offsetParent; if (parent != el) { while (parent) { ret.x += parent.offsetLeft; ret.y += parent.offsetTop; parent = parent.offsetParent;
  • 50. } } // opera & (safari absolute) incorrectly account for body offsetTop if (Spry.is.opera || Spry.is.safari && Spry.Widget.MenuBar.getStyleProp(el, 'position') == 'absolute') ret.y -= doc.body.offsetTop; } if (el.parentNode) parent = el.parentNode; else parent = null; if (parent.nodeName){ var cas = parent.nodeName.toUpperCase(); while (parent && cas != 'BODY' && cas != 'HTML') { cas = parent.nodeName.toUpperCase(); ret.x -= parent.scrollLeft; ret.y -= parent.scrollTop; if (parent.parentNode)
  • 51. parent = parent.parentNode; else parent = null; } } return ret; }; Spry.Widget.MenuBar.stopPropagation = function(ev) { if (ev.stopPropagation) ev.stopPropagation(); else ev.cancelBubble = true; if (ev.preventDefault) ev.preventDefault(); else ev.returnValue = false;
  • 52. }; Spry.Widget.MenuBar.setOptions = function(obj, optionsObj, ignoreUndefinedProps) { if (!optionsObj) return; for (var optionName in optionsObj) { if (ignoreUndefinedProps && optionsObj[optionName] == undefined) continue; obj[optionName] = optionsObj[optionName]; } }; Tripsmart/SpryMenuBarHorizontal.css @charset "UTF-8"; /* SpryMenuBarHorizontal.css - version 0.6 - Spry Pre-Release 1.6.1 */
  • 53. /* Copyright (c) 2006. Adobe Systems Incorporated. All rights reserved. */ /**************************************************** *************************** LAYOUT INFORMATION: describes box model, positioning, z-order ***************************************************** **************************/ /* The outermost container of the Menu Bar, an auto width box with no margin or padding */ ul.MenuBarHorizontal { margin: 0; padding: 0; list-style-type: none;
  • 54. font-size: 14px; cursor: default; width: auto; font-family: Arial, Helvetica, sans-serif; font-weight: bold; } /* Set the active Menu Bar with this class, currently setting z- index to accomodate IE rendering bug: http://therealcrisp.xs4all.nl/meuk/IE-zindexbug.html */ ul.MenuBarActive { z-index: 1000; } /* Menu item containers, position children relative to this container and are a fixed width */ ul.MenuBarHorizontal li { margin: 0; padding: 0;
  • 55. list-style-type: none; font-size: 100%; position: relative; text-align: center; cursor: pointer; width: 190px; float: left; height: 25px; } /* Submenus should appear below their parent (top: 0) with a higher z-index, but they are initially off the left side of the screen (-1000em) */ ul.MenuBarHorizontal ul { margin: 0; padding: 0; list-style-type: none; font-size: 100%; z-index: 1020;
  • 56. cursor: default; width: 8.2em; position: absolute; left: -1000em; } /* Submenu that is showing with class designation MenuBarSubmenuVisible, we set left to auto so it comes onto the screen below its parent menu item */ ul.MenuBarHorizontal ul.MenuBarSubmenuVisible { left: auto; } /* Menu item containers are same fixed width as parent */ ul.MenuBarHorizontal ul li { width: 8.2em; } /* Submenus should appear slightly overlapping to the right (95%) and up (-5%) */ ul.MenuBarHorizontal ul ul
  • 57. { position: absolute; margin: -5% 0 0 95%; } /* Submenu that is showing with class designation MenuBarSubmenuVisible, we set left to 0 so it comes onto the screen */ ul.MenuBarHorizontal ul.MenuBarSubmenuVisible ul.MenuBarSubmenuVisible { left: auto; top: 0; } /**************************************************** *************************** DESIGN INFORMATION: describes color scheme, borders, fonts
  • 58. ***************************************************** **************************/ /* Submenu containers have borders on all sides */ ul.MenuBarHorizontal ul { border: 1px solid #CCC; } /* Menu items are a light gray block with padding and no text decoration */ ul.MenuBarHorizontal a { display: block; cursor: pointer; background-color: #663; padding: 0.5em 0.75em; color: #FFF; text-decoration: none; }
  • 59. /* Menu items that have mouse over or focus have a blue background and white text */ ul.MenuBarHorizontal a:hover, ul.MenuBarHorizontal a:focus { background-color: #C90; color: #663; } /* Menu items that are open with submenus are set to MenuBarItemHover with a blue background and white text */ ul.MenuBarHorizontal a.MenuBarItemHover, ul.MenuBarHorizontal a.MenuBarItemSubmenuHover, ul.MenuBarHorizontal a.MenuBarSubmenuVisible { background-color: #CC6; color: #663; } /**************************************************** ***************************
  • 60. SUBMENU INDICATION: styles if there is a submenu under a given menu item ***************************************************** **************************/ /* Menu items that have a submenu have the class designation MenuBarItemSubmenu and are set to use a background image positioned on the far left (95%) and centered vertically (50%) */ ul.MenuBarHorizontal a.MenuBarItemSubmenu { background-image: url(SpryMenuBarDown.gif); background-repeat: no-repeat; background-position: 95% 50%; } /* Menu items that have a submenu have the class designation MenuBarItemSubmenu and are set to use a background image positioned on the far left (95%) and centered vertically (50%) */ ul.MenuBarHorizontal ul a.MenuBarItemSubmenu { background-image: url(SpryMenuBarRight.gif);
  • 61. background-repeat: no-repeat; background-position: 95% 50%; } /* Menu items that are open with submenus have the class designation MenuBarItemSubmenuHover and are set to use a "hover" background image positioned on the far left (95%) and centered vertically (50%) */ ul.MenuBarHorizontal a.MenuBarItemSubmenuHover { background-image: url(SpryMenuBarDownHover.gif); background-repeat: no-repeat; background-position: 95% 50%; } /* Menu items that are open with submenus have the class designation MenuBarItemSubmenuHover and are set to use a "hover" background image positioned on the far left (95%) and centered vertically (50%) */ ul.MenuBarHorizontal ul a.MenuBarItemSubmenuHover { background-image: url(SpryMenuBarRightHover.gif); background-repeat: no-repeat;
  • 62. background-position: 95% 50%; } /**************************************************** *************************** BROWSER HACKS: the hacks below should not be changed unless you are an expert ***************************************************** **************************/ /* HACK FOR IE: to make sure the sub menus show above form controls, we underlay each submenu with an iframe */ ul.MenuBarHorizontal iframe { position: absolute; z-index: 1010; filter:alpha(opacity:0.1);
  • 63. } /* HACK FOR IE: to stabilize appearance of menu items; the slash in float is to keep IE 5.0 from parsing */ @media screen, projection { ul.MenuBarHorizontal li.MenuBarItemIE { display: inline; float: left; background: #FFF; } } Tripsmart/swfobject_modified.js /*! SWFObject v2.0 <http://code.google.com/p/swfobject/> Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> */
  • 64. var swfobject = function() { var UNDEF = "undefined", OBJECT = "object", SHOCKWAVE_FLASH = "Shockwave Flash", SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", FLASH_MIME_TYPE = "application/x-shockwave- flash", EXPRESS_INSTALL_ID = "SWFObjectExprInst", win = window, doc = document, nav = navigator, domLoadFnArr = [], regObjArr = [], timer = null, storedAltContent = null,
  • 65. storedAltContentId = null, isDomLoaded = false, isExpressInstallActive = false; /* Centralized function for browser feature detection - Proprietary feature detection (conditional compiling) is used to detect Internet Explorer's features - User agent string detection is only used when no alternative is possible - Is executed directly for optimal performance */ var ua = function() { var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF && typeof doc.appendChild != UNDEF && typeof doc.replaceChild != UNDEF && typeof doc.removeChild != UNDEF && typeof doc.cloneNode != UNDEF, playerVersion = [0,0,0], d = null; if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
  • 66. d = nav.plugins[SHOCKWAVE_FLASH].description; if (d) { d = d.replace(/^.*s+(S+s+S+$)/, "$1"); playerVersion[0] = parseInt(d.replace(/^(.*)..*$/, "$1"), 10); playerVersion[1] = parseInt(d.replace(/^.*.(.*)s.*$/, "$1"), 10); playerVersion[2] = /r/.test(d) ? parseInt(d.replace(/^.*r(.*)$/, "$1"), 10) : 0; } } else if (typeof win.ActiveXObject != UNDEF) { var a = null, fp6Crash = false; try { a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".7"); } catch(e) { try { a = new
  • 67. ActiveXObject(SHOCKWAVE_FLASH_AX + ".6"); playerVersion = [6,0,21]; a.AllowScriptAccess = "always"; // Introduced in fp6.0.47 } catch(e) { if (playerVersion[0] == 6) { fp6Crash = true; } } if (!fp6Crash) { try { a = new ActiveXObject(SHOCKWAVE_FLASH_AX); } catch(e) {} } } if (!fp6Crash && a) { // a will return null when ActiveX is disabled
  • 68. try { d = a.GetVariable("$version"); // Will crash fp6.0.21/23/29 if (d) { d = d.split(" ")[1].split(","); playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; } } catch(e) {} } } var u = nav.userAgent.toLowerCase(), p = nav.platform.toLowerCase(), webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit/(d+(.d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit ie = false, windows = p ? /win/.test(p) : /win/.test(u), mac = p ? /mac/.test(p) : /mac/.test(u);
  • 69. /*@cc_on ie = true; @if (@_win32) windows = true; @elif (@_mac) mac = true; @end @*/ return { w3cdom:w3cdom, pv:playerVersion, webkit:webkit, ie:ie, win:windows, mac:mac }; }(); /* Cross-browser onDomLoad - Based on Dean Edwards' solution: http://dean.edwards.name/weblog/2006/06/again/ - Will fire an event as soon as the DOM of a page is loaded (supported by Gecko based browsers - like Firefox -, IE, Opera9+, Safari) */ var onDomLoad = function() {
  • 70. if (!ua.w3cdom) { return; } addDomLoadEvent(main); if (ua.ie && ua.win) { try { // Avoid a possible Operation Aborted error doc.write("<scr" + "ipt id=__ie_ondomload defer=true src=//:></scr" + "ipt>"); // String is split into pieces to avoid Norton AV to add code that can cause errors var s = getElementById("__ie_ondomload"); if (s) { s.onreadystatechange = function() { if (this.readyState == "complete") { this.parentNode.removeChild(this); callDomLoadFunctions(); } };
  • 71. } } catch(e) {} } if (ua.webkit && typeof doc.readyState != UNDEF) { timer = setInterval(function() { if (/loaded|complete/.test(doc.readyState)) { callDomLoadFunctions(); }}, 10); } if (typeof doc.addEventListener != UNDEF) { doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, null); } addLoadEvent(callDomLoadFunctions); }(); function callDomLoadFunctions() { if (isDomLoaded) { return;
  • 72. } if (ua.ie && ua.win) { // Test if we can really add elements to the DOM; we don't want to fire it too early var s = createElement("span"); try { // Avoid a possible Operation Aborted error var t = doc.getElementsByTagName("body")[0].appendChild(s); t.parentNode.removeChild(t); } catch (e) { return; } } isDomLoaded = true; if (timer) { clearInterval(timer); timer = null; } var dl = domLoadFnArr.length;
  • 73. for (var i = 0; i < dl; i++) { domLoadFnArr[i](); } } function addDomLoadEvent(fn) { if (isDomLoaded) { fn(); } else { domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+ } } /* Cross-browser onload - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/ - Will fire an event as soon as a web page including all of its assets are loaded
  • 74. */ function addLoadEvent(fn) { if (typeof win.addEventListener != UNDEF) { win.addEventListener("load", fn, false); } else if (typeof doc.addEventListener != UNDEF) { doc.addEventListener("load", fn, false); } else if (typeof win.attachEvent != UNDEF) { win.attachEvent("onload", fn); } else if (typeof win.onload == "function") { var fnOld = win.onload; win.onload = function() { fnOld(); fn(); }; }
  • 75. else { win.onload = fn; } } /* Main function - Will preferably execute onDomLoad, otherwise onload (as a fallback) */ function main() { // Static publishing only var rl = regObjArr.length; for (var i = 0; i < rl; i++) { // For each registered object element var id = regObjArr[i].id; if (ua.pv[0] > 0) { var obj = getElementById(id); if (obj) { regObjArr[i].width = obj.getAttribute("width") ? obj.getAttribute("width") : "0";
  • 76. regObjArr[i].height = obj.getAttribute("height") ? obj.getAttribute("height") : "0"; if (hasPlayerVersion(regObjArr[i].swfVersion)) { // Flash plug-in version >= Flash content version: Houston, we have a match! if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements fixParams(obj); } setVisibility(id, true); } else if (regObjArr[i].expressInstall && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) { // Show the Adobe Express Install dialog if set by the web page author and if supported (fp6.0.65+ on Win/Mac OS only) showExpressInstall(regObjArr[i]); } else { // Flash plug-in and Flash content version mismatch: display alternative content instead of Flash content displayAltContent(obj);
  • 77. } } } else { // If no fp is installed, we let the object element do its job (show alternative content) setVisibility(id, true); } } } /* Fix nested param elements, which are ignored by older webkit engines - This includes Safari up to and including version 1.2.2 on Mac OS 10.3 - Fall back to the proprietary embed element */ function fixParams(obj) { var nestedObj = obj.getElementsByTagName(OBJECT)[0]; if (nestedObj) {
  • 78. var e = createElement("embed"), a = nestedObj.attributes; if (a) { var al = a.length; for (var i = 0; i < al; i++) { if (a[i].nodeName.toLowerCase() == "data") { e.setAttribute("src", a[i].nodeValue); } else { e.setAttribute(a[i].nodeName, a[i].nodeValue); } } } var c = nestedObj.childNodes; if (c) { var cl = c.length; for (var j = 0; j < cl; j++) {
  • 79. if (c[j].nodeType == 1 && c[j].nodeName.toLowerCase() == "param") { e.setAttribute(c[j].getAttribute("name"), c[j].getAttribute("value")); } } } obj.parentNode.replaceChild(e, obj); } } /* Fix hanging audio/video threads and force open sockets and NetConnections to disconnect - Occurs when unloading a web page in IE using fp8+ and innerHTML/outerHTML - Dynamic publishing only */ function fixObjectLeaks(id) { if (ua.ie && ua.win && hasPlayerVersion("8.0.0")) { win.attachEvent("onunload", function () {
  • 80. var obj = getElementById(id); if (obj) { for (var i in obj) { if (typeof obj[i] == "function") { obj[i] = function() {}; } } obj.parentNode.removeChild(obj); } }); } } /* Show the Adobe Express Install dialog - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a 253b75 */ function showExpressInstall(regObj) {
  • 81. isExpressInstallActive = true; var obj = getElementById(regObj.id); if (obj) { if (regObj.altContentId) { var ac = getElementById(regObj.altContentId); if (ac) { storedAltContent = ac; storedAltContentId = regObj.altContentId; } } else { storedAltContent = abstractAltContent(obj); } if (!(/%$/.test(regObj.width)) && parseInt(regObj.width, 10) < 310) { regObj.width = "310"; }
  • 82. if (!(/%$/.test(regObj.height)) && parseInt(regObj.height, 10) < 137) { regObj.height = "137"; } doc.title = doc.title.slice(0, 47) + " - Flash Player Installation"; var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn", dt = doc.title, fv = "MMredirectURL=" + win.location + "&MMplayerType=" + pt + "&MMdoctitle=" + dt, replaceId = regObj.id; // For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element // In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work if (ua.ie && ua.win && obj.readyState != 4) { var newObj = createElement("div"); replaceId += "SWFObjectNew"; newObj.setAttribute("id", replaceId);
  • 83. obj.parentNode.insertBefore(newObj, obj); // Insert placeholder div that will be replaced by the object element that loads expressinstall.swf obj.style.display = "none"; win.attachEvent("onload", function() { obj.parentNode.removeChild(obj); }); } createSWF({ data:regObj.expressInstall, id:EXPRESS_INSTALL_ID, width:regObj.width, height:regObj.height }, { flashvars:fv }, replaceId); } } /* Functions to abstract and display alternative content */ function displayAltContent(obj) { if (ua.ie && ua.win && obj.readyState != 4) { // For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element // In IE you cannot properly cancel a loading SWF file without breaking browser load references, also
  • 84. obj.onreadystatechange doesn't work var el = createElement("div"); obj.parentNode.insertBefore(el, obj); // Insert placeholder div that will be replaced by the alternative content el.parentNode.replaceChild(abstractAltContent(obj), el); obj.style.display = "none"; win.attachEvent("onload", function() { obj.parentNode.removeChild(obj); }); } else { obj.parentNode.replaceChild(abstractAltContent(obj), obj); } } function abstractAltContent(obj) { var ac = createElement("div"); if (ua.win && ua.ie) { ac.innerHTML = obj.innerHTML;
  • 85. } else { var nestedObj = obj.getElementsByTagName(OBJECT)[0]; if (nestedObj) { var c = nestedObj.childNodes; if (c) { var cl = c.length; for (var i = 0; i < cl; i++) { if (!(c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param") && !(c[i].nodeType == 8)) { ac.appendChild(c[i].cloneNode(true)); } } } } } return ac;
  • 86. } /* Cross-browser dynamic SWF creation */ function createSWF(attObj, parObj, id) { var r, el = getElementById(id); if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content attObj.id = id; } if (ua.ie && ua.win) { // IE, the object element and W3C DOM methods do not combine: fall back to outerHTML var att = ""; for (var i in attObj) { if (attObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries, like Object.prototype.toJSONString = function() {} if (i == "data") { parObj.movie = attObj[i]; }
  • 87. else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword att += ' class="' + attObj[i] + '"'; } else if (i != "classid") { att += ' ' + i + '="' + attObj[i] + '"'; } } } var par = ""; for (var j in parObj) { if (parObj[j] != Object.prototype[j]) { // Filter out prototype additions from other potential libraries par += '<param name="' + j + '" value="' + parObj[j] + '" />'; } } el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
  • 88. fixObjectLeaks(attObj.id); // This bug affects dynamic publishing only r = getElementById(attObj.id); } else if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements: fall back to the proprietary embed element var e = createElement("embed"); e.setAttribute("type", FLASH_MIME_TYPE); for (var k in attObj) { if (attObj[k] != Object.prototype[k]) { // Filter out prototype additions from other potential libraries if (k == "data") { e.setAttribute("src", attObj[k]); } else if (k.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword e.setAttribute("class", attObj[k]); } else if (k != "classid") { // Filter out IE specific attribute
  • 89. e.setAttribute(k, attObj[k]); } } } for (var l in parObj) { if (parObj[l] != Object.prototype[l]) { // Filter out prototype additions from other potential libraries if (l != "movie") { // Filter out IE specific param element e.setAttribute(l, parObj[l]); } } } el.parentNode.replaceChild(e, el); r = e; } else { // Well-behaving browsers var o = createElement(OBJECT); o.setAttribute("type", FLASH_MIME_TYPE);
  • 90. for (var m in attObj) { if (attObj[m] != Object.prototype[m]) { // Filter out prototype additions from other potential libraries if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword o.setAttribute("class", attObj[m]); } else if (m != "classid") { // Filter out IE specific attribute o.setAttribute(m, attObj[m]); } } } for (var n in parObj) { if (parObj[n] != Object.prototype[n] && n != "movie") { // Filter out prototype additions from other potential libraries and IE specific param element createObjParam(o, n, parObj[n]); } }
  • 91. el.parentNode.replaceChild(o, el); r = o; } return r; } function createObjParam(el, pName, pValue) { var p = createElement("param"); p.setAttribute("name", pName); p.setAttribute("value", pValue); el.appendChild(p); } function getElementById(id) { return doc.getElementById(id); } function createElement(el) {
  • 92. return doc.createElement(el); } function hasPlayerVersion(rv) { var pv = ua.pv, v = rv.split("."); v[0] = parseInt(v[0], 10); v[1] = parseInt(v[1], 10); v[2] = parseInt(v[2], 10); return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; } /* Cross-browser dynamic CSS creation - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php */ function createCSS(sel, decl) { if (ua.ie && ua.mac) {
  • 93. return; } var h = doc.getElementsByTagName("head")[0], s = createElement("style"); s.setAttribute("type", "text/css"); s.setAttribute("media", "screen"); if (!(ua.ie && ua.win) && typeof doc.createTextNode != UNDEF) { s.appendChild(doc.createTextNode(sel + " {" + decl + "}")); } h.appendChild(s); if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) { var ls = doc.styleSheets[doc.styleSheets.length - 1]; if (typeof ls.addRule == OBJECT) { ls.addRule(sel, decl); } } }
  • 94. function setVisibility(id, isVisible) { var v = isVisible ? "inherit" : "hidden"; if (isDomLoaded) { getElementById(id).style.visibility = v; } else { createCSS("#" + id, "visibility:" + v); } } function getTargetVersion(obj) { if (!obj) return 0; var c = obj.childNodes; var cl = c.length; for (var i = 0; i < cl; i++) { if (c[i].nodeType == 1 &&
  • 95. c[i].nodeName.toLowerCase() == "object") { c = c[i].childNodes; cl = c.length; i = 0; } if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param" && c[i].getAttribute("name") == "swfversion") { return c[i].getAttribute("value"); } } return 0; } function getExpressInstall(obj) { if (!obj) return ""; var c = obj.childNodes; var cl = c.length;
  • 96. for (var i = 0; i < cl; i++) { if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "object") { c = c[i].childNodes; cl = c.length; i = 0; } if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param" && c[i].getAttribute("name") == "expressinstall") { return c[i].getAttribute("value"); } } return ""; } return { /* Public API - Reference: http://code.google.com/p/swfobject/wiki/SWFObject_2_0_docu mentation
  • 97. */ registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr) { if (!ua.w3cdom || !objectIdStr) { return; } var obj = document.getElementById(objectIdStr); var xi = getExpressInstall(obj); var regObj = {}; regObj.id = objectIdStr; regObj.swfVersion = swfVersionStr ? swfVersionStr : getTargetVersion(obj); regObj.expressInstall = xiSwfUrlStr ? xiSwfUrlStr : ((xi != "") ? xi : false); regObjArr[regObjArr.length] = regObj; setVisibility(objectIdStr, false); }, getObjectById: function(objectIdStr) {
  • 98. var r = null; if (ua.w3cdom && isDomLoaded) { var o = getElementById(objectIdStr); if (o) { var n = o.getElementsByTagName(OBJECT)[0]; if (!n || (n && typeof o.SetVariable != UNDEF)) { r = o; } else if (typeof n.SetVariable != UNDEF) { r = n; } } } return r; },
  • 99. embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj) { if (!ua.w3cdom || !swfUrlStr || !replaceElemIdStr || !widthStr || !heightStr || !swfVersionStr) { return; } widthStr += ""; // Auto-convert to string to make it idiot proof heightStr += ""; if (hasPlayerVersion(swfVersionStr)) { setVisibility(replaceElemIdStr, false); var att = (typeof attObj == OBJECT) ? attObj : {}; att.data = swfUrlStr; att.width = widthStr; att.height = heightStr; var par = (typeof parObj == OBJECT) ? parObj : {}; if (typeof flashvarsObj == OBJECT) { for (var i in flashvarsObj) {
  • 100. if (flashvarsObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries if (typeof par.flashvars != UNDEF) { par.flashvars += "&" + i + "=" + flashvarsObj[i]; } else { par.flashvars = i + "=" + flashvarsObj[i]; } } } } addDomLoadEvent(function() { createSWF(att, par, replaceElemIdStr); if (att.id == replaceElemIdStr) { setVisibility(replaceElemIdStr, true); }
  • 101. }); } else if (xiSwfUrlStr && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) { setVisibility(replaceElemIdStr, false); addDomLoadEvent(function() { var regObj = {}; regObj.id = regObj.altContentId = replaceElemIdStr; regObj.width = widthStr; regObj.height = heightStr; regObj.expressInstall = xiSwfUrlStr; showExpressInstall(regObj); }); } }, getFlashPlayerVersion: function() { return { major:ua.pv[0], minor:ua.pv[1],
  • 102. release:ua.pv[2] }; }, hasFlashPlayerVersion:hasPlayerVersion, createSWF: function(attObj, parObj, replaceElemIdStr) { if (ua.w3cdom && isDomLoaded) { return createSWF(attObj, parObj, replaceElemIdStr); } else { return undefined; } }, createCSS: function(sel, decl) { if (ua.w3cdom) { createCSS(sel, decl);
  • 103. } }, addDomLoadEvent:addDomLoadEvent, addLoadEvent:addLoadEvent, getQueryParamValue: function(param) { var q = doc.location.search || doc.location.hash; if (param == null) { return q; } if(q) { var pairs = q.substring(1).split("&"); for (var i = 0; i < pairs.length; i++) { if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { return pairs[i].substring((pairs[i].indexOf("=") + 1));
  • 104. } } } return ""; }, // For internal usage only expressInstallCallback: function() { if (isExpressInstallActive && storedAltContent) { var obj = getElementById(EXPRESS_INSTALL_ID); if (obj) { obj.parentNode.replaceChild(storedAltContent, obj); if (storedAltContentId) { setVisibility(storedAltContentId, true); if (ua.ie && ua.win) { storedAltContent.style.display = "block";
  • 105. } } storedAltContent = null; storedAltContentId = null; isExpressInstallActive = false; } } } }; }(); Tripsmart/Tour.css #tour { position:absolute; left:621px; top:308px; width:300px;
  • 106. height:162px; z-index:1; border: thin solid #000; } #san_francisco { position:absolute; left:438px; top:394px; width:214px; height:58px; z-index:2; background-color: #FFFF99; text-align: center; font-size: medium; border: thin solid #000; } Tripsmart/tours.htmlHomeCatalogServicesToursSpainChinaNew sletter Destinations: Spain and China We are featuring two trips this month. Our Spain trip will
  • 107. depart on May 5 for 16 days. We will arrive in Madrid, where you will check in at the Intercontinental Hotel. The next morning, we will begin your tour with the Royal Palace and end the day at the Prado Museum, housing works by Spain's great masters: Goya, Velazquez, and El Greco. We will depart from Madrid and visit Toledo, Granada, and Cordoba, some of Spain's most picqueresque cities. Granada features the 13- century palace Alhambra with its beautiful gardens. Jerez, the home of the Andalusioan School of Equestrian Art, is our next stop. You will view a performance of the "dancing stallions" and visit a bodega. Next is Seville, where you will have a change to attend a traditional flamenco show. You may decide to splurge on an authentic flamenco dress! We end the visit with Barcelona where you will stay near the Barcelona Olympic Port. You will view the work of Spain's most famous architect: Gaudi, as you visit the unfinished Sagrada Familia Basilica along with the Parc Guell, a UNESCO World Heritage Site. The second trip we are featuring is to China. We will depart on June 20 and arrive in Shanghai to stay three nights at the Shanghai Four Seasons Hotel.Shanghai sights will include a visit to the Bund, the Shanghai Museum, and a performace of the Shanghai Acrobats. From Shanghai we will depart for our three-day voyage down the Yangtze River on the River Dancer, where we will visit The Three Gorges. Upon disembarking, we will travel to Xian to view the Terra Cotta Warriors and explore the Shaanxi Museum. Our tour ends in Bejjing with the Forbidden City, Tiananmen Square, and a day trip to the Great Wall of China.Our experienced guides all speak fluent English. Our team includes ornithologist JoAnne Rife, zoologist Jenny Williams, anthropologist Christina Elizabeth, and naturalist Richard Newland. Private air transport will whisk us to more distant game reserves with an opportunity to see the native Pandas. This is truly a trip of a lifetime. Make your reservations now! Please complete this form for additional information on these tours.First NameLast NameStreetCityStateZip CodePhoneE-mailI am Interested in:
  • 108. Spain China TripSmart Copyright 2002 - 2013 Tripsmart/trip.css body { margin: 0; padding: 0; color: #000; background-color: #FFF; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.4; } ul, ol, dl { padding: 0; margin: 0; } h1, h2, h3, h4, h5, h6, p {
  • 109. margin-top: 0; padding-right: 15px; padding-left: 15px; } a img { border: none; } a:link { color: #42413C; text-decoration: underline; } a:visited { color: #6E6C64; text-decoration: underline; } a:hover, a:active, a:focus { text-decoration: none; }
  • 110. .container { width: 960px; background: #FFF; margin: 0 auto; border: thin solid #030; position: relative; } .header { background-color: #FFF; margin: 5px; }
  • 111. .content { padding: 10px 0; } .footer { text-align: center; background-color: #FFF; font-size: 12px; font-weight: normal; } .fltrt { float: right; margin-left: 8px; }
  • 112. .fltlft { float: left; margin-right: 8px; } .clearfloat { clear:both; height:0; font-size: 1px; line-height: 0px; } Tripsmart/tripsmart.jpg Tripsmart/tripsmart_styles.css .paragraph_text { font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000; } .list_heading {
  • 113. font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight: bold; color: #030; } .list_term { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; color: #000; } .reverse_text { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-style: normal; font-weight: bold; color: #666633; }
  • 114. .item_numbers { font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-weight: bold; } hr { border: thin solid #663; margin: 9px; width: 930px; }