/*
   ========================================================
        script: image-flow
        author: Gerard Ferrandez - [Ge1doot]
          date: March 15, 2008
           maj: May 24, 2008 - AJAXification bank images
          site: http://www.dhteumeuleu.com
       license: CC-BY-NC - do not remove this notice
   ========================================================
*/
var imageObjectArray = [];

var imf = function () {
	/* //////////// ==== private methods ==== //////////// */
	var lf = 0;
	var instances = [];
	/* ===== read file ==== */
/***	
	var AJAX = (function(AJAX){
		return function(url){
//			alert("inAJAX");
			var ajax = AJAX();
			// lets wait for the state change
			alert("about to check state change");
		    ajax.onreadystatechange  = function()
			{ 
				alert("readystate: " + ajax.readyState);
	        	if(ajax.readyState  == 4) {
					
					if(ajax.status  == 200) { 
					}
         		}

    		}; 
			alert ("url:"+url);
			ajax.open("GET", url, false);
			ajax.send("");
			return ajax;

		};
	})(
	
		function() {
//			alert("here");
			var xhr; 
    		try {
    			alert("trying non IE"); 
    			xhr = new XMLHttpRequest();   
    			alert("success non IE"); 
    			}
    		catch (e) {
				try {   
	    			alert("trying Microsoft"); 
					xhr = new ActiveXObject('Microsoft.XMLHTTP');    
	    			alert("success Microsoft"); 
					}
        		catch (e2) {
          			try {   
		    			alert("trying Msxml2"); 
          				xhr = new ActiveXObject('Msxml2.XMLHTTP');
		    			alert("success Msxml2"); 
          				}
					catch (e3) {  xhr = false;   }
				}
			}

			return xhr;			
			
		}
	);

/*----
	this.XMLHttpRequest ?
		function() {return new XMLHttpRequest;} :
		function() {return new ActiveXObject("Microsoft.XMLHTTP");
		}

***/

	var AJAX = (function(AJAX){
		return function(url){
			var ajax = AJAX();
			ajax.open("GET", url, false);
			ajax.send("");
			return ajax;
		};
	})(this.XMLHttpRequest ?
		function() {return new XMLHttpRequest;} :
		function() {return new ActiveXObject("Microsoft.XMLHTTP");}
	);

/* ===== custom getElementsByClass ==== */
	function getElementsByClass (object, tag, className) {
		var o = object.getElementsByTagName(tag);
		for ( var i = 0, n = o.length, ret = []; i < n; i++)
			if (o[i].className == className) ret.push(o[i]);
		if (ret.length == 1) ret = ret[0];
		return ret;
	}
	/* ===== crossbrowsers addEvent ==== */
	function addEvent (o, e, f) {
		if (window.addEventListener) o.addEventListener(e, f, false);
		else if (window.attachEvent) r = o.attachEvent('on' + e, f);
	}
	/* //////////// ==== ImageFlow Constructor ==== //////////// */
	function ImageFlow(xmlfile) {
//		alert("xml file = " + xmlfile);

		this.scr        = false;

 		/* ---- parse xml ---- */
		var bank = AJAX(xmlfile).responseXML.getElementsByTagName("bank").item(0).getElementsByTagName("img");
		this.NF = bank.length;
		for (var i = 0; i < this.NF; i++) {
			var img = bank.item(i);
			var val = function (tag) {
				return img.getElementsByTagName(tag).length ?
					img.getElementsByTagName(tag).item(0).firstChild.nodeValue : false;
			}
			/* ---- create images ---- */
			try {
				imageObjectArray[i] = new Diapo(this, i, val("thumb"), val("src"), val("title"), val("caption"),val("target") || '_self');
			} catch (e) {
				alert("Problem loading images " + e);
			}
			
		}
		return false;
	     
	}
	/* //////////// ==== Diapo Constructor ==== //////////// */
	Diapo = function (parent, N, thumb, src, title, text, target) {
//        alert("in element assignment: parent:"+ parent +" thumb:" + thumb);
		this.parent        = parent;
		this.N             = N;
		this.thumb	       = thumb;
		this.src	       = src;
		this.title         = title;
		this.text          = text;
		this.target        = target;
		this.loaded        = false;
		/* ---- display external link ---- */
		
	}
	/* //////////// ==== Diapo prototype ==== //////////// */
	Diapo.prototype = {
		/* ==== HTML rendering ==== */
		/* ==== diapo onclick ==== */
		click : function () {
			/* ---- stop autoscroll ---- */
			this.parent.time = 0;
			this.parent.time_out = this.parent.time_start;
			if (this.parent.view == this.N) {
				clickhere(this.target);
			} else {
				/* ---- select diapo ---- */
				this.parent.view = this.N;
				this.parent.calc();
			}
			return false;
		}
	}
	/* //////////// ==== public methods ==== //////////// */
	return {
	
		/* ==== initialize script ==== */
		create : function (div, xmlfile) {
			/* ---- instanciate imageFlow ---- */
			/* getting the proper object based on browser */
//			alert ("in Create 2");
			
			var load = function () {
//				alert(" In load function");
				var loaded = false;
				var i = instances.length;
				// while (i--) if (instances[i].oCont == div) loaded = true;
				
//				alert("about to check loaded " + loaded);
				if (!loaded) {
					/* ---- push new imageFlow instance ---- */
//					alert("before the newer push " + " " + xmlfile);
					try {
						instances.push(
							new ImageFlow(xmlfile)
						);
					} catch (instex) {
						alert("Problem loading images " + instex);
					}
//					alert("about to load images");
					loadImages();
			/* ---- init script (once) ---- */
					if (!imf.initialized) {
						imf.initialized = true;
					}
				}
			}
			/* ---- window onload event ---- */
			addEvent(window, 'load', function () { load(); });
		}
	}
}();

