
Ajax.Responders.register({
  onCreate: function() {
    if($('indicator') && Ajax.activeRequestCount>0)
      $('indicator').show();
  },
  onComplete: function() {
    if($('indicator') && Ajax.activeRequestCount==0)
      $('indicator').hide();
  }
});


var Slideshow = Class.create();
Slideshow.prototype = {
		current: 0,
		caption_id: "hero_slide_caption",
		image_id: "hero_slide_image",
		pager: "slide_pager",
		pager_prefix: "hero_slide_pager_",
		paused: false,
		cycle_time:12,
		close_time: .5,
		open_time: 1,
		initialize: function(slides) {
			this.slides = slides;
			this.preloadSlides(slides);
		},
		preloadSlides: function(slides) {
			$A(slides).each(function (el,index) {
				MM_preloadImages(el.public_url);
			});
		},
		startup: function() { 
			new PeriodicalExecuter(function(pe) {
				if (this.paused) {
					pe.stop();
				} else {
					this.go();
				}
			}.bind(this), this.cycle_time); // change image every 5 seconds
		},
		current_slide: function() {
			return this.slides[this.current];
		},
		prev_id: function() {
			var prev = this.current-1;
			if (prev < 0) {
				prev = this.slides.length-1;
			}
			return prev;
		},
		next_id: function() {
			var next = this.current+1;
			if (next > this.slides.length-1) {
				next = 0;
			}
/*			alert(next);*/
			return next;
		},
		next: function () {
			this.go();
		},
		prev: function () {
			this.current = this.prev_id();
			this.goToCurrent();
		},
		go: function(slide_id, witheffect) {
			if (slide_id != undefined) {
				this.current = slide_id;
			} else {
				this.current = this.next_id();
			}
			this.goToCurrent(witheffect);
		},
		cycle: function(htid, newcontent, witheffect) { 
			if (witheffect != undefined && witheffect == false) {
					$(htid).update(newcontent);
			} else {
			this.closeEffect(htid, { 
								duration: this.close_time, 
								fps: 24,
								afterFinish: function() {
										$(htid).update(newcontent);
										this.openEffect(htid, { duration: this.open_time,	fps: 24, queue:'end'}); 
								}.bind(this)
			});
			}
		},
		pause: function(pause_for) {
			this.paused = true;
		},
		goToCurrent: function(witheffect) {
			//cycle image
			this.cycle(this.image_id,this.image_html(this.current_slide()),witheffect);
			//cycle caption_id
			this.cycle(this.caption_id,this.caption_html(this.current_slide()),witheffect);
			this.selectCurrentPager();
		},
		selectCurrentPager: function () {
			$$("#"+this.pager+" li").each(function(el,i) {
					el.removeClassName('selected');
			});
			$(this.pager_prefix + this.current).addClassName('selected');
		},
		caption_html: function(slide) {
			var html = "<p>"+slide.caption
			if (slide.url != "") {
				html += "&nbsp;<a href=\""+slide.url+"\">More Info</a></p>";
			}
			return html;
		},
		image_html: function(slide) {
			var html = "";
			if (slide.url != "") { html += "<a href=\""+slide.url+"\">";	}
			html += "<img src=\""+slide.public_url+"\" alt=\""+slide.title+"\" />";
			if (slide.url != "") { html += "</a>"; }
			return html;
		},
		openEffect: Effect.Appear,
		closeEffect: Effect.Fade
}; 

var Lightbox = Class.create();
Lightbox.prototype = Object.extend(new Slideshow,{
	overlay: 'overlay',
	lb_element: 'lightbox',
	caption_id: "lb_current_caption",
	image_id:	"lb_current_image",
	close_button_id: "lb_close",
	cycle_time: 12,
	initialize: function(lbel,slides) {
		this.lb_element = lbel;
		this.slides 		= slides;
		this.preloadSlides(slides);
	},
	open: function() {
		this.expandOverlay();
		$(this.overlay).show();
		$(this.close_button_id).show();
		this.openEffect(this.lb_element);
		new Effect.ScrollTo('content');
	},
	close: function() {
		$(this.close_button_id).hide();
		this.closeEffect(this.lb_element);
		setTimeout(function() {this.closeEffect(this.overlay); }.bind(this),500);
		this.pause();
		this.current = 0;
	},
	selectCurrentPager: function () {},
	caption_html: function(slide) {
		return "<p>"+slide.content+"</p>";
	},
	image_html: function(slide) {
		return "<img src=\""+slide.public_url+"\" alt=\""+slide.title+"\" />";
	},
	expandOverlay: function () {
		var arrayPageSize = getPageSize();
		$(this.overlay).setHeight(arrayPageSize[1]);
	},
	openEffect: Effect.Appear,
	closeEffect: Effect.Fade
});

