
jQuery(function($) {

    $.OALibrary = $.OA = {};

    $.OA.Page = Page = {

        _htmlclass: "js",
        _selectedclass: "selected",
        _activeclass: "active",
        _inactiveclass: "inactive",
        _wrapperselector: "body",
        _buttonlinkclass: "button-link",
        _firstclass: "first",
        _lastclass: "last",
        C_BUTTON: "BUTTON",
        C_INPUT: "INPUT",
        C_IMAGE: "IMG",

        init: function() {
            $(Page._wrapperselector).addClass(Page._htmlclass);
            Forms.init();
            Accordion.init();
            DownloadBrochure.init();
            YourChecklist.init();
            PanelAlternator.init();
            EventTracking.init();
            ExternalLinks.init();
        }
    };

    $.OA.Forms = Forms = {

        _sitesearchselector: "#site-search",

        init: function() {
            Forms.initSiteSearch();
            Forms.initEnterTrap();
        },

        initSiteSearch: function() {
            var obj = $(Forms._sitesearchselector);
            var input = obj.find("input[type=text]");
            var label = obj.find("label");
            _defaultsearchstring = label.html();
            if (_defaultsearchstring) {
                Forms.initInput(input, _defaultsearchstring.replace('&amp;', '&'));
            }
        },

        initInput: function(obj, str) {
            $(obj).attr("value", str)
					.addClass(Page._inactiveclass)
					.focus(function() {
					    Forms.Events.evtInputFocus(this, str);
					})
					.blur(function() {
					    Forms.Events.evtInputBlur(this, str);
					})
        },

        initEnterTrap: function() {
            var fieldsets = $("fieldset");
            for (var p = 0; p < fieldsets.length; p++) {
                var arr = $(fieldsets[p]).find("input[type=text],input[type=password]")
                for (var i = 0; i < arr.length; i++) {
                    $(arr[i]).keypress(function(e) {
                        Forms.Events.evtInputEnter(e)
                    });
                }
            }
        },

        Events: {

            evtInputEnter: function(event) {
                var obj = event.target;
                if (event.which == 13) {
                    var submit = $(obj).parent("li").nextAll("li.submit").find("input");
                    submit[0].click();
                }
            },

            evtInputFocus: function(obj, str) {
                var txt = $(obj).attr("value");
                if (txt == "" || txt == str)
                    $(obj).attr("value", "");
                var fieldset = $(obj).parents('fieldset');
                var item = $(obj).parents('li');
                Utils.activateElement(fieldset)
                Utils.activateElement(item)
            },

            evtInputBlur: function(obj, str) {
                var txt = $(obj).attr("value");
                if (txt == "" || txt == str)
                    $(obj).attr("value", str)
                var fieldset = $(obj).parents('fieldset');
                var item = $(obj).parents('li');
                Utils.deactivateElement(fieldset)
                Utils.deactivateElement(item)
            }

        }

    }

    $.OA.Utils = Utils = {

        getSelector: function(str) {
            var rtn = '.' + str;
            return rtn;
        },

        activateElement: function(obj) {
            $(obj).removeClass(Page._inactiveclass)
            $(obj).addClass(Page._activeclass)
        },

        deactivateElement: function(obj) {
            $(obj).removeClass(Page._activeclass)
            $(obj).addClass(Page._inactiveclass)
        },

        activateAll: function(arr) {
            $(arr).each(function(index) {
                Utils.activateElement(this);
            });
        },

        deactivateAll: function(arr) {
            $(arr).each(function(index) {
                Utils.deactivateElement(this);
            });
        },

        openElement: function(obj) {
            $(obj).addClass(Page._selectedclass)
        },

        closeElement: function(obj) {
            $(obj).removeClass(Page._selectedclass)
        },

        openAll: function(arr) {
            $(arr).each(function(index) {
                Utils.openElement(this);
            });
        },

        closeAll: function(arr) {
            $(arr).each(function(index) {
                Utils.closeElement(this);
            });
        },

        toggleElement: function(obj) {
            obj.toggleClass(Page._activeclass);
        }

    };

    $.OA.Accordion = Accordion = {

        _selector: '.accordion',
        _listselector: 'dl',
        _activatorselector: 'dt',
        _contentselector: 'dd',

        init: function() {
            var accordions = $(Accordion._selector);
            var _startid = Accordion.getStartId();
            accordions.each(function() {
                var accordion = $(this).find(Accordion._listselector);
                var activators = accordion.find(Accordion._activatorselector);
                activators.each(function(i) {
                    var obj = $(this);
                    var anchor = obj.find('a');
                    var id = anchor.attr('id');
                    if (_startid) {
                        if (id == _startid) Accordion.evtClick(this);
                    } else {
                        if (i == 0) Accordion.evtClick(this);
                    }
                    anchor.attr('href', '#' + id);
                    obj.click(function() {
                        Accordion.evtClick(this);
                        return false;
                    });
                });
            })
        },

        getStartId: function(url) {
            var rtn;
            var url = document.location.href;
            var index = url.indexOf("#")
            if (index >= 0) rtn = url.substring(index + 1)
            return rtn;
        },

        evtClick: function(obj) {
            var itemactivator = $(obj);
            var itemcontent = itemactivator.next(Accordion._contentselector)
            Utils.toggleElement(itemactivator);
            Utils.toggleElement(itemcontent);
        }

    };

    $.OA.DownloadBrochure = DownloadBrochure = {

        _selector: "#brochure_download",
        _persistselector: '.persist',
        _gacategory: 'Download Brochure Module',


        init: function() {
            var obj = $(DownloadBrochure._selector);
            if (obj.length) {
                var trigger = obj.find(Utils.getSelector(Page._buttonlinkclass)).children('a').not("." + ExternalLinks._killclass)
                trigger.click(function() {
                    DownloadBrochure.evtClick(this);
                    return false;
                });
                var directDownload = $(Utils.getSelector(Page._buttonlinkclass)).children(Utils.getSelector(ExternalLinks._killclass)); // +);
                directDownload.click(function() {
                    EventTracking.handleEvent({ cookie: false, category: DownloadBrochure._gacategory, label: this.text })
                });

                var persist = obj.find(DownloadBrochure._persistselector);
                if (persist.length) {
                    if (persist[0].value == 1) {
                        trigger.click();
                    }
                }
            }
        },

        evtClick: function(trigger) {
            trigger = $(trigger).parent();
            var form = $(trigger).siblings('fieldset'),
				text = $(trigger).html();
            if (form.length) {
                Utils.activateElement(form);
                Utils.deactivateElement(trigger);
            }
            DownloadBrochure.eventTracking(text);
        },

        eventTracking: function(text) {
            EventTracking.handleEvent({ cookie: false, category: DownloadBrochure._gacategory, label: text })
        }

    }

    $.OA.YourChecklist = YourChecklist = {

        _selector: ".your-checklist-content",
        _formselector: "#checklist-form",
        _createselector: ".inline-choice-list",
        _fieldselector: ".field",
        _sliderclass: "ui-slider",
        _slidercontainerclass: "slider-container",
        _gacategory: "Your Checklist",
        _buttonsselector: ".button-links",
        _printbuttonselector: ".alternate",

        init: function() {
            var checklist = $(YourChecklist._selector),
				obj = $(checklist).find(YourChecklist._formselector);
            sliders = obj.find(YourChecklist._createselector);

            sliders.each(function() {
                var question = $(this)
                var answer = YourChecklist._create(question);
                if (answer) {
                    answer.slider({
                        value: 2,
                        min: 0,
                        max: 4,
                        animate: 'true',
                        slide: function(event, ui) {
                            YourChecklist.evtSlide(event.target, ui.value)
                        }
                    });
                }
            });
            var actionbuttons = checklist.find(YourChecklist._buttonsselector),
				printbutton = checklist.find(YourChecklist._printbuttonselector).find('a')
            printbutton.click(YourChecklist.evtPrint)
        },

        _create: function(obj) {
            var rtn;
            var field = obj.find(YourChecklist._fieldselector);
            if (field.length) {
                var slidercontainer = $("<div></div>")
                var slider = $("<div></div>")
                slidercontainer.addClass(YourChecklist._slidercontainerclass);
                slidercontainer.append(slider)
                var labels = field.find('label')
                if (labels.length) {
                    var labelscontainer = $('<p></p>')
                    labels.each(function(i) {
                        var obj = $(this);
                        var label = $('<label></label>')
                        if (i === 0) {
                            label.addClass(Page._firstclass)
                        } else if (i + 1 === labels.length) {
                            label.addClass(Page._lastclass)
                        }
                        var associatedinput = obj.attr('for')
                        label.attr('for', associatedinput);
                        label.html(obj.html())
                        label.click(function(e) {
                            YourChecklist.evtSlideRequest(e.target, i)
                        });
                        labelscontainer.append(label)
                    });
                    slidercontainer.append(labelscontainer)
                }
                field.append(slidercontainer)
                rtn = slider;
            }
            return rtn;
        },

        evtSlide: function(target, index) {
            var target = $(target);
            var field = target.parents(YourChecklist._fieldselector);
            var radios = field.find("input[type=radio]");
            if (radios[index]) radios[index].checked = true;
        },

        evtSlideRequest: function(target, index) {
            target = $(target);
            var slidercontainer = target.parents(Utils.getSelector(YourChecklist._slidercontainerclass))
            var slider = slidercontainer.children(Utils.getSelector(YourChecklist._sliderclass));
            slider.slider("value", index);
        },

        evtPrint: function(e) {
            var obj = $(e.target),
				text = obj.html();
            EventTracking.handleEvent({ cookie: false, category: YourChecklist._gacategory, label: text })
            window.print();
            return false;
        }

    }

    $.OA.PanelAlternator = PanelAlternator = {

        _panelselector: ".panel",
        _contextselector: ".supplementary-content",
        _alternattorclass: "alternate",
        _index: 2,

        init: function() {
            var context = $(PanelAlternator._contextselector);
            var panels = context.find(PanelAlternator._panelselector);
            panels.each(function(i) {
                var alt = (i + 1) % PanelAlternator._index;
                if (alt === 0) {
                    $(this).addClass(PanelAlternator._alternattorclass)
                }
            });
        }

    }

    $.OA.ExternalLinks = ExternalLinks = {

        _gacategory: "External Link",
        _killclass: "killPopup",
        _alertmessage: "You are now leaving www.quitwithhelp.co.uk. Links to other sites are provided as a convenience to the user. Pfizer accepts no responsibility for the content of linked sites.",

        init: function() {
            if (typeof _alertmessage == "undefined") _alertmessage = ExternalLinks._alertmessage;
            var items = $('a[href^=http://], a[href^=https://]').not("." + ExternalLinks._killclass),
				items = $(ExternalLinks.filterEmptyLinks(items));
            items.click(ExternalLinks.evtClick);
        },

        evtClick: function(e) {
            var obj = $(e.target),
				text = "";
            if (obj[0].tagName === Page.C_IMAGE) {
                var parent = obj.parents('a');
                text = obj.attr('alt') + ' (' + $(parent[0]).attr('href') + ')';
            } else {
                text = obj.html() + ' (' + obj.attr('href') + ')';
            }
            EventTracking.handleEvent({ cookie: false, category: ExternalLinks._gacategory, label: text })
            if (!window.confirm(_alertmessage)) return false;
        },

        filterEmptyLinks: function(obj) {
            var rtn = $.grep(obj, function(e, i) {
                var href = $(e).attr('href')
                return ExternalLinks.isNotEmptyLink(href)
            });
            return rtn;
        },

        isNotEmptyLink: function(str) {
            var rtn = (str.indexOf("#") !== (str.length - 1))
            return rtn;
        }

    }

    $.OA.EventTracking = EventTracking = {

        _labeldivider: " : ",
        _gafunction: "_trackEvent",
        _pagetitle: "",

        init: function() {
            EventTracking._pagetitle = $('title').html();
        },

        handleEvent: function(obj) {
            if (typeof _gaq != "undefined") {
                var text = EventTracking._pagetitle + EventTracking._labeldivider + obj.label.replace(/<\/?[^>]+(>|$)/g, ""),
					item = [EventTracking._gafunction, obj.category, text];
                if (obj.cookie && typeof obj.url != undefined) {
                    //alert('need to set a cookie - internal link')
                    //window.location.href = obj.url;
                } else {
                    //alert('js interaction or external link')
                    _gaq.push(item);
                }
            };
        }

    }

    Page.init();
});
