﻿//#######################################################
// NAVIGATION SETTINGS:

self["DEFAULT_POPUP_PARAMS"] = {channelmode:0, dependent:1, directories:0, fullscreen:0, location:0, menubar:0, resizable:0, scrollbars:0, status:0, toolbar:0, alwaysRaised:0};

//self["PAGE_PARAMS"] = "pid,unit,language,show_id,editmode,purgecache,debugmode,exportmode";
self["PAGE_PARAMS"] = "show_id,editmode,purgecache,debugmode,exportmode";

// "textsize,printable"


//#######################################################
// NAVIGATION FUNCTIONS:


function printPage(link_obj) {
//textsize:getData('textsize')
	var printData = {printable:"1", hash:""};
	//var loc = appendQueryDataToLinks([document.location], printData, true);
	
	var l = document.location;

	// alert("printPage document.location.href.indexOf('?'):"+document.location.href.indexOf("?"));
	// alert("printPage extractQString(l.href):"+extractQString(l.href));


	if (top.ENGINEFRAME && top.ENGINEFRAME.getTransformMode() == "html") {
		var url_data_obj = make_url_obj(link_obj, printData);
		top.ENGINEFRAME.redrawPage(url_data_obj);
	} else {
		var loc = make_url_str(document.location, printData, '');
		RENDERFRAME.location = loc;
	};

	// alert("printPage loc:"+loc);

	return false;
}




function changeLanguage(link_obj, lang_code) {
	var append_data = {language:lang_code,pid:pid, hash:""};

	if (top.ENGINEFRAME && top.ENGINEFRAME.getTransformMode() == "html") {
		make_url_str(link_obj, append_data, '');
		var loc = make_url_str(link_obj, append_data, '');

	} else {
		var loc = make_url_str(document.location, append_data, '');
	};

	RENDERFRAME.location = loc;


	return false;
}


/////////////////////////////////////////////////////////


function get_hash(s) {
	return (strP(s) && s.length>1)? ((s.charAt(0)=="#")? s.substring(1) : s) : '';
}

function glossary(encoded_term) {

	popup("glossary.html", 570, 500, 'gloss_win', {scrollbars:1,alwaysRaised:1},{search_term:encoded_term},encoded_term);


}






function getSearchQuery(s,d) {

	var s_term = (s)?s: getData('search_term');
	var s_date = (s)?s: getData('search_date');

	var s1 = (s_term)?("&search_term="+(s_term)):'';
	var s2 = (s_date)?("&search_date="+my_escape(s_date)):'';

	// alert(s1+s2);
	return(s1+s2);
}


function getDelimeter(s) {
		var lastslash = s.lastIndexOf('/')
		var lastbackslash = s.lastIndexOf('\\')
		return ((lastslash>=lastbackslash)?"/":"\\");
}

function getFileName(s) {
	var lastSlash = s.lastIndexOf(getDelimeter(s));
	var last_chunk = (lastSlash>0)? s.substr(lastSlash+1):s;

	//alert("last_chunk:"+last_chunk);

	var lastDot = last_chunk.lastIndexOf("\.");
	var return_str = (lastDot>0)? last_chunk.substr(0,lastDot):last_chunk;

	//alert("getFileName return_str:"+return_str);

	return return_str;

}

/*
function fixBasePath(s) {
	var firstPathChar = s.charAt(0);
	return (firstPathChar != "/" && firstPathChar != "\\")?("/" + s):s;
}
*/

function getBasePath(linkObj) {
/*
		var s = "obj_in.href:" + obj_in.href + "\n";
			s+= "obj_in.protocol:" + obj_in.protocol + "\n";
			s+= "obj_in.host:" + obj_in.host + "\n";
			s+= "obj_in.pathname:" + obj_in.pathname + "\n";
		alert(s);
*/

	var pathname = linkObj.pathname;
	if (pathname.indexOf("/")==0) {
		pathname = pathname.substr(1);
	};
	if (pathname.indexOf("\\\\")==0) {
		pathname = pathname.substr(2);
		pathname = pathname.replace(/\\/g, "/");
	};

	var base_path = linkObj.protocol +"//"+linkObj.host +"/"+pathname;
	//alert("base_path:"+base_path);
	return base_path;

}

//#######################################################

