﻿// NAMESPACES
var BenefulMap = {}; // Namespaces all functions in Beneful Map
BenefulMap.Constants = {};
BenefulMap.Constants.Snippets = {};
BenefulMap.Constants.Strings = {};

// CONSTANTS - ALL PAGES
BenefulMap.Constants.DETAILS_ZOOM = 14; // Used on the details page
BenefulMap.Constants.USA_ZOOM = 4;
BenefulMap.Constants.CITY_ZOOM = 10;

BenefulMap.Constants.CENTER_LAT = "37.40";
BenefulMap.Constants.CENTER_LNG = "-95.50";
BenefulMap.Constants.CENTER_LATLNG = new GLatLng(BenefulMap.Constants.CENTER_LAT, BenefulMap.Constants.CENTER_LNG);

BenefulMap.Constants.IMG_MARKER = root + "_res/i/marker/marker_blank.png";
BenefulMap.Constants.IMG_ACTIVE_MARKER = root + "_res/i/marker/marker_active.png";
BenefulMap.Constants.IMG_LOADER = root + "_res/i/spinner.gif";

BenefulMap.Constants.Snippets.INFOWIN_BASICS = root + "Snippets/InfoWindow/Basics.aspx";
BenefulMap.Constants.Snippets.INFOWIN_SEND = root + "Snippets/InfoWindow/SendContent.aspx";
BenefulMap.Constants.Snippets.INFOWIN_PREVIEW = root + "RenderPhoto.aspx?id=%SPOT_ID%&context=spot&infowindow=y&maxHeight=78&maxWidth=100&subcontext=%CAT_NUM%";
BenefulMap.Constants.Snippets.MODAL_ADD_SPOT = root + "Snippets/AddSpot.aspx";
BenefulMap.Constants.Snippets.MODAL_EDIT_SPOT = root + "Snippets/EditSpot.aspx";
BenefulMap.Constants.Snippets.MODAL_LINK_RESULTS = root + "Snippets/LinkToResults.aspx";
BenefulMap.Constants.Snippets.MODAL_ADD_REVIEW = root + "Snippets/AddReview.aspx";
BenefulMap.Constants.Snippets.MODAL_TELL_FRIEND = root + "Snippets/TellFriend.aspx";
BenefulMap.Constants.Snippets.MODAL_LOGIN = root + "Snippets/LogUserIn.aspx";
BenefulMap.Constants.Snippets.MODAL_SEND_FEEDBACK = root + "Snippets/SendFeedback.aspx";
BenefulMap.Constants.Snippets.MODAL_REQUEST_REMOVAL = root + "Snippets/RequestRemoval.aspx";
BenefulMap.Constants.Snippets.MODAL_SEND_PHONE = root + "Snippets/SendToPhone.aspx";
BenefulMap.Constants.Snippets.MODAL_ADD_PHOTO = root + "Snippets/AddPhoto.aspx";
BenefulMap.Constants.Snippets.MODAL_SHARE_THIS = root + "Snippets/ShareThis.aspx";
BenefulMap.Constants.Snippets.PANE_PAGINATION = root + "Snippets/Paging.aspx";
BenefulMap.Constants.Snippets.PANE_RESULTS = root + "Snippets/Results.aspx";
BenefulMap.Constants.Snippets.PANE_NEARBY_SPOTS = root + "Snippets/NearbyPlaces.aspx";
BenefulMap.Constants.Snippets.TAB_REVIEWS = root + "Snippets/Reviews.aspx";
BenefulMap.Constants.Snippets.TAB_PHOTOS = root + "Snippets/Photos.aspx";
BenefulMap.Constants.Snippets_PAGE_SEARCH_RESULTS = root + "?search=%LOC%&categories=%CATS%&ref=%REF%";
BenefulMap.Constants.Snippets.MODAL_FULL_SIZE_PHOTO = root + "Snippets/FullSizePhoto.aspx";
BenefulMap.Constants.Snippets.MODAL_PROMOTION = root + "Snippets/Promotion/FreeDogToyThankYou.aspx";
BenefulMap.Constants.Snippets.MODAL_REGISTER = root + "Snippets/Register.aspx";

