var router =
{
	url_data    : {}, 
	url 	    : null,
	map         : null,
	link 	    : null,
	glob_page   : null, 
	router_int  : null,  

	set_url:function(url)
	{
		history.pushState("", "", url) ;
		return false ;
	},
	ini:function(map)
	{
		history.scrollRestoration   = "manual" ;
		this.url 	                = document.location.href ;
		this.url_data               = this.url_parse(decodeURIComponent(this.url)) ;
		this.map                    = map ;
		this.router_int             = setInterval(function(){router.route()}, 50) ;
		this.glob_page              = this.get_glob_page() ;
		
		if(this.glob_page)
        {
            document.body.classList.add('page--'+ this.glob_page) ;
        }
	},
	get_glob_page:function()
	{
	    return typeof(this.url_data.p[0]) == "undefined" ? "" : this.url_data.p[0] ;       
	},
	url_parse:function(url)
	{
		var url = url || decodeURIComponent(window.location.href) ;
		    url = new URL(url),
		    r   = {p:[], q:{}}
		    p   = [],
		    q   = {} ;
		
		r.p = url.pathname.split("/").filter(function(el){return el != "" ;}) ;
		url.searchParams.forEach(function(k, v){r.q[v] = k ;}) ;

		return r ;
	},
	route:function()
	{
        if(this.url != document.location.href)
        {
        	template.search.hide() ;
        	template.popup.hide() ;
        	
        	this.url        = document.location.href ;
        	this.url_data   = this.url_parse(decodeURIComponent(this.url)) ;

        	var glob_page   = this.get_glob_page() ;
            
            if(this.glob_page == glob_page && typeof(window.page) != "undefined" && typeof(window.page.router) != "undefined")
            {
                return window.page.router(this.url_data) ;    
            }
            else
            {
                if(this.glob_page)
                {
                    document.body.classList.remove('page--'+ this.glob_page) ;
                }
                if(glob_page)
                {
                    document.body.classList.add('page--'+ glob_page) ;
                }
                
                if(typeof(this.map[this.url_data.p[0]]) != 'undefined' && this.map[this.url_data.p[0]].link != 'undefined')
                {
                    var link    = this.map[this.url_data.p[0]].link ;
                }
                else
                {
                    var link = this.map[''].link ;
                }
                
                this.glob_page = glob_page ;
                
                if(this.glob_page !== "catalog")
                {
                    $("body, html").animate({ scrollTop:0}, 350) ;
                }
                
            	window.page = {} ;
            	template.mobile_menu.hide();
            	return ajax.rq({t:"n", l:link, c:'content'}, {url_data:this.url_data});    
            }
        }
	}
}