/**
 * Copyright 2002 Earth Resource Mapping Pty Ltd. This document contains unpublished source code of
 * Earth Resource Mapping Pty Ltd. This notice does not indicate any intention to publish the source
 * code contained herein.
 * 
 * /ecwplugins/lib/Scripts/NCSCreateView.js
 *
 */

function NeedFunction(Functions, nFunction) {
	for (var i = 3; i < Functions.length; i++) {
	  if((typeof(Functions[i]) == "number") && (Functions[i] == nFunction)) {
		return(true);
	  }
	}
	return(false);
}

function GetFunctionParameter(Functions, nFunction) {
	for (var i = 3; i < Functions.length; i++) {
	  if((typeof(Functions[i]) == "number") && (Functions[i] == nFunction) &&
		 (i < Functions.length - 1) && (typeof(Functions[i + 1]) == "string")) {
		return(Functions[i + 1]);
	  } 
	}
	return("");
}

function WriteFunctionParameter(sName, paramNameArray, eFunction, Functions, bParamTags, bNCSJSView) {
	
	var sReturn = "";
	
	if(NeedFunction(Functions, eFunction)) {
		sParam = GetFunctionParameter(Functions, eFunction);

		if(bNCSJSView == false) {
			if(bParamTags) {
				sReturn += "		<param ";
			} else {
				sReturn += "	";
			}	
			
			if(bParamTags) {
				if(sParam != "") {
					sReturn += "name=\"" + paramNameArray[eFunction] + "\" value=\"" + sParam + "\"";
				}
			} else {
				if(sParam != "") {
					sReturn += paramNameArray[eFunction] + "=\"" + sParam + "\"";
				}
			}
			
			if(bParamTags) {
				sReturn += ">";
			} else {
				sReturn += "";
			}
		} else {
			sReturn += 	sName + ".SetCallbackName(\"" + paramNameArray[eFunction] + "\", \"" + sParam + "\");";
		}
	}
	
	return sReturn;
}

function NCSCreateView() {
	var sString = NCSCreateViewReturnString(NCSCreateView.arguments);
	document.write(sString);
    

}

function NCSVIEW_SCROLL(event, sName) {
	var delta = 0; var x=0; var y=0;
	if (!event) return;
	if (event.wheelDelta) {
		// IE/Opera
		x = event.x; y = event.y;
		delta = event.wheelDelta/120;
		if (window.opera) delta = -delta;			
	} else if (event.detail) {
		// firefox
		x = event.layerX; y = event.layerY;
		delta = -event.detail/3;
	}
	try {
		if(delta) sName.Zoom(x,y,delta);
	} catch( ex ) {
	}
	event.returnValue = false;
}