// related functions

	var currentPix = 0;
	var arrowIndex = 0;
	var MaxThumbNails = 3;
	
	function getElementsByClass (object, tag, className) {
		var o = object.getElementsByTagName(tag);
		for ( var i = 0, n = o.length, ret = []; i < n; i++)
			if (o[i].className == className) ret.push(o[i]);
		if (ret.length == 1) ret = ret[0];
		return ret;
	}

	
	function loadImages() {
		//alert("loading Images");
		if (imageObjectArray == null){
			alert ("no pictures to display");
		}
		var size = imageObjectArray.length;
		if (size > MaxThumbNails) {
			size = MaxThumbNails;
		}
		
		displayThumbs(0, size);
	
		var descriptionDiv = document.getElementById('photoDescription');
//		var titleClass = getElementsByClass(descriptionDiv, 'div', 'title');
//		titleClass.innerHTML = imageObjectArray[0].title;
		
		var photoDiv = document.getElementById('mainPhotoDiv');
		var photoClass = getElementsByClass(photoDiv, 'img', 'mainPhoto');
		photoClass.src = imageObjectArray[0].src;
        photoClass.alt = imageObjectArray[0].text;
	}

	function displayThumbs(startIndex, size){
		for (i = 0; i <  size; i++){
			var imageObject = imageObjectArray[startIndex++];
			var whichDiv = 'divPix_' + i;
			var whichPix = 'thumb_' + i;
//			alert("whichdiv = " + whichDiv);
			var currentDiv = document.getElementById(whichDiv);
			currentDiv.style.display = "inline";
			var breakout = getElementsByClass(currentDiv, 'img', whichPix);
			breakout.src = imageObject.thumb;
			breakout.alt = imageObject.text;
		}
	}
	
	function clickhere(opendiv) {
		for(var k = 0; k < homeDivs.length; k++){ 
			if (homeDivs[k] == opendiv) {
				document.getElementById(homeDivs[k]).style.display = "inline";
			}else {
				document.getElementById(homeDivs[k]).style.display = "none";
			}
		}	
	}
	
	function enlargeThumb(index) {
		var displayIndex = 0;
		if ((arrowIndex + index) <= imageObjectArray.length ){
			displayIndex = arrowIndex + index;
		} else {
			displayIndex = imageObjectArray.length;
		}
		enlarge(displayIndex);	
	}
	function enlarge(index){
		var descriptionDiv = document.getElementById('photoDescription');
		var photoDiv = document.getElementById('mainPhotoDiv');
		var photoClass = getElementsByClass(photoDiv, 'img', 'mainPhoto');
//		var titleClass = getElementsByClass(descriptionDiv, 'div', 'title');
//		alert("arrowIndex = " + arrowIndex + " enlarge index = " + index);
//		alert("displaying image object["+index+"]");
//        alert("displaying image object["+index+"] " + imageObjectArray[index].text);
		photoClass.style.align = "center";
		photoClass.src = imageObjectArray[index].src;
        photoClass.alt = imageObjectArray[index].text;
//		titleClass.title.innerHTML = imageObjectArray[index].title;
		currentPix = index;
	}

	function nextLargeImage(){
		if (currentPix + 1 >= imageObjectArray.length){
			alert ("There are no more photos");
			return;
		}
		currentPix++;
		enlarge(currentPix);
		
	}
	
	function previousLargeImage() {
		if (currentPix - 1 < 0){
			alert ("There are no more photos");
			return;
		}
		currentPix--;
		enlarge(currentPix);
	}


	function nextImage(){
		if (imageObjectArray.length < MaxThumbNails){
			alert ("There are only " + imageObjectArray.length + " available in this gallery");
			return;
		}
		if ((arrowIndex + MaxThumbNails) >= imageObjectArray.length){
			alert ("There are no more photos");
			var arrowDiv = document.getElementById('rightArrow');
			arrowDiv.disabled = true;
			return;
		}
		var arrowDiv = document.getElementById('leftArrow');
		arrowDiv.disabled = false;
		arrowIndex++;
		displayThumbs(arrowIndex, MaxThumbNails);
		
	}
	
	function previousImage() {
		if (imageObjectArray.length < MaxThumbNails){
			alert ("There are only " + imageObjectArray.length + " available in this gallery");
			return;
			
		}
		if (arrowIndex <= 0){
			var arrowDiv = document.getElementById('leftArrow');
			arrowDiv.disabled = true;
			return;
		}
		var arrowDiv = document.getElementById('rightArrow');
		arrowDiv.disabled = false;
		arrowIndex--;
		displayThumbs(arrowIndex, MaxThumbNails);

		
	}



