/**
  *
  *  Copyright 2006 and onward, Agileco, LLC
  *	 All rights reserved
  *  License: See www.agilegallery.com for license details
  *
  **/

dataFromXMLRequest = function (req) {
    log('dataFromXMLRequest', req);  
    var xml = req.responseXML;

	
	
    // get the albumn base info
    var rval = {
        "albumName": map(scrapeText, xml.getElementsByTagName("albumName")),
        "albumItemCount": map(scrapeText,xml.getElementsByTagName("albumItemCount")),
        "albumCaption": map(scrapeText,xml.getElementsByTagName("albumCaption"))
    } 
    // get the image/thumbnail info 
    var images = []; 
    var nodes = xml.getElementsByTagName("image");
    for(var i=0; i<nodes.length; i++) {
        //var itemName = nodes[i].getElementsByTagName("itemName");
        try { 
        images.push({
            "image": map(scrapeText, nodes[i].getElementsByTagName("itemName")),
            "caption": map(scrapeText, nodes[i].getElementsByTagName("itemCaption")),
       //     "nextImage": map(scrapeText, nodes[i].getElementsByTagName("nextImage")),
        //    "nextThumbnail": map(scrapeText, nodes[i].getElementsByTagName("nextThumbnail")),   
         //   "prevImage": map(scrapeText, nodes[i].getElementsByTagName("prevImage")),
            "prevThumbnail": map(scrapeText, nodes[i].getElementsByTagName("prevThumbnail"))
        });
        }
        catch(e) {}
    }
	


	rval.images = images; 
	
	
	
	
    return rval; 
}  // fin dataFromXMLRequest

AgileGallery = function(url) {
    this.galleryUrl=url;
    this.picasaXml='index.xml'; 
    this.thumbs=6; 
    this.images=[]; 
    this.firstimage=null;
    this.lastimage=null;
    this.image=null; 
    this.page=null;
    this.pages=null; 
    this.deferred=null;
    this.format='xml';
    bindMethods(this);
};

