try{document.execCommand("BackgroundImageCache", false, true); } catch(e) {}
(function($) {
    // setting var undefined like this allows you to do this:
    // if (blah == undefined) ...
    // instead of
    // if (typeof blah == 'undefined') ...
    var undefined;
    $.Comments = function(options) {
        var self = this;
        this.defaults = {
            links: $('a.commentsLink'),
            lessLinks: $('a.lessCommentsLink'),
            lastLinks: $('a.lastCommentsLink'),
            pageBy: 3,
            ajaxURL: '/svc/ObjectModelService.svc/GetCommentsHTML'
        };

        this.settings = $.extend({}, this.defaults, options);
        this.commentLinks = this.settings.links;

        function _init() {

            self.settings.links.each(function() {
                $(this).attr('commentcount', '2');
                var countHint = $(this).parents('.question-container').attr('counthint');
                if (countHint == 0 || countHint == 1)
                    _disable($(this));
            });

            self.settings.lessLinks.each(function() {
                _disable($(this));
            });

            self.settings.lastLinks.each(function() {
                _disable($(this));
            });

            self.moreLinks(self.settings.links);


            self.settings.lessLinks.bind('click', function() {
                var thisLink = $(this);
                var $questionContainer = thisLink.parents('.question-container');
                var $moreLink = $questionContainer.find('p a.commentsLink');
                var $lastLink = $questionContainer.find('p a.lastCommentsLink');
                var commentCount = $moreLink.attr('commentcount');

                thisLink.commentCount = parseInt(commentCount);

                var $questionContainer = thisLink.parents('.question-container');
                var $commentsHTML = $questionContainer.find('.comments-list .more-comments');
                var $scrollToMe = $questionContainer.find('.comments-list div.scrollTo');

                var ajaxURL = self.settings.ajaxURL + '?videoID=' + $questionContainer.attr('id') + '&startIndex=' + thisLink.commentCount + '&numToRetrieve=50';

                if ((commentCount < (self.settings.pageBy + 2)) && (commentCount != 2)) {
                    $commentsHTML.slideUp('slow', function() {
                        $commentsHTML.empty();
                        _scrollToMe($scrollToMe);
                        $questionContainer.removeClass('open');
                        jQuery.each(jQuery.browser, function(i, val) {
                            if (i == "msie" && jQuery.browser.version.substr(0, 1) == "6") {
                                var $questionBottom = $questionContainer.find('.question-bottom');
                                if ($questionBottom.hasClass('ie-bottom') == true)
                                    $questionBottom.removeClass('ie-bottom')
                            }
                        });
                    });
                    thisLink.commentCount = 2;
                    $moreLink.attr('commentcount', thisLink.commentCount);
                    $moreLink.text('More Comments');
                    _enable($moreLink);
                    _disable($lastLink);
                    _disable(thisLink);
                } else if (commentCount != 2) {
                    var whichChild = commentCount - (self.settings.pageBy + 2);
                    if (whichChild > 0) {
                        $commentsHTML.find('div:nth-child(' + whichChild + ')').attr('id', 'removeStartingHere');
                        var wrapDiv = document.createElement("div");
                        $wrapDiv = $(wrapDiv);
                        $wrapDiv.attr('id', 'removeMe');
                        $('#removeStartingHere ~ div').wrapAll($wrapDiv);
                        $('#removeMe').slideUp('slow', function() {
                            $('#removeMe').empty();
                            _scrollToMe($scrollToMe);
                            thisLink.commentCount -= self.settings.pageBy;
                            $('#removeMe').remove();
                            $moreLink.attr('commentcount', thisLink.commentCount);
                            $moreLink.text('More Comments');
                            _enable($moreLink);
                            $('#removeStartingHere').attr('id', '');
                        });
                    } else {
                        $commentsHTML.slideUp('slow', function() {
                            $commentsHTML.empty();
                            _scrollToMe($scrollToMe);
                            $questionContainer.removeClass('open');
                            jQuery.each(jQuery.browser, function(i, val) {
                                if (i == "msie" && jQuery.browser.version.substr(0, 1) == "6") {
                                    var $questionBottom = $questionContainer.find('.question-bottom');
                                    if ($questionBottom.hasClass('ie-bottom') == true)
                                        $questionBottom.removeClass('ie-bottom')
                                }
                            });
                        });
                        thisLink.commentCount = 2;
                        $moreLink.attr('commentcount', thisLink.commentCount);
                        $moreLink.text('More Comments');
                        _enable($moreLink);
                        _disable(thisLink);
                        _disable($lastLink);
                    }
                }

            });

            self.settings.lastLinks.bind('click', function(e) {
                var thisLink = $(this);
                var $questionContainer = thisLink.parents('.question-container');
                var $moreLink = $questionContainer.find('p a.commentsLink');
                var $lessLink = $questionContainer.find('p a.lessCommentsLink');
                var commentCount = $moreLink.attr('commentcount');

                thisLink.commentCount = parseInt(commentCount);

                var $questionContainer = thisLink.parents('.question-container');
                var $commentsHTML = $questionContainer.find('.comments-list .more-comments');
                var $scrollToMe = $questionContainer.find('.comments-list div.scrollTo');
                if (commentCount != 2) {
                    $commentsHTML.slideUp('slow', function() {
                        $commentsHTML.empty();
                        _scrollToMe($scrollToMe);
                        $questionContainer.removeClass('open');
                        _disable(thisLink);
                        _disable($lessLink);
                        jQuery.each(jQuery.browser, function(i, val) {
                            if (i == "msie" && jQuery.browser.version.substr(0, 1) == "6") {
                                var $questionBottom = $questionContainer.find('.question-bottom');
                                if ($questionBottom.hasClass('ie-bottom') == true)
                                    $questionBottom.removeClass('ie-bottom')
                            }
                        });
                        _enable($moreLink);
                    });
                }

                thisLink.commentCount = 2;
                $moreLink.attr('commentcount', thisLink.commentCount);
                $moreLink.text('More Comments');
            });

            if (self.init != undefined) self.init();
        };

        // start:private
        function _scrollToMe(obj) {
            $.scrollTo(obj, 400);
        }

        function _disable(obj) {
            obj.css('color', 'gray');
            obj.css('text-decoration', 'none');
            obj.css('opacity', '.6');
            obj.css('cursor', 'default');
        }

        function _enable(obj) {
            obj.css('color', '#E7262A');
            obj.css('text-decoration', 'underline');
            obj.css('opacity', '1');
            obj.css('cursor', 'pointer');
        }

        // end:private

        this.moreLinks = function(links) {
            links.bind('click', function() {
                var thisLink = $(this);
                thisLink.commentCount = thisLink.attr('commentcount');
                thisLink.commentUpperBound = thisLink.parents('.question-container').attr('counthint');
                thisLink.commentCount = parseInt(thisLink.commentCount);

                var $questionContainer = thisLink.parents('.question-container');
                var $commentsHTML = $questionContainer.find('.comments-list .more-comments');
                var $scrollToMe = $questionContainer.find('.comments-list div.scrollTo');
                var $lessLink = $questionContainer.find('p a.lessCommentsLink');
                var $lastLink = $questionContainer.find('p a.lastCommentsLink');

                var ajaxURL = self.settings.ajaxURL + '?videoID=' + $questionContainer.attr('id') + '&startIndex=' + thisLink.commentCount + '&numToRetrieve=' + self.settings.pageBy;

                thisLink.unbind('click');

                $.ajax({
                    url: ajaxURL,
                    cache: false,
                    success: function(html) {
                        $commentsHTML.append(html);
                        if (html == '') {
                            self.moreLinks(links);
                        }
                        else {
                            $commentsHTML.slideDown('slow', function() {
                                _scrollToMe($scrollToMe);
                                jQuery.each(jQuery.browser, function(i, val) {
                                    if (i == "msie" && jQuery.browser.version.substr(0, 1) == "6") {
                                        var $questionBottom = $questionContainer.find('.question-bottom');
                                        if ($questionBottom.hasClass('ie-bottom') == false)
                                            $questionBottom.addClass('ie-bottom')
                                    }
                                });

                            });

                            $questionContainer.addClass('open');

                            if ((thisLink.commentCount + 1) >= thisLink.commentUpperBound) {
                                _disable(thisLink);
                            }
                            thisLink.commentCount += self.settings.pageBy;
                            thisLink.attr('commentcount', thisLink.commentCount);
                            _enable($lessLink);
                            _enable($lastLink);
                            self.moreLinks(links);
                        }

                    },
                    error: function(html) {
                        self.moreLinks(links);
                    }
                });

                thisLink.attr('commentcount', thisLink.commentCount);
            });
        }

        _init();
    };

    $.PopUp = function(options) {
        var self = this;
        this.defaults = {
            innerHtml: '<div class="form-container"><form id="question-form" class="questionForm" action="javascript:void(0)"><ul><li id="topic"><label for="questionText">Enter your thought, question, concern, or story here.</label></li><li id="question"><div class="text-bg left"><textarea id="questionText"></textarea></div></li><li><a href="javascript:void(0)" id="question-form-submit" class="submit"><img src="/img/button-submit-tio.gif" width="50" height="20" border="0" alt="Submit" title="Submit" /></a></li></ul></form></div><a href="javascript:void(0)" class="close"><img src="/img/button-close-tio.gif" width="18" height="18" border="0" alt="Close" title="Close" /></a>',
            trigger: null,
            modal: null
        };

        this.settings = $.extend({}, this.defaults, options);

        function _init() {
            var div = document.createElement('div');
            var $div = $(div);

            $div.addClass('overlay');
            $div.attr('id', self.settings.id);
            $div.selfOpen = 0;
            var html = '<div class="overlay-content">' + self.settings.innerHtml + '</div>';
            $div.html(html);

            self.div = $div;


            //alert("hello from _init()");

            if (self.settings.trigger) {
                // which type of form are we creating? question or comment?
                var formType = (html.indexOf('commentForm') > -1) ? 'commentForm' : 'questionForm';
                var url = location.href;
                var videoId = "";
                if (url.indexOf("?" + formType + "=") != -1) {
                    var urlArray = url.split("?");
                    url = urlArray[1];
                    urlArray = url.split("&");
                    url = urlArray[0];
                    urlArray = url.split("=");
                    videoId = urlArray[1];
                }

                self.settings.trigger.bind('click', function() {
                    var position = new Array;
                    position = _findPos(self.settings.position.get(0));
                    var x = position[0];
                    var y = position[1];

                    _destroyYouTubePopUp();
                    self.div.find('textarea').val('');

                    //alert(formType); 
                    //alert(self.settings.trigger);

                    if (!self.settings.isLoggedIn) {
                        //alert("i'm not logged in");
                        var youTubePosition = new Array;
                        youTubePosition = _findPos(self.settings.position.get(0));
                        self.hide();
                        if (self.settings.modal)
                            $('#modal').remove();
                        var commentText = "";
                        _creatYouTubePopup(youTubePosition, commentText, formType, self.settings.videoId, self.settings.youTubeSignInUrl);
                    }

                    else if (!$('#' + self.settings.id).get(0)) {
                        $('body').append($div);

                        if (self.div.find('form').hasClass('questionForm')) {
                            self.div.find('textarea').val('Enter your thought, question, concern, or story here. If you need help or advice, please visit the Need Help tab and contact the National Teen Dating Abuse Helpline');
                            self.div.find('textarea').bind('click', function() {
                                $(this).val('');
                            });
                        }


                        var submitTrigger = $div.find('.submit');
                        submitTrigger.bind('click', function(e) {
                            var theForm = $(this).parents('form');
                            if (theForm.hasClass('commentForm')) {
                                var id = theForm.attr('video');
                                var text = theForm.find('textarea').val();

                                text = _stripHTML(text);
                                text = _replaceDQuotes(text);
                                text = $.trim(text);

                                if (text == '')
                                    return false;
                                var postMe = '{"videoID":"' + id + '","commentText":"' + text + '"}';

                                theForm.find('textarea').val('Sending comment...');
                                $(this).unbind('click');

                                if (self.settings.isLoggedIn) {
                                    $.ajax({
                                        type: "POST",
                                        url: self.settings.service,
                                        data: postMe,
                                        dataType: "json",
                                        contentType: "application/json;charset=utf-8",
                                        success: function(data) {
                                            if (data.d.Success) {
                                                theForm.remove();
                                                var successHTML = '<div class="message">Thank you. Your comment has been posted!</div>';
                                                self.div.find('.form-container').html(successHTML);
                                                RGA.Event.fire(gTrackEvent, String.format(self.settings.trackingBase, 'comment'));
                                                //self.div.remove();
                                            }
                                            else {
                                                theForm.remove();
                                                var failHTML = '<div class="message">Your comment could not be posted. ' + data.d.ErrorMessage + '</div>';
                                                self.div.find('.form-container').html(failHTML);
                                                //self.div.remove();
                                            }
                                        },
                                        error: function(data) {
                                            theForm.remove();
                                            var failHTML = '<div class="message">Your comment could not be posted at this time.</div>';
                                            self.div.find('.form-container').html(failHTML);
                                        }
                                    });
                                } else {
                                    // This is done above now, but left here just in case
                                    var youTubePosition = new Array;
                                    youTubePosition = _findPos(self.settings.position.get(0));
                                    self.hide();
                                    if (self.settings.modal)
                                        $('#modal').remove();
                                    _creatYouTubePopup(youTubePosition, text, formType, id, self.settings.youTubeSignInUrl);
                                }

                            } else if (theForm.hasClass('questionForm')) {

                                var topicName = $("#topics-list-tio li.on a").html();
                                var questionText = theForm.find('textarea').val();

                                if (topicName == '')
                                    topicName = "Something has been sumbitted.";

                                if (questionText == '')
                                    return false;

                                topicName = _stripHTML(topicName);
                                topicName = _replaceDQuotes(topicName);
                                topicName = $.trim(topicName);



                                questionText = _stripHTML(questionText);
                                questionText = _replaceDQuotes(questionText);
                                questionText = $.trim(questionText);

                                var postMe = '{"topic":"' + topicName + '","question":"' + questionText + '","youTubeUserName":"' + self.settings.youTubeUserName + '"}';

                                theForm.find('textarea').val('Sending Question...');

                                if (self.settings.isLoggedIn) {
                                    $.ajax({
                                        type: "POST",
                                        url: self.settings.service,
                                        data: postMe,
                                        dataType: "json",
                                        contentType: "application/json;charset=utf-8",
                                        success: function(data) {
                                            if (data.d.Success) {
                                                var successHTML = '<div class="message">Thank you. Your submission has been accepted! Come back soon to see if has been approved and posted.</div>';
                                                self.div.find('.form-container').html(successHTML);
                                                RGA.Event.fire(gTrackEvent, '/tnc/talkitout/submit_something');
                                            }
                                            else {
                                                var failHTML = '<div class="message">Your question could not be sent at this time.</div>';
                                                self.div.find('.form-container').html(failHTML);
                                            }
                                        },
                                        error: function(data) {

                                        }
                                    });
                                } else {
                                    // This is done above now, but left here just in case
                                    var youTubePosition = new Array;
                                    youTubePosition = _findPos(self.settings.position.get(0));
                                    self.hide();
                                    if (self.settings.modal)
                                        $('#modal').remove();
                                    _creatYouTubePopup(youTubePosition, text, formType, id, self.settings.youTubeSignInUrl);
                                }
                            }
                        });
                    }

                    if (self.settings.modal) {
                        $('#modal').remove();
                        var modalDiv = document.createElement('div');
                        var $modalDiv = $(modalDiv);

                        $modalDiv.attr('id', 'modal');
                        var html = '<iframe frameborder="0" />';
                        $modalDiv.html(html);
                        $modalDiv.css('display', 'none');

                        self.modal = $modalDiv;
                        $('body').append(self.modal);
                        self.modal.add(".modal iframe").css({ height: $(document).height() });
                        self.modal.show();
                    }

                    var checkForm = self.div.find('form');
                    if (checkForm.hasClass('commentForm')) {
                        $div.css('left', (x - 300));
                    } else {
                        $div.css('left', x);
                    }

                    $div.css('top', y);
                    $div.selfOpen = 1;

                    var closeButton = self.div.find('.close');
                    closeButton.click(function(e) {
                        e.preventDefault();
                        self.removeMe();
                        self.div.selfOpen = 0;
                        if (self.settings.modal)
                            $('#modal').remove();
                    });

                });

                //no longer necessary as every popup has a modal blocker
                /*$(document).click(function(e){  
                var triggerID = self.settings.trigger.attr('id');
                var targetID = $(e.target).attr('id');
                if(triggerID != targetID) {
                if(self.div.selfOpen) {				   
                var parent = '#' + self.div.attr('id');
                if(!$(e.target).parents(parent).get(0)) {
                //self.hide();
                self.div.selfOpen = 0;
                self.div.remove();
                var html = '<div class="overlay-content">' + self.settings.innerHtml + '</div>';
                self.div.html(html);
                if(self.settings.modal)
                $('#modal').remove();
                }
                }
                }
                });*/

                if (videoId == self.settings.videoId) {
                    var button = self.settings.trigger;
                    button.trigger('click');
                    $(window).scrollTop(button.position().top);
                }

            }
            else {
                if (!$('#' + self.settings.id).get(0))
                    $('body').append($div);
            }

            if (self.init != undefined) self.init();
        };

        // start:private
        function _private() {

        }

        function _creatYouTubePopup(position, commentText, formType, videoID, nextLocation) {
            var html = '<div id="divYouTubePopup" class="youtube-popup"><div style="position: relative; float: left;"><div class="youtube-popup-bg"><p>You\'ll be briefly redirected to YouTube to log in or create an account before you post your comment. Then you\'ll be sent right back. Sorry for the inconvenience.</p><ul><li><a id="ancYouTubeLoginDecline" href="javascript:void(0)"><img height="25" width="96" border="0" title="no thanks" alt="no thanks" src="img/popup-nothanks.gif"/></a></li><li><a id="ancYouTubeLoginAccept" href="javascript:void(0)"><img height="26" width="31" border="0" title="OK" alt="OK" src="img/popup-ok.gif"/></a></li></ul></div></div></div>';
            var youTubeLogin = new $.PopUp({ id: "youtubeLogIn", innerHtml: html, modal: true });
            youTubeLogin.show(position);

            var youTubeDecline = $('#ancYouTubeLoginDecline');
            var youTubeAccept = $('#ancYouTubeLoginAccept');

            youTubeDecline.bind('click', function() {
                $('#modal').remove();
                $('#youtubeLogIn').remove();
                self.removeMe();
            });

            youTubeAccept.bind('click', function() {
                /*** logic taken from roufa's AdCouncliClasses.js***/
                var pathEscaped = _safeEscape(location.pathname);
                //var insertText = pathEscaped + _safeEscape("?commentText_" + videoID + "=" + _safeEscape(commentText));
                var insertText = pathEscaped + _safeEscape("?" + formType + "=" + videoID);
                // Option 1: the path has a qs, so it ends with an encoded '?'.
                var pathWithQuestionMark = pathEscaped + _safeEscape("?");
                if (nextLocation.indexOf(pathWithQuestionMark) > -1) {
                    nextLocation = nextLocation.replace(pathWithQuestionMark, insertText + _safeEscape("&"));
                }
                // Option 2: the path has no qs, so it ends with an UNENCODED '&'.
                else if (nextLocation.indexOf(pathEncoded + "&") > -1) {
                    nextLocation = nextLocation.replace(pathEscaped + "&", insertText + "&");
                }

                location.href = nextLocation;
            });

        }

        function _destroyYouTubePopUp() {
            if ($('#youtubeLogIn').get(0)) {
                $('#youtubeLogIn').remove();
            }
        }

        function _findPos(obj) {
            var curleft = curtop = 0;

            if (obj.offsetParent) {
                curleft = obj.offsetLeft
                curtop = obj.offsetTop

                while (obj = obj.offsetParent) {
                    curleft += obj.offsetLeft
                    curtop += obj.offsetTop
                }
            }
            return [curleft, curtop];
        }

        function _safeEscape(str) {
            /***from roufa's AdCouncilClasses.js***/
            var output = encodeURIComponent(str);
            // encodeURIComponent doesn't handle these characters that escape will: ~!()'
            output = output.replace(/\~/g, escape('~'));
            output = output.replace(/\!/g, escape('!'));
            output = output.replace(/\(/g, escape('('));
            output = output.replace(/\)/g, escape(')'));
            output = output.replace(/\'/g, escape("'"));
            // Nothing handles the asterisk.
            output = output.replace(/\*/g, '%2A');
            return output;
        }

        function _replaceDQuotes(str) {
            str = str.replace(/\"/g, '\\"');
            str = str.replace(/[\n\r\t]/g, '\\n');
            return str;
        }

        function _stripHTML(str) {
            str = str.replace(/<(?:.|\s)*?>/g, '');
            return str;
        }
        // end:private

        // start:public

        this.show = function(position) {

            if (self.settings.modal) {
                var modalDiv = document.createElement('div');
                var $modalDiv = $(modalDiv);

                $modalDiv.attr('id', 'modal');
                var html = '<iframe frameborder="0" />';
                $modalDiv.html(html);
                $modalDiv.css('display', 'none');

                self.modal = $modalDiv;
                $('body').append(self.modal);
                self.modal.add(".modal iframe").css({ height: $(document).height() });
                self.modal.show();
            }

            var x = position[0];
            var y = position[1];
            self.div.css('left', x);
            self.div.css('top', y);
            self.div.selfOpen = 1;
        }

        this.hide = function() {
            self.div.css('left', '-9999px');
        }

        this.removeMe = function() {
            self.div.remove();
            var html = '<div class="overlay-content">' + self.settings.innerHtml + '</div>';
            self.div.html(html);
        }
        // end:public		
        _init();
    };

    $.commentOverlays = function(options) {
        var self = this;
        this.defaults = {
            questionContainers: $('.question-container'),
            ajaxURL: '/svc/ObjectModelService.svc/PostComment'
        };

        this.settings = $.extend({}, this.defaults, options);

        function _init() {

            self.settings.questionContainers.each(function() {
                var questionContainer = $(this);
                var $commentsButton = questionContainer.find('.comment-button');
                var overlayId = questionContainer.attr('id') + '-comments-overlay';
                var html = '<div class="form-container commentPopUp"><form class="commentForm" id="comment-form-' + questionContainer.attr('id') + '" video="' + questionContainer.attr('id') + '"><ul><li><span>Comment</span><textarea></textarea></li><li><a href="javascript:void(0)" class="submit" id="comment-form-submit-' + questionContainer.attr('id') + '"><img src="/img/button-submit-tio.gif" width="50" height="20" border="0" alt="Submit" title="Submit" /></a></li></ul></form></div><a href="javascript:void(0)" class="close"><img src="/img/button-close-tio.gif" width="18" height="18" border="0" alt="Close" title="Close" /></a>';
                new $.PopUp({ id: overlayId, trigger: $commentsButton, position: $commentsButton, innerHtml: html, service: self.settings.ajaxURL, isLoggedIn: self.settings.isLoggedIn, youTubeSignInUrl: self.settings.youTubeSignInUrl, modal: true, trackingBase: self.settings.trackingBase, videoId: questionContainer.attr('id') });
            });
            if (self.init != undefined) self.init();
        };

        _init();
    };

    $.submitSomethings = function(options) {
        var self = this;
        this.defaults = {
            questionContainers: $('.question-container'),
            ajaxURL: '/svc/ObjectModelService.svc/EmailQuestionSubmission'
        };

        this.settings = $.extend({}, this.defaults, options);

        function _init() {

            self.settings.questionContainers.each(function() {
                var questionContainer = $(this);
                var $sumbitSomethingButton = questionContainer.find('.question-button');
                var overlayId = 'submit-question-overlay';
                var $position = questionContainer.find('.commentsLink');

                new $.PopUp({ id: overlayId, trigger: $sumbitSomethingButton, position: $position, service: self.settings.ajaxURL, isLoggedIn: self.settings.isLoggedIn, youTubeUserName: self.settings.youTubeUserName, youTubeSignInUrl: self.settings.youTubeSignInUrl, modal: true, videoId: questionContainer.attr('id') });

            });

            if (self.init != undefined) self.init();
        };

        _init();
    };

})(jQuery);
