var canvas, stage, bounds;
var xmlurl;
var imagesArray = [];
var totalImages;
var loadedImages = 0;
var bitmapArray = [];
var overlay01, overlay02, textoverlay;
var counter = 0;
var tween1, tween2, tween3;
var autoTween = true;
var buttonLeft, buttonRight;
var interval = 1000;
var t;
var timer_is_on = 0;
var hit;
var controls = false;
var random = false;


$(document).ready(function() {
	Ticker.setFPS(20);
	Ticker.addListener(window);
	
	canvas = $('#canvas-gallery').get(0);

	bounds = new Rectangle();
	bounds.width = canvas.width;
	bounds.height = canvas.height;

	stage = new Stage(canvas);
	stage.enableMouseOver();
	
	xmlurl = fvars.xmlurl;
	
	var overlay01img = new Image();
	overlay01img.onload = function( event ) { overlay01 = new Bitmap(event.target); overlay01.y = -400;}
	overlay01img.src = fvars.imagesurl + "/transition-overlay-01.png";
	
	
	var overlay02img = new Image();
	overlay02img.onload = function( event ) { overlay02 = new Bitmap(event.target); overlay02.y = fvars.height-1; overlay02.x = 1 }
	overlay02img.src = fvars.imagesurl + "/transition-overlay-01.png";
	
	if(fvars.overlay !== undefined){
		var textoverlayimg = new Image();
		textoverlayimg.onload = function( event ) { textoverlay = new Bitmap(event.target) }
		textoverlayimg.src = fvars.overlay;
	}
	
	if(fvars.timerdelay !== undefined){
		interval = fvars.timerdelay * 1000;
	}
	
	if(fvars.controls !== undefined){
		controls = fvars.controls;
	}
	
	if(fvars.random !== undefined){
		random = fvars.random;
	}
	
	if(controls){
		createButtons();
		createHitArea();
	}
	
	$.ajax({
		url: xmlurl,
		success: parseGalleryXml
	});
});

function onMouseOverStage(){
	autoTween = false;
	clearTimer();
}

function onMouseOutStage(){
	autoTween = true;
	startTimer();
}

function parseGalleryXml( data ){

	if (window.DOMParser) {
		parser = new DOMParser();
		xmlDoc = parser.parseFromString(data,"text/xml");
	} else {// Internet Explorer
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = "false";
		xmlDoc.loadXML(data);
	}
	
	var tempArr = xmlDoc.getElementsByTagName('picture');
	totalImages = tempArr.length;
		
	var tempIntArr = [];
	for(var j=0; j<totalImages; j++){
		tempIntArr[j] = j;
	}
	if(random){
		fisherYates(tempIntArr);
	}
	
	
	for( var i=0; i<totalImages; i++ ) {
		imagesArray[i] = new Object();
		imagesArray[i].title = tempArr[tempIntArr[i]].getElementsByTagName('title')[0].textContent;
		imagesArray[i].caption = tempArr[tempIntArr[i]].getElementsByTagName('caption')[0].textContent;
		imagesArray[i].desc = tempArr[tempIntArr[i]].getElementsByTagName('desc')[0].textContent;
		imagesArray[i].url = tempArr[tempIntArr[i]].getElementsByTagName('url')[0].textContent;
		imagesArray[i].width = tempArr[tempIntArr[i]].getElementsByTagName('width')[0].textContent;
		imagesArray[i].height = tempArr[tempIntArr[i]].getElementsByTagName('height')[0].textContent;
		
		imagesArray[i].img = new Image();
		imagesArray[i].img.onload = function(event){
			var img = event.target;
			var bitmap = new Bitmap(img);
			bitmapArray.push(bitmap);
			imageLoaded();
		};
		imagesArray[i].img.src = tempArr[tempIntArr[i]].getElementsByTagName('url')[0].textContent;
	}
}

function createButtons(){
	var g = new Graphics();
	g.setStrokeStyle(8).beginStroke(Graphics.getRGB(255,255,255));
	g.beginFill(Graphics.getRGB(128,128,128));
	g.drawRoundRect(0, 0, 60, 60, 10);
	g.endStroke();
	g.setStrokeStyle(0);
	g.beginFill(Graphics.getRGB(255, 255, 255));
	g.moveTo(40, 15);
	g.lineTo(40, 45).lineTo(15, 30).lineTo(40, 15);
	g.endStroke();
	g.beginFill(Graphics.getRGB(255, 255, 255, 0.1));
	g.drawRect(0, 60, 60, 30);
	g.endFill();
	
	var s = new Shape(g);
	s.regX = 30;
	s.regY = 30;

	buttonLeft = s;
	buttonLeft.x = 100;
	buttonLeft.y = fvars.height * 0.5;
	buttonLeft.alpha = 0.75;
	buttonLeft.onMouseOver = function(event) { canvas.style.cursor = 'pointer'; buttonLeft.alpha = 1; onMouseOverStage();};
	buttonLeft.onMouseOut = function(event) { canvas.style.cursor = 'default'; buttonLeft.alpha = 0.75; onMouseOutStage();};
	buttonLeft.onClick = buttonClicked;
	
	buttonRight = s.clone();
	buttonRight.x = fvars.width - 100;
	buttonRight.y = fvars.height * 0.5;
	buttonRight.scaleX = -1;
	buttonRight.alpha = 0.75;
	buttonRight.onMouseOver = function(event) { canvas.style.cursor = 'pointer'; buttonRight.alpha = 1; onMouseOverStage();};
	buttonRight.onMouseOut = function(event) { canvas.style.cursor = 'default'; buttonRight.alpha = 0.75; onMouseOutStage();};
	buttonRight.onClick = buttonClicked;
}

