/* vim: set expandtab tabstop=4 shiftwidth=4: */

/**
 * Global object
 */
var Maccabi = {};

Maccabi.utilities = (function() {
    
    return {
        
        hover: function (obj)
        {
            obj.hover(function() {
                $(this).addClass('hovered');
            }, function() {
                $(this).removeClass('hovered');
            });
        },
        
        focus: function (obj, defaultValue)
        {
            obj.focus(function() {
                $(this).addClass('focused').removeClass('blurred').removeClass('edited').removeClass('error');
                
                if ($(this).val() == defaultValue) {
                    $(this).val('');
                }
            });
            
            obj.blur(function() {
                $(this).removeClass('focused').addClass('blurred');
                
                if ($(this).val() == '') {
                    $(this).val(defaultValue);
                } else {
                    $(this).addClass('edited');
                }
            });
        },
        
		initLightbox: function(params, selector)
		{
			if (!selector) {
				selector = 'a[rel^=\'prettyPhoto\']';
			}
			
			if (!params) {
				params = { slideshow: 5000, autoplay_slideshow: true, social_tools: null };
			}
			
			// Initialise Pretty Photo
            $(selector).prettyPhoto(params);
		},
		
		ucwords: function(text)
		{
			return (text + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
                return $1.toUpperCase();
            });
		},
		
		createListGrid: function(divList, itemsPerRow)
        {
            divList.wrapInner('<div class="items" />');
            divList.prepend('<div class="row" />');
            
            var row = divList.children('.row');
            divList.children('.items').children().each(function(i) {
                row.append($(this));
                
                if ((i + 1) % itemsPerRow == 0) {
                    $(this).addClass('row-end');
                    row.after('<div class="row" />');
                    row = divList.children('.row:last');
                }               
            });
            
            divList.children('.items').remove();
        }
    };
})();

