Merge to XFA: Kill overloaded cast operators in CJS_Value.

Original Review URL: https://codereview.chromium.org/1096813008
TBR=thestig@chromium.org

Review URL: https://codereview.chromium.org/1106663002
diff --git a/fpdfsdk/include/javascript/JS_Define.h b/fpdfsdk/include/javascript/JS_Define.h
index 7175ece..0c2574d 100644
--- a/fpdfsdk/include/javascript/JS_Define.h
+++ b/fpdfsdk/include/javascript/JS_Define.h
@@ -128,7 +128,7 @@
     JS_Error(isolate, JSFormatErrorString(class_name_string, method_name_string, sError));
     return;
   }
-  info.GetReturnValue().Set(valueRes.ToJSValue());
+  info.GetReturnValue().Set(valueRes.ToV8Value());
 }
 
 #define JS_STATIC_METHOD(method_name, class_name) \
@@ -385,7 +385,7 @@
     JS_Error(isolate, JSFormatErrorString(func_name_string, nullptr, sError));
     return;
   }
-  info.GetReturnValue().Set(valueRes.ToJSValue());
+  info.GetReturnValue().Set(valueRes.ToV8Value());
 }
 
 #define JS_STATIC_GLOBAL_FUN(fun_name) \
@@ -433,7 +433,7 @@
 \
 CJS_PropValue prop(pRuntime);\
 prop << array;\
-if (JS_DefineGlobalConst(pRuntime, (const wchar_t*)ArrayName, prop.ToJSValue()) < 0)\
+if (JS_DefineGlobalConst(pRuntime, (const wchar_t*)ArrayName, prop.ToV8Value()) < 0)\
 	return -1
 
 /* ============================================================ */
diff --git a/fpdfsdk/include/javascript/JS_Value.h b/fpdfsdk/include/javascript/JS_Value.h
index 1431349..ecd0f83 100644
--- a/fpdfsdk/include/javascript/JS_Value.h
+++ b/fpdfsdk/include/javascript/JS_Value.h
@@ -39,16 +39,16 @@
 	void Detach();
 
 
-	operator int() const;
-	operator bool() const;
-	operator double() const;
-	operator float() const;
-	operator CJS_Object*() const;
-	operator v8::Handle<v8::Object>() const;
-	operator v8::Handle<v8::Array>() const;
-	operator CFX_WideString() const;
-	operator CFX_ByteString() const;
-	v8::Handle<v8::Value> ToJSValue();
+	int ToInt() const;
+	bool ToBool() const;
+	double ToDouble() const;
+	float  ToFloat() const;
+	CJS_Object* ToCJSObject() const;
+	CFX_WideString ToCFXWideString() const;
+	CFX_ByteString ToCFXByteString() const;
+	v8::Handle<v8::Object> ToV8Object() const;
+	v8::Handle<v8::Array> ToV8Array() const;
+	v8::Handle<v8::Value> ToV8Value() const;
 
 	void operator = (int iValue);
 	void operator = (bool bValue);
diff --git a/fpdfsdk/src/javascript/Document.cpp b/fpdfsdk/src/javascript/Document.cpp
index bf9f07c..2bf4f5e 100644
--- a/fpdfsdk/src/javascript/Document.cpp
+++ b/fpdfsdk/src/javascript/Document.cpp
@@ -326,7 +326,7 @@
 
 	if (params.size() < 1) return FALSE;
 
-	CFX_WideString wideName = params[0].operator CFX_WideString();
+	CFX_WideString wideName = params[0].ToCFXWideString();
 
 	CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
 	ASSERT(pInterForm != NULL);
