
/**
 * DOM Utilies Object for handling basic DOM actions
 * @author					Dave Shepard
 * @version					1.0
 * @required libraries:		JQuery 1.3.2 or later
 * 
 * Usage:
 *     $(document).ready(function(){
 *     		DOMUtilities.init();
 *     });
 *     
 * Can be initialized via the init(); method to apply to entire <body> or
 * a scope can be passed to limit the initialization to the child elements
 * of a particular element. Individual methods can als be called and passed
 * a scope.
 */
var DOMUtilities = {
	targetBlank: function(locality){
		// XHTML 1.0 Strict work around for external links
		$(locality+' a[rel*="external"]').attr("target","_blank");
	},
	inputAutoClear: function(locality){
		$(locality+' input.clearField').focus(function(){
			if(this.defaultValue == this.value) this.value='';
		}).blur(function(){
			if(this.value == '') this.value = this.defaultValue;
		});
	},
	imgRollover: function(locality){
		// Image roll-over setup
		$(locality+' img.rollOver, '+locality+' input[type="image"].rollOver')
			.mouseover(function(){
				if (this.src.indexOf("_i.") != -1) {
					this.src = this.src.replace("_i.", "_o.");
				}
			}).mouseout(function(){
				if (this.src.indexOf("_o.") != -1) {
					this.src = this.src.replace("_o.", "_i.");
				}
				if(this.src.indexOf("_a.")) {
					this.src = this.src.replace("_a.","_i.");
				}
			}).filter("input").mousedown(function(){
				this.src = this.src.replace("_o.","_a.");
			}).mouseup(function(){
				this.src = this.src.replace("_a.","_i.");
			});
	},
	init: function(locality){
		if(locality == null) {
			locality = "body";
		}
		this.targetBlank(locality);
		this.inputAutoClear(locality);
		this.imgRollover(locality);
	}
}
var FancyBox = {
	boxen: function(){
		$("a.fancybox").fancybox({
			hideOnContentClick:false,
			scrolling: 'no',
			padding: 0,
			overlayColor: '#000',
			overlayOpacity: 0.7,
			onComplete: function(elem){
				// If the clicked link ends in 'videos.html'
				if(new Boolean(elem[0].href.match(/videos$/))){
					VideoSwitcher.init();
					Cufon.replace('#video_list_wrapper .cufonBlack',{ fontFamily: "Black" });
					if($('#video_list_wrapper').length){
						$('#video_list_wrapper').scrollbar({arrows:true,arrowPosition:'bottom', scrollspeed: 20});
					}
				}
                if(new Boolean(elem[0].href.match(/apply-now$/))){
					Cufon.replace('#application_lightbox .cufonBlack',{ fontFamily: "Black" });
					Cufon.replace('#application_lightbox .cufonLight',{ fontFamily: "Light" });
                    startForms.init();
                    DOMUtilities.init();
				}
			}
		});
	},
	init: function(){
		this.boxen();
	}
}

var VideoSwitcher = {
	videos: '',
	videoPlayer: '',
	
	loadVideo: function(index){
		var codeToLoad = $(this.videos[index]).html();
		this.videoPlayer.fadeOut("fast",function(){
			$(this).show().html(codeToLoad);
		})
		$('#videos li').removeClass('active');
		$('#videos li .playing').remove();
		$('#videos li:eq('+index+')').addClass('active').append('<span class="playing">Now Showing</span>');
	},
	populateThumbs: function(){
		var self = this;
		for (var i=0; i<self.videos.length; i++) {
			var embedCode = $(self.videos[i]).html();
			var videoThumb = $(self.videos[i]).html().match('su=(http://[^&]*\.(jpg|png|gif))')[1];
			$(self.videos[i]).parent().prepend('<div class="imageWrapper"><img src="'+videoThumb+'" height="59" alt="Video Thumbnail" /></div>');
			
//			// Parse Speaker information
//			// Maybe not...
//			var matches = embedCode.match(/vu=[a-zA-Z:\/\/\.]*dynamic\/([A-Za-z]+)/)
//			var camelCaseName = matches[1];
//			var speakerName = $.trim(camelCaseName.replace(/([A-Z])/g,' $1'));
//			var talkTitle = $.trim(embedCode.match(/talk=([a-zA-Z_]*)/)[1].replace(/_/g,' ').replace(/ s /g,'\'s ').replace(speakerName.toLowerCase(),''));
//			$(self.videos[i]).parent().find('a').text(speakerName);
//			$(self.videos[i]).parent().find('span').text(talkTitle);
		};
	},
	init: function(){
		// Show first video in player
		this.videos = $('#videos li .embedCode');
		this.videoPlayer = $('#video_player');
		//this.loadVideo(Math.floor(Math.random()*(this.videos.length))); // display random video when starting.
		this.loadVideo(0); // display first.		
		// Populate thumbnails
		this.populateThumbs();
		
		// Setup default events
		$('#videos li a').each(function(index){
			$(this).click(function(event){
				event.preventDefault();
			});
		});
		$('#videos li').each(function(index){
			$(this).click(function(event){
				VideoSwitcher.loadVideo(index);
			});
		});
	}
}

