// JavaScript Document

var moduleStates;
var moduleLoaded;
var ignoreNextHistoryChange = false;

function debug(text)
{
	$('map').innerHTML = text+"<br>"+$('map').innerHTML;

	return 20;
}

function svar_dump(v)
{
	if(typeof(v) == 'object'){
		return $H(v).inspect();
	}
	return ""+v;
}

function showTab(ident,value)
{
	tabNode = $('tab_'+ident);
	if(value == false){
		Element.hide(tabNode);
	}
	else{
		Element.show(tabNode);
	}
}

function setTabAddition(id,value)
{
	node = $('addition_'+id);
	if(!node) return;
	node.innerHTML = value;
}

function switchToPane(ident)
{
	//tabNode = $(tabNode);

	showTab(ident);

	//getting the target name
	//target = tabNode.id.split("_")[1];
	Element.removeClassName('tab_'+state.getValue('m'),'current');
	Element.addClassName('tab_'+ident,'current');

	Element.hide('page_'+state.getValue('m'));
	Element.show('page_'+ident);
	//wwUI.activePane = target;

}

function reloadPage(s)
{
	var diff = moduleStates[s.getValue('m')].getNeededChanges(s);

	//alert(s.getValue('m')+" "+diff+" "+moduleLoaded[s.getValue('m')]);

	if(diff.length || !moduleLoaded[s.getValue('m')] ){
		moduleLoaded[s.getValue('m')] = true;

		//Here we force output of the module query part to prevent automatic switching by the be
		var q = s.getQueryString({'m':s.getValue('m')});
		q += "&pr=1"; //Partial render

		var url = url_base_api+'/fe2/index.php';

		//alert(q);

		var target = 'page_'+s.getValue('m');
		startLoadMode(s.getValue('m'));

		var myAjax = new Ajax.Updater( target, url,
									{
										 method: 'get',
										 parameters: q,
										 onFailure: reportError,
										 evalScripts: true
									});

		moduleStates[s.getValue('m')].apply(s);
	}

}

/*function stopLoadMode(id)
{
	id = id.split('_')[1];
	var tab = $('tab_'+id);if(state.getValue('m') == s.getValue('m'))

}*/

function startLoadMode(id)
{

	//var tab = $('tab_'+id);

	$('page_'+id).innerHTML = $('page_loading').innerHTML;
}

function doSearch(nextModule)
{

	var values = new Object()
	var params = new Array();

	values['city'] = $F('city');
	values['cat'] = $F('subrubric');
	values['text'] = $F('text');

	if(nextModule) values['m'] = nextModule;
	values['pp'] = 0;
	values['tp'] = 0;

	setStateValues(values);
	setMapSearchParams(values['city'],values['cat'],values['text'],false);

	return false;
}

function reportError(request)
{
	alert('Sorry. There was an error.');
}


function setStateValues(v, noMapChange)
{
	var s = state.clone();
	s.setValues(v);


	var h = s.getQueryString();
	//This is not really nice, but IE handles unencoded URL without problems while Firefox seems to encode/decode it on the fly
	if(decodeURI(unFocus.History.getCurrent())!=decodeURI(h))
	{
		if(noMapChange == true) ignoreNextHistoryChange = true;
		//debug("addHistory: "+h +"  | "+unFocus.History.getCurrent());
		unFocus.History.addHistory(decodeURI(h));
	}



	//Creating an array with changed keys
	var changed_keys = state.getNeededChanges(s);

	if(typeof(urchinTracker) == 'function')
	{
		var gp = url_base;
		switch(s.getValue('m'))
		{
			case 's':
				gp += '/search.htm';
				break;
			case 'p':
				gp += '/activities.htm';
				break;
			case 't':
				gp += '/tracks.htm';
				break;
			case 'i':
				gp += '/items';
				gp += '/'+s.getValue('id')+'.htm';
				break;
			case 'd':
				gp += '/download';
				gp += '/'+s.getValue('id')+'.htm';
				break;
		}

		trackPath(gp);
	}

	//"Array contains" helper function
	function ac(value){
		if(changed_keys.indexOf(value) != -1) return true;
		return false;
	}

	if(ac('m'))
	{
		switchToPane(v['m']);
	}

	if(ac('id')){
		showTab('i');
		if(noMapChange != true){
			highlightItem(s.getValue('id'));
		}
	}

	if(ac('pp')){
		showTab('p');
	}

	if(ac('tp')){
		showTab('t');
	}

	s.setValue('m','s');
	reloadPage(s);
	s.setValue('m','p');
	reloadPage(s);
	s.setValue('m','t');
	reloadPage(s);
	s.setValue('m','i');
	reloadPage(s);
	s.setValue('m','d');
	reloadPage(s);
	/*reloadPage(s);*/

	state.setValues(v);
}

