<!--
//---- LockTypeEnum Values ----
var adLockReadOnly = 1;
var adLockPessimistic = 2;
var adLockOptimistic = 3;
var adLockBatchOptimistic = 4;

//---- CursorLocationEnum Values ----
var adUseServer = 2;
var adUseClient = 3;

//---- CursorTypeEnum Values ----
var adOpenForwardOnly = 0;
var adOpenKeyset = 1;
var adOpenDynamic = 2;
var adOpenStatic = 3;

//---- CommandTypeEnum Values ----
var adCmdUnknown = 0x0008;
var adCmdText = 0x0001;
var adCmdTable = 0x0002;
var adCmdStoredProc = 0x0004;
var adCmdFile = 0x0100;
var adCmdTableDirect = 0x0200;

//---- StreamTypeEnum Values ----
var adTypeBinary = 1;
var adTypeText = 2;

//---- ConnectModeEnum Values ----
var adModeUnknown = 0;
var adModeRead = 1;
var adModeWrite = 2;
var adModeReadWrite = 3;
var adModeShareDenyRead = 4;
var adModeShareDenyWrite = 8;
var adModeShareExclusive = 0xc;
var adModeShareDenyNone = 0x10;
var adModeRecursive = 0x400000;

//---- StreamOpenOptionsEnum Values ----
var adOpenStreamUnspecified = -1;
var adOpenStreamAsync = 1;
var adOpenStreamFromRecord = 4;

//---- SaveOptionsEnum Values ----
var adSaveCreateNotExist = 1;
var adSaveCreateOverWrite = 2;

//---- ConnectModeEnum Values ----
var adModeUnknown = 0;
var adModeRead = 1;
var adModeWrite = 2;
var adModeReadWrite = 3;
var adModeShareDenyRead = 4;
var adModeShareDenyWrite = 8;
var adModeShareExclusive = 0xc;
var adModeShareDenyNone = 0x10;
var adModeRecursive = 0x400000;

//---- RecordCreateOptionsEnum Values ----
var adCreateCollection = 0x00002000;
var adCreateStructDoc = 0x80000000;
var adCreateNonCollection = 0x00000000;
var adOpenIfExists = 0x02000000;
var adCreateOverwrite = 0x04000000;
var adFailIfNotExists = -1;

//---- RecordOpenOptionsEnum Values ----
var adOpenRecordUnspecified = -1;
var adOpenOutput = 0x00800000;
var adOpenAsync = 0x00001000;
var adDelayFetchStream = 0x00004000;
var adDelayFetchFields = 0x00008000;
var adOpenExecuteCommand = 0x00010000;

var C_TEMP_FOLDER = 2;
var C_ERROR_FILE_NOT_OPEN = -2146825286;

//将文件载入到流当中
function streamLoadFile(stream, strFile)
{
	try
	{
		stream.loadFromFile(strFile);
	}
	catch(e)
	{
		//getAppNameByFileName在uiScript当中
		var strAppName = getAppNameByFileName(strFile);

		if (e.number == C_ERROR_FILE_NOT_OPEN)
		{
			var strError = "文件" + strFile + "不能打开";

			if (strAppName.length > 0)
				strError += "，请检查该文件是否被“" + strAppName + "”打开";
			else
				strError += "，请检查该文件是否被其它应用程序打开";

			throw strError;
		}
		else
			throw "请将http://" + document.location.host + "加入可信站点";
	}
}

//将文件存储在流当中
function streamSaveFile(stream, strFile)
{
	try
	{
		stream.saveToFile(strFile, adSaveCreateOverWrite);
	}
	catch(e)
	{
		throw "写文件失败" + strFile + "！\n可能是没有将http://" + document.location.host + "加入可信站点";
	}
}

//将当前流的部分内容拷贝到新的流中
function copyToNewStream(stmSrc, nBytes, strDescription)
{
	var stmDest = createObject("ADODB.Stream", strDescription);
	stmDest.type = adTypeBinary;
	stmDest.open();

	stmSrc.CopyTo(stmDest, nBytes);
	stmDest.position = 0;

	return stmDest;
}

var innerFileOpXmlHttp = null;
var innerFileOpHandleStateChange = null;
var innerFileOpParam = null;

//上载文件
function uploadFile(strPostURL, strLocalPath, strMethod, strDescription, callback, param)
{
	var stm = createObject("ADODB.Stream", strDescription);

	stm.type = adTypeBinary;
	stm.open();

	innerFileOpXmlHttp = createObject("Msxml2.XMLHTTP");

	try
	{
		streamLoadFile(stm, strLocalPath);
		stm.position = 0;

		if (!strMethod)
			strMethod = "put";

		var bAysync = false;

		if (callback)
		{
			bAysync = true;
			innerFileOpXmlHttp.onreadystatechange = handleFileOpStateChange;
			innerFileOpParam = param;
			innerFileOpHandleStateChange = callback;
		}

		innerFileOpXmlHttp.open(strMethod, strPostURL, bAysync);
		innerFileOpXmlHttp.send(stm);

		return innerFileOpXmlHttp;
	}
	finally
	{
		stm.close();
	}
}

