﻿var stickybit = {

	init : function() {

		//Verify that silverstripe js-locale is up and running
		if (ss.i18n.currentLocale === null) {
			ss.i18n.init();
		}

		//Add placeholder behaviour for search
		$j("input#SearchForm_SearchForm_Search").attr("placeholder", ss.i18n._t('Page.SEARCH')).placeholder();
	
		//Prevent search if no search value is entered	
		$j("form#SearchForm_SearchForm").live("submit", function() {
			if ($j("input#SearchForm_SearchForm_Search").val() != "") {
				return true;
			}
			return false;
		});
		
		$j("input#SearchForm_SearchForm_Search").bind("change keyup focusin focusout", function() {
		
			var input = $j(this), 
				reset = $j("input#reset");
		
			//Create reset button if not exists
			if (reset.length === 0) {
				reset = $j("<input id='reset' type='reset' value='Reset' style='display: none;' />");
				reset.bind("click", function() {
					input.val("");
					$j(this).hide();
					input.focus();
					return false;
				});
				reset.insertAfter(input);
			}
		
			if (input.val() !== "" && input.val() !== ss.i18n._t('Page.SEARCH')) {
				reset.css("display", "inline");
			} else {
				reset.hide();
			}
		});
		
		$j("input#SearchForm_SearchForm_Search").trigger("focusout");
		
		if ($j("input#SearchForm_SearchForm_Search").val() !== "" && $j("input#SearchForm_SearchForm_Search").val() !== ss.i18n._t('Page.SEARCH')) {
			$j("input#SearchForm_SearchForm_Search").focus();
		}
	
		//inject case scripts on page
		stickybitCases.init();
		//inject banner scripts on page
		stickybitBanner.init();
	}
};

var stickybitCases = {	

	cases : null,
	currentCase : 1,
	caseHighLighter : null,
	
	init : function() {

		//initialize globals
		stickybitCases.cases = $j("#cases > .case");

		if (stickybitCases.cases.length > 0) {
			
			//hide cases
			stickybitCases.cases.hide();
			
			//generate and display a traversal controller for cases
			stickybitCases.generateTraversalControl();
			
			//display first case
			stickybitCases.displayCase(stickybitCases.currentCase);
		}
	},
	//display a case
	displayCase : function(caseNumber) {
	
		if (this.cases.length > 0 && caseNumber <= this.cases.length) {
			var previousAnchor = $j("#case_" + this.currentCase); 

			if (previousAnchor != null) {
				previousAnchor.removeClass("current");
			}
			
			var newAnchor = $j("#case_" + caseNumber);

			if (newAnchor != null) {
				newAnchor.addClass("current");
			}

			this.cases.hide();
			this.currentCase = caseNumber;
			this.cases.eq(caseNumber - 1).show();
		}
	},
	//jump right
	traverseRight : function(event) {
		if (stickybitCases.currentCase >= stickybitCases.cases.length) {
			stickybitCases.displayCase(1);
		}
		else {
			stickybitCases.displayCase(Number(stickybitCases.currentCase) + 1);
		}
		return false;
	},
	//jump left
	traverseLeft : function(event) {
		if (stickybitCases.currentCase <= 1) {
			stickybitCases.displayCase(stickybitCases.cases.length);
		}
		else {
			stickybitCases.displayCase(stickybitCases.currentCase - 1);
		}
		return false;
	},
	//generate controller for navigating between cases
	generateTraversalControl : function() {

		if (this.cases.length > 1) {
			var traversalControl = $j("#traversalPane");
			
			var left = $j("<a class='iterator'>&lt;&lt;</a>").bind("mousedown", stickybitCases.traverseLeft);
			var right = $j("<a class='iterator'>&gt;&gt;</a>").bind("mousedown", stickybitCases.traverseRight);
			var spacer = $j("<span>|</span>");
			
			traversalControl.append(left);
			
			for (var i = 0; i < this.cases.length; i++) {
				var caseNumber = $j("<a id='case_" + (i + 1) + "'>" + (i + 1) + "</a>").bind("click", function(){
					stickybitCases.displayCase(this.id.split("_")[1]);
				});
				
				//Remove spacer if this is the first item
				if (i != 0) {
					traversalControl.append(spacer.clone());
				}
				
				traversalControl.append(caseNumber);
			}
			traversalControl.append(right).show();
		}
	}
};


