// JavaScript Document
var noResults = {
	overID: 'over',
	overOBJ: '',
	overlayID: 'overlay',
	overlayOBJ: '',
	overlayWidth: '',
	overlayHeight: '',
	innerContID: 'noResultsContainer',
	innerContOBJ: '',
	innerContWidth: '',
	innerContHeight: '',
	
	init: function() {			
		
		if(document.getElementById(noResults.overlayID) && document.getElementById('searchResults') && document.getElementById('searchResults').value == 0) {			
			noResults.overOBJ = document.getElementById(noResults.overID);
			noResults.overlayOBJ = document.getElementById(noResults.overlayID);
			noResults.innerContOBJ = document.getElementById(noResults.innerContID);						
			
			noResults.overlayWidth = noResults.overOBJ.offsetWidth;
			noResults.overlayHeight = noResults.overOBJ.offsetHeight;								
			
			noResults.displayOL();
			noResults.displayIC();			
		}
		
	},
	
	closeIL: function() {		
		new Effect.Fade(noResults.innerContID);
		noResults.hideOL();
	},
	
	displayOL: function() {		
		noResults.overlayOBJ.style.display = '';
		
		noResults.overlayOBJ.style.left = "20px";		
		noResults.overlayOBJ.style.width = noResults.overlayWidth - 51 + 'px';		
		noResults.overlayOBJ.style.height = (noResults.overlayHeight - 20) + 'px';
		new Effect.Appear(noResults.overlayID, { duration: 0.2, from: 0.0, to: 0.8 });
		
	},
	
	hideOL: function() {
		//Element.hide(noResults.overlayID);
		new Effect.Fade(noResults.overlayID);		
	},
	
	displayIC: function() {
		var x_offset;
		var y_offset;
		var right_margin = 58;
		var left_margin = 192;
		var top_offset = 195;
		
		arrayPageSize = dU.getPageSize();
		
		//set display to '' so that width and height can be gathered
		noResults.innerContOBJ.style.display = '';		
		
		//set width and height class vars for inner Container
		noResults.innerContWidth = noResults.innerContOBJ.offsetWidth;
		noResults.innerContHeight = noResults.innerContOBJ.offsetHeight;		
		
		x_offset = (((arrayPageSize[0] - left_margin - right_margin) - noResults.innerContWidth)/2) + left_margin;
		y_offset = ((noResults.overlayHeight - noResults.innerContHeight - 20)/2) + 187;
		//y_offset = top_offset;
		
		//set offset for overlay dim container
		noResults.innerContOBJ.style.top = y_offset + 'px';
		noResults.innerContOBJ.style.left = x_offset + 'px';	
		
		new Effect.Appear(noResults.innerContID);		
	}
}

var modelDir = {	
	overID: 'over',
	overOBJ: '',
	overlayID: 'overlay',
	overlayWidth: '',
	overlayHeight: '',
	innerContID: 'innerContainer',
	innerContOBJ: '',
	innerContWidth: '',
	innerContHeight: '',
			
	
	init: function() {	
		
		if(document.getElementById(modelDir.overlayID)) {
			modelDir.overOBJ = document.getElementById(modelDir.overID);
			modelDir.overlayOBJ = document.getElementById(modelDir.overlayID);
			modelDir.innerContOBJ = document.getElementById(modelDir.innerContID);						
			
			modelDir.overlayWidth = modelDir.overOBJ.offsetWidth;
			modelDir.overlayHeight = modelDir.overOBJ.offsetHeight;								
			
			modelDir.displayOL();
			modelDir.displayIC();			
		}
		
	},
	
	closeIL: function() {		
		new Effect.Fade(modelDir.innerContID);
		modelDir.hideOL();
	},
	
	displayOL: function() {		
		modelDir.overlayOBJ.style.display = '';
		
		modelDir.overlayOBJ.style.left = "20px";
		modelDir.overlayOBJ.style.width = modelDir.overlayWidth - 51 + 'px';
		modelDir.overlayOBJ.style.height = (modelDir.overlayHeight - 20) + 'px';
		new Effect.Appear(modelDir.overlayID, { duration: 0.2, from: 0.0, to: 0.8 });
		
	},
	
	hideOL: function() {
		//Element.hide(modelDir.overlayID);
		new Effect.Fade(modelDir.overlayID);		
	},
	
	displayIC: function() {
		var x_offset;
		var y_offset;
		var right_margin = 58;
		var left_margin = 192;
		var top_offset = 195;
		
		arrayPageSize = dU.getPageSize();
		
		//set display to '' so that width and height can be gathered
		modelDir.innerContOBJ.style.display = '';		
		
		//set width and height class vars for inner Container
		modelDir.innerContWidth = modelDir.innerContOBJ.offsetWidth;
		modelDir.innerContHeight = modelDir.innerContOBJ.offsetHeight;		
		
		x_offset = (((arrayPageSize[0] - left_margin - right_margin) - modelDir.innerContWidth)/2) + left_margin;
		y_offset = ((modelDir.overlayHeight - modelDir.innerContHeight - 20)/2) + 187;
		//y_offset = top_offset;
		
		//set offset for overlay dim container
		modelDir.innerContOBJ.style.top = y_offset + 'px';
		modelDir.innerContOBJ.style.left = x_offset + 'px';	
		
		new Effect.Appear(modelDir.innerContID);		
	}
}