//上载流
function uploadStream(strPostURL, stm, strMethod, callback, param)
{
	innerFileOpXmlHttp = createObject("Msxml2.XMLHTTP");

	if (!strMethod)
		strMethod = "put";

	var bAysync = false;

	if (callback)
	{
		bAysync = true;
		innerFileOpXmlHttp.onreadystatechange = handleFileOpStateChange;
		innerFileOpParam = param;
		innerFileOpHandleStateChange = callback;
	}

	innerFileOpXmlHttp.open(strMethod, strPostURL, bAysync);
	innerFileOpXmlHttp.send(stm);

	return innerFileOpXmlHttp;
}

function handleFileOpStateChange()
{
	if (innerFileOpXmlHttp.readyState == 4)
	{
		var xmlResult = innerFileOpXmlHttp.responseXML;
		
		if (innerFileOpXmlHttp.status >= 400)
			xmlResult = createErrorXML(innerFileOpXmlHttp.responseText, "", innerFileOpXmlHttp.status, innerFileOpXmlHttp.statusText);

		if (innerFileOpHandleStateChange)
			innerFileOpHandleStateChange(xmlResult, innerFileOpParam);
	}
}

var C_FILE_BLOCK_SIZE = 2048000;

var m_nCurrentBytes = 0;
var m_currentSendBytes = 0;
var m_nTotalBytes = 0;
var m_paramUpload = null;
var m_sourceStream = null;
var m_uploadCallback = null;
var m_uploadDescription = "";
var m_fileGUID = "";
var m_baseURL = "";

//分多次上传文件
function uploadFileMultipart(strPostURL, strLocalPath, strDescription, callback, param)
{
	m_nCurrentBytes = 0;
	m_nTotalBytes = 0;
	m_currentSendBytes = 0
	m_paramUpload = param;
	m_uploadCallback = callback;
	m_uploadDescription = strDescription;
	m_baseURL = strPostURL;

	m_fileGUID = getGUIDFromServer();
	m_sourceStream = createObject("ADODB.Stream", strDescription);

	var stmSrc = m_sourceStream;
	stmSrc.type = adTypeBinary;
	stmSrc.open();

	streamLoadFile(stmSrc, strLocalPath);

	m_nTotalBytes = stmSrc.size;

	doSendBlock();
}

function doSendBlock()
{
	var strPostURL = m_baseURL;
		
	var nBlocks = Math.floor((m_nTotalBytes - m_nCurrentBytes) / C_FILE_BLOCK_SIZE);
	var nRemains = (m_nTotalBytes - m_nCurrentBytes) % C_FILE_BLOCK_SIZE;

	if (nBlocks > 0)
		m_currentSendBytes = C_FILE_BLOCK_SIZE;
	else
	if (nRemains > 0)
		m_currentSendBytes = nRemains;
	else
		m_currentSendBytes = 0;

	if (m_currentSendBytes > 0)
	{
		var strRequestParam = "currentBytes=" + m_nCurrentBytes + "&totalBytes="
								+ m_nTotalBytes + "&sendBytes=" + m_currentSendBytes
								+ "&blockSize=" + C_FILE_BLOCK_SIZE
								+ "&fileGUID=" + m_fileGUID;

		if (strPostURL.indexOf("?") == -1)
			strPostURL += "?" + strRequestParam;
		else
			strPostURL += "&" + strRequestParam;

		var strDest = copyToNewStream(m_sourceStream, m_currentSendBytes);
		uploadStream(strPostURL, strDest, "post", uploadCallback, m_paramUpload);
	}
}

function uploadCallback(xmlResult)
{
	try
	{
		checkErrorResult(xmlResult);

		m_nCurrentBytes += m_currentSendBytes;

		if (m_uploadCallback)
			m_uploadCallback(m_nCurrentBytes, m_nTotalBytes, m_paramUpload, xmlResult);

		doSendBlock();
	}
	catch(e)
	{
		showError(e);
	}
}

//下载文件
function downloadFile(strURL, strSaveFileName, strDescription)
{
	var xmlHttp = createObject("Msxml2.XMLHTTP");

	xmlHttp.open("POST", strURL, false);
	xmlHttp.send("");

	if (xmlHttp.responseXML.xml.length > 0)
		checkErrorResult(xmlHttp.responseXML);
	else
	if (xmlHttp.status >= 400)
	{
		var xmlResult = createErrorXML(xmlHttp.responseText, "", xmlHttp.status, xmlHttp.statusText);
		checkErrorResult(xmlResult);
	}

	var stm = createObject("ADODB.Stream", strDescription);

	stm.Type = 1;
	stm.Mode = adModeReadWrite;
	stm.Open();
	
	try
	{
		stm.Write(xmlHttp.responseBody);

		streamSaveFile(stm, strSaveFileName);

		return xmlHttp;
	}
	finally
	{
		stm.close();
	}
}

