wdgretro = {
    PHOTOS_XML: [],
    PHOTOS_CACHE: [],
    CACHE_SIZE: 20,
    LAST_PHOTO_XML: 0,
	FIRST_PHOTO_XML:0,
	CURRENT_PHOTO : -1,
	indexCadre : 0,
	fxDelay : 500,
	slideDelay:5000,
	
	//Smoothshow method for slideshow animation
    smoothShow: function(from, to, delay){
        delay /= 2
        if (to == from) 
            return;
        var fx = new Fx.Style(from, 'opacity', {        
            duration: delay,
            wait: false
        });
        var editfx = new Fx.Style(to, 'opacity', {
        
            duration: delay,
            wait: false
        });
        fx.start(0)
        from.setStyle.delay(delay, from, ['display', 'none']);
        to.setStyle.delay(delay, to, ['display', 'block'])
        editfx.start.delay(delay, editfx, 1)
    },
	
	// create the about tab content
	generateAbout:function() {
		var about = new Element('div');
  		CWE.callAjax(wdgretro.WIDGETPATH+"apropos.html", function (response) {
   			about.setHTML(response);
   			var aboutPanel = CWE.setAbout(about);
			aboutPanel.setStyle('width','98%');
			$('aboutboxbutton').addClass('tabbuttons');  	
   			aboutPanel.addClass('widget');
   			aboutPanel.setStyles({'padding-left' : '5px'});
   			aboutPanel.setStyle('padding-top','5px');
	 		$('versions').setStyles({'float' : 'left', 'width' : '100%', 'margin-top': '10px', 'font-size': '10px', 'font-style': 'normal'});
			var racine = window.location.protocol+'//'+window.location.hostname+window.location.pathname.substr(0,window.location.pathname.indexOf('/',1));
	 		var location = window.location.protocol+'//'+window.location.hostname;
			var ur = racine.replace(/(http:\/\/)/g,"");
			ur += "/";
			ur = ur.replace(/(\/)/g,"_cwe_slashes_");
			$('aproposfirefox').setProperty('onclick','javascript:window.sidebar.addPanel("'+document.title+'","'+location+'/index.php/cwe/ffsidebar/'+ur+'","")');
			$('facebook').setProperty('href','http://www.new.facebook.com/apps/application.php?id=17233054288');	
			$('facebook').setProperty('target','_blank');						
			$('igoogle').setProperty('href','http://www.google.fr/ig/adde?source=atgs&moduleurl='+window.location.hostname+'/index.php/cwe/google/'+ur);
			$('igoogle').setProperty('target','_blank');
			$('netvibes').setProperty('href','http://www.netvibes.com/subscribe.php?uwa='+location+'/index.php/cwe/uwa/'+ur);
			$('netvibes').setProperty('target','_blank');
			$('vista').setProperty('href',location+'/index.php/cwe/desktop/vista?widget='+racine);
			$('iphone').setProperty('href',location+'/index.php/cwe/iphone/'+ur);
			$('iphone').setProperty('target','_blank');
		});
	},
  	
	// once xml loaded, initialize the image cache array
    initCache: function(){
        wdgretro.PHOTOS_CACHE = [];
		wdgretro.CURRENT_PHOTO=0;
		wdgretro.FIRST_PHOTO_XML=0;
		wdgretro.LAST_PHOTO_XML=0;
        for (var i = 0; i < wdgretro.CACHE_SIZE; i++) {
            var img = new Image();
			var label=wdgretro.PHOTOS_XML[wdgretro.LAST_PHOTO_XML].desc;
			var url=wdgretro.PHOTOS_XML[wdgretro.LAST_PHOTO_XML].url;
            img.src = wdgretro.PHOTOS_XML[wdgretro.LAST_PHOTO_XML].src;
            wdgretro.LAST_PHOTO_XML++;
            wdgretro.PHOTOS_CACHE.push({img:img,label:label,href:url});
        }
    },
	
	// shift and add nb pictures to the cache
	upCache : function (nb) {
		for (var i =0;i<nb && wdgretro.LAST_PHOTO_XML<wdgretro.PHOTOS_XML.length;i++) {
			wdgretro.PHOTOS_CACHE.shift()
			var img = new Image();
			var label=wdgretro.PHOTOS_XML[wdgretro.LAST_PHOTO_XML].desc;
			var url=wdgretro.PHOTOS_XML[wdgretro.LAST_PHOTO_XML].url;
			img.src = wdgretro.PHOTOS_XML[wdgretro.LAST_PHOTO_XML].src;
			wdgretro.PHOTOS_CACHE.push({img:img,label:label,href:url});
			wdgretro.LAST_PHOTO_XML++;
			wdgretro.FIRST_PHOTO_XML++;
			wdgretro.CURRENT_PHOTO--;
		}
	},
	
	// pop and add nb pictures to the cache
	downCache : function (nb) {
		for (var i =0;i<nb && wdgretro.FIRST_PHOTO_XML>=0;i++) {
			wdgretro.PHOTOS_CACHE.pop();
			var img = new Image();
			var label=wdgretro.PHOTOS_XML[wdgretro.FIRST_PHOTO_XML].desc;
			var url=wdgretro.PHOTOS_XML[wdgretro.LAST_PHOTO_XML].url;
			img.src = wdgretro.PHOTOS_XML[wdgretro.FIRST_PHOTO_XML].src;
			wdgretro.PHOTOS_CACHE.unshift({img:img,label:label,href:url});
			wdgretro.PHOTOS_CACHE.push();
			wdgretro.FIRST_PHOTO_XML--;
			wdgretro.LAST_PHOTO_XML--;
			wdgretro.CURRENT_PHOTO++;
		}
	},
	
	// return the next photo in the cache
    getNextCachedPhoto : function(){
		wdgretro.CURRENT_PHOTO++;
        var res = wdgretro.PHOTOS_CACHE[wdgretro.CURRENT_PHOTO] ;
		while(res.img.complete && res.img.width==0) {
			wdgretro.CURRENT_PHOTO++;
      		res = wdgretro.PHOTOS_CACHE[wdgretro.CURRENT_PHOTO] ;
			// renew cache
			if (wdgretro.CURRENT_PHOTO>=wdgretro.CACHE_SIZE-5) {
				wdgretro.upCache(5);
			}	
		}
		// renew cache
		if (wdgretro.CURRENT_PHOTO>=wdgretro.CACHE_SIZE-5) {
			wdgretro.upCache(5);
		}		
        return res;
    },
	
	// return the previous photo in the cache
	getPreviousCachedPhoto: function(){
		wdgretro.CURRENT_PHOTO--;
        var res = wdgretro.PHOTOS_CACHE[wdgretro.CURRENT_PHOTO];		
		// renew cache
		if (wdgretro.CURRENT_PHOTO<3 && wdgretro.FIRST_PHOTO_XML>0) {
			wdgretro.downCache(wdgretro.FIRST_PHOTO_XML>5?5:wdgretro.FIRST_PHOTO_XML);
		}
        return res;
    },
	
	// return the xml url
    getXmlUrl: function(){
		if (wdgretro.expanded) {
			var insee = $('arrondissement').getValue();
		} else {
			var insee=75101;
		}
        return "http://www.notrefamille.com/v2/services/flux_cartes1900.asp?insee=" + insee + "&partner=notrefamille.com&emplacement=widget&format=grand"
    },
	
	// start the loading spinner (or stop ip if on==false)
    spinning: function(on){
		if (on) {
			$('loadingMask').setStyle('display','block');
		}else {
			$('loadingMask').setStyle('display','none');
		}
    },
	
	// load the xml in ajax
    loadXml: function(){
		wdgretro.stop();		
		wdgretro.PHOTOS_XML=[];
        wdgretro.spinning(true);
        CWE.callAjax(wdgretro.getXmlUrl(), wdgretro.treatXml, true);
    },
	
	//once loaded treat the xml
    treatXml: function(xml){
        wdgretro.spinning(false);
		var root = xml.getElementsByTagName('cartes_1900')[0];
		var cards = root.getElementsByTagName('carte');		
		for (var i = 0; i < cards.length; i++) {
			var card = {};
			card.src=CWE.getXMLNodeValue(cards[i],'image');
			card.url=CWE.getXMLNodeValue(cards[i],'lien');
			card.desc=CWE.getXMLNodeValue(cards[i],'description');
			wdgretro.PHOTOS_XML.push(card);
		}
		wdgretro.initCache();
		
		$('linkCard').href = wdgretro.setSlide(0).href;
		wdgretro.setSlide(1);
		wdgretro.play();	
    },
	
	// defaultview object
    defaultView: {
        display: function(){
            CWE.setUrlContent(wdgretro.WIDGETPATH + 'content.html');
            wdgretro.expanded = true;
        }
    },
	
	// display the next picture following the order s (previous if s<0)
	nextPic:function (s) {
		var sens = s==null ? 1 :s;
		
		if (sens < 0 && wdgretro.rewinded || (wdgretro.LAST_PHOTO_XML==wdgretro.PHOTOS_XML.length-1 && wdgretro.CURRENT_PHOTO == wdgretro.CACHE_SIZE -1)) 
			return;
		else {
			wdgretro.rewinded = false		
		}
		
		var from = wdgretro.indexCadre;	
		var to = (wdgretro.indexCadre+1) % 3;
		var append = ( wdgretro.indexCadre+2) % 3;
		if(sens<0) {
			if (!wdgretro.rewind) {
				wdgretro.CURRENT_PHOTO--;
				wdgretro.CURRENT_PHOTO--;			
				wdgretro.rewind=true;
			}
			var stack = append;
			append=to;
			to=stack;
		} else if (wdgretro.rewind){
			wdgretro.CURRENT_PHOTO++;
			wdgretro.rewind=false;
		}
		
		wdgretro.smoothShow(wdgretro.cadre[from],wdgretro.cadre[to],wdgretro.fxDelay);
		wdgretro.smoothShow(wdgretro.legend[from],wdgretro.legend[to],wdgretro.fxDelay);
		if (wdgretro.expanded) {
			$('linkCard').href = wdgretro.legend[to].firstChild.firstChild.href;
		}
		if(!(sens<0 && wdgretro.CURRENT_PHOTO==0))
			wdgretro.setSlide(append,sens);
		else 
			wdgretro.rewinded = true;
		wdgretro.indexCadre=to;
	}
	
	// change the picture in the given frame
	,setSlide:function(index,sens) {
		if (sens<0) {
			var photo = wdgretro.getPreviousCachedPhoto();
		}else {
			var photo = wdgretro.getNextCachedPhoto();
		}
		wdgretro.cadre[index].innerHTML="";
		if(wdgretro.expanded)
			wdgretro.legend[index].innerHTML="";
		if(window.ie6) {
			var h=photo.img.height;
			var w = photo.img.width;
			if(h>195) {
				photo.img.style.height="195px"
				photo.img.style.width=w*(195/h)+'px'
			} else if (w>220) {
				photo.img.style.width='220px'
				photo.img.style.height=h*(220/w)+'px'
			}
		}
		wdgretro.cadre[index].appendChild(photo.img);
		if (wdgretro.expanded) {
			var label = new Element('div');
			label.innerHTML = '<a href="' + photo.href + '" target="_blank">' + wdgretro.resumeTexte(photo.label, '...', 90).replace(/&apos;/g,'&#39;') + '</a>';
			wdgretro.legend[index].appendChild(label);
		}
		return photo;
	}
	
	// callback of the next control button
	,next :function(e) {
		wdgretro.stop();
		wdgretro.nextPic();
	}
	
	// callback of the previous control button
	,previous :function(e) {
		wdgretro.stop();
		wdgretro.nextPic(-1);	
	}
	
	// callback of the stop control button
	,stop :function(e) {
		if (wdgretro.expanded) {
			$('play').setStyle("display", "inline");
			$('stop').setStyle("display", "none");
		}
		$clear(wdgretro.interval)
	}
	
	// callback of the play control button
	,play :function(e) {
		if (wdgretro.expanded) {
			$('play').setStyle("display", "none");
			$('stop').setStyle("display", "inline");
		}
		wdgretro.interval=wdgretro.nextPic.periodical(wdgretro.slideDelay);
	}
	// resume le texte
	,resumeTexte : function (texte,finchaine,max){
		 var txt = '';
		 texte = texte.split(' ');
		 for(var i=0;i<texte.length;i++){
			 if( (txt.length+texte[i].length)<(max-finchaine.length) ) txt += texte[i]+' ';
			else return txt+finchaine;
		 }
		 return txt;
	}
}