BenefulMap.Constants.Strings.ADDRESS_FIELD_TEXT = 'Enter City, State and/or Zip Code';
BenefulMap.Constants.Strings.CATEGORY_FILTER_PREFIX = "category";
BenefulMap.Constants.Strings.PAGING_LINK_PREFIX = "page";
BenefulMap.Constants.Strings.RESULTS_ITEM_PREFIX = "spot";
BenefulMap.Constants.Strings.TOGGLE_SHOW = 'View All';
BenefulMap.Constants.Strings.TOGGLE_HIDE = 'Collapse';

$(document).ready(function() {
    // the following functions fire globally across all pages of the map

    BenefulMap.setupSearchBar();

    BenefulMap.setupRegistrationModal();
    BenefulMap.setupLoginModal();
    BenefulMap.setupAddSpotModal();
    BenefulMap.setupAddReviewModal();
    BenefulMap.setupRequestRemovalModal();
    BenefulMap.setupTellFriendFooterModal();
    BenefulMap.setupSendFeedbackModal();
    BenefulMap.setupModalShareThisFooter();

    BenefulMap.setupNewWindows();
    BenefulMap.setupPopUps();
    BenefulMap.setupPromotionModal();
    BenefulMap.setupTellFriendToutModal();
    BenefulMap.setupToggleLists();

    BenefulMap.permitPostBack();
    
    // Enable tour button globally
    $('#search-tour').wagWorldTour({ siteRoot: root });
    
    // Enable cycle plug-in on homepage
    $('#tabs').cycle({
    	pager: '#tab-nav',
    	timeout: 5000
    });
    
    // Enable carousel plug-in on newest members
    $('#newest-members').jcarousel({ visible: 4 });
    
    // What dog lovers are saying border fix
    $('#lover-reviews li:first-child').addClass('no-border');
    
    // Hover class backup
    BenefulMap.hoverBackup("div#search-bottom ul#lover-reviews li");
});

// Hover class backup
BenefulMap.hoverBackup = function(selector){
    if($(selector).length){
        var $items = $(selector);
        var cssClass = "hover";
        
        $items.mouseover(function(){
            $(this).addClass(cssClass);
        });
        
        $items.mouseout(function(){
            $(this).removeClass(cssClass);
        });
    }
};

BenefulMap.permitPostBack = function() {
	$(".post-back").keypress( function(event) {
		if (event.which == 13) {
			event.preventDefault();
			$(this).find("input:image, input:submit").click();
		}
	});
};

BenefulMap.setupPromotionModal = function() {
	var els = {
		modalDiv: "#modal-promotion",
		targetElement: "#modal-promotion-link"
	};
	var fields = {
		fieldsToSerialize: "#modal-promotion input:text, #modal-promotion select",
		fieldsToValidate: "#modal-promotion input:text, #modal-promotion select",
		requiredFields: "#modal-promotion input:text:not(.optional), #modal-promotion select",
		checkbox: "#modal-promotion input:checkbox"
	};
	// modalTitle, modalElements, modalOptions, snippetPath, params, formElements
	var promoModal = new BenefulMap.ModalToyPromotion("Thank You",  els, {}, BenefulMap.Constants.Snippets.MODAL_PROMOTION, {}, fields);
};

BenefulMap.setupSearchBar = function() {
    var searchBar = new BenefulMap.SearchBar("#search-template", "form", "#target-address", ".submit-address", "#category-filter input", "#search-box-bottom a", "#category-filter");
};

BenefulMap.setupLoginModal = function() {
    var loginEl = { 
		modalDiv: "#modal-login",
		targetElement: "a.login",
		forgotPasswordLink: "#forgot-password",
		backToLoginLink: "a.backToLogin"
	};
	var loginFieldsEl = {
		fieldsToSerialize: "#modal-login input:text, #modal-login input:password, #modal-login input:checkbox",
		fieldsToValidate: "#modal-login input:text",
		requiredFields: "#modal-login input:text, #modal-login input:password"
	};
	var params = {
	    ph: 1
    };
	var loginModal = new BenefulMap.ModalLoginForm("Login", loginEl, {}, BenefulMap.Constants.Snippets.MODAL_LOGIN, params, loginFieldsEl);
};