Maccabi.layout = (function(){
    
    /**
     * Init common and misc parts of the website
     * 
     * @return void
     */
    var initWebsite = function()
    {
        var body = $('body');
		
		// Add Typekit To Body
		try { Typekit.load(); } catch (e) {}
		body.addClass('tk-museo-sans');
		
		// Add Background Image To Body
		var siteBackgroundImage = $('body #custom-doc #hd #header .header-site-background .url').text();
		$('body').css('background-image', 'url(' + siteBackgroundImage + ')');
		
    };
    
    var initHeader = function()
    {
        // Search Box
		var searchBox = $('#header .header-site-search');
		searchBox.wrapInner('<div class="container-middle" />').prepend('<div class="container-left" />');
		
		var searchKeywords = searchBox.find('#keywords-element');
		searchKeywords.wrapInner('<div class="container-middle" />').prepend('<div class="container-left" />');
		searchKeywords.children('.container-middle').prepend('<div class="icon" />');
		
		var searchSubmit = searchBox.find('#searchSubmit-element');
		searchSubmit.prepend('<div class="icon" />');
		
		// Links
		var links = $('#header .header-right-box .section-links ul li');
		links.each(function() {
			if ($(this).has('.orange-button').length) {
				$(this).children('.orange-button').remove();
				
				$(this).addClass('orange-button');
				$(this).wrapInner('<div class="container-middle" />')
				       .append('<div class="container-left" />')
					   .prepend('<div class="container-right" />');
			} else {
				$(this).prepend('<div class="arrow" />');
			}	
		});
		
		// Main Menu
		Maccabi.utilities.hover($('#main-menu .menu ul li'));	
    }
    
    var initFooter = function()
    {
        
    }
	
	var initSidebar = function()
	{
		// Sidebar Menu
		var sidebarMenu = $('#sidebar .menu');
		sidebarMenu.addClass('submenu');
		
        var menuItems = sidebarMenu.find('li');
		menuItems.each(function() {
			if (!$(this).find('.icon-arrow').length) {
				$(this).prepend('<div class="icon icon-arrow" />');
			}
		})
		
		
		Maccabi.utilities.hover(menuItems);
		
		// Sidebar Tags
        var topics = $('#sidebar .cmsTagsFilter');
        topics.addClass('menu blue-menu');
		
		var topicItems = topics.find('li');
		topicItems.each(function() {
			if (!$(this).find('.icon-tags').length) {
				$(this).prepend('<div class="icon icon-tags" />');
			}
		});
		
		Maccabi.utilities.hover(topicItems);
		
		topicItems.each(function() {
			var element = $(this).find('a');
			element.text(Maccabi.utilities.ucwords(element.text()));
		})
		
		// Sidebar Archive
		var archive = $('#sidebar .cmsWidgetMonths');
		archive.addClass('menu red-menu');
		archive.children('.widgetTitle').addClass('title');
		
		var archiveItems = archive.find('li');
		archiveItems.each(function() {
            if (!$(this).find('.icon-calendar').length) {
				$(this).prepend('<div class="icon icon-calendar" />');
			}
		});
		
		Maccabi.utilities.hover(archiveItems);
		
		// Sidebar Images
		var sidebarImages = $('#sidebar-images');
		sidebarImages.find('li').each(function() {
			var largeImage = $(this).find('img.image-additional').attr('src');
			
			if (largeImage) {
				var image = $(this).children('img.image'); 
				image.wrap('<a href="' + largeImage + '" rel="prettyPhoto[sidebarGallery]" />');
				
				// Remove AltTag
				image.attr('alt', '');
			}
		});
		
		// Fix Layout
        var leftColumn = $('#bd').children('#yui-main').children('.yui-b');
        var rightColumn = $('#bd').children('.yui-b');
        
        var maxHeight = Math.max(leftColumn.height(), rightColumn.height());
        leftColumn.height(maxHeight);
        rightColumn.height(maxHeight);
        
        initCmsTagsFilter();
	}
    
    var initFeaturePage = function()
    {
        var feature = $('#body .basic-feature');
		
		// Move Header Image Into Header
		$('#hd #header-image').append(feature.children('.section-header-image'));
		
		// Move Feature Sidebar Images
		$('#bd #sidebar-images').append(feature.children('.section-sidebar'));
		
		// Wrap H2 In Span
		feature.find('h2, h3').wrapInner('<span class="heading-wrapper" />');
    }
    
    var initComments = function()
    {

    }
    
    var initPagination = function(parent)
    {
		var pagination = $('#body .pagination');
		
		if (!pagination.has('.control').length) {
		
			// Move Top Pagination
			var firstItem = parent.children().eq(0);
			if (firstItem.hasClass('pagination')) {
				$('.basic-feature').prepend(firstItem.addClass('top-pagination'));
			}
			
			pagination.find('.next, .previous').wrap('<div class="control" />').text('');
			pagination.each(function(){
				if ($(this).find('.page').length < 2) {
					pagination.hide();
					return;
				}
				
				$(this).find('.page:first').before('<div class="pages" />');
				
				var pages = $(this).find('.pages');
				pages.append($(this).find('.page'));
			});
		}
    }
    
    var initCmsListings = function()
    {
		var listings = $('.cmsListings');
		var listingItems = listings.children('.listingItem');
		
		initPagination(listings);
		
		listingItems.each(function() {
			
			// Hide Image If None Exists
			var image = $(this).children('.listing-image');
			if (!image.children('img').length) {
				image.hide();
			}
			
			var link = $(this).children('.listing-link');
			var title = $(this).children('.listing-title');
            
			// Format The Title
			var maxWidth = 432;
			if (title.width() > maxWidth) {
				title.width(maxWidth);
				
				var linkHeight = Math.ceil(link.height());
				var titleHeight = Math.ceil(title.height());
				
				var padding = Math.floor((titleHeight - linkHeight - 2) / 2); 
				
				link.height(titleHeight - 2);
				title.height(titleHeight);
				
				link.children('a').css({'padding-top': padding, 'padding-bottom' : padding });
			}
		});
    }
    
    var initSearchResults = function()
    {
		var listings = $('.searchResults');
        var listingItems = listings.children('.result');
        
        initPagination(listings);
        
        listingItems.each(function() {
            
            // Hide Image If None Exists
            var image = $(this).children('.listing-image');
            if (!image.children('img').length) {
                image.hide();
            }
            
            var link = $(this).children('.listing-link');
            var title = $(this).children('.listing-title');
            
            // Format The Title
            var maxWidth = 432;
            if (title.width() > maxWidth) {
                title.width(maxWidth);
                
                var linkHeight = Math.ceil(link.height());
                var titleHeight = Math.ceil(title.height());
                
                var padding = Math.floor((titleHeight - linkHeight - 2) / 2); 
                
                link.height(titleHeight - 2);
                title.height(titleHeight);
                
                link.children('a').css({'padding-top': padding, 'padding-bottom' : padding });
            }
        });
    }
	
	var initForm = function()
	{
		$('input, textarea, select').each(function() {
			$(this).addClass($(this).attr('type'));
		});
		
		$('#bd input.submit').each(function() {
			if (!$(this).parent().hasClass('button')) {
				$(this).wrap('<div class="button" />');
			}
		});
		
		Maccabi.utilities.focus($('input, textarea'));
	}
	
	var initIEHacks = function()
    {
        var version = parseInt($.browser.version, 10);
		
		// IE  <= 7
		if (version <= 7) {
			// Fix Header Search Box
			$('#hd #header .header-site-search').children('.container-middle').width(215);
			
			// Fix Header Links
			$('#hd #header .header-right-box').width(500);
			$('#hd #header .header-right-box .section-links').css('float', 'right');
			$('#hd #header .header-right-box .section-links ul li').width(260);
		}
    }
	
	var initCmsTagsFilter = function()
	{
		var filter = $('#sidebar .cmsTagsFilter');
		
		var list = filter.children('ul').css('display', 'none').children('li');
		if (list.length > 0) {
			filter.append(
				'<div class="searchForm">' +
					'<form id="cmsTagsFilterForm" method="get">' +
						'<dl class="zend_form">' +
							'<dd>' +
								'<select>' +
									'<option value="/news/" />' +
								'</select>' +
							'</dd>' +
						'</dl>' +
					'</form>' +
				'</div>'
			);
			
			var dropdown = filter.find('.searchForm form dl dd select');
			list.each(function() {
				dropdown.append('<option />');
				
				var option = dropdown.find('option:last');
				option.attr('value', $(this).children('a').attr('href'));
				option.text($(this).children('a').text().replace(/\([0-9]+\)/, ''));
				
				if ($(this).hasClass('selected')) {
					option.attr('selected', 'selected');
				}
			});
			
			dropdown.change(function() {
				window.location = $(this).val();
			});
		}
	}
    
    return {
        /**
         * Init method
         * 
         * @return  void
         */
        init: function () 
        {
            initWebsite();
            initHeader();
			initForm();
            initFooter();
        },
        
		initIEHacks: initIEHacks,
		initSidebar: initSidebar,
        initComments: initComments,
        initFeaturePage: initFeaturePage,
        initCmsListings: initCmsListings,
        initSearchResults: initSearchResults,
        initCmsTagsFilter: initCmsTagsFilter
    };
}());