function getLinkObj(link_obj_in) {

	if (typeof objP(link_obj_in)) {
		return link_obj_in;
	} else {
		var link_obj = new Object();

		var link_str = link_obj_in;

		var hash_index = link_str.lastIndexOf("#");
		link_obj.hash = (hash_index>0)? link_str.substr(hash_index):"";
		link_obj.href = (hash_index>0)? link_str.substr(0,hash_index):link_str;
	
		var qs_index = link_obj.href.lastIndexOf("?");
		link_obj.search = (qs_index>0)? link_obj.href.substr(qs_index):"";
		link_obj.href = (hash_index>0)? link_obj.href.substr(0,hash_index):link_obj.href;
	
		//link_obj.file = getFileName(link_obj.href);
	
		//alert("p link_obj.href:"+link_obj.href)
		//alert("p link_obj.file:"+link_obj.file)
	
		return link_obj;

	};

}
function make_url_obj(link_obj_in, jsparams_in, hash_in) {
	var link_obj = getLinkObj(link_obj_in);

	var link_QSparams = QS_deserialize(get_url_query_fragment(link_obj));

	var template_id = String(self["template_id"]);

	var is_glossary = (link_QSparams.pid=="glossary" || template_id.indexOf("glossary")>=0)? 1:0;
	//alert("is_glossary:"+is_glossary)

	var link_hash = get_hash((strP(hash_in))?hash_in:link_obj.hash);
	var link_basepath = getBasePath(link_obj);
	//typeof link_obj_in == "string" || static_mode 

	//alert("link_hash:"+link_hash)
	var parentPage_QSparams = deserialize(self["PAGE_PARAMS"], ",", "=",true);
		
	for (param_name in parentPage_QSparams) {
		parentPage_QSparams[param_name] = getData(param_name);
	};
	//parentPage_QSparams.pid = "";

	parentPage_QSparams.aicc_mode = (self["aicc_enabled"] != "0" && self["aicc_mode"])?self["aicc_mode"]:"";


	parentPage_QSparams.link_hash = link_hash;
	parentPage_QSparams.search_term = (link_hash && is_glossary)?link_hash:'';

	if (is_glossary) {
		var search_term = getData("search_term");
		if (!link_hash && search_term) {
			link_hash = search_term.toLowerCase();
			link_hash = link_hash.replace(RE("[ \\+]"), "_");
			link_hash = link_hash.replace(RE("[-’“”…–‘®™©—']"), "");
			//alert("link_hash:"+link_hash)
			parentPage_QSparams.link_hash = link_hash;
		};

		//alert("typeof glosswin_handle:"+typeof glosswin_handle)
		var glosswin_handle = self["win_gloss_win"];
		if (objP(glosswin_handle)) {
			GLOSS_SCROLL_FLAG = "win_gloss_win";
		};
	};
	var jsparams_obj = (typeof jsparams_in=="string")? deserialize(jsparams_in, ",", "=") : jsparams_in;

		//INSTEAD, run setLinkQSdata again when resizer is clicked?:
		//jsparams_obj.textsize = getData("textsize");
		//alert("parentPage_QSparams:\n"+serialize(parentPage_QSparams, "\n", "=="))
		//alert("link_QSparams:\n"+serialize(link_QSparams, "\n", "=="))
		//alert("jsparams_obj:\n"+serialize(jsparams_obj, "\n", "=="))



	return unionObjects(parentPage_QSparams, link_QSparams, {textsize:getData("textsize")}, jsparams_obj);
}

var GLOSS_SCROLL_FLAG = "";

function make_url_str(link_obj_in, jsparams_in, hash_in) {
	var url_data_obj = make_url_obj(link_obj_in, jsparams_in, hash_in);

	//alert("url_data_obj:\n"+serialize(url_data_obj, "\n", "=="))

	var link_hash = url_data_obj.link_hash;
	url_data_obj.link_hash = "";

	var qs_str = QS_serialize(url_data_obj);
	//alert("qs_str:"+qs_str)

//	var newloc = getBasePath(document.location);
//	var newloc = getBasePath(url_data_obj);
	var newloc = getBasePath(link_obj_in);
	//alert("newloc:"+newloc);

	if (qs_str) {
		newloc += (newloc.indexOf('?')>0)?"&":"?";
		newloc += qs_str;
	};

	//alert("hash:"+hash);
	if (link_hash) {
		newloc += "#" + link_hash;
	};

	//DEBUGMODE:
	if (getData("debugmode")=="2") {
		alert("newloc:"+newloc);
	};

	return newloc;
}



