var startTouch = false;

if(!Object.keys){   
    Object.keys = function(o){
        if (o !== Object(o))
            throw new TypeError('Object.keys called on non-object');
        var ret=[],p;
        for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
        return ret;
    }
}
 
(function($) {
    
    jQuery.extend({
        random: function(X) {
            return Math.floor(X * (Math.random() % 1));
        },
        randomBetween: function(MinV, MaxV) {
          return MinV + jQuery.random(MaxV - MinV + 1);
        }
    });
    
    var dTime;
    $.fn.dragBlock = function(config) {
        var resizeTimer;
        var d = $(this);
        var w = d.parent();
        var startPos;
        var stopPos;
        var options = config || {};
        function setContainment(){
            options.containment = [w.width()-d.width(),w.height()-d.height(),0,0];    
        }
        var params = {
            cursor: 'url("/img/icons/hand.cur"), auto',
            containment: [w.width()-d.width(),w.height()-d.height(),0,0],
            scroll: false,
            start: function(event, ui) {
                startPos = ui.position; 
                d.stop();
            },
            stop: function(event, ui) {
                /*stopPos = ui.position;
                var dX = stopPos.left - startPos.left,
                    dY = stopPos.top - startPos.top,
                    newTop = stopPos.top + dY,
                    newLeft = stopPos.left + dX,
                    speedX = Math.max(Math.min(dX/100, 1), -1),
                    speedY = Math.max(Math.min(dY/100, 1), -1),
                    duration = Math.max(Math.abs(speedX), Math.abs(speedY)) * 2000,
                    lBox = limitBox(newLeft, newTop);
                newLeft = lBox[0]; 
                newTop = lBox[1]; 
                d.animate({
                    top: newTop, 
                    left: newLeft 
                }, {
                    duration: duration
                });*/
            },
            getContainment: function(){
                return [w.width()-d.width(),w.height()-d.height(),0,0]; 
            },
            windowResize: function(){
                clearTimeout(dTime);
                dTime = setTimeout(function(){
                    d.draggable( "option", "containment", params.getContainment());
                    d.animate({
                        left: 0,
                        top: 0            
                    },{
                        queue: true,
                        duration: 1000
                    });
                }, 300);    
            }
        };
        jQuery.extend(params, options);
        d.css('cursor', params.cursor);
        function limitBox(x,y){
            if(x > params.containment[2]){ x = params.containment[2]; }
            if(x < params.containment[0]){ x = params.containment[0]; }
            if(y > params.containment[3]){ y = params.containment[3]; }
            if(y < params.containment[1]){ y = params.containment[1]; }
            return [x,y];
        }
        d.draggable(params);
        function touchInit(){
            function touchHandler(event){
                var touches = event.changedTouches,
                first = touches[0],
                type = "";

                switch(event.type)
                {
                    case "touchstart": type = "mousedown"; break;
                    case "touchmove":  type="mousemove"; break;        
                    case "touchend":   type="mouseup"; break;
                    default: return;
                }
                var simulatedEvent = document.createEvent("MouseEvent");
                simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0/*left*/, null);
                first.target.dispatchEvent(simulatedEvent);
                if(type != 'mousedown'){
                    event.preventDefault(); 
                }
                event.initEvent('click', true, true);   
                
            }
            d.get(0).addEventListener("touchstart", touchHandler, true);
            d.get(0).addEventListener("touchmove", touchHandler, true);
            d.get(0).addEventListener("touchend", touchHandler, true);
            d.get(0).addEventListener("touchcancel", touchHandler, true);    
        }
        if(true !== $.browser.msie){
            touchInit();    
        }
        $(window).bind('resize', function(){
            params.windowResize();
        });
    } 
    
    $.fn.resizeBlock = function() {
        var r = $(this);
    }
    
    function sliderValue(val, values){
        return $.inArray(val, values);
    }
    
    function sliderText(index, values){
        return values[index];
    }
    
    $.fn.inputSlider = function(min, max, step) {
        var values = [];
        values.push('Архив');
        for (i = 1; i < max-min; i++){
            var y = min + i;
            values.push(y.toString());    
        }
        values.push('Все');
        var input = $(this);
        var form = input.closest('form');
        var width = ((values.length-1) * 16)+2;
        var slider = $('<div>').insertBefore(input).width(width).slider({
            min: 0, max: max-min, step: step, value: sliderValue(input.val(), values),
            slide: function(ev, ui) {
                $(ui.handle).find('.val').html( sliderText(ui.value, values) );
                input.val( sliderText(ui.value, values) );
                form.trigger('change');
            }
        });
        function handleText(){
            var showVal = $('<div class="val">'+ sliderText(sliderValue(input.val(), values), values) +'</div>');
            slider.slider('widget').find('.ui-slider-handle').html(showVal);    
        }
        handleText();
        var all = $('<div class="all"></div>');
        var archiv = $('<div class="archiv"></div>');
        slider.slider('widget').append(all).append(archiv);
        input.bind('change', function(event) {
            handleText();
            slider.slider('value', sliderValue(input.val(), values));
        }); 
    };
    
    /*var timer;
    $.navBlockConfig = {
        move: function(elm){
            elm.draggable( "disable" ).animate({opacity: 1});
            elm.css('cursor', 'url("/img/icons/move.cur")');
            $(document).bind('mousemove', function(event){
                $.navBlockConfig.mouseMove(elm, event);    
            });
        },
        hand: function(elm){
            elm.draggable( "enable" ).animate({opacity: 1}); 
            elm.css('cursor', 'url("/img/icons/hand.cur")');
            $(document).unbind('mousemove');  
        },
        callback: function(links){
            var current = links.filter(function(){
                return $(this).is('.on');    
            });
            elm.animate({opacity: 0.35}); 
        },
        mouseMove: function (elm, event){
            clearTimeout (timer);
            timer = setTimeout(function(){
                var bWidth = elm.width();
                var bHeight = elm.height();
                var wWidth = $(window).width();
                var wHeight = $(window).height();
                var pageX = event.pageX; 
                var pageY = event.pageY;
                var percentX = pageX * 100 / wWidth;
                var percentY = pageY * 100 / wHeight;
                var sideX = Math.ceil(percentX * bWidth / 100);
                var sideY = Math.ceil(percentY * bHeight / 100);
                var left = sideX - pageX;
                var top = sideY - pageY;
                elm.animate({
                    left: -left,    
                    top: -top
                }, {queue: false, duration: 1500});    
            }, 50);
        }
    };
    
    $.fn.navBlock = function(config){
        var navBlock = $(this);
        var cfg = {
            toggleSelector: '.nav',
            toggleFunc: function(links){
                links.click(function(){
                    links.toggleClass('on off'); 
                    cfg.callback(links);       
                    return false;
                });
            },
            callback: function(links){
            },
            close: function (closeLink){
                closeLink.click(function(){
                    navBlock.fadeOut('slow');
                    return false;   
                });    
            },
            html: function(){
                function createLink(attrs){
                    var a = attrs || {};
                    var link = $('<a></a>');
                    link.attr(a);
                    return link; 
                }
                var close = createLink({ href:"/#", className:"close" });
                var move = createLink({ href:"/#", className:"move nav off", rel: "move" });
                var hand = createLink({ href:"/#", className:"hand nav on", rel: "hand" });
                navBlock.html('');
                navBlock.append(close, move, hand);
                cfg.close(close);
                cfg.toggleFunc( navBlock.find(cfg.toggleSelector) );
            }   
        };
        jQuery.extend(cfg, config || {});
        cfg.html();
    }*/
    
    function portfolioPager(){
        
        if($.cookie('plist') === null){
            $('#pager').hide();    
        }
        
        function getPage(type, portfolio_id){
            var portfolio_list = $.cookie('plist').split(',');  
            var length = Object.keys(portfolio_list).length;
            var prev = portfolio_list[length-1];
            var next = portfolio_list[0];
            for(var p = 0; p < length; p++){
                if(portfolio_list[p] == portfolio_id){
                    prev = ((portfolio_list[p-1] !== undefined)? portfolio_list[p-1]:portfolio_list[length-1]);
                    next = ((portfolio_list[p+1] !== undefined)? portfolio_list[p+1]:portfolio_list[0]);
                    break;
                }    
            } 
            var url = '/portfolio/'+((type=='next')? next:prev);    
            location.href = url;
        }
        
        $('#pager a.nav').click(function(){   
            var type = ($(this).is('.f')? 'next':'prev');
            var portfolio_id = $(this).attr('rel');
            getPage(type, portfolio_id);
            return false;
        }); 
        
        $(document).keydown(function(e) {
            if(e.ctrlKey){
                switch (e.which) {
                    case 37:
                        $('#pager a.nav.b').trigger('click');
                    break;
                    case 39:
                        $('#pager a.nav.f').trigger('click');
                    break;
                }           
            }
            
        });
        
        $('#pager a.nav').mouseover(function(){
            var h = $(this).is('.f')? $('#pager .rh'):$('#pager .lh'); 
            h.show();
        });
        $('#pager a.nav').mouseout(function(){
            var h = $(this).is('.f')? $('#pager .rh'):$('#pager .lh'); 
            h.hide();
        });
        $('#pager a.top, #pager a.bot').mouseover(function(){
            var h = $(this).is('.top')? $('#pager .th'):$('#pager .bh'); 
            h.show();
        });
        $('#pager a.top, #pager a.bot').mouseout(function(){
            var h = $(this).is('.top')? $('#pager .th'):$('#pager .bh'); 
            h.hide();
        });
        $('#pager a.p').mouseover(function(){
            $('#pager .ph').show();
        });
        $('#pager a.p').mouseout(function(){
            $('#pager .ph').hide();
        });   
    }
    
    function getBrowser(){
        var browser = $.browser;
        /*$.each(browser, function(i, val){
            alert(i + ' ' +val);    
        });*/
        if(browser.msie !== undefined && browser.msie && parseFloat(browser.version) < 8){
            location.href = '/ie.html';
        }
        
        if(browser.opera !== undefined && browser.opera){
            if($('#mainblocks').length > 0){
                $('#wrapper').css({'position':'absolute','left':'0', 'right':'0', 'top':'0', 'bottom':'0', 'width':'auto','height':'auto'});
            }
        }
        
    }
    
    function phpVacancy(){
        $('#php_vacancy').click(function(){
            location.href = '/about/job#php_vacancy';    
        });    
    }
    
    $(document).ready(function(){
        portfolioPager();
        getBrowser();  
        phpVacancy();  
    });
    
    
    
})(jQuery);