BenefulMap.setupRegistrationModal = function() {
    var el = {
        modalDiv: "#modal-registration",
        targetElement: "a.register"
    };
    var fieldsEl = {
        fieldsToSerialize: "#modal-registration input:text, #modal-registration input:password, #modal-registration input:checkbox, #modal-registration input:radio",
        fieldsToValidate: "#modal-registration input:text",
        requiredFields: "#modal-registration input:text:not(.optional-field), #modal-registration input:checkbox, #modal-registration input:radio, #modal-registration input:password"
    };
    var params = {
        ph: 1
    };
    var regModal = new BenefulMap.ModalRegistrationForm("Join WagWorld<sup>&trade;</sup>", el, { width: 544 }, BenefulMap.Constants.Snippets.MODAL_REGISTER, params, fieldsEl);
};

BenefulMap.setupAddSpotModal = function() {
	var els = {
		modalDiv: "#modal-add",
		targetElement: "#add-spot, #footer-add a, #no-results-add-spot-link, .add_to_ww, .widget_header_main .add_spot a"
	};
	var formEls = {
		fieldsToSerialize: "#modal-add input:text, #modal-add input:radio, input:checkbox, #modal-add select, #modal-add textarea",
		fieldsToValidate: "#modal-add input:text, #modal-add input:radio, #modal-add select, #modal-add textarea",
		requiredFields: "#modal-add input:text:not(.optional-field), #modal-add input:radio, #modal-add select, #modal-add textarea"
	};
	formEls.step1 = {};
	formEls.step1.fieldsToSerialize = "#add-spot-step-1 input:text, #add-spot-step-1 input:radio,  #add-spot-step-1 input:checkbox, #add-spot-step-1 select, #add-spot-step-1 textarea";
	formEls.step1.fieldsToValidate = "#add-spot-step-1 input:text, #add-spot-step-1 input:radio, #add-spot-step-1 select, #add-spot-step-1 textarea";
	formEls.step1.requiredFields = "#add-spot-step-1 input:text:not(.optional-field), #add-spot-step-1 input:radio, #add-spot-step-1 select, #add-spot-step-1 textarea";
	formEls.step2 = {};
	formEls.step2.fieldsToSerialize = "#add-spot-step-2 input:text, #add-spot-step-2 input:radio, #add-spot-step-2 select, #add-spot-step-2 textarea";
	formEls.step2.fieldsToValidate = "#add-spot-step-2 input:text, #add-spot-step-2 input:radio, #add-spot-step-2 select, #add-spot-step-2 textarea";
	formEls.step2.requiredFields = "#add-spot-step-2 input:text:not(.optional-field), #add-spot-step-2 input:radio, #add-spot-step-2 select";
	
	var fieldsets = {
		step1: "#add-spot-step-1",
		step2: "#add-spot-step-2",
		uploadPhoto: "#add-spot-upload-photo",
		thankYou: "#add-spot-thank-you"
	};
	var links = {
		back: "a.add-spot-back",
		skip: "a.add-spot-skip"
	};
	var continueButtons = {
		step1: "#add-spot-step-1-button",
		step2: "#add-spot-step-2-button",
		uploadPhoto: "#add-spot-upload-photo-button",
		thankYou: ""
	};
	var initialParams = {
		ph: 1
	};
	var newModal = new BenefulMap.ModalAddSpot("Add a Spot", "add-spot", els, { width: 755 }, BenefulMap.Constants.Snippets.MODAL_ADD_SPOT, initialParams, formEls, fieldsets, links, continueButtons, ".spot-category input:radio", "#OtherCategorySuggestion");
};

BenefulMap.setupTellFriendFooterModal = function() {
	var tellFriendEls = {
		modalDiv: "#modal-tell-friend-footer",
		targetElement: "#footer-invite a"
	};
	var formEls = {
		fieldsToSerialize: "#modal-tell-friend-footer input:text, #modal-tell-friend-footer textarea",
		fieldsToValidate: "#modal-tell-friend-footer input:text, #modal-tell-friend-footer textarea",
		requiredFields: "#modal-tell-friend-footer input:text"
	};
	var newModal = new BenefulMap.ModalTellFriend("Invite a Friend", tellFriendEls, {}, BenefulMap.Constants.Snippets.MODAL_TELL_FRIEND, {}, formEls, "site");
	
};

