/*
	Copyright: 	Hybrid Forge 2011. All Rights Reserved.
	Author: 	Rod Miles (www.HybridForge.com)
	Date:		Sept 2011
	
	Info:		Base Customizations & Styling of all themes & sites
				on DiscoverWorship.com
=============================================================================*/
 
 
/*	jQuery Customizations
=============================================================================*/
jQuery.noConflict();
jQuery(document).ready(function($) {

	/*--------------------------------------------------------------
		Misc. EASING Functions
	--------------------------------------------------------------*/
		$.easing.custom = function (x, t, b, c, d) { 
			var s = 1.70158;  
			if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 
			return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; }
		$.easing.easeInOutQuint = function (x, t, b, c, d) {
			if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
			return c/2*((t-=2)*t*t*t*t + 2) + b; }


	/*--------------------------------------------------------------
		MISC. Tweaks
	--------------------------------------------------------------*/
		// Breadcrumbs
		if ( $(".main .breadcrumbs").length ) {
			$("body").addClass("withBreadcrumbs");
		}
		
		// SIDE NAV TWEAKS
		// Show nav-top ribbon
		if ( $(".sidebar #nav").length ) {
			$(".header-container").after("<div id='nav-top' />");
			if ( $("body.catalogsearch-result-index").length ) {
				var currentTop = $("#nav-top").css("top");
				currentTop = parseInt(currentTop.substring(0, currentTop.length - 2 ));
				var cssTop = currentTop + parseInt( $(".block-layered-nav").height()) + 40;
				$("#nav-top").css("top", cssTop + "px" )
			}
		}
		if ( $("body.category-best-sellers-list").length ) {
			$("#specialLinks li:eq(0)").addClass("active");
		}
		if ( $("body.category-new-releases").length ) {
			$("#specialLinks li:eq(1)").addClass("active");
		}
		if ( $("body.category-special").length ) {
			$("#specialLinks li:eq(2)").addClass("active");
		}
		
		// Hilite product cell if on sale and in grid-view
		$(".products-grid .special-price").parents("li.item").addClass("special");
		
		// Pop external links in new window (in JS, so we can stay HTML Strict)
		$("a[rel=external]").attr("target","_blank");
		
		// Add extra div to all sidepanel blocks
		if ( $(".sidebar .block").length ) {
			$(".sidebar .block").append("<div class='block-closer' />");
		}
		
		// .catalog-callout Tweaks
		$(".catalog-callout").wrapInner("<div class='inner' />");
		$(".catalog-callout .callout-title, .catalog-callout .callout-text").wrapAll("<div class='callout-content' />");


	/*--------------------------------------------------------------
		CMS Menu Tweaks
	--------------------------------------------------------------*/
		// Home Hilite
		if ( $(".cms-index-index, .cms-home").length ) {
			$("#cmsMenu li:eq(0)").addClass("active");
		} else if ( $(".cms-about").length ) {
			$("#cmsMenu li:eq(1)").addClass("active");
		} else if ( $(".contacts-index-index").length ) {
			$("#cmsMenu li:eq(2)").addClass("active");
		}


	/*--------------------------------------------------------------
		MainMenu Tweaks
	--------------------------------------------------------------*/
		$("#nav li").filter(".level0").find("a:first").addClass("first-level");


	/*--------------------------------------------------------------
		Products Grids
	--------------------------------------------------------------*/
		if ( $(".category-products .products-grid").length ) {
			/*$(".products-grid").each(function(){
				var rowHeight = $(this).height() + "px";
				$(this).find("li.item").css("height",rowHeight);
			});*/
		}
		
	/*--------------------------------------------------------------
		Product Details Pages
	--------------------------------------------------------------*/
		if ( $(".catalog-product-view, .review-product-list").length ) {
			
			// Special Pricing, buy button fix
			if ( $(".product-shop .special-price").length ) {
				$(".product-shop .buy-area").addClass("on-sale");
			}
			
			// PDF Extras
			if ( $(".product-extras .extras").length ) {
				// First, last classes on PDF links
				$(".product-extras .extras:first").addClass("first");
				$(".product-extras .extras:last").addClass("last");
				
				// Trimming text
				var chapterSamplePre = "Chapter Sample: ";
				var readersNotesPre = "Readers Notes: ";
				var extensionActivitiesPre = "Extension Activities: ";
				var preText = "";
				var charTotal = 20;
				$(".product-extras .extras a").each(function() {
					if ( $(this).parents(".chapterSample").length ) {
						preText = chapterSamplePre;
					} else if ( $(this).parents(".readersNotes").length ) {
						preText = readersNotesPre;
					} else if ( $(this).parents(".extensionActivities").length ) {
						preText = extensionActivitiesPre;
					}
					
					$(this).attr("title", preText + $(this).text() );
					if ($(this).text().length > charTotal) {
						$(this).text( $(this).text().substring(0,charTotal - 1) + "..." );
					}
				});
			}
			
			// Author Link, remove if no other books by this author
			// Checking whether our "more by author" widget is setup, if not, then remove the link for visitors so they don't see error msg on adv search page
			if ( !$(".product-collateral #product_tabs_author_products").length ) {
				$("#bookMeta .author .data").html( $("#bookMeta .author .data a").text() );
			}
			
			// Fade in "View More Items Related By..."
			if ( $(".product-collateral .product-row").length ) {
				$(".product-collateral").prepend("<h3 class='product-collateral-title'>View more items related by...</h3>");
				var galleryCounter = 0;
				var navMarginLeft = 0;
				$(".cycleGalleryWrap").each(function() {
					galleryCounter++;
					
					// Add wappers & controls 
					$(this).prepend("<a href='javascript:void(0);' title='Previous' class='prev '><span id='galleryPrev-" + galleryCounter + "' class='galleryDir galleryPrev'>Prev</span></a><a href='javascript:void(0);' title='Next' class='next'><span id='galleryNext-" + galleryCounter + "' class='galleryDir galleryNext'>Next</span></a>");
					$(this).append("<ul class='galleryNav' id='galleryNav-" + galleryCounter + "'></ul>");
				
					// Initiate the cycle
					$(this).find(".cycleGallery").cycle({
						fx:     	'scrollHorz', 
						easing: 	'easeInOutQuint',
						speed:  	1000,
						timeout:	4500,
						delay:  	0,
						pause:   	true,
						pauseOnPagerHover: true,
						pagerEvent:	'click', 
						pagerAnchorBuilder: function(idx, slide) { 
								//return '<li><a href="#"><span>' + idx + '</span></a></li>';
								return '<li><a href="#"><span></span></a></li>';
							},
						pager:  	'#galleryNav-' + galleryCounter,
						prev:   	'#galleryPrev-' + galleryCounter,
						next:   	'#galleryNext-' + galleryCounter,
						sync:   	true,
						cleartypeNoBg: 	true	// needed for IE
					});
					$(this).find(".cycleGallery").cycle('pause');
					
					// Create margin offset for galleryNav
					// Adjust the nav dots accordingly
					slideCount = $(this).find(".galleryNav li").length;
					if (slideCount > 0) {
						majorWidth = 540;
						widthBetweenDots = $(this).find(".galleryNav li:first a").css("margin-right");
						widthBetweenDots = parseInt(widthBetweenDots.substring(0,widthBetweenDots.length-2));
						widthOfNavDot = 9;
						galleryNavWidth = widthOfNavDot*slideCount + (slideCount -1)*widthBetweenDots;
						leftAdjust = Math.floor((majorWidth - galleryNavWidth) / 2);
						$(this).find(".galleryNav").css("left",leftAdjust + "px");
					}
				});
			}
		}


	/*--------------------------------------------------------------
		HOME PAGE
	--------------------------------------------------------------*/
		if ( $("body.cms-home").length ) {
			
			// HOME Cycle Galleries
			var galleryCounter = 0;
			var navMarginLeft = 0;
			$(".cycleGalleryWrap").each(function() {
				galleryCounter++;
				
				// Add wappers & controls 
				$(this).prepend("<a href='javascript:void(0);' title='Previous' class='prev '><span id='galleryPrev-" + galleryCounter + "' class='galleryDir galleryPrev'>Prev</span></a><a href='javascript:void(0);' title='Next' class='next'><span id='galleryNext-" + galleryCounter + "' class='galleryDir galleryNext'>Next</span></a>");
				$(this).append("<ul class='galleryNav' id='galleryNav-" + galleryCounter + "'></ul>");
				
				// BANNER Cycle
				if ( $(this).find(".bannerGallery.cycleGallery").length ) {
					$(this).find(".cycleGallery").cycle({
						fx:     	'fade', 
						speed:  	700,
						timeout:	3500,
						delay:  	0,
						pause:   	true,
						pauseOnPagerHover: true,
						pagerEvent:	'click', 
						pagerAnchorBuilder: function(idx, slide) { return '<li><a href="#"><span></span></a></li>'; },
						pager:  	'#galleryNav-' + galleryCounter,
						prev:   	'#galleryPrev-' + galleryCounter,
						next:   	'#galleryNext-' + galleryCounter,
						sync:   	true,
						cleartypeNoBg: 	true	// needed for IE
					});
					// Pause the gallery
					$(this).find(".cycleGallery").cycle('pause');
					
					// Add Classes to the Gallery Nav
					$(this).find(".galleryNav li:first").addClass("first");
					$(this).find(".galleryNav li:last").addClass("last");
				}
				
				// PRODUCT Cycle
				else { // ( $(this).find(".products-grid.cycleGallery").length ) {
					$(this).find(".cycleGallery").cycle({
						fx:     	'scrollHorz', 
						easing: 	'easeInOutQuint',
						speed:  	1000,
						timeout:	4500,
						delay:  	0,
						pause:   	true,
						pauseOnPagerHover: true,
						pagerEvent:	'click', 
						pagerAnchorBuilder: function(idx, slide) { 
								//return '<li><a href="#"><span>' + idx + '</span></a></li>';
								return '<li><a href="#"><span></span></a></li>';
							},
						pager:  	'#galleryNav-' + galleryCounter,
						prev:   	'#galleryPrev-' + galleryCounter,
						next:   	'#galleryNext-' + galleryCounter,
						sync:   	true,
						cleartypeNoBg: 	true	// needed for IE
					});
					// Pause the gallery
					$(this).find(".cycleGallery").cycle('pause');
					
					// Create margin offset for galleryNav
					// Adjust the nav dots accordingly
					slideCount = $(this).find(".galleryNav li").length;
					if (slideCount > 0) {
						majorWidth = 540;
						widthBetweenDots = $(this).find(".galleryNav li:first a").css("margin-right");
						widthBetweenDots = parseInt(widthBetweenDots.substring(0,widthBetweenDots.length-2));
						widthOfNavDot = 9;
						galleryNavWidth = widthOfNavDot*slideCount + (slideCount -1)*widthBetweenDots;
						leftAdjust = Math.floor((majorWidth - galleryNavWidth) / 2);
						$(this).find(".galleryNav").css("left",leftAdjust + "px");
					}
				}
			});
		}


	/*--------------------------------------------------------------
		Browser Detection
	--------------------------------------------------------------*/
		var BrowserDetect = {
			init: function () {
				this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
				this.version = this.searchVersion(navigator.userAgent)
					|| this.searchVersion(navigator.appVersion)
					|| "an unknown version";
				this.OS = this.searchString(this.dataOS) || "an unknown OS";
			},
			searchString: function (data) {
				for (var i=0;i<data.length;i++)	{
					var dataString = data[i].string;
					var dataProp = data[i].prop;
					this.versionSearchString = data[i].versionSearch || data[i].identity;
					if (dataString) {
						if (dataString.indexOf(data[i].subString) != -1)
							return data[i].identity;
					}
					else if (dataProp)
						return data[i].identity;
				}
			},
			searchVersion: function (dataString) {
				var index = dataString.indexOf(this.versionSearchString);
				if (index == -1) return;
				return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
			},
			dataBrowser: [
				{
					string: navigator.userAgent,
					subString: "Chrome",
					identity: "Chrome"
				},
				{ 	string: navigator.userAgent,
					subString: "OmniWeb",
					versionSearch: "OmniWeb/",
					identity: "OmniWeb"
				},
				{
					string: navigator.vendor,
					subString: "Apple",
					identity: "Safari",
					versionSearch: "Version"
				},
				{
					prop: window.opera,
					identity: "Opera"
				},
				{
					string: navigator.vendor,
					subString: "iCab",
					identity: "iCab"
				},
				{
					string: navigator.vendor,
					subString: "KDE",
					identity: "Konqueror"
				},
				{
					string: navigator.userAgent,
					subString: "Firefox",
					identity: "Firefox"
				},
				{
					string: navigator.vendor,
					subString: "Camino",
					identity: "Camino"
				},
				{	// for newer Netscapes (6+)
					string: navigator.userAgent,
					subString: "Netscape",
					identity: "Netscape"
				},
				{
					string: navigator.userAgent,
					subString: "MSIE",
					identity: "internet-explorer",
					versionSearch: "MSIE"
				},
				{
					string: navigator.userAgent,
					subString: "Gecko",
					identity: "Mozilla",
					versionSearch: "rv"
				},
				{ 	// for older Netscapes (4-)
					string: navigator.userAgent,
					subString: "Mozilla",
					identity: "Netscape",
					versionSearch: "Mozilla"
				}
			],
			dataOS : [
				{
					string: navigator.platform,
					subString: "Win",
					identity: "Windows"
				},
				{
					string: navigator.platform,
					subString: "Mac",
					identity: "Mac"
				},
				{
					   string: navigator.userAgent,
					   subString: "iPhone",
					   identity: "iPhone/iPod"
				},
				{
					string: navigator.platform,
					subString: "Linux",
					identity: "Linux"
				}
			]			
		};
		BrowserDetect.init();
		
		//add browser and os to body classes
		$("body").addClass(BrowserDetect.browser.toLowerCase()).addClass(BrowserDetect.browser.toLowerCase() + "-" + BrowserDetect.version.toString().toLowerCase()).addClass("os-" + BrowserDetect.OS.toLowerCase());

});

