/*
jQuery common scripts for Loewy ScreenSlider
- Sukiman, suki@webexcellence.net, http://www.webexcellence.net/
*/
(function($){
	$.loewy = $.loewy || {};
	
	$.fn.loewyScreenSlider = function(o) {
		return this.each(function() {
			new $.loewy.screenSlider(this,o);
		});
	}
	
	$.fn.loewyScreenSliderDestroy = function(o) {
		return this.each(function() {
			obj = $.data(this,"loewyScreenSlider");
			if (obj) {
				obj.destroy();
			}
		});
	}
	
	$.fn.loewyScreenSliderReinit = function(o) {
		return this.each(function() {
			obj = $.data(this,"loewyScreenSlider");
			if (obj) {
				obj.init();
			}
		});
	}
	
	$.fn.loewyScreenSliderDisable = function(o) {
		return this.each(function() {
			obj = $.data(this,"loewyScreenSlider");
			if (obj) {
				obj.disable();
			}
		});
	}
	
	$.loewy.screenSlider = function(obj, o) {
		var self = this;
		this.fnext = false;
		this.fprev = false;
		this.navTimeout = 0;
		this.sleep = 0;
		this.ready = false;
		this.options = $.extend({
			width: null,
			height: null,
			e: obj,
			navShowSpeed: 400,
			navHideSpeed: 400,
			navTimeout: 2000,
			slideSpeed: 1800
		}, o);
		this.curInfo = undefined;
		
		$.data(obj, "loewyScreenSlider", this);
		
		this.showNavPrev = function() {
			$(self.options.e).parent().find("a.prev").stop();
			if (jQuery.browser.msie) {
				self.btnPrev.css("visibility","visible");
			} else {
				self.btnPrev.animate({opacity: 1}, self.options.navShowSpeed, function() { $(this).css("display","block"); } );
			}
			self.fprev = true;
		};
		
		this.showNavNext = function() {
			$(self.options.e).parent().find("a.next").stop();
			if (jQuery.browser.msie) {
				self.btnNext.css("visibility","visible");
			} else {
				self.btnNext.animate({opacity: 1}, self.options.navShowSpeed, function() { $(this).css("display","block"); } );
			}
			self.fnext = true;
		};
		
		this.hideNavPrev = function() {
			$(self.options.e).parent().find("a.prev").stop();
			if (jQuery.browser.msie) {
				self.btnPrev.css("visibility","hidden");
			} else {
				self.btnPrev.animate({opacity: 0}, self.options.navHideSpeed, function() {  } );
			}
			self.fprev = false;
		};
		
		this.hideNavNext = function() {
			self.btnNext.stop();
			if (jQuery.browser.msie) {
				self.btnNext.css("visibility","hidden");
			} else {
				self.btnNext.animate({opacity: 0}, self.options.navHideSpeed, function() { } );
			}
			self.fnext = false;
		};
		
		this.showNav = function(e) { 
			if (self.navTimeout != 0) {
				window.clearTimeout(self.navTimeout);
			}
			if (self.sleep) {
				self.sleep = 0;
				//return;
			}
			
			if (self.curScreen > 0 && !self.fprev) {
				self.showNavPrev();
			}
			if (self.curScreen < self.screenCount-1 && !self.fnext) {
				self.showNavNext();
			}
			
			self.hideTimeout();
		};
		this.hideNav = function(e) { 
			if (self.navTimeout != 0) {
				window.clearTimeout(self.navTimeout);
			}
			
			if (self.fprev) {
				self.hideNavPrev();
			}
			if (self.fnext) {
				self.hideNavNext();
			}
		};
		this.prev = function(e) {
			if (!self.ready) { return false; }
			if (self.screenCount > 1) {
				c = self.curScreen || 0;
				c--;
				if (c < 0) { 
					//c = self.screenCount - 1; 
					return ;
				}

				x = self.pos(c);
				$(self.options.e).find("ul").stop();
				$(self.options.e).find("ul").animate( {left: x+"px"}, self.options.slideSpeed, "easeOutCubic" );
				
				self.curScreen = c;
				self.navState();
			}
			if ($(this).is("a")) {
				e.preventDefault();
				$(this).blur();
			}
			return false;
		};
		this.next = function(e) {
			if (!self.ready) { return false; }
			if (self.screenCount > 1) {
				c = self.curScreen || 0;
				c++;
				if (c > (self.screenCount-1)) {
					//c = 0;
					return;
				}
				
				x = self.pos(c);
				$(self.options.e).find("ul").stop();
				$(self.options.e).find("ul").animate( {left: x+"px"}, self.options.slideSpeed, "easeOutCubic" );
				self.curScreen = c;
				self.navState();
			}
			if ($(this).is("a")) {
				e.preventDefault();
				$(this).blur();
			}
			return false;
		}
		this.init();
	}
	
	$.extend($.loewy.screenSlider.prototype, {
		init: function() {
			var self = this;
			var opt = self.options;
			var p = $(opt.e);
			if (self.options.width == null) {
				self.options.width = p.outerWidth();
			}
			if (self.options.height == null) {
				self.options.height = p.innerHeight();
			}
			
			var arrowRightImg = new Image();
			var arrowLeftImg = new Image();
			arrowRightImg.src = "/images/slide_right.png";
			arrowLeftImg.src = "/images/slide_left.png";
			
			self.ready = false;
			self.screenCount = $("li",p).length;
			self.curScreen = 0;
			self.totalWidth = self.screenCount * opt.width;
			self.parent = $((p.parent())[0]);
			self.btnNext =  $((self.parent.find("a.next"))[0]);
			self.btnPrev = $((self.parent.find("a.prev"))[0]);
			
			$("ul",p).css("width", self.totalWidth+"px");
			
			if (self.screenCount > 1) {
				
				self.parent.bind("mouseover", self.showNav);
				self.parent.bind("mousemove", self.showNav);
				self.parent.bind("mouseout", self.hideNav);
				
				if (jQuery.browser.msie) {
					self.parent.bind("click", function(e) {
						if (!self.init) { return false; }
						if (e.srcElement.tagName == "DIV") {
							npos = self.btnNext.position();
							ppos = self.btnPrev.position();
							
							e.offsetY-=31;
							
							if (e.offsetX >= npos.left && e.offsetX <= npos.left + self.btnNext.width()) {
								if (e.offsetY >= npos.top && e.offsetY <= npos.top + self.btnNext.height()) {
									self.next();
								}
							}
							
							if (e.offsetX >= ppos.left && e.offsetX <= ppos.left + self.btnPrev.width()) {
								if (e.offsetY >= ppos.top && e.offsetY <= ppos.top + self.btnPrev.height()) {
									self.prev();
								}
							}
						}
						return false;
					});
				}
				
			}
			
			if (jQuery.browser.msie) {
				
				self.btnNext.css("visibility","hidden");
				self.btnPrev.css("visibility","hidden");
				self.btnNext.css("display","block");
				self.btnPrev.css("display","block");
			}

			self.btnNext.bind("click", self.next);
			self.btnPrev.bind("click", self.prev);
			
			self.curScreen = 0;
			self.hideNavPrev();
			self.hideNavNext();
			self.fprev = false;
			self.fnext = false;
			
			self.initRel();
			
			if (self.screenCount < 2) {
				self.btnNext.css("visibility","hidden");
				self.btnPrev.css("visibility","hidden");
				self.btnNext.css("display","none");
				self.btnPrev.css("display","none");
			}
			
			if (self.screenCount > 1) {
				self.showNav();
			}
			
			self.ready = true;
			
		},
		destroy: function() {
			var self = this;
			var opt = self.options;
			var p = $(opt.e);
			
			self.ready = false;
			
			if (self.navTimeout > 0) {
				window.clearTimeout(self.navTimeout);
				self.navTimeout = 0;
			}
			
			if (self.screenCount > 1) {
				
				/*
				self.parent.unbind("mouseover", self.showNav);
				self.parent.unbind("mousemove", self.showNav);
				self.parent.unbind("mouseout", self.hideNav);
				
				self.parent.unbind("click");
				
				self.btnNext.unbind("click", self.next);
				self.btnPrev.unbind("click", self.prev);
				*/
			}
			
			
		},
		disable: function() {
			var self = this;
			self.ready = false;
		},
		pos: function(i) {
			return -this.options.width*i;
		},
		navState: function() {
			var self = this;
			if (self.curScreen <= 0 && self.fprev) {
				self.hideNavPrev();
				
			} else if (self.curScreen > 0 && !self.fprev) {
				self.showNavPrev();
			}
			if (self.curScreen >= self.screenCount-1 && self.fnext) {
				self.hideNavNext();
				
			} else if (self.curScreen < self.screenCount-1 && !self.fnext) {
				self.showNavNext();
				
			}
			
			self.hideTimeout();
			
			self.initRel();
		},
		hideTimeout: function() {
			var self = this;
			
			if (self.navTimeout > 0) {
				window.clearTimeout(self.navTimeout);
				self.navTimeout = 0;
			}
			
			if (self.fprev || self.fnext) {
				
				self.navTimeout = window.setTimeout(function() {
					self.sleep = 1;
					self.hideNav();
				}, self.options.navTimeout);
			}
		},
		initRel: function() {
			var self = this;
			var opt = self.options;
			var p = $(opt.e);
			if ($("li:eq("+self.curScreen+")",p).length > 0) {
				li = $($("li:eq("+self.curScreen+")",p)[0]);
				li_rel = li.attr("rel") || "";
				if (li_rel) {
					if ($("#info_"+li_rel).length > 0) {
						if (self.curInfo != undefined) {
							self.curInfo.hide();
						}
						info = $($("#info_"+li_rel)[0]);
						info.show();
						self.curInfo = info;
					}
				}
				
				li_value = li.attr("title") || "";
				$("#projectname").html(li_value);
			}
		}
	});
})($);