var AjaxPages = {		
	scriptFiles: {},
	scriptRe: /<script[^>]*src="([^"]+)"[^>]*><\/script>/ig,
	
	init: function() {		
		try {		
            this.initBaseUrl();
			this.initScriptsList();
			this.initHistiryPlugin();
			this.makeAjaxLinks();		
			this.makeAjaxForms();		
		} catch(e) {
			alert(e);
		}
	},
    
    initBaseUrl: function() {
        this.baseUrl = location.href.match(/^https?:\/\/[^/]+/)[0];
    },
	
	initHistiryPlugin: function() {
		$.history.init(AjaxPages.loadPage);
	},
	
	makeAjaxLinks: function() {
		$('body').delegate("a",'click',function(e){
			if($(this).attr('onclick')) 
				return false;
			
            if($(this).hasClass('no_ajax'))  
                return true;
			
            //для reformat.ru
            if($(this).parents('.frgtd').length) {
            	$("#myotziv_box").css('z-index', 3000);
            	return true;
            }
            
            if(!AjaxPages.isLocalUrl(this.href))  {
                return true;
            }
            
			var self = this;
			setTimeout(function(){
				if(!e.isPropagationStopped()) {
					$.history.load(self.href.replace(/^https?:\/\/[^\/]*/,''));				
				}
			}, 10);
			e.preventDefault();
		});		
	},
    
    isLocalUrl: function(url) {
        if(url.substr(0,4) != 'http')
            return true;               
        return url.substr(0,this.baseUrl.length) == this.baseUrl;
    },
	
	makeAjaxForms: function() {
		$('body').delegate("form",'submit',function(e){
			try {
                if($(this).attr('enctype') == 'multipart/form-data')
                    return true;
				AjaxPages.loadPage(this.action, getFormData(this), this.method);
			} catch(e) {
				alert(e);
			}
			
			return false;
		});
	},
	
	initScriptsList: function() {
		var sPage = $(document.body.parentNode).html();
		var re = new RegExp(this.scriptRe);
		var match;
		while(match = re.exec(sPage)) {
			this.scriptFiles[match[1]] = true;
		}
	},
	//в глобальном контексте
	loadPage: function(url, parameters, method) {
		if(url == '' && parameters == null)
			return;
		var method;
		if(parameters == null) {
			parameters = {};
		} 
		parameters.__ajax = 1;

		//google analytics
		try{
			var pageTracker = _gat._getTracker("UA-12106895-1");
			pageTracker._trackPageview(url);			
		} catch(err) {
			//console.log("pageTracker err");
		}

		if(!method)
			method = 'GET';
		
		$.ajax({
			url: url,
			data: parameters,
			type: method,
			success: function(result) {
				try {	                    
					$("#ax_content").html(AjaxPages.preProcessContent(result));
					AjaxPages.updateMenu(url);
				} catch(e) {
					alert(e);
				}	
			}
		});
		
	},
	
	updateMenu : function(url) {
		$.ajax({
			url: base_url + '/site/menu',
			data: {url: url},
			type: 'GET',
			success: function(result) {
				$('.j_menu_items').removeClass('active');				 
				$('.j_menu_item_' + result).addClass('active');
				
				if($('.j_menu_left_' + result).length) {
					$('.j_menu_left').removeClass('left');
					$('.j_menu_left_' + result).addClass('left-active');
				}else {
					$('.j_menu_left').removeClass('left-active');
					$('.j_menu_left').addClass('left');
				}
				
				if($('.j_menu_right_' + result).length) {
					$('.j_menu_right').removeClass('right');
					$('.j_menu_right_' + result).addClass('right-active');
				}else {
					$('.j_menu_right').removeClass('right-active');
					$('.j_menu_right').addClass('right');
				}
			}
		});
	},
	
	preProcessContent: function(content) {
		var re = new RegExp(this.scriptRe);
		var match, sf;
		var scripts = [];
		while(match = re.exec(content)) {
			sf = match[1];
			if(!this.scriptFiles[sf]) {
				scripts.push(match[0]);
				this.scriptFiles[sf] = true;
			}
		}
		return scripts.join("\n") + content.replace(this.scriptRe, '');
	}
}

$(function(){
	AjaxPages.init();
});