var dU = {
	
	getStyle: function(el,styleProp) {
		var x = document.getElementById(el);
		if (x.currentStyle)
			var y = x.currentStyle[styleProp];
		else if (window.getComputedStyle)
			var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);		
		return y;
	},
	
	// getPageSize()
	// Returns array with page width, height and window width, height
	// Core code from - quirksmode.org
	// Edit for Firefox by pHaez
	//
	getPageSize: function() {
		
		var xScroll, yScroll;
		
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = document.body.scrollWidth;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		
		var windowWidth, windowHeight;
		if (self.innerHeight) {	// all except Explorer
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
	
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){	
			pageWidth = windowWidth;
		} else {
			pageWidth = xScroll;
		}
	
	
		arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
		return arrayPageSize;
	}
}

// onload.js - attachment of event listeners at page load (window.onload())

var cityOther = {			
		
		init: function() {			
			
			if(!document.getElementsByTagName)		
				return;	
	
			var all_inputs = document.getElementsByTagName('input');			
			
			//alert('Selects found => ' + all_selects.length);
			
			for(var i = 0; i < all_inputs.length; i++) 
			{				
				var current_input = all_inputs[i];				
				
				if(current_input.type == "radio" && current_input.name.search(/CityID/) != -1)		
				{					
					//toggle country
					cityOther.toggleOther(current_input);
					//alert(current_input.name);
					//add event handler
					addEvent(current_input,'click',cityOther.changeCity,false);		
				}
			}	
		},

		changeCity: function(e) {			
			//alert('Changing country');
			var focusBOOL = true;
			var local_target = findTarget(e);	
			
			cityOther.toggleOther(local_target, focusBOOL);			
		},
		
		toggleOther: function(element,focusBOOL) {
			var focusBOOL = (focusBOOL == null) ? false : focusBOOL;

			var div_id = element.name + "_text";
			var input_id = element.name + "_input"			
			
			if(element.value == "3" && element.checked && div_id != "") {	
				
				//show text box										
				Element.show(div_id);					
					
			} else if(div_id != "") {			
				//hide text box										
				Element.hide(div_id);				
			}
			
			//focus on other country text box
			if(focusBOOL == true) {									
				document.getElementById(input_id).focus();
				document.getElementById(input_id).value = "";
			}
		}			
}

