var GOUT=GOUT||{};

//data and config
GOUT.props=GOUT.props||{
    
    uri : document.location.href.toLowerCase(),
    locked : false,
    
    //# of available polls
    pollLimit : 7,

    //Google Analytics Codes
    gastagecode1:"UA-7097262-1",
    gastagecode2:"UA-10613914-1",
    gaprodcode1:"UA-6725934-1",
    gaprodcode2:"UA-10680224-1",
    
    //assess your gout config
    current : 0,
    width : 734,
    left: 12,
    divId : "form",
    assess : {"one":1,"two":2,"three":3,"print":4},
    speed:1500,
    
    animating: false
};

//google analytics var
var _gaq;

/**
 *Init when document is ready
 */
$(function(){
	GOUT.utils.init();
});



/**
*Gout.utils definition
*/
GOUT.utils = GOUT.prototype = {
    /**
    *Initialize function
    */
    init: function () {
        // GOUT.utils.setNav();
        GOUT.utils.setPoll();
        GOUT.utils.populateForm();
        GOUT.utils.initGoogleAnalytics();
        GOUT.utils.initListeners();
        GOUT.utils.trackPage();



    },

    // MIKE - populates the form if you have data from the results page
    populateForm: function () {

        //check if there is a query string
        if (window.location.search) {

            // add to jQuery : get all the results of a given query string    
            $.urlParam = function (name) {
                var reg = new RegExp(name + '=([^&#]*)', 'g');
                var results = GOUT.props.uri.match(reg);

                if (!results) { return 0; }

                reg = new RegExp(name + '=');
                var i = results.length;

                while (i--) {
                    results[i] = results[i].replace(reg, '');
                }

                return results || 0;
            }

            var queryS = '',
                i = 6 + 1,
                j = 4 + 1,
                k = 0;

            // check all the differnt combos of query strings and check appropriate boxes
            while (i--) {
                while (j--) {
                    queryS = $.urlParam('q' + i);
                    k = queryS.length;
                    while (k--) {
                        if (queryS[k] == j)
                            $('#q' + i + '-' + j).attr("checked", true)
                    }
                }
                j = 4 + 1;
            }
        }

    },

    //initialize listeners for links, downloads, tracking....
    initListeners: function () {
        // make entire callout div a link
        $(".goutsmartlink").click(function () {
            GOUT.utils.gaTrack("/Registration call-outs");
            GOUT.utils.dcTrack('enroll');
            GOUT.utils.showLeavingDialog("gout");
        });

        $("#uloric").click(function () {
            GOUT.utils.gaTrack("/uloric");
            //GOUT.utils.dcTrack('enroll');
            GOUT.utils.showLeavingDialog("uloric");
        });

        $("#toe").click(function () {
            GOUT.utils.gaTrack("/video");
        });


        $("div.goutpdf, .download").click(function () {
            GOUT.utils.gaTrack("/downloads/conversation starter");
            GOUT.utils.dcTrack('download');
            window.open("refresh/gout.pdf", "_blank");
        });

        $(".assessCallout").click(function () {
            GOUT.utils.gaTrack("/assessment/tool");
            GOUT.utils.dcTrack('assess');
            window.location = "/assessing-gout-flares/questions.aspx";
        });

        $(".homelink").click(function () {
            if (GOUT.props.uri.indexOf("utilities/") > -1) {
                window.location.href = "/";
            }
            else window.location.href = "/";
        });

        $("#next, #back, #cts").click(function () {
            GOUT.utils.animateForm(this.id);
            if (GOUT.props.current == 0)
                GOUT.utils.gaTrackEvent("/assessment/start");
            /*else if ( GOUT.props.current == 1)
            GOUT.utils.gaTrack("/assessment/one");*/
            else if (GOUT.props.current == 2)
                GOUT.utils.gaTrackEvent("/assessment/one");
            else if (GOUT.props.current == 3)
                GOUT.utils.gaTrackEvent("/assessment/two");
        });




        // MIKE - go back when click from print page fix :: BEGIN
        var regResults = new RegExp('results');
        var regView = new RegExp('&__VIEWSTATE([^&#]*)');

        $("#one").click(function () {
            GOUT.utils.gaTrack("/assessment/one");
            if (GOUT.props.uri.match(regResults)) {
                if (window.location.search) {
                    var pageNum = '&p=1';
                }
                else {
                    var pageNum = '?&p=1';
                }
                window.location.href = 'questions.aspx' + window.location.search.replace(regView, '') + pageNum;
            }

            GOUT.utils.animateForm(this.id);

        });

        $("#two").click(function () {
            GOUT.utils.gaTrack("/assessment/two");
            if (GOUT.props.uri.match(regResults)) {
                if (window.location.search) {
                    var pageNum = '&p=2';
                }
                else {
                    var pageNum = '?&p=2';
                }
                window.location.href = 'questions.aspx' + window.location.search.replace(regView, '') + pageNum;
            }

            GOUT.utils.animateForm(this.id);
        });

        $("#three").click(function () {
            GOUT.utils.gaTrack("/assessment/three");
            if (GOUT.props.uri.match(regResults)) {
                if (window.location.search) {
                    var pageNum = '&p=3';
                }
                else {
                    var pageNum = '?&p=3';
                }
                window.location.href = 'questions.aspx' + window.location.search.replace(regView, '') + pageNum;
            }

            GOUT.utils.animateForm(this.id);
        });
        // MIKE - go back when click from print page fix :: END

        $("#finish, #print").click(function () {
            GOUT.utils.gaTrackEvent("/assessment/finish");
            $("#assessForm").submit();
        });

        $("#form0 .right").click(function () {
            GOUT.utils.animateForm('next');
        });

        $(".text, .pain, .days").click(function (e) {
            var go = true;
            //ff, safari, chrome, opera
            if (e.target) {
                if (e.target.type == "radio") {
                    go = false;
                }
            }
            //ie
            if (e.srcElement) {
                if (e.srcElement.type == "radio") {
                    go = false;
                }
            }
            if (go) {
                var obj = document.getElementById(this.getAttribute('data'));
                if (obj.checked && obj.type != "radio" && !(obj.id == "q1-5" || obj.id == "q2-6")) {
                    obj.checked = false;
                }
                else {
                    if (obj.id == "q6-4") {
                        $("#q6-1,#q6-2,#q6-3").attr("checked", false);
                    }
                    if (obj.id == "q6-3" || obj.id == "q6-2" || obj.id == "q6-1") {
                        $("#q6-4").attr("checked", false);
                    }
                    obj.checked = true;
                }
            }
        });

        $("#q6-1,#q6-2,#q6-3,#q6-4").click(function () {
            if (this.id == "q6-4") {
                $("#q6-1,#q6-2,#q6-3").attr("checked", false);
            }
            else {
                $("#q6-4").attr("checked", false);
            }

        });

        /* $("#q1Text").focus(function(){
        $("#q1-5").attr("checked",true);
        });
	    
        $("#q2Text").focus(function(){
        $("#q2-5").attr("checked",true);
        });
        */
        $(".print").click(function () {
            GOUT.utils.gaTrack("/print");
            window.print();
        });

        //$("#accordion").accordion({
        $("#Div1").accordion({
            //event: "mouseover",
            autoHeight: false,
            collapsible: true,
            active: 0,
            change: function () {
                GOUT.utils.toggleAccordion($(this));
            }
        });

        $("#Div2,#Div3,#Div4").accordion({
            //event: "mouseover",
            autoHeight: false,
            collapsible: true,
            active: 1,
            change: function () {
                GOUT.utils.toggleAccordion($(this));
            }
        });

        $('#Div1').click(function () {
            GOUT.utils.gaTrackEvent("/stage1");
        });

        $('#Div2').click(function () {
            GOUT.utils.gaTrackEvent("/stage2");
        });

        $('#Div3').click(function () {
            GOUT.utils.gaTrackEvent("/stage3");
        });

        $('#Div4').click(function () {
            GOUT.utils.gaTrackEvent("/stage4");
        });

        $("#assessInput input").click(function () {
            GOUT.utils.gaTrackEvent("/" + $(this).attr('id'));
        });

        $("#accControl").click(function () {
            //alert("clickity");
            if ($("#accControl").html() == "show all") {
                $(".closed").accordion("activate", 0);
            }
            else {
                $(".open").accordion("activate", 1);
            }
        });


        if (typeof (page) == "undefined") {
            $("#form" + GOUT.props.current).animate({
                left: GOUT.props.left
            }, GOUT.props.speed);
        }
        else {
            $("#form" + page).animate({
                left: GOUT.props.left
            }, GOUT.props.speed);
            GOUT.props.current = page;
            GOUT.utils.setAssessNav();
        }
    },

    /**
    *
    */
    toggleAccordion: function (obj) {
        if (obj.hasClass("closed")) obj.addClass("open").removeClass("closed");
        else obj.addClass("closed").removeClass("open");

        if ($(".open").size() == 4) $("#accControl").html("hide all");
        else $("#accControl").html("show all");

        if ($("#" + obj.attr("id") + " .control").html() == "show [+]") $("#" + obj.attr("id") + " .control").text("hide [-]");
        else $("#" + obj.attr("id") + " .control").text("show [+]");

    },

    /**
    * Get random poll and display it, do not display polls already seen by user
    */
    setPoll: function () {
        //load random quick poll 
        var rand;
        //check for cookie
        var c = $.cookie("polls") == null ? "0" : $.cookie("polls");
        //turn cookie data into array,  this would need to be updated if we end up with more than 10 polls
        var seen = c.split("");
        //display message if all available polls have been taken
        if (seen.length >= GOUT.props.pollLimit) {
            seen = 0;
            c = 0;
        }

        //else {
        var go = true;
        //get random # representing a poll 
        rand = GOUT.utils.getRandom(GOUT.props.pollLimit);
        while (go) {
            //check to see if the user has already seen this poll, try until we find one they haven't seen
            //cast rand to string for $.each to work(or seen to num, must be same type)
            if ($.inArray(String(rand), seen) == -1) {
                GOUT.props.currentPoll = rand;
                go = false;
            }
            else {
                rand = GOUT.utils.getRandom(GOUT.props.pollLimit);
            }
        }

        //ajax get poll
        $.get("/refresh/polls/poll" + GOUT.props.currentPoll + ".html", function (data) {
            $("#quickPoll").append(data).queue(function () {
                $(".row").click(function () {
                    //set clicked row's radio button or checkbox to true when text clicked
                    $(this).children(".rad").children("input:radio, input:checkbox").attr('checked', true);
                });
                //listener for poll submit button click 
                $("#qpsubmit").click(function () {
                    GOUT.utils.gaTrackEvent("Quick polls", "submitted");
                    GOUT.utils.submitPoll();
                });
            });
        });
        //set or update cookie
        if (c == 0) c = "";
        c = c + String(GOUT.props.currentPoll);
        $.cookie("polls", c)
        //}	
    },

    /**
    *Submit poll and get results 
    */
    submitPoll: function () {
        //only submit poll if something has been selected
        if ($("input:radio[checked=true], input:checkbox[checked=true]").length > 0 && !GOUT.props.locked) {
            //lock submit so people with quick clicks don't get double results
            GOUT.props.locked = true;
            $.ajax({
                type: "POST",
                url: "/refresh/controls/quickpoll.aspx",
                //grab all from data
                data: $("#qp").serialize(),
                dataType: "json",
                success: function (result, msg) {
                    GOUT.utils.procPoll(result);
                }
            });
        }
    },

    /**
    *display poll results based on passed in json
    *@param {Object} data
    */
    procPoll: function (data) {
        $(".rad").remove();
        $("#qp").children(".callout-btn").remove();
        GOUT.props.locked = false;
        $.each(data.quickpoll.answers, function () {
            $("#qpa" + this.id).after("<div class=\"row qpresults\"><div class=\"percent\">" + this.percentage + "%</div><div class=\"bar-container\"><div class=\"bar\" style=\"width:" + this.percentage + "%;\"></div></div>");
        });
        $(".q,.row,.qp .row,.row .qpresults").css("cursor", "text");
    },

    /**
    * returns a random number between 1 and limit
    * @param {Number} limit
    */
    getRandom: function (limit) {
        return Math.floor(Math.random() * (limit) + 1);
    },


    /**
    * Grabs url and sets nav highlighting according to current page
     
    setNav : function(){	    
    if(GOUT.props.uri.indexOf("what-is-gout.aspx") > -1|| GOUT.props.uri.indexOf("causes-triggers.aspx") > -1 || GOUT.props.uri.indexOf("treating-gout-flares.aspx") > -1){
    $("#subnav").css("height", "0").animate({height: "28px"}, 750);
    }

	   
    },
    */
    /**
    *Tracks page using Google Analytics and Dart Tags
    */
    trackPage: function () {
        var pageName = "";
        var cat = "";
        if (GOUT.props.uri.indexOf("default.aspx") > -1 || GOUT.props.uri.indexOf("aspx") == -1) {
            pageName = "Home";
            cat = "homepage";
        }
        else if (GOUT.props.uri.indexOf("causes-triggers.aspx") > -1) {
            pageName = "What Causes Gout";
            cat = "whtcause";
        }
        else if (GOUT.props.uri.indexOf("treating-gout-flares.aspx") > -1) {
            pageName = "Manage Your Gout";
            cat = "manage";
        }
        else if (GOUT.props.uri.indexOf("terms.aspx") > -1) {
            pageName = "Terms of Use";
            cat = "termsuse";
        }
        else if (GOUT.props.uri.indexOf("privacy_policy.aspx") > -1) {
            pageName = "Privacy policy";
            cat = "privacyp";
        }
        else if (GOUT.props.uri.indexOf("what-is-gout.aspx") > -1) {
            pageName = "What is gout";
            cat = "whatis";
        }
        else if (GOUT.props.uri.indexOf("signs-symptoms.aspx") > -1) {
            pageName = "Gout signs and symptoms";
            cat = "goutsigns";
        }
        else if (GOUT.props.uri.indexOf("effects.aspx") > -1) {
            pageName = "Gout untreated";
            cat = "goutuntreated";
        }
        else if (GOUT.props.uri.indexOf("causes-triggers.aspx") > -1) {
            pageName = "What triggers a gout attack";
            cat = "whattriggers";
        }
        else if (GOUT.props.uri.indexOf("gout-diet.aspx") > -1) {
            pageName = "Understanding diet";
            cat = "understandingdiet";
        }
        else if (GOUT.props.uri.indexOf("pain-management.aspx") > -1) {
            pageName = "Short-term treatment";
            cat = "shorttermtreat";
        }
        else if (GOUT.props.uri.indexOf("long-term.aspx") > -1) {
            pageName = "Long-term treatment";
            cat = "longtermtreat";
        }
        else if (GOUT.props.uri.indexOf("healthy-lifestyle.aspx") > -1) {
            pageName = "Lifestyle changes";
            cat = "lifestylechanges";
        }
        else if (GOUT.props.uri.indexOf("questions.aspx") > -1) {
            pageName = "Assess your gout";
            cat = "assessyourgout";
        }
        else if (GOUT.props.uri.indexOf("results.aspx") > -1) {
            pageName = "Gout Assessment Tool Completion ";
            cat = "gatcomp";
        }
        else {
            pageName = null;
        }
        GOUT.utils.gaTrack(pageName);
        GOUT.utils.dcTrack(cat);
    },

    /**
    *sets Google Analytics Tracking codes.
    */
    initGoogleAnalytics: function () {
        _gaq = _gaq || [];
        //check uri to see what our environment is.
        if (/rosetta|takeda|localhost|file/.test(GOUT.props.uri)) {
            _gaq.push(['_setAccount', GOUT.props.gastagecode1]);
            _gaq.push(['t2._setAccount', GOUT.props.gastagecode2]);
        }
        else {
            //just to be super sure we're in production
            if (/gout.com/.test(GOUT.props.uri)) {
                _gaq.push(['_setAccount', GOUT.props.gaprodcode1]);
                _gaq.push(['t2._setAccount', GOUT.props.gaprodcode2]);
            }
        };
    },

    /**
    *Track Page Views with Google Analytics
    *@param {String} pageName
    */
    gaTrack: function (pageName) {
        if (_gaq) {
            _gaq.push(['_trackPageview', pageName]);
            _gaq.push(['t2._trackPageview', pageName]);
        }
    },

    /**
    *Track Events with Google Analytics
    *@param {String} event
    *@param {String} action
    */

    gaTrackEvent: function (event, action) {
        if (_gaq) {
            _gaq.push(['_trackEvent', event, action]);
            _gaq.push(['t2._trackEvent', event, action]);
        }
    },

    /**
    *Track page views and events with dart tags
    *@param {String} cat
    */
    dcTrack: function (cat) {
        var a = Math.random() * 10000000000000;
        $('body').append('<iframe src="http://fls.doubleclick.net/activityi;src=2370759;type=conve739;cat=' + cat + ';ord=1;num=' + a + '?" width="1" height="1" frameborder="0"></iframe>');
    },

    showLeavingDialog: function (type) {
        //setup the survey div


        var message = "";
        var url = "";

        switch (type) {
            case "gout":
                message = "Please click \"OK\" if you wish to be taken to a site to get more information.",
    	            url = "https://www.goutsmart.com/taulo_web_enr_formStep1.aspx?utm_source=goutsite&utm_medium=site&utm_content=consumer&utm_campaign=site"
                if ($.cookie("OPTINMARKETINGSOURCE") != null) {
                    var ms = $.cookie("OPTINMARKETINGSOURCE")
                    url += "&ms=" + ms.toUpperCase();
                }
                break;
            case "uloric":
                message = "Please click \"OK\" if you wish to be taken to a site to learn more about a treatment option to lower uric acid.",
    	            url = "http://www.uloric.com";
                if ($.cookie("OPTINMARKETINGSOURCE") != null) {
                    var ms = $.cookie("OPTINMARKETINGSOURCE")
                    url += "?sourcecode=" + ms.toUpperCase();
                }
                break;
            default:
                break;
        }

        var interstitial = $("<div>", {
            id: "interstitial",
            html: message
        }).appendTo("body");

        //set up dialog
        $("#interstitial").dialog({
            title: "You are about to leave Gout.com",
            modal: true,
            resizable: false,
            draggable: false,
            width: 400,
            height: 200,
            buttons: {
                "OK": function () {
                    $(this).dialog('close');
                    GOUT.utils.gaTrack("/uloric/clickThrough");
                    window.open(url, "_blank");
                },
                "Cancel": function () {
                    $(this).dialog('close');
                    GOUT.utils.gaTrack("/uloric/cancel");
                    $("#interstitial").remove();
                }
            },
            close: function () { $("#interstitial").remove(); }
        });


        $('#interstitial').dialog('open');


    },

    animateForm: function (direction) {
        if (GOUT.props.assess[direction] != GOUT.props.current && !GOUT.props.animating) {

            if (GOUT.props.current == 0) GOUT.props.current = 1;
            //MIKE
            GOUT.props.current = parseInt(GOUT.props.current);

            var go = true;
            var hide = GOUT.props.current;
            var show;
            var num = '';


            if (direction == "next") {
                show = GOUT.props.current + 1;
                num = '-';
            }
            else if (direction == "back") {
                show = GOUT.props.current - 1;

                //MIKE - delete page #1
                if (show === 1) {
                    show = 0;
                    GOUT.props.current = 0;
                }

            }
            else if (direction == "cts") {

                //MIKE - delete page #1
                show = 2;  // show = 1;

                num = '-';
            }
            /* else if(direction == "finish" || direction == "print"){
		        
            //alert("submit form and what not");
            //
            $("#assessForm").submit();
            return false;
            }
            */
            else {
                show = GOUT.props.assess[direction];
                if (GOUT.props.assess[direction] > GOUT.props.current) {
                    num = "-";
                }
            }

            GOUT.props.current = show;
            GOUT.props.animating = true;
            $("#" + GOUT.props.divId + show).animate({
                left: GOUT.props.left
            }, {
                duration: GOUT.props.speed
            });
            $("#" + GOUT.props.divId + hide).animate({
                'left': num + GOUT.props.width
            }, {
                duration: GOUT.props.speed
            }, GOUT.utils.resetAnimating());

            $("#one, #two, #three").removeClass("current");
            GOUT.utils.setAssessNav();

        }
    },

    setAssessNav: function () {
        switch (GOUT.props.current) {
            case 0:
            case "0":
                $("#back").hide(333);
                $("#next").hide(333);
                $("#cts").show(333);
                break;
            /* MIKE - Delete page #1
            case 1:
            case "1":
            $("#one").addClass("current");
            $("#form2, #form3").css("left", GOUT.props.width);
            $("#form0").css("left", "-"+GOUT.props.width+"px");
            $("#cts").hide(333);
            $("#next").show(333);
            $("#back").show(333);
            break;
            */ 
            case 2:
            case "2":
                $("#two").addClass("current");
                $("#form3").css("left", GOUT.props.width);
                $("#form0, #form1").css("left", "-" + GOUT.props.width + "px");
                $("#cts").hide(333);
                $("#next").show(333);
                $("#back").show(333);
                break;
            case 3:
            case "3":
                $("#three").addClass("current");
                $("#form0, #form1, #form2").css("left", "-" + GOUT.props.width + "px");
                $("#cts").hide(333);
                $("#next").hide(333);
                $("#finish").show(333);
                $("#back").show(333)
                break;

        }
    },

    resetAnimating: function () {
        setTimeout(function () { GOUT.props.animating = false; }, GOUT.props.speed);
    }
}