function createHitArea(){
	var g = new Graphics();
	g.beginFill(Graphics.getRGB(255, 255, 255, 0.1));
	g.drawRect(0, 0, fvars.width, fvars.height);
	
	hit = new Shape(g);
	hit.onMouseOver = function(){ onMouseOverStage(); };
	hit.onMouseOut = function(){ onMouseOutStage() };
}

function buttonClicked(event){
	if(event.target == buttonLeft){
		clearTimer();
		prevImage();
	} else if(event.target == buttonRight) {
		clearTimer();
		nextImage();
	}
}

function imageLoaded() {
	loadedImages++;
	if(loadedImages == totalImages){
		displayImage();
	}
}

function displayImage() {
	replaceSoftwareContent(imagesArray[counter].caption, imagesArray[counter].desc);
	
	for(var i=0; i<totalImages; i++){
		stage.addChild(bitmapArray[i]);
		bitmapArray[i].alpha = 0;
	}
	
	bitmapArray[0].alpha = 1;

	stage.addChild(overlay01);
	stage.addChild(overlay02);
	
	if(fvars.overlay !== undefined){
		stage.addChild(textoverlay);
	}
	
	if(controls){
		stage.addChild(hit);
	
		stage.addChild(buttonLeft);
		stage.addChild(buttonRight);
	}
	
	stage.update();
	startTimer();
}

function nextImage(){
	timer_is_on = 0;
	tween1 = Tween.get(overlay01).to({y:fvars.height}, 1500).call(function(){ overlay01.y = -400; onComplete(); });
	tween2 = Tween.get(overlay02).to({y:-400}, 1500).call(function(){ overlay02.y = fvars.height-1; });

	if(counter < totalImages-1){
		tween3 = Tween.get(bitmapArray[counter+1]).wait(750).to({alpha:1}, 750).call(function(){ 
			bitmapArray[counter-1].alpha = 0;
		});
		
		replaceSoftwareContent(imagesArray[counter+1].caption, imagesArray[counter+1].desc);
		
		counter++;
	} else if (counter >= totalImages-1){
		bitmapArray[0].alpha = 1;
		tween3 = Tween.get(bitmapArray[counter]).wait(750).to({alpha:0}, 750);
		replaceSoftwareContent(imagesArray[0].caption, imagesArray[0].desc);
		counter = 0;
	}
}

function prevImage(){
	timer_is_on = 0;
	tween1 = Tween.get(overlay01).to({y:fvars.height}, 1500).call(function(){ overlay01.y = -400; onComplete(); });
	tween2 = Tween.get(overlay02).to({y:-400}, 1500).call(function(){ overlay02.y = fvars.height-1; });

	if(counter >= 1){
		bitmapArray[counter-1].alpha = 1;
		tween3 = Tween.get(bitmapArray[counter]).wait(750).to({alpha:0}, 750);
		replaceSoftwareContent(imagesArray[counter-1].caption, imagesArray[counter-1].desc);
		counter--;
	} else if(counter == 0) {
		tween3 = Tween.get(bitmapArray[totalImages-1]).wait(750).to({alpha:1}, 750);
		replaceSoftwareContent(imagesArray[totalImages-1].caption, imagesArray[totalImages-1].desc);
		counter = totalImages-1;
	}
}

function onComplete(){
	startTimer();
}

function startTimer(){
	if(!autoTween){
		return;
	}
	
	if(!timer_is_on){
		t = setTimeout("nextImage()", interval);
		timer_is_on = 1;
	}
}

function clearTimer(){
	if(t !== undefined){
		clearTimeout(t);
		timer_is_on = 0;
	}
}

function tick(event){
	stage.update();
}

function fisherYates ( myArray ) {
  var i = myArray.length;
  if ( i == 0 ) return false;
  while ( --i ) {
     var j = Math.floor( Math.random() * ( i + 1 ) );
     var tempi = myArray[i];
     var tempj = myArray[j];
     myArray[i] = tempj;
     myArray[j] = tempi;
   }
}