var startForms = {
    contact: function(){
        window.validateForms['contact_form'] = new FormValidator('contact_form');
        $('#sumbit_contact-us').click(function(e){
            if (window.validateForms['contact_form'].validate()) {
                e.preventDefault();
                var parameters = $('#contact_form').serialize();
					parameters+= "&submit=submit";
                    $(this).hide().siblings('.submitting').show();
				$.ajax({
					url: '/wp-content/themes/tedxsd/lib/contact.php',                    
					type: 'post',
                    dataType: 'json',
					data: parameters,
					complete: function(response){
                        var responseJSON = $.parseJSON(response.responseText);
                        if(responseJSON.success){
        					var thanksPage = responseJSON.thanksPage;
        					window.location = thanksPage;	
        				}else{
                            var failure = responseJSON.success;
                            var oopsElem = document.createElement('DIV');
                            $(oopsElem).addClass('failedSend').attr('id','fail_send').html('Oops, something went wrong. We apologize for any inconvenience.').appendTo('#li_submit-speaker');                            
                        }
					}
				});                
        		return false;	
            }
        });
    },
    speakers: function(){
        window.validateForms['suggest_speaker_form'] = new FormValidator('suggest_speaker_form');
        $('#sumbit_speaker').click(function(e){
            if (window.validateForms['suggest_speaker_form'].validate()) {
                e.preventDefault();
                var parameters = $('#suggest_speaker_form').serialize();
					parameters+= "&submit=submit";
                    $(this).hide().siblings('.submitting').show();
				$.ajax({
					url: '/wp-content/themes/tedxsd/lib/speakers.php',
					type: 'post',
                    dataType: 'json',
					data: parameters,
					complete: function(response){
                        var responseJSON = $.parseJSON(response.responseText);
                        if(responseJSON.success){
        					var thanksPage = responseJSON.thanksPage;
        					window.location = thanksPage;	
        				}else{
                            var failure = responseJSON.success;
                            var oopsElem = document.createElement('DIV');
                            $(oopsElem).addClass('failedSend').attr('id','fail_send').html('Oops, something went wrong. We apologize for any inconvenience.').appendTo('#li_submit-speaker');                            
                        }
					}
				});
        		return false;	
            }
        });
    },
    sponsors: function(){
        window.validateForms['sponsor_form'] = new FormValidator('sponsor_form');
        $('#sumbit_sponsors').click(function(e){
            if (window.validateForms['sponsor_form'].validate()) {
                e.preventDefault();
                var parameters = $('#sponsor_form').serialize();
					parameters+= "&submit=submit";
                    $(this).hide().siblings('.submitting').show();
				$.ajax({
					url: '/wp-content/themes/tedxsd/lib/sponsors.php',
					type: 'post',
                    dataType: 'json',
					data: parameters,
					complete: function(response){
                        var responseJSON = $.parseJSON(response.responseText);
                        if(responseJSON.success){
        					var thanksPage = responseJSON.thanksPage;
        					window.location = thanksPage;	
        				}else{
                            var failure = responseJSON.success;
                            var oopsElem = document.createElement('DIV');
                            $(oopsElem).addClass('failedSend').attr('id','fail_send').html('Oops, something went wrong. We apologize for any inconvenience.').appendTo('#li_submit-speaker');                            
                        }
					}
				});
        		return false;	
            }
        });
    },
    application: function(){
        window.validateForms['application_form'] = new FormValidator('application_form');
        $('#sumbit_application').click(function(e){
            if (window.validateForms['application_form'].validate()) {
                e.preventDefault();
                var parameters = $('#application_form').serialize();
					parameters+= "&submit=submit";
                    $(this).hide().siblings('.submitting').show();
				$.ajax({
					url: '/wp-content/themes/tedxsd/lib/application.php',
					type: 'post',
                    dataType: 'json',
					data: parameters,
					complete: function(response){                        
                        var responseJSON = $.parseJSON(response.responseText);
                        if(responseJSON.success){
        					var thanksPage = responseJSON.thanksPage;
        					window.location = thanksPage;
        				}else{
                           var failure = responseJSON.success;
                            var oopsElem = document.createElement('DIV');
                            $(oopsElem).addClass('failedSend').attr('id','fail_send').html('Oops, something went wrong. We apologize for any inconvenience.').appendTo('#application_submit');
                        }
					}
				});
        		return false;	
            }
        });
    },
    newsletter: function(){
        var isValid = false;
        function checkEmail(email) { 
            var pattern = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
            var emailVal = $("#" + email).val();
            return pattern.test(emailVal);
        }
        var id = "ultjhl";
        var emailId = id + "-" + id;
        
        window.validateForms['email_signup_form'] = new FormValidator('email_signup_form');
        $('#email_signup_submit').click(function(e){            
            if (window.validateForms['email_signup_form'].validate()) {
                e.preventDefault();                
                var formAction = $('#email_signup_form').attr('action');
                var parameters = $('#email_signup_form').serialize();
                parameters += "&action=" + formAction;
                $.ajax({
                    url: '/wp-content/themes/tedxsd/lib/cm_email_signup.php',
                    type: 'POST',
                    data: parameters,
                    success: function(data){
                        // Server-side validation
                        if (data.search(/invalid/i) != -1) {
                            //Invalid
                            //set error
                            $('#'+emailId).addClass('error');                            
                        }
                        else {
                            // Fire off Google Analytics fake pageview
                            var pageTracker = _gat._getTracker("UA-30039-85");
                            pageTracker._trackPageview("/newsletter_signup");
                            
                            //remove error
                            if($('#'+emailId).hasClass('error')){
                                $('#'+emailId).removeClass('error');
                            }
                            
                            $('#newsletter_success').slideDown('slow', function(){
                                $('#newsletter_success').animate({
                                    opacity: 1
                                }, 3000, function(){
                                    $('#newsletter_success').slideUp('normal');
                                })
                            });
                        }
                    }
                });
                return false;
            }            
        });
    },
    addValidator: function(formID){
        window.validateForms[formID] = new FormValidator(formID);
    },
    init: function(){
        if($('#application_form').length){startForms.application();}
        if($('#sponsor_form').length){startForms.sponsors();}
        if($('#suggest_speaker_form').length){startForms.speakers();}
        if($('#contact_form').length){startForms.contact();}
        if($('#email_signup_form').length){startForms.newsletter();}
    }
}

