/** This script has been edited from it's original release. It now uses php to bring in the banners from the banner database. It also cycles the banners in order, rather than at random. Original script is zipped inside the webdesigner folder. simple-banner-rotator-1.4.zip **/ /** Script settings **/ var settings = { 'force_size': 1, // if set to 1 all banners will be resized to the width and height in the next to settings 'img_width': 630, // width to resize all banners to, only takes effect if above is 1 'img_height': 192, // height to resize all banners to, only takes effect if above is 1 'refresh_time': 6000, // the seconds between refreshs of the banners - use 0 to disable 'refresh_max': 200, // maximum number of refreshs on each page load 'duplicate_banners': 1, // keep as 0 to make sure the same banner won't show on the same page. will only take effect // if show_banners(); is used more than once. You must make sure you have enough banners to fill // all the slots else the browser may freeze or give a stack overflow error 'location_prefix': 'adLocation-', // The prefix of the IDs of the
which wraps the banners - this div is generated dynamically. // a number will be added on the end of this string. adLocation- was used by default before version 1.4.x 'location_class': 'swb', // A class to add to all of the
s which wrap the banners, ideal to use for styling banners - use .swb img in your CSS 'window': '_self', // Window to open links in, _self = current, _blank = new. Use _top if in a frame! 'default_ad_loc': 'default' // The default adLocation. This is assigned to any banners not given an adLocation in the below banner list // There is no real reason to need to change this } /** Banners **/ // banner list syntax: new banner(website_name, website_url, banner_url, show_until_date, adlocation), DATE FORMAT: dd/mm/yyyy // if you're not using adlocations just leave it empty like '' as in the last example here // to make sure a banner is always rotating, just set the date far into the future, i.e. year 3000 var banners = [ new banner('St. John Outreach','outreach.php','graphics/hp_slide1.jpg','30/04/3000',''),new banner('From The Pastor','http://stjohnuc.ca/pastorsblog/','graphics/hp_slide2.jpg','30/04/3000',''),new banner('Events','eventwedding.php','graphics/hp_slide4.jpg','30/04/3000','')] // There is no need to edit below here /////////////////////////////////////////////////////////////////////////////////// /***** "global" vars *****/ var used = 0; var location_counter = 0; var refresh_counter = 1; var map = new Array(); var bannerNumber = 0; var paused = 0; /************* function banner() creates a banner object *************/ function banner(name, url, image, date, loc) { this.name = name; this.url = url; this.image = image; this.date = date; this.active = 1; this.oid = 0; // if no adlocation is given use the default a adlocation setting // this is used if adlocations aren't being used or using pre-1.4.x code if(loc != '') { this.loc = loc; } else { this.loc = settings.default_ad_loc; } } /************* function preload_banners() preloads banner images for faster switching *************/ function preload_banners() { imageObj = new Image(); images = new Array(); images[0] = "graphics/hp_slide1.jpg";images[1] = "graphics/hp_slide2.jpg";images[2] = "graphics/hp_slide4.jpg"; for(var i=0; i<(banners.length); i++) { imageObj.src=images[i]; } } /************* function show_banners() writes banner
HTML and maps ad locations to
ID tags *************/ function show_banners(banner_location) { // increase the counter ready for further calls location_counter = location_counter + 1; // this part maps the adlocation name supplied by the user to the adlocation // ID used by the script if(banner_location != '' && banner_location != undefined) { map[location_counter] = banner_location; } else { map[location_counter] = settings.default_ad_loc; } // writes banner html var html = '
'; document.write(html); // calls the display banners script to fill this ad location display_banners(location_counter); paused = 0; } /************* function display_banners() displays banners for a given location number *************/ function display_banners(location, opt_single) { // make opt_single optional if (!opt_single) { var opt_single = 999; } else { bannerNumber = (opt_single - 1); turn_off(); } // used in this function to hold tempoary copy of banners array var location_banners = new Array(); // if no location is given, do nothing if(location == '' || !location || location < 0) { return; } // get total banners var am = banners.length; // all banners have been displayed in this pass and the user doesnt // want to have duplicate banners showing if((am == used) && settings.duplicate_banners == 0) { return; } // new for 1.4.x, this takes the list of banners and creates a tempoary list // with only the banners for the current adlocation in for(i = 0; i < (banners.length); i++) { banners[i].oid = i; if((banners[i].loc == map[location]) && (banners[i].active == 1)) { location_banners.push(banners[i]); } } // Image cycling. var bn = location_banners[bannerNumber]; if (bannerNumber < (am - 1)) { bannerNumber++; } else { bannerNumber = 0; } // creates html var image_size = (settings.force_size == 1) ? ' width="' + settings.img_width + '" height="' + settings.img_height + '"' : ''; var html = '' + bn.name + ''; // calculates the date from inputted string, expected formate is DD/MM/YYYY var now = new Date(); var input = bn.date; input = input.split('/', 3); // creates a date object with info var end_date = new Date(); end_date.setFullYear(parseInt(input[2]), parseInt(input[1]) - 1, parseInt(input[0])); // compares curent date with banner end date if((now < end_date) && bn.active == 1) { // attempt to find adlocation div var location_element = document.getElementById(settings.location_prefix + location); // couldn't find it, if this message shows there is a problem with show_banners if(location_element == null) { alert('Please report problem to\n support@goodnessme.ca\n Thank you'); } // output banner HTML else { location_element.innerHTML = html; // if the user doesn't want the same banner to show again deactive it and increase // the users banners counter if(settings.duplicate_banners == 0) { banners[bn.oid].active = 0; used++; } return; } } else { // inactive banner, find another // if no banners fit this adlocation you'll have an endless loop ! display_banners(location); } return; } /************* function refresh_banners() resets counters and active settings *************/ function refresh_banners() { if((refresh_counter == settings.refresh_max) || settings.refresh_time < 1) { clearInterval(banner_refresh); } used = 0; for(j = 0; j < (banners.length); j++) { banners[j].active = 1; } for(j = 1; j < (location_counter+1); j++) { display_banners(j); } refresh_counter++; } function turn_on() { if (paused == 1) { banner_refresh = window.setInterval(refresh_banners, settings.refresh_time); paused = 0; } } function turn_off() { if (paused == 0) { clearInterval(banner_refresh); paused = 1; } } // set timeout var banner_refresh = window.setInterval(refresh_banners, settings.refresh_time);