Welcome to Dream.In.Code
Become an Expert!

Join 149,483 Programmers for FREE! Get instant access to thousands of experts, tutorials, code snippets, and more! There are 1,389 people online right now. Registration is fast and FREE... Join Now!




AJAX Image gallery problem

 
Reply to this topicStart new topic

AJAX Image gallery problem, Please help

Sneblot
15 May, 2007 - 02:15 PM
Post #1

D.I.C Head
**

Joined: 9 Feb, 2007
Posts: 245


My Contributions
Please help I am trying to get a AJAX image gallery up and running I have done everything the tutorial told me but still no joy. I have included the code so that someone might know whats wrong with it and be able to help.
HTML code below:-
CODE

<body>
<center>
<div id="content">
<div id="spacer">
</div>
<div id="header">
</div>
<div id="navigation">
<table width="90%" align="center" cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<a href="index.html"
                onmouseover="changeImages('who', 'images/images/who-over.gif'); return true;"
                onmouseout="changeImages('who', 'images/images/who.gif'); return true;"
                onmousedown="changeImages('who', 'images/images/who-over.gif'); return true;"
                onmouseup="changeImages('who', 'images/who-over.gif'); return true;">
                <img name="who" src="images/who.gif" width="108" height="52" border="0" alt="who" /></a></td>
        <td>
            <a href="news.html"
                onmouseover="changeImages('news', 'images/images/news-over.gif'); return true;"
                onmouseout="changeImages('news', 'images/images/news.gif'); return true;"
                onmousedown="changeImages('news', 'images/images/news-over.gif'); return true;"
                onmouseup="changeImages('news', 'images/images/news-over.gif'); return true;">
                <img name="news" src="images/news.gif" width="112" height="52" border="0" alt="news" /></a></td>
        <td>
            <a href="art.html"
                onmouseover="changeImages('art', 'images/images/art-over.gif'); return true;"
                onmouseout="changeImages('art', 'images/images/art.gif'); return true;"
                onmousedown="changeImages('art', 'images/images/art-over.gif'); return true;"
                onmouseup="changeImages('art', 'images/images/art-over.gif'); return true;">
                <img name="art" src="images/art.gif" width="71" height="52" border="0" alt="art" /></a></td>
        <td>
            <a href="clothing.html"
                onmouseover="changeImages('clothing', 'images/images/clothing-over.gif'); return true;"
                onmouseout="changeImages('clothing', 'images/images/clothing.gif'); return true;"
                onmousedown="changeImages('clothing', 'images/images/clothing-over.gif'); return true;"
                onmouseup="changeImages('clothing', 'images/images/clothing-over.gif'); return true;">
                <img name="clothing" src="images/clothing.gif" width="138" height="52" border="0" alt="clothing" /></a></td>
        <td>
            <a href="contact.html"
                onmouseover="changeImages('contact', 'images/images/contact-over.gif'); return true;"
                onmouseout="changeImages('contact', 'images/images/contact.gif'); return true;"
                onmousedown="changeImages('contact', 'images/images/contact-over.gif'); return true;"
                onmouseup="changeImages('contact', 'images/images/contact-over.gif'); return true;">
                <img name="contact" src="images/contact.gif" width="163" height="52" border="0" alt="contact" /></a></td>
</tr></table>
</div>
<div id="content-box">
<br />
<div id="myGallery">
<h3>Alvin</h3>
<a href="image.html" title="open image" class="open"></a>
<img src="art/images/alvincolorcopy.jpg" class="full" />
<img src="art/thumbs/alvincolorcopy.jpg" class="thumbnail" />
<h3>Aqua Boy</h3>
<a href="image.html" title="open image" class="open"></a>
<img src="art/images/AQUABOY.jpg" class="full" />
<img src="art/thumbs/AQUABOY.jpg" class="thumbnail" />
</div>
<p>Sometimes when faced with no alternative to reality I have to make use of the BESH/LO technique, which enables me to disassoicate myself from reality and take on the form of whatever I want. Problem solved!</p>
</div>
<div id="spacer">
</div>
</div>
</center>
</body>


