$(document).ready(function(){
    
    var minHeight=55;
    var updateTime=3;
    var firstUpdate=true;
    
    var native_UserList=$('#userList').height();
    var native_MessageList=$('#messageList').height();
    var native_ChatFrame=native_UserList+$('#chatSeparator').height()+native_MessageList+$('#inputText').height();
    
    var chat_LogIn=false;
    var chat_Minimized=false;
    var chat_UserListHide=false;
    
    var chat_Parameters=null;
    
    //$('#chatBlock').hide();
    
    initChat();
    
    $(parent.document.getElementById('chatButton')).click(function(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"updateChatVisibility"});
        $(parent.document.getElementById('chatIFrame')).show();
    });
    
    $('#authForm').submit(function(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"login",reqUserNick:$('#userNick').val()},function(data){
            if (data!=0){
                initChat();
            }
        });
        return false;
    });
    
    $('#userArrow').click(function(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"updateChatUser"});
        chat_Parameters[0]=1-chat_Parameters[0];
        switchVisibilityByID('userList');
        switchVisibilityByID('chatSeparator');
        switchVisibilityByID('memberBlock');
        if ($('#userList').css('visibility')=='hidden'){
            $('#messageList').css({top:0});
            $('#messageList').height($('#inputText').position().top);
            $(this).attr({src:'Images/Chat/arrow_down.jpg'});
        }else{
            $('#messageList').css({top:($('#chatSeparator').position().top+$('#chatSeparator').height())});
            $('#messageList').height($('#inputText').position().top-$('#chatSeparator').position().top-$('#chatSeparator').height());
            $(this).attr({src:'Images/Chat/arrow_up.jpg'});
        }
    });
    
    $('#minimizeChatWindow').click(function(){
        chat_Parameters[1]=1-chat_Parameters[1];
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"updateChatMinimize"});
        if ($('#chatFrame').css('display')=='none'){
            $('#chatFrame').show();
            $('#userArrow').show();
            if (!parseInt(chat_Parameters[0])){
                switchVisibilityByID('memberBlock');
            }
        }else{
            if (!parseInt(chat_Parameters[0])){
                switchVisibilityByID('memberBlock');
            }
            $('#chatFrame').hide();
            $('#userArrow').hide();
        }
        resizeIFrame();
    });
    
    $('#exitChatWindow').click(function(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"logout"},function(data){});
        $(parent.document.getElementById('chatIFrame')).hide();
    });
    
    $('#messageBlock').keyup(function(event){
        if (event.keyCode==13){
            if ($('#messageBlock').val()!=''){
                $.post("/?reqMode=xHTTP&reqType=Chat&reqAction=saveMessage",{reqPost:$('#messageBlock').val()},function(data){
                    updateMessageList();
                });
                $('#messageBlock').val('');
            }
        }
    });
    
    $('#chatSeparator').drag(function(event){
        var tmp_uHeight=event.offsetY-$('#userList').position().top-$('#chatFrame').position().top;
        var tmp_mHeight=$('#inputText').position().top-(event.offsetY+$(this).height())+$('#chatHeader').height();
        if (tmp_uHeight>=minHeight && tmp_mHeight>=minHeight){
            $(this).css({top:event.offsetY-$('#chatHeader').height()});
            $('#userList').css({height:tmp_uHeight});
            $('#messageList').css({height:tmp_mHeight,top:$(this).position().top+$(this).height()});
        }
    });
    
    function initChat(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"getChatVisibility"},function(data){
            if (data!=0){
                $(parent.document.getElementById('chatIFrame')).show();
            }
        })
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"check"},function(data){
            if (data!=0){
                $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"updateParameters"},function(data){
                    chat_Parameters=data.split(",");
                    updateStatus();
                    $(null).everyTime(3000,function(){
                        updateStatus();
                    });
                    switchVisibilityByID('userArrow');
                    if (parseInt(chat_Parameters[0])){
                        switchVisibilityByID('memberBlock');
                        $('#messageList').css({top:0});
                        $('#messageList').height($('#inputText').position().top);
                        $('#userArrow').attr({src:'Images/Chat/arrow_down.jpg'});
                    }else{
                        switchVisibilityByID('userList');
                        switchVisibilityByID('chatSeparator');
                        $('#messageList').css({top:($('#chatSeparator').position().top+$('#chatSeparator').height())});
                        $('#messageList').height($('#inputText').position().top-$('#chatSeparator').position().top-$('#chatSeparator').height());
                        $('#userArrow').attr({src:'Images/Chat/arrow_up.jpg'});
                    }
                    if (parseInt(chat_Parameters[1])){
                        $('#chatFrame').hide();
                        $('#userArrow').hide();
                        if (!parseInt(chat_Parameters[0])){
                            switchVisibilityByID('memberBlock');
                        }
                    }else{
                        $('#chatFrame').show();
                        $('#userArrow').show();
                    }
                    
                    switchVisibilityByID('minimizeChatWindow');
                    //switchVisibilityByID('openChatWindow');
                    //switchVisibilityByID('authorizationFrame');

                    switchVisibilityByID('chatFrame');
                    $('#messageList').scrollTop($('#messageList>div').innerHeight());
                    
                    resizeIFrame();
                    
                });
            }else{
                //alert(1);
                switchVisibilityByID('authorizationFrame');
                //$('#chatBlock').show();
                //parent.document.getElementById('chatIFrame').style.visibility='visible';
            }
        });
    }
    
    function updateStatus(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"updateStatus"},function(data){
            if (data==1){
                updateUserList();
                updateMessageList();
            }
        });
    }
    
    function updateUserList(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"updateUserList"},function(data){
            $('#userList').html(data);
            $('#userNumber').text($('#userList>div').size());
        });
    }
    
    function updateMessageList(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"updateMessageList"},function(data){
            //alert($('#messageList').scrollTop()+$('#messageList').innerHeight()+' - '+$('#messageList>div').innerHeight());
            if ($('#messageList').scrollTop()+$('#messageList').innerHeight()==$('#messageList>div').innerHeight()/* || firstUpdate*/){
                $firstUpdate=false;
                $('#messageList>div').html(data);
                $('#messageList').scrollTop($('#messageList>div').innerHeight());
            }else{
                $('#messageList>div').html(data);
            }
        });
    }
    
    function updateParameters(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"updateParameters"},function(data){
        });
    }
    
    /*
    function showChatFrame(){
        switchVisibilityByID('userArrow');
        switchVisibilityByID('memberBlock');
        switchVisibilityByID('minimizeChatWindow');
        switchVisibilityByID('openChatWindow');
        switchVisibilityByID('authorizationFrame');
        switchVisibilityByID('chatFrame');
        $('#messageList').scrollTop($('#messageList>div').innerHeight());
        //resizeIFrame();
    }

    function hideChatFrame(){
        switchVisibilityByID('userArrow');
        switchVisibilityByID('memberBlock');
        switchVisibilityByID('minimizeChatWindow');
        switchVisibilityByID('openChatWindow');
        switchVisibilityByID('authorizationFrame');
        switchVisibilityByID('chatFrame');
        resizeIFrame();
    }
    */
    
    function checkStatus(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"check"},function(data){
            if (data==0){
                hideChatFrame();
            }else{
                setTimeout(checkStatus,updateTime*1000);
                updateTotal();
                updateUsers();
                updateMessages();
            }
        });
    }
    
    /*
    function updateTotal(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"total"},function(data){
            $('#userNumber').text(data);
        });
    }
    */
    
    /*
    function updateUsers(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"users"},function(data){
            $('#userList').html(data);
        });
    }
    */
    
    /*
    function updateMessages(){
        $.get("/",{reqMode:"xHTTP",reqType:"Chat",reqAction:"messages"},function(data){
            if ($('#messageList').scrollTop()+$('#messageList').innerHeight()==$('#messageList>div').innerHeight() || firstUpdate){
                if (firstUpdate){
                    firstUpdate=false;
                }
                $('#messageList>div').html(data);
                $('#messageList').scrollTop($('#messageList>div').innerHeight());
            }else{
                $('#messageList>div').html(data);
            }
        });
    }
    */
    
    function switchVisibilityByID(ID){
        if($('#'+ID).css('visibility')=='hidden'){
            $('#'+ID).css({visibility:'visible'});
        }else{
            $('#'+ID).css({visibility:'hidden'});
        }
        //alert(ID+' '+$('#'+ID).css('visibility'));
    }
    
    function resizeIFrame(){
        //alert(parent.document.getElementById('chatIFrame').style.height);
        //alert(0);
        
        if (parseInt(chat_Parameters[0]) && parseInt(chat_Parameters[1])){
            //alert(1);
            //$(parent.document.getElementById('chatIFrame')).css({height:300});
        }else if (parseInt(chat_Parameters[0]) && !parseInt(chat_Parameters[1])){
            //alert(2);
            //$(parent.document.getElementById('chatIFrame')).css({height:300});
        }else if (!parseInt(chat_Parameters[0]) && parseInt(chat_Parameters[1])){
            //alert(3);
            //$(parent.document.getElementById('chatIFrame')).css({height:300});
        }else{
            //alert(4);
            //$(parent.document.getElementById('chatIFrame')).css({height:289});
        }
        if (parseInt(chat_Parameters[1])){
            $(parent.document.getElementById('chatIFrame')).css({height:23});
        }else{
            $(parent.document.getElementById('chatIFrame')).css({height:289});
        }
        //alert(5);
        /*
        if (parent.document){
            var tmp_iHeight=$('#chatHeader').height();
            if (!chat_LogIn){
                tmp_iHeight+=147;
            }else{
                if (!chat_Minimized){
                    tmp_iHeight+=native_ChatFrame;
                }
            }
            parent.document.getElementById('chatIFrame').style.height=tmp_iHeight;
        }
        */
    }
    
});