/*==================================================* $Id: slideshow.js,v 1.16 2003/10/14 12:39:00 pat Exp $ Copyright 2000-2003 Patrick Fitzgerald http://slideshow.barelyfitz.com/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *==================================================*/ // There are two objects defined in this file: // "slide" - contains all the information for a single slide // "slideshow" - consists of multiple slide objects and runs the slideshow //================================================== // slide object //================================================== function slide(src,link,text,target,attr) { // This is the constructor function for the slide object. // It is called automatically when you create a new slide object. // For example: // s = new slide(); // Image URL this.src = src; // Link URL this.link = link; // Text to display this.text = text; // Name of the target window ("_blank") this.target = target; // Custom duration for the slide, in milliseconds. // This is an optional parameter. // this.timeout = 3000 // Attributes for the target window: // width=n,height=n,resizable=yes or no,scrollbars=yes or no, // toolbar=yes or no,location=yes or no,directories=yes or no, // status=yes or no,menubar=yes or no,copyhistory=yes or no // Example: "width=200,height=300" this.attr = attr; // Create an image object for the slide if (document.images) { this.image = new Image(); } // Flag to tell when load() has already been called this.loaded = false; //-------------------------------------------------- this.load = function() { // This method loads the image for the slide if (!document.images) { return; } if (!this.loaded) { this.image.src = this.src; this.loaded = true; } } //-------------------------------------------------- this.hotlink = function() { // This method jumps to the slide's link. // If a window was specified for the slide, then it opens a new window. var mywindow; // If this slide does not have a link, do nothing if (!this.link) return; // Open the link in a separate window? if (this.target) { // If window attributes are specified, // use them to open the new window if (this.attr) { mywindow = window.open(this.link, this.target, this.attr); } else { // If window attributes are not specified, do not use them // (this will copy the attributes from the originating window) mywindow = window.open(this.link, this.target); } // Pop the window to the front if (mywindow && mywindow.focus) mywindow.focus(); } else { // Open the link in the current window location.href = this.link; } } } //================================================== // slideshow object //================================================== function slideshow( slideshowname ) { // This is the constructor function for the slideshow object. // It is called automatically when you create a new object. // For example: // ss = new slideshow("ss"); // Name of this object // (required if you want your slideshow to auto-play) // For example, "SLIDES1" this.name = slideshowname; // When we reach the last slide, should we loop around to start the // slideshow again? this.repeat = true; // Number of images to pre-fetch. // -1 = preload all images. // 0 = load each image is it is used. // n = pre-fetch n images ahead of the current image. // I recommend preloading all images unless you have large // images, or a large amount of images. this.prefetch = -1; // IMAGE element on your HTML page. // For example, document.images.SLIDES1IMG this.image; // ID of a DIV element on your HTML page that will contain the text. // For example, "slides2text" // Note: after you set this variable, you should call // the update() method to update the slideshow display. this.textid; // TEXTAREA element on your HTML page. // For example, document.SLIDES1FORM.SLIDES1TEXT // This is a depracated method for displaying the text, // but you might want to supply it for older browsers. this.textarea; // Milliseconds to pause between slides. // Individual slides can override this. this.timeout = 3000; // Hook functions to be called before and after updating the slide // this.pre_update_hook = function() { } // this.post_update_hook = function() { } // These are private variables this.slides = new Array(); this.current = 0; this.timeoutid = 0; //-------------------------------------------------- // Public methods //-------------------------------------------------- this.add_slide = function(slide) { // Add a slide to the slideshow. // For example: // SLIDES1.add_slide(new slide("s1.jpg", "link.html")) var i = this.slides.length; // Prefetch the slide image if necessary if (this.prefetch == -1) { slide.load(); } this.slides[i] = slide; } //-------------------------------------------------- this.play = function(timeout) { // This method implements the automatically running slideshow. // If you specify the "timeout" argument, then a new default // timeout will be set for the slideshow. // Make sure we're not already playing this.pause(); // If the timeout argument was specified (optional) // then make it the new default if (timeout) { this.timeout = timeout; } // If the current slide has a custom timeout, use it; // otherwise use the default timeout if (typeof this.slides[ this.current ].timeout != 'undefined') { timeout = this.slides[ this.current ].timeout; } else { timeout = this.timeout; } // After the timeout, call this.loop() this.timeoutid = setTimeout( this.name + ".loop()", timeout); } //-------------------------------------------------- this.pause = function() { // This method stops the slideshow if it is automatically running. if (this.timeoutid != 0) { clearTimeout(this.timeoutid); this.timeoutid = 0; } } //-------------------------------------------------- this.update = function() { // This method updates the slideshow image on the page // Make sure the slideshow has been initialized correctly if (! this.valid_image()) { return; } // Call the pre-update hook function if one was specified if (typeof this.pre_update_hook == 'function') { this.pre_update_hook(); } // Convenience variable for the current slide var slide = this.slides[ this.current ]; // Determine if the browser supports filters var dofilter = false; if (this.image && typeof this.image.filters != 'undefined' && typeof this.image.filters[0] != 'undefined') { dofilter = true; } // Load the slide image if necessary slide.load(); // Apply the filters for the image transition if (dofilter) { // If the user has specified a custom filter for this slide, // then set it now if (slide.filter && this.image.style && this.image.style.filter) { this.image.style.filter = slide.filter; } this.image.filters[0].Apply(); } // Update the image. this.image.src = slide.image.src; // Play the image transition filters if (dofilter) { this.image.filters[0].Play(); } // Update the text this.display_text(); // Call the post-update hook function if one was specified if (typeof this.post_update_hook == 'function') { this.post_update_hook(); } // Do we need to pre-fetch images? if (this.prefetch > 0) { var next, prev, count; // Pre-fetch the next slide image(s) next = this.current; prev = this.current; count = 0; do { // Get the next and previous slide number // Loop past the ends of the slideshow if necessary if (++next >= this.slides.length) next = 0; if (--prev < 0) prev = this.slides.length - 1; // Preload the slide image this.slides[next].load(); this.slides[prev].load(); // Keep going until we have fetched // the designated number of slides } while (++count < this.prefetch); } } //-------------------------------------------------- this.goto_slide = function(n) { // This method jumpts to the slide number you specify. // If you use slide number -1, then it jumps to the last slide. // You can use this to make links that go to a specific slide, // or to go to the beginning or end of the slideshow. // Examples: // onClick="myslides.goto_slide(0)" // onClick="myslides.goto_slide(-1)" // onClick="myslides.goto_slide(5)" if (n == -1) { n = this.slides.length - 1; } if (n < this.slides.length && n >= 0) { this.current = n; } this.update(); } //-------------------------------------------------- this.goto_random_slide = function(include_current) { // Picks a random slide (other than the current slide) and // displays it. // If the include_current parameter is true, // then // See also: shuffle() var i; // Make sure there is more than one slide if (this.slides.length > 1) { // Generate a random slide number, // but make sure it is not the current slide do { i = Math.floor(Math.random()*this.slides.length); } while (i == this.current); // Display the slide this.goto_slide(i); } } //-------------------------------------------------- this.next = function() { // This method advances to the next slide. // Increment the image number if (this.current < this.slides.length - 1) { this.current++; } else if (this.repeat) { this.current = 0; } this.update(); } //-------------------------------------------------- this.previous = function() { // This method goes to the previous slide. // Decrement the image number if (this.current > 0) { this.current--; } else if (this.repeat) { this.current = this.slides.length - 1; } this.update(); } //-------------------------------------------------- this.shuffle = function() { // This method randomly shuffles the order of the slides. var i, i2, slides_copy, slides_randomized; // Create a copy of the array containing the slides // in sequential order slides_copy = new Array(); for (i = 0; i < this.slides.length; i++) { slides_copy[i] = this.slides[i]; } // Create a new array to contain the slides in random order slides_randomized = new Array(); // To populate the new array of slides in random order, // loop through the existing slides, picking a random // slide, removing it from the ordered list and adding it to // the random list. do { // Pick a random slide from those that remain i = Math.floor(Math.random()*slides_copy.length); // Add the slide to the end of the randomized array slides_randomized[ slides_randomized.length ] = slides_copy[i]; // Remove the slide from the sequential array, // so it cannot be chosen again for (i2 = i + 1; i2 < slides_copy.length; i2++) { slides_copy[i2 - 1] = slides_copy[i2]; } slides_copy.length--; // Keep going until we have removed all the slides } while (slides_copy.length); // Now set the slides to the randomized array this.slides = slides_randomized; } //-------------------------------------------------- this.get_text = function() { // This method returns the text of the current slide return(this.slides[ this.current ].text); } //-------------------------------------------------- this.get_all_text = function(before_slide, after_slide) { // Return the text for all of the slides. // For the text of each slide, add "before_slide" in front of the // text, and "after_slide" after the text. // For example: // document.write("
';
if (slide.link) {
$html += '';
}
$html += '';
if (slide.link) {
$html += "<\/a>";
}
if (slide.text) {
$html += "
\n" + slide.text;
}
$html += "<\/P>" + "\n\n";
}
// Make the HTML browser-safe
$html = $html.replace(/\&/g, "&" );
$html = $html.replace(//g, ">" );
return('' + $html + '
');
}
//==================================================
// Private methods
//==================================================
//--------------------------------------------------
this.loop = function() {
// This method is for internal use only.
// This method gets called automatically by a JavaScript timeout.
// It advances to the next slide, then sets the next timeout.
// If the next slide image has not completed loading yet,
// then do not advance to the next slide yet.
// Make sure the next slide image has finished loading
if (this.current < this.slides.length - 1) {
next_slide = this.slides[this.current + 1];
if (next_slide.image.complete == null || next_slide.image.complete) {
this.next();
}
} else { // we're at the last slide
this.next();
}
// Keep playing the slideshow
this.play( );
}
//--------------------------------------------------
this.valid_image = function() {
// Returns 1 if a valid image has been set for the slideshow
if (!this.image)
{
return false;
}
else {
return true;
}
}
//--------------------------------------------------
this.getElementById = function(element_id) {
// This method returns the element corresponding to the id
if (document.getElementById) {
return document.getElementById(element_id);
}
else if (document.all) {
return document.all[element_id];
}
else if (document.layers) {
return document.layers[element_id];
} else {
return undefined;
}
}
//==================================================
// Deprecated methods
// I don't recommend the use of the following methods,
// but they are included for backward compatibility.
// You can delete them if you don't need them.
//==================================================
//--------------------------------------------------
this.set_image = function(imageobject) {
// This method is deprecated; you should use
// the following code instead:
// s.image = document.images.myimagename;
// s.update();
if (!document.images)
return;
this.image = imageobject;
}
//--------------------------------------------------
this.set_textarea = function(textareaobject) {
// This method is deprecated; you should use
// the following code instead:
// s.textarea = document.form.textareaname;
// s.update();
this.textarea = textareaobject;
this.display_text();
}
//--------------------------------------------------
this.set_textid = function(textidstr) {
// This method is deprecated; you should use
// the following code instead:
// s.textid = "mytextid";
// s.update();
this.textid = textidstr;
this.display_text();
}
}
SLIDES = new slideshow("SLIDES");
SLIDES.timeout = 5000;
SLIDES.prefetch = -1;
SLIDES.repeat = true;
s = new slide();
s.src = "/admin/show_image.php?sz=bg&img_id=3327";
s.text = unescape("Lot #16 Blackpool Road
Rehoboth Beach<\/a>
Prime location Bald Eagle Lagoon waterfront lot on Blackpool Rd. Largest lot on lagoon! Dock space with power lift and power lifts for 2 ...
Dagsboro<\/a>
Build a beautiful home on this 1 acre plus lot in the prestigious, upscale community of Point Farm. Overlooking Vines Creek, navigable to...
Slaughter Beach<\/a>
Fabulous Beach Front Location Right On Delaware Bay! 100 Wide Lot Containing 30,024 Sq.Ft. On Private Road. Unsurpassed Sunrises And Suns...
Rehoboth Beach<\/a>
Fantastically located corner wooded lot on West Buckingham Drive and Coventry Road in Rehoboth Beach Yacht & Country Club. Buy now, ...
Millsboro<\/a>
Mill Landing. An established community with town services on Betts Pond. Partner up with one of our local custom builders & plan a ...
Lewes<\/a>
Beautiful Water Views Of Burtons Prong And Quiet Solitude From This Property. Home Can Be Enjoyed, Renovated To Your Taste, Or Removed An...
Milton<\/a>
Charming Victorian in the town of Historic Milton. Spacious living room, dining room w/ custom shelving, light/bright sunroom in rear w/ ...
Ocean View<\/a>
Located Slightly Over A Mile From Bethany, Check Out This Prime Location Building Site Zoned G B For 8 Townhomes Or Possible Business Ven...
Millsboro<\/a>
This is a dream come true at a bargain price! Your chance to live on the water with instant access to Bay. Park your boat in the back ya...
Millsboro<\/a>
Affordable 4 BR 2 BA beach retreat in a waterfront community with marina and access to the Indian River Bay. Very well cared for with sp...
Rehoboth Beach<\/a>
Completely remodeled ocean block condominium! Roof top pool, secured building, parking gargage and fantastic location!
Millsboro<\/a>
3.56 Acre lot centrally located between georgetown,Lewes and Rehoboth. Has insulated 24x24 Warehouse/garage on property with electric and...
Dewey Beach<\/a>
Wonderful 7 Bedroom 4.5 Bath beach house with spectacular views of the bay. Beautifully landscaped, opoen living area with large bar, hu...
Dagsboro<\/a>
Sophisticated southern charm overlooking the picturesque Vines Creek. This property boasts 160ft. pier/dock w/lifts. Breathtaking upscale...
Rehoboth Beach<\/a>
Newly re-carpeted, gently enjoyed one-level home adjoining private open space--beautiful gardens & landscaping. Sunroom, formal dinin...
Georgetown<\/a>
Affordable, 3 BR 2 Ba single wide manufactured home with deck on your own landscaped lot. Split wing design with private master bedroom s...
Slaughter Beach<\/a>
New gated private subdivision at the very south end of Slaughter Beach--Southern Pointe Shores. 75 Bay front on the Delaware Bay. Large ...
Rehoboth Beach<\/a>
Fabulous newly stained front deck & large private side wood deck/patio w/privacy fence. Great secure spot for children play area or f...
Lewes<\/a>
Great 1/2 acre buildable lot in quiet wooded setting. Holly Oak is conveniently hidden in the Lewes area. Roads freshly paved Spring of 2...
Rehoboth Beach<\/a>
One-of-a-kind luxury end unit with lots of upgrades: chefs kitchen, hardwood, rec room with wet bar, multiple outdoor living spaces, and...
Rehoboth Beach<\/a>
The luxury of one-level living! Lushly landscaped lot w/ shaded,cool & relaxing rear deck & patio. Separate laundry room & fa...
Rehoboth Beach<\/a>
Quiet .5+ Cul-De-Sac Lot In Exclusive Golf Community. Priced Far Below Asking Price Of All Other Lots In Kings Creek Country Club. Take A...
Millsboro, DE 19966<\/a>
Affordable- Partially wooded lots on Bay Farm Rd. Ok for a manufactured home or build your own. 4 lots grouped together EACH listed for $...
Rehoboth Beach<\/a>
Building exteriors recently renovated! Ground floor end unit in good condition. New counters in kitchen, updated bathrooms, appliances, ...
Lewes<\/a>
Beautiful wooded lot on .55 acre with southern exposure at the rear. Gravity septic system required. Desirable comm. close to the beach, ...
Lewes<\/a>
Perfect for family gatherings or entertaining! 3 BR, 2 full bath, 2 half bath Contemporary Esquire model with morning room and partially ...
Millsboro<\/a>
Affordable- Partially wooded lots in Steele Land. 4 lots grouped together EACH listed for $89,000. 2 lots in Steele Land, 2 lots fronting...
Georgetown<\/a>
Farmette just off route 5 in Georgetown. Almost 8 acres with fruit trees partially fenced with automatic gate. Main house with 2 bedroom...
Georgetown<\/a>
2007 home with all drywall, immense kitchen, spacious master suite, split-wing design. Many built-ins. Available for immediate occupancy....
Rehoboth Beach<\/a>
Cozy beach home in desirable Colonial East. Move-in ready & comes fully furnished. Park has community pool for added enjoyment. Centr...
Lewes<\/a>
Adorable lovingly cared for brick rancher on a beautiful landscaped lot. Split, open floor plan & 3 season sun room allows you to app...
Georgetown<\/a>
Serene country location boasting this 1.55 acre cleared parcel with 150 frontage. Wooded along rear of lot. Site Evaluation on file for ...
Lewes<\/a>
Pond front 3 BR 3 BA former Pulte Model! Full of upgrades & in pristine condition- paver patio in rear, 1st floor office, 2nd floor b...
Frankford<\/a>
This property may be just what you are looking for! A brand new lot/home package that would include the demo of the present house -- migh...
Millsboro<\/a>
1 BR 1 BA singlewide manufactured with front addition & detached 2 car garage. Home is being sold "as is" - livable with r...
Lewes<\/a>
63.486 Acres on Beaver Dam Road/Rt. 23. Partially Wooded, Partially Cleared and Sub Dividable. Many possibilities!
Greenwood<\/a>
This home could be a starter home or a great floor plan design for anyone downsizing! Vaulted ceilings expand the living/dining and kitc...
Milton<\/a>
Historic Milton! Seldom lived in 4 BR 3.5 BA Victorian, features Granite, Tile, Hardwood and open floor plan w/9 ft. ceilings. 1st floor ...
Rehoboth Beach<\/a>
Impeccable home featuring single level living with open floor plan exudes both class and style. Hardwood in all living areas, gourmet kit...
Rehoboth Beach<\/a>
Gorgeous lake exposure! 2 BR 2 BA 5th floor unit fully renovated. New tile with tub/shower in guest bath; fully tiled 60" "rain...
Lewes<\/a>
Adorable stick built Salt Box in desired Angola By the Bay. New roof in 2007, new gutter and gutter guards. Backs to common area/trees. P...
Lewes<\/a>
Spacious, well kept Cape Cod conveniently located with a TON of storage, attached 2 car garage and a detached 2 car garage! First floor m...
Rehoboth Beach<\/a>
Annapolis Model Home by Chase! Home is professionaly decorated with tasteful beach theme & colors. Fabulous upgrades include granite ...
Rehoboth Beach<\/a>
50 x 100 lot 4 blocks to the Beach! Build your own dream home at the Beach. Great location between Rehoboth and Dewey and a quick walk or...
Lewes<\/a>
Quiet location in Lewes with no community restrictions! New synthetic flooring, open living spaceds with vaulted ceilings. Large lot –a...
Milton<\/a>
This home has everything you could imagine and more !! AND is in GREAT Condition! Priced to SELL! In-ground Pool w/ Patio, Large Deck w/ ...
Dewey Beach<\/a>
Entrepreneurs take notice! Great opportunity for a year-round business or a summer cash cow. Only 1 block to the ocean! Lease option avai...
Lewes<\/a>
Contemporary 3BR 2 BA home on a premium lot with sprinkler system, custom paint, crown molding, granite counters, hardwood and tile floor...
North Bethany<\/a>
Want to get away? Youve found the perfect place. Views of the bay and the ocean a wait! Just a short walk to the beach, short drive to l...
Millsboro<\/a>
C-1 COMMERCIAL Zoning! Prime location site in high traffic area of Rt 24 @ Long Neck adjacent to Bay Shore Plaza Shopping Center. Two lev...
Rehoboth Beach<\/a>
Yes, you can live in a Sawgrass Home for under $400K!! This 3 BR 2.5 BA home boasts an extended 1st Floor Mst BR, Cherry Cabinets in Kitc...
Rehoboth Beach<\/a>
Best Priced Waterfront Lot In Rehoboth Beach Yacht And Country Club! Shared Boat Dock Already Constructed. Boating Access To Rehoboth Bay...
Rehoboth Beach<\/a>
Klabe construction home with all the bells and whistles: Energy efficient Geothermal Heating System, 2-Story Greatroom with Built-ins, Ch...
Harbeson<\/a>
Over half and acre corner wooded lot. Community approved for modular or custom built homes. Septic permit on file. Cape Henlopen schoo...
Harrington<\/a>
Move in ready 4 br 3 BA Cape Cod on 10+ acres! NO KIDDING! Theres plenty of room to spread out here. Just a beautiful place to call hom...
Lewes<\/a>
Parcel 24 And 24.06 Being Sold Together. One Parcel Is 4.96 Acres With A 3 Bdrm, 2 Bath Manufactured Home W/ Stick Built Addition. Home H...
Milton<\/a>
Waterfront on Wagamons Pond -- a unique, partially wooded location a short stroll to all that downtown Milton has to offer! Not located ...
Millsboro<\/a>
You cant get better than this! Perfect beach home right on the water. Dock your boat or jet ski in your backyard. Gorgeous water view fr...
Harrington<\/a>
Fulfill Your Dream! 10.35 Acre Horse Farm W/ 8 Stall Barn, 8 Run In Paddocks, & Lg. Machine Shed W/2 Attached Garages. 3 BR/1.5 BA Ra...
Harbeson<\/a>
A Private Oasis All Your Own!!! 12.28 Acres Of Wooded Seclusion On Anderson Corner Rd. Site Evaluation On File For Low Pressure Pipe Syst...
Harbeson<\/a>
Ryans popular Esquire model with 1st floor master suite in desirable community with pool and clubhouse located between Lewes and Georget...
Lewes<\/a>
This Lot Is Just Right. Absolutely Beautiful, Just Over A Half Acre In An Attractive, Quiet Community. Tucked Away Yet Close To Beaches A...
Lewes<\/a>
Wooded homesite with no builder tie in. Minutes to beaches, boating, golf, schools, shopping and more. For those who value privacy and co...
Rehoboth Beach<\/a>
Oceanview 3 BR 2 BA condominium just 75 steps to the Rehoboth Beach and Boardwalk! Onsite management, repeat renters, rooftop pool, secur...
Rehoboth Beach<\/a>
MUST SELL! Great lot for the sprawling ranch home or multi- level. 100 front x 150 rear contains 3000 sq. ft. more than the "typical...
Rehoboth Beach<\/a>
Conveniently Located between Rehoboth and Lewes you will find this .69 Acre Building Lot in the Well Established Community of Dove Knoll....
Rehoboth Beach<\/a>
WATERFRONT high wooded lot overlooking the serenity of Bald Eagle Lagoon -- 193+ on W. Buckingham & 74 on Lagoon. Prime location fo...
Rehoboth Beach<\/a>
Solidly constructed 4 BR 2 BA two story home located in desirable community of Schoolvue with fenced rear yard. Side garage converted to ...
Laurel<\/a>
LOOK AT THIS! Priced to SELL! Immediately ready for building this 3.6 ACRE parcel-partially wooded with large cleared area. Your opportun...
Lewes<\/a>
Lot 83,84 (parcel 21,22)sold together to build your dream home on. Or build your home on one lot and build investment home on the other. ...
Georgetown<\/a>
Premium cul-de-sac location with "SOUGHT AFTER" 2 car garage! Additionally, a relaxing den & a sunroom share the open desig...
Milford<\/a>
SHORT SALE. Handymans special. Great location in downtown Milford. Two apartments, one on each floor with foyer entrance. Home needs som...
Rehoboth Beach<\/a>
.27 Acre Lot In Phase 9 Of Rehoboth Beach Yacht And Country Club. Call The Beachteam For More Information!
Lewes<\/a>
Beautiful wooded lot on cul-de-sac in wooded section of desirable Sandy Brae. Community is well established right in the heart of Lewes/R...
Georgetown<\/a>
Build your dream home here and soak up the peaceful life! Just under one acre (41,862 sf) buildable lot in Georgetown. Survey and details...
Slaughter Beach<\/a>
New private gated subdivision at very south end of Slaughter Beach--Southern Pointe Shores. 75 Bay front on Delaware Bay. Large Buildabl...
Milton<\/a>
Spacious southern exposure deck w/ classic Beach Cottage on enclosed pilings. Lower level laundry room, powder room & storage. Main l...
Rehoboth Beach<\/a>
Prime building site in prestigious community of Rehoboth Beach Yacht & Country Club which borders Community Open Space. Over 14,000 s...