JavaScript Code Below:-
CODE

var $removeEvents = function (object, type)
{
    if (!object.events) return object;
    if (type){
        if (!object.events[type]) return object;
        for (var fn in object.events[type]) object.removeEvent(type, fn);
        object.events[type] = null;
    } else {
        for (var evType in object.events) object.removeEvents(evType);
        object.events = null;
    }
    return object;
};
        
        
// declaring the class
var gallery = new Class({
    initialize: function(element, options) {
        this.setOptions({
            showArrows: true,
            showCarousel: true,
            showInfopane: true,
            thumbHeight: 75,
            thumbWidth: 100,
            thumbSpacing: 10,
            embedLinks: true,
            fadeDuration: 500,
            timed: true,
            delay: 5000,
            preloader: true,
            manualData: [],
            populateData: true,
            elementSelector: "div.imageElement",
            titleSelector: "h3",
            subtitleSelector: "p",
            linkSelector: "a.open",
            imageSelector: "img.full",
            thumbnailSelector: "img.thumbnail",
            slideInfoZoneOpacity: 0.7,
            carouselMinimizedOpacity: 0.4,
            carouselMinimizedHeight: 20,
            carouselMaximizedOpacity: 0.7,
            destroyAfterPopulate: true,
            baseClass: 'jdGallery',
            withArrowsClass: 'withArrows',
            textShowCarousel: 'Pictures',
            useThumbGenerator: true,
            thumbGenerator: 'resizer.php'
        }, options);
        this.fireEvent('onInit');
        this.currentIter = 0;
        this.lastIter = 0;
        this.maxIter = 0;
        this.galleryElement = element;
        this.galleryData = this.options.manualData;
        this.galleryInit = 1;
        this.galleryElements = Array();
        this.thumbnailElements = Array();
        this.galleryElement.addClass(this.options.baseClass);
        if (this.options.populateData)
            this.populateData();
        element.style.display="block";
        
        if (this.options.embedLinks)
        {
            this.currentLink = new Element('a').addClass('open').setProperties({
                href: '#',
                title: ''
            }).injectInside(element);
            if ((!this.options.showArrows) && (!this.options.showCarousel))
                this.galleryElement = element = this.currentLink;
            else
                this.currentLink.setStyle('display', 'none');
        }
        
        this.constructElements();
        if ((data.length>1)&&(this.options.showArrows))
        {
            var leftArrow = new Element('a').addClass('left').addEvent(
                'click',
                this.prevItem.bind(this)
            ).injectInside(element);
            var rightArrow = new Element('a').addClass('right').addEvent(
                'click',
                this.nextItem.bind(this)
            ).injectInside(element);
            this.galleryElement.addClass(this.options.withArrowsClass);
        }
        this.loadingElement = new Element('div').addClass('loadingElement').injectInside(element);
        if (this.options.showInfopane) this.initInfoSlideshow();
        if (this.options.showCarousel) this.initCarousel();
        this.doSlideShow(1);
    },
    populateData: function() {
        currentArrayPlace = this.galleryData.length;
        options = this.options;
        data = this.galleryData;
        this.galleryElement.getElements(options.elementSelector).each(function(el) {
            elementDict = {
                image: el.getElement(options.imageSelector).getProperty('src'),
                number: currentArrayPlace
            };
            if ((options.showInfopane) | (options.showCarousel))
                Object.extend(elementDict, {
                    title: el.getElement(options.titleSelector).innerHTML,
                    description: el.getElement(options.subtitleSelector).innerHTML
                });
            if (options.embedLinks)
                Object.extend(elementDict, {
                    link: el.getElement(options.linkSelector).href||false,
                    linkTitle: el.getElement(options.linkSelector).title||false
                });
            if ((!options.useThumbGenerator) && (options.showCarousel))
                Object.extend(elementDict, {
                    thumbnail: el.getElement(options.thumbnailSelector).src
                });
            else if (options.useThumbGenerator)
                Object.extend(elementDict, {
                    thumbnail: 'resizer.php?imgfile=' + elementDict.image + '&max_width=' + options.thumbWidth + '&max_height=' + options.thumbHeight
                });
            
            data[currentArrayPlace] = elementDict;
            currentArrayPlace++;
            if (this.options.destroyAfterPopulate)
                el.remove();
        });
        this.galleryData = data;
        this.fireEvent('onPopulated');
    },
    constructElements: function() {
        el = this.galleryElement;
        this.maxIter = this.galleryData.length;
        var currentImg;
        for(i=0;i<this.galleryData.length;i++)
        {
            var currentImg = new Fx.Style(
                new Element('div').addClass('slideElement').setStyles({
                    'position':'absolute',
                    'left':'0px',
                    'right':'0px',
                    'margin':'0px',
                    'padding':'0px',
                    'backgroundImage':"url('" + this.galleryData[i].image + "')",
                    'backgroundPosition':"center center",
                    'opacity':'0'
                }).injectInside(el),
                'opacity',
                {duration: this.options.fadeDuration}
            );
            this.galleryElements[parseInt(i)] = currentImg;
        }
    },
    destroySlideShow: function(element) {
        var myClassName = element.className;
        var newElement = new Element('div').addClass('myClassName');
        element.parentNode.replaceChild(newElement, element);
    },
    startSlideShow: function() {
        this.fireEvent('onStart');
        this.loadingElement.style.display = "none";
        this.lastIter = this.maxIter - 1;
        this.currentIter = 0;
        this.galleryInit = 0;
        this.galleryElements[parseInt(this.currentIter)].set(1);
        if (this.options.showInfopane)
            this.showInfoSlideShow.delay(1000, this);
        this.prepareTimer();
        if (this.options.embedLinks)
            this.makeLink(this.currentIter);
    },
    nextItem: function() {
        this.fireEvent('onNextCalled');
        this.nextIter = this.currentIter+1;
        if (this.nextIter >= this.maxIter)
            this.nextIter = 0;
        this.galleryInit = 0;
        this.goTo(this.nextIter);
    },
    prevItem: function() {
        this.fireEvent('onPreviousCalled');
        this.nextIter = this.currentIter-1;
        if (this.nextIter <= -1)
            this.nextIter = this.maxIter - 1;
        this.galleryInit = 0;
        this.goTo(this.nextIter);
    },
    goTo: function(num) {
        this.clearTimer();
        if (this.options.embedLinks)
            this.clearLink();
        if (this.options.showInfopane)
        {
            this.slideInfoZone.clearChain();
            this.hideInfoSlideShow().chain(this.changeItem.pass(num, this));
        } else
            this.changeItem.delay(500, this, num);
        if (this.options.embedLinks)
            this.makeLink(num);
        this.prepareTimer();
        /*if (this.options.showCarousel)
            this.clearThumbnailsHighlights();*/
    },
    changeItem: function(num) {
        this.fireEvent('onStartChanging');
        this.galleryInit = 0;
        if (this.currentIter != num)
        {
            for(i=0;i<this.maxIter;i++)
            {
                if ((i != this.currentIter)) this.galleryElements[i].set(0);
            }
            if (num > this.currentIter) this.galleryElements[num].custom(1);
            else
            {
                this.galleryElements[num].set(1);
                this.galleryElements[this.currentIter].custom(0);
            }
            this.currentIter = num;
        }
        this.doSlideShow.bind(this)();
        this.fireEvent('onChanged');
    },
    clearTimer: function() {
        if (this.options.timed)
            $clear(this.timer);
    },
    prepareTimer: function() {
        if (this.options.timed)
            this.timer = this.nextItem.delay(this.options.delay, this);
    },
    doSlideShow: function(position) {
        if (this.galleryInit == 1)
        {
            imgPreloader = new Image();
            imgPreloader.onload=function(){
                this.startSlideShow.delay(10, this);
            }.bind(this);
            imgPreloader.src = this.galleryData[0].image;
        } else {
            if (this.options.showInfopane)
            {
                if (this.options.showInfopane)
                {
                    this.showInfoSlideShow.delay((500 + this.options.fadeDuration), this);
                } else
                    if (this.options.showCarousel)
                        this.centerCarouselOn(position);
            }
        }
    },
    initCarousel: function () {
        var carouselContainerElement = new Element('div').addClass('carouselContainer').injectInside(this.galleryElement);
        this.carouselContainer = new Fx.Styles(carouselContainerElement, {transition: Fx.Transitions.expoOut});
        this.carouselContainer.normalHeight = carouselContainerElement.offsetHeight;
        this.carouselContainer.set({'opacity': this.options.carouselMinimizedOpacity, 'top': (this.options.carouselMinimizedHeight - this.carouselContainer.normalHeight)});
        
        this.carouselBtn = new Element('a').addClass('carouselBtn').setProperties({
            title: this.options.textShowCarousel
        }).setHTML(this.options.textShowCarousel).injectInside(carouselContainerElement);
        
        this.carouselBtn.addEvent(
            'click',
            function () {
                this.carouselContainer.clearTimer();
                this.toggleCarousel();
            }.bind(this)
        );
        this.carouselActive = false;

        var carouselElement = new Element('div').addClass('carousel').injectInside(carouselContainerElement);
        this.carousel = new Fx.Styles(carouselElement);
        
        this.carouselLabel = new Element('p').addClass('label').injectInside(this.carousel.element);
        this.carouselWrapper = new Element('div').addClass('carouselWrapper').injectInside(this.carousel.element);
        this.carouselInner = new Element('div').addClass('carouselInner').injectInside(this.carouselWrapper);

        this.carouselWrapper.scroller = new Scroller(this.carouselWrapper, {
            area: 100,
            velocity: 0.2
        })
        
        this.carouselWrapper.elementScroller = new Fx.Scroll(this.carouselWrapper, {
            duration: 400,
            onStart: this.carouselWrapper.scroller.stop.bind(this.carouselWrapper.scroller),
            onComplete: this.carouselWrapper.scroller.start.bind(this.carouselWrapper.scroller)
        });

        this.constructThumbnails();

        this.carouselInner.style.width = ((this.maxIter * (this.options.thumbWidth + this.options.thumbSpacing)) - this.options.thumbSpacing + this.options.thumbWidth) + "px";
    },
    toggleCarousel: function() {
        if (this.carouselActive)
            this.hideCarousel();
        else
            this.showCarousel();
    },
    showCarousel: function () {
        this.fireEvent('onShowCarousel');
        this.carouselContainer.custom({
            'opacity': this.options.carouselMaximizedOpacity,
            'top': 0
        }).addEvent('onComplete', function() { this.carouselActive = true; this.carouselWrapper.scroller.start(); }.bind(this));
    },
    hideCarousel: function () {
        this.fireEvent('onHideCarousel');
        this.carouselContainer.custom({
            'opacity': this.options.carouselMinimizedOpacity,
            'top': (this.options.carouselMinimizedHeight - this.carouselContainer.normalHeight)
        }).addEvent('onComplete', function() { this.carouselActive = false; this.carouselWrapper.scroller.stop(); }.bind(this));
    },
    constructThumbnails: function () {
        element = this.carouselInner;
        for(i=0;i<this.galleryData.length;i++)
        {
            var currentImg = new Fx.Style(new Element ('div').addClass("thumbnail").setStyles({
                    backgroundImage: "url('" + this.galleryData[i].thumbnail + "')",
                    backgroundPosition: "center center",
                    backgroundRepeat: 'no-repeat',
                    marginLeft: this.options.thumbSpacing + "px",
                    width: this.options.thumbWidth + "px",
                    height: this.options.thumbHeight + "px"
                }).injectInside(element), "opacity", {duration: 200}).set(0.2);
            currentImg.element.addEvents({
                'mouseover': function (myself) {
                    myself.clearTimer();
                    myself.custom(0.99);
                    $(this.carouselLabel).setHTML('<span class="number">' + (myself.relatedImage.number + 1) + "/" + this.maxIter + ":</span> " + myself.relatedImage.title);
                }.pass(currentImg, this),
                'mouseout': function (myself) {
                    myself.clearTimer();
                    myself.custom(0.2);
                }.pass(currentImg, this),
                'click': function (myself) {
                    this.goTo(myself.relatedImage.number);
                }.pass(currentImg, this)
            });
            
            currentImg.relatedImage = this.galleryData[i];
            this.thumbnailElements[parseInt(i)] = currentImg;
        }
    },
    clearThumbnailsHighlights: function()
    {
        for(i=0;i<this.galleryData.length;i++)
        {
            this.thumbnailElements[i].clearTimer();
            this.thumbnailElements[i].custom(0.2);
        }
    },
    centerCarouselOn: function(num) {
        var carouselElement = this.thumbnailElements[num];
        var position = carouselElement.element.offsetLeft + (carouselElement.element.offsetWidth / 2);
        var carouselWidth = this.carouselWrapper.offsetWidth;
        var carouselInnerWidth = this.carouselInner.offsetWidth;
        var diffWidth = carouselWidth / 2;
        var scrollPos = position-diffWidth;
        this.carouselWrapper.elementScroller.scrollTo(scrollPos,0);
    },
    initInfoSlideshow: function() {
        /*if (this.slideInfoZone.element)
            this.slideInfoZone.element.remove();*/
        this.slideInfoZone = new Fx.Styles(new Element('div').addClass('slideInfoZone').injectInside($(this.galleryElement))).set({'opacity':0});
        var slideInfoZoneTitle = new Element('h2').injectInside(this.slideInfoZone.element);
        var slideInfoZoneDescription = new Element('p').injectInside(this.slideInfoZone.element);
        this.slideInfoZone.normalHeight = this.slideInfoZone.element.offsetHeight;
        this.slideInfoZone.element.setStyle('opacity',0);
    },
    changeInfoSlideShow: function()
    {
        this.hideInfoSlideShow.delay(10, this);
        this.showInfoSlideShow.delay(500, this);
    },
    showInfoSlideShow: function() {
        this.fireEvent('onShowInfopane');
        this.slideInfoZone.clearTimer();
        element = this.slideInfoZone.element;
        element.getElement('h2').setHTML(this.galleryData[this.currentIter].title);
        element.getElement('p').setHTML(this.galleryData[this.currentIter].description);
        this.slideInfoZone.custom({'opacity': [0, this.options.slideInfoZoneOpacity], 'height': [0, this.slideInfoZone.normalHeight]});
        if (this.options.showCarousel)
            this.slideInfoZone.chain(this.centerCarouselOn.pass(this.currentIter, this));
        return this.slideInfoZone;
    },
    hideInfoSlideShow: function() {
        this.fireEvent('onHideInfopane');
        this.slideInfoZone.clearTimer();
        this.slideInfoZone.custom({'opacity': 0, 'height': 0});
        return this.slideInfoZone;
    },
    makeLink: function(num) {
        this.currentLink.setProperties({
            href: this.galleryData[num].link,
            title: this.galleryData[num].linkTitle
        })
        if (!((this.options.embedLinks) && (!this.options.showArrows) && (!this.options.showCarousel)))
            this.currentLink.setStyle('display', 'block');
    },
    clearLink: function() {
        this.currentLink.setProperties({href: '', title: ''});
        if (!((this.options.embedLinks) && (!this.options.showArrows) && (!this.options.showCarousel)))
            this.currentLink.setStyle('display', 'none');
    }
});
gallery.implement(new Events);
gallery.implement(new Options);