/* tracks a downloadlink via google analythics */
function trackDownload(ext)
{
	if(typeof(urchinTracker) != 'function') return;

	if(ext=='exe')
	{
		trackPath(url_base+'/downloads/installer.exe');
		return;
	}
	if(ext=='wwm' || ext=='wwd')
	{
		trackPath(url_base+'/downloads/complete.'+ext);
		return;
	}

	trackPath(url_base+'/downloads/'+state.getValue('id')+'.'+ext);
}

function trackPath(path)
{
	//alert('track: '+path);
	if(typeof(urchinTracker) != 'function') return;
	urchinTracker(path);
}



/*************************************************************
 *		Rubric controls
 *************************************************************/

function init()
{
	var tmp = state;
	state = new wwStateContainer();
	state.fromJSON(tmp);

	//alert(svar_dump(unFocus.History));
	//alert(unFocus.History.addEventListener);
	unFocus.History.addEventListener("historyChange", function($hash) {
		if(!ignoreNextHistoryChange)
		{
			//alert("hist change "+$hash);
			setStateValues($hash.toQueryParams());
		}
		ignoreNextHistoryChange = false;
	});

	//Creating moduleStates
	var s;
	moduleStates = new Object();
	moduleLoaded = new Object();
	moduleLoaded[state.getValue('m')] = true;

	s = new wwStateContainer();
	s.copyEntry(state,'id');
	moduleStates['i'] = s;
	moduleStates['d'] = s.clone();

	s = new wwStateContainer();
	s.copyEntry(state,'pp');
	s.copyEntry(state,'text');
	s.copyEntry(state,'cat');
	s.copyEntry(state,'city');
	//s.copyEntry(state,'pp');
	moduleStates['p'] = s;

	s = new wwStateContainer();
	s.copyEntry(state,'tp');
	s.copyEntry(state,'text');
	s.copyEntry(state,'cat');
	s.copyEntry(state,'city');
	//s.copyEntry(state,'pp');
	moduleStates['t'] = s;

	s = new wwStateContainer();
	moduleStates['s'] = s;




	//Replacing Links
	var parts;
	var link;
	var values;
	var match;
	var do_rewrite;
	for(var i=0;i<document.links.length;i++)
	{
		//parts = document.links[i].href.
		//alert(
		link = document.links[i];
		parts = splitURI(link.href);

		do_rewrite = true;

		//if(parts.host != ''){

		values = parts.query.toQueryParams();
		if(parts.file != 'index.php')
		{
			match = parts.file.match(/^(\d+).*\.htm./);
			//alert(match);
			if(match && match.length > 1)
			{
				values['id']=match[1];
				values['m'] = 'i';
			}
			else {
				//No known file sheme detected. Stop replacing
				do_rewrite = false;
			}
		}
		if(link.attributes.id) {
			switch(link.attributes.id.value) {
				case 'link_s':
					values = { 'm':'s' };
					break;
				case 'link_p':
					values = { 'm':'p' };
					break;
				case 'link_t':
					values = { 'm':'t' };
					break;
				case 'link_i':
					values = { 'm':'i' };
					break;
				case 'link_d':
					values = { 'm':'d' };
					break;
			}
		}
		if(do_rewrite) {
			link.href = "javascript:setStateValues("+Object.toJSON(values)+")";
		}
		//link.href = "javascript:alert(\""+svar_dump(splitURI(link.href))+"\");";
		//alert(svar_dump(splitURI(document.links[i].href)));
	}

	init_search_form();
	if($F('city')) doSearch(defaultPage);
	gLoaded = true;

}

