//GLOBALS
var current = 0;
var totalNodes = null;
var timerObj;
var stoptimer = false;
//ARRAYS
var arrImage = new Array();
var arrTimer = new Array();
var arrDir = new Array();
var arrMulti = new Array();
var arrMultiCount = new Array();
var arrSingle = new Array();
var arrDebug = new Array();
var arrOveride = new Array();
var arrSingleLink = new Array();
var arrMultiLink1 = new Array();
var arrMultiLink2 = new Array();
var arrMultiLink3 = new Array();
var arrMultiY1 = new Array();
var arrMultiY2 = new Array();
var arrMultiY3 = new Array();
var arrMultiX1 = new Array();
var arrMultiX2 = new Array();
var arrMultiX3 = new Array();
var arrMultiW1 = new Array();
var arrMultiW2 = new Array();
var arrMultiW3 = new Array();
var arrMultiH1 = new Array();
var arrMultiH2 = new Array();
var arrMultiH3 = new Array();
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function initLoaded(){
	var msg = "";
	if(arrOveride[current]=="0"){
		if(arrSingle[current]=="1") {
			$('#panoImg'+current).click(function(){window.location.href = arrSingleLink[current];}).css('cursor','pointer');
		}else if(arrMulti[current]=="1"){
			msg = validateCount(arrMultiCount[current],msg,current); //validate requestd number of image map links. max = 3
			if(arrMultiCount[current]>0) msg = validateUrl(arrMultiLink1[current],msg,1);
			if(arrMultiCount[current]>1) msg = validateUrl(arrMultiLink2[current],msg,2);
			if(arrMultiCount[current]>2) msg = validateUrl(arrMultiLink3[current],msg,3);
			if(arrMultiCount[current]>0) msg = validateY(arrMultiY1[current],arrMultiH1[current],msg,1);
			if(arrMultiCount[current]>1) msg = validateY(arrMultiY2[current],arrMultiH2[current],msg,2);
			if(arrMultiCount[current]>2) msg = validateY(arrMultiY3[current],arrMultiH3[current],msg,3);
			if(arrMultiCount[current]>0) msg = validateX(arrMultiX1[current],arrMultiW1[current],msg,1);
			if(arrMultiCount[current]>1) msg = validateX(arrMultiX2[current],arrMultiW2[current],msg,2);
			if(arrMultiCount[current]>2) msg = validateX(arrMultiX3[current],arrMultiW3[current],msg,3);
			if(arrMultiCount[current]>0) msg = validateWidth(arrMultiW1[current],msg,1);
			if(arrMultiCount[current]>1) msg = validateWidth(arrMultiW2[current],msg,2);
			if(arrMultiCount[current]>2) msg = validateWidth(arrMultiW3[current],msg,3);
			if(arrMultiCount[current]>0) msg = validateHeight(arrMultiH1[current],msg,1);
			if(msg.length > 0){
				alert(msg);
			}else{
				switch(arrMultiCount[current]){
					case "1":
						$('#panocontainer').append('<a href="'+arrMultiLink1[current]+'" class="click1"></a>');
						break;
					case "2":
						$('#panocontainer').append('<a href="'+arrMultiLink1[current]+'" class="click1"></a>');
						$('#panocontainer').append('<a href="'+arrMultiLink2[current]+'" class="click2"></a>');
						break;
					case "3":
						$('#panocontainer').append('<a class="click1" href="'+arrMultiLink1[current]+'"></a>');
						$('#panocontainer').append('<a class="click2" href="'+arrMultiLink2[current]+'"></a>');
						$('#panocontainer').append('<a class="click3" href="'+arrMultiLink3[current]+'"></a>');
						break;
				}
				$('#panocontainer .click1').css('top',arrMultiY1[current]).css('left',arrMultiX1[current]).css('width',arrMultiW1[current]).css('height',arrMultiH1[current]);
				$('#panocontainer .click2').css('top',arrMultiY2[current]).css('left',arrMultiX2[current]).css('width',arrMultiW2[current]).css('height',arrMultiH2[current]);
				$('#panocontainer .click3').css('top',arrMultiY3[current]).css('left',arrMultiX3[current]).css('width',arrMultiW3[current]).css('height',arrMultiH3[current]);
				if(arrDebug[current]=="1"){
					$('#panocontainer .click1').css('border','3px solid red').append('<div class="debugtext">1</div>');
					$('#panocontainer .click2').css('border','3px solid red').append('<div class="debugtext">2</div>');
					$('#panocontainer .click3').css('border','3px solid red').append('<div class="debugtext">3</div>');
				}
			}
		}
	}
	if(stoptimer==false){
		timerObj = $.timer(arrTimer[current],function(timer){onTimerEvent(timer)});
	}
	$("#lnklssprev").bind("click", {index: -1} , loadImg);
	$("#lnklssnext").bind("click", {index: 1} , loadImg);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function validateCount(cnt,msg,node){
	if(msg.length == 0){
		if((cnt>3)||(cnt<=0)||(cnt=='')||!IsNumeric(cnt)) return 'WARNING - MULTICOUNT FOR ITEM '+ node +', IS GREATER THAN 0 OR LESS THEN 4.';
		else return "";
	}else{
		return msg;
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function validateY(top,height,msg,node){
	if(msg.length == 0){
		var panoheight = 237;
		var parsedtop = Left(top,(top.length - 2));
		var parsedheight = Left(height,(height.length - 2));
		if( top == '' ) return 'PLEASE ENTER A Y VALUE FOR ITEM ' + node;
		else if( ( Right( top, 2) != 'px') || (Right(height,2) != 'px' ) )return 'PLEASE MAKE SURE THAT "PX" IS PRESENT ON THE HEIGHT OR Y COORD OF ITEM ' + node;
		else if( ( parseInt(parsedtop) < 0 ) || ( parseInt(parsedtop) + parseInt(parsedheight) > parseInt(panoheight) ) ) return 'PLEASE ENTER A Y COORD FOR ITEM ' + node + ' GREATER THAN EQUAL TO OR GREATER THAN 0 AND LESS THAN ' + (panoheight - parsedheight); 
		else return "";		
	}else{
		return msg;
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function validateX(left,width,msg,node){
	if(msg.length == 0){
		var panowidth = 650;
		var parsedleft = Left(left,(left.length - 2));
		var parsedwidth = Left(width,(width.length - 2));
		if( left == '' ) return 'PLEASE ENTER AN X VALUE FOR ITEM ' + node;
		else if( ( Right( left, 2) != 'px') || (Right(width,2) != 'px' ) )return 'PLEASE MAKE SURE THAT "PX" IS PRESENT ON THE WIDTH OR X COORD OF ITEM ' + node;
		else if( ( parseInt(parsedleft) < 0 ) || ( parseInt(parsedleft) + parseInt(parsedwidth) > parseInt(panowidth) ) ) return 'PLEASE ENTER AN X COORD FOR ITEM ' + node + ' GREATER THAN OR EQUAL TO 0 AND LESS THAN ' + (panowidth - parsedwidth); 
		else return "";		
	}else{
		return msg;
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function validateWidth(width,msg,node){
	if(msg.length == 0){
		var panowidth = 650;
		var parsedwidth = Left(width,(width.length - 2));
		if( width == '' ) return 'PLEASE ENTER A WIDTH VALUE FOR ITEM ' + node;
		else if( (parseInt(parsedwidth) > parseInt(panowidth)) ||  ( parseInt(parsedwidth) <= 0 ) ) return 'PLEASE ENTER A WIDTH VALUE FOR ITEM ' + node + ' LESS THAN ' + panowidth; 
		else return "";		
	}else{
		return msg;
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function validateHeight(height,msg,node){
	if(msg.length == 0){
		var panoheight = 237;
		var parsedheight = Left(height,(height.length - 2));
		if( height == '' ) return 'PLEASE ENTER A HEIGHT VALUE FOR ITEM ' + node;
		else if( (parseInt(parsedheight) > parseInt(panoheight)) ||  ( parseInt(parsedheight) <= 0 ) ) return 'PLEASE ENTER A HEIGHT VALUE FOR ITEM ' + node + ' LESS THAN ' + panoheight; 
		else return "";		
	}else{
		return msg;
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function validateUrl(url,msg,num){
	if(msg.length == 0){
		var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
		if(regexp.test(url)) return "";
		else return 'WARNING - URL '+num+' IS INVALID.';
	}else{
		return msg;
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
jQuery.timer = function (interval, callback){
	var interval = interval || 100;
	if (!callback) return false;
	_timer = function (interval, callback) {
		this.stop = function () { clearInterval(self.id); };
		this.internalCallback = function () { callback(self); };
		this.reset = function (val) {
			if (self.id) clearInterval(self.id);
			var val = val || 100;
			this.id = setInterval(this.internalCallback, val);
		};
		this.interval = interval;
		this.id = setInterval(this.internalCallback, this.interval);
		var self = this;
	};
	return new _timer(interval, callback);
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function pause(){
	$("#lnklssprev").unbind("click", loadImg);
	$("#lnklssnext").unbind("click", loadImg);
	timerObj.stop();
	stoptimer = true;
	$("#lnklsspause").remove();
	$("#panocontainer").append('<a id="lnklssplay" href="javascript:play()"></a>');
	$("#lnklssprev").bind("click", {index: -1} , loadImg);
	$("#lnklssnext").bind("click", {index: 1} , loadImg);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function play(){
	$("#lnklssprev").unbind("click", loadImg);
	$("#lnklssnext").unbind("click", loadImg);
	timerObj.reset(arrTimer[current]);
	$("#lnklssplay").remove();
	stoptimer = false;
	$("#panocontainer").append('<a id="lnklsspause" href="javascript:pause();"></a>');
	$("#lnklssprev").bind("click", {index: -1} , loadImg);
	$("#lnklssnext").bind("click", {index: 1} , loadImg);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function onTimerEvent(timer){
	timer.stop();
	loadImg2(1);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function loadImg2(inc){
	$('#panocontainer .click1').remove();
	$('#panocontainer .click2').remove();
	$('#panocontainer .click3').remove();
	var removeid = $("#panocontainer img").attr('id');
	current = current + inc;
	if(current < 0) current = totalNodes - 1;
	else if(current == totalNodes) current = 0;
	$('<img/>').bind('load readystatechange',function(){if(this.complete);}).attr('src',arrDir[current] + arrImage[current] + '.jpg').attr('id','panoImg'+current).attr('class','imgloaded').appendTo('#panocontainer'); 
	$('#panoImg'+current).fadeIn('slow',function(){
		$('#' + removeid).remove();
		initLoaded();
	});					
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function loadImg(event){
	$("#lnklssprev").unbind("click", loadImg);
	$("#lnklssnext").unbind("click", loadImg);
	$("#lnklsspause").remove();
	$("#lnklssplay").remove();
	$("#panocontainer").append('<a id="lnklssplay" href="javascript:play();"></a>');
	stoptimer = true;
	timerObj.stop();
	var inc = event.data.index;
	loadImg2(inc);				
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
$(window).load(function () {
	$('#loader').fadeIn('slow',function(){
		$('<img/>').bind('load readystatechange',function(){if (this.complete);}).attr('src',arrDir[current] + arrImage[current] + '.jpg').attr('id','panoImg'+current).attr('class','imgloaded').appendTo('#panocontainer'); 
		$('#loader').fadeOut('slow',function(){
			$('#loader').remove();
			$('#panoImg'+current).fadeIn('slow', function(){
				initLoaded();
			});
		});
	});
});
/////////////////////////////////////////////////////////////////////////////////////////////////////////
$(document).ready(function () {
	if(jQuery.browser.msie && parseInt(jQuery.browser.version, 10) == 6) {
	  try {
	    document.execCommand("BackgroundImageCache", false, true);
	  } catch(err) { }
	}
	$.ajax({
		type: "GET", cache: false, url: xmlfile, dataType: "xml", success: function(xml) {
			var cnt = 0;
			$(xml).find('pano').each(function(){
				arrDir[cnt] = $(this).attr('dir');
				arrDebug[cnt] = $(this).attr('debug');
				arrImage[cnt] = $(this).find('image').text();
				arrTimer[cnt] = $(this).find('timer').text();
				arrOveride[cnt] = $(this).find('overide').text();
				arrMulti[cnt] = $(this).find('multi').text();
				arrMultiCount[cnt] = $(this).find('multicount').text();
				arrMultiLink1[cnt] = $(this).find('multilink1').text();
				arrMultiLink2[cnt] = $(this).find('multilink2').text();
				arrMultiLink3[cnt] = $(this).find('multilink3').text();
				arrMultiY1[cnt] = $(this).find('multiY1').text();
				arrMultiY2[cnt] = $(this).find('multiY2').text();
				arrMultiY3[cnt] = $(this).find('multiY3').text();
				arrMultiX1[cnt] = $(this).find('multiX1').text();
				arrMultiX2[cnt] = $(this).find('multiX2').text();
				arrMultiX3[cnt] = $(this).find('multiX3').text();
				arrMultiW1[cnt] = $(this).find('multiW1').text();
				arrMultiW2[cnt] = $(this).find('multiW2').text();
				arrMultiW3[cnt] = $(this).find('multiW3').text();
				arrMultiH1[cnt] = $(this).find('multiH1').text();
				arrMultiH2[cnt] = $(this).find('multiH2').text();
				arrMultiH3[cnt] = $(this).find('multiH3').text();
				arrSingle[cnt] = $(this).find('single').text();
				arrSingleLink[cnt] = $(this).find('singlelink').text();
				$.preload([ arrImage[cnt] ], {base:arrDir[cnt],ext:'.jpg'});
				cnt = cnt + 1;
			}); 
			totalNodes = cnt;
		}
	});	
});