// JavaScript Document
var delay = (function(){
  var timer = 0;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  };
})();
// My Menu///////////////////////////////////////////////////////////////////////////////////
(function($) {
	$.fn.mymenu = function(settings){
		var config = {downspeed:200, upspeed:100, submenu: 'ul.subnav', hoverclass: 'subhover'};
		var settings = $.extend(config, settings);
		var menubar, menuitem;
		return this.each(function(){
			menubar = this;
			$('li', menubar).hover(function(){
				menuitem = $(this);
				menuitem.addClass(settings.hoverclass);
				menuitem.find(settings.submenu).slideDown(settings.downspeed).show();
			}, function(){
				menuitem = $(this);
				menuitem.removeClass(settings.hoverclass);
				menuitem.find(settings.submenu).slideUp(settings.upspeed);
			});
		});
	};
})(jQuery);
// My Preloader///////////////////////////////////////////////////////////////////////////////////
(function($) {
  var cache = [];
  // Arguments are image paths relative to the current page.
  $.fn.mypreload = function() {
    var args_len = arguments.length;
    for (var i = args_len; i--;) {
      var cacheImage = document.createElement('img');
      cacheImage.src = arguments[i];
      cache.push(cacheImage);
    }
  }
})(jQuery);
// My Modal///////////////////////////////////////////////////////////////////////////////////
(function($) {
	$.fn.mymodal = function(settings){
		var config = {maxWidth:300, minHeight:150, opacity:70};
		var settings = $.extend(config, settings);
		var trigger, target, title, type, auth, content, opts;
		var mymodalBuild = function(){
			if (type.indexOf('youtube') != -1) {
				var youtubevid = target.substring(target.indexOf('v=')+2, target.indexOf('v=')+13);	
							
				$('body').append('<div class="simplemodal" id="youtubemodal"><div style="padding:10px;"><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/'+youtubevid+'&hl=en_US&fs=1&rel=0&color1=0x006699&color2=0x54abd6"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'+youtubevid+'&hl=en_US&fs=1&rel=0&color1=0x006699&color2=0x54abd6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></div></div>');
				content = $('#youtubemodal');
				
			} else if (type.indexOf('zoopy') != -1){
				var zoopyvid = target.replace('#','');
				
				$('body').append('<div class="simplemodal" id="zoopymodal"><div style="padding:10px;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://macromedia.com/cabs/swflash.cab#version=9,0,0,246" id="zoopy-video-'+zoopyvid+'" width="500" height="400"><param name="movie" value="http://media.z2.zoopy.com/video-offsite.swf" /><param name="flashvars" value="id='+zoopyvid+'" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="allowscriptaccess" value="always" /><param name="allowfullscreen" value="true" /><param name="wmode" value="opaque" /><param name="authToken" value="'+auth+'" /><embed src="http://media.z2.zoopy.com/video-offsite.swf" allowfullscreen="true" flashvars="id='+zoopyvid+'" bgcolor="#000000" width="500" height="400" type="application/x-shockwave-flash" allowscriptaccess="always" wmode="opaque"></embed></object></div></div>');
				content = $('#zoopymodal');
				
			} else if (type.indexOf('photo') != -1){
				var photo = target.replace('#','');
				
				$('body').append('<div class="simplemodal" id="photomodal"><div><img src="images/ajax-loader.gif" /></div></div>');
				content = $('#photomodal');
				
				// Image preload process
				var objImagePreloader = new Image();
				objImagePreloader.onload = function() {
					$('#photomodal img').attr('src',photo);
					// Perfomance an effect in the image container resizing it
					//_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);
					$('#photomodal').width(objImagePreloader.width);
					$('#photomodal').height(objImagePreloader.height);
					//	clear onLoad, IE behaves irratically with animated gifs otherwise
					objImagePreloader.onload=function(){};
				};
				objImagePreloader.src = photo;
			
				//this.newImg = new Image();
				//this.newImg.src = photo;
				//var imgheight = this.newImg.height;
				//var imgwidth = this.newImg.width;
				//alert(photo+' '+imgheight);
				
			} else if (target.indexOf('#') != -1){
				content = $(target);
			}
			if (title != '') {
				$('div.simplemodal-title', content).remove();
				content.prepend('<div class="simplemodal-title">'+title+'</div>');
			}
		};
		var mymodalOpen = function(){
			mymodalBuild();
			content.modal({
				overlayClose:true,
				modal:true,
				autoPosition:true,
				opacity:settings.opacity,
				maxWidth:settings.maxWidth,
				minHeight:settings.minHeight,
				onOpen:function(dialog){
					dialog.overlay.fadeIn('fast', function(){ 
						dialog.container.fadeIn('fast', function(){
							dialog.data.slideDown('fast');	
						});
					});
				},
				onClose:function(dialog){
					dialog.data.slideUp('fast', function(){
						dialog.container.fadeOut('fast', function(){
							dialog.overlay.fadeOut('fast', function(){
								$.modal.close();
								$('#youtubemodal').remove();
								$('#zoopymodal').remove();
								$('#photomodal').remove();
							});
						});
					});
				}
			});	
		};
		//PRIVATE open function
		this.openmymodal = function() {
			modal = $(this);
			target = '#'+modal.attr('id');
			title = modal.attr('title');
			alert(title);
			opts = modal.attr('rel').split(' ',3);
			settings.maxWidth = parseInt(opts[0]);
			settings.minHeight = parseInt(opts[1]);
			mymodalOpen();
		};

		return this.each(function(){
			$(this).click(function(){
				trigger = $(this);
				target = trigger.attr('href');
				title = trigger.attr('title');
				type = trigger.attr('class');
				auth = trigger.attr('auth');
				opts = trigger.attr('rel').split(' ',3);
				settings.maxWidth = parseInt(opts[1]);
				settings.minHeight = parseInt(opts[2]);
				mymodalOpen();
				return false;
			});
		});
	};
})(jQuery);
// My Accordion///////////////////////////////////////////////////////////////////////////////
(function($) {
	$.fn.myaccordion = function(settings){
		var config = {speed:200, opened: 'acopen', openon: 'click', hide: false, sticky: false, openone: false};
		var settings = $.extend(config, settings);
		var accordion, openEl, closeEl, heightEl;
		var play = function(trigger){
			openEl = $(trigger).next('ul');
			closeEl = accordion.children('li').children('ul:visible');
			heightEl = openEl.height();
			if (!openEl.is(':visible')) {
				closeEl.slideUp(settings.speed);
				openEl.slideDown(settings.speed);
				closeEl.prev().removeClass(settings.opened);
				openEl.prev().addClass(settings.opened);
			} else if (openEl.is(':visible') && !settings.sticky) {
				openEl.slideUp(settings.speed);
				openEl.prev().removeClass(settings.opened);
			}
		};
		return this.each(function(){
			accordion = $(this);
			if (settings.hide) {
				$('> li a + ul', this).hide();
			}
			if (settings.openone !== false) {
				play($('> li a', this).get(settings.openone));
			}
			if (settings.openon == 'hover') {
				$('> li a', this).hover(function(){
					play(this);
				});
			} else if(settings.openon == 'click') {
				$('> li a', this).click(function(){
					play(this);
				});
			}
		});
	};
})(jQuery);