var stickybitBanner = {	

	images : null,
	newImage : 0,
	currentImage : -1,
	oldImage : 0,
	intervalTime : 5000,
	fade : 600,
	randomize : false,

	init : function() {

		//Initialize globals
		//Fetch images
		stickybitBanner.images = $j("#banner>img");

		//Fetch interval and fade from banner tag
		if ($j("#banner").attr("title") != undefined && $j("#banner").attr("title").split(",").length >= 2) {
			stickybitBanner.intervalTime = parseInt($j("#banner").attr("title").split(",")[0]);
			stickybitBanner.fade = parseInt($j("#banner").attr("title").split(",")[1]);
		}
		
		//Fetch randomize boolean from banner tag
		if ($j("#banner").attr("title") != undefined && $j("#banner").attr("title").split(",").length === 3) {
			stickybitBanner.randomize = Boolean($j("#banner").attr("title").split(",")[2]);
		}
		
		//Display first image
		if (stickybitBanner.images.length > 1) {
			if (stickybitBanner.randomize)
				stickybitBanner.currentImage = Math.floor(Math.random() * stickybitBanner.images.length) - 1;

			stickybitBanner.rotateBanner();
			var interval = setInterval(stickybitBanner.rotateBanner, stickybitBanner.intervalTime + stickybitBanner.fade);
		} else if (stickybitBanner.images.length == 1) {
            stickybitBanner.images[0].style.zIndex = 1;
            $j(stickybitBanner.images[0]).addClass("show"); // fadeIn(stickybitBanner.fade);
		}
		    
	},
	rotateBanner : function() { 
		//Fetch next image in order
		stickybitBanner.newImage = (stickybitBanner.currentImage + 1) % stickybitBanner.images.length;
		
		//Fade in new image
		stickybitBanner.images[stickybitBanner.newImage].style.zIndex = 1;
		$j(stickybitBanner.images[stickybitBanner.newImage]).fadeIn(stickybitBanner.fade);
		
		if (stickybitBanner.currentImage >= 0) {
			stickybitBanner.oldImage = stickybitBanner.currentImage;
			stickybitBanner.images[stickybitBanner.oldImage].style.zIndex = 0;
			setTimeout("$j(stickybitBanner.images[stickybitBanner.oldImage]).hide()", stickybitBanner.fade * 0.9)
		}

		//Set currentImage to new value
		stickybitBanner.currentImage = stickybitBanner.newImage;
	}
};

var $j;

$(document).ready(function() {
	jQuery.noConflict();
	$j = jQuery;
	setTimeout(stickybit.init);
});

/*!
 * HTML5 Placeholder jQuery Plugin
 * @link http://github.com/mathiasbynens/Placeholder-jQuery-Plugin
 * @author Mathias Bynens <http://mathiasbynens.be/>
 */
;(function($) {
 $.fn.placeholder = function() {
  // Quit if thereís support for HTML5 placeholder
  if (this[0] && 'placeholder' in document.createElement('input')) {
   // Allow chaining
   return this;
  };
  // Made this a function, because we actually need it on two different occasions:
  // 1) Once when the DOM is loaded;
  // 2) Once every time the focusout() is triggered.
  function setPlaceholder($elem) {
   if ($elem.val() === '' || $elem.val() === $elem.attr('placeholder')) {
    $elem.addClass('placeholder').val($elem.attr('placeholder'));
   } else {
    $elem.removeClass('placeholder');
   };
  };
  function preventSubmit($elem) {
   if ($elem.val() === $elem.attr('placeholder')) {
    $elem.val('').focus();
    return false;
   };
  };
  // Yes, .each() ó in case .placeholder() is called on several elements, which is very likely, e.g. $('input').placeholder();
  return $(this).each(function() {
   var $input = $(this);
   // Quit if the current element is a password input, or not an input at all
   if ($input.is(':password') || !$input.is(':input')) {
    return;
   }
   setPlaceholder($input);
   // Cancel both the submit event of this form and the click event of the submit button of this form
   // I found this to be necessary when using the jQuery Validation Plugin
   // Even preventDefault() failed ó AMIDOINITRITE?!
   $(this.form).submit(function() {
    // preventDefault(); doesnít seem to work here
    preventSubmit($input);
   }).find('input[type=submit]').click(function() {
    // preventDefault(); doesnít seem to work here
    preventSubmit($input);
   });
   $input.focusin(function() {
    if ($input.val() === $input.attr('placeholder')) {
     $input.removeClass('placeholder').val('');
    };
   }).focusout(function() {
    setPlaceholder($input);
   });
  });
 };
})(jQuery);