@@ -364,7 +364,7 @@
 {
 	ASSERT(m_pDocument != NULL);
 
-	int nIndex = params.size() > 0 ? (int)params[0] : -1;
+	int nIndex = params.size() > 0 ? params[0].ToInt() : -1;
 	if (nIndex == -1) return FALSE;
 
 	CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
@@ -412,12 +412,12 @@
 
 	int iLength = params.size();
 
-	FX_BOOL bUI = iLength > 0 ? (FX_BOOL)params[0] : TRUE;
-	CFX_WideString cTo = iLength > 1 ? (FX_LPCWSTR)params[1].operator CFX_WideString() : L"";
-	CFX_WideString cCc = iLength > 2 ? (FX_LPCWSTR)params[2].operator CFX_WideString() : L"";
-	CFX_WideString cBcc = iLength > 3 ? (FX_LPCWSTR)params[3].operator CFX_WideString() : L"";
-	CFX_WideString cSubject = iLength > 4 ? (FX_LPCWSTR)params[4].operator CFX_WideString() : L"";
-	CFX_WideString cMsg = iLength > 5 ? (FX_LPCWSTR)params[5].operator CFX_WideString() : L"";
+	FX_BOOL bUI = iLength > 0 ? params[0].ToBool() : TRUE;
+	CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString() : L"";
+	CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString() : L"";
+	CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString() : L"";
+	CFX_WideString cSubject = iLength > 4 ? params[4].ToCFXWideString() : L"";
+	CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString() : L"";
 
 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
 	ASSERT(pInterForm != NULL);
@@ -460,11 +460,11 @@
 	{
 		if (params[8].GetType() == VT_fxobject)
 		{
-			JSFXObject pObj = (JSFXObject)params[8];
+			JSFXObject pObj = params[8].ToV8Object();
 			{
 				if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"PrintParamsObj"))
 				{
-					if (CJS_Object* pJSObj = (CJS_Object*)params[8])
+					if (CJS_Object* pJSObj = params[8].ToCJSObject())
 					{
 							if (PrintParamsObj* pprintparamsObj = (PrintParamsObj*)pJSObj->GetEmbedObject())
 							{
@@ -485,21 +485,21 @@
 	else
 	{
 		if(nlength >= 1)
-			 bUI = params[0];
+			bUI = params[0].ToBool();
 		if(nlength >= 2)
-			 nStart = (int)params[1];
+			nStart = params[1].ToInt();
 		if(nlength >= 3)
-			nEnd = (int)params[2];
+			nEnd = params[2].ToInt();
 		if(nlength >= 4)
-			bSilent = params[3];
+			bSilent = params[3].ToBool();
 		if(nlength >= 5)
-			bShrinkToFit = params[4];
+			bShrinkToFit = params[4].ToBool();
 		if(nlength >= 6)
-			bPrintAsImage = params[5];
+			bPrintAsImage = params[5].ToBool();
 		if(nlength >= 7)
-			bReverse = params[6];
+			bReverse = params[6].ToBool();
 		if(nlength >= 8)
-			bAnnotations = params[7];
+			bAnnotations = params[7].ToBool();
 	}
 
 	ASSERT(m_pDocument != NULL);
@@ -526,7 +526,7 @@
 	if (params.size() < 1)
 		return TRUE;
 
-	CFX_WideString sFieldName = params[0].operator CFX_WideString();
+	CFX_WideString sFieldName = params[0].ToCFXWideString();
 
 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
 	ASSERT(pInterForm != NULL);
@@ -592,7 +592,7 @@
 		switch (params[0].GetType())
 		{
 		default:
-			aName.Attach(params[0]);
+			aName.Attach(params[0].ToV8Array());
 			break;
 		case VT_string:
 			aName.SetElement(0,params[0]);
@@ -605,7 +605,7 @@
 		{
 			CJS_Value valElement(isolate);
 			aName.GetElement(i,valElement);
-			CFX_WideString swVal = valElement.operator CFX_WideString();
+			CFX_WideString swVal = valElement.ToCFXWideString();
 
 			for (int j=0,jsz=pPDFForm->CountFields(swVal); j<jsz; j++)
 			{
@@ -656,26 +656,26 @@
 	CJS_Value v = params[0];
 	if (v.GetType() == VT_string)
 	{
-		strURL = params[0].operator CFX_WideString();
+		strURL = params[0].ToCFXWideString();
 		if (nSize > 1)
-			bFDF = params[1];
+			bFDF = params[1].ToBool();
 		if (nSize > 2)
-			bEmpty = params[2];
+			bEmpty = params[2].ToBool();
 		if (nSize > 3)
-			aFields.Attach(params[3]);
+			aFields.Attach(params[3].ToV8Array());
 	}
 	else if (v.GetType() == VT_object)
 	{
-		JSObject pObj = (JSObject)params[0];
-		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"cURL");
+		JSObject pObj = params[0].ToV8Object();
+		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"cURL");
 		if (!pValue.IsEmpty())
-			strURL = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue));
-		pValue = JS_GetObjectElement(isolate,pObj, L"bFDF");
-			bFDF = CJS_Value(isolate,pValue, GET_VALUE_TYPE(pValue));
-		pValue = JS_GetObjectElement(isolate,pObj, L"bEmpty");
-			bEmpty = CJS_Value(isolate,pValue, GET_VALUE_TYPE(pValue));
-		pValue = JS_GetObjectElement(isolate,pObj,L"aFields");
-			aFields.Attach(CJS_Value(isolate,pValue, GET_VALUE_TYPE(pValue)));
+			strURL = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+		pValue = JS_GetObjectElement(isolate, pObj, L"bFDF");
+		bFDF = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool();
+		pValue = JS_GetObjectElement(isolate, pObj, L"bEmpty");
+		bEmpty = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool();
+		pValue = JS_GetObjectElement(isolate, pObj,L"aFields");
+		aFields.Attach(CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToV8Array());
 	}
 
 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
@@ -710,7 +710,7 @@
 		{
 			CJS_Value valName(isolate);
 			aFields.GetElement(i, valName);
-			CFX_WideString sName = valName.operator CFX_WideString();
+			CFX_WideString sName = valName.ToCFXWideString();
 
 			CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
 			ASSERT(pPDFForm != NULL);
@@ -781,37 +781,42 @@
 	CFX_WideString cSubject = L"";
 	CFX_WideString cMsg = L"";
 
-
-	bUI = params.size()>=1?static_cast<FX_BOOL>(params[0]):TRUE;
-	cTo = params.size()>=2?(const wchar_t*)params[1].operator CFX_WideString():L"";
-	cCc = params.size()>=3?(const wchar_t*)params[2].operator CFX_WideString():L"";
-	cBcc = params.size()>=4?(const wchar_t*)params[3].operator CFX_WideString():L"";
-	cSubject = params.size()>=5?(const wchar_t*)params[4].operator CFX_WideString():L"";
-	cMsg = params.size()>=6?(const wchar_t*)params[5].operator CFX_WideString():L"";
+	if (params.size() >= 1)
+		bUI = params[0].ToBool();
+	if (params.size() >= 2)
+		cTo = params[1].ToCFXWideString();
+	if (params.size() >= 3)
+		cCc = params[2].ToCFXWideString();
+	if (params.size() >= 4)
+		cBcc = params[3].ToCFXWideString();
+	if (params.size() >= 5)
+		cSubject = params[4].ToCFXWideString();
+	if (params.size() >= 6)
+		cMsg = params[5].ToCFXWideString();
 
 	v8::Isolate* isolate = GetIsolate(cc);
 
-	if(params.size()>=1 && params[0].GetType() == VT_object)
+	if(params.size() >= 1 && params[0].GetType() == VT_object)
 	{
-		JSObject  pObj = (JSObject )params[0];
+		JSObject pObj = params[0].ToV8Object();
 
 		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"bUI");
-			bUI = (int)CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue));
+		bUI = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToInt();
 
 		pValue = JS_GetObjectElement(isolate,pObj, L"cTo");
-			cTo = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		cTo = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
 		pValue = JS_GetObjectElement(isolate,pObj, L"cCc");
-			cCc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		cCc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
 		pValue = JS_GetObjectElement(isolate,pObj, L"cBcc");
-			cBcc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		cBcc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
 		pValue = JS_GetObjectElement(isolate,pObj, L"cSubject");
-			cSubject = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		cSubject = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
 		pValue = JS_GetObjectElement(isolate,pObj, L"cMsg");
-			cMsg = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		cMsg = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
 	}
 
@@ -1459,12 +1464,12 @@
 	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
 	ASSERT(pRuntime != NULL);
 
-	CFX_WideString swIconName = params[0].operator CFX_WideString();
+	CFX_WideString swIconName = params[0].ToCFXWideString();
 
-	JSFXObject pJSIcon = (JSFXObject)params[1];
+	JSFXObject pJSIcon = params[1].ToV8Object();
 	if (JS_GetObjDefnID(pJSIcon) != JS_GetObjDefnID(*pRuntime, L"Icon")) return FALSE;
 
-	CJS_EmbedObj* pEmbedObj = ((CJS_Object*)params[1])->GetEmbedObject();
+	CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject()->GetEmbedObject();
 	if (!pEmbedObj)return FALSE;
 	Icon* pIcon = (Icon*)pEmbedObj;
 
@@ -1527,7 +1532,7 @@
 	if (params.size() != 1)return FALSE;
 	if(!m_pIconTree)
 		return FALSE;
-	CFX_WideString swIconName = params[0].operator CFX_WideString();
+	CFX_WideString swIconName = params[0].ToCFXWideString();
 	int iIconCounts = m_pIconTree->GetLength();
 
 	CJS_Context* pContext = (CJS_Context *)cc;
@@ -1563,7 +1568,7 @@
 	if (params.size() != 1)return FALSE;
 	if(!m_pIconTree)
 		return FALSE;
-	CFX_WideString swIconName = params[0].operator CFX_WideString();
+	CFX_WideString swIconName = params[0].ToCFXWideString();
 	return TRUE;
 }
 
@@ -1603,9 +1608,9 @@
 
 	if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
 
-	int nPageNo = params.GetSize() > 0 ? (int)params[0] : 0;
-	int nWordNo = params.GetSize() > 1 ? (int)params[1] : 0;
-	bool bStrip = params.GetSize() > 2 ? (bool)params[2] : true;
+	int nPageNo = params.GetSize() > 0 ? params[0].ToInt() : 0;
+	int nWordNo = params.GetSize() > 1 ? params[1].ToInt() : 0;
+	bool bStrip = params.GetSize() > 2 ? params[2].ToBool() : true;
 
 	CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc();
 	if (!pDocument) return FALSE;
@@ -1675,7 +1680,7 @@
 
 	if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
 
-	int nPageNo = params.GetSize() > 0 ? (int)params[0] : 0;
+	int nPageNo = params.GetSize() > 0 ? params[0].ToInt() : 0;
 
 	CPDF_Document* pDocument = m_pDocument->GetDocument()->GetPDFDoc();
 	ASSERT(pDocument != NULL);
@@ -1847,22 +1852,22 @@
 	{
 		if (params[0].GetType() == VT_object)
 		{
-			JSObject  pObj = (JSObject )params[0];
-			v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"nStart");
-				nStart = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
+			JSObject pObj = params[0].ToV8Object();
+			v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"nStart");
+            nStart = CJS_Value(m_isolate, pValue, GET_VALUE_TYPE(pValue)).ToInt();
 
-			pValue = JS_GetObjectElement(isolate,pObj, L"nEnd");
-				nEnd = (int)CJS_Value(m_isolate,pValue,GET_VALUE_TYPE(pValue));
+			pValue = JS_GetObjectElement(isolate, pObj, L"nEnd");
+			nEnd = CJS_Value(m_isolate, pValue, GET_VALUE_TYPE(pValue)).ToInt();
 		}
 		else
 		{
-			nStart = (int)params[0];
+			nStart = params[0].ToInt();
 		}
 	}
 	else
 	{
-		nStart = (int)params[0];
-		nEnd = (int)params[1];
+		nStart = params[0].ToInt();
+		nEnd = params[1].ToInt();
 	}
 
 	int nTotal = m_pDocument->GetPageCount();
