var dateBox = undefined;
var singerCountTime;
var quoteTime;
var numSingers = 5;
var soundReady = false;
var pagePlayer = null;
var uniqueCounter = 1;
var ajaxUrlCleanRegex = new RegExp("[^A-z_-\d/~\.+]", "g");

if (typeof soundManager != "undefined") {
    soundManager.url = '/Content/script';
    soundManager.flashVersion = 9;
    soundManager.debugMode = false;
}
(function (window, document, undefined) {
    var ajaxError = function (XMLHttpRequest, textStatus, errorThrown) {
        console && console.log(textStatus + ': ' + errorThrown);
    },
    SITE = {
        //controller
        home: {
            init: function () {
            	$("#faq ul li a").click(function(e) {
            		e.stopPropagation();
            		e.preventDefault();
            		var arr = $(this).attr("href").split("#");
				    var a = $("h4#" + arr[1]);
				    LogAnalytics("faq/" + $(a).text());
            		$(window).scrollTo(a, 200, function(a) {
				        $(a).css("background-color", "#eeeeee").animate({ backgroundColor: "#ffffff" }, 'slow');
				        $(a).nextUntil("h4").css("background-color", "#eeeeee").animate({ backgroundColor: "#ffffff" }, 'slow');
				    });
            	});
            	$("#faq p a.top").live("click", function(e) {
            		e.stopPropagation();
            		e.preventDefault();
				    $(window).scrollTo($("#subNav"), 200);
				});
            }            
        },
        contact: {
            init: function () {
                $(".whatchawhatchawhatchawant a").each(function () {
                   var current = $(this).text();
                    current = current.replace(/ho/ig, "");
                    current = current.replace(/ey/ig, "");
                    current = current.replace(/p/ig, "");
                    current = current.replace(/t at /ig, "@");
                    current = current.replace(/nyhs/ig, "newyorkholidaysingers");
                    current = current.replace(/ dot /ig, ".");
                    current = current.replace(/org/ig, "com");
                    $(this).text(current);
                    $(this).attr("href", "mailto:" + $.trim(current));
                });
                $(".whatchawhatchawhatchawant").removeClass("whatchawhatchawhatchawant");

                $("#contactVia").click(function() {
                    var selected = $(this).find("input[type='radio']:checked");
                    switch ($(selected).val()) {
                        case "email":
                            $("label[for='telephone']").text("Your telephone number:");
                            $("label[for='email']").html("<strong>Your email address:</strong>");
                            break;
                        case "telephone":
                            $("label[for='telephone']").html("<strong>Your telephone number:</strong>");
                            $("label[for='email']").text("Your email address:");
                            break;
                    }
                });
                $("#sendForm").click(function(e) {
                    e.stopPropagation();
                    e.preventDefault();
                    SITE.contact.submitForm($(this));
                });
            },
            submitForm: function(btn) {
                $("#contactForm #formSuccess").stop().slideUp("fast").remove();
                $("#contactForm .contactFormError").stop().slideUp("fast");
                if ($(btn).attr("clicked") != "true" && UTIL.validateForm()) {
                    $(btn).stop().animate({ "opacity": "0.3" }).attr("clicked", "true").find("span").attr("orig", $(btn).find("span").text()).text("One Moment...");

                    $("#contactForm input,#contactForm textarea,#contactForm select").attr("disabled", "disabled");
                    var nameVal = $("#contactForm #name").val();
                    var contactViaVal = $("#contactForm #contactVia input:checked").val();
                    var emailVal = $("#contactForm #email").val();
                    var telephoneVal = $("#contactForm #telephone").val();
                    var regardingVal = $("#contactForm #ddlRegarding").val();
                    var extraVal = $("#contactForm #extra").val();

                    var formData = { name: nameVal, email: emailVal, telephone: telephoneVal, re: regardingVal, contactVia: contactViaVal, extra: extraVal };
                    $.ajax({
                        url: "/contactforms.asmx/ContactRequest",
                        global: false,
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        data: JSON.stringify(formData),
                        cache: false,
                        success: function(data) {
                            $("#sendForm").stop().slideUp("slow").parents("form").append('<p id="formSuccess" style="display: none;">Thank you! Your information has been sent. We\'ll be in touch soon.<br/><br/><a class="ajaxLink" href="index.html" name="index.html">Return to the home page</a></p>');
                            $("#contactForm #formSuccess").stop().slideDown("fast");
                        },
                        error: function(err) {
                            var err = eval("(" + err.responseText + ")");
                            var errorMsg = err.Message;
                            switch (errorMsg) {
                                case "missing email":
                                case "invalid email address":
                                    $("#errorForemail").stop().slideDown("fast");
                                    break;
                                case "missing name":
                                    $("#errorForname").stop().slideDown("fast");
                                    break;
                                case "missing telephone":
                                    $("#errorFortelephone").stop().slideDown("fast");
                                    break;
                                case "missing via":
                                    $("#errorForvia").stop().slideDown("fast");
                                    break;
                            }

                            $("#sendForm").removeAttr("clicked").stop().animate({ "opacity": "1.0" }).parents("form").append('<p id="formSuccess" style="display: none;">There was an error sending us your information. Please verify and try again.</p>').find("#sendForm").find("span").text("Submit This Form");
                            $("#contactForm #formSuccess").stop().slideDown("fast");
                            $("#contactForm input,#contactForm textarea,#contactForm select").removeAttr("disabled");
                        }

                    });
                }
            }
        },
        booking: { 
            init: function() {
               $(document).click(function(e) {
                    //isCalendaring = true;
                });
                var isCalendaring = false;
                $(":date").dateinput({
                    value: new Date(2011, 11, 1),
                    max: new Date(2012,0,1),
                    min: new Date(2011,10,20),
                    onBeforeShow: function() {
                        //     dateBox = this;
                    },
                    onHide: function() {
                        
                    }
                }).change(function() {
                    var api = $(this).data("dateinput");
                    var selectedDate = api.getValue('mm/dd/yyyy');
                    if(!isCalendaring)
                    api.hide();
                });
                $("#contactForm input:not(:date)").focus(function() {
                    setTimeout(function() {
                            var api = $(":date").data("dateinput");
                            if(api != undefined && api.isOpen())
                                api.hide();
                        }, 0);
                });
                $("#contactVia").click(function() {
                    var selected = $(this).find("input[type='radio']:checked");
                    switch ($(selected).val()) {
                        case "email":
                            $("label[for='telephone']").text("Your telephone number:");
                            $("label[for='email']").html("<strong>Your email address:</strong>");
                            break;
                        case "telephone":
                            $("label[for='telephone']").html("<strong>Your telephone number:</strong>");
                            $("label[for='email']").text("Your email address:");
                            break;
                    }
                });
                $("#sendForm").click(function(e) {
                    e.stopPropagation();
                    e.preventDefault();
                    SITE.booking.submitForm($(this));
                });
            },
            submitForm: function(btn) {
                if($("#contactForm #formSuccess").length > 0)
                    $("#contactForm #formSuccess").stop().slideUp("fast").remove();
                $("#contactForm .contactFormError").stop().slideUp("fast");
                if ($(btn).attr("clicked") != "true" && UTIL.validateForm()) {
                    $(btn).stop().animate({ "opacity": "0.3" }).attr("clicked", "true").find("span").attr("orig", $(btn).find("span").text()).text("One Moment...");
                    
                    $("#contactForm input,#contactForm textarea,#contactForm select").attr("disabled", "disabled");
                    var nameVal = $("#contactForm #name").val();
                    var contactViaVal = $("#contactForm #contactVia input:checked").val();
                    var emailVal = $("#contactForm #email").val();
                    var telephoneVal = $("#contactForm #telephone").val();
                    var extraVal = $("#contactForm #extra").val();
                    var descriptionVal = $("#contactForm #description").val();
                    var dateVal = $("#contactForm #date").val();
                    var timeVal = $("#contactForm #timeOfDay input:checked").val();
                    timeVal = timeVal != undefined ? timeVal : "None specified.";
                    var eventTypeVal = $("#contactForm #ddlEventType").val();
                    var locationVal = $("#contactForm #location").val();

                    var formData = { name: nameVal, email: emailVal, telephone: telephoneVal, contactVia: contactViaVal, extra: extraVal, location: locationVal, description: descriptionVal, date: dateVal, timeOfDay: timeVal, eventType: eventTypeVal };
                    $.ajax({
                        url: "contactforms.asmx/BookingRequest",
                        global: false,
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        data: JSON.stringify(formData),
                        cache: false,
                        success: function(data) {
                            $("#sendForm").stop().slideUp("slow").parents("form").append('<p id="formSuccess" style="display: none;">Thank you! Your information has been sent. We\'ll be in touch soon.<br/><br/><a class="ajaxLink" href="/" name="/">Return to the home page</a></p>');
                            $("#contactForm #formSuccess").stop().slideDown("fast");
                        },
                        error: function(err) {
                            var err = eval("(" + err.responseText + ")");
                            var errorMsg = err.Message;
                            switch (errorMsg) {
                                case "missing email":
                                case "invalid email address":
                                    $("#errorForemail").slideDown("fast");
                                    break;
                                case "missing name":
                                    $("#errorForname").slideDown("fast");
                                    break;
                                case "missing telephone":
                                    $("#errorFortelephone").slideDown("fast");
                                    break;
                                case "missing via":
                                    $("#errorForvia").slideDown("fast");
                                    break;
                                case "missing location":
                                    $("#errorForlocation").slideDown("fast");
                                    break;
                            }
                            $("#sendForm").removeAttr("clicked").stop().animate({ "opacity": "1.0" }).parents("form").append('<p id="formSuccess" style="display: none;">There was an error sending us your information. Please verify and try again.</p>').find("#sendForm").find("span").text($(btn).find("span").attr("orig"));
                            $("#contactForm #formSuccess").stop().slideDown("fast");
                            $("#contactForm input,#contactForm textarea,#contactForm select").removeAttr("disabled");
                        }
                    });
                }
            }
        },
        UI: { 
            setUpUi: function() {
                // Set up our scroller...
                $("#scroller").height($(".firstPageLeaf").height() + 300);
                $("#subNav li a").click(function(e) {
            	    e.stopPropagation();
            	    e.preventDefault();
            	    if(!$(this).hasClass("active"))
            	    {
            		    LogAnalytics("page/" + $(this).text());
            		    $("#subNav li a.active").removeClass("active");
            		    $(this).addClass("active");
	            	    var thisIndex = $(this).parent().index();
	            	    var posLeft = ($(".pageLeaf.firstPageLeaf").width() * 1 + 80) * thisIndex * -1;
	            	    var newHeight = $($(".pageLeaf")[thisIndex]).height() + 30;
	            	    $("#scrollerContainer").animate({"margin-left":posLeft + "px"}, "fast");
	            	    $("#scroller").animate({"height": newHeight + "px"});
	                }
                });
                $(".captionPicture img").each(function() {
            	    var caption = $(this).attr("alt");
            	    $(this).after("<span class='caption'>" + caption + "</span>");
                });
                $(".scrollLink").click(function(e) {
            	    e.stopPropagation();
            	    e.preventDefault();
            	    var arr = $(this).attr("href").split("#");
				    LogAnalytics("scrollLink/" + arr[1]);
            	    $(window).scrollTo($(this).attr("href"), 200);
                });
                $(".navButton").click(function(e) {
					e.stopPropagation();
            		e.preventDefault();
            		var pageNum = $("#subNav li a.active").parent().index();
            		
            		switch ($(this).attr("id")) {
				        case "left":
				            pageNum--;
				            if (pageNum < 0)
				                pageNum = $("#scroller div.pageLeaf").length - 1;
				            break;
				        case "right":
				            pageNum++;
				            if (pageNum >= $("#scroller div.pageLeaf").length)
				                pageNum = 0;
				            break;
				    }
				    
            		$("#subNav li a.active").removeClass("active");
        			$($("#subNav li a")[pageNum]).addClass("active");
            		var posLeft = ($(".pageLeaf.firstPageLeaf").width() * 1 + 80) * pageNum * -1;
            		var newHeight = $($(".pageLeaf")[pageNum]).height() + 30;
            		LogAnalytics("page/" + $("#subNav li a.active").text());
            		$("#scrollerContainer").animate({"margin-left":posLeft + "px"}, "fast");
            		$("#scroller").animate({"height": newHeight + "px"});
				});
				$(".quote-o-matic blockquote").each(function() {
					$(this).html("&ldquo;" + $(this).html() + "&rdquo;");
				});

				$(".quote-o-matic div").each(function() {
					$(this).css({"display":"block","position":"absolute","margin-top":"-150px","width":"100%"}).attr("data-length", $(this).html().length);
				});
				if($.cookie("nyhs_quote-o-matic") == undefined && $.cookie("nyhs_quote-o-matic") == null)
				{
					$(".quote-o-matic div:first").addClass("quoteVis").css("margin-top","0px");
					$.cookie("nyhs_quote-o-matic", 0);
				}
				else
				{
					$($(".quote-o-matic div")[$.cookie("nyhs_quote-o-matic")]).addClass("quoteVis").addClass("quoteVis").css("margin-top","0px");
				}
				setTimeout(SITE.UI.nextQuote,$(".quote-o-matic div.quoteVis").attr("data-length") * 60);
            },
            nextQuote: function() {
            	$(".quote-o-matic div.quoteVis").animate({"opacity":"0.0","margin-top":"50px"}, "medium", function() {
            		var n = $(".quote-o-matic div.quoteVis").index() + 1;
            		if(n >= $(".quote-o-matic div").length)
            			n = 0;
            		$(".quote-o-matic div.quoteVis").removeClass("quoteVis");
            		var d =$($(".quote-o-matic div")[n]);
            		$(d).addClass("quoteVis").css({"opacity":"0.0","margin-top":"-100px"}).animate({"opacity":"1.0","margin-top":"0px"});
            		$.cookie("nyhs_quote-o-matic", n);
            		setTimeout(SITE.UI.nextQuote,$(d).attr("data-length") * 60);
            	});
            }
        }
    },
	 UTIL = {
	     exec: function (controller, action) {
	         var ns = SITE;
	         if (typeof soundManager != "undefined") {
	            soundManager.onready(function() {
	                    UTIL.CheckSoundStatus();
	            });
             }
	         action = (action === undefined) ? "init" : action; 
	         if (controller !== "" && ns[controller] && typeof ns[controller][action] == "function") {
	             ns[controller][action]();
	         }
	     },

	     init: function () {
	         var body = document.body,
	        controller = body.getAttribute("data-controller"),
	        action = body.getAttribute("data-action");
				         //	        UTIL.exec("common");
	         UTIL.exec(controller);
	         //UTIL.exec(controller, action);
           /*  WebFontConfig = {
                google: { families: [ 'Cabin' ] },
                active: function() { 
                    $("#scroller").height($(".firstPageLeaf").height() + 30);
                }
              };
              (function() {
                var wf = document.createElement('script');
                wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
                    '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
                wf.type = 'text/javascript';
                wf.async = 'true';
                var s = document.getElementsByTagName('script')[0];
                s.parentNode.insertBefore(wf, s);
              })();*/
              SITE.UI.setUpUi();
	     },
         CheckSoundStatus: function() {
            if (typeof soundManager != "undefined") {
                if (soundManager.supported()) { // Hooray! SM2 loaded.
                    soundReady = true;
                    if ($("ul.playlist").length > 0 && soundReady) {
                        if (typeof PagePlayer == "undefined")
                            $.getScript('scripts/page-player.js', function() {
                                pagePlayer = new PagePlayer(typeof PP_CONFIG != 'undefined' ? PP_CONFIG : null);
                                pagePlayer.initDOM();
                            });
                        else {
                            if (pagePlayer == null) {
                                pagePlayer = new PagePlayer(typeof PP_CONFIG != 'undefined' ? PP_CONFIG : null);
                            }
                            pagePlayer.initDOM();
                        }
                    }

                } else { // BOO
                    //$("#flashError").fadeIn("fast");
                }
            }
         },
	     validateRequired: function(fieldArray) {
	     	var isValid = true;
	     	for(var i = 0; i < fieldArray.length; i++)
	     	{
	     		if(jQuery.trim($(fieldArray[i]).val()) == "")
	     		{
		     		$(fieldArray[i]).addClass("error required").parent().addClass("error required");
		     		isValid = false;
	     		}
	     		else
    			     $(fieldArray[i]).removeClass("error required").parent().removeClass("error required");
	     	}
	     	return isValid;
	     },
	     validateEmail: function(emailField) { 
	     	var isValid = true;
			var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
			if(jQuery.trim($(emailField).val()) == "" || !re.test(jQuery.trim($(emailField).val())))
			{
				$(emailField).addClass("error invalidEmail").parent().addClass("error invalidEmail");
				isValid = false;
			}
			else
				$(emailField).removeClass("error invalidEmail").parent().removeClass("error invalidEmail");
			return isValid;
		 },
		 validateMatch: function(field1, field2)
		 {
		 	var isValid = true;
		 	if(jQuery.trim($(field1).val()) == "" || jQuery.trim($(field2).val()) == "" || jQuery.trim($(field1).val()) != jQuery.trim($(field2).val()))
		 	{
		 		isValid = false;
		 		$(field1).addClass("error noMatch").parent().addClass("error noMatch");
		 		$(field2).addClass("error noMatch").parent().addClass("error noMatch");
		 	}
		 	else
		 	{
		 		$(field1).removeClass("error noMatch").parent().removeClass("error noMatch");
		 		$(field2).removeClass("error noMatch").parent().removeClass("error noMatch");
		 	}
		 	return isValid;
		 },
         validateForm: function() {
            var isValid = true;
            $("#contactForm label:has(strong)").each(function() {
                // Check to see if there's content.
                if ($.trim($("#contactForm input[name='" + $(this).attr("for") + "']").val()) == "") {
                    isValid = false;
                    $("#contactForm p#errorFor" + $(this).attr("for")).slideDown("fast");
                }
                else {
                    $("#contactForm p#errorFor" + $(this).attr("for")).slideUp("fast");
                }
            });
            return isValid;
        }
	 },
	ANIM = {

	}
    

    window.SITE = SITE;
    window.UTIL = UTIL;

    $(document).ready(UTIL.init);
})(window, document);

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}
function LogAnalytics(url) {
    var pageTracker = _gat._getTracker("UA-668538-6");
    if (pageTracker) {
        pageTracker._trackPageview("/" + CleanUrl(url));
    }
}
function CleanUrl(str) {
    return str.replace(ajaxUrlCleanRegex, "-").toLowerCase();
}
