/*

.ajax - single href
.ajaxlinks - multi href

rel - load target
rev - change text

*/
var lasturl='';	
var AjaxDefaultUrl='';
var NavigationCallback='';
var NavigationPreCallback='';
var AjaxPageContent='#ajaxPageContent';
var AjaxPageLoading='#ajaxPageLoading';

// Transfer table
var AjaxConnectionLinks={
	'#idajaxpagetitle': 'TITLE',
	'#idajaxlang': '#idlang'
//	'#idajaxpagenavigator': '#idpagenavigator',
};

function AjaxInit() {
	$.historyInit(HistoryPageLoad, "");
	
	// Need for HISTORY navigation
	setInterval("AjaxCheckURL()",700);
	
	// Check on load
	if (!AjaxCheckURL()) {	
		// Setup init load links
		setupAjaxLink(AjaxPageContent);
		if (AjaxConnectionLinks) {
			jQuery.each(AjaxConnectionLinks, function(i, val) {
			  setupAjaxLink(val);
			});				
		}
	}	
}

// Check hash change
function AjaxCheckURL(hash) {
	if(!hash) hash=window.location.hash;
	if(hash != lasturl)	{
		lasturl=hash;	
		AjaxLoadPage(hash);	
		return 1;
	}
	return 0;
}

// Save URL
function AjaxCheckURLInit( url ) {
	lasturl = '#' + url;
	window.location.hash = url;
	$.historyLoad(url);
}

// Load Page
function AjaxLoadPage(url, rel)	 {
	
	url=url.replace(/^.*#/, '');
	if (!url) url=AjaxDefaultUrl;
	if (!url) return;
	
	var dataobj;
	
	if (!rel) {
		rel=AjaxPageContent;
		$.scrollTo('#ajaxPageContentTop', 700);		
		dataobj = {postfix:'ajax'};	
	} else {
		$.scrollTo(rel, { duration:700, offset:-180 });		
		dataobj = {postfix:'ajax', inline:1};	
	}	

	// Callback on Pre
	if (NavigationPreCallback) NavigationPreCallback(url, rel);

	// Save NEW Url
	AjaxCheckURLInit(url);

	// Show Loader
	$(rel).html( $(AjaxPageLoading).html() );	
	
	// Load
	$.ajax({	
		type: "POST",
		url: url,
		data: dataobj,
		dataType: "html",
		success: function(msg){
			if(parseInt(msg)!=0) {
				$(rel).fadeOut(700, function() {

					$(rel).html(msg);
					$(rel).addClass('showed');
					$(rel).slideDown(700);											 
				
					// Transfer info
					if (AjaxConnectionLinks) {
						jQuery.each(AjaxConnectionLinks, function(i, val) {					
						  var flag=1;
						
						  if (val == 'TITLE') { document.title = $(rel+' '+i).text(); flag=0; }
						  else $(val).html( $(rel+' '+i).html() );
						  
						  $(rel+' '+i).html('');
						  
						  // Setup AJAX Links
						  if (flag) setupAjaxLink(val);
						});				
					}
					
					// Setup AJAX Links
					setupAjaxLink(rel);
					
					// Callback on complite
					if (NavigationCallback) NavigationCallback(url, rel);
				
				});
			}
		}
	});
 
}

function HistoryPageLoad() {
}

function strrpos (haystack, needle, offset) {
    var i = (haystack+'').lastIndexOf( needle, offset ); // returns -1
    return i >= 0 ? i : false;
}

function getUrlHash (url) {
	var p = strrpos(url, '/');
	if (p) url=url.substr(p+1);	
	return '#'+url;
}

// Processing AJAX click
function AjaxClick ( eventObj, obj ) {
	
	if (!obj) obj=this;
	var url=$(obj).attr('href');	
	if (!url) {		
		url = $(obj).val();
		if (!url) return;
	}
	
	var rel=$(obj).attr('rel');
	var rev=$(obj).attr('rev');
	
	if (rel!='external') {
		if (rev) {
			$(obj).attr('rev',$(obj).text());
			$(obj).text(rev);
		}
		if (rel) {
			if ($(rel).hasClass('showed')) {
				$(rel).slideUp(700, function () {
					$(rel).removeClass('showed');
				});
				return false;
			} else $(rel).show();
		}

		AjaxLoadPage(url, rel);
		return false;
	}	
}

// Setup AJAX
function setupAjaxLink( content, func ) {
	if (!func) func = AjaxClick;
	$(content+' a.ajax').click ( func );
	$(content+' .ajaxlinks a').click ( func );	
}