diff --git a/fpdfsdk/src/javascript/Field.cpp b/fpdfsdk/src/javascript/Field.cpp
index 94c5439..8f20ec8 100644
--- a/fpdfsdk/src/javascript/Field.cpp
+++ b/fpdfsdk/src/javascript/Field.cpp
@@ -1072,7 +1072,7 @@
 			for (int i=0,sz=SelArray.GetLength(); i<sz; i++)
 			{
 				SelArray.GetElement(i,SelValue);
-				iSelecting = (FX_INT32)SelValue;
+				iSelecting = SelValue.ToInt();
 				array.Add(iSelecting);
 			}
 		}
@@ -2375,10 +2375,10 @@
 		rcArray.GetElement(3, Lower_Righty);
 
 		FX_FLOAT pArray[4] = {0.0f,0.0f,0.0f,0.0f};
-		pArray[0] = (FX_FLOAT)(FX_INT32)Upper_Leftx;
-		pArray[1] = (FX_FLOAT)(FX_INT32)Lower_Righty;
-		pArray[2] = (FX_FLOAT)(FX_INT32)Lower_Rightx;
-		pArray[3] = (FX_FLOAT)(FX_INT32)Upper_Lefty;
+		pArray[0] = (FX_FLOAT)Upper_Leftx.ToInt();
+		pArray[1] = (FX_FLOAT)Lower_Righty.ToInt();
+		pArray[2] = (FX_FLOAT)Lower_Rightx.ToInt();
+		pArray[3] = (FX_FLOAT)Upper_Lefty.ToInt();
 
 		CPDF_Rect crRect(pArray);
 
@@ -3085,7 +3085,7 @@
 			{
 				CJS_Value ElementValue(m_isolate);
 				ValueArray.GetElement(i, ElementValue);
-				strArray.Add(ElementValue.operator CFX_WideString());
+				strArray.Add(ElementValue.ToCFXWideString());
 			}
 		}
 		else
@@ -3149,7 +3149,7 @@
 					{
 						iIndex = pFormField->GetSelectedIndex(i);
 						ElementValue = pFormField->GetOptionValue(iIndex);
-						if (FXSYS_wcslen((FX_LPCWSTR)ElementValue.operator CFX_WideString()) == 0)
+						if (FXSYS_wcslen(ElementValue.ToCFXWideString().c_str()) == 0)
 							ElementValue = pFormField->GetOptionLabel(iIndex);
 						ValueArray.SetElement(i, ElementValue);
 					}
@@ -3374,8 +3374,8 @@
 
 	int nface = 0;
 	int iSize = params.size();
-	if ( iSize >= 1)
-		nface = (FX_INT32) params[0];
+	if (iSize >= 1)
+		nface = params[0].ToInt();
 
 	CFX_PtrArray FieldArray;
 	GetFormFields(m_FieldName,FieldArray);
@@ -3410,8 +3410,8 @@
 
 	int nface = 0;
 	int iSize = params.size();
-	if ( iSize >= 1)
-		nface = (FX_INT32) params[0];
+	if (iSize >= 1)
+		nface = params[0].ToInt();
 	
 	CFX_PtrArray FieldArray;
 	GetFormFields(m_FieldName,FieldArray);
@@ -3519,15 +3519,14 @@
 	if (!m_bCanSet) return FALSE;
 
 	int iSize = params.size();
-	int nWidget = -1;
-	if ( iSize >= 1)
-		nWidget= (FX_INT32) params[0];
-	else
+	if (iSize < 1)
 		return FALSE;
-	FX_BOOL bCheckit = TRUE;
-	if ( iSize >= 2)
-		bCheckit = params[1];
 
+	int nWidget = params[0].ToInt();
+
+	FX_BOOL bCheckit = TRUE;
+	if (iSize >= 2)
+		bCheckit = params[1].ToBool();
 
 	CFX_PtrArray FieldArray;
 	GetFormFields(m_FieldName,FieldArray);
@@ -3535,9 +3534,9 @@
 
 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
 	ASSERT(pFormField != NULL);
-	
+
 	if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX && pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
-		return FALSE;	
+		return FALSE;
 	if(nWidget <0 || nWidget >= pFormField->CountControls())
 		return FALSE;
 	if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)
@@ -3546,7 +3545,6 @@
 		pFormField->CheckControl(nWidget, bCheckit, TRUE);
 
 	UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
-
 	return TRUE;
 }
 
@@ -3562,14 +3560,10 @@
 	if (!m_bCanSet) return FALSE;
 
 	int iSize = params.size();
-	int nWidget = -1;
-	if ( iSize >= 1)
-		nWidget= (FX_INT32) params[0];
-	else
+	if (iSize < 1)
 		return FALSE;
-	//FX_BOOL bIsDefaultChecked = TRUE;
-	//if ( iSize >= 2)
-	//	bIsDefaultChecked =  params[1];
+
+	int nWidget = params[0].ToInt();
 
 	CFX_PtrArray FieldArray;
 	GetFormFields(m_FieldName,FieldArray);
