var commentHandle="/TE_CommentSystem/TE_CommentSystem.php";
var commentsCurrentPage = 0;


var TECommentSystem=function()
    {
        var $A=YAHOO.util.Anim,$C=YAHOO.util.Connect,$D=YAHOO.util.Dom,$E=YAHOO.util.Event,$U=YAHOO.util;
        var callbackObj={},retObj={handle:'',container:'',captcha:''};
        function _parseJSON(str){return(/^(\s+|[,:{}\[\]]|"(\\["\\\/bfnrtu]|[^\x00-\x1f"\\]+)*"|-?\d+(\.\d*)?([eE][+-]?\d+)?|true|false|null)+$/.test(str))&&eval('('+str+')');}
        function _setMssg(elem,mssg)
        {
            var errorMSSG=$D.getElementsByClassName('comment_error','DIV',elem);
            if(errorMSSG.length!=0)
            {
                if(mssg.length==0)
                {
                    $D.setStyle(errorMSSG[0],'visibiliy','hidden');
                    $D.setStyle(errorMSSG[0],'display','none');
                }
                else
                {
                    $D.setStyle(errorMSSG[0],'visibiliy','visible');
                    $D.setStyle(errorMSSG[0],'display','block');
                }
                errorMSSG[0].innerHTML=mssg;
            }
            else
            {
                alert(mssg);
            }
        }

        function setHandle(handle)
        {
            retObj.handle=handle;
        };

        function setCaptchaElement(captcha)
        {
            retObj.captcha=captcha;
        }

        function setContainer(container)
        {
            retObj.container=container;
            loadComments();
        };

        function loadComments()
        {
            transObj=$C.asyncRequest('POST',retObj.handle,callbackObj,"action=get&from="+document.location);
        };

        function loadCommentsPage(page)
        {
            transObj=$C.asyncRequest('POST',retObj.handle,callbackObj,"action=get&page=page&from="+document.location);
        };

        function postComment(formObj,container)
        {
            formObj.onsubmit=function(){return false;};
            _setMssg(formObj,'');
            $C.setForm(formObj);
            callbackObj.argument=formObj;
            transObj=$C.asyncRequest('POST',retObj.handle,callbackObj,"action=insert&from="+document.location);
        };

        function postSuccess(o)
        {
            var commentObj=_parseJSON(o.responseText),errorMSSG;

            if((commentObj)&&(typeof commentObj=='object'))
            {
                if(commentObj.comments)
                {
                    for(var i=0;i<commentObj.comments.length;i++)
                    {
                        if(commentObj.comments[i].status == 'new')
                        {
                            insertComment(commentObj.comments[i]);
                        }
                        else
                        {
                            appendComment(commentObj.comments[i]);
                        }
                    }

                    if(o.argument){o.argument.reset();}
                }
            }
            else
            {
                if(o.argument)
                {
                    _setMssg(o.argument,o.responseText);
                }
            };

            reloadImg();
        };

        function postFailure(o)
        {
            if(o.argument)
            {
                _setMssg(o.argument,o.responseText);
                o.argument.reset();
            }

            reloadImg();
        };

    function prepareComment(cItem)
    {
        var sItem="<div class='item_container'>";
        if(cItem.authorSite == 'http:/' || cItem.authorSite == 'http://' || cItem.authorSite == 'http:///' || cItem.authorSite == '' || cItem.authorSite.lenght < 4)
        	cItem.authorSite = '';
        sItem+="<div class='comment_item'>"+
        "<div class='comment_author'><span  class='username'>"+
        ((cItem.authorSite && cItem.authorSite!="''")?"<a href='"+cItem.authorSite+"' target='_blank' title='"+cItem.commentAuthor+" Website - Visit Here'>"+cItem.commentAuthor+"</a>":cItem.commentAuthor)+
        "&nbsp;</span>| &nbsp; <span class='date'>Posted: &nbsp;"+cItem.commentDate+"</span></div>"+
        "<div class='comment_body'>"+cItem.commentBody+"</div>"+
        "</div></div>";
        return sItem;
    };

    function showPage(page)
    {
        if(page!=commentsCurrentPage)
        {
            var commentsPageContainer =document.getElementById('comments_page['+page+']');
            var oldPageContainer = document.getElementById('comments_page['+commentsCurrentPage+']');
            if(oldPageContainer)
            {
                oldPageContainer.style.display = 'none';
                oldPageContainer.style.visibiliy = 'hidden';
            }

            if(commentsPageContainer)
            {
                commentsPageContainer.style.display = 'block';
                commentsPageContainer.style.visibiliy = 'visible';
            }

            commentsCurrentPage = page;
        }
    };

    function insertComment(cItem)
    {
        var commentsContainer =$D.get(retObj.container);
        var pageControl=document.getElementById('comments_page_control');

        var commentsPageContainer =document.getElementById('comments_page['+cItem.page+']');
        if(!commentsPageContainer)
        {
            commentsContainer.innerHTML +="<div  id='comments_page["+cItem.page+"]'></div>";
            commentsPageContainer =document.getElementById('comments_page['+cItem.page+']');
            if(cItem.page!=commentsCurrentPage)
            {
                commentsPageContainer.style.display = 'none';
                commentsPageContainer.style.visibiliy = 'hidden';
            }
            else
            {
                commentsPageContainer.style.display = 'block';
                commentsPageContainer.style.visibiliy = 'visible';
            }

            pageControl.innerHTML+="&nbsp;<a href='javascript:void(0)' class='nav_but'  onclick='TECommentSystem.showPage("+cItem.page+")' >"+cItem.page+"</a>";
        }

        if(commentsPageContainer)
        {
            commentsPageContainer.innerHTML=prepareComment(cItem)+commentsPageContainer.innerHTML;
            if(cItem.status=='new')
            {
                showPage(cItem.page);
            }
        }
    };

    function appendComment(cItem)
    {
        var commentsContainer =$D.get(retObj.container);
        var pageControl=document.getElementById('comments_page_control');

        var commentsPageContainer =document.getElementById('comments_page['+cItem.page+']');
        if(!commentsPageContainer)
        {
            commentsContainer.innerHTML+="<div id='comments_page["+cItem.page+"]'></div>";
            commentsPageContainer =document.getElementById('comments_page['+cItem.page+']');
            if(cItem.page!=commentsCurrentPage)
            {
                commentsPageContainer.style.display = 'none';
                commentsPageContainer.style.visibiliy = 'hidden';
            }
            else
            {
                commentsPageContainer.style.display = 'block';
                commentsPageContainer.style.visibiliy = 'visible';
            }
            pageControl.innerHTML+="<a href='javascript:void(0)'class='nav_but' onclick='TECommentSystem.showPage("+cItem.page+")'>"+cItem.page+"</a>&nbsp;";
        }


        if(commentsPageContainer)
        {
            commentsPageContainer.innerHTML+=prepareComment(cItem);
            if(cItem.status=='new')
            {
                showPage(cItem.page);
            }
        }
    };

    function clearComments()
    {
        var commentsContainer =$D.get(retObj.container);

        if(commentsContainer){commentsContainer.innerHTML="";}
    };

    function reloadImg()
    {
        if(retObj.captcha!='')
        {
            captchaIMG=$D.get(retObj.captcha);

            if(captchaIMG&&retObj.handle!=''){captchaIMG.src=retObj.handle+"?.png"+Math.random();}
        }
    };

    callbackObj.success=postSuccess;
    callbackObj.failure=postFailure;
    retObj.post=postComment;
    retObj.showPage=showPage;
    retObj.setHandle=setHandle;
    retObj.setContainer=setContainer;
    retObj.setCaptcha=setCaptchaElement;

    return retObj;
}();

YAHOO.util.Event.addListener(window,'load',
    function()
    {
        TECommentSystem.setHandle(commentHandle);
        TECommentSystem.setContainer('commentContainer');
        TECommentSystem.setCaptcha('commentCaptcha');
    }
    );