User is offlineProfile CardPM
+Quote Post

girasquid
RE: AJAX Image Gallery Problem
15 May, 2007 - 04:38 PM
Post #2

Barbarbar
Group Icon

Joined: 3 Oct, 2006
Posts: 1,294



Thanked: 18 times
Dream Kudos: 725
My Contributions
What's the problem, exactly?
User is offlineProfile CardPM
+Quote Post

Sneblot
RE: AJAX Image Gallery Problem
15 May, 2007 - 04:46 PM
Post #3

D.I.C Head
**

Joined: 9 Feb, 2007
Posts: 245


My Contributions
When I upload it or preview it in firefox or ie7 instead of a interactive image viewer I just get a black box. http://www.beshlo.uni.cc/ here a link to the site if you go to the art page you'll see what I mean.
User is offlineProfile CardPM
+Quote Post

ahmad_511
RE: AJAX Image Gallery Problem
15 May, 2007 - 09:01 PM
Post #4

D.I.C Regular
Group Icon

Joined: 28 Apr, 2007
Posts: 351



Thanked: 8 times
Dream Kudos: 400
My Contributions
Hello
I checked out your link and the first thing i saw is the object expected on line 28 and some lines after.
So i think the problem occurred when you call "changeimage" function on some places on your site.
when i checked out your javascript file i didn't see that function.
so iguess that you forget to wrote the function.
User is offlineProfile CardPM
+Quote Post

