function esc ($s) {
    return typeof($s) !== 'string' ? '' :
        $s.replace(/&/g,'&amp;')
        .replace(/</g,'&lt;')
        .replace(/>/g,'&gt;')
        .replace(/"/g,'&quot;')
        .replace(/'/g,'&#39;')
        .replace(/[\n\r]/g,'<br />');
}

function trim ($s) {
    return typeof($s) !== 'string' ? $s :
        $s.replace(/^[\n\r\s]*(.*?)[\n\r\s]*$/ig,'$1');
}

function setDate ($d) {
    var date = '',
    months = ["", "January", "Februrary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    
    $d = trim($d).split(/\D+/g);
    date = months[parseFloat($d[1])] + ' ';
    
    date += parseFloat($d[2]);
    date += ', ' + $d[0];
    return date;
}

function setTime ($t) {
    var time = '',
    hour = '',
    meridian = 'am';
    
    $t = trim($t).split(/\D+/g);
    hour = parseFloat($t[3]);
    
    if ((hour>11) && (hour<24)) {
        meridian = 'pm';
    }
    
    time = (hour>12 ? hour-12 : hour) + ':' + $t[4] + ' ' + meridian + ' ET';
    
    return time;
}

(function($){
    $(document).ready(function(){
        var pageid = window.location.search.replace(/^.*?[\?&]id=([^&]*).*$/,'$1'),
        template = '<div class="comment">' +
            '<div id="name">' +
                '<div class="name">{author}:</div>' +
                '<div class="response"><img src="images/responseIcon.png" border="0"></div>' +
            '</div>' +
            '<div class="clear"></div>' +
            '<h3 class="dateTime">{date} at {time}</h3>' +
            '<p class="desc">{comment}</p>' +
        '</div>';
        
        if (pageid == '') {
            // If no artist name, avoid showing the comments form
            return;
        }
        
        $('head').append('<link rel="stylesheet" type="text/css" href="/css/comments.css" />');
        $('#comment-section').html(
        '<div id="formBase" style="position:relative;height:auto;width:auto;">' +
          '<div id="heading" style="width:auto;">' +
            '<h1>Leave an Artist Comment</h1>' +
          '</div>' +
          '<div id="commentBase" style="height:auto;width:auto;">' +
            '<div class="comment-list"></div>' +
            '<div id="socialMediaBtns" class="">' +
                /* '<ul>' +
                  '<li><a href="#"><img src="images/like.png" border="0"/></a></li>' +
                    '<li><a href="#"><img src="images/digg.png" border="0"/></a></li>' +
                    '<li><a href="#"><img src="images/tweet.png" border="0" /></a></li>' +
                    '<li><a href="#"><img src="images/buzzit.png" border="0" /></a></li>' +
                    '<li><a href="#"><img src="images/share.png" border="0" /></a></li>' +
                    '<li><a href="#"><img src="images/rss.png" border="0"/></a></li>' +
                '</ul>' + */
                '<span class="st_email"></span>' +
                '<span class="st_facebook"></span>' +
                '<span class="st_twitter"></span>' +
                '<span class="st_sharethis" displayText="ShareThis"></span>' +				
            '</div>' +
            '<div id="commentForm" style="height:auto;padding-bottom:1em;">' +
                '<form action="" method="post" id="inputForm">' +
                    '<ol>' +
                      '<li>' +
                        '<textarea id="message" class="required" name="comment" rows="5" cols="30"></textarea>' +
                      '</li>' +
                      '<li class="buttons">' +
                        '<input type="image" name="imageField" id="imageField" src="images/submit.png" style="vertical-align:bottom;" />' +
                        ' <span id="comment-message"></span>' +
                      '</li>' +
                    '</ol>' +
                '</form>' +
            '</div>' +
          '</div>' +
        '</div>');
        
        if (typeof(stWidget) === 'object') {
            $('[class^=st_]').each(function(){
                stWidget.addEntry(this);
            });
        }
        
        $('#commentForm form').each(function(){
            var $this = $(this),
            fields = $this.find('input, textarea'),
            submit = fields.filter('input[type=submit]'),
            message = $this.find('#comment-message'),
            required = fields.filter('.required'),
            missing = 0;
            
            $this.bind('submit',function(){
                missing = 0;
                
                required.each(function(){
                    if (trim($(this).val()).length) {
                        $(this).removeClass('missing');
                        return true;
                    }
                    
                    $(this).addClass('missing');
                    missing++;
                });
                
                if (missing) {
                    message.text('You cannot post an empty comment!');
                    return false;
                }
                
                submit.val('Saving...');
                message.text('Saving...');
                
                $.ajax({
                    url:'comments-module.php?action=comment',
                    data:$this.serialize() + '&pageid=' + pageid,
                    type:'post',
                    dataType:'json',
                    success:function(data){
                        if (data === true) {
                            submit.val('Comment posted');
                            message.text('Comment posted');
                        }
                        else {
                            for (n in data) {
                                message.text(data[n]);
                                break;
                            }
                        }
                    },
                    error:function(){
                        fields.removeAttr('disabled');
                        submit.val('Post comment');
                        message.text('There was an error posting your comment, please try again in a few minutes');
                    }
                });
                
                fields.attr('disabled','disabled');
                
                return false;
            });
            
            fields.attr('disabled','disabled');
            message.text('Checking login status...');
            
            $.ajax({
                url:'comments-module.php?action=logged',
                dataType:'json',
                success:function(data){
                    if (data === false) {
                        submit.hide();
                        message.html('<a href="/register.php"><strong>Register</strong></a>/<a href="/account.php">login to post comments</a>');
                    }
                    else {
                        fields.removeAttr('disabled');
                        message.text('');
                    }
                },
                error:function(){
                    submit.hide();
                    message.html('<a href="/register.php"><strong>Register</strong></a>/<a href="/account.php">login to post comments</a>');
                }
            });
        });
        
        $('.comment-list').each(function(){
            var $this = $(this),
            $load = function(page){
                var comment,
                pagination = false,
                m, n;
                
                $this.addClass('loading').html('');
                $.ajax({
                    url:'comments-module.php',
                    data:{
                        action:'retrieve',
                        pageid:pageid,
                        page:page,
                        count:5
                    },
                    type:'get',
                    dataType:'json',
                    success:function(data){
                        $this.removeClass('loading');
                        
                        if (data === false) {
                            $this.addClass('error');
                        }
                        if (data === true) {
                            $this.addClass('error').text('No comments listed');
                        }
                        else {
                            for (n in data) {
                                if (n === 'pagination') {
                                    pagination = data[n];
                                    continue;
                                }
                                
                                comment = data[n];
                                $this.append(template
                                    .replace(/\{author\}/g,esc(comment['author']))
                                    .replace(/\{date\}/g,esc(setDate(comment['created'])))
                                    .replace(/\{time\}/g,esc(setTime(comment['created'])))
                                    .replace(/\{website\}/g,esc(comment['website']))
                                    .replace(/\{comment\}/g,esc(comment['comment']))
                                );
                            }
                            
                            if (pagination) {
                                m = Math.ceil(parseInt(pagination['total'])/parseInt(pagination['count']));
                                pagination = '';
                                
                                for (n=1;n<=m && m>1;n++) {
                                    if (n == page) {
                                        pagination += '<a href="#comments/' + n + '" class="current">' + n + '</a>';
                                    }
                                    else {
                                        pagination += '<a href="#comments/' + n + '">' + n + '</a>';
                                    }
                                }
                                
                                $this.append('<div class="pagination">' + pagination + '</div>');
                                
                                $this.find('.pagination a').bind('click',function(e){
                                    var $a = $(this);
                                    e.preventDefault();
                                    
                                    $this.find('.pagination a.current').removeClass('current');
                                    $a.addClass('current');
                                    
                                    $load($a.attr('href').replace(/\D+/g,''));
                                });
                            }
                        }
                    },
                    error:function(){
                        $this.removeClass('loading').addClass('error');
                    }
                });
            };
            
            $load(1);
        });
        
        $('a.scrollTop').live('click',function(e){
            e.preventDefault();
            $('body').scrollTop(0);
        });
    });
})(jQuery);