Maccabi.pages = (function() {
    
    var initHomepage = function()
    {
		var slideshow = $('#header-image .slideshow');
		
		// Initialise Slideshow
        slideshow.scrollable({ circular: true }).autoscroll(3000);
		Maccabi.utilities.hover(slideshow.find('.link'));
		
		// Format Homepage Box Borders
		$('.homepage-box').each(function() {
			$(this).children('.border').height($(this).height());
		});
    }
    
    var initDefault = function()
    {
		// Initialise Basic Feature
        Maccabi.layout.initFeaturePage();
        
        // Initialise CMS Listings
        setTimeout('Maccabi.layout.initCmsListings()', 1000);
        
        // Initialise Search Results
        setTimeout('Maccabi.layout.initSearchResults()', 1000);
		
		// Initialise Sidebar
		Maccabi.layout.initSidebar();
		
		// Initialise Lightbox
		Maccabi.utilities.initLightbox();	
	}
	
	var initDonate = function()
	{
		// Move Errors After Title
		var body = $('#body');
		var errors = body.siblings('.errors').css('margin-top', '20px');
		body.find('.basic-feature .snippet-title').after(errors);
		
		var donateForm = $('#donate .donate-form-table form');
        
        donateForm.find('input.text').each(function() {
            if ($(this).siblings('.errors').length) {
                $(this).addClass('error');
            }
        });
        
        // Add Asterisks Next To Required Fields
        donateForm.find('td.required').append('<span class="required-text">*</span>');
	}
	
	var initSponsors = function()
	{
		var sponsors = $('.sponsors-listing');
		Maccabi.utilities.createListGrid(sponsors, 4);
	}
	
	var initEvents = function()
	{
		// Add Default To Custom Doc
		$('#custom-doc').addClass('default');
		
		// Month Filter
		$('#sidebar .searchForm').wrap('<div class="monthFilter menu red-menu" />');
		
		var monthFilter = $('#sidebar .monthFilter');
		monthFilter.prepend('<h3 class="title">Filter events by</h3>');
		
		monthFilter.find('select').change(function() {
			monthFilter.find('form').submit();
		});
		
		// Listings
		var noTickets = 'No-Ticket Event';
		var listings = $('.eventListings');
		listings.children('.listingItem').each(function() {
			
			var listingType = $(this).children('.listing-type');
			if (listingType.text() == noTickets) {
				
				var title = $(this).children('.listing-title');
				var titleText = title.children('a').text();
				
				title.children('a').remove();
				title.append('<span>' + titleText + '</span>');
				
				$(this).children('.listing-link').remove();
			}
		});
		
		// Feature
		var event = $('.event');
		event.addClass('basic-feature');
		
        // Move Title To Top
		var title = event.children('.title');
		title.replaceWith('<h2 class="title">' + title.text() + '</h2>');
		title = event.children('.title');
		event.prepend(title);
		title.after('<div class="clear" />');
		

		// Move Date To Top
		var date = event.children('.date');
		date.addClass('subtitle');
		event.prepend(date);
		date.after('<div class="clear" />');
		
		// Add Book Tickets Title
		event.after('<div class="basic-feature"><h2 class="book-title">Book tickets</h2></div>');
		
		// Voucher Code
		var voucherCode = $('.eventVoucherCode');
		voucherCode.after('<div class="clear" />');
		
		var submit = voucherCode.find('#applyVoucherCode-element');
		submit.find('input').val('');
		
		// Guest Details
		if ($('#body').has('#eventGuestDetails').length) {
			var guestDetails = $('#body #eventGuestDetails');
			
			// Add Title
			guestDetails.children('h1').replaceWith('<div class="basic-feature"><h2>Guest details</h2></div>');
			
			// Change Generated Title
			guestDetails.children('div.title').html('<h4>Please provide the details for each person attending the event</h4>');
		}
		
		// Checkout
		if ($('#body').has('.basket').length) {
			var basket = $('#body .basket');
			
			// Add Title
			basket.children('h1').replaceWith('<div class="basic-feature"><h2>Checkout</h2></div>');
			
			// Add Form Title
            basket.children('.customerInfo').prepend('<h4>Billing details</h4>');
			
			// Change Button Text
			basket.find('.button input').val('Go to payment');
		}
		
	}
	
    return {
        
		initEvents: initEvents,
		initDonate: initDonate,
		initDefault: initDefault,
		initSponsors: initSponsors,
        initHomepage: initHomepage
        
    };
}());