function gp(link_obj, s_term, s_date) {

	//alert("gp link_obj:"+link_obj);
	//alert("gp top.ENGINEFRAME:"+top.ENGINEFRAME);
	//alert("gp top.ENGINEFRAME == self:"+top.ENGINEFRAME == self);

	if (top.ENGINEFRAME && top.ENGINEFRAME.getTransformMode() == "html") {
		var url_data_obj = make_url_obj(link_obj, {search_term:s_term, search_date:s_date});
		top.ENGINEFRAME.redrawPage(url_data_obj);
		//top.tracking_frame.location.href = "engine/tracking_frame.html?"+QS_serialize(url_data_obj);
		//alert("top.tracking_frame.location.href:"+top.tracking_frame.location.href)
	} else {
		RENDERFRAME.location = make_url_str(link_obj, {search_term:s_term, search_date:s_date});
	};
	return false;
}



function checkExternal(linkObj) {
	return window.confirm("You have clicked on an external link, and are about to leave this site.")

}

//#######################################################

function goBack(w) {
	//alert('objP(RIGHTFRAME):' + objP(RIGHTFRAME));
	//var targ_frame = (false && objP(RIGHTFRAME))?RIGHTFRAME:window;//top
	var targ_frame = (objP(w))?w:window;//top
	//var targ_frame = (top!=self)?self:window;//top
	var l = targ_frame.document.location.protocol + '';

	var filelocation = (l.indexOf('file:')>=0)?'local':'remote';
	var tm = ((l.indexOf('.html')>=0) || (l.indexOf('wyciwyg:')>=0))?'client':'server';


	//alert("l: " + l + "\ntm: " + tm + "\nfilelocation: " + filelocation)
	//alert('filelocation: '+ filelocation)
	//alert('tm: '+ tm)
	//alert('transform_mode: '+getData('transform_mode'))

		var wsame = (targ_frame==top);

		if (isNS) {
			//alert('ns: ')
			//var targ_frame = (window.prompt("RIGHTFRAME?")=='1')?RIGHTFRAME:top;
			//targ_frame.history.go(parseInt(window.prompt("number:", "-2")));
			if (tm=='client') { // && filelocation=='client'
				NUM_STEPS = -3;
				//NUM_STEPS = objP(RIGHTFRAME)?-1:-3);
			} else {
				//NUM_STEPS = -1;
				NUM_STEPS = (filelocation=='remote')?-1:-3;
			};
		} else {
			if (tm=='client' || filelocation=='local') {
				NUM_STEPS = (wsame)?-2:-2;
			} else {
				NUM_STEPS = -1;
			}
		};

		//alert("NUM_STEPS: " + NUM_STEPS + wsame)
		top.history.go(NUM_STEPS);

}


//#######################################################
//# window openning:

function getWindowParam(w,h,x,y,winparams) {

	//, title:0, titlebar:0

	var offset_obj = {width:w,height:h,screenX:x,left:x,screenY:y,top:y};

	var config_param_obj = (typeof winparams=="string")? deserialize(winparams, ",", "=") : winparams;
	var return_param_obj = unionObjects(self["DEFAULT_POPUP_PARAMS"], offset_obj, config_param_obj)
	var return_params = serialize(return_param_obj, ",", "=");
	// alert("return_params: "+return_params);

	return return_params;
}


function setOpener(w, doFocus) {
	if  (objP(w)) {
		if (objP(w.opener))  {w.opener = self; w.status='';};
		if (doFocus && w && objP(w.document))  { w.focus();};
	}
 }


function popWin(loc,targ,w,h,x,y,param_obj) {
	var win_target = (targ)?targ:"_blank";
	var wParams = getWindowParam(w,h,x,y,param_obj);
	//window.prompt("wParams: ",wParams);
	var win = window.open(loc, win_target, wParams); //, true
	//setTimeout("setOpener("+win_target+");",200);
	return win;
}


//#######################################################
//# SPECIFIC POP-UP TYPES:

//# generic XSL-body link:
function popup(link_obj,w,h,targ,winparams,jsparams_in,hash) {

	// alert("link_obj.href:"+link_obj.href);
	var loc = make_url_str(link_obj,jsparams_in,get_hash(hash)); //, s_term, s_date
	// alert("loc:"+loc);


	if (false && top.ENGINEFRAME && top.ENGINEFRAME.getTransformMode() == "html") {
		var url_data_obj = make_url_obj(link_obj, jsparams_in);
		var loc = getBasePath(document.location) + "?" + QS_serialize(url_data_obj);
	} else {
		var loc = make_url_str(link_obj,jsparams_in,get_hash(hash)); //, s_term, s_date
	};


	var win_target = (targ)?targ:"_blank";
	var win_handle = "win_"+win_target;
	var x = 25;
	var y = 25;

	//alert("href: " +href + " typeof: " + typeof href);

	self[win_handle] = popWin(loc,win_target,w,h,x,y,winparams);
	//setTimeout("setOpener("+win_target+");",200);
	//alert("typeof self["+win_handle+"]:"+typeof self[win_handle]);
	if (GLOSS_SCROLL_FLAG && GLOSS_SCROLL_FLAG==win_handle) {
			//alert("GLOSS_SCROLL_FLAG:"+GLOSS_SCROLL_FLAG);
		try {
			if (objP(self[win_handle])) {
				var w = self[win_handle];
				//alert("typeof w.highlight_gloss_term :"+typeof w.highlight_gloss_term );
				if (isFnObj(w.highlight_gloss_term)) {
					//alert("highlight_gloss_term");
					w.highlight_gloss_term();
				} else {
					w.focus();
				}
			}
		} catch (e) {
		};
		GLOSS_SCROLL_FLAG = "";
	}

	return false;

}
//# older generic:
function nw(loc) {
	var w = popWin(loc,"mySubWin",755,540,25,25,{dependent:0});
	return false;
}

//# pdf:

function pdf(link_obj) {
	var loc = (typeof link_obj == 'string')?link_obj:link_obj.href;
	if (loc) {
		var targ = "pdfSubWin";
		var param_obj = {resizable:1, scrollbars:1};
		var AcroMode = (true)?"_notest":"_test";
		var pdfUrl=CLIENT_RELPATH+"pdf_launcher/pdf_stub"+AcroMode+".html"+"?pdfloc="+my_escape(loc);
		// alert("pdfUrl: " + pdfUrl)
		var w = null; var h = null; var x = null; var y = null;
		self[targ] = popWin(pdfUrl,targ,w,h,x,y,param_obj);
		//setTimeout("setOpener("+targ+",false);",250);
	};
	return false;
};


//#######################################################

function getKeyData(key_arr) {
	var o = {};
	for (var k=0; k<key_arr.length; k++) {
		var key = key_arr[k];
		o[key] = (self[key] && self[key]!="0")?self[key]:getData(key);
	}
	return o;
}


function getNavigationLinks(link_arr) {
	var returnArr = [];

	var docPathname = document.location.pathname;
	var docHref = document.location.href;
	var docHost = document.location.host;
	var docSearch = document.location.search;
	if (docSearch.length<=2) {
		docSearch = "";
	}

	//var db_loc_strings = ("\n    docPathname:"+docPathname + "\n    docHref:"+docHref);

	var numLinks = link_arr.length;
	for (var i=0; i<numLinks; i++) {
		var lnk = link_arr[i];

		var is_new_domain = (lnk.host && lnk.host.indexOf(docHost)==-1)?1:0;
		var is_article_link = (!(lnk.host && lnk.pathname) || (lnk.pathname && docPathname.indexOf(lnk.pathname)>=0))?1:0;
		var is_utility_link = ((docSearch && docSearch==lnk.search))?1:0;
		var is_link_to_self = ((lnk.host && lnk.pathname) && docHref.indexOf(lnk.href)>=0)?1:0;

/*

		var db_link_path = "\nis_article_link:"+is_article_link
			db_link_path += "\nis_new_domain:"+is_new_domain
			db_link_path += "\nis_link_to_self:"+is_link_to_self+"\t search: '"+lnk.search+"'"
			//lnk.hash=="#" || 
			db_link_path += "\nis_utility_link:"+is_utility_link+"\t hash: '"+lnk.hash+"'"
			db_link_path += "\ninnerHTML:"+lnk.innerHTML
			db_link_path += "\n\nlnk.pathname:"+lnk.pathname
			db_link_path += "\nlinkHref:"+lnk.href;
*/

		//if (!is_article_link || is_new_domain || is_utility_link || is_link_to_self) {  } else {

		if (is_article_link && !is_utility_link && !is_new_domain) {
			returnArr.push(lnk);
		};

		// if (getData("debugmode")>="3") {
		// 	alert(db_link_path + db_loc_strings);
		// }
	}

/*
	if (getData("debugmode")>="2") {
		alert("getNavigationLinks, links in:"+numLinks + "\n* valid links:"+returnArr.length);
	}
*/
	return returnArr;
}