window.addEvent('widgetload', function(){	
	wdgretro.cadre = [$('cadre1'),$('cadre2'),$('cadre3')];
	wdgretro.legend = [$('legend1'),$('legend2'),$('legend3')];
	// if the view is the expanded view
	if (wdgretro.expanded) {
		if(CWE._embded) {
			document.body.style.backgroundColor="#fff";
		}
		if(CWE.setTabBarStyle)
			CWE.setTabBarStyle('igoogle')
		CWE.setAdderButtonUrl('button_igoogle','http://fusion.google.com/add?source=atgs&moduleurl=widget.notrefamille.com/parisretro1900/google/parisretro1900.xml');				
		$('header').getParent().id="accueil_panel";
		// CWE Issue
		$('header').getParent().setStyle('height',(CWE.height-$('tabedit').getSize().size.y)+'px');
		$('next').addEvent('click', wdgretro.next);
		$('stop').addEvent('click', wdgretro.stop);
		$('play').addEvent('click', wdgretro.play);
		$('previous').addEvent('click', wdgretro.previous);
		$('arrondissement').addEvent('change', wdgretro.loadXml);
		wdgretro.generateAbout();
	
	} else {
		$('loadingMask').setStyle('height','100%');
	}
    wdgretro.loadXml();
	
});