var VideoLightbox = Class.create();
VideoLightbox.prototype = Object.extend(new Lightbox,{
	overlay: 'overlay',
	lb_element: 'vlightbox',
	caption_id: "vlb_current_caption",
	image_id:	"vlb_current_image",
	close_button_id: "vlb_close",
	cycle_time: 12,
	initialize: function(lbel,slides) {
		this.lb_element = lbel;
		this.slides 		= slides;
	},
	caption_html: function(slide) {
		return "";//"<p>"+slide.content+"</p>";
	},
	image_html: function(slide) {
		return "<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0\" width=\"470\" height=\"380\" id=\"effiesvideoplayer\" align=\"middle\">" +
			"<param name=\"allowScriptAccess\" value=\"sameDomain\" />" +
			"<param name=\"movie\" value=\"/swf/effiesvideoplayer.swf?urltoload=" + slide.video_url +"\" />" +
			"<param name=\"quality\" value=\"high\" />" +
			"<param name=\"bgcolor\" value=\"#000000\" />" +
			"<embed src=\"/swf/effiesvideoplayer.swf?urltoload=" + slide.video_url +"\" quality=\"high\" bgcolor=\"#ffffff\" width=\"470\" height=\"380\" name=\"effiesvideoplayer\" align=\"middle\" allowScriptAccess=\"sameDomain\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" />" +
		"</object>";
	},
	openEffect: function(el) {
		$(el).show();
	}
});

var Effies = {
	imageSelector: {
		current_page: 1,
		attached_photos_id: 'attached_photos_thumbs',
		getSelectableThumbs: function (form_num, page) {
			var params = 'form_num=' + form_num + '&';
			if (page)  { params += 'page=' + page + '&'; }
			new Ajax.Request(
					'/assets/photo_selector',
					{
						method: 'post',
						evalScripts:true,
						parameters: params
					});
		},
		nextPage: function (form_num) {
			this.current_page++;
			return this.refreshThumbs(form_num);
		},
		previousPage: function (form_num) {
			this.current_page--;
			return this.refreshThumbs(form_num);
		},
		refreshThumbs: function (form_num) {
			return this.getSelectableThumbs(form_num,this.current_page);
		},
		select: function(new_src,form_id,im_id) {
			var form_num = form_id.replace(/image_id_/,'');

			$(form_id).value = im_id;
			$('current_image_'+form_num).update(this.currentImageHTML(new_src,form_id));
			$('current_image_'+form_num).show();
/*						alert(form_num);*/
/*			return false;*/
		},
		deselect: function(form_id) {
			var form_num = form_id.replace(/image_id_/,'');
			$(form_id).value = "";
			$('current_image_'+form_num).update('');
		},
		currentImageHTML: function(src,form_id) {
			return "<h4>Current Image</h4><img src=\""+src+"\" alt=\"Current Image\" /><br /><a href=\"#\" onclick=\"Effies.imageSelector.deselect('"+form_id+"');return false;\">Deselect Image</a>";
		}
	},
	updateSort: function(sortable_id,url) {
		new Ajax.Request(
				url,
				{
					method: 'post',
					evalScripts:true, 
					parameters: Sortable.serialize(sortable_id)
				});
	},
	nav: {
		updateSort: function(sortable_id) {
			return Effies.updateSort(sortable_id,'/pages/update_nav_sort');
		},
		toggleSort: function() {
			$('navigations').toggleClass('sorting');
		},
		toggleSub: function(toggler) {
			toggler = $(toggler);
			var sub = $(toggler.id.replace(/nav_toggler_/,'sub_navigation_'));
			sub.toggle();
			this.toggleToggler(toggler);
		},
		toggleToggler: function(toggler) {
			toggler = $(toggler);
			if (toggler.innerHTML == ' - ') {
				toggler.update(' + ');
			} else {
				toggler.update(' - ');
			}
		}
	},
	footer: {
		updateSort: function(sortable_id) {
			return Effies.updateSort(sortable_id,'/pages/update_footer_sort');
		},
		toggleSort: function() {
			$('footers').toggleClass('sorting');
		}
	},
	form: {
		validate: function(form_id,message_id,message) {
			if (!message) {
				message = "Please complete all fields and then press submit";
			}
			var errors = false;
			var names = this.collectRequiredNames(form_id);
			$A(names).each(function(el,i) {
				if ($F(el).blank()) {
					errors = true;
				}
			});
			if (errors) {
				$(message_id).update(message);
			}
			return !errors;
		},
		collectRequiredNames: function (form_id) {
			var names = new Array();
			$$('#'+form_id+' input.required').each(function (el,i){
				names.push(el.name);
			});
			return names;
		},
		empty: function(text) {
			return (text.strip == '');
		}
	}
};
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
Element.addMethods({
	toggleClass: function(elem,css) { 
		if (Element.hasClassName(elem,css)) {
			Element.removeClassName(elem,css);
			return false;
		} else {
			Element.addClassName(elem,css);
			return true;
		}
	},
	setHeight: function(elem,h) {
   		elem = $(elem);
    	elem.style.height = h +"px";
	},
	setZ: function (elem,z) {
		$(elem).style.zIndex = z;
	}
});
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){
	
	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;
}