@@ -3665,16 +3659,15 @@
 FX_BOOL Field::getItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
 {
 	ASSERT(m_pDocument != NULL);
+	int iSize = params.size();
 
 	int nIdx = -1;
-	if (params.size() >=1)
-		nIdx = (FX_INT32) params[0];
+	if (iSize >= 1)
+		nIdx = params[0].ToInt();
+
 	FX_BOOL bExport = TRUE;
-	int iSize = params.size();
-	if ( iSize >= 2)
-	{
-		bExport =(FX_BOOL) params[1];
-	}
+	if (iSize >= 2)
+		bExport = params[1].ToBool();
 
 	CFX_PtrArray FieldArray;
 	GetFormFields(m_FieldName,FieldArray);
@@ -3720,8 +3713,8 @@
 	ASSERT(m_pDocument != NULL);
 
 	int nIndex = -1;
-	if (params.size() >=1)
-		nIndex = (FX_INT32) params[0];
+	if (params.size() >= 1)
+		nIndex = params[0].ToInt();
 
 	CFX_PtrArray FieldArray;
 	GetFormFields(m_FieldName,FieldArray);
@@ -3755,8 +3748,8 @@
 	ASSERT(m_pDocument != NULL);
 
 	int nIndex = -1;
-	if (params.size() >=1)
-		nIndex = (FX_INT32) params[0];
+	if (params.size() >= 1)
+		nIndex = params[0].ToInt();
 
 	CFX_PtrArray FieldArray;
 	GetFormFields(m_FieldName,FieldArray);
diff --git a/fpdfsdk/src/javascript/JS_Value.cpp b/fpdfsdk/src/javascript/JS_Value.cpp
index 6743daa..be37489 100644
--- a/fpdfsdk/src/javascript/JS_Value.cpp
+++ b/fpdfsdk/src/javascript/JS_Value.cpp
@@ -85,7 +85,7 @@
 void CJS_Value::Attach(CJS_Value *pValue)
 {
 	if (pValue)
-		Attach(pValue->ToJSValue(),pValue->GetType());
+		Attach(pValue->ToV8Value(), pValue->GetType());
 }
 
 void CJS_Value::Detach()
@@ -96,63 +96,53 @@
 
 /* ---------------------------------------------------------------------------------------- */
 
-CJS_Value::operator int() const
+int CJS_Value::ToInt() const
 {
-
 	return JS_ToInt32(m_pValue);
-
 }
 
-CJS_Value::operator bool() const
+bool CJS_Value::ToBool() const
 {
-
 	return JS_ToBoolean(m_pValue);
-	
 }
 
-CJS_Value::operator double() const
+double CJS_Value::ToDouble() const
 {
-
 	return JS_ToNumber(m_pValue);
-	
 }
 
-CJS_Value::operator float() const
+float CJS_Value::ToFloat() const
 {
-
-	return (float)JS_ToNumber(m_pValue);
-
+	return (float)ToDouble();
 }
 
-CJS_Value::operator CJS_Object *() const
+CJS_Object* CJS_Value::ToCJSObject() const
 {
-
 	v8::Handle<v8::Object>	pObj = JS_ToObject(m_pValue);
 	return (CJS_Object*)JS_GetPrivate(m_isolate, pObj);
 }
 
-CJS_Value::operator v8::Handle<v8::Object>() const
+v8::Handle<v8::Object> CJS_Value::ToV8Object() const
 {
 	return JS_ToObject(m_pValue);
 }
 
-CJS_Value::operator CFX_WideString() const
+CFX_WideString CJS_Value::ToCFXWideString() const
 {
 	return JS_ToString(m_pValue);
 }
 
-CJS_Value::operator CFX_ByteString() const
+CFX_ByteString CJS_Value::ToCFXByteString() const
 {
-	return CFX_ByteString::FromUnicode(operator CFX_WideString());
+	return CFX_ByteString::FromUnicode(ToCFXWideString());
 }
 
-v8::Handle<v8::Value> CJS_Value::ToJSValue()
+v8::Handle<v8::Value> CJS_Value::ToV8Value() const
 {
 	return m_pValue;
 }
 
-
-CJS_Value::operator v8::Handle<v8::Array>() const
+v8::Handle<v8::Array>CJS_Value::ToV8Array() const
 {
 	if (IsArrayObject())
 		return v8::Handle<v8::Array>::Cast(JS_ToObject(m_pValue));
@@ -245,7 +235,7 @@
 
 void CJS_Value::operator = (CJS_Value value)
 {
-	m_pValue = value.ToJSValue();
+	m_pValue = value.ToV8Value();
 
 	m_eType = value.m_eType;
 }
@@ -342,7 +332,7 @@
 void CJS_PropValue::operator >>(int & iValue) const
 {
 	ASSERT(m_bIsSetting);
-	iValue = CJS_Value::operator int();
+	iValue = CJS_Value::ToInt();
 }
 
 
@@ -355,8 +345,7 @@
 void CJS_PropValue::operator >>(bool& bValue) const
 {
 	ASSERT(m_bIsSetting);
-	bValue = CJS_Value::operator bool();
-
+	bValue = CJS_Value::ToBool();
 }
 
 void CJS_PropValue::operator <<(double dValue)
@@ -368,7 +357,7 @@
 void CJS_PropValue::operator >>(double& dValue) const
 {
 	ASSERT(m_bIsSetting);
-	dValue = CJS_Value::operator double();
+	dValue = CJS_Value::ToDouble();
 }
 
 void CJS_PropValue::operator <<(CJS_Object* pObj)
@@ -380,7 +369,7 @@
 void CJS_PropValue::operator >>(CJS_Object*& ppObj) const
 {
 	ASSERT(m_bIsSetting);
-	ppObj = CJS_Value::operator CJS_Object *();
+	ppObj = CJS_Value::ToCJSObject();
 }
 
 void CJS_PropValue::operator <<(CJS_Document* pJsDoc)
@@ -392,7 +381,7 @@
 void CJS_PropValue::operator >>(CJS_Document*& ppJsDoc) const
 {
 	ASSERT(m_bIsSetting);
-	ppJsDoc = static_cast<CJS_Document*>(CJS_Value::operator CJS_Object *());
+	ppJsDoc = static_cast<CJS_Document*>(CJS_Value::ToCJSObject());
 }
 
 void CJS_PropValue::operator<<(JSFXObject pObj)
@@ -404,7 +393,7 @@
 void CJS_PropValue::operator>>(JSFXObject &ppObj) const
 {
 	ASSERT(m_bIsSetting);
-	ppObj = CJS_Value::operator JSFXObject ();
+	ppObj = CJS_Value::ToV8Object();
 }
 
 
@@ -426,7 +415,7 @@
 void CJS_PropValue::operator >>(CFX_ByteString &string) const
 {
 	ASSERT(m_bIsSetting);
-	string = CJS_Value::operator CFX_ByteString();
+	string = CJS_Value::ToCFXByteString();
 }
 
 void CJS_PropValue::operator <<(FX_LPCWSTR c_string)
@@ -438,7 +427,7 @@
 void CJS_PropValue::operator >>(CFX_WideString &wide_string) const
 {
 	ASSERT(m_bIsSetting);
-	wide_string = CJS_Value::operator CFX_WideString();
+	wide_string = CJS_Value::ToCFXWideString();
 }
 
 void CJS_PropValue::operator <<(CFX_WideString wide_string)
@@ -508,7 +497,7 @@
 	if (m_pArray.IsEmpty())
 		m_pArray = JS_NewArray(m_isolate);
 
-	JS_PutArrayElement(m_pArray,index,value.ToJSValue(),value.GetType());
+	JS_PutArrayElement(m_pArray, index, value.ToV8Value(), value.GetType());
 }
 
 int CJS_Array::GetLength()
diff --git a/fpdfsdk/src/javascript/PublicMethods.cpp b/fpdfsdk/src/javascript/PublicMethods.cpp
index e3479f1..ff5b9a7 100644
--- a/fpdfsdk/src/javascript/PublicMethods.cpp
+++ b/fpdfsdk/src/javascript/PublicMethods.cpp
@@ -430,7 +430,7 @@
 		val.ConvertToArray(StrArray);
 		return StrArray;
 	}
-	CFX_WideString wsStr = val.operator CFX_WideString();
+	CFX_WideString wsStr = val.ToCFXWideString();
 	CFX_ByteString t = CFX_ByteString::FromUnicode(wsStr);
 	const char * p = (const char *)t;
 
@@ -1071,12 +1071,12 @@
 	
 	if (strValue.IsEmpty()) return TRUE;
 	
-	int iDec = params[0];
-	int iSepStyle = params[1];
-	int iNegStyle = params[2];
+	int iDec = params[0].ToInt();
+	int iSepStyle = params[1].ToInt();
+	int iNegStyle = params[2].ToInt();
 	// params[3] is iCurrStyle, it's not used.
-	std::wstring wstrCurrency(params[4].operator CFX_WideString());
-	FX_BOOL bCurrencyPrepend = params[5];
+	std::wstring wstrCurrency(params[4].ToCFXWideString());
+	FX_BOOL bCurrencyPrepend = params[5].ToBool();
 	
 	if (iDec < 0) iDec = -iDec;
 	
@@ -1268,7 +1268,7 @@
 	
 	if(params.size() < 2)
 		return FALSE;
-	int iSepStyle = params[1];
+	int iSepStyle = params[1].ToInt();
 	
 	if (iSepStyle < 0 || iSepStyle > 3)
 		iSepStyle = 0;
@@ -1406,30 +1406,20 @@
 	}
 	if(!pEvent->m_pValue)
 		return FALSE;
+
 	CFX_WideString& Value = pEvent->Value();
-	
-//     HWND hMainFrame = NULL;
-// 	
-// 	CPDFSDK_FormFillApp *pApp = pContext->GetReaderApp();
-// 	ASSERT(pApp);
-// 	hMainFrame = pApp->GetMainFrameWnd();
-		
 	CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value));
-	
 	if (strValue.IsEmpty())
 		return TRUE;
-	
-	int iDec = params[0];
-	int iSepStyle = params[1];
-	
-	//ASSERT(iDec > 0);
+
+	int iDec = params[0].ToInt();
 	if (iDec < 0)
 		iDec = -iDec;
-	
+
+	int iSepStyle = params[1].ToInt();
 	if (iSepStyle < 0 || iSepStyle > 3)
 		iSepStyle = 0;
-	
-	
+
 	//////////////////////////////////////////////////////
 	//for processing decimal places
 	double dValue = atof(strValue);
@@ -1527,16 +1517,16 @@
 	{
 		sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
 		return FALSE;
-	}	
+	}
 	if(!pEvent->m_pValue)
 		return FALSE;
+
 	CFX_WideString& val = pEvent->Value();
-	
-	CFX_WideString strValue = val;	
-	if (strValue.IsEmpty()) return TRUE;		
+	CFX_WideString strValue = val;
+	if (strValue.IsEmpty())
+		return TRUE;
 
-	CFX_WideString sFormat = params[0].operator CFX_WideString();
-
+	CFX_WideString sFormat = params[0].ToCFXWideString();
 	FX_BOOL bWrongFormat = FALSE;
 	double dDate = 0.0f;
 
