var g_sOwcPath = owcGetCommonerPath();

owcBindWebComponentsSDK(g_sOwcPath);

function owcBindWebComponentsSDK(sOwcHRef) 
{
	owcBindWebSdkScript(sOwcHRef, "JScriptCore.js");
	owcBindWebSdkScript(sOwcHRef, "DomCore.js");
	owcBindWebSdkScript(sOwcHRef, "OwcDHTML.js");
	owcBindWebSdkScript(sOwcHRef, "OwcGlobals.js");
	owcBindWebSdkScript(sOwcHRef, "OwcXHTTP.js");
	owcBindWebSdkScript(sOwcHRef, "OwcCommon.js");
	owcBindWebSdkScript(sOwcHRef, "OwcControl.js");
	owcBindWebSdkScript(sOwcHRef, "OwcDataExchange.js");
	owcBindWebSdkScript(sOwcHRef, "OwcUiElements.js");
	owcBindWebSdkScript(sOwcHRef, "OwcDataBound.js");
	owcBindWebSdkScript(sOwcHRef, "OwcBindings.js");
    owcBindWebSdkScript(sOwcHRef, "OwcWindow.js");	
	owcBindWebSdkScript(sOwcHRef, "OwcPopupWindow.js");
	owcBindWebSdkScript(sOwcHRef, "OwcPage.js");
	owcBindWebSdkScript(sOwcHRef, "OwcControlCommon.js");
	owcBindWebSdkScript(sOwcHRef, "OwcBookmarkServices.js");
	owcBindWebSdkScript(sOwcHRef, "OwcAppBase.js");
	owcBindWebSdkScript(sOwcHRef, "OwcImageViewer.js");
	owcBindWebSdkScript(sOwcHRef, "OwcList.js");
	owcBindWebSdkScript(sOwcHRef, "OwcTree.js");
	owcBindWebSdkScript(sOwcHRef, "OwcFolderTree.js");
	owcBindWebSdkScript(sOwcHRef, "OwcDocList.js");
	owcBindWebSdkScript(sOwcHRef, "OwcThumbnail.js");
	owcBindWebSdkScript(sOwcHRef, "OwcToc.js");
	owcBindWebSdkScript(sOwcHRef, "OwcMenu.js");
	owcBindWebSdkScript(sOwcHRef, "OwcViewer.js");
	owcBindWebSdkScript(sOwcHRef, "OwcSearchParams.js");
	owcBindWebSdkScript(sOwcHRef, "OwcErrorCodesTable.js");
	owcBindWebSdkScript(sOwcHRef, "OwcPageBind.js");
	owcBindWebSdkStylesheet(sOwcHRef, "Layout/OwcDefault.css");

	if (owcIsInternetExplorer())
		owcBindWebSdkStylesheet(sOwcHRef, "Layout/OwcDefault-IE.css");
	else
		owcBindWebSdkStylesheet(sOwcHRef, "Layout/OwcDefault-NonIE.css");
} // owcBindWebComponentsSDK()

function owcBindWebSdkScript(sOwcHRef, sScriptFile)
{
	if (document.readyState != "complete") // && document.readyState != "interactive")// causes script loading error on IE7 after clearing cache and restarting browser
		document.writeln('<script language="javascript" type="text/javascript" src="' + sOwcHRef + sScriptFile + '"></script>');
	else if (!owcIsWebSdkScriptIncluded(sOwcHRef, sScriptFile))
		owcAddScript(sOwcHRef + sScriptFile);
}

function owcBindWebSdkStylesheet(sOwcHRef, sStylesheetFile)
{
	if (document.readyState != "complete") // && document.readyState != "interactive")
		document.writeln('<link type="text/css" rel="stylesheet" href="' + sOwcHRef + sStylesheetFile+ '"></link>');
	else if (!owcIsWebSdkStylesheetIncluded(sOwcHRef, sStylesheetFile))
		owcAddStylesheet(sOwcHRef + sStylesheetFile);
}

function owcIsWebSdkScriptIncluded(sOwcHRef, sScriptFile)
{
	return (owcFindScriptPosition(sOwcHRef + sScriptFile) >= 0);
}

