/* jquey noConflict */
(function($) {
	/* PageInit */
	$(document).ready(function(){
		if ($.browser.msie && $.browser.version < 7 ){
			$('#nav>li').mouseenter(function(){
				$(this).addClass('hover');
				if($(this).find('.drop').length) hideSelectBoxes($(this).find('.drop'));
			}).mouseleave(function(){
				$(this).removeClass('hover');
				if($(this).find('.drop').length) showSelectBoxes($(this).find('.drop'));
			});
		}
		gal1 = $('.gallery-fade-wrapper').galleryObject({
			changeHeight: true,
			duration: 500,
			//autoRotation: 7000,
			autoRotation: false,
			effect:'fade',
			nextBtn: '.next>a',
			prevBtn: '.prev>a',
			listOfSlides: '.gallery-fade>li',
			switcher: '.switcher>li>a'
		});
		$('.gallery-fade-wrapper .gallery-fade').mouseenter(function(){
			gal1.stop();
		}).mouseleave(function(){
			gal1.play();
		});
		/*
		if(!($.browser.msie)){
			$("img").not('.no-lazyload').lazyload({
				placeholder : "img/separator07.gif",
				effect: "fadeIn"
			});
		}
		*/
		if(!$.browser.msie){
			initFadeNav();
		}
		initSlide();
		initFancybox();
		initMapFunc();
		initMinistryGallery();
	});
	
	function initMinistryGallery() {
		var _duration = 300; //ms
		$('div.ministry-box ul.gallery li').each(function(){
			var _holder = $(this);
			var _slide = $('div.text-box', _holder);
			var _title = $('div.title-box', _holder);
			var _slideH = _slide.show().height();
			var _startPos = _slide.css('top');
			_slide.hide();
			_holder.mouseenter(function(){
				_title.hide();
				_slide.css('display','block').stop().animate({top:0},_duration);
			}).mouseleave(function(){
				_slide.stop().animate({top:_startPos},_duration, function(){
					$(this).hide();
					_title.show();
				});
			})
		});
	}
	
	function initMapFunc(){
		var mapHolds = $('.map-box');
		var delay = 500;
		var activeClass = 'active';
		var holdShowClass = 'hold-show';
		mapHolds.each(function(){
			var mapHold = $(this);
			var hold = $('div.info-box', mapHold)
			var boxes = $('div.main-info-boxes > div', hold);
			var subboxes = $('div.sub-info-boxes > div', hold);
			var navLinks = $('ul.map-nav a', mapHold).not(':first');
			var subNav = $('ul.sub-nav', mapHold)
			var subNavLinks = $('a', subNav);
			var imgMapHovers = $('#map-hover li', mapHold);
			var imgMapAreas = $('#map area');
			var timer;
			navLinks.each(function(i){
				var navLink = $(this);
				var box = boxes.eq(i);
				var imgMapHover = imgMapHovers.eq(i);
				var imgMapArea = imgMapAreas.eq(i);
				navLink.mouseenter(function(){
					imgMapHover.addClass('activestate');
					timer = setTimeout(function(){
						hold.show();
						box.addClass(activeClass);
					}, delay);
				}).mouseleave(function(){
					clearTimeout(timer);
					box.removeClass('active');
					hold.hide();
					imgMapHover.removeClass('activestate');
				});
				imgMapArea.mouseenter(function(){
					imgMapHover.addClass('activestate');
					navLink.addClass('active');
					timer = setTimeout(function(){
						hold.show();
						box.addClass('active')
					}, delay);
				}).mouseleave(function(){
					clearTimeout(timer);
					imgMapHover.removeClass('activestate');
					box.removeClass('active');
					hold.hide();
					navLink.removeClass('active');
				})
			});
			subNavLinks.each(function(i){
				var subNavLink = $(this);
				var subbox = subboxes.eq(i);
				subNavLink.mouseenter(function(){
					subbox.addClass('active');
				}).mouseleave(function(){
					subbox.removeClass('active');
				});
			});
			subNav.mouseenter(function(){
				hold.show();
			}).mouseleave(function(){
				hold.hide();
			})
		});
	}
	
	/* FancyBox */
	function initFancybox(){
		if(typeof($.fn.fancybox)=='function'){
			$('a[rel*="lightbox"]').fancybox({
				cyclic : 'true',
				transitionIn : 'fade',
				transitionOut : 'fade',
				overlayShow : true,
				overlayColor : '#000',
				overlayOpacity : 0.5,
				padding: 0,
                showCloseButton: false
			});
			$("body").delegate("#fancybox-inner .popup-b a.prev, #fancybox-inner .popup-b a.prev-btn, #fancybox-inner .popup-b .note a.prev-link", "click", function(){
				$('#fancybox-left').trigger('click');
				return false;
			});
			$("body").delegate("#fancybox-inner .popup-b a.next, #fancybox-inner .popup-b a.next-btn, #fancybox-inner .popup-b .note a.next-link", "click", function(){
				$('#fancybox-right').trigger('click');
				return false;
			});
			$("body").delegate("#fancybox-inner a.close", "click", function(){
				$.fancybox.close();
				return false;
			});

            $('a[rel="lightbox_popup"]').fancybox({
                transitionIn : 'fade',
                transitionOut : 'fade',
                overlayShow : true,
                overlayColor : '#000',
                overlayOpacity : 0.5,
                padding: 0,
                autoScale: false,
                height: 550,
                width: 800,
                showCloseButton: true
            });
		}
	}
	
	/* initOpenClose */
	function initSlide(){
		var speed = 400;
		$('.accordion>li').each(function(){
			var holder = $(this);
			var openLink = holder.find('a.opener');
			var Link = holder.find('>a');
			var slide_block = holder.find('>.slide-block');
			if(!slide_block.length){
				openLink.hide();
			}
			var open_class = 'open';
			if (!holder.hasClass(open_class)){
				slide_block.hide();
			}
			openLink.click(function(){
				if(!holder.hasClass(open_class)){
					slide_block.slideDown(speed);
					holder.addClass(open_class);
				}else{
					slide_block.slideUp();
					holder.removeClass(open_class);
				}
				return false;
			});
		});
	}
	
	/* FadeNav */
	function initFadeNav(){
		var els = $('#nav li:has(">.drop")');
		var speed = 300;
		var firstZ = 10;
		var hoverZ = 11;
		els.each(function(){
			var el = $(this);
			var drop = el.find('>.drop');
			drop.css({opacity:0}).show();
			drop.hide();
			el.mouseenter(function(){
				el.css({zIndex:hoverZ});
				drop.show().stop().animate({
					opacity:1
				}, {queue:false, duration:speed, complete:function(){
					drop.css({opacity:'auto'});
				}});
			}).mouseleave(function(){
				el.css({zIndex:firstZ});
				drop.stop().animate({
					opacity:0
				}, {queue:false, duration:speed, complete:function(){
					drop.hide();
				}});
			});
		});
	}
	
	/* lazyLoad */
	$.fn.lazyload = function(options) {
	    var settings = {
	        threshold    : 0,
	        failurelimit : 0,
	        event        : "scroll",
	        effect       : "show",
	        container    : window
	    };
	            
	    if(options) {
	        $.extend(settings, options);
	    }
	
	    /* Fire one scroll event per scroll. Not one scroll event per image. */
	    var elements = this;
	    if ("scroll" == settings.event) {
	        $(settings.container).bind("scroll", function(event) {
	            
	            var counter = 0;
	            elements.each(function() {
	                if ($.abovethetop(this, settings) ||
	                    $.leftofbegin(this, settings)) {
	                        /* Nothing. */
	                } else if (!$.belowthefold(this, settings) &&
	                    !$.rightoffold(this, settings)) {
	                        $(this).trigger("appear");
	                } else {
	                    if (counter++ > settings.failurelimit) {
	                        return false;
	                    }
	                }
	            });
	            /* Remove image from array so it is not looped next time. */
	            var temp = $.grep(elements, function(element) {
	                return !element.loaded;
	            });
	            elements = $(temp);
	        });
	    }
	    
	    this.each(function() {
	        var self = this;
	        
	        /* Save original only if it is not defined in HTML. */
	        if (undefined == $(self).attr("original")) {
	            $(self).attr("original", $(self).attr("src"));     
	        }
	
	        if ("scroll" != settings.event || 
	                undefined == $(self).attr("src") || 
	                settings.placeholder == $(self).attr("src") || 
	                ($.abovethetop(self, settings) ||
	                 $.leftofbegin(self, settings) || 
	                 $.belowthefold(self, settings) || 
	                 $.rightoffold(self, settings) )) {
	                    
	            if (settings.placeholder) {
	                $(self).attr("src", settings.placeholder);      
	            } else {
	                $(self).removeAttr("src");
	            }
	            self.loaded = false;
	        } else {
	            self.loaded = true;
	        }
	        
	        /* When appear is triggered load original image. */
	        $(self).one("appear", function() {
	            if (!this.loaded) {
	                $("<img />")
	                    .bind("load", function() {
	                        $(self)
	                            .hide()
	                            .attr("src", $(self).attr("original"))
	                            [settings.effect](settings.effectspeed);
	                        self.loaded = true;
	                    })
	                    .attr("src", $(self).attr("original"));
	            };
	        });
	
	        /* When wanted event is triggered load original image */
	        /* by triggering appear.                              */
	        if ("scroll" != settings.event) {
	            $(self).bind(settings.event, function(event) {
	                if (!self.loaded) {
	                    $(self).trigger("appear");
	                }
	            });
	        }
	    });
	    
	    /* Force initial check if images should appear. */
	    $(settings.container).trigger(settings.event);
	    
	    return this;
	
	};
	
	/* Convenience methods in jQuery namespace.           */
	/* Use as  $.belowthefold(element, {threshold : 100, container : window}) */
	
	$.belowthefold = function(element, settings) {
	    if (settings.container === undefined || settings.container === window) {
	        var fold = $(window).height() + $(window).scrollTop();
	    } else {
	        var fold = $(settings.container).offset().top + $(settings.container).height();
	    }
	    return fold <= $(element).offset().top - settings.threshold;
	};
	
	$.rightoffold = function(element, settings) {
	    if (settings.container === undefined || settings.container === window) {
	        var fold = $(window).width() + $(window).scrollLeft();
	    } else {
	        var fold = $(settings.container).offset().left + $(settings.container).width();
	    }
	    return fold <= $(element).offset().left - settings.threshold;
	};
	    
	$.abovethetop = function(element, settings) {
	    if (settings.container === undefined || settings.container === window) {
	        var fold = $(window).scrollTop();
	    } else {
	        var fold = $(settings.container).offset().top;
	    }
	    return fold >= $(element).offset().top + settings.threshold  + $(element).height();
	};
	
	$.leftofbegin = function(element, settings) {
	    if (settings.container === undefined || settings.container === window) {
	        var fold = $(window).scrollLeft();
	    } else {
	        var fold = $(settings.container).offset().left;
	    }
	    return fold >= $(element).offset().left + settings.threshold + $(element).width();
	};
	/* Custom selectors for your convenience.   */
	/* Use as $("img:below-the-fold").something() */
	
	$.extend($.expr[':'], {
	    "below-the-fold" : "$.belowthefold(a, {threshold : 0, container: window})",
	    "above-the-fold" : "!$.belowthefold(a, {threshold : 0, container: window})",
	    "right-of-fold"  : "$.rightoffold(a, {threshold : 0, container: window})",
	    "left-of-fold"   : "!$.rightoffold(a, {threshold : 0, container: window})"
	});
	
	/* Gallery */
	function Gallery(el, options) {
		this._hold = $(el);
		this.initOptions(options);
		this._timer = options.autoRotation;
		this._t;
		this.initialize();
	}
	
	$.fn.galleryObject = function(options) {
		return new Gallery(this.get(0), options);
	};
	
	Gallery.prototype = {
		initOptions: function(_obj){
			this.options = {
				randomSlide: false,
				changeHeight: false,
				duration: 700,
				slideElement: 1,
				event: 'click',
				autoRotation: false,
				effect: false,
				listOfSlides: 'ul > li',
				switcher: false,
				disableBtn: false,
				nextBtn: 'a.link-next, a.btn-next, a.next',
				prevBtn: 'a.link-prev, a.btn-prev, a.prev',
				circle: true,
				direction: false,
				IE: false,
				swicherReplace: false,
				titleReplace: false
			};
			for(key in _obj) this.options[key] = _obj[key];
		},
		initialize: function(){
			var _this = this;
			var _hold = _this._hold;
			var _speed = _this.options.duration;
			var _timer = _this.options.autoRotation;
			var _el = _hold.find(_this.options.listOfSlides);
			if(_el.length){
				_el.css('display','block');
				if (_this.options.effect){
					_el.css('position','absolute');
					var _list = _el;
				}
				else var _list = _el.parent();
				var _switcher = _hold.find(_this.options.switcher);
				var _next = _hold.find(_this.options.nextBtn);
				var _prev = _hold.find(_this.options.prevBtn);
				var _count = _el.index(_el.filter(':last'));
				var _w = _el.outerWidth(true);
				var _h = _el.outerHeight(true);
				if (_this.options.switcher) var _active = _switcher.index(_switcher.filter('.active:eq(0)'));
				else var _active = _el.index(_el.filter('.active:eq(0)'));
				if (_active < 0) _active = 0;
				var _last = _active;
				if(_this.options.swicherReplace){
					var switcherReplace = _hold.find(_this.options.switcher).parent();
					switcherReplace.html('');
					for (var i = 0; i < _el.length; i++){
						switcherReplace.append('<li><a href="#">'+ (i+1) +'</a></li>');
						if(i==_active){
							switcherReplace.find('li').eq(_active).addClass('active');
						}
					};
					_switcher = switcherReplace.find('li');
				}
				if(_this.options.titleReplace){
					var titleReplace = _hold.find(_this.options.titleReplace);
					if(titleReplace.length){
						_el.each(function(i){
							var this_el = $(this);
							var this_title = this_el.attr('title');
							if(this_title.length){
								_el.eq(i).data("title", this_title);
							}else{
								_el.eq(i).data("title", 'No title');
							}
							this_el.removeAttr('title');
						});
						titleReplace.html(_el.eq(_active).data("title"));
					}
				}
				
				// Installation directions
				if (!_this.options.direction) {
					var _wrapHolderW = Math.ceil(_list.parent().width() / _w);
					if (((_wrapHolderW - 1) * _w + _w / 2) > _list.parent().width()) _wrapHolderW--;
				}
				else{
					var _wrapHolderW = Math.ceil(_list.parent().height()/_h);
					if (((_wrapHolderW-1)*_h + _h/2) > _list.parent().height()) _wrapHolderW--;
				}
				
				// Setting "fade" or "slide" effect
				if (!_this.options.effect) var rew = _count - _wrapHolderW + 1;
				else var rew = _count;
				if (!_this.options.effect) {
					if (!_this.options.direction) _list.css({marginLeft: -(_w * _active)})
					else _list.css({marginTop: -(_h * _active)})
				}
				else {
					_list.css({
						opacity: 0
					}).removeClass('active').eq(_active).addClass('active').css({
						opacity: 1
					}).css('opacity', 'auto');
					_switcher.removeClass('active').eq(_active).addClass('active');
				}
				
				// Disable or enable buttons "prev next"
				if (_this.options.disableBtn) {
					if (_count < _wrapHolderW) _next.addClass(_this.options.disableBtn);
					_prev.addClass(_this.options.disableBtn);
				}
				
				// Function to "fade"
				if(_this.options.changeHeight){
					if (_this.options.effect){
						_el.parent().parent().css({height: _list.eq(_active).outerHeight(true), overflow: 'hidden'});
					}else{
						if(_this.options.slideElement>1){
							var active_H = _list.children().eq(_active).outerHeight(true);
							for (var i = 1; i < _this.options.slideElement; i++){
								if(active_H<_list.children().eq(_active+i).outerHeight(true)){
									active_H=_list.children().eq(_active+i).outerHeight(true)
								}
							};
							_el.parent().css({height: active_H, overflow: 'hidden'});
						}else	_el.parent().css({height: _list.children().eq(_active).outerHeight(true), overflow: 'hidden'});
					}
				}
				function fadeElement(){
					if (_this.options.IE && $.browser.msie){
						_list.eq(_last).css({opacity:0});
						_list.removeClass('active').eq(_active).addClass('active').css({opacity:'auto'});
					}
					else{
						_list.eq(_last).animate({opacity:0}, {queue:false, duration: _speed});
						_list.removeClass('active').eq(_active).addClass('active').animate({
							opacity:1
						}, {queue:false, duration: _speed, complete: function(){
							$(this).css('opacity','auto');
						}});
					}
					if(_this.options.changeHeight){
						_el.parent().parent().animate({
							height: _list.eq(_active).outerHeight(true)
						}, {queue:false, duration:_speed});
					}
					if (_this.options.switcher) _switcher.removeClass('active').eq(_active).addClass('active');
					_last = _active;
					if(titleReplace){
						titleReplace.html(_el.eq(_active).data("title"));
					}
				}
				// Function for "slide"
				function scrollEl(){
					if (!_this.options.direction) _list.animate({marginLeft: -(_w * _active)}, {queue:false, duration: _speed})
					else _list.animate({marginTop: -(_h * _active)}, {queue:false, duration: _speed})
					if (_this.options.switcher && _this.options.slideElement) _switcher.removeClass('active').eq(_active/_this.options.slideElement).addClass('active');
					else{
						if (_this.options.switcher) _switcher.removeClass('active').eq(_active).addClass('active');
					}
					if(_this.options.changeHeight){
						if(_this.options.slideElement>1){
							var active_H = _list.children().eq(_active).outerHeight(true);
							for (var i = 1; i < _this.options.slideElement; i++){
								if(active_H<_list.children().eq(_active+i).outerHeight(true)){
									active_H=_list.children().eq(_active+i).outerHeight(true)
								}
							};
							_el.parent().parent().animate({
								height: active_H
							}, {queue:false, duration:_speed});
						}else{
							_el.parent().parent().animate({
								height: _list.children().eq(_active).outerHeight(true)
							}, {queue:false, duration:_speed});
						}
					}
					if(titleReplace){
						titleReplace.html(_el.eq(_active).data("title"));
					}
				}
				function toPrepare(){
					if ((_active == rew) && _this.options.circle) _active = -_this.options.slideElement;
					for (var i = 0; i < _this.options.slideElement; i++){
						if(_this.options.randomSlide){
							var pre_active = _active;
							if(_this.options.listOfSlides.length){
								while(pre_active == _active){
									_active = parseInt(Math.random()*(_count+1));
								}
							}
						}else{
							_active++;
						}
						if (_active > rew) {
							_active--;
							if (_this.options.disableBtn &&(_count > _wrapHolderW)) _next.addClass(_this.options.disableBtn);
						}
					}
					if (_active == rew) if (_this.options.disableBtn &&(_count > _wrapHolderW)) _next.addClass(_this.options.disableBtn);
					if (!_this.options.effect) scrollEl();
					else fadeElement();
				}
				if(_this._timer){
					_this._hold.bind('runTimer', function(){
						if(_this._t) clearTimeout(_this._t);
						_this._t = setInterval(function(){
							toPrepare();
						}, _this._timer);
					});
				}
				_next.click(function(){
					if(_this._t) clearTimeout(_this._t);
					if (_this.options.disableBtn &&(_count > _wrapHolderW)) _prev.removeClass(_this.options.disableBtn);
					toPrepare();
					if (_this._timer) _this._hold.trigger('runTimer');
					return false;
				});
				_prev.click(function(){
					if(_this._t) clearTimeout(_this._t);
					if (_this.options.disableBtn &&(_count > _wrapHolderW)) _next.removeClass(_this.options.disableBtn);
					if ((_active == 0) && _this.options.circle) _active = rew + _this.options.slideElement;
					for (var i = 0; i < _this.options.slideElement; i++){
						_active--;
						if (_active < 0) {
							_active++;
							if (_this.options.disableBtn &&(_count > _wrapHolderW)) _prev.addClass(_this.options.disableBtn);
						}
					};
					if (_active == 0) if (_this.options.disableBtn &&(_count > _wrapHolderW)) _prev.addClass(_this.options.disableBtn);
					if (!_this.options.effect) scrollEl();
					else fadeElement();
					if (_this._timer) _this._hold.trigger('runTimer');
					return false;
				});
				if (_this.options.switcher) _switcher.click(function(){
					if (_this.options.event=='click'){
						if (_this.options.slideElement){
							_active = _switcher.index($(this))*_this.options.slideElement;
						}else{
							_active = _switcher.index($(this));
						}
						if(_this._t) clearTimeout(_this._t);
						if (!_this.options.effect) scrollEl();
						else fadeElement();
						if (_this._timer) _this._hold.trigger('runTimer');
					}
					return false;
				}).mouseenter(function(){
					if (_this.options.event=='hover'){
						if (_this.options.slideElement){
							_active = _switcher.index($(this))*_this.options.slideElement;
						}else{
							_active = _switcher.index($(this));
						}
						if(_this._t) clearTimeout(_this._t);
						if (!_this.options.effect) scrollEl();
						else fadeElement();
						if (_this._timer) _this._hold.trigger('runTimer');
					}
				});
				if (_this._timer) _this._hold.trigger('runTimer');
			}
		},
		stop: function(){
			var _this = this;
			if (_this._t) clearTimeout(_this._t);
		},
		play: function(){
			var _this = this;
			if (_this._t) clearTimeout(_this._t);
			if (_this._timer) _this._hold.trigger('runTimer');
		}
	}

	// select function
	function hideSelectBoxes(object){
		var selects_list = $('select');
		object.each(function(){
			var _el = $(this);
			var t = _el.offset().top;
			var l = _el.offset().left;
			var w = _el.outerWidth();
			var h = _el.outerHeight();
			var el_selects = [];
			selects_list.filter(':visible').not(_el.find('select')).each(function(){
				var _select = $(this);
				var s_t = _select.offset().top;
				var s_l = _select.offset().left;
				var s_w = _select.outerWidth();
				var s_h = _select.outerHeight();
				var _ver = false, _hor = false;
				if((t - s_t > 0) ? (t - s_t < s_h) : (t - s_t + h > 0)) _ver = true;
				if((l - s_l > 0) ? (l - s_l < s_w) : (l - s_l + w > 0)) _hor = true;
				if(_ver && _hor) {
					_select.css('visibility', 'hidden');
					el_selects.push(this);
				}
			});
			this.sboxes = el_selects;
		});
	}
	function showSelectBoxes(object){
		object.each(function(){
			if (this.sboxes.length > 0) {
				$(this.sboxes).css('visibility', 'visible');
			}
		});
	}
}(jQuery));