@@ -1558,9 +1548,8 @@
 		Alert(pContext, swMsg);
 		return FALSE;
 	}
-	
-	val =  MakeFormatDate(dDate,sFormat);
 
+	val =  MakeFormatDate(dDate,sFormat);
 	return TRUE;
 }
 
@@ -1636,17 +1625,17 @@
 	{
 		sError = L"AFDate_KeystrokeEx's parameters' size r not correct";
 		return FALSE;
-	}	
-	
+	}
+
 	if (pEvent->WillCommit())
 	{
 		if(!pEvent->m_pValue)
 			return FALSE;
 		CFX_WideString strValue = pEvent->Value();
-		if (strValue.IsEmpty()) return TRUE;
+		if (strValue.IsEmpty())
+			return TRUE;
 
-		CFX_WideString sFormat = params[0].operator CFX_WideString();
-
+		CFX_WideString sFormat = params[0].ToCFXWideString();
 		FX_BOOL bWrongFormat = FALSE;
 		double dRet = MakeRegularDate(strValue,sFormat,bWrongFormat);
 		if (bWrongFormat || JS_PortIsNan(dRet))
@@ -1674,7 +1663,7 @@
 		return FALSE;
 	}
 
-	int iIndex = params[0];
+	int iIndex = params[0].ToInt();
 	FX_LPCWSTR cFormats[] =  {L"m/d", L"m/d/yy", L"mm/dd/yy", L"mm/yy", L"d-mmm", L"d-mmm-yy", L"dd-mmm-yy",
 		L"yy-mm-dd", L"mmm-yy", L"mmmm-yy", L"mmm d, yyyy", L"mmmm d, yyyy",
 		L"m/d/yy h:MM tt", L"m/d/yy HH:MM" };
@@ -1705,7 +1694,7 @@
 		return FALSE;
 	}
 
-	int iIndex = params[0];
+	int iIndex = params[0].ToInt();
 	FX_LPCWSTR cFormats[] =  {L"m/d", L"m/d/yy", L"mm/dd/yy", L"mm/yy", L"d-mmm", L"d-mmm-yy", L"dd-mmm-yy",
 		L"yy-mm-dd", L"mmm-yy", L"mmmm-yy", L"mmm d, yyyy", L"mmmm d, yyyy",
 		L"m/d/yy h:MM tt", L"m/d/yy HH:MM" };
@@ -1735,7 +1724,7 @@
 		return FALSE;
 	}
 
-	int iIndex = params[0];
+	int iIndex = params[0].ToInt();
 	FX_LPCWSTR cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss", L"h:MM:ss tt"};
 
 	ASSERT(iIndex<FX_ArraySize(cFormats));
@@ -1761,7 +1750,7 @@
 		return FALSE;
 	}
 
-	int iIndex = params[0];
+	int iIndex = params[0].ToInt();
 	FX_LPCWSTR cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss", L"h:MM:ss tt"};
 
 	ASSERT(iIndex<FX_ArraySize(cFormats));
@@ -1799,7 +1788,7 @@
 	}
 
 	std::string cFormat;
-	int iIndex = params[0];
+	int iIndex = params[0].ToInt();
 
 	CJS_EventHandler* pEvent = pContext->GetEventHandler();
 	ASSERT(pEvent != NULL);
@@ -1858,11 +1847,12 @@
 		return FALSE;
 	CFX_WideString& valEvent = pEvent->Value();
 
-	CFX_WideString wstrMask = params[0].operator CFX_WideString();
-	if (wstrMask.IsEmpty()) return TRUE;
-	
+	CFX_WideString wstrMask = params[0].ToCFXWideString();
+	if (wstrMask.IsEmpty())
+		return TRUE;
+
 	std::wstring wstrValue(valEvent);
-	
+
 	if (pEvent->WillCommit())
 	{
 		if (wstrValue.empty())
@@ -1871,7 +1861,7 @@
 		for (std::wstring::iterator it = wstrValue.begin(); it != wstrValue.end(); it++)
 		{
 			wchar_t w_Value = *it;
-            if (!maskSatisfied(w_Value,wstrMask[iIndexMask]))
+			if (!maskSatisfied(w_Value,wstrMask[iIndexMask]))
 				break;
 			iIndexMask++;
 		}
@@ -1884,31 +1874,27 @@
 		return TRUE;
 	}
 
-	
 	CFX_WideString &wideChange = pEvent->Change();
 	std::wstring wChange(wideChange);
-	
 	if (wChange.empty())
 		return TRUE;
-    int iIndexMask = pEvent->SelStart();
-	//iIndexMask++;
-	
-	
+
+	int iIndexMask = pEvent->SelStart();
+
 	if (wstrValue.length() - (pEvent->SelEnd()-pEvent->SelStart()) + wChange.length() > (FX_DWORD)wstrMask.GetLength())
 	{
 		Alert(pContext, JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG));
 		pEvent->Rc() = FALSE;
 		return TRUE;
 	}
-	
-	
+
 	if (iIndexMask >= wstrMask.GetLength() && (!wChange.empty()))
 	{
 		Alert(pContext, JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG));
 		pEvent->Rc() = FALSE;
 		return TRUE;
 	}
-	
+
 	for (std::wstring::iterator it = wChange.begin(); it != wChange.end(); it++)
 	{
 		if (iIndexMask >= wstrMask.GetLength())
@@ -1920,21 +1906,18 @@
 		wchar_t w_Mask = wstrMask[iIndexMask];
 		if (!isReservedMaskChar(w_Mask))
 		{
-			//wChange.insert(it,w_Mask);				
 			*it = w_Mask;
 		}
 		wchar_t w_Change = *it;
-		
-        if (!maskSatisfied(w_Change,w_Mask))
+		if (!maskSatisfied(w_Change,w_Mask))
 		{
 			pEvent->Rc() = FALSE;
 			return TRUE;
 		}
 		iIndexMask++;
 	}
-	
-	wideChange = wChange.c_str();	
-	
+
+	wideChange = wChange.c_str();
 	return TRUE;
 }
 
@@ -1956,7 +1939,7 @@
 	}
 
 	std::string cFormat;
-	int iIndex = (int)params[0];	
+	int iIndex = params[0].ToInt();
 
 	if(!pEvent->m_pValue)
 		return FALSE;
@@ -2050,8 +2033,8 @@
 		return FALSE;
 	}
 
-	CFX_WideString sValue = params[0].operator CFX_WideString();
-	CFX_WideString sFormat = params[1].operator CFX_WideString();
+	CFX_WideString sValue = params[0].ToCFXWideString();
+	CFX_WideString sFormat = params[1].ToCFXWideString();
 
 	FX_BOOL bWrongFormat = FALSE;
 	double dDate = MakeRegularDate(sValue,sFormat,bWrongFormat);
@@ -2063,9 +2046,8 @@
 		Alert((CJS_Context *)cc, swMsg);
 		return FALSE;
 	}
-	
-	vRet = dDate;
 
+	vRet = dDate;
 	return TRUE;
 }
 
@@ -2080,7 +2062,7 @@
 		return FALSE;
 	}
 
-	vRet = (double)AF_Simple(params[0].operator CFX_WideString(), (double)params[1], (double)params[2]);
+	vRet = (double)AF_Simple(params[0].ToCFXWideString(), params[1].ToDouble(), params[2].ToDouble());
 	return TRUE;
 }
 
@@ -2094,7 +2076,7 @@
 		sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
 		return FALSE;
 	}
-    vRet = ParseStringToNumber(params[0].operator CFX_WideString());
+	vRet = ParseStringToNumber(params[0].ToCFXWideString());
 	return TRUE;
 }
 
@@ -2118,7 +2100,7 @@
 		sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
 		return FALSE;
 	}
-	
+
 	CPDFSDK_Document* pReaderDoc = pContext->GetReaderDocument();
     ASSERT(pReaderDoc != NULL);
 
@@ -2129,7 +2111,7 @@
 	ASSERT(pInterForm != NULL);
 
 	double dValue;