function NCSCreateViewReturnString(arguments_obj) {
	
	var sPluginString = '';
	var sUserAgent = navigator.userAgent.toLowerCase();	
	var bNativePlugin = (ECWCheck() >= 5) ? false : true;
	var bNCSJSView = (ECWCheck() == 6) ? true : false;
	var bIsMac = ( navigator.userAgent.indexOf('Mac') != -1 ) ? true : false;
	var bUseParamTags = false;

	if(arguments_obj.length >= 1) {
		sName = arguments_obj[0];
		if(arguments_obj.length >= 2) {
			sWidth = arguments_obj[1];
			if(arguments_obj.length >= 3) {
				sHeight = arguments_obj[2];
			}
		}
	}

	if(bNativePlugin) {
		if(sUserAgent.indexOf('msie') != -1) {
			sPluginString += "	  <OBJECT id=\"" + sName + "\" width=\"" + sWidth + "\" height=\"" + sHeight + "\"";
			sPluginString += "	  classid=\"" + ECW_ACTIVEX_NCSVIEW_CLASSID + "\" codebase=\"" + ECW_ACTIVEX_CODEBASE + "\"";
			sPluginString += "    onmousewheel=\"NCSVIEW_SCROLL(event, " + sName + ");\"";
			bUseParamTags = true;
		} else {
			if( bIsMac ) {
				sPluginString += "	  <OBJECT type=\"" + ECW_NETSCAPE_MIME_TYPE + "\"id=\"" + sName + "\" name=\"" + sName + "\"";
				sPluginString += "	  width=\"" + sWidth + "\" height=\"" + sHeight + "\" " + "\" codebase=\"" + ECW_NETSCAPE_PLUGINS_PAGE + "\""; 
				bUseParamTags = false;
			} else {
				sPluginString += "	  <OBJECT><EMBED name=\"" + sName + "\" width=\"" + sWidth + "\" height=\"" + sHeight + "\"";
				sPluginString += "	  type=\"" + ECW_NETSCAPE_MIME_TYPE + "\" pluginspage=\"" + ECW_NETSCAPE_PLUGINS_PAGE + "\"";
				bUseParamTags = false;
			}
		}
	} else if(bNCSJSView == false) {
		if (sUserAgent.indexOf('applewebkit') != -1)
		{
			// For mac, use the applet tag, its the only one that works with scripting. This has to be first
			// because the user agent string also contains the strings 'mozilla' and 'gecko'...
			sPluginString += "	<APPLET name=\"" + sName + "\" width=\"" + sWidth + "\" height=\"" + sHeight + "\" hspace=\"0\" vspace=\"0\"";
			sPluginString += "	code=\"" + ECW_JAVA_APPLETCLASS + "\" ARCHIVE=\"" + ECW_JAVA_VIEWJARFILE + "\" CODEBASE=\"" + ECW_JAVA_JARCODEBASE + "\" MAYSCRIPT=\"true\" > ";
			bUseParamTags = true;
		}
		else if (sUserAgent.indexOf('msie') != -1)
		{
			sPluginString += "<OBJECT classid=\"" + ECW_JAVA_VM_CLASSID + "\" ";
			sPluginString += "type=\"" + ECW_JAVA_VM_APPLET_TYPE + "\" ";
			sPluginString += "name=\"" + sName + "\" id=\"" + sName + "\" ";
			sPluginString += "width=\"" + sWidth + "\" height=\"" + sHeight + "\" hspace=\"0\" vspace=\"0\" ";
			sPluginString += "codebase=\"" + ECW_JAVA_VM_IE_CODEBASE + "\" > ";
			sPluginString += "<PARAM NAME=\"CODE\" VALUE=\"" + ECW_JAVA_APPLETCLASS + "\"> ";
			sPluginString += "<PARAM NAME=\"ARCHIVE\" VALUE=\"" + ECW_JAVA_VIEWJARFILE + "\"> ";
			sPluginString += "<PARAM NAME=\"CODEBASE\" VALUE=\"" + ECW_JAVA_JARCODEBASE + "\"> ";
			sPluginString += "<PARAM NAME=\"scriptable\" VALUE=\"true\"> ";
			sPluginString += "<PARAM NAME=\"type\" VALUE=\"" + ECW_JAVA_VM_APPLET_TYPE + "\"> ";
			bUseParamTags = true;
			
		}
		else if (sUserAgent.indexOf('mozilla') != -1 && sUserAgent.indexOf('gecko') != -1)
		{
			// Any layout engine based on gecko should work.
			sPluginString += "	<OBJECT><EMBED  ID=\"" + sName + "\" NAME=\"" + sName + "\" WIDTH=\"" + sWidth + "\" HEIGHT=\"" + sHeight + "\" ";
			sPluginString += "	type=\"" + ECW_JAVA_VM_APPLET_TYPE + "\" ";
			sPluginString += "	JAVA_CODE=\"" + ECW_JAVA_APPLETCLASS + "\" archive=\"" + ECW_JAVA_VIEWJARFILE + "\"  codebase=\"" + ECW_JAVA_JARCODEBASE + "\"  " ;
			sPluginString += "	pluginspage=\"" + ECW_JAVA_VM_NS_CODEBASE + "\" mayscript=\"true\" scriptable=\"true\" ";
			bUseParamTags = false;
			
		}
		else
		{
			// Use normal Java APPLET tag and hope the browser supports it.
			sPluginString += "	<APPLET name=\"" + sName + "\" width=\"" + sWidth + "\" height=\"" + sHeight + "\" hspace=\"0\" vspace=\"0\" ";
			sPluginString += "	code=\"" + ECW_JAVA_APPLETCLASS + "\" ARCHIVE=\"" + ECW_JAVA_VIEWJARFILE + "\" CODEBASE=\"" + ECW_JAVA_JARCODEBASE + "\" MAYSCRIPT=\"true\" > ";
			bUseParamTags = true;
		}
	} else {
		sPluginString += "	<SCRIPT language=\"javascript\">";
		sPluginString += "var " + sName + "=new NCSJSView(\"" + sWidth + "\",\"" + sHeight + "\");";
		sPluginString += "document." + sName + "=" + sName + ";";
	}
  
	if(bNCSJSView == false && NeedFunction(arguments_obj, PARAM_VIEW_STYLE)) {
		var sParam = GetFunctionParameter(arguments_obj, PARAM_VIEW_STYLE);
		sPluginString += "\n	  style=\"" + sParam + "\"";
	}

	if (bUseParamTags && bNativePlugin)
	{
		sPluginString += ">";
	}

	// Write out param tags
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONMOUSEDOWN,		 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONMOUSEMOVE,		 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONMOUSEUP, 		 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONEXTENTCHANGE,	 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONPERCENTCOMPLETE,	 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONLAYERRESPONSE,	 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONLOAD,			 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_BGCOLOR,			 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONDRAWBEGIN,		 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONDRAWEND,			 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_WINDOWLESS,		 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONERROR,			 arguments_obj, bUseParamTags, bNCSJSView);
   	sPluginString += WriteFunctionParameter(sName, NCSViewParamNames, PARAM_VIEW_ONGEOLINKMODECHANGE, arguments_obj, bUseParamTags, bNCSJSView);
	
	// Close the object/embed/applet tags
	if (bNativePlugin)
	{	
		if (!bUseParamTags) sPluginString += ">";
		sPluginString += "</OBJECT>";
		
		if (sUserAgent.indexOf('mozilla') != -1 && sUserAgent.indexOf('gecko') != -1) {
			// add firefox scroll wheel support
			sPluginString += "<script>"
			sPluginString += "function NCSVIEW_SCROLL_" + sName + "(event) {" +
				"NCSVIEW_SCROLL(event, " + sName + ")" +
			"}\n"			
			sPluginString += "if (document." + sName + ".addEventListener) document." + sName + ".addEventListener('DOMMouseScroll', NCSVIEW_SCROLL_" + sName + ", false);"
			sPluginString += "</script>"
		}
	} else if(bNCSJSView == false) {
		if (!bUseParamTags)	sPluginString += ">";
		
		if (sUserAgent.indexOf('applewebkit') != -1)
		{
			sPluginString += "</APPLET>";
		}
		else if (sUserAgent.indexOf('msie') != -1)
		{
			sPluginString += "</OBJECT>";
		}
		else if (sUserAgent.indexOf('mozilla') != -1 && sUserAgent.indexOf('gecko') != -1)
		{
			sPluginString += "</EMBED></OBJECT>";
		}
		else
		{
			sPluginString += "</APPLET>";
		}
	} else {
		sPluginString += "</SCRIPT>";
	}
	return sPluginString;
}