var saveItem = {
	
	//DOM form element id's (constants)
	saveContainerID: "save_container_",	
	saveLinkID: "save_link_",	
	
	type: 'link',
	model_id: '',
	linkTarget: '',
	
  	init: function() {
		var activityElement;
		
    	if (!document.getElementById || !document.getElementsByTagName) {		
			return;
	  	} 
		
		var all_links = document.getElementsByTagName('a');			
		
		for(var i = 0; i < all_links.length; i++) 
		{				
			var current_link = all_links[i];			
		
			if(current_link.id.search(/save_link/) != -1)	{					
				addEvent(current_link, 'click', saveItem.insertSave, false);
				current_link.href = "#";
				current_link.onclick = cancelClickSafari;
			}
		}
  	},	

  	insertSave: function(e) {	
				
		var action = 'save';		
		var qs = '';		
		
		var local_target = findTarget(e);
		
		//travers to get to link node (Safari issue)
		local_target = linkTraverse(local_target);		
		
		if(local_target.nodeName.toLowerCase() == 'body') {
			return;	
		}
		
		//save target to class variable	
		saveItem.linkTarget = local_target;		
		
		//set class variables for model id		
		saveItem.model_id = local_target.id.substr(local_target.id.lastIndexOf("_") + 1);
		
		//determine action (save or remove)
		action = local_target.id.substr(0,local_target.name.indexOf("_"));			
		
		//build POST query string
		qs = 'model_id=' + saveItem.model_id + '&action=' + action;
		
		if(local_target) {		
			//new Effect.Fade(saveItem.saveContainerID + saveItem.model_id)
			new Ajax.Request('/saveAJAX.cfm', {method:'post', postBody:qs, onSuccess:saveItem.handlerFunc, onFailure:saveItem.errFunc, asynchronous:true});
		}	
		
		
	},    
	
	errFunc: function(t) {
		alert('Error ' + t.status + ' -- ' + t.statusText);
	},
	
	//For an XML response:
	
	handlerFunc: function(t) {		
		//alert(t.responseText);
		var xmlDoc = t.responseXML.documentElement;
		var responseBOOL;	
		var validNodeARR;
		var new_actionNodeARR;
		var new_action;
		var responseBOOL;				
		
		var validNodeARR = xmlDoc.getElementsByTagName('valid');
		var new_actionNodeARR = xmlDoc.getElementsByTagName('new_action');
		
		responseBOOL = validNodeARR[0].firstChild.nodeValue;
		new_action = new_actionNodeARR[0].firstChild.nodeValue;				
		
		if(responseBOOL == "TRUE") {
			saveItem.linkTarget.name = new_action + "_" + saveItem.type;
			if(new_action == "save") {
				saveItem.linkTarget.firstChild.nodeValue = "ADD TO MY MODELS";
				//alert($(saveItem.saveContainerID + saveItem.model_id).parentNode.className);
				$(saveItem.saveContainerID + saveItem.model_id).parentNode.className = 'favorites';
			}
			else {				
				saveItem.linkTarget.firstChild.nodeValue = "REMOVE FROM MY MODELS";	
				$(saveItem.saveContainerID + saveItem.model_id).parentNode.className = 'remove';
			}
			//alert(saveItem.saveContainerID + saveItem.model_id);
			new Effect.Highlight(saveItem.saveContainerID + saveItem.model_id);
			
		}
		
	}   
}