function splitURI(uri)
{
	var t;
	var has_server = false;
	var res = new Object();
	res.protocol = '';
	res.host = '';
	res.path = '';
	res.file = '';
	res.query = '';
	res.hash = '';
	t = uri.split('://');
	if(t.length > 1){
		res.protocol = t.shift();
		//In this case there must be a server
		has_server = true;
	}
	t = t.join('://');

	t = t.split('#');
	if(t.length > 1){
		res.hash = t.pop();
	}
	t = t.join('#');

	t = t.split('?');
	if(t.length > 1){
		res.query = t.pop();
	}
	t=t.join('?');

	t = t.split('/');
	if(has_server){
		res.host = t.shift();
		if(t.length){
			t[0] = '/'+t[0];
		}
	}
	if(t.length){
		res.file = t.pop();
	}

	t = t.join('/');
	res.path = t;
	return res;
}

/*alert(svar_dump(splitURI("http://meineseite.de/pfad/zur/datei/mit.sfx?a=b&c=d#Hash")));
alert(svar_dump(splitURI("/meineseite.de/pfad/zur/datei/mit.sfx#Hash")));
alert(svar_dump(splitURI("/meineseite.de/pfad/zur/datei/mit.sfx?w=a&b=c")));*/


/*This function might be called when no form is avaliable in HTML */
function init_search_form()
{

	rubricNode = $('rubric');
	if(!rubricNode) return;
	rubricNode.options.length=0;

	msel = true;
	for(i=0;i<rubriken.length;i++)
	{
		msel = false;
		//Search for the id to select it
		if(rubriken[i]['id'] == selected_rubrik)
		{
			msel = true;
		}
		else
		{
			for(j=0;j<rubriken[i]['subrubriken'].length;j++)
			{
				if(rubriken[i]['subrubriken'][j]['id'] == selected_rubrik)
				{
					msel = true;
					break;
				}
			}
		}

		rubricNode.options[i] = new Option(rubriken[i]['name'],rubriken[i]['id'],msel,msel);

	}
	rubric_changed(selected_rubrik);
}

function rubric_changed(selectedId)
{
	id = $F('rubric');
	for(i=0;i<rubriken.length;i++)
	{
		if(rubriken[i]['id'] == id)
		{
			node = $('subrubric');
			node.options.length=0;

			for(j=0;j<rubriken[i]['subrubriken'].length;j++)
			{
				msel = false;
				if(selectedId == rubriken[i]['subrubriken'][j]['id'])
				{
					msel = true;
				}
				node.options[j] = new Option(rubriken[i]['subrubriken'][j]['name'],rubriken[i]['subrubriken'][j]['id'],msel,msel);
			}
			break;
		}
	}
}

/***************************************************************
 * Map Controls
 * *********************************************************/

//var mapConnector = "Hallo";

function highlightItem(id)
{
	//for(i=0;i<pidArr.length;i++) alert(pidArr[i]);
	var params = new Array();
	params.push(id);
	//if(!getASConnectionSuccess("nmp_map_player")) alert("Verbindung zu flash konnte nicht aufgebaut werden");
	mapConnector.callAsFunction("highlightItem",params);
}

function setMapSearchParams(ort_id,rubrik, text,displayOnlyFound)
{
	var params = new Array();
	params.push(ort_id);
	params.push(rubrik);
	params.push(text);
	params.push(displayOnlyFound);

	mapConnector.callAsFunction("setSearchParameter",params);
}

/* Is called from IE to force stop dragging*/
/*function mouseOut()
{
	alert("mouse out");
	mapConnector.callAsFunction("nmp_map_player","_root.mouseOut",new Array());
}*/

/* Called from Flash to show detail view */
function itemSelected(id)
{
	setStateValues({'m':'i','id':id},true);
}

/*Function is called if the fscommand wasn't handeled by asConnector*/

function handleFSCommand(movie,befehl,params)
{
	alert("Unhandeled FSCommand("+movie+","+befehl+","+params+")");
}

var win = false;

function showImage(id,width,height)
{
	var options = "dependent=yes,location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no"
	options += ",height=" + (height + 20);
	options += ",width=" + (width + 20);
	if(win) win.close();
	win = window.open(url_base_api+'/fe2/img_show.php?id='+id,'img_show',options);
	win.focus();
}
