// Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
// Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated)

var sDefaultLang = "en";
var sDefaultFeaturesHelp = "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=680,height=500";
var sDefaultFeaturesQuickTours = "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=800,height=600";


// A common API to fire up help documentation
// 	@sProductLocale:	the target product locale
// 	@sStartupFile:	the start up file
// 	@sContext:		the web context line
function gotoHelp( sProductLocale, sStartupFile, sContext )
{	
	var sURLStartToken = "../documentation/";
	var sURLLangToken = sProductLocale;
	var sURLEndToken =	"/" + sStartupFile;
	
	sURLEndToken += (sContext == "") ? ".html" : ".html?helpid=" + sContext;
	
	checkUrlExists (sURLStartToken,sURLLangToken,sURLEndToken,new Function ("url", "openHelp(url);"));
}

function openHelp (url)
{
	helpWindow = window.open(url, "helpWindow", sDefaultFeaturesHelp);
	helpWindow.focus();
}

// A common API to fire up quick tours documentation
// 	@sProductLocale:	the target product locale
// 	@sStartupFile:		the start up file under tours folder
//	@sOptions:			the options
// 	Note: As WO-2163, the sStartupFile and sOptions arguments would be obsolete now.
//			For backward compatibility, just leave it as it was before.
function gotoTours( sProductLocale, sStartupFile, sOptions )
{
	var sURLStartToken = "../documentation/";
	var sURLLangToken = sProductLocale;
	var sURLEndToken =	"/tours/" + "crntours.html?sStartupFile=" + sStartupFile;

	if ( sOptions != null && sOptions != "" ) {
		sURLEndToken += "&" + sOptions;
	}
	
	checkUrlExists (sURLStartToken,sURLLangToken,sURLEndToken,new Function ("url", "openTours(url);"));
}

function openTours (url)
{
	var toursWindow = window.open(url, "toursWindow", sDefaultFeaturesQuickTours);
	
	toursWindow.focus();
}

// The following two APIs will help ReportStudio & CMM etc. for redirecting purpose.
function initDocs()
{
	var query = parseHash(window.location.href); // read URL for topic/section info

	var sLang = sDefaultLang;
	var sBook = "wig_cr_a"; // Drfault to "Get Started" documentation
	var sHelpID = "";
	var sCurrentTopic = "";
	var sStartupFile = ""; // when using crntours menu, pass the app info to highlight

	if( query['lang'] && (query['lang'] != "") ) {
		sLang = query['lang'];
	}

	if( query['book'] && (query['book'] != "") ) {
		sBook = query['book'];
	}

	if( query['helpid'] && (query['helpid'] != "") ) {
		sHelpID = query['helpid'];
	}

	if( query['sStartupFile'] && (query['sStartupFile'] != "") ) {
		sStartupFile = query['sStartupFile'];
	}

	var sCurrentTopicStartToken = "";
	var sCurrentTopicLangToken = sLang;
	var sCurrentTopicEndToken =	"/" + sBook + ".html";

	if( sHelpID != "" ) {
		sCurrentTopicEndToken += "?helpid=" + sHelpID;
	}
	else if( sStartupFile != "" ) {
		sCurrentTopicEndToken += "?sStartupFile=" + sStartupFile;
	}

	// determine full path to html
	var sDirTopics = "";
	var sDirString = window.location.href.substring(0, window.location.href.indexOf('?') );
	var nPos = sDirString.lastIndexOf('/');
	sDirTopics = (nPos != -1) ? window.location.href.substring(0, nPos + 1) : "";

	sCurrentTopicStartToken = sDirTopics;

	checkUrlExists(sCurrentTopicStartToken, sCurrentTopicLangToken, sCurrentTopicEndToken, new Function ("url", "openDocs(url);"));
}

function openDocs (url)
{
	window.location.href = url;
}

function parseHash(s)
{
	var query = new Array();
	var nPos = s.indexOf("?");

	if (nPos != -1) {
		s = s.substring(nPos + 1, s.length);
		var sPair = "";
		while (s != "") {
			nPos = s.indexOf("&");
			if (nPos == -1) { 
				sPair = s; 
				s = ""; 
			} 
			else {	
				sPair = s.substring(0, nPos); 
				s = s.substring(nPos + 1, s.length); 
			}
			nPos = sPair.indexOf("=");
			if (nPos != -1) {
				query[sPair.substring(0, nPos)] = unescape(sPair.substring(nPos + 1, sPair.length));
			}
		}
	}

	return query;
}

function displayDefaultDocFolderNotExistingMessage()
{
	var msg = "The documentation page for the default language '" + sDefaultLang + "' does not exist! Please contact your administrator for help.";
	alert(msg);
}

/*
*	The Function checks if the specified URL exists. If it exists then it runs the onSuccess function.
*	If it does not exist then it constructs the URL to the docs in the default language kit, if that exists 
*	runs the onSuccess function. 
*
*	@URL is constructed from: URL = urlStartToken + urlSlangToken + urlEndToken;
*	@onSuccessOpen: Function that is run, on the event that the URL exists.
*
*	@exception: If the default docs are not found, just display an English message to indicate 
*		     the documentation page for the specified language does not exist.
*		     This should rarely occur.
*/

function checkUrlExists (urlStartToken,urlSlangToken,urlEndToken,onSuccessOpen)
{	
	var url=urlStartToken + urlSlangToken + urlEndToken;
	
	xmlHttp = createXmlHttpObject();
	
	try {
		//On local machine in firefox: exception happens if uri doesnt exist.
		xmlHttp.open("HEAD",url,true);
	} catch (e) {
		if (urlSlangToken == sDefaultLang) {
			displayDefaultDocFolderNotExistingMessage();
			return;
		}

		checkUrlExists (urlStartToken,sDefaultLang,urlEndToken,onSuccessOpen);
	}
	
	xmlHttp.onreadystatechange = function () {
		if(xmlHttp.readyState == 4) {
			// Found
			if (xmlHttp.status == 200 || xmlHttp.status == 0) {
				if (onSuccessOpen == null) {
					return;
				}
				
				onSuccessOpen(url);
			}
			else {
				if(xmlHttp.status == 404) {
					if (urlSlangToken == sDefaultLang) {
						displayDefaultDocFolderNotExistingMessage();
						return;
					}
					
					checkUrlExists (urlStartToken,sDefaultLang,urlEndToken,onSuccessOpen);
				}
				else {
					alert("A http error occurs!");
				}
			}
		}
	}
	
	try {
		//On local machine in IE exception happens system resource not found.
		xmlHttp.send(null);
	} 
	catch (e) {
		if (urlSlangToken == sDefaultLang) {
			displayDefaultDocFolderNotExistingMessage();
			return;
		}
			
		checkUrlExists (urlStartToken,sDefaultLang,urlEndToken,onSuccessOpen);
	}
}

function createXmlHttpObject()
{
	var xmlHttp = false;

	// For IE
	if (window.ActiveXObject) {
		try {
			xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
		} catch (e) {
			xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
		} 
	} else if(window.XMLHttpRequest) {
		//Non IE browsers that support XMLHttpRequest
		xmlHttp = new XMLHttpRequest();
	}
	
	return xmlHttp;
}