var slideShow = {
	
	//DOM form element id's (constants)
	nextID: "next",	
	prevID: "prev",
	playID: "play",	
	playBOOL: false,
	slideshowIntervalID: '',
	playButtonID: 'playButton',
	
	nextOBJ: '',
	prevOBJ: '',
	playOBJ: '',
		
	overID: 'over',
	overlayID: 'imgContainer',
	eventID: '',
	imgID: 'event_image',
	counterID: 'image_counter',
	currentImg: '1',
	
	overOBJ: '',
	overlayOBJ: '',
	
	linkTarget: '',
	newImageSRC: '',
	prevNode: '',
	nextNode: '',
	startTime: '',
	eventTitle: '',
	eventDate: '',
	
  	init: function() {
		var activityElement;
		
    	if (!document.getElementById || !document.getElementsByTagName) {		
			return;
	  	} 
		
		if(document.getElementById(slideShow.overlayID)) {
			//setup overlays
			slideShow.overOBJ = document.getElementById(slideShow.overID);
			slideShow.overlayOBJ = document.getElementById(slideShow.overlayID);
			
			slideShow.nextOBJ = document.getElementById(slideShow.nextID);
			slideShow.prevOBJ = document.getElementById(slideShow.prevID);
			slideShow.playOBJ = document.getElementById(slideShow.playID);
				
			//add next event
			addEvent(slideShow.nextOBJ.firstChild, 'click', slideShow.changePic, false);
			slideShow.nextOBJ.firstChild.href = "#";
			slideShow.nextOBJ.firstChild.onclick = cancelClickSafari;
			
			//add prev event
			addEvent(slideShow.prevOBJ.firstChild, 'click', slideShow.changePic, false);
			slideShow.prevOBJ.firstChild.href = "#";
			slideShow.prevOBJ.firstChild.onclick = cancelClickSafari;		
			
			//add play event
			addEvent(slideShow.playOBJ.firstChild, 'click', slideShow.playPic, false);
			slideShow.playOBJ.firstChild.href = "#";
			slideShow.playOBJ.firstChild.onclick = cancelClickSafari;
			
			//get event id
			all_divs = document.getElementsByTagName('div');
			for(i = 0; i < all_divs.length; i++) {
				if(all_divs[i].id.search(/eventID/) != -1) {
					slideShow.eventID = all_divs[i].id.substr(all_divs[i].id.lastIndexOf("_") + 1);
					//alert(slideShow.eventID);
				}
			}
			//slideShow.eventID = slideShow.playOBJ.firstChild.id.substr(slideShow.playOBJ.firstChild.id.lastIndexOf("_") + 1);	
			
			slideShow.overlayWidth = slideShow.overOBJ.offsetWidth;
			slideShow.overlayHeight = slideShow.overOBJ.offsetHeight;
			
			slideShow.preLoadImgs();
		}
		
  	},
	
	changePic: function(e) {
		var local_target = findTarget(e);
		
		//traverse to get to link node (Safari issue)
		local_target = linkTraverse(local_target);		
		
		if(local_target.nodeName.toLowerCase() == 'body') {
			return;	
		}
		
		//save target to class variable	
		slideShow.linkTarget = local_target;	
		pictureNumber = slideShow.getPictureNumber(slideShow.linkTarget);		
		
		//if slideshow currently playing, stop it to avoid clashing
		if(slideShow.playBOOL == true) {
			slideShow.playPic();	
		}
		
		//get next/prev picture
		slideShow.grabPicture(pictureNumber);
	
	},	

	playPic: function(e) {		
		slideShow.playBOOL = slideShow.playBOOL == true ? false : true;	
		
		if(slideShow.playBOOL == true) {			
			slideShow.changePlayImg('play');
			slideShow.playSlideshow();
			slideShow.slideshowIntervalID = setInterval("slideShow.playSlideshow()",3000);
		} else {
			slideShow.changePlayImg('pause');
			clearInterval(slideShow.slideshowIntervalID);	
		}
		//alert('Play Slideshow' + local_target.nodeValue);
	},
	
	playSlideshow: function() {		
		pictureNumber = slideShow.getPictureNumber(slideShow.nextOBJ.firstChild);		
		slideShow.grabPicture(pictureNumber);
	},
	
	changePlayImg: function(buttonImg) {		
		var newButton = buttonImg == 'play' ? 'pause' : 'play';
		$(slideShow.playButtonID).alt = newButton; 
		$(slideShow.playButtonID).src = $(slideShow.playButtonID).src.replace(new RegExp(buttonImg),newButton);		
	},
	
	getPictureNumber: function(link_target) {
		return link_target.id.substr(link_target.id.lastIndexOf("_") + 1);	
	},
	
  	grabPicture: function(pictureNumber) {	
		
		var qs = '';						
		
		//build POST query string
		qs = 'EventID=' + slideShow.eventID + '&picture=' + pictureNumber;
		//alert(qs);
		slideShow.currentImg = pictureNumber;
		slideShow.preSwap();
		new Ajax.Request('/slideshowAJAX.cfm', {method:'post', postBody:qs, onSuccess:slideShow.handlerFunc, onFailure:slideShow.errFunc, asynchronous:true});		
		
	},
	
	preLoadImgs: function() {	
		
		var qs = '';						
		
		//build POST query string
		qs = 'EventID=' + slideShow.eventID;		
		
		new Ajax.Request('/preLoadImgsAJAX.cfm', {method:'post', postBody:qs, onSuccess:slideShow.pLhandlerFunc, onFailure:slideShow.errFunc, asynchronous:true});		
		
	},
	
	preSwap: function() {
		//slideShow.overlayOBJ.style.display = 'none';
		
		slideShow.overlayWidth = slideShow.overOBJ.offsetWidth;
		slideShow.overlayHeight = slideShow.overOBJ.offsetHeight;
				
		slideShow.overlayOBJ.style.width = slideShow.overlayWidth + 'px';
		slideShow.overlayOBJ.style.height = slideShow.overlayHeight + 'px';
		
		document.getElementById('loaderDiv').style.top = Math.floor((slideShow.overlayHeight/2) - (70/2)) + 'px';
		
		//Effect.Appear(slideShow.overlayID, {duration: 0.1, from: 0.0, to: 1.0});			
	},
	
	/*postSwap: function() {
		//Effect.Fade(slideShow.overlayID);			
	},*/
	
	updateButton: function(buttonDiv,pictureNumber) {
		//set container div to inline and update picture id on <a> tag		
		document.getElementById(buttonDiv).style.display = 'inline';			
		document.getElementById(buttonDiv).firstChild.id = "picture_" + pictureNumber;			
	},
	
	errFunc: function(t) {
		alert('Error ' + t.status + ' -- ' + t.statusText);
	},
	
	//For an XML response:	
	pLhandlerFunc: function(t) {		
		//alert(t.responseText);
		
		var xmlDoc = t.responseXML.documentElement;
		var responseBOOL;	
		var validNodeARR;				
		
		//var validNodeARR = xmlDoc.getElementsByTagName('valid');
		responseBOOL = xmlDoc.getElementsByTagName('valid')[0].firstChild.nodeValue;				
		
		if(responseBOOL == "TRUE") {
			eventImgsARR = xmlDoc.getElementsByTagName('image');
			for(i = 0; i < eventImgsARR.length; i++) {
				img = new Image();	
				img.src = eventImgsARR[i].firstChild.nodeValue;
			}			
		}		
	},
	
	//For an XML response:	
	handlerFunc: function(t) {		
		//alert(t.responseText);
		
		var xmlDoc = t.responseXML.documentElement;
		var responseBOOL;	
		var validNodeARR;				
		
		//var validNodeARR = xmlDoc.getElementsByTagName('valid');
		responseBOOL = xmlDoc.getElementsByTagName('valid')[0].firstChild.nodeValue;				
		
		if(responseBOOL == "TRUE") {
			slideShow.newImageSRC = xmlDoc.getElementsByTagName('image')[0].firstChild.nodeValue;	
		
			slideShow.prevNode = xmlDoc.getElementsByTagName('prev')[0];
			slideShow.nextNode = xmlDoc.getElementsByTagName('next')[0];
			
			if(slideShow.eventID == 'FEATURED') {
				slideShow.eventTitle = xmlDoc.getElementsByTagName('eventTitle')[0].firstChild.nodeValue;
				slideShow.eventDate = xmlDoc.getElementsByTagName('eventDate')[0].firstChild.nodeValue;
			}
			
			newDate = new Date();
			
			//create img object for preloading
			img = new Image();			
			
			//preload image into browser cache
			slideShow.startTime = newDate.getTime();
			img.src = slideShow.newImageSRC
			
			//when image loads, do postSwap procedure
			//img.onload = slideShow.postSwap;
			addEvent(img, 'load', slideShow.postSwap, false);
			
		}		
	},
	
	postSwap: function() {		
		newDate = new Date();
		//alert('Time to load: ' + (newDate.getTime() - slideShow.startTime));
			
		//update previous and next buttons w/new page numbers (or hide them)
		slideShow.updateButton('prev',slideShow.prevNode.attributes.getNamedItem("picture").value);
		slideShow.updateButton('next',slideShow.nextNode.attributes.getNamedItem("picture").value);
		
		//fade out loader (future)		
		
		//switch image		
		document.getElementById(slideShow.imgID).src = slideShow.newImageSRC;
		
		//change counter number
		document.getElementById(slideShow.counterID).firstChild.nodeValue = slideShow.currentImg;
		
		if(slideShow.eventID == 'FEATURED') {			
			document.getElementById('eventTitle').firstChild.nodeValue = slideShow.eventTitle;
			document.getElementById('eventDate').firstChild.nodeValue = slideShow.eventDate;
		}
	},
	
	delay: function() {
		//alert('img loaded!');
		//alert('Width: ' + this.width + ', Height: ' + this.height);
		document.getElementById(slideShow.imgID).src = slideShow.newImageSRC;
    	//setTimeout("imgshow()", 3000);
	}
}

addEvent(window, 'load', saveItem.init, false);
addEvent(window, 'load', cityOther.init, false);
addEvent(window, 'load', slideShow.init, false);