var Speakers = {
    scroll: function(linkIndex){
        $(document).scrollTo($('#speakers .bio:eq('+linkIndex+')'),1000);
    },
    readMore: function(theLink){
        theLink.siblings('div.hidden').slideDown(250, function(){
            theLink.removeClass('more').addClass('less').html('less');
        });
    },
    readLess: function(theLink){
        theLink.siblings('div.hidden').slideUp(250, function(){
            theLink.removeClass('less').addClass('more').html('read more');
        });        
    },
    init: function(){
        if($('#speakers .bio a.readMore, #sponsors a.readMore').length){
            $('#speakers .bio a.readMore, #sponsors a.readMore').click(function(e){
                e.preventDefault();
                var theLink = $(this);
                if(theLink.hasClass('more')){                    
                    Speakers.readMore(theLink);
                }else if(theLink.hasClass('less')){
                    Speakers.readLess(theLink);
                }                
                return false;
            });
        }
        if($('#speakers-nav li').length){
            $('#speakers-nav li a').click(function(e){
                e.preventDefault();
                var linkIndex = $('#speakers-nav li a').index($(this));
                Speakers.scroll(linkIndex);
                return false;
            });
        }
        if($('a.backToTop[href=#scrollTo]').length){
            $('a.backToTop[href=#scrollTo]').click(function(e){
                e.preventDefault();
                $(document).scrollTo($('#speakers'),1000);
                return false;
            });
        }
    }
}
var cornerNav = {
    currentActiveIndex:0,
    listen: function(){
        var activeIndex = $('ul.verticalSlideNav li').index($('ul.verticalSlideNav li.active'));
        if (activeIndex != cornerNav.currentActiveIndex) {
            switch (activeIndex) {
                case 0:
                    // set TEDx Speakers Corner Nav Active
                    $('#slidedeck_cornernav a:eq(0)').fadeIn().addClass('active');
                    $('#slidedeck_cornernav a:eq(1)').fadeOut().removeClass('active');
                    break;
                case 1:
                    // set Connect Corner Nav Active
                    $('#slidedeck_cornernav a:eq(0)').fadeOut().removeClass('active');
                    $('#slidedeck_cornernav a:eq(1)').fadeIn().addClass('active');
                    break;
                case 2:
                    // remove Corner Nav Link
                    $('#slidedeck_cornernav a:eq(0)').fadeOut().removeClass('active');
                    $('#slidedeck_cornernav a:eq(1)').fadeOut().removeClass('active');
                    break;
                default:
                    return false;
            }
            cornerNav.currentActiveIndex = activeIndex;
        }
    },
    init: function(tedxDeck){
        var activeCheck;        
        activeCheck = setInterval("cornerNav.listen()",50);
        
        if($('#slidedeck_cornernav').length){
           $('#slidedeck_cornernav a[href=#speakers]').click(function(e){
               e.preventDefault();
               tedxDeck.vertical().goTo(2);
               return false;
           });
           $('#slidedeck_cornernav a[href=#connect]').click(function(e){
               e.preventDefault();
               tedxDeck.vertical().goTo(3);
               return false;
           });
        }
    }
};