// My Slider///////////////////////////////////////////////////////////////////////////////////
(function($) {
	//Check URL
	$.fn.myslider = function(settings){
		var config = {slideSpeed:500, heightSpeed:500, wrapperId: '.wrapper', pageId: '.page', pageWidth: 0, triggerId: '#slider_trigger', externaltriggerId: 'a.externaltrigger'};
		var settings = $.extend(config, settings);
		var sliderObj, pageObj, trigger;
		//
		//PUBLIC: Return trigger
		this.returnTrigger = function() {
			return trigger;	
		}
		//PUBLIC: Set height after content change
		this.setHeight = function(){
			var activeheight = pageObj.outerHeight(true);
			sliderObj.animate({height:activeheight}, 100);
			return this;
		};
		//PUBLIC: Check URL for hash and slide to page
		this.triggerURL = function(){
			var hash = window.location.hash;
			if (hash) {
				trigger = (hash); 
				slidePage();
			}
			return this;
		};
		//PUBLIC: Call to specific page, slide to it
		this.slideTo = function(page){
			trigger = ('#'+page); 
			slidePage();
			return this;
		};
		//
		//PRIVATE: Check if slider is in view, if not scroll to top of it
		var elemInView = function(elem){
			var docViewTop = $(window).scrollTop();
			var docViewBottom = docViewTop + $(window).height();
			var elemTop = $(elem).offset().top;
			var elemBottom = elemTop + $(elem).height();
			return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom) && (elemBottom <= docViewBottom) &&  (elemTop >= docViewTop));
		};
		//PRIVATE: Active trigger
		var activeTrigger = function(){
			$('a', settings.triggerId).each(function(){
				var activeObj = $(this);
				activeObj.removeClass('active');
				if(activeObj.attr('href')==trigger){
					activeObj.addClass('active');}
			});
			$(settings.externaltriggerId).each(function(){
				var activeObj = $(this);
				activeObj.removeClass('active');
				if(activeObj.attr('href')==trigger){
					activeObj.addClass('active');}
			});
		};
		//PRIVATE: Slide page on trigger
		var slidePage = function(){
			pageObj = $(trigger);
			var position = pageObj.position();
			var height = pageObj.outerHeight(true);
			//Set trigger active
			activeTrigger();
			//Slide to correct page
			$(settings.wrapperId, sliderObj).animate({left:-position.left}, settings.slideSpeed);
			sliderObj.animate({height:height}, settings.heightSpeed, function() {
				//Scroll to top of slider
				triggerObj = $(settings.triggerId);
				if (!elemInView(triggerObj) || !elemInView(sliderObj)){
					$("html, body").animate({
						scrollTop: triggerObj.offset().top-10,
						scrollLeft: triggerObj.offset().left
					}, settings.slideSpeed, function() {
						if(typeof window.afterSlide == 'function') {
							// function exists, so we can now call it
							afterSlide(trigger.substr(1));
						}
					});
				}
			});
		};
		//Event handlers
		$(window).unload(function(event){
			if (trigger && trigger != '') {
				//swindow.location = trigger;
			}
		});
		$(settings.externaltriggerId).click(function(event){
			event.preventDefault();
			trigger = $(this).attr('href');
			slidePage();
		});
		return this.each(function(){
			sliderObj = $(this);
			var activeheight = $($('a.active', settings.triggerId).attr('href')).outerHeight(true);
			var pagewidth;
			if (settings.pageWidth == 0) {
				pagewidth = $(settings.pageId, sliderObj).outerWidth();
			} else {
				pagewidth = settings.pageWidth;
			}
			var pagecount = $(settings.pageId, sliderObj).size();
			var wrapperwidth = pagewidth*pagecount;
			//Set container size
			sliderObj.css('height', activeheight);
			sliderObj.css('width', pagewidth);
			$(settings.wrapperId, sliderObj).css('width', wrapperwidth);
			//Monitor trigger click
			$('a', settings.triggerId).click(function(event){
				trigger = $(this).attr('href');
				if (trigger.substr(0,1) == '#') {
					event.preventDefault();
					slidePage();
				}
			});
		});
	};
})(jQuery);