function updateNavLinks(key_arr) {
	//alert("updateNavLinks, #keys:" + key_arr.length);
	var dataObj = getKeyData(key_arr);
	self["NAVLINKS"] = (self["NAVLINKS"])?self["NAVLINKS"]:getNavigationLinks(document.links);
	var update_count = appendQueryDataToLinks(self["NAVLINKS"], dataObj);
	return update_count;
}

function appendQueryDataToLinks(link_arr,data_obj,force_update) {
	//alert("appendQueryDataToLinks:\n"+serialize(data_obj,"\n","="));
	var update_count = 0;
	if (link_arr && objP(data_obj)) {
		var has_data = QS_serialize(data_obj);
		if (has_data) {
			var numLinks = link_arr.length;
			for (var i=0; i<numLinks; i++) {
				var linkObj = link_arr[i];
				var qs_str = mergeQSdata(linkObj, data_obj, force_update);
				if (qs_str && (force_update || linkObj.search)) {
					//origPath = linkObj.pathname; || origPath != linkObj.pathname , origSearch, origPath
					var origHash = get_hash(linkObj.hash);


					var new_search = "?" + qs_str;
					var origSearch = linkObj.search;
					if (origSearch != new_search) {
						linkObj.search = new_search;
						if (origSearch == linkObj.search) {
							linkObj.href = addQStoLinkHardWay(linkObj, qs_str);
						};
						
						if (origHash) {
							linkObj.hash = "" + origHash;
						};

					}
					++update_count;
				};
			}
			//db(linkObj);
		};
		self["appendQueryData_done"] = true;
	};
	//@@@ 	alert("update_count: "+update_count);
	return update_count;
}


function mergeQSdata(link_obj,data_obj,force_update) {
	var origQS_str = get_url_query_fragment(link_obj);
	//alert("origQS_str:"+origQS_str)
	var origQS_data = QS_deserialize(origQS_str);
	//alert("typeof origQS:"+typeof origQS)
	var article_id = getData("pid");
	if (!force_update && origQS_data["pid"] == article_id) {
		var pid_str = ("link pid:" + origQS_data["pid"] + "\narticle_id:" + article_id);
		//@@@ 	alert("mergeQSdata:\n" + pid_str + '\nlinks to self:\n' + link_obj.innerHTML);
		return "";
	} else {
		//@@@ 	alert("mergeQSdata:\n" + pid_str + '\nlinks to self:\n' + link_obj.innerHTML);
		var qs_str = QS_serialize(unionObjects(origQS_data, data_obj));
		//	alert("origQS_str:"+origQS_str)
		//	alert("qs_str:"+qs_str)

		//return ((qs_str && origQS_str.indexOf("?"==0)?"?":"")+qs_str);
		return qs_str;
	};
}

function addQStoLinkHardWay(lnk, qs_str) {
	//alert("addQStoLinkHardWay:"+qs_str)
	if (lnk.protocol && lnk.host && lnk.pathname) {
		var loc = lnk.protocol + "//" + lnk.host + lnk.pathname + "?" + qs_str + ((lnk.hash=="#")?"":lnk.hash);
	} else {
		var loc = "?" + qs_str;
	};
	/*
	if (getData("debugmode")>="4") {
		dbLink(lnk, qs_str);
	};
	*/
	
	return loc;
}


function dbLink(l, qs_str) {
	var s = "";


	//s+= "origSearch: '"+ origSearch + "'["+typeof origSearch+"]\n";
	s+= "qs_str: '"+ qs_str + "'["+typeof qs_str+"]\n";
	s+= "\n";

	s+= "l.search: '"+ l.search + "'["+typeof l.search+"]\n";
	s+= "\n";

	s+= "l.hash: '"+ l.hash + "'["+typeof l.hash+"]\n";
	s+= "\n";

	s+= "l.protocol: '"+ l.protocol + "'["+typeof l.protocol+"]\n";
	s+= "l.host: '"+ l.host + "'["+typeof l.host+"]\n";

	s+= "\n";
	s+= "l.pathname: '"+ l.pathname + "'["+typeof l.pathname+"]\n";
	s+= "\n";

	s+= "l.href: '"+ l.href + "'["+typeof l.href+"]\n";
	
	alert(s);

}



// alert("navigation_lib.js loaded");