-	CFX_WideString sFunction = params[0].operator CFX_WideString();
+	CFX_WideString sFunction = params[0].ToCFXWideString();
 	if (wcscmp(sFunction, L"PRD") == 0)
     	dValue = 1.0;
 	else
@@ -2143,7 +2125,7 @@
 	{
 		CJS_Value jsValue(isolate);
 		FieldNameArray.GetElement(i,jsValue);
-        CFX_WideString wsFieldName = jsValue.operator CFX_WideString();
+		CFX_WideString wsFieldName = jsValue.ToCFXWideString();
 
         for (int j=0,jsz=pInterForm->CountFields(wsFieldName); j<jsz; j++)
 		{
@@ -2214,7 +2196,7 @@
 	dValue = (double)floor(dValue * FXSYS_pow((double)10,(double)6) + 0.49) / FXSYS_pow((double)10,(double)6);
 	CJS_Value jsValue(isolate,dValue);
 	if((CJS_EventHandler*)pContext->GetEventHandler()->m_pValue)
-		((CJS_EventHandler*)pContext->GetEventHandler())->Value() = jsValue;
+		((CJS_EventHandler*)pContext->GetEventHandler())->Value() = jsValue.ToCFXWideString();
 
 	return TRUE;
 }
@@ -2240,28 +2222,30 @@
 	if (pEvent->Value().IsEmpty() )
 		return TRUE;
 	double dEentValue = atof(CFX_ByteString::FromUnicode(pEvent->Value()));
-	FX_BOOL bGreaterThan, bLessThan;
-	double  dGreaterThan, dLessThan;
-    bGreaterThan = (FX_BOOL)params[0];
+	FX_BOOL bGreaterThan = params[0].ToBool();
+	double dGreaterThan = params[1].ToDouble();
+	FX_BOOL bLessThan = params[2].ToBool();
+	double dLessThan = params[3].ToDouble();
 	CFX_WideString swMsg;
-	dGreaterThan = (double)params[1];
-	bLessThan = (FX_BOOL)params[2];
-	dLessThan = (double)params[3];
 
 	if (bGreaterThan && bLessThan)
 	{
 		if (dEentValue < dGreaterThan || dEentValue > dLessThan)
-			swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE1),(FX_LPCWSTR)params[1].operator CFX_WideString(), (FX_LPCWSTR)params[3].operator CFX_WideString());
+			swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE1),
+						 params[1].ToCFXWideString().c_str(),
+						 params[3].ToCFXWideString().c_str());
 	}
 	else if (bGreaterThan)
 	{
 		if (dEentValue < dGreaterThan)
-			swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE2), (FX_LPCWSTR)params[1].operator CFX_WideString());
+			swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE2),
+						 params[1].ToCFXWideString().c_str());
 	}
 	else if (bLessThan)
 	{
 		if (dEentValue > dLessThan)
-			swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE3), (FX_LPCWSTR)params[3].operator CFX_WideString());
+			swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE3),
+						 params[3].ToCFXWideString().c_str());
 	}
 
 	if (!swMsg.IsEmpty())
@@ -2286,7 +2270,7 @@
 
 	CJS_Array nums(isolate);
 
-	CFX_WideString str = params[0].operator CFX_WideString();
+	CFX_WideString str = params[0].ToCFXWideString();
 	CFX_WideString sPart;
 
 	if (str.GetAt(0) == L'.' || str.GetAt(0) == L',')
diff --git a/fpdfsdk/src/javascript/app.cpp b/fpdfsdk/src/javascript/app.cpp
index ec910e8..45998b0 100644
--- a/fpdfsdk/src/javascript/app.cpp
+++ b/fpdfsdk/src/javascript/app.cpp
@@ -338,19 +338,19 @@
 	{
 		if (params[0].GetType() == VT_object)
 		{
-			JSObject pObj = params[0];
+			JSObject pObj = params[0].ToV8Object();
 			{
 				v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"cMsg");
-				swMsg = CJS_Value(isolate,pValue,VT_unknown).operator CFX_WideString();
+				swMsg = CJS_Value(isolate, pValue, VT_unknown).ToCFXWideString();
 
-				pValue = JS_GetObjectElement(isolate,pObj,L"cTitle");
-				swTitle = CJS_Value(isolate, pValue,VT_unknown).operator CFX_WideString();
+				pValue = JS_GetObjectElement(isolate, pObj, L"cTitle");
+				swTitle = CJS_Value(isolate, pValue, VT_unknown).ToCFXWideString();
 
-				pValue = JS_GetObjectElement(isolate,pObj,L"nIcon");
-				iIcon = (int)CJS_Value(isolate,pValue,VT_unknown);
+				pValue = JS_GetObjectElement(isolate, pObj, L"nIcon");
+				iIcon = CJS_Value(isolate, pValue, VT_unknown).ToInt();
 
-				pValue = JS_GetObjectElement(isolate,pObj,L"nType");
-				iType = (int)CJS_Value(isolate,pValue,VT_unknown);
+				pValue = JS_GetObjectElement(isolate, pObj, L"nType");
+				iType = CJS_Value(isolate, pValue, VT_unknown).ToInt();
 			}
 
 			if (swMsg == L"")
@@ -368,22 +368,12 @@
 					for(int i = 0; i < iLenth; i++)
 					{
 						carray.GetElement(i, *pValue);
-						swMsg += (*pValue).operator CFX_WideString();
+						swMsg += (*pValue).ToCFXWideString();
 						if (i < iLenth - 1)
 							swMsg += L",  ";
 					}
 
 					if(pValue) delete pValue;
-//					if ((iLenth > 1) && pValue)
-//					{
-//						delete[]pValue;
-//						pValue = NULL;
-//					}
-//					else if ((iLenth == 1) && pValue)
-//					{
-//						delete pValue;
-//						pValue = NULL;
-//					}
 				}
 			}
 
@@ -392,7 +382,7 @@
 		}
 		else if (params[0].GetType() == VT_boolean)
 		{
-			FX_BOOL bGet = (FX_BOOL)params[0];
+			FX_BOOL bGet = params[0].ToBool();
 			if (bGet)
 				swMsg = L"true";
 			else
@@ -402,7 +392,7 @@
 		}
 		else
 		{
-			swMsg = params[0];
+			swMsg = params[0].ToCFXWideString();
 			swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
 		}
 	}
@@ -410,7 +400,7 @@
 	{
 		if (params[0].GetType() == VT_boolean)
 		{
-			FX_BOOL bGet = (FX_BOOL)params[0];
+			FX_BOOL bGet = params[0].ToBool();
 			if (bGet)
 				swMsg = L"true";
 			else
@@ -418,18 +408,18 @@
 		}
 		else
 		{
-			swMsg = params[0];
+			swMsg = params[0].ToCFXWideString();
 		}
 		swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
 
 		for(int i = 1;i<iSize;i++)
 		{
 			if (i == 1)
-				iIcon = int(params[i]);
+				iIcon = params[i].ToInt();
 			if (i == 2)
-				iType = int(params[i]);
+				iType = params[i].ToInt();
 			if (i == 3)
-				swTitle = params[i];
+				swTitle = params[i].ToCFXWideString();
 		}
 	}
 
@@ -453,15 +443,12 @@
 		CJS_Context* pContext = (CJS_Context*)cc;
 		CJS_Runtime* pRuntime = pContext->GetJSRuntime();
 		CPDFDoc_Environment * pEnv = pRuntime->GetReaderApp();
-		pEnv->JS_appBeep((int)params[0]);
-
+		pEnv->JS_appBeep(params[0].ToInt());
 		return TRUE;
 	}
-	else
-	{
-		sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
-		return FALSE;
-	}
+
+	sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
+	return FALSE;
 }
 
 FX_BOOL app::findComponent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
@@ -492,14 +479,14 @@
 	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
 	ASSERT(pRuntime != NULL);
 
-	CFX_WideString script = params.size() > 0 ?  (FX_LPCWSTR)(params[0].operator CFX_WideString()) : L"";
+	CFX_WideString script = params.size() > 0 ?  (FX_LPCWSTR)(params[0].ToCFXWideString()) : L"";
 	if (script.IsEmpty())
 	{
 		sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE);
 		return TRUE;
 	}
 