Maccabi.pages.photoGallery = (function() {

    var init = function() 
	{
		// Initialise Sidebar
        setTimeout("Maccabi.layout.initSidebar()", 1000);
	}
	
	var initListing = function()
    {
		// Photo Gallery Initialisation
        init();
		
		// Move The Pagination
        $('.basic-feature').prepend($('.top-pagination'));
    }

    var initAlbum = function()
    {
        // Photo Gallery Initialisation
        init();
		
		// Initialise Lightbox
        Maccabi.utilities.initLightbox({ social_tools: null });

        var mainImageContainer = $('.album-main-container');
        var mainImage = mainImageContainer.find('.container-middle a.main-image');
        var ajaxLoader = mainImageContainer.find('img.ajax-loader');

        var thumbnailsContainer = $('.album-thumbnails-container');
        var items = thumbnailsContainer.find('.items');

        // Initialise Scroller
        thumbnailsContainer.find('.container-middle').scrollable().navigator();
		
		// Center Navigator
		var navigator = thumbnailsContainer.find('.navigator-container');
		navigator.width(navigator.children('.navi').width() + 10);
		

        // Make First Thumbnail Selected
        var thumbnails = items.find('img');
        thumbnails.filter(':first').addClass('selected');

        // Add Click Handler To Thumbnails
        thumbnails.click(function() {

            var thumbnail = $(this);

            // Change Class
            thumbnails.removeClass('selected');
            thumbnail.addClass('selected');
            
            mainImage.children('img').fadeOut('slow', function() {
                ajaxLoader.fadeIn('slow', function() {
                    // Change Main Image
                    mainImage.children('img').attr('src', thumbnail.attr('mainImage'));
                    mainImage.attr('href', thumbnail.attr('lightboxImage'));

                    // Change Next Link
                    mainImageContainer.find('.container-right a').attr('rel', thumbnail.siblings('.nextImage').attr('rel'));

                    // Change Prev Link
                    mainImageContainer.find('.container-left a').attr('rel', thumbnail.siblings('.prevImage').attr('rel'));

                    // Change Purchase Link
                    $('#album .buy-photo-button-container .button a').attr('href', thumbnail.siblings('.purchasePhoto').attr('rel'));

                    setTimeout('Maccabi.pages.photoGallery.fadeMainImageIn()', 750);
                });
            });

            return false;
        });

        var api = thumbnailsContainer.find('.container-middle').data('scrollable');

        // Add Click Handler To Arrows
        mainImageContainer.find('a.arrow-link').click(function() {
            // New Image ID
            var thumbnailId = $(this).attr('rel').replace('photo', 'photo-thumbnail');

            // Find The Image In The Thumbnails
            var thumbnail = thumbnails.filter('#' + thumbnailId);

            // Click It
            thumbnail.click();

            // Check Scroller Still Has Selected Image In View
            var index = thumbnail.parents('.container').index();
            var scrollerIndex = api.getIndex();

            if (scrollerIndex != index) {
                api.move(index - scrollerIndex);
            }

            return false;
        });
    }
	
	var initGallerySearch = function()
	{
		var form = $('.photo-search form');
		
		var keywords = form.find('input#photo-keywords');
		var defaultText = 'Search';
		
		if (keywords.val() == '') {
			keywords.val(defaultText);
		}
		
		Maccabi.utilities.focus(keywords, defaultText);		
		
		form.find('a#submit-button').click(function() {
            form.submit();
			return false;	
		});
		
		form.submit(function() {
			if (keywords.val() == defaultText) {
				keywords.val('');
			}
		});
	}

    var initGalleryArchive = function()
    {
        var galleryArchive = $('.gallery-archive-container');
        Maccabi.utilities.hover(galleryArchive.find('li'));
    }
	
	var initPurchase = function()
	{
		// Photo Gallery Initialisation
		init();
	}
	
	var initCheckout = function()
	{
		var orderForm = $('#checkout .checkout-order-table form');
		
		orderForm.find('.delete a').click(function() {
			
			// Get Sibling Select Box
			var select = $(this).parent().siblings().find('select');
			select.val('0');
			
			orderForm.find('.update input').click();
			
			// Deactive Click
			return false;
		});
		
		var deliveryForm = $('#checkout .delivery-form form');
		
		deliveryForm.find('input.text').each(function() {
            if ($(this).siblings('.errors').length) {
				$(this).addClass('error');
			}
		});
		
		// Add Asterisks Next To Required Fields
		deliveryForm.find('td.required').append('<span class="required-text">*</span>');
	}
	

    /* Private Method - Shouldn't Be Used! */
	var _fadeMainImageIn = function()
    {
        var mainImageContainer = $('.album-main-container');
        mainImageContainer.find('.ajax-loader').fadeOut('slow', function() {
            mainImageContainer.find('a.main-image img').fadeIn();
        });
    }

    return {
        initAlbum: initAlbum,
        initListing: initListing,
		initPurchase: initPurchase,
		initCheckout: initCheckout,
		initGallerySearch: initGallerySearch,
        initGalleryArchive: initGalleryArchive, 

        fadeMainImageIn: _fadeMainImageIn
    };

}());


$(function(){
    Maccabi.layout.init();
  

	if ($.browser.msie == true) {
		Maccabi.layout.initIEHacks();
	}
    
    if ($('#custom-doc').hasClass('homepage')) {
        setTimeout("Maccabi.pages.initHomepage()", 1000);
    }
    
	if ($('#custom-doc').hasClass('events')) {
		Maccabi.pages.initEvents();
	}
    
    if ($('#custom-doc').hasClass('default')) {
        Maccabi.pages.initDefault();
    }
	
	if ($('#body').has('.sponsors-listing').length) {
		Maccabi.pages.initSponsors();
	}
	!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
	$('.news-feature .snippet-tweet-and-fb div.fb').prepend('<div class="twitter"><a href="https://twitter.com/share" class="twitter-share-button">Tweet</a></div>');
});

