var SPF = new function()
{
    var me = this;
    this.ca = {};
    this.itm = {};
    this.code = null;
    
    this.menu_dir = function(click_obj)
    {
        var obj = $(click_obj);
        var next = obj.next()
        if(next.is(':visible'))
        {
            obj.toggleClass('active');
            next.hide();
        }
        else
        {
            obj.toggleClass('active');
            next.show();
        }
        return false;
    }
    
    this.menu_active = function(id)
    {
        if(!me.ca['menum']) me.ca['menum'] = $('#menum');
        var target = $('.'+id, me.ca['menum']);        
        if(target.hasClass('mdri'))
        {
            target = $('a:eq(0)', target);
            target.next().show();
        }
        me.ca['menum_active'] = target;
        target.addClass('active');
        target = target[0];
        //menum
        while(1)
        {
            if(target == me.ca['menum'][0] || target == document.body) break;
            if(target.nodeName == 'UL')
            {
                //target.className = target.className + ' active';
                target.style.display = 'block';
                $(target).prev().toggleClass('active');
            }
            /*if(target.className.indexOf('poupper') != -1)
            {
                close = false;
                break;
            }*/
            target = target.parentNode;
        }
        /*var close = true;
        
        if(target != document.body)
        {
            if(target.className.indexOf('noc') != -1) return 1;
            while(1)
            {                                    
                //if(target.className == 'poupper')
                if(target == document.body) break;
                if(target.className.indexOf('poupper') != -1)
                {
                    close = false;
                    break;
                }
                target = target.parentNode;
            }
        }*/        
    }
    
    this.pager_active = function(page)
    {
        var page = page || 1;
        me.ca['cur_page'] = page;
        if(!me.ca['pager_div']) me.ca['pager_div'] = $('#pager');
        $('a', me.ca['pager_div']).removeClass('active');
        $('.pg'+page, me.ca['pager_div']).addClass('active');
    }
    
    this.get_size = function(w, h)
    {
        var new_w = document.body.clientWidth, new_h = document.body.clientHeight, now_w = w + me.ca['tbaddon'].w, now_h = h + me.ca['tbaddon'].h;
        if(now_w > new_w || now_h > new_h)
        {
            var kw = now_w/new_w, kh = now_h/new_h;     
            if(kw > kh)
            {
                now_w = Math.round(now_w/kw);
                now_h = Math.round(now_h/kw);
            }
            else
            {
                now_w = Math.round(now_w/kh);
                now_h = Math.round(now_h/kh);
            }
        }
        return {w:now_w, h: now_h};
    }
    this.tbshow = function(prms)
    {
        //me.ca['tb_sync_call'] = Math.random();
        if(!me.ca['tb_win'])
        {
            me.ca['tb_over'] = $('#TB_overlay');
            me.ca['tb_win'] = $('#TB_window');
            me.ca['tb_con'] = $('#TB_Content', me.ca['tb_win']);
            me.ca['tb_show'] = 0;
        }

        if(me.ca['tb_show'] == 0)
        {
            document.onkeyup = function(e)
            {
                if(!me.ca['tb_show']) return false;
                if(e == null) keycode = event.keyCode;
                else keycode = e.which;
                if(keycode == 27) me.tbclose(0);
            };
            document.onclick = function(e)
            {
                if(!me.ca['tb_show']) return true;
                var e = e||window.event;
                var target = e.target||e.srcElement, close = true;
                if(target.id == 'TB_overlay') //overflay layer
                {
                    if(target != document.body)
                    {
                        while(1)
                        {      
                            if(target == document.body) break;
                            if((target != null && target.id == 'TB_Content') || target == null)
                            {
                                close = false;
                                break;
                            }
                            target = target.parentNode;
                        }
                    }
                    if(close) me.tbclose(0);
                }
            }            
        }
        
        if(typeof(prms) == 'string')
        {
            me.ca['code'] = $('#'+prms);
            me.code = me.ca['code'].children();
            me.ca['tb_con'].append(me.code);         
        }
        else
        {
            if(prms.xhr)
            {
                me.ca['tb_con'].html('<div class="ajaxfullprog"></div>'); //loader
                
                if(!prms.cache_reply)
                {
                    $.ajax({
                            type: 'POST',
                            url: prms.xhr,
                            data: prms.xhr_data,
                            success: function(r){
                                if(typeof prms.success == 'function') prms.success(r);
                                me.ca['tb_con'].html(r);
                                me.ca['tb_show'] = 1;
                                return false;
                            }
                    });
                }
                else
                {
                    me.ca['tb_show'] = 1;
                    me.ca['tb_con'].html(prms.cache_reply);
                }
            }
            else me.ca['tb_show'] = 1;
            
            if(!prms.parent_wh)
            {
                new_w = prms.w; 
                new_h = prms.h; 
                //me.ca['tb_win'].css({marginLeft:'-'+parseInt(new_w/2,10)+'px', width: new_w+'px'})
                //if (!(jQuery.browser.msie && jQuery.browser.version < 7)) me.ca['tb_win'].css({marginTop:'-'+parseInt((new_h/2),10)+'px'});
                //me.ca['tb_con'].css({width:new_w+'px', height:new_h+'px'});
                
                //window.status += 'ANIM START|'
                
                me.ca['tb_win'].animate({marginLeft: '-'+parseInt(new_w/2,10)+'px', width: new_w+'px'},{queue:false});
                if (!(jQuery.browser.msie && jQuery.browser.version < 7)) me.ca['tb_win'].animate({marginTop:'-'+parseInt((new_h/2),10)+'px'},{queue:false});
                me.ca['tb_con'].animate({width: new_w+'px', height: new_h+'px'},{queue:false});
                
                //window.status += 'ANIM STOP|'
            }
            
            me.ca['tb_win'].show();
            me.ca['tb_over'].show();
            me.ca['tb_sync'] = new Date().getTime();
            //window.status += 'show '+me.ca['tb_show']+'|';
        }
        
        //if(me.ca['tb_show'] == 1) me.ca['tb_sync_call'] = Math.random();
    }
    this.tbclose = function(c)
    {
        me.ca['tb_show'] = 0;
        document.onkeyup = document.onclick = "";
        
        if(typeof c == undefined) c = 1;
        if(c == 1 && me.ca['code']) me.ca['code'].append(me.code);
        
        me.ca['tb_win'].stop(true);
        if (!(jQuery.browser.msie && jQuery.browser.version < 7)) me.ca['tb_win'].stop(true);
        me.ca['tb_con'].stop(true);
        
        me.ca['tb_win'].hide();
        me.ca['tb_over'].hide();
        return false;
    }
    
    this.debug = function(msg)
    {
        var i = document.getElementById('debug');
        var d = new Date();
        i.innerHTML = d.getMinutes()+':'+d.getSeconds()+' -- '+msg+'<br>' + i.innerHTML;
    }
    
    //главная страница
    this.index = function(sw, o)
    {
        if(sw == 'init_imgs')
        {
            var a = $('#index_random_image'), l = o.length - 1, index = Math.floor(Math.random() * l)+0;
            a.attr('href', o[index][0]);
            $('div', a).css('background', 'url('+o[index][1]+') no-repeat center');
            return false;
        }
        
        me.ca['main_menu'] = $('#menu_coda');
        me.ca['menu_a'] = $('li a', me.ca['main_menu']);
        me.ca['scroll_box'] = $('#scrollhid');
        
        jQuery.easing.easeOutQuart = function (x, t, b, c, d){return -c * ((t=t/d-1)*t*t*t - 1) + b;};

        me.ca['scroll_box'].jCarouselLite({
            auto: 10000,
            btnGo: [".mc1", ".mc2", ".mc3", ".mc4"],
            visible: 1,
            afterEnd: function(elem){
                var i = elem.attr('rel');
                me.ca['menu_a'].removeClass('active');
                if(i!=0) me.ca['menu_a'].eq([i]-1).addClass('active');
            }
        });
        
        //small list product
        
        me.ca['sproduct'] = $('#smallproduct');
        me.ca['sproduct_list'] = $('.mslide', me.ca['sproduct']);
        me.ca['sproduct_img'] = $('.psimg', me.ca['sproduct_list']);
        me.ca['sp_page'] = 1;
        me.ca['cnt_page'] = 0;
        
        var sp =
        {
            list: function(page)
            {
                me.ca['sproduct_list'].html('<div style="height:81px;background:url(/static/img/ajaxer_b.gif) no-repeat center;"></div>');
                if(!me.ca['sp_list' + page])
                {
                    $.ajax({
                        type: 'POST',
                        url: '/product/get_small',
                        data: {page: page},
                        success: function(r)
                        {
                            me.ca['sproduct_list'].html(r);
                            me.ca['sp_list' + page] = r;
                            return false;
                        }
                    });
                }
                else me.ca['sproduct_list'].html(me.ca['sp_list' + page]);
            }
        }
        sp.list(1);
 
        me.ca['sproduct_img'].live('click', function(){
                //var index = me.ca['hdl'].index(this);
                //if(me.ca['cur_page'] > 1) me.ca['offset'] = index + (me.ca['cur_page']-1)*me.har[me.ca['hid']].pp;
                //else me.ca['offset'] = index;
                //g.show(me.ca['offset']);
                return false;
        });
        
        //navigation handle
        $('.larr, .rarr', me.ca['sproduct']).live('click', function(){var o = $(this);
            var way = -1, p = me.ca['sp_page'];
            if(o.hasClass('rarr')) way = 1;
            p+=way;
            if(p <= 0) p = me.ca['cnt_page'];
            else if(p > me.ca['cnt_page']) p = 1;
            me.ca['sp_page'] = p;
            sp.list(p);
        });
        
    }
    
    this.gallery = function(sw, o)
    {
        if(sw == 'init')
        {
            if(!me.ca['all_page']) me.ca['all_page'] = o;
            
            me.ca['list'] = $('#iwall');
            me.ca['a'] = $('a', me.ca['list']);
            me.ca['list'+me.ca['cur_page']] = me.ca['list'].html();
            me.tbshow('gallery_tb');
            me.ca['img'] = $('.img1', me.ca['tb_con']);
            me.ca['tbaddon'] = {w:16, h: 56};
            me.ca['t'] = '';
            
            var g =
            {
                show: function(index)
                {
                    //alert('show = '+me.ca['cur_page']+'+'+index)
                    var item = me.itm[me.ca['cur_page']+''+index];
                    //me.debug(index+' '+item.s);
                    if(item.s == null || item.s == 1)
                    {
                        if(!item.s)
                        {
                            g.load_item(index);
                            me.ca['img'].css({'background-image': 'url("/static/img/ajaxer_b.gif")'});
                            if(me.ca['img'].css('height').indexOf('px') == -1)
                            {
                                me.ca['img'].css({'width': (600 - me.ca['tbaddon'].w)+'px', 'height': (400 - me.ca['tbaddon'].h)+'px'});
                                me.tbshow({w:600, h:400});
                            }
                            else me.tbshow({parent_wh:true});
                        }
                        
                        if(me.ca['tb_show']) me.ca['t'] = setTimeout(function(){g.show(index)}, 100);
                        else item.s = null;
                        
                        return false;
                    }
                    
                    //if(item.t == null) item.t = $('.fim', me.ca['a']).eq(index).next('.fti').html();//load when gte list
                    $('.titler', me.ca['tb_con']).html(item.t);
                    
                    var a_size = me.get_size(item.w, item.h);
                    
                    //fix small image & big title
                    if(item.t && item.t.length > 60) if(a_size.w < 400) a_size.w = 500;                    
                    if(a_size.w < 70) a_size.w = 300;
                    if(a_size.h < 150) a_size.h = 300;
                    
                    me.ca['img'].css({
                        'background-image': 'url("'+item.u+'")',
                        'width': (a_size.w - me.ca['tbaddon'].w)+'px',
                        'height': (a_size.h - me.ca['tbaddon'].h)+'px'
                    });
                    me.tbshow({w:a_size.w, h: a_size.h});

                    return false;
                },
                load_list: function()
                {
                    var i = 0;
                    $('.fim', me.ca['list']).each(function(){                        
                        var t = $(this);
                        var img  = t.css('background-image');
                        img = img.replace(/"/g, '');
                        img = img.substring(4, img.length - 1);
                        img = img.replace('/2_', '/4_');
                        me.itm[me.ca['cur_page']+''+i] = {u:img, t:$('.fti', t.parentsUntil('td')).html(), w:0, h:0, s:null};
                        i++;
                    });
                    //alert(me.itm.toSource());
                    me.itm[me.ca['cur_page']+'cnt'] = i;
                },
                load_item: function(index)
                {
                    var item = me.itm[me.ca['cur_page']+''+index];
                    if(item.s == null)
                    {
                        item.s = 1;
                        var P = new Image();
                        P.onload = function()
                        {
                            P.onload = null;
                            item.w = P.width;
                            item.h = P.height;                            
                            item.s = 2;
                        }
                        P.src = item.u;
                    }  
                },
                close: function()
                {
                    
                }      
            }
            
            g.load_list();
            //first size window
            
            //bind
            me.ca['a'].live('click', function(){
                me.ca['index'] = me.ca['a'].index(this);
                g.show(me.ca['index']);
                return false;    
            });
            $('.abs a', me.ca['tb_con']).live('click', function(){var o = $(this);
                var way = -1, p = null;
                if(o.hasClass('right')) way = 1;
                
                me.ca['index'] += way;
                //alert('index = '+me.ca['index']);
                if(me.ca['index'] == me.itm[me.ca['cur_page']+'cnt'])
                {
                    //BUG
                    if(me.ca['cur_page'] == me.ca['all_page']) p = 1;
                    else p = me.ca['cur_page'] + 1;
                    me.ca['index'] = 0;
                }
                else if(me.ca['index'] == -1)
                {
                    if(me.ca['cur_page'] == 1) p = me.ca['all_page'];
                    else p = me.ca['cur_page'] + way;
                    if(me.itm[p+'cnt']) me.ca['index'] = me.itm[p+'cnt'] - 1;
                    else me.ca['index'] = null;                    
                }
                
                if(p != null)
                {
                    //me.ca['cur_page'] = p;
                    
                    //if(way == -1) me.ca['index'] = me.itm[p+'cnt']; 
                    //else me.ca['index'] = 0;
                    
                    //alert(p + ' '+ me.ca['index']);
                    
                    if(!me.ca['list'+p])
                    {
                        $.ajax({
                            type: 'POST',
                            url: '/gallery/get_page',
                            data: {page: p},
                            success: function(r){
                                me.ca['list'+p] = r;
                                me.ca['list'].html(r);
                                me.ca['a'] = $('a', me.ca['list']);
                                me.pager_active(p);
                                g.load_list();
                                if(me.ca['index'] == null)  me.ca['index'] = me.itm[p+'cnt'] - 1;
                                //alert('ajax = '+p + ' '+ me.ca['index']);
                                g.show(me.ca['index']);
                                return false;
                            }
                        });
                    }
                    else
                    {
                        me.ca['list'].html(me.ca['list'+p]);
                        me.ca['a'] = $('a', me.ca['list']);
                        me.pager_active(p);
                        g.show(me.ca['index']);
                    }
                }
                else g.show(me.ca['index']);
                
                return false;
            });
               
            return false;
        }
        else if(sw == 'x')
        {
            clearTimeout(me.ca['t']);
            me.tbclose(0);
            return false;
        }
        
        return false;
    }
    
    
    this.product = function(sw, o)
    {        
        if(sw == 'init')
        {
            if(o.items == 0) return false;
            if(!me.ca['cur_page']) me.ca['cur_page'] = 1;
            me.ca['list'] = $('#iwall');
            me.ca['hdl'] = $('td', me.ca['list']);
            me.ca['offset'] = 0;
            me.ca['hid'] = o.h;
            
            me.har = {};
            o.i = 0;
            if(me.ca['cur_page'] > 1) o.i = (me.ca['cur_page']-1)*o.pp;
            o.pp = o.pp;
            o.items = o.items-1;
            me.har[o.h] = o;
            
            var g =
            {
                show: function(offset)
                {
                    me.ca['offset'] = offset;
                    var c = me.har[me.ca['hid']], key = c.h+'.'+me.ca['cur_page'], item = me.itm[key+'.'+offset], reply = '';
                    
                    if(me.ca['obj.'+c.h+'.'+item.id]) reply = me.ca['obj.'+c.h+'.'+item.id];
                    
                    me.tbshow({xhr:'/product/get_product', xhr_data:{id:item.id}, w:789, h:420, success: function(r){
                        me.ca['obj.'+c.h+'.'+item.id] = r;
                    }, cache_reply: reply});                    
                    
                },
                parse_list: function()
                {
                    var list_key = 'list.'+me.ca['hid']+'.'+me.ca['cur_page'];
                    if(!me.ca[list_key])
                    {
                        var c = me.har[me.ca['hid']], key = c.h+'.'+me.ca['cur_page'];
                        if(me.ca['cur_page'] > 1) c.i = (me.ca['cur_page']-1)*c.pp;
                        else c.i = 0;
                        
                        var prev_i = c.i;
                        
                        $('td', me.ca['list']).each(function(){
                            var id = $(this).attr('rel');
                            if(id) me.itm[key+'.'+c.i++] = {id:id, r:null};
                        });
                        c.i--;
                                                
                        if(c.i != c.items) me.itm[key+'.'+c.i].next_page = 1;
                        else me.itm[key+'.'+c.i].down_tree = 1;
                        
                        if(prev_i == 0) me.itm[key+'.0'].up_tree = 1;
                        else me.itm[key+'.'+prev_i].prev_page = 1;
                        
                        //alert(l+' - '+(l+c.pp-1));
                        
                        /*var c = me.har[me.ca['hid']], key = c.h+'.'+me.ca['cur_page'], prev_i = c.i;
                        $('td', me.ca['list']).each(function(){
                            var id = $(this).attr('rel');
                            if(id) me.itm[key+'.'+c.i++] = {id:id, r:null};
                        });
                        c.i--;
                        
                        if(c.i != c.items) me.itm[key+'.'+c.i].next_page = 1;
                        else me.itm[key+'.'+c.i].down_tree = 1;
                        
                        if(prev_i == 0) me.itm[key+'.0'].up_tree = 1;
                        else me.itm[key+'.'+prev_i].prev_page = 1;
                        */
                        
                        me.har[me.ca['hid']].i = c.i+1;
                        me.ca[list_key] = me.ca['list'].html();
                    }
                    else me.ca['list'].html(me.ca[list_key]);
                },
                load_list: function()
                {
                    var list_key = 'list.'+me.ca['hid']+'.'+me.ca['cur_page'];
                    if(!me.ca[list_key])
                    {
                        $.ajax({
                            type: 'POST',
                            url: '/product/get_page',
                            data: {page: me.ca['cur_page'], h_id: me.ca['hid']},
                            success: function(r)
                            {
                                me.ca['list'].html(r);
                                me.ca['hdl'] = $('td', me.ca['list']);
                                me.pager_active(me.ca['cur_page']);
                                g.parse_list();
                                g.show(me.ca['offset']);
                                return false;
                            }
                        });
                    }
                    else
                    {
                        me.ca['list'].html(me.ca[list_key]);
                        me.ca['hdl'] = $('td', me.ca['list']);
                        me.pager_active(me.ca['cur_page']);
                        g.show(me.ca['offset']);
                    }                    
                },
                show_handler: function(_this)
                {
                    var index;
                    if(typeof _this == 'object') index = me.ca['hdl'].index(_this);
                    else index = _this;
                    if(me.ca['cur_page'] > 1) me.ca['offset'] = index + (me.ca['cur_page']-1)*me.har[me.ca['hid']].pp;
                    else me.ca['offset'] = index;
                    g.show(me.ca['offset']);
                    return false;
                }
            }
            g.parse_list();
            
            var hash = window.location.hash;
            hash = parseInt(hash.substr(1, hash.length - 1));
            if(hash)
            {
                hash = $('td[rel='+hash+']', me.ca['list']);
                hash = me.ca['hdl'].index(hash[0]);
                g.show_handler(hash);
            }
            
            //click handle
            me.ca['hdl'].live('click', function(){return g.show_handler(this)});/*function(){
                var index = me.ca['hdl'].index(this);
                if(me.ca['cur_page'] > 1) me.ca['offset'] = index + (me.ca['cur_page']-1)*me.har[me.ca['hid']].pp;
                else me.ca['offset'] = index;
                g.show(me.ca['offset']);
                return false;
            });                          
            */
            //navigation handle
            $('.abs a', me.ca['tb_con']).live('click', function(){var o = $(this);
                var c = me.har[me.ca['hid']], key = c.h+'.'+me.ca['cur_page'], _item = me.itm[key+'.'+me.ca['offset']], way = -1;
                if(o.hasClass('right')) way = 1;
                
                //alert(way+' '+me.ca['offset']+' '+_item.toSource());
                if((way == -1 && _item.up_tree) || (way == 1 && _item.down_tree))
                {
                    if(way == -1 && _item.up_tree)
                    {
                        me.ca['cur_page'] = c.page;
                        me.ca['offset'] = c.items;
                    }
                    else if(way == 1 && _item.down_tree)
                    {
                        me.ca['cur_page'] = 1;
                        me.ca['offset'] = 0;
                    }
                    g.load_list();
                    
                    /*
                    tree catalog traversing 
                    var t;
                    if(way == -1 && _item.up_tree) t = me.ca['menum_active'].prev('li[class^="gd"]');//alert('prev tree action');  
                    else if(way == 1 && _item.down_tree) t = me.ca['menum_active'].next('li[class^="gd"]');//alert('next tree action');
                    
                    if(t.length)
                    {
                        me.ca['menum_active'].removeClass('active');
                        var new_active = t.attr('class');
                        new_active = new_active.replace('gd', '');
                        me.menu_active('gd'+new_active);
                        
                        
                        return false;
                    }*/
                    
                    return false;
                }
                else if((way == -1 && _item.prev_page) || (way == 1 && _item.next_page))
                {
                    if(way == -1 && _item.prev_page) me.ca['cur_page']--;
                    else if(way == 1 && _item.next_page) me.ca['cur_page']++;
                    me.ca['offset']+=way;
                    g.load_list();
                    return false;
                }
                
                me.ca['offset']+=way;
                g.show(me.ca['offset']);
                return false;
            });
            
        }
        return false;
    }
}