-	FX_DWORD dwInterval = params.size() > 1 ? (int)params[1] : 1000;
+	FX_DWORD dwInterval = params.size() > 1 ? params[1].ToInt() : 1000;
 
 	CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
 	ASSERT(pApp);
@@ -541,17 +528,18 @@
 	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
 	ASSERT(pRuntime != NULL);
 
-	CFX_WideString script = params.size() > 0 ?  (FX_LPCWSTR)(params[0].operator CFX_WideString()) : L"";
+	CFX_WideString script = params.size() > 0 ?  (FX_LPCWSTR)(params[0].ToCFXWideString()) : L"";
 	if (script.IsEmpty())
 	{
 		sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE);
 		return TRUE;
 	}
 
-	FX_DWORD dwTimeOut = params.size() > 1 ? (int)params[1] : 1000;
+	FX_DWORD dwTimeOut = params.size() > 1 ? params[1].ToInt() : 1000;
 
 	CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
 	ASSERT(pApp);
+
 	CJS_Timer* pTimer = new CJS_Timer(this, pApp);
 	m_aTimer.Add(pTimer);
 
@@ -559,12 +547,9 @@
 	pTimer->SetRuntime(pRuntime);
 	pTimer->SetJScript(script);
 	pTimer->SetTimeOut(dwTimeOut);
-//	pTimer->SetStartTime(GetTickCount());
-//	pTimer->SetJSTimer(1000);
 	pTimer->SetJSTimer(dwTimeOut);
 
 	JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj"));
-//	ASSERT(pRetObj != NULL);
 
 	CJS_TimerObj* pJS_TimerObj = (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(),pRetObj);
 	ASSERT(pJS_TimerObj != NULL);
