var popup_creator;

(function() {
    
    // global vars
    var popup_center, popup_fx, overlay, to_path, this_func;
    var state = 0;
    
    window.addEvent("domready", function()
    {
        $(document.body).adopt(
            $$([popup_center = new Element("div", {id: "popup_center"})]).setStyle('display', '').setStyle('display', 'none')
        );
        
        overlay = $('lbOverlay');
        overlay.addEvent("click", close);
        popup_fx = {
          overlay: new Fx.Tween(overlay, {property: "opacity", duration: 500}).set(0)
        };
    });
    
    popup_creator = {
        open: function(id_name, path, element, func)
        {
            // check for errors
            var focus = $(id_name);
            if (!focus) return;
            
            // setup the basic fade and positioning
            position();
            setup(true);
            popup_fx.overlay.start(0.4);
            state = 1;
            to_path = path;
            this_func = func;
            
            // get the size of the new box
            focus.setStyle('display', 'block');
            var size = focus.getSize();
            focus.setStyle('display', 'none');
            
            // move the popup box to the center of the page
            var top = window.getScrollTop() + (window.getHeight() / 2) - (size.y / 2);
            popup_center.setStyles({top: top, width: size.x, height: size.y, marginLeft: -(size.x / 2), display: ''});
            popup_center.innerHTML = this[func](element, focus.innerHTML);
            popup_center.className = 'popup_' + func;
            
            // replace the buttons on the popup
            $$('#popup_center .popup_cancel').addEvent('click', close);
            $$('#popup_center form').addEvent('submit', function() {return submit(path, func);});
        },
        
        remove_user: function(element, data)
        {
            // get the correct variables
            var parent = element.parentNode.parentNode;
            var imgs = parent.getElementsByTagName('img');
            var image = imgs[0].src;
            var name = imgs[0].alt;
            
            // replace the text in data
            data = data.replace(/\%image\%/g, image);
            data = data.replace(/\%name\%/g, name);
            
            // return the correct data
            return data;
        },
        
        remove_friend: function(element, data)
        {
            // get the correct variables
            var parent = element.parentNode.parentNode;
            var imgs = parent.getElementsByTagName('img');
            var image = imgs[0].src;
            var name = imgs[0].alt;
            
            // replace the text in data
            data = data.replace(/\%image\%/g, image);
            data = data.replace(/\%name\%/g, name);
            
            // return the correct data
            return data;
        },
        
        add_friends: function(element, data)
        {
            // get the correct variables
            var parent = element.parentNode.parentNode.parentNode;
            var imgs = parent.getElementsByTagName('img');
            var image = imgs[0].src;
            var name = imgs[0].alt;
            
            // replace the text in data
            data = data.replace(/\%image\%/g, image);
            data = data.replace(/\%name\%/g, name);
            
            // return the correct data
            return data;
        },
        
        leave_group: function(element, data)
        {
            // get the correct variables
            var parent = element.parentNode.parentNode.parentNode;
            var imgs = parent.getElementsByTagName('img');
            var image = imgs[0].src;
            var name = imgs[0].alt;
            
            // replace the text in data
            data = data.replace(/\%image\%/g, image);
            data = data.replace(/\%name\%/g, name);
            
            // return the correct data
            return data;
        },
        
        remove_group: function(element, data)
        {
            // get the correct variables
            var parent = element.parentNode.parentNode.parentNode;
            var imgs = parent.getElementsByTagName('img');
            var image = imgs[0].src;
            var name = imgs[0].alt;
            
            // replace the text in data
            data = data.replace(/\%image\%/g, image);
            data = data.replace(/\%name\%/g, name);
            
            // return the correct data
            return data;
        },
        
        add_friend: function(element, data) {return data;},
        remove_bookmark: function(element, data) {return data;},
        add_bookmark: function(element, data) {return data;},
        join_group: function(element, data) {return data;}, 
        why_birthday: function(element, data) {return data;},
        why_postcode: function(element, data) {return data;},
        privacy_options: function(element, data) {return data;},
        what_are_keywords_for: function(element, data) {return data;},
        which_do_i_choose: function(element, data) {return data;},
        whats_a_url: function(element, data) {return data;},
        report_comment: function(element, data) {return data;}
    };
  
    function position() 
    {
        overlay.setStyles({top: window.getScrollTop(), height: window.getHeight()});
    }
  
    function setup(open)
    {
        ["object", window.ie ? "select" : "embed"].forEach(function(tag) {
            Array.forEach(document.getElementsByTagName(tag), function(el) {
                if (open) elementsStyle[el] = el.style.visibility;
                el.style.visibility = open ? "hidden" : elementsStyle[el];
            });
        });
    
        overlay.style.display = open ? "" : "none";
    
        var fn = open ? "addEvent" : "removeEvent";
        window[fn]("scroll", position)[fn]("resize", position);
        document[fn]("keydown", keyDown);
    }
  
    function keyDown(event)
    {
        switch(event.code)
        {
            case 27:	// esc
                close();
                break;
            case 13:	// enter
                submit(to_path, this_func);
        }
        
        // prevent default keyboard action
        return false;
    }
  
    function close()
    {
        if (state)
        {
            state = 0;
            
            for (var f in popup_fx) popup_fx[f].cancel();
            popup_center.setStyle('display', 'none');
            popup_fx.overlay.chain(setup).start(0);
        }
    
        return false;
    }
    
    function submit(path, func)
    {
        path = path.substr(path.indexOf('com')+3);
        var rq = new Request.HTML({
            url:path,
            'onSuccess' : function(a,s,d,f){
                switch (func) {
                    case 'add_friend':
                        // find the correct person
                        var temp = path.match(/\/([0-9]+)\//).pop();
                        // replace the other texts
                        $('add_friends_error_box').style.display = 'block';
                        $('add_friends_error_box').getChildren().set('html','A request has been sent to  ' + $('profile_name').get('text') + ' to be your friend');
                        // remove the parent
                        $('add_as_friend').dispose();
                    break;
                    case 'remove_friend':
                        friend_setup.refresh('friends');
                    break;
                    case 'remove_user':
                        friend_setup.refresh('friends');
                    break;
                    case 'add_friends':
                        // find the correct person
                        var temp = path.match(/\/([0-9]+)\//).pop();
                        var id = $('add_friend_' + parseInt(temp.replace(/[^\d]/g, '')));
                        // replace the other texts
                        var parent = id.parentNode.parentNode;
                        var imgs = parent.getElementsByTagName('img');
                        var name = imgs[0].alt;
                        $('add_friends_error_box').style.display = 'block';
                        $('add_friends_error_box').getChildren().set('html','A request has been sent to  ' + name + ' to be your friend');
                        // remove the parent
                        id.parentNode.removeChild(id);
                    break;
                    case 'remove_bookmark':
                        window.location.href = $$('#remove_bookmark_popup form')[0].action;
                    break;
                    case 'add_bookmark':
                        var ele = $$('ul li a.bookmark_this')[0];
                        var parent = ele.parentNode.parentNode;
                        if (parent.id == 'no_delete')
                        {
                            var ems = $$('ul#no_delete em');
                            for (var i = 0; i < ems.length; i ++)
                                ems[i].parentNode.removeChild(ems[i]);
                            ele.parentNode.parentNode.removeChild(ele.parentNode);
                        }
                        else
                            parent.parentNode.removeChild(parent);
                    break;
                    case 'leave_group':
                        window.location.href = $$('#leave_group_popup form')[0].action;
                    break;
                    case 'remove_group':
                        window.location.href = $$('#remove_group_popup form')[0].action;
                    break;
                    case 'join_group':
                        var ele = $('join_icon').parentNode;
                        ele.parentNode.removeChild(ele);
                    break;
                }
                close();
            },
            'onFailure' : function(){
                close();
            },
            'data' : 'ajax=true'
        }).post();
        return false;
    }

})();

window.addEvent("domready", function() {
  $$('a.remove_friend').addEvent('click', function() {popup_creator.open('remove_friend_popup', this.href + 'confirm/', this, 'remove_friend'); return false;});
  $$('em a.remove_user').addEvent('click', function() {popup_creator.open('remove_user_popup', this.href + 'confirm/', this, 'remove_user'); return false;});
  $$('div.add_as_friend a.add_friend').addEvent('click', function() {popup_creator.open('add_friend_popup', this.href + 'confirm/', this, 'add_friend'); return false;});
  $$('span a.add_friend').addEvent('click', function() {popup_creator.open('add_friend_popup', this.href + 'confirm/', this, 'add_friends'); return false;});
  $$('em.remove_link a.remove_bookmark').addEvent('click', function() {popup_creator.open('remove_bookmark_popup', this.href + 'confirm/', this, 'remove_bookmark'); return false;});
  $$('li a.bookmark_this').addEvent('click', function() {popup_creator.open('add_bookmark_popup', this.href + 'confirm/', this, 'add_bookmark'); return false;});
  $$('i a.leave_group').addEvent('click', function() {popup_creator.open('leave_group_popup', this.href + 'confirm/', this, 'leave_group'); return false;});
  $$('i a.remove_group').addEvent('click', function() {popup_creator.open('remove_group_popup', this.href + 'confirm/', this, 'remove_group'); return false;});
  $$('li#join_icon a').addEvent('click', function() {popup_creator.open('join_group_popup', this.href + 'confirm/', this, 'join_group'); return false;});
  $$('a.birthday_need').addEvent('click', function() {popup_creator.open('why_birthday_popup', this.href, this, 'why_birthday'); return false;});
  $$('a.postcode_need').addEvent('click', function() {popup_creator.open('why_postcode_popup', this.href, this, 'why_postcode'); return false;});
  $$('#privacy_options').addEvent('click', function() {popup_creator.open('privacy_options_popup', this.href, this, 'privacy_options'); return false;});
  $$('#discuss_board .report_this').addEvent('click', function() {popup_creator.open('report_popup', this.href + 'confirm/', this, 'report_comment'); return false;});
  $$('#what_are_keywords_for').addEvent('click', function() {popup_creator.open('what_are_keywords_for_popup', this.href, this, 'what_are_keywords_for'); return false;});
  $$('#which_do_i_choose').addEvent('click', function() {popup_creator.open('which_do_i_choose_popup', this.href, this, 'which_do_i_choose'); return false;});
  $$('#whats_a_url').addEvent('click', function() {popup_creator.open('whats_a_url_popup', this.href, this, 'whats_a_url'); return false;});
});