//下载文件到指定的目录下
function downloadFileInDirectory(strURL, strDirectory, strDescription)
{			
	var xmlHttp = createObject("Msxml2.XMLHTTP");

	xmlHttp.open("POST", strURL, false);
	xmlHttp.send("");

	if (xmlHttp.responseXML.xml.length > 0)
		checkErrorResult(xmlHttp.responseXML);
	else
	if (xmlHttp.status >= 400)
	{
		var xmlResult = createErrorXML(xmlHttp.responseText, "", xmlHttp.status, xmlHttp.statusText);
		checkErrorResult(xmlResult);
	}

	var stm = createObject("ADODB.Stream", strDescription);

	stm.Type = 1;
	stm.Mode = adModeReadWrite;
	stm.Open();

	try
	{
		stm.Write(xmlHttp.responseBody);

		var strSaveFileName = strDirectory + "\\" + getFileNameFromResponse(xmlHttp);

		streamSaveFile(stm, strSaveFileName);

		return xmlHttp;
	}
	finally
	{
		stm.close();
	}
}

//根据服务器的Response Header返回的"content-disposition"项，得到文件名称
function getFileNameFromResponse(xmlHttp)
{
	var strTag = "filename=";
	var strHeader = xmlHttp.getResponseHeader("content-disposition");
	var nNameStart = strHeader.indexOf(strTag) + strTag.length;

	var strSaveFileName = strHeader.substring(nNameStart, strHeader.length);
	
	return strSaveFileName;
}

//保存文本到文件中
function saveTextFile(strFileName, strData)
{
	var fso = createObject("Scripting.FileSystemObject");

	var f = fso.OpenTextFile(strFileName, 2, true, -1); //For writing and utf-8
	
	try
	{
		f.Write(strData);
	}
	finally
	{
		f.Close();
	}
}

//得到一个系统临时目录
function getTempDirName()
{
	var fso = createObject("Scripting.FileSystemObject");

	return fso.GetSpecialFolder(C_TEMP_FOLDER);
}

//清除文件的属性
function clearFileAttribute(strFileName, nAttrMask)
{
	var fso = createObject("Scripting.FileSystemObject");

	var f = fso.GetFile(strFileName);

	f.attributes = f.attributes & ~nAttrMask;
}

//得到一个系统临时目录中的临时文件名
function getTempFileName(strExtName)
{
	var fso = createObject("Scripting.FileSystemObject");

	var tfolder = fso.GetSpecialFolder(C_TEMP_FOLDER);
	var tname = fso.GetTempName();

	if (strExtName)
		tname += "." + strExtName;

	return tfolder + "\\" + tname;
}

//得到文件的最后修改时间
function getFileLastModifiedTime(strFileName)
{
	var fso = createObject("Scripting.FileSystemObject");
	var f = fso.getFile(strFileName);

	return new Date(f.dateLastModified * 1);
}

function fileExists(strFileName)
{
	var bExists = false;

	try
	{
		var fso = createObject("Scripting.FileSystemObject");

		bExists = fso.fileExists(strFileName);
	}
	catch(e)
	{
	}

	return bExists;
}

function folderExists(strFolderName)
{
	var bExists = false;

	try
	{
		var fso = createObject("Scripting.FileSystemObject");

		bExists = fso.folderExists(strFolderName);
	}
	catch(e)
	{
	}

	return bExists;
}

function createFolder(strFolderName)
{
	var fso = createObject("Scripting.FileSystemObject");

	fso.CreateFolder(strFolderName);
}

function isFileOpened(strFileName)
{
	var bOpened = false;

	try
	{
		if (strFileName.length > 0)
		{
			var fso = createObject("Scripting.FileSystemObject");

			if (fso.fileExists(strFileName))
			{
				var f = fso.getFile(strFileName);

				try
				{
					f.move(strFileName);
				}
				catch(e)
				{
					bOpened = true;
				}
			}
		}
	}
	catch(e)
	{
	}

	return bOpened;
}

//删除文件
function deleteFile(filespec)
{
	var fso = createObject("Scripting.FileSystemObject");

	fso.DeleteFile(filespec);
}

//拷贝文件
function copyFile(strDestName, strSrcName)
{
	var fso = createObject("Scripting.FileSystemObject");
	var f = fso.getFile(strSrcName);
	
	f.copy(strDestName, true);
}

//读文本文件
function readTextToFile(strFileName)
{
	var fso = createObject("Scripting.FileSystemObject");
	var f = fso.GetFile(strFileName);

	var ts = f.OpenAsTextStream(1);

	try
	{
		return ts.readAll();
	}
	finally
	{
		ts.close();
	}
}

//写文本文件
function writeTextToFile(strFileName, strText)
{
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var f = fso.CreateTextFile(strFileName, true);

	try
	{
		f.write(strText);
	}
	finally
	{
		f.close();
	}
}
//-->