// Speaker Action script for handling goto's and prev and next
var speakerAction = {
    speakerSlideCount: 0,
    prevSlide: function(theIndex){
        speakerAction.goToSlide(theIndex - 1);
    },
    nextSlide: function(theIndex){
        speakerAction.goToSlide(theIndex + 1);
    },
    goToSlide: function(theIndex){
        var speakerName = $('.speakerDeck dt:eq('+ ( theIndex + 1 ) +')').html();
        //change speaker name on next link        
        $('#next_speaker a[href=#next]').html(speakerName);
        
        $('#speaker_nav li.sNav a').removeClass('active');
        $('#speaker_nav li.sNav a:eq('+ theIndex +')').addClass('active');
        speakerDeck.goTo(theIndex+1);
        if((theIndex + 1) == speakerAction.speakerSlideCount){
            // disable the next button
            $('#next_speaker a[href=#next]').addClass('disabled');
            $('#prev_speaker a[href=#prev]').removeClass('disabled');
        }else if((theIndex + 1) == 1){
            // disable the previous button
            $('#prev_speaker a[href=#prev]').addClass('disabled');
            $('#next_speaker a[href=#next]').addClass('disabled');
        }else{
            // enable both next/previous buttons
            $('#next_speaker a[href=#next],#prev_speaker a[href=#prev]').removeClass('disabled');
        }
    },
    init: function(){
        if($('#speaker_nav').length){
            speakerAction.speakerSlideCount = $('.speakerDeck dd').length;
            $('#speaker_nav li.sNav a').click(function(e){
                e.preventDefault();
                var theIndex = $('#speaker_nav li.sNav a').index($(this));
                speakerAction.goToSlide(theIndex);
                return false;
            });
            $('.speakerPreviewList li.speakerPreview a').click(function(e){
                e.preventDefault();
                var theIndex = $('.speakerPreviewList li.speakerPreview a').index($(this));
                speakerAction.goToSlide(theIndex + 1);
                return false;
            });
            $('#prev_speaker a[href=#prev]').click(function(e){
                e.preventDefault();
                if($(this).hasClass('disabled')){
                    return false;
                }else{
                    var theIndex = $('#speaker_nav li.sNav a').index($('#speaker_nav li.sNav a.active'));
                    speakerAction.prevSlide(theIndex);
                }                    
                return false;
            });
            $('#next_speaker a[href=#next]').click(function(e){
                e.preventDefault();
                if($(this).hasClass('disabled')){
                    return false;
                }
                else{
                    var theIndex = $('#speaker_nav li.sNav a').index($('#speaker_nav li.sNav a.active'));
                    speakerAction.nextSlide(theIndex);
                }
                return false;
            });                
        }            
    }
};

$(document).ready(function(){
    window.validateForms = {};
    DOMUtilities.init();
	FancyBox.init();
    startForms.init();
    Speakers.init();
});