@@ -594,11 +579,11 @@
 
 	if (params[0].GetType() == VT_fxobject)
 	{
-		JSFXObject pObj = (JSFXObject)params[0];
+		JSFXObject pObj = params[0].ToV8Object();
 		{
 			if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj"))
 			{
-				if (CJS_Object* pJSObj = (CJS_Object*)params[0])
+				if (CJS_Object* pJSObj = params[0].ToCJSObject())
 				{
 					if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject())
 					{
@@ -642,11 +627,11 @@
 
 	if (params[0].GetType() == VT_fxobject)
 	{
-		JSFXObject pObj = (JSFXObject)params[0];
+		JSFXObject pObj = params[0].ToV8Object();
 		{
 			if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj"))
 			{
-				if (CJS_Object* pJSObj = (CJS_Object*)params[0])
+				if (CJS_Object* pJSObj = params[0].ToCJSObject())
 				{
 					if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject())
 					{
@@ -730,8 +715,6 @@
 FX_BOOL app::mailMsg(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
 {
 	CJS_Context* pContext = (CJS_Context*)cc;
-	ASSERT(pContext != NULL);
-
 	v8::Isolate* isolate = GetIsolate(cc);
 
 	FX_BOOL bUI = TRUE;
@@ -740,42 +723,48 @@
 	CFX_WideString cBcc = L"";
 	CFX_WideString cSubject = L"";
 	CFX_WideString cMsg = L"";
-	if(params.size() < 2)
+
+	if (params.size() < 1)
 		return FALSE;
 
-	bUI = params.size()>=1?(int)params[0]:TRUE;
-	cTo = params.size()>=2?(const wchar_t*)(FX_LPCWSTR)params[1].operator CFX_WideString():L"";
-	cCc = params.size()>=3?(const wchar_t*)(FX_LPCWSTR)params[2].operator CFX_WideString():L"";
-	cBcc = params.size()>=4?(const wchar_t*)(FX_LPCWSTR)params[3].operator CFX_WideString():L"";
-	cSubject = params.size()>=5?(const wchar_t*)(FX_LPCWSTR)params[4].operator CFX_WideString():L"";
-	cMsg = params.size()>=6?(const wchar_t*)(FX_LPCWSTR)params[5].operator CFX_WideString():L"";
-
-
 	if (params[0].GetType() == VT_object)
 	{
-		JSObject pObj = (JSObject)params[0];
+		JSObject pObj = params[0].ToV8Object();
 
-		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"bUI");
-			bUI = (int)CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue));
+		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"bUI");
+		bUI = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool();
 
 		pValue = JS_GetObjectElement(isolate, pObj, L"cTo");
-			cTo = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		cTo = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
-		pValue = JS_GetObjectElement(isolate,pObj, L"cCc");
-			cCc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		pValue = JS_GetObjectElement(isolate, pObj, L"cCc");
+		cCc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
-		pValue = JS_GetObjectElement(isolate,pObj, L"cBcc");
-			cBcc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		pValue = JS_GetObjectElement(isolate, pObj, L"cBcc");
+		cBcc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
-		pValue = JS_GetObjectElement(isolate,pObj, L"cSubject");
-			cSubject = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		pValue = JS_GetObjectElement(isolate, pObj, L"cSubject");
+		cSubject = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
-		pValue = JS_GetObjectElement(isolate,pObj, L"cMsg");
-			cMsg = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		pValue = JS_GetObjectElement(isolate, pObj, L"cMsg");
+		cMsg = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+	} else {
+		if (params.size() < 2)
+			return FALSE;
+
+		bUI = params[0].ToBool();
+		cTo = params[1].ToCFXWideString();
+
+		if (params.size() >= 3)
+			cCc = params[2].ToCFXWideString();
+		if (params.size() >= 4)
+			cBcc = params[3].ToCFXWideString();
+		if (params.size() >= 5)
+			cSubject = params[4].ToCFXWideString();
+		if (params.size() >= 6)
+			cMsg = params[5].ToCFXWideString();
 	}
 
-
-
 	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
 	ASSERT(pRuntime != NULL);
 
@@ -784,10 +773,8 @@
 
 	pRuntime->BeginBlock();
 	pApp->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str());
-	///////////////////////////////////////////////////////////////////////////////////////////////
 	pRuntime->EndBlock();
 
-	//return bRet;
 	return FALSE;
 }
 
@@ -877,40 +864,40 @@
 	int iLength = params.size();
 	if (iLength > 0 && params[0].GetType() == VT_object)
 	{
-		JSObject pObj = (JSObject )params[0];
+		JSObject pObj = params[0].ToV8Object();
 		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj,L"cQuestion");
-		swQuestion = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		swQuestion = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
 		pValue = JS_GetObjectElement(isolate,pObj,L"cTitle");
-		swTitle = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		swTitle = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
 		pValue = JS_GetObjectElement(isolate,pObj,L"cDefault");
-		swDefault = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		swDefault = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
 		pValue = JS_GetObjectElement(isolate,pObj,L"cLabel");
-		swLabel = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
+		swLabel = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
 
 		pValue = JS_GetObjectElement(isolate,pObj,L"bPassword");
-		bPassWord = (bool)CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue));
+		bPassWord = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToBool();
 	}
 	else
 	{
 		switch(iLength)
 		{
 		case 5:
-			swLabel = params[4];
+			swLabel = params[4].ToCFXWideString();
 			// FALLTHROUGH
 		case 4:
-			bPassWord = params[3];
+			bPassWord = params[3].ToBool();
 			// FALLTHROUGH
 		case 3:
-			swDefault = params[2];
+			swDefault = params[2].ToCFXWideString();
 			// FALLTHROUGH
 		case 2:
-			swTitle = params[1];
+			swTitle = params[1].ToCFXWideString();
 			// FALLTHROUGH
 		case 1:
-			swQuestion = params[0];
+			swQuestion = params[0].ToCFXWideString();
 			// FALLTHROUGH
 		default:
 			break;
diff --git a/fpdfsdk/src/javascript/color.cpp b/fpdfsdk/src/javascript/color.cpp
index a338624..ddf6ed4 100644
--- a/fpdfsdk/src/javascript/color.cpp
+++ b/fpdfsdk/src/javascript/color.cpp
@@ -104,9 +104,8 @@
 	if (nArrayLen < 1) return;
 
 	CJS_Value value(array.GetIsolate());
-	CFX_ByteString sSpace;
 	array.GetElement(0, value);
-	sSpace = value;
+	CFX_ByteString sSpace = value.ToCFXByteString();
 
 	double d1 = 0;
 	double d2 = 0;
@@ -116,25 +115,25 @@
 	if (nArrayLen > 1)
 	{
 		array.GetElement(1, value);
-		d1 = value;
+		d1 = value.ToDouble();
 	}
 
 	if (nArrayLen > 2)
 	{
 		array.GetElement(2, value);
-		d2 = value;
+		d2 = value.ToDouble();
 	}
 
 	if (nArrayLen > 3)
 	{
 		array.GetElement(3, value);
-		d3 = value;
+		d3 = value.ToDouble();
 	}
 
 	if (nArrayLen > 4)
 	{
 		array.GetElement(4, value);
-		d4 = value;
+		d4 = value.ToDouble();
 	}
 
 	if (sSpace == "T")
@@ -199,10 +198,9 @@
 	CPWL_Color crSource;
 	ConvertArrayToPWLColor(aSource, crSource);
 
-	CFX_ByteString sDestSpace = params[1];
-
+	CFX_ByteString sDestSpace = params[1].ToCFXByteString();
 	int nColorType = COLORTYPE_TRANSPARENT;
-	
+
 	if (sDestSpace == "T")
 	{
 		nColorType = COLORTYPE_TRANSPARENT;
diff --git a/fpdfsdk/src/javascript/event.cpp b/fpdfsdk/src/javascript/event.cpp
index 620b43e..fb57e74 100644
--- a/fpdfsdk/src/javascript/event.cpp
+++ b/fpdfsdk/src/javascript/event.cpp
@@ -352,7 +352,7 @@
 	CFX_WideString & val = pEvent->Value();
 	if (vp.IsSetting())
 	{
-		val = vp;
+		vp >> val;
 	}
 	else
 	{
diff --git a/fpdfsdk/src/javascript/global.cpp b/fpdfsdk/src/javascript/global.cpp
index 1a59e25..b778239 100644
--- a/fpdfsdk/src/javascript/global.cpp
+++ b/fpdfsdk/src/javascript/global.cpp
@@ -175,7 +175,7 @@
 			{
 				bool bData;
 				vp >> bData;
-				return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, (bool)vp, "", v8::Handle<v8::Object>(), FALSE);
+				return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, bData, "", v8::Handle<v8::Object>(), FALSE);
 			}
 		case VT_string:
 			{
@@ -185,20 +185,9 @@
 			}
 		case VT_object:
 			{
-				JSObject pData = (JSObject)vp;
+				JSObject pData;
+				vp >> pData;
 				return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, false, "", pData, FALSE);
-// 				else
-// 				{
-// 					if (vp.IsArrayObject())
-// 					{
-// 						CJS_Array array;
-// 						vp.ConvertToArray(array);
-// 						return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, false, "", 
-// 							(Dobject*)(Darray*)array, FALSE);
-// 					}
-// 					else
-// 						return FALSE;
-// 				}
 			}
 		case VT_null:
 			{
@@ -279,14 +268,14 @@
 		return FALSE;
 	}
 
-	CFX_ByteString sName = params[0];
+	CFX_ByteString sName = params[0].ToCFXByteString();
 
 	js_global_data* pData = NULL;
 	if (m_mapGlobal.Lookup(sName, (FX_LPVOID&)pData))
 	{
 		if (pData && !pData->bDeleted)
 		{
-			pData->bPersistent = (bool)params[1];
+			pData->bPersistent = params[1].ToBool();
 			return TRUE;
 		}
 	}
@@ -435,7 +424,7 @@
 			break;
 		case VT_string:
 			{
-				CFX_ByteString sValue = CJS_Value(isolate, v, VT_string);
+				CFX_ByteString sValue = CJS_Value(isolate, v, VT_string).ToCFXByteString();
 				CJS_KeyValue* pObjElement = new CJS_KeyValue;
 				pObjElement->nType = JS_GLOBALDATA_TYPE_STRING;
 				pObjElement->sKey = sKey;
diff --git a/fpdfsdk/src/javascript/util.cpp b/fpdfsdk/src/javascript/util.cpp
index 0ac98dd..6898d0c 100644
--- a/fpdfsdk/src/javascript/util.cpp
+++ b/fpdfsdk/src/javascript/util.cpp
@@ -142,7 +142,7 @@
 	int iSize = params.size();
 	if (iSize < 1)
 		return FALSE;
-	std::wstring  c_ConvChar((const wchar_t*)(FX_LPCWSTR)params[0].operator CFX_WideString());
+	std::wstring c_ConvChar(params[0].ToCFXWideString().c_str());
 	std::vector<std::wstring> c_strConvers;
 	int iOffset = 0;
 	int iOffend = 0;
@@ -182,13 +182,13 @@
 		switch (ParstDataType(&c_strFormat))
 		{
 			case UTIL_INT:
-				strSegment.Format(c_strFormat.c_str(),(int)params[iIndex]);
+				strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt());
 				break;
 			case UTIL_DOUBLE:
-				strSegment.Format(c_strFormat.c_str(),(double)params[iIndex]);
+				strSegment.Format(c_strFormat.c_str(), params[iIndex].ToDouble());
 				break;
 			case UTIL_STRING:
-				strSegment.Format(c_strFormat.c_str(),(FX_LPCWSTR)params[iIndex].operator CFX_WideString());
+				strSegment.Format(c_strFormat.c_str(), params[iIndex].ToCFXWideString().c_str());
 				break;
 			default:
 				strSegment.Format(L"%S", c_strFormat.c_str());
@@ -229,8 +229,7 @@
 
 	if (p1.GetType() == VT_number)
 	{
-		int nFormat = p1;
-
+		int nFormat = p1.ToInt();
 		CFX_WideString swResult;
 
 		switch (nFormat)
@@ -271,13 +270,12 @@
 	}
 	else if (p1.GetType() == VT_string)
 	{
-		std::basic_string<wchar_t> cFormat = (FX_LPCWSTR)p1.operator CFX_WideString();		
+		std::basic_string<wchar_t> cFormat = p1.ToCFXWideString().c_str();
 
 		bool bXFAPicture = false;
 		if (iSize > 2)
 		{
-			//CJS_Value value;
-			bXFAPicture = params[2];
+			bXFAPicture = params[2].ToBool();
 		}
 
 		if (bXFAPicture)
@@ -467,8 +465,8 @@
 	int iSize = params.size();
 	if (iSize<2)
 		return FALSE;
-	CFX_WideString sFormat = params[0].operator CFX_WideString();
-	CFX_WideString sSource = params[1].operator CFX_WideString();
+	CFX_WideString sFormat = params[0].ToCFXWideString();
+	CFX_WideString sSource = params[1].ToCFXWideString();
 	std::string cFormat = CFX_ByteString::FromUnicode(sFormat).c_str();
 	std::string cSource = CFX_ByteString::FromUnicode(sSource).c_str();
 	std::string cDest;
@@ -582,9 +580,9 @@
 	int iSize = params.size();
 	if (iSize < 2)
 		return FALSE;
-	CFX_WideString sFormat = params[0].operator CFX_WideString();
-	CFX_WideString sDate = params[1].operator CFX_WideString();
 
+	CFX_WideString sFormat = params[0].ToCFXWideString();
+	CFX_WideString sDate = params[1].ToCFXWideString();
 	double dDate = JS_GetDateTime();
 	if (sDate.GetLength() > 0)
 	{
@@ -638,7 +636,7 @@
 	int iSize = params.size();
 	if (iSize == 0)
 		return FALSE;
-	int nByte = (int)params[0];
+	int nByte = params[0].ToInt();
 	unsigned char cByte = (unsigned char)nByte;
 	CFX_WideString csValue;
 	csValue.Format(L"%c", cByte);