Initial commit.
diff --git a/fpdfsdk/include/javascript/JS_Value.h b/fpdfsdk/include/javascript/JS_Value.h
new file mode 100644
index 0000000..f87f9e1
--- /dev/null
+++ b/fpdfsdk/include/javascript/JS_Value.h
@@ -0,0 +1,186 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _JS_VALUE_H_

+#define _JS_VALUE_H_

+

+class CJS_Array;

+class CJS_Date;

+

+class CJS_Value

+{

+public:

+	CJS_Value(v8::Isolate* isolate);

+	CJS_Value(v8::Isolate* isolate, v8::Handle<v8::Value> pValue,FXJSVALUETYPE t);

+	CJS_Value(v8::Isolate* isolate, const int &iValue);

+	CJS_Value(v8::Isolate* isolate, const double &dValue);

+	CJS_Value(v8::Isolate* isolate, const float &fValue);	

+	CJS_Value(v8::Isolate* isolate, const bool &bValue);

+	CJS_Value(v8::Isolate* isolate, JSFXObject);

+	CJS_Value(v8::Isolate* isolate, CJS_Object *);

+	CJS_Value(v8::Isolate* isolate, FX_LPCSTR pStr);

+	CJS_Value(v8::Isolate* isolate, FX_LPCWSTR pWstr);

+	CJS_Value(v8::Isolate* isolate, CJS_Array& array);

+	

+	~CJS_Value();

+

+	void SetNull();

+    void Attach(v8::Handle<v8::Value> pValue,FXJSVALUETYPE t);

+	void Attach(CJS_Value *pValue);

+	void Detach();

+

+

+	operator int() const;

+	operator bool() const;

+	operator double() const;

+	operator float() const;

+	operator CJS_Object *() const;

+	//operator JSFXObject *() const;

+	operator v8::Handle<v8::Object>() const;

+	operator v8::Handle<v8::Array>() const;

+	operator CFX_WideString() const;

+	//operator FX_WCHAR *() const;

+	operator CFX_ByteString() const;

+	v8::Handle<v8::Value> ToJSValue();

+

+	void operator = (int iValue);

+	void operator = (bool bValue);	

+	void operator = (double);	

+	void operator = (float);	

+	void operator = (CJS_Object *);	

+	void operator = (v8::Handle<v8::Object>);

+//	void operator = (JSObject *);

+	void operator = (CJS_Array &);

+	void operator = (CJS_Date &);

+	void operator = (FX_LPCWSTR pWstr);	

+	void operator = (FX_LPCSTR pStr);	

+	void operator = (CJS_Value value);

+	

+	FX_BOOL IsArrayObject() const;

+	FX_BOOL	IsDateObject() const;

+	FXJSVALUETYPE GetType() const;

+

+	FX_BOOL ConvertToArray(CJS_Array &) const;

+	FX_BOOL ConvertToDate(CJS_Date &) const;

+

+	v8::Isolate* GetIsolate() {return m_isolate;}

+protected:	

+	v8::Handle<v8::Value> m_pValue;

+	FXJSVALUETYPE m_eType;

+	v8::Isolate* m_isolate;

+};

+

+template<class TYPE> class CJS_ParametersTmpl : public CFX_ArrayTemplate<TYPE>

+{

+public:

+	void push_back(TYPE newElement){CFX_ArrayTemplate<TYPE>::Add(newElement);}

+	int size() const{return CFX_ArrayTemplate<TYPE>::GetSize();}

+};

+typedef CJS_ParametersTmpl<CJS_Value> CJS_Parameters;

+

+class CJS_PropValue: public CJS_Value

+{

+public:

+	CJS_PropValue(const CJS_Value &);

+	CJS_PropValue(v8::Isolate* isolate);

+	~CJS_PropValue();

+public:

+	FX_BOOL IsSetting();

+	FX_BOOL IsGetting();

+	void operator<<(int );

+	void operator>>(int &) const;

+	void operator<<(bool);

+	void operator>>(bool &) const;

+	void operator<<(double );

+	void operator>>(double &) const;

+	void operator<<(CJS_Object *pObj);

+	void operator>>(CJS_Object *&ppObj) const;

+	void operator<<(CFX_ByteString);

+	void operator>>(CFX_ByteString &) const;

+	void operator<<(CFX_WideString);

+	void operator>>(CFX_WideString &) const;

+	void operator<<(FX_LPCWSTR c_string);

+

+	void operator<<(JSFXObject);

+	void operator>>(JSFXObject &) const;

+

+	void operator>>(CJS_Array &array) const;

+	void operator<<(CJS_Array &array);

+

+	void operator<<(CJS_Date &date);

+	void operator>>(CJS_Date &date) const;

+

+	operator v8::Handle<v8::Value>() const;

+

+	void StartSetting();

+	void StartGetting();

+private:

+	FX_BOOL m_bIsSetting;

+};

+

+class CJS_Array

+{

+public:

+	CJS_Array(v8::Isolate* isolate);

+	virtual ~CJS_Array();

+

+	void Attach(v8::Handle<v8::Array> pArray);

+	void GetElement(unsigned index,CJS_Value &value);

+	void SetElement(unsigned index,CJS_Value value);

+    int GetLength();

+	FX_BOOL IsAttached();

+	operator v8::Handle<v8::Array>();

+

+	v8::Isolate* GetIsolate() {return m_isolate;}

+private:

+	v8::Handle<v8::Array> m_pArray;

+	v8::Isolate* m_isolate;

+};

+

+class CJS_Date

+{

+friend class CJS_Value;

+public:

+	CJS_Date(v8::Isolate* isolate);

+	CJS_Date(v8::Isolate* isolate,double dMsec_time);

+	CJS_Date(v8::Isolate* isolate,int year, int mon, int day,int hour, int min, int sec);

+	virtual ~CJS_Date();

+	void Attach(v8::Handle<v8::Value> pDate);

+

+	int     GetYear();

+	void    SetYear(int iYear);

+

+	int     GetMonth();

+	void    SetMonth(int iMonth);

+

+	int     GetDay();

+	void    SetDay(int iDay);

+

+	int     GetHours();

+	void    SetHours(int iHours);

+

+	int     GetMinutes();

+	void    SetMinutes(int minutes);

+

+	int     GetSeconds();

+	void    SetSeconds(int seconds);

+

+	operator v8::Handle<v8::Value>();

+	operator double() const;

+

+	CFX_WideString	ToString() const;

+

+	static double	MakeDate(int year, int mon, int mday,int hour, int min, int sec,int ms);

+

+	FX_BOOL	IsValidDate();

+

+protected:

+	v8::Handle<v8::Value> m_pDate;

+	v8::Isolate* m_isolate;

+};

+

+#endif //_JS_VALUE_H_

+