function owcIsWebSdkStylesheetIncluded(sOwcHRef, sStylesheetFile)
{
	return (owcFindStylesheetPosition(sOwcHRef + sStylesheetFile) >= 0);
}

function owcGetCommonerPath() 
{
	var oScript = null;
	var sPath = "/Olive/WebComponents/";

	// Find <script src=".../OwcBind.js"> and use script's path
	var arrScripts = document.scripts;
	if (!document.scripts)
		arrScripts = owcGetElementsByTagName("script");
	for (var iScript=0; iScript < arrScripts.length; ++iScript)
	{
		if (arrScripts[iScript].src.indexOf("OwcBind.js") >= 0)
		{
			sPath = arrScripts[iScript].src;
			sPath = sPath.replace("OwcBind.js", "");
			break;
		}
	}

	return sPath;
} // owcGetCommonerPath()

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//                            Navigating DOM tree                            //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////
function owcAddScript(uri, afterIndex)
{
	var oScriptElem = document.createElement("script");
	oScriptElem.language = "javascript";
	oScriptElem.type = "text/javascript";
	oScriptElem.src = uri;
	
	var headElem = owcGetElementsByTagName("head")[0];
	return headElem.appendChild(oScriptElem);
}

function owcFindScriptPosition(uri, relativeMatch)
{
	var sMatchRef = uri.toLowerCase().replace(/\\/, "/");

	// Find <script> element matching file source
	var arrScripts = document.scripts;
	if (!document.scripts)
		arrScripts = owcGetElementsByTagName("script");
	for (var iScript=0; iScript < arrScripts.length; ++iScript)
	{
		var scriptSrc = arrScripts[iScript].src.toLowerCase().replace(/\\/, "/");
		if (relativeMatch)
		{
			var pos = scriptSrc.indexOf(sMatchRef);
			if (pos >= 0 && ((pos + sMatchRef.length) == scriptSrc.length))
				return iScript;
		}
		else if (scriptSrc == sMatchRef)
			return iScript;
	}
	
	return -1;
}

function owcAddStylesheet(uri, afterIndex)
{
	var oStylesheetElem = document.createElement("link");
	oStylesheetElem.rel = "Stylesheet";
	oStylesheetElem.type = "text/css";
	oStylesheetElem.href = uri;

	var headElem = owcGetElementsByTagName("head")[0];
	return headElem.appendChild(oStylesheetElem);
}

function owcFindStylesheetPosition(uri, relativeMatch)
{
	var sMatchRef = uri.toLowerCase().replace(/\\/, "/");
	
	// Find <stylesheet> element matching file source
	var arrStylesheets = document.links;
	if (!document.links)
		arrStylesheets = owcGetElementsByTagName("link");
	for (var iStylesheet=0; iStylesheet < arrStylesheets.length; ++iStylesheet)
	{
		var elemStylesheet = arrStylesheets[iStylesheet];
		if (elemStylesheet.tagName.toLowerCase() != "link")
			continue;

		var stylesheetSrc = elemStylesheet.href.toLowerCase().replace(/\\/, "/");
		if (relativeMatch)
		{
			var pos = stylesheetSrc.indexOf(sMatchRef);
			if (pos >= 0 && ((pos + sMatchRef.length) == stylesheetSrc.length))
				return iStylesheet;
		}
		else if (stylesheetSrc == sMatchRef)
			return iStylesheet;
	}
	
	return -1;
}

function owcGetElementsByTagName(name)
{
	if (!name || name == "")
		return null;
	if (document.getElementsByTagName)
		return document.getElementsByTagName(name);
	else if (document.all.tags)
		return document.all.tags(name);
	return null;
} // owcGetElementsByTagName()

function owcIsInternetExplorer()
{
	return (typeof(ActiveXObject) != "undefined");
}

function owcGetIEVersion()
{
	// Determines the IE version. Returns 0 if not IE
	var verNum = 0
	if (navigator.appName == "Microsoft Internet Explorer") {
		var sVer = window.navigator.userAgent;
		var msie = sVer.indexOf ("MSIE ");
		if (msie > 0) {	// browser is Microsoft Internet Explorer; return version number
			verNum = parseFloat( sVer.substring ( msie+5, sVer.indexOf ( ";", msie ) ) );
		}
	}
	return verNum;
} // owcGetIEVersion()