function NCSCreateToolbar() {

	var bIsIEActiveX = false;
	var bNativePlugin = (ECWCheck() == 5) ? false : true;
	var bIsMac = ( navigator.userAgent.indexOf('Mac') != -1 )?true:false;

	sName	= "ECWToolbar1";
	sWidth	= "178px";
	sHeight = "30px";

	if(NCSCreateToolbar.arguments.length >= 1) {
		sName = NCSCreateToolbar.arguments[0];
	}
	if(NCSCreateToolbar.arguments.length >= 2) {
		sWidth = NCSCreateToolbar.arguments[1];
	}
	if(NCSCreateToolbar.arguments.length >= 3) {
		sHeight = NCSCreateToolbar.arguments[2];
	}

	if(bNativePlugin) {
		if(navigator.userAgent.indexOf('MSIE') != -1) {
			// IE, output ActiveX OBJECT tag
			document.writeln("	  <OBJECT id=\"" + sName + "\" width=\"" + sWidth + "\" height=\"" + sHeight + "\"");
			document.writeln("	  classid=\"" + ECW_ACTIVEX_NCSTOOLBAR_CLASSID + "\" codebase=\"" + ECW_ACTIVEX_CODEBASE + "\"");
			bIsIEActiveX = true;
		} else {
			if( bIsMac ) {
				document.writeln("	  <OBJECT type=\"" + ECW_NETSCAPE_TOOLBAR_MIME_TYPE + "\"id=\"" + sName + "\" name=\"" + sName + "\"" );
				document.writeln("	  width=\"" + sWidth + "\" height=\"" + sHeight + "\" " + "\" codebase=\"" + ECW_NETSCAPE_PLUGINS_PAGE + "\""); 
			} else {
				// EMBED tag for native Netscape plugin
				document.writeln("	  <OBJECT><EMBED name=\"" + sName + "\" width=\"" + sWidth + "\" height=\"" + sHeight + "\"");
				document.writeln("	  type=\"" + ECW_NETSCAPE_TOOLBAR_MIME_TYPE + "\" pluginspage=\"" + ECW_NETSCAPE_PLUGINS_PAGE + "\"");
			}
		}
	} else {
		// Java APPLET tag
		document.writeln("	<APPLET name=\"" + sName + "\" width=\"" + sWidth + "\" height=\"" + sHeight + "\" hspace=\"0\" vspace=\"0\" cellspacing=2 bgcolor='#ffffff'");
		document.writeln("	code=\"" + ECW_JAVA_TOOLBARCLASS + "\" ARCHIVE=\"" + ECW_JAVA_GUIJARFILE + "\" CODEBASE=\"" + ECW_JAVA_JARCODEBASE + "\" MAYSCRIPT=\"true\">");
	}

	if(NeedFunction(NCSCreateToolbar.arguments, PARAM_TOOLBAR_STYLE)) {
		var sParam = GetFunctionParameter(NCSCreateToolbar.arguments, PARAM_TOOLBAR_STYLE);
		document.write("\n	  style=\"" + sParam + "\"");
	}

	if(bIsIEActiveX||bIsMac) {
		document.writeln(">");
	} else {
		document.writeln("");
	}

	WriteFunctionParameter(sName, NCSToolbarParamNames, PARAM_TOOLBAR_ONHELP,				NCSCreateToolbar.arguments, bIsIEActiveX || !bNativePlugin ||bIsMac, false);
	WriteFunctionParameter(sName, NCSToolbarParamNames, PARAM_TOOLBAR_ONPOINTERMODECHANGE, NCSCreateToolbar.arguments, bIsIEActiveX || !bNativePlugin ||bIsMac, false);
	WriteFunctionParameter(sName, NCSToolbarParamNames, PARAM_TOOLBAR_ONSETEXTENTSALL, 	NCSCreateToolbar.arguments, bIsIEActiveX || !bNativePlugin ||bIsMac, false);
	WriteFunctionParameter(sName, NCSToolbarParamNames, PARAM_TOOLBAR_CELLSPACING,		    NCSCreateToolbar.arguments, bIsIEActiveX || !bNativePlugin ||bIsMac, false);
	WriteFunctionParameter(sName, NCSToolbarParamNames, PARAM_TOOLBAR_BGCOLOR,			    NCSCreateToolbar.arguments, bIsIEActiveX || !bNativePlugin ||bIsMac, false);
	WriteFunctionParameter(sName, NCSToolbarParamNames, PARAM_TOOLBAR_LAYERED,			    NCSCreateToolbar.arguments, bIsIEActiveX || !bNativePlugin ||bIsMac, false);

	if(bIsIEActiveX ||bIsMac) {
		document.writeln("	  </OBJECT>");
	} else {
		if(bNativePlugin) {
			document.writeln("></OBJECT>");
		} else {
			document.writeln("</APPLET>");
		}
	}
}

