// v.: 2.100826
var Navigator=function(target,options){
	Navigator.elements[target]=this;
	this.target=target;
	this.parentNav=null;
	this.subNavs=new Array();
	this.url=null;
	if (typeof(options)=='undefined') options=new Array();
	if (Navigator.root==null || (typeof(options['root'])!='undefined' && options['root'])){
		Navigator.root=this;
		this.url=Navigator.history[0];
	}
	if (typeof(options['effect'])!='undefined') this.effect=options['effect'];
	else this.effect=null;
};

Navigator.DOMAIN='';
Navigator.PATH='libs/Navigator';
Navigator.elements=new Array(); 	//navigátor objektumok tárolása target alapján
Navigator.root=null;				//gyökér navigátor objektum
Navigator.history=new Array();
Navigator.historyIndex=0;
Navigator.reqID=0;
Navigator.targetReqIDs=new Array();	//kérés azonosítók tárolása target alapján
Navigator.effectStates=new Array();	//effect állapotok tárolására


//*** IMPLEMENTÁLANDÓ ***//

//Átmenet töltésbe effekt
Navigator.setEffectOn=function(target,effectName){
	if (typeof(Navigator.effectStates[target])=='undefined') Navigator.effectStates[target]=new Array();
	if (Navigator.effectStates[target]['On']) {return;}
	Navigator.effectStates[target]['On']=1;
	if (typeof(effectName)=='undefined') effectName=null;
	switch(effectName){
		default:
			jQuery('#'  + target).fadeTo(200,0.1,function(){Navigator.effectStates[target]['On']=0;});
	}
};
//Töltésből visszajövet effekt
Navigator.setEffectOff=function(target,effectName){
	if (typeof(Navigator.effectStates[target])=='undefined') Navigator.effectStates[target]=new Array();
	//if (Navigator.effectStates[target]['Off']) return;
	Navigator.effectStates[target]['Off']=1;
	if (typeof(effectName)=='undefined') effectName=null;
	switch(effectName){
		default:
			jQuery('#'  + target).fadeTo(500,1,function(){Navigator.effectStates[target]['Off']=0;});
	}
};
//*** IMPLEMENTÁLÁS VÉGE ***//

Navigator.prototype.go = function(url){
	this.url=url;
	this.deactivate();
	Navigator.load(this,Navigator.PATH+'/loader.php',this.effect);
	if (url!=Navigator.history[Navigator.historyIndex]){	
		jQuery('#NavigatorFrame').attr('newpage',1);			//jelezni kell hogy új oldal betöltése történt, nem pedig visszalépés
		Navigator.historyIndex++;
		this.setUrl(url);
		var i=Navigator.historyIndex+1;
		while (typeof(Navigator.history[i])!='undefined'){		//forwardolni már nem lehet a historyban, ezért töröljük ami volt
			delete(Navigator.history[i]);
			i++;
		}
		NavigatorFrame.location.href=Navigator.PATH + '/frame.php?index=' + Navigator.historyIndex;
	}
};
Navigator.prototype.deactivate = function(){
	if (Navigator.targetReqIDs[this.target]!=null) delete(Navigator.targetReqIDs[this.target]);
	if (this.parentNav!=null) parentNav.deactivate();
	for (var i in this.childNavs) childNavs.deactivate();
};
Navigator.prototype.refresh = function(){
	this.go(this.url);
};
Navigator.prototype.addSubNav = function(nav){
	this.subNavs.push(nav);
};
Navigator.prototype.setEffectOn = function(){
	Navigator.setEffectOn(this.target,this.effect);
};
Navigator.prototype.setEffectOff = function(){
	Navigator.setEffectOff(this.target,this.effect);
};
Navigator.prototype.setUrl = function(url){
	this.url=url;
	Navigator.track(url);
	Navigator.history[Navigator.historyIndex]=url;
};

Navigator.load=function(target,url,func,effect){
	var data={};
	if (typeof(func)=='string' && typeof(effect)=='undefined') effect=func;
	if (typeof(target)=='object'){		//ha Navigator objektumról van szó
		var nav=target;						//navigátor objektum tárolása
		target=nav.target;					//target beállítása
		var gurl=nav.url;					//google féle url beállítása
		data={__target:nav.target,__url:nav.url};//dekódlandó url paraméterbe adása
	}
	Navigator.setEffectOn(target,effect);
	var reqID=Navigator.getReqID();
	Navigator.targetReqIDs[target]=reqID;
	jQuery.ajax({
		url: url,
		data: data,
		success: function(data) {
			var reqObj=this;
			var watcher=window.setInterval(function(){		//effect végének figyelése
				if (!Navigator.effectStates[target]['On']){
					clearInterval(watcher);
					if (Navigator.targetReqIDs[target]==reqObj.reqID){	//érvényesség ellenőrzése		
						reqObj.reqState=1;	//érvényes kérés
						jQuery('#' + target).html(data);	
						if (gurl) Navigator.track(gurl);
						if (typeof(func)=='function') func.call();
						return;
					}
					reqObj.reqState=2;		//érvénytelen kérés
				}
			},10);	
		},		
		error: function() {
			var reqObj=this;
			var watcher=window.setInterval(function(){		//effect végének figyelése
				if (!Navigator.effectStates[target]['On']){
					clearInterval(watcher);
					if (Navigator.targetReqIDs[target]==reqObj.reqID){	//érvényesség ellenőrzése		
						reqObj.reqState=1;	//érvényes kérés
						return;
					}
					reqObj.reqState=2;		//érvénytelen kérés
				}
			},10);	
		},		
		complete: function() {
			var reqObj=this;
			var watcher=window.setInterval(function(){ 
				if (reqObj.reqState){
					clearInterval(watcher);
					if (reqObj.reqState==1){	//ha érvényes volt a kérés befejezzük a műveletet
						Navigator.setEffectOff(target,effect);						
						delete(Navigator.targetReqIDs[target]);								
					}
				}
			},10);	
		},
		reqID:reqID
	});
}

Navigator.goto=function(historyIndex){
	if (typeof(Navigator.history[historyIndex])=='undefined') return;
	Navigator.historyIndex=historyIndex;
	Navigator.root.go(Navigator.history[historyIndex],1);
}

Navigator.refresh=function(){
	Navigator.goto(Navigator.historyIndex);
}
Navigator.next=function(){
	NavigatorFrame.history.forward();
}
Navigator.prev=function(){
	NavigatorFrame.history.back();
}
Navigator.getReqID=function(){
	return Navigator.reqID++;
}

Navigator.init=function(domain,debug){
	if (typeof(preurl)=='undefined') preurl='';
	jQuery("a[nav],area[nav]").live("click", function(){
		Navigator.elements[jQuery(this).attr('nav')].go(jQuery(this).attr('href'));
		return false;
	});	
	Navigator.DOMAIN=domain;
	Navigator.history[0]=document.location.href.substr(domain.length+1);
	Navigator.PATH=domain+"/"+Navigator.PATH;
	if (typeof(debug)!='undefined' && debug!=0) s='width:100%; height:200px; background:#ffffff';
	else s='width:0px;height:0px; display:none; visibility:hidden;';
	jQuery('body').prepend('<iframe id="NavigatorFrame" name="NavigatorFrame" src="' + Navigator.PATH + '/frame.php?index=0" style="' + s + '"></iframe>');
}

Navigator.track=function(url){
	if (typeof(pageTracker)=='undefined' || url==null) return;
	if (url.charAt(0)!="/") url="/" + url;
	pageTracker._trackPageview(url);
}