AgileGallery.prototype = { 
   // init
   "initialize": function() {
      var url = this.galleryUrl+this.picasaXml;
	
      this.loadXML(url); 
	 
	
	

	  
   },

   // load picasa XML file
   "loadXML": function(url) {
        log('loadXML', url); 
        if(this.deferred) this.deferred.cancel();
        // load
        var req = getXMLHttpRequest(); 
        if (req.overrideMimeType) req.overrideMimeType("text/xml");      
        req.open("GET", url, true); 
        d = sendXMLHttpRequest(req).addCallback(dataFromXMLRequest); 
        this.deferred=null;
        var self = this;
        d.addBoth(function (res) {
            self.deferred = null;
            log('loadXML d.addBoth success');
            return res;
        });
        d.addCallback(function (res) { 
            log('loadXML d.addCallback success');
            return res;
        });
        d.addCallback(this.initWithData);
        d.addErrback(function (err) {
            if(err instanceof CancelledError) {
                return;
            }
            logError(err);
            logger.debuggingBookmarklet();
        });
        return d;
   },

   // init DOM stuff
   "initWithData": function (data) { 
        this.page=1;
        this.firstimage=0;
        this.lastimage=this.thumbs;
        this.image=0;
        this.images=data.images;
        this.pages=data.images.length/this.thumbs;
		
		// probleme division avec reste  :  modulo => page +1
		if ( data.images.length % this.thumbs  ) this.pages = this.pages + 1;

        // set title
     //  $('title').innerHTML = data.albumName;
		 // set title to vide 
      $('title').innerHTML = "";   //data.albumName;
		
        // load thumbs
        var content = [];
        for(var i=0; i<this.thumbs; i++) content.push(this.getThumbDOM(i));
        this.showThumbs(content);
        this.updateThumbOpacity

        // load first caption in album
        this.getImage(this.image);
       $('caption').innerHTML = this.getCaption(0);
		
		// unhide hidden elements
		$('gallery').style.display="block";
		
		
   },

   // get last page of icons
   "getLastPage": function () {
   
        var page = this.page-1; 
		 if(page == 0 || page < 1) return;
        this.page=page;
        this.getPage(page);
        this.updateThumbOpacity();
   },

   // get next page of icons
   "getNextPage": function () {
	var page = this.page+1;
    if(page == this.pages || page > this.pages) return;
	this.page=page;
    this.getPage(page);
	this.updateThumbOpacity();
   },

   // get specific page of icons
   "getPage": function(page) {
        this.firstimage = (((page-1)*this.thumbs));
        
		this.lastimage = this.firstimage+this.thumbs; 
		
	if (this.lastimage > this.images.length ) this.lastimage = this.images.length;

        var content = [];
        for(var i=this.firstimage; i<this.lastimage; i++) content.push(this.getThumbDOM(i));
        this.showThumbs(content);
			   
		
   },
   
   
  
   // get next image
   "getNextImage": function() {
        this.image++;
        this.getImage(this.image);
   },
  
   
 
  // get next image
   "getCaption": function(i) {
    try {
			var urltxt = 'photos/fr/' +this.images[i].caption;
			var reqb = getXMLHttpRequest(); 
			reqb.open("GET", urltxt, false ); 
			if(reqb.overrideMimeType)  reqb.overrideMimeType("text/plain");        // OK
			dt = sendXMLHttpRequest(reqb)
			var xmlb = reqb.responseText;   
			} catch (e)  {  }
	return  xmlb;
	 
   },
 
   // get specific image
   "getImage": function(i) { 
   
	

	//	$('photo1').href =  href;this.popUp( this.images[i].image ,'console',800,800));
	

		
		// href: "popup.php?image=" + this.images[i].image , 
		// javascript:agileGallery.popUp('" + this.images[i].image + "','console',800,800);return false;

		

		
	//	MochiKit.Signal.connect($('photo1'),'onclick', this.popUp () , 'toto' );
		
			
        try {
			/*  var img = A({href: "javascript:agileGallery.getNextImage()"}, 
            IMG({id: "large_photo", src: this.galleryUrl + "images/" + this.images[i].image, alt:this.images[i].caption, title:"Click to view next photo"}));
        	$('caption').innerHTML = this.images[i].caption;
        	swapDOM($('large_photo'), img);  */ 
		

			// affichage description  
			$('caption').innerHTML = this.getCaption(i);
			// affichage photo large 
			$('large_photo').src = this.galleryUrl + "" + this.images[i].image; // chemin entre guillement
			$('Scrollbar-Handle').style.top = "0px";
			$('Scroller-Container').style.top = "0px";
			  if (parent.event.preventDefault)
                parent.preventDefault();
	parent.returnValue = false;
			
		// insertion du lien pour agrandissement	
		
			
		} catch(e) {   } finally {
			this.image=i;
			if(i==(this.lastimage)) this.getNextPage();
			this.updateThumbOpacity();
	
		}
		
   }, 

   "popUp": function(strURL, strType, strHeight, strWidth) {
       
	  /* try {
		
		if (newWin != null && !newWin.closed)
		   newWin.close();
		var strOptions="";
		 if (strType=="console") strOptions="resizable,height="+strHeight+",width="+strWidth;
		 if (strType=="fixed")   strOptions="status,height="+strHeight+",width="+strWidth;
		 if (strType=="elastic") strOptions="toolbar,menubar,scrollbars,"+"resizable,location,height="+strHeight+",width="+strWidth;
		 newWin = window.open(strURL, 'newWin', strOptions);
		 newWin.focus();
		} catch (e) {}  */
		
	   
   },
   
 
   

   
   // update thumbnail selection
   "updateThumbOpacity": function() {
        for(var i=this.firstimage; i<this.lastimage; i++) {
            var node = 'thumb_'+i;
            if(i!=this.image) {                
                setElementClass(node, 'thumbUnSel'); 
            } else {            
                setElementClass(node, 'thumbSel'); 
            }
        }
        // set prev page nav class
        if(this.page == 1) {
            setElementClass('navPrev','thumbUnSel');
        } else {
            setElementClass('navPrev','thumbSel');
        }
        // set next page nav class
        if(this.page >= this.pages) {
            setElementClass('navNext', 'thumbUnSel');
        } else {
            setElementClass('navNext', 'thumbSel');
        }
   },

   // get the dom for the new thumbnail listing
   "getThumbDOM": function(i) {
        var imgid = 'thumb_'+i; 
        var dom = LI(null, A({href: "javascript:agileGallery.getImage('"+i+"')"},
            IMG( {id:imgid, alt: this.images[i].caption, title: "Cliquer pour agrandir", src: this.galleryUrl + "thumbnails/" + this.images[i].image } )));
        return dom;
   },

   // show the thumbnails
   "showThumbs": function(dom) { 
        var newcontent = DIV({id: "thumbs"}, UL(null, dom));
        swapDOM($('thumbs'), newcontent);
   }

   
};

 
//agileGallery = new AgileGallery('http://localhost/agilegallery/photos/'); 
//addLoadEvent(agileGallery.initialize); 