function NCSCreateProgressbar() {

	var bIsIEActiveX = false;
	var bNativePlugin = (ECWCheck() == 5) ? false : true;
	var bIsMac = ( navigator.userAgent.indexOf('Mac') != -1 )?true:false;

	sName	= "ECWProgressbar1";
	sWidth	= "178px";
	sHeight = "30px";

	if(NCSCreateProgressbar.arguments.length >= 1) {
		sName = NCSCreateProgressbar.arguments[0];
	}
	if(NCSCreateProgressbar.arguments.length >= 2) {
		sWidth = NCSCreateProgressbar.arguments[1];
	}
	if(NCSCreateProgressbar.arguments.length >= 3) {
		sHeight = NCSCreateProgressbar.arguments[2];
	}

	if(bNativePlugin) {
		if(navigator.userAgent.indexOf('MSIE') != -1) {
			// IE, output ActiveX OBJECT tag
			document.writeln("	  <OBJECT id=\"" + sName + "\" width=\"" + sWidth + "\" height=\"" + sHeight + "\"");
			document.writeln("	  classid=\"" + ECW_ACTIVEX_NCSPROGBAR_CLASSID + "\" codebase=\"" + ECW_ACTIVEX_CODEBASE + "\"");
			bIsIEActiveX = true;
		} else {
			if( bIsMac ) {
				document.writeln("	  <OBJECT type=\"" + ECW_NETSCAPE_PROGBAR_MIME_TYPE + "\"id=\"" + sName + "\" name=\"" + sName + "\"" );
				document.writeln("	  width=\"" + sWidth + "\" height=\"" + sHeight + "\" " + "\" codebase=\"" + ECW_NETSCAPE_PLUGINS_PAGE + "\""); 
			} else {
				// EMBED tag for native Netscape plugin
				document.writeln("	  <OBJECT><EMBED name=\"" + sName + "\" width=\"" + sWidth + "\" height=\"" + sHeight + "\"");
				document.writeln("	  type=\"" + ECW_NETSCAPE_PROGBAR_MIME_TYPE + "\" pluginspage=\"" + ECW_NETSCAPE_PLUGINS_PAGE + "\"");
			}
		}
	} else {
		// Java APPLET tag
		document.writeln("	<APPLET name=\"" + sName + "\" width=\"" + sWidth + "\" height=\"" + sHeight + "\" hspace=\"0\" vspace=\"0\" cellspacing=2 bgcolor='#ffffff'");
		document.writeln("	code=\"" + ECW_JAVA_PROGBARCLASS + "\" ARCHIVE=\"" + ECW_JAVA_GUIJARFILE + "\" CODEBASE=\"" + ECW_JAVA_JARCODEBASE + "\" MAYSCRIPT=\"true\">");
	}

	if(NeedFunction(NCSCreateProgressbar.arguments, PARAM_PROGBAR_STYLE)) {
		var sParam = GetFunctionParameter(NCSCreateProgressbar.arguments, PARAM_PROGBAR_STYLE);
		document.write("\n	  style=\"" + sParam + "\"");
	}

	if(bIsIEActiveX||bIsMac) {
		document.writeln(">");
	} else {
		document.writeln("");
	}

	WriteFunctionParameter(sName, NCSProgbarParamNames, PARAM_PROGBAR_FGCOLOR, NCSCreateProgressbar.arguments, bIsIEActiveX || !bNativePlugin ||bIsMac, false);
	WriteFunctionParameter(sName, NCSProgbarParamNames, PARAM_PROGBAR_BGCOLOR, NCSCreateProgressbar.arguments, bIsIEActiveX || !bNativePlugin ||bIsMac, false);
	WriteFunctionParameter(sName, NCSProgbarParamNames, PARAM_PROGBAR_SOLID,   NCSCreateProgressbar.arguments, bIsIEActiveX || !bNativePlugin ||bIsMac, false);

	if(bIsIEActiveX ||bIsMac) {
		document.writeln("	  </OBJECT>");
	} else {
		if(bNativePlugin) {
			document.writeln("></OBJECT>");
		} else {
			document.writeln("</APPLET>");
		}
	}
}
