/**
  *
  *  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; 
}

AgileGallery = function(url) {
    this.galleryUrl=url;
    this.picasaXml='index.xml'; 
    this.thumbs=4; 
    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(); 
		
/*		function aGetXmlHttpRequest()
{
var xmlhttp=null;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlhttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
return xmlhttp;
}
*/		
		
        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;
		 
        // set title
        //$('title').innerHTML = data.albumName;
        $('count').innerHTML = data.albumItemCount;
		
		//variable for no. of images, checks for one page adjustment
		imgs = data.albumItemCount - 1;
		if (imgs < 4) { size = imgs - 3; }
		else { size = 0; }

        // load thumbs
        var content = [];
        for(var i=0; i<this.thumbs; i++) content.push(this.getThumbDOM(i));
        this.showThumbs(content);
        this.updateThumbOpacity
		
        // load first image in album
        this.getImage(this.image);
		//$('caption').innerHTML = data.images[0].caption;
		
		// 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+1 || page > this.pages+1)  return;
        this.page=page;
        this.getPage(page);
        this.updateThumbOpacity();
		
   },

   // get specific page of icons
   "getPage": function(page) {
        this.firstimage = ((page*this.thumbs)-4);
        this.lastimage = this.firstimage+this.thumbs;
        var content = [];
        for(var i=this.firstimage; i<this.lastimage; i++) {
			if (this.getThumbDOM(i)!="") { content.push(this.getThumbDOM(i));}}
        this.showThumbs(content);
   },

   // get next image
   "getNextImage": function() {
        this.image++;
        this.getImage(this.image);
   },
 
   // get specific image
   "getImage": function(i) { 
        try {
			//var img = A({href: "javascript:agileGallery.getNextImage()"},
			
			var img = A({href: "#"}, 
            IMG({id: "large_photo", src: this.galleryUrl + "images/" + this.images[i].image, alt:this.images[i].caption, title:""}));
        	$('caption').innerHTML = this.images[i].caption;
			swapDOM($('large_photo'), img);
			
		} 
		catch(e) { } 
			finally {
			this.image=i;
			if(i==(this.lastimage)) this.getNextPage();
			this.updateThumbOpacity();
			}
   },

   // update thumbnail selection
   "updateThumbOpacity": function() {
	    for(var i=this.firstimage; i<this.lastimage+size; i++) {
            var node = 'thumb_'+i;
            if(i!=this.image && i <= imgs) {                
                setElementClass(node, 'thumbUnSel'); 
            } else if(i <= imgs) {            
                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) {
        
		if (i > imgs) {
			return "";
			//var imgid = 'thumb_'+imgs; 
			//var dom = LI(null," ");
            //var dom = LI(null, A({href: "#"},
          //IMG( {id:imgid, alt: this.images[imgs].caption, title: "Click for larger view", src: this.galleryUrl + "thumbnails/" + this.images[imgs].image } )));
        //return dom;
		}
		
		else {
		//alert("imgs " + imgs + " i " + i);
		var imgid = 'thumb_'+i; 
        var dom = LI(null, A({href: "javascript:agileGallery.getImage('"+i+"')"},
            IMG( {id:imgid, alt: this.images[i].caption, title: "Click for larger view", 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); 