Sneblot
RE: AJAX Image Gallery Problem
16 May, 2007 - 04:43 AM
Post #5

D.I.C Head
**

Joined: 9 Feb, 2007
Posts: 245


My Contributions
Cheers for that but Im abit of a newb to javascript and I don't know where to put the call function. I now have the loading bar sorted but still no joy on the images.

This post has been edited by Sneblot: 16 May, 2007 - 06:30 AM
User is offlineProfile CardPM
+Quote Post

ahmad_511
RE: AJAX Image Gallery Problem
16 May, 2007 - 06:26 PM
Post #6

D.I.C Regular
Group Icon

Joined: 28 Apr, 2007
Posts: 351



Thanked: 8 times
Dream Kudos: 400
My Contributions
Hi.
It's me again.
The problem is not where to call the function!..
The problem is the function it self .(it's missing)
all you have to do is to put this function into your javascript file; so every thing will be allright "i think"
User is offlineProfile CardPM
+Quote Post

Sneblot
RE: AJAX Image Gallery Problem
17 May, 2007 - 07:22 AM
Post #7

D.I.C Head
**

Joined: 9 Feb, 2007
Posts: 245


My Contributions
Argh I see cheers dude. I'll try and find the right one.
User is offlineProfile CardPM
+Quote Post

Sneblot
RE: AJAX Image Gallery Problem
19 May, 2007 - 05:41 AM
Post #8

D.I.C Head
**

Joined: 9 Feb, 2007
Posts: 245


My Contributions
This is going to sound really stupid but I have looked every where for the code snippet to referance to. But have been able to find it whats it look like?
User is offlineProfile CardPM
+Quote Post

ahmad_511
RE: AJAX Image Gallery Problem
22 May, 2007 - 08:55 PM
Post #9

D.I.C Regular
Group Icon

Joined: 28 Apr, 2007
Posts: 351



Thanked: 8 times
Dream Kudos: 400
My Contributions
Hey
You Have to find a string like this "function changeimage(some arguments here)"
If you can't do that ?,you just middec a portion of you javascript file.

any way;If you can describe what you need exactly for example:
-The basic idea you are trying to do.
-Where you've got the problem.
-what you have as inputs informations and what you need to output.

This post has been edited by ahmad_511: 22 May, 2007 - 09:04 PM
User is offlineProfile CardPM
+Quote Post

Fast ReplyReply to this topicStart new topic
Time is now: 1/7/09 04:37PM

Be Social

Dream.In.Code RSS Feed