(function($){
    var objl = {};
    var privateobj = {};
    var loader = new Image();
    loader.src = '/images/loader.gif';

    var trostian = {
        __init     : function(){
            objl = trostian;
            if($.browser['msie']){
                objl.menuhover();
                if($.browser.version < 8){
                  objl.menufix();
                }
            }

//            objl.bgfix();
            $.bannerResize('img[attr=bannerleft]', 180);

            $('form[trst=newtopic],form[trst=newmess]').submit(objl.formvalidate);
            $('form[trst=loginform]').submit(function(e){
                objl.login.call();
                return false;
            });
            $('input[trst=exit]').click(function(e){
                document.location.href='/users/logout';
                return false;
            });

            if($.isFunction($.imageResize)){
        	$.imageResize();
            }

            if($.isFunction($.fn.lightBox)){
                $('a[trst=image]').lightBox({
                    imageAllowedWidth:$(window).width()-150,
                    imageAllowedHeight:$(window).height()-150,
                    fixedNavigation:true
                });

                $('a[trst=imgmain]').each(function(){
                    $(this).lightBox({
                        imageAllowedWidth:$(window).width()-150,
                        imageAllowedHeight:$(window).height()-150,
                        fixedNavigation:true
                    });
                });
            }

            if($.isFunction($.fn.tinymce)){
                var area = $('textarea.mess');
                if(!area.length&&!$('textarea.amess').length){
                  setWeather();
                }
                area.before('<div trst="loader" style="width:200px;display:table-cell;text-align:center;position:absolute" ><p>Загружаю редактор</p></div>');
                $(loader).appendTo('div[trst=loader]');
                area.tinymce(tiny.setOptions());
            }else{
                setWeather();
            }




            $('a[trst],input[trst]').live('click',objl.events);
            $('table[trst=usronline]').usrOnline();

            if($('input[name=ch_pass]').length){
            $('tr[trst=pass]').find('input').val('');
            $('input[name=ch_pass]').toggle(function(e){
                $(this).val('Не изменять пароль');
                $('tr[trst=pass]').show();
            },function(e){
                $(this).val('Сменить пароль');
                $('tr[trst=pass]').hide();
                $('tr[trst=pass]').find('input').val('');
            });
            }

            var cam;
            if((cam=$('div.trostian-web-cam')).length){
             cam.css('margin-left',15).html('').append('<iframe width="730" scrolling="no" height="585" frameborder="0" src="http://slavski.info/default.php" ></iframe>');
            }

        },
        menuhover : function(){
            if(!document.getElementById("hmenu"))
                return;

            $('#hmenu').children('li').hover(function(){
                $(this).addClass('iehover');
            },function(){
                $(this).removeClass('iehover');
            });
        },
        menufix  : function(){
            var $menu = $('#hmenu');
            $menu.css({
                'padding-left':($menu.outerWidth()<$menu.parent().innerWidth()?Math.round(($menu.parent().innerWidth()-$menu.outerWidth())/2):0)
            });
        },
        bgfix  : function(){
            if(screen.width <= 1024 && HOST=='be-kiter'){
                $('#table').css({
                    'background-position':'center top'
                });
            }

            if(HOST=='trostian'){
		var img = $('img.head-background'),
		newImg = new Image();
		img.hide();
		    $(newImg).bind("load", function () {
		         var width = $('body').width();
//		         img.css('width',width>1000?width:1000);
		         img.css('width','100%');
		         img.show();
		         $('#table td.headheight').css('height',img.height()-45);
		         $('#table').css('height',img.height()+35);
		    });
		    newImg.src = img.attr('src');
		}
        },
        events : function(){
            var act = $(this).attr('trst');
            switch(act){
                case 'reg'     :
                    location.href = '/reg.html';
                    return true;
                case 'login'   :
                case 'usrinfo' :
                    $.fn[act] = objl[act];
                    $(this)[act]();
                    $.fn[act] = undefined;
                    return false;
                default:
                    break;
            }
            return true;
        },
        login : function(){
            var form = $('form[trst=loginform]');
            var Data = form.objData();
            var resp = $.ajax({
                url        : form.attr('action'),
                data       : Data,
                type       : 'POST',
                cache      : false,
                datatype   : 'json',
                async      : false,
                beforeSend : function(){
                    form.before('<div trst="loader" style="width:200px;display:table-cell;text-align:center;" />');
                    $(loader).appendTo('div[trst=loader]');
                    form.hide();
                }
            }).responseText;


            try{
                resp = $.parseJSON(resp);
                if(typeof(resp.Result) != 'udefined' && resp.Result === true){
                    window.location.href= window.location+'#login';
                    location.reload(true);
                }
                else{
                    $('div[trst=loader]').remove();
                    if(resp.Not.length){
                        $.notification(resp.Not,false);//['Error:Логин или пароль не верный']
                    }

                    form.show();
                }
            }catch(e){
            }

        },
        formvalidate:function(){
            switch($(this).attr('trst')){
                case 'newtopic':
                    if($('textarea[name=Tmess]').val() ==''){
                        alert('error');
                        return false;
                    }
                    if($('input[name=Tname]').val() ==''){
                        alert('error');
                        return false;
                    }
                    break;
                case 'newmess':
                    if($('textarea[name=Mess]').val() ==''){
                        alert('error');
                        return false;
                    }
                    break;
                default:
                    break;
            }
        },
        box: function(opt){
            var def = {
                content  : '',
                zIndex   : 3100,
                DOM      : false,
                attr     : {},
                animate  : true,
                width    : false,
                height   : false,
                position : 'fixed',
                top      : false,
                mask   : true,
                left     : false,
                onStart  : function(){
                    return false;
                },
                onClose  : function(){
                    return true;
                },
                callback : function(){
                    return false;
                }
            }

            opt = $.extend(def,opt);
            opt.onStart.call();

            obj = document.createElement('div');
            mask = document.createElement('div');

            $obj = $(obj);

            if(opt.mask){
                $mask = $(mask);
                $mask.addClass('mask');
                $mask.css({
                    'opacity':0.6,
                    width:$(document).width()+50,
                    height:$(document).height()
                });
                $((opt.DOM?opt.DOM:'body')).append($mask);
                $('body').css({
                    'overflow':'hidden'//,
                //    'width':$(window).width()
                });
            }

            $obj.append('<div trst="close" class="modalcloser"></div>');

            if(!opt.left){
                opt.left = Math.round(($(window).width()-(!opt.width?600:opt.width))/2);
            }

            if(opt.top){
                $obj.css({
                    top:opt.top
                });
            }

            if(opt.height){
                $obj.css({
                    height:opt.height
                });
            }

            if(opt.width){
                $obj.css({
                    width : opt.width
                });
            }


            $obj.addClass('modaldialog').attr(opt.attr).attr({
                'trst':'modal'
            }).css({
                position: opt.position,
                left: opt.left,
                'z-index' : opt.zIndex
            });

            $obj.append(opt.content).appendTo((opt.DOM?opt.DOM:'body')).fadeIn('normal',function(){
                if(!opt.top){
                    $(this).animate({
                        'top':Math.round(($(window).height()-$(this).height())/2)
                    },opt.callback);
                }else{
                    opt.callback.call();
                }
            });
            $obj.children('div[trst=close]').click(function(){
                $obj=$(this).parent();
                if(opt.onClose($obj)){
                    $obj.fadeOut('normal',function(){
                        $(this).remove();
                        if(opt.mask){
                            $mask.fadeOut(function(){
                                $('body').css({
                                    'overflow':'auto',
                                    'width':'auto'
                                });
                            });
                        }
                    })
                }
            });
            return obj;
        },
        usrinfo : function(){
            var objget = $(this);
            var modals = [];
            $('a[trst=usrinfo]').unbind('click');
            $('a[trst=usrinfo]').bind('click',function(){
                modals = $('div[trst=modal]');
                if(modals.length){
                    if(modals.attr('Login') == $(this).attr('Login')){
                        return false;
                    }
                    $('div[trst=modal][Login]').fadeOut('normal',function(){
                        $(this).remove();
                    });
                }
            });
            $.fn.showInfo = objl.__showInfo
            objget.showInfo();
            $.fn.showInfo = undefined;
        },
        __showInfo:function(){
            var result = '';
            var style   = 'class="uder_data"';
            var counter = 0;
            var tpl = {
                res1:'',
                res2:''
            };

            tpl.main ='<table width="100%" class="user" border="0" cellspacing="0" cellpadding="0" >'+
            '<tr>'+
            '<td rowspan="2" valign="top">'+
            '<p class="title" style="margin-bottom:15px; margin-top:10px;">'+$(this).attr('Login')+'</p>'+
            '<table width="100%" border="0" cellspacing="0" cellpadding="0">'+
            '{%part1%}'+
            '</table>'+
            '</td>'+
            '<td width="210px" align="center" class="avt"><img src="{%Img%}" alt="{%Name%}" title="{%Name%}" style="border:1px solid #333333;"/></td>'+
            '</tr>'+
            '<tr>'+
            '<td valign="top" class="avt">'+
            '<table width="100%" border="0" cellspacing="0" cellpadding="0">'+
            '{%part2%}'+
            '</table>'+
            '</td>'+
            '</tr>'+
            '</table>';
            tpl.parts ='<tr>'+
            '<td width="30px" align="right"><img src="{%Img%}" alt="{%Name%}" title="{%Name%}"/></td>'+
            '<td {%Class%}><p>{%Value%}</p></td>'+
            '</tr>';

            result = $.ajax({
                url     : '/users/info/',
                data    : {
                    Login:$(this).attr('Login')
                },
                type    : 'POST',
                async   : false
            }).responseText;

            result = eval('('+result+')');

            for(var i in result[0]){
                counter++;
                tpl.res1 += $.ArrReplace(tpl.parts,['{%Img%}','{%Name%}','{%Value%}','{%Class%}'],[result[0][i].IMG,result[0][i].Name,result[0][i].Value,counter%2?style:'']);
            }

            for(var i in result[1]){
                tpl.res2 += $.ArrReplace(tpl.parts,['{%Img%}','{%Name%}','{%Value%}','{%Class%}'],[result[1][i].IMG,result[1][i].Name,result[1][i].Value,'']);
            }

            result = $.ArrReplace(tpl.main,['{%part1%}','{%part2%}','{%Img%}','{%Name%}'],[tpl.res1,tpl.res2,result.Avatar.IMG,result.Avatar.Name]);
            trostian.box({
                content:result,
                attr:{
                    Login:$(this).attr('Login')
                },
                zIndex:3200
            });

        }

    }

    var usr = {
        __init:function (){
            //            return false;
            var obj=usr.dataobj.obj=this;
            usr.__GetUsers();
        },
        __GetUsers:function(){
            $.ajax({
                url     : this.url,
                type    : 'POST',
                success : this.__GenData,
                dataType:'json'
            });
        },
        __GenData:function(response){
            var usrarr  = response;
            var counter = $('b[trst=usrcntonline]');
            var ret     = '';
            if(usrarr === false){
                usr.dataobj.obj.html('');
                counter.html(0);
            }else{
                $(usrarr).each(function(it){
                    ret+=$.ArrReplace(usr.tpl,['{%Status%}','{%Login%}'],[usrarr[it].Status,usrarr[it].Login]);
                });
                usr.dataobj.obj.html(ret);
                counter.html(usrarr.length);
            }

            clearInterval(usr.interval);
            usr.interval=setInterval(function(usr){
                return function(){
                    usr.__GetUsers()
                }
            }(usr),10000);
        },
        url : '/users/online/',
        tpl : '<tr trst="usersonline">'+
        '<td width="20"><img src="/images/flag-{%Status%}.gif" style="margin: 0px;" /></td>'+
        '<td class="online"><p class="on {%Status%}"><a trst="usrinfo" login="{%Login%}" href="#">{%Login%}</a></p></td>'+
//        '<td width="20" class="online"><img src="/images/eyes.gif" style="margin: 0px;" /></td>'+
        '<td width="20" class="online"><a href="/mailing/newmail.html?to={%Login%}"><img src="/images/email.gif" style="margin: 0px;" /></a></td>'+
        '</tr>',
        interval :null,
        dataobj : {}
    }


    var banners = {
        rotator : function(obj,options){
            this.newvar = null;
            this.test = function(){
                if(arguments.length){
                    this.newvar = arguments[0];
                }
            }
        }

    };


    var tiny = {
        setOptions : function(){
            $(document).trigger('tinyMceAddMainOpt'  ,this.options.advopt);
            $(document).trigger('tinyMceAddEditorOpt',this.options.client);
            return $.extend(this.options.advopt,this.options.globopt,this.options.client);
        }
    }

    tiny.options = {
        advopt : {
            script_url : '/js/tiny_mce/tiny_mce.js',
            theme      : "advanced",
            plugins    : "Mbbcode,inlinepopups,emotions",
            extended_valid_elements : "img[src|alt|title|width|height],a[href|target|trst|title|class],strong,iframe[src|width|height|name|align]",
            object_resizing : false
        },
        globopt:{
            language   : 'ru',
            height     : '100%',
            width      : '100%',
            entity_encoding : "raw",
            convert_urls : false,
            relative_urls : false,
            remove_linebreaks : false,
            popup_css_add : '/css/tinymce.css',
            content_css   : '/css/tinymce.css',
            document_base_url :"/",
            setup : function(ed){
                ed.onInit.add(function(e){
                    $('#'+ed.id).prev('div[trst=loader]').remove();
                    ed.show();
                    setWeather();
                });
                $(document).trigger('tinyMceSetup',ed);
            }
        },
        client : {
            theme_advanced_buttons1 : "bold,undo,redo,link,unlink,image,removeformat,cleanup,emotions",
            theme_advanced_buttons2 : "",
            theme_advanced_buttons3 : "",
            theme_advanced_toolbar_location : "top",
            theme_advanced_toolbar_align : "center",
            forced_root_block : false,
            force_br_newlines : true,
            force_p_newlines  : false
        }

    }

    $.extend({
        trostian:trostian.__init,
        showBox :trostian.box
    });


    $.fn.extend({
        usrOnline:usr.__init,
        banners:function(options){
            options = typeof(options) == 'object'?options:{};
            return new banners.rotator(this,options);
        }
    });
    //})(jQuery)
    //
    //(function($){
    $.fn.UpFile = function(opt){
        dopt = {
            onattach : function(){
                return false;
            },
            ondetach : function(){
                return false;
            }
        }

        opt= typeof(opt)!='undefined'?$.extend(dopt,opt):dopt;
        buttons = [];
        $(this).each(function(){
            ins = this;
            b=$.CreateButton($(this).attr('trstid'),opt);
            if(!b) return false;
            buttons.push(b);
            $div = $(document.createElement('div'));
            $div.attr({
                trst:"files",
                'class':"files"
            });
            $div.append(b.block,b.fname,b.optionC);
            $(this).append($div);
            $(b.browseC).css({
                opacity:0
            }).scrollLeft(1000);

            $(b.browse).change(function(e){
                $(b.fname).text($(this).val());
                if(b.attach)$(b.attach).show();
                if(b.detach)$(b.detach).show();
            });

            if(b.attach) $(b.attach).click(function(){
                opt.onattach.call(ins,b);
            });
            if(b.detach) $(b.detach).click(function(){
                opt.ondetach(ins,b);
            });
        });

        return buttons;
    }

    $.CreateButton = function(id,opt){
        if(typeof(id) == 'undefined' || !id) return false;

        var dopt = {
            name   : "img["+id+"]",
            attach : true,
            detach : true
        }

        opt=$.extend(dopt, opt);

        var button = {
            id      : id,
            block   : document.createElement('div'),
            button  : document.createElement('input'),
            browseC : document.createElement('div'),
            browse  : document.createElement('input'),
            fname   : document.createElement('div'),
            optionC : document.createElement('div'),
            attach  : opt.attach?new Image():false,
            detach  : opt.detach?new Image():false
        }

        $block   = $(button.block);
        $button  = $(button.button);
        $browseC = $(button.browseC);
        $browse  = $(button.browse);
        $fname   = $(button.fname);
        $optionC = $(button.optionC);
        $attach  = $(button.attach);
        $detach  = $(button.detach);

        $block.addClass('button');
        $button.attr({
            'class':'upbutton',
            type:'button',
            value:"Прикрепить фото"
        });
        $browseC.attr({
            'class':'browsebutton',
            trst:'file'
        });
        $browse.attr({
            type:'file',
            name:opt.name
        });
        $fname.attr({
            'class':'text',
            trst:"fname"
        });
        $optionC.attr({
            'class':'block',
            trst:"foption"
        }).css({
            'position':'absolute',
            'right':0
        });

        if(opt.attach){
            $attach.attr({
                trst:"attach",
                src:"/images/attach.png",
                title:"Добавить в редактор"
            });
            $optionC.append($attach);
        }
        if(opt.detach){
            $detach.attr({
                trst:"detach",
                src:"/images/drop.png",
                title:"Убрать"
            });
            $optionC.append($detach);
        }

        $browseC.append($browse);
        $block.append($button,$browseC);

        delete $block;
        delete $button;
        delete $browseC;
        delete $browse;
        delete $fname;
        delete $optionC;
        delete $attach;
        delete $detach;
        return button;
    }



    $.fn.confirm = function(opt){
        dopt = {
            onCancel : function(){
                return true;
            },
            onConfirm : function(){
                return true;
            },
            mess : 'none'
        }


        opt = $.extend(dopt,(typeof(opt)!= 'undefined'?opt:{}));

        $(this).each(function(it){
            $(this).click(function(e){
                return showConfirm(e,opt);
            });
        });
    }

    showConfirm = function(e,opt){
        $img = $(e.target);
        $mess = $img.attr('trstmess');
        if(typeof($mess)=='undefined'){
            $mess = opt.mess;
        }
        $id = $img.attr('trstid');

        if(typeof($id)=='undefined'){
            return false;
        }

        var content = '<div style="margin:4px;"><p class="warning" style="color:#333333;padding-left:70px;margin:20px 0 20px 20px;">'+$mess+'</p></div>'+
        '<div style="white-space:nowrap; margin:0 auto;width:326px;"><input class="button" trst="cTrue" type="button" style="margin:4px;display:inline;" value="Да" /><input style="margin:4px;display:inline;" trst="cFalse" class="button" type="button" value="Нет" /></div>';

        if($('div[trsttype=confirm][trstid='+$id+']').length){
            return false;
        }

        box = $.showBox({
            content:content,
            width : 370,
            attr  : {
                trstid:$id,
                trsttype:'confirm'
            },
            onStart : function(){
                $('div[trsttype=confirm][trstid!='+$img.attr('trstid')+']').remove();
            }
        });

        $(box).find('input[trst=cFalse]').click(
            function(e){
                $(box).find('.modalcloser').trigger('click');
            }
            );
        $(box).find('input[trst=cTrue]').click(
            function(e){
                if(opt.onConfirm($img)){
                    $(box).find('.modalcloser').trigger('click');
                }
            });
    }
    $.tinyglob=tiny;


    /* $.Cookies
             *
             * Set method :
             *       $.Cookies.Set('somename','value','2');     // Set Cookie -> $.Cookies.Set(name,value,expire_time_in_days);
             *       $.Cookies.Set('somename','','-2');     // Unset Cookie;
             *
             * Get method :
             *      variable (String)  = $.Cookies.Get('somename');   // return value of cookie 'somename'
             *      variable (Object) = $.Cookies.Get();   // return object of avaliable cookies
             *
   */

    $.Cookies = {
        Set     : function(name,value,expiredays){
            var date=new Date();
            date.setDate(date.getDate()+expiredays);
            document.cookie=name+ " = " +escape(value)+
            ((typeof(expiredays)=='undefined' || expiredays==null) ? "" : ";expires="+date.toUTCString());
        },
        Get     : function(name){
            COOKIES = {};
            document.cookie.replace(/([^=\s;]+)=([^;]*)/ig,function(m,$1,$2){
                COOKIES[$1] = unescape($2);
            });

            if(typeof(name) != 'undefined' || name !=null){
                return COOKIES[name];
            }
            return COOKIES;
        }
    }

    function setWeather(){
		var script1 = $('<'+'script'+'/>').attr({language:'JavaScript',type:'text/javascript', src:'http://informer.gismeteo.ru/html/js/showtlist_new.js'}),
                script2 = $('<'+'script'+'/>').attr({language:'JavaScript',type:'text/javascript', src:'http://informer.gismeteo.ru/html/js/ldata_new.js'}),
                script3 = $('<'+'script'+'/>').attr({language:'JavaScript',type:'text/javascript', src:'http://informer.gismeteo.ru/html/2.php?tnumber=1&city0=11848%D0%A1%D0%BB%D0%B0%D0%B2%D1%81%D0%BA%D0%BE%D0%B5&codepg=utf-8&par=4&inflang=rus&domain=ru&vieinf=2&p=1&w=1&tblstl=gmtbl&tdttlstl=gmtdttl&tdtext=gmtdtext&new_scheme=1'});

                $('#weather').append(script1);
                $('#weather').append(script2);
                $('#weather').append("<table border=0 width=200><tr><td>"+
                 "<div id='informer2'></div>"+
                 "<div id='infscript' style='visibility:hidden'></div>"+
                 "</td></tr></table>");
                $('#infscript').after(script3);
    }

})(jQuery)