BenefulMap.setupToggleLists = function()
{
	$('#truncate-spotlight').truncateList({ showCount: 5, targetContainer: '#spotlight' });
	$('#truncate-lover-reviews').truncateList({ showCount: 6, targetContainer: '#dog-lovers' });
};

BenefulMap.setupSendFeedbackModal = function() {
	var els = { 
		modalDiv: "#modal-send-feedback",
		targetElement: "#footer-send a"
	};
	var fieldEls = {
		fieldsToSerialize: "#modal-send-feedback input:text, #modal-send-feedback textarea",
		fieldsToValidate: "#modal-send-feedback input:text, #modal-send-feedback textarea",
		requiredFields: "#modal-send-feedback input:text, #modal-send-feedback textarea"
	};
	var initialParams = {
		ph: 1
	};
	var newModal = new BenefulMap.ModalSendFeedback("Send Feedback", els, {}, BenefulMap.Constants.Snippets.MODAL_SEND_FEEDBACK, initialParams, fieldEls);
};

BenefulMap.setupAddReviewModal = function() {
	var addReviewEl = {
		modalDiv: "#modal-add-review",
		targetElement: ".add-review, .add-review-btn"
	};
	formEls = {
		fieldsToSerialize: "#modal-add-review input:text, #modal-add-review textarea",
		fieldsToValidate: "#modal-add-review input:text, #modal-add-review textarea",
		requiredFields: "#modal-add-review input:text, #modal-add-review textarea"
	};
	params = {
		ph: 1
	};
	var newModal = new BenefulMap.ModalAddReview("Add Review", "add-review", addReviewEl, {}, BenefulMap.Constants.Snippets.MODAL_ADD_REVIEW, params, formEls);
};

BenefulMap.setupRequestRemovalModal = function() {
	var els = {
		modalDiv: "#modal-request-removal",
		targetElement: "#request-removal, .remove-review"
	};
	var formEls = {
	    fieldsToSerialize: "#modal-request-removal input:text, #modal-request-removal textarea",
	    fieldsToValidate: "#modal-request-removal input:text",
	    requiredFields: "#modal-request-removal input:text, #modal-request-removal textarea"
	};
	var initialParams = {
		ph: 1
	};
	var newModal = new BenefulMap.ModalRemoveSpot("Request Removal", els, {}, BenefulMap.Constants.Snippets.MODAL_REQUEST_REMOVAL, initialParams, formEls);
};

BenefulMap.setupTellFriendToutModal = function() {
    var tellFriendEls = {
        modalDiv: "#modal-tell-friend-footer",
        targetElement: "#tout-invite a"
    };
    var formEls = {
        fieldsToSerialize: "#modal-tell-friend-footer input:text, #modal-tell-friend-footer textarea",
        fieldsToValidate: "#modal-tell-friend-footer input:text, #modal-tell-friend-footer textarea",
        requiredFields: "#modal-tell-friend-footer input:text"
    };
    var newModal = new BenefulMap.ModalTellFriend("Invite a Friend", tellFriendEls, {}, BenefulMap.Constants.Snippets.MODAL_TELL_FRIEND, {}, formEls, "site");

};

BenefulMap.setupModalShareThisFooter = function() {
    var els = {
        modalDiv: "#modal-share-footer",
        targetElement: "#footer-share"
    };
    var newModal = new BenefulMap.ModalShareThis("Share WagWorld", els, {}, BenefulMap.Constants.Snippets.MODAL_SHARE_THIS, {}, "site");
};

BenefulMap.setupNewWindows = function(){
	$("a.new-tab").newWindow();
};

BenefulMap.setupPopUps = function(){
	$("a.pop-up").popup({
		scrollbars:			true,
		resizable:			true,
		status:				false,
		width:				640,
		height:				600
	});
};

BenefulMap.setupTrackingOnLinks = function() {
	$("a").live("click", function() {
		var params = $(this).attr("rev");
		// TODO add tracking function here
		console.log("Params: ", params);	
	});	
};

// silences console commands in browsers without firebug
if (!window.console || !console.firebug) {
	var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
	"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

	window.console = {};
	for (var i = 0; i < names.length; ++i)
		window.console[names[i]] = function() {};
}

window.onerror = function() {
	return true;
};