1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JavaScript.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/IJavaScript.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Define.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Object.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Value.h"
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/app.h"
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_EventHandler.h"
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/resource.h"
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Context.h"
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Runtime.h"
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/Document.h"
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic v8::Isolate* GetIsolate(IFXJS_Context* cc)
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context *)cc;
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pRuntime->GetIsolate();
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------- TimerObj ---------------------------- */
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_CONST(CJS_TimerObj)
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_CONST()
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_PROP(CJS_TimerObj)
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_PROP()
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_METHOD(CJS_TimerObj)
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_METHOD()
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIMPLEMENT_JS_CLASS(CJS_TimerObj, TimerObj)
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTimerObj::TimerObj(CJS_Object* pJSObject)
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov: CJS_EmbedObj(pJSObject),
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovm_pTimer(NULL)
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTimerObj::~TimerObj()
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid TimerObj::SetTimer(CJS_Timer* pTimer)
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pTimer = pTimer;
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Timer* TimerObj::GetTimer() const
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pTimer;
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JS_STR_VIEWERTYPE_READER		L"Reader"
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JS_STR_VIEWERTYPE_STANDARD		L"Exchange"
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JS_STR_VIEWERVARIATION			L"Full"
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JS_STR_PLATFORM					L"WIN"
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JS_STR_LANGUANGE				L"ENU"
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JS_STR_VIEWERVERSION			8
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JS_NUM_FORMSVERSION				7
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define JS_FILEPATH_MAXLEN				2000
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------- app ---------------------------- */
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_CONST(CJS_App)
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_CONST()
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_PROP(CJS_App)
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(activeDocs)
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(calculate)
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(formsVersion)
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(fs)
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(fullscreen)
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(language)
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(media)
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(platform)
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(runtimeHighlight)
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(viewerType)
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(viewerVariation)
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_PROP_ENTRY(viewerVersion)
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_PROP()
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBEGIN_JS_STATIC_METHOD(CJS_App)
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(alert, 6)
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(beep, 1)
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(browseForDoc, 0)
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(clearInterval, 1)
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(clearTimeOut, 1)
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(execDialog, 3)
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(execMenuItem,  1)
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(findComponent, 1)
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(goBack, 0)
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(goForward, 0)
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(launchURL, 0)
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(mailMsg, 0)
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(newFDF, 0)
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(newDoc, 0)
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(openDoc, 0)
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(openFDF, 5)
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(popUpMenuEx, 0)
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(popUpMenu, 0)
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(response, 0)
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(setInterval, 2)
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_STATIC_METHOD_ENTRY(setTimeOut, 2)
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEND_JS_STATIC_METHOD()
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIMPLEMENT_JS_CLASS(CJS_App,app)
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovapp::app(CJS_Object * pJSObject) : CJS_EmbedObj(pJSObject) ,
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bCalculate(true),
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pRuntime(NULL),
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bRuntimeHighLight(false)
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	m_pMenuHead(NULL)
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovapp::~app(void)
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0,sz=m_aTimer.GetSize(); i<sz; i++)
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete m_aTimer[i];
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_aTimer.RemoveAll();
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::activeDocs(OBJ_PROP_PARAMS)
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Context* pContext = (CJS_Context *)cc;
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pContext != NULL);
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFDoc_Environment* pApp = pContext->GetReaderApp();
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pApp != NULL);
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Runtime* pRuntime = pContext->GetJSRuntime();
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pRuntime != NULL);
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument();
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Array aDocs(pRuntime->GetIsolate());
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//		int iNumDocs = pApp->CountDocuments();
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 		for(int iIndex = 0; iIndex<iNumDocs; iIndex++)
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 		{
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDFSDK_Document* pDoc = pApp->GetCurrentDoc();
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (pDoc)
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CJS_Document * pJSDocument = NULL;
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (pDoc == pCurDoc)
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					JSFXObject pObj = JS_GetThisObj(*pRuntime);
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"Document"))
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						pJSDocument = (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(),pObj);
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				else
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime,L"Document"));
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					pJSDocument = (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(),pObj);
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ASSERT(pJSDocument != NULL);
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					//			pDocument->AttachDoc(pDoc);
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				aDocs.SetElement(0,CJS_Value(pRuntime->GetIsolate(),pJSDocument));
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//		}
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (aDocs.GetLength() > 0)
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			vp << aDocs;
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			vp.SetNull();
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::calculate(OBJ_PROP_PARAMS)
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsSetting())
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		bool bVP;
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp >> bVP;
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_bCalculate = (FX_BOOL)bVP;
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Context* pContext = (CJS_Context*)cc;
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pContext != NULL);
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFDoc_Environment* pApp = pContext->GetReaderApp();
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pApp != NULL);
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Runtime* pRuntime = pContext->GetJSRuntime();
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pRuntime != NULL);
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Array aDocs(pRuntime->GetIsolate());
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 		int iNumDocs = pApp->CountDocuments();
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 		for (int iIndex = 0;iIndex < iNumDocs; iIndex++)
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 		{
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (CPDFSDK_Document* pDoc = pApp->GetCurrentDoc())
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDoc->GetInterForm();
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				ASSERT(pInterForm != NULL);
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pInterForm->EnableCalculate((FX_BOOL)m_bCalculate);
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//		}
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << (bool)m_bCalculate;
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::formsVersion(OBJ_PROP_PARAMS)
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << JS_NUM_FORMSVERSION;
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::viewerType(OBJ_PROP_PARAMS)
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 		if (pApp->GetAppName() == PHANTOM)
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 			vp << JS_STR_VIEWERTYPE_STANDARD;
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 		else
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 			vp << JS_STR_VIEWERTYPE_READER;
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << L"unknown";
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		//vp << pApp->GetAppTitle();
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::viewerVariation(OBJ_PROP_PARAMS)
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << JS_STR_VIEWERVARIATION;
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::viewerVersion(OBJ_PROP_PARAMS)
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << JS_STR_VIEWERVERSION;
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::platform(OBJ_PROP_PARAMS)
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << JS_STR_PLATFORM;
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::language(OBJ_PROP_PARAMS)
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp << JS_STR_LANGUANGE;
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//creates a new fdf object that contains no data
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment: need reader support
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note:
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//CFDF_Document * CPDFDoc_Environment::NewFDF();
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::newFDF(OBJ_METHOD_PARAMS)
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//opens a specified pdf document and returns its document object
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//comment:need reader support
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//note: as defined in js reference, the proto of this function's fourth parmeters, how old an fdf document while do not show it.
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//CFDF_Document * CPDFDoc_Environment::OpenFDF(string strPath,bool bUserConv);
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::openFDF(OBJ_METHOD_PARAMS)
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::alert(OBJ_METHOD_PARAMS)
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iSize = params.size();
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (iSize < 1)
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swMsg = L"";
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swTitle = L"";
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iIcon = 0;
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iType = 0;
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (iSize == 1)
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (params[0].GetType() == VT_object)
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JSObject pObj = params[0];
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"cMsg");
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swMsg = CJS_Value(isolate,pValue,VT_unknown).operator CFX_WideString();
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pValue = JS_GetObjectElement(isolate,pObj,L"cTitle");
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swTitle = CJS_Value(isolate, pValue,VT_unknown).operator CFX_WideString();
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pValue = JS_GetObjectElement(isolate,pObj,L"nIcon");
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				iIcon = (int)CJS_Value(isolate,pValue,VT_unknown);
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pValue = JS_GetObjectElement(isolate,pObj,L"nType");
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				iType = (int)CJS_Value(isolate,pValue,VT_unknown);
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (swMsg == L"")
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CJS_Array carray(isolate);
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (params[0].ConvertToArray(carray))
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					int iLenth = carray.GetLength();
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CJS_Value* pValue = new CJS_Value(isolate);
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//					if (iLenth == 1)
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//						pValue = new CJS_Value(isolate);
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 					else if (iLenth > 1)
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 						pValue = new CJS_Value[iLenth];
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					for(int i = 0; i < iLenth; i++)
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						carray.GetElement(i, *pValue);
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						swMsg += (*pValue).operator CFX_WideString();
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						if (i < iLenth - 1)
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							swMsg += L",  ";
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					if(pValue) delete pValue;
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 					if ((iLenth > 1) && pValue)
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 					{
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 						delete[]pValue;
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 						pValue = NULL;
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 					}
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 					else if ((iLenth == 1) && pValue)
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 					{
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 						delete pValue;
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 						pValue = NULL;
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 					}
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (swTitle == L"")
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else if (params[0].GetType() == VT_boolean)
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_BOOL bGet = (FX_BOOL)params[0];
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (bGet)
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swMsg = L"true";
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			else
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swMsg = L"false";
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swMsg = params[0];
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (params[0].GetType() == VT_boolean)
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_BOOL bGet = (FX_BOOL)params[0];
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (bGet)
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swMsg = L"true";
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			else
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swMsg = L"false";
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swMsg = params[0];
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for(int i = 1;i<iSize;i++)
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (i == 1)
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				iIcon = int(params[i]);
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (i == 2)
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				iType = int(params[i]);
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (i == 3)
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swTitle = params[i];
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pRuntime->BeginBlock();
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet = MsgBox(pRuntime->GetReaderApp(), JSGetPageView(cc),swMsg,swTitle,iType,iIcon);
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pRuntime->EndBlock();
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::beep(OBJ_METHOD_PARAMS)
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() == 1)
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Context* pContext = (CJS_Context*)cc;
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Runtime* pRuntime = pContext->GetJSRuntime();
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFDoc_Environment * pEnv = pRuntime->GetReaderApp();
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pEnv->JS_appBeep((int)params[0]);
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
472ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::findComponent(OBJ_METHOD_PARAMS)
473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
477ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::popUpMenuEx(OBJ_METHOD_PARAMS)
478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
482ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::fs(OBJ_PROP_PARAMS)
483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FOXIT_CHROME_BUILD
485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsGetting())
493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
503ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::setInterval(OBJ_METHOD_PARAMS)
504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() > 2 || params.size() == 0)
506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString script = params.size() > 0 ?  (FX_LPCWSTR)(params[0].operator CFX_WideString()) : (FX_LPCWSTR)L"";
517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (script.IsEmpty())
518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE);
520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_DWORD dwInterval = params.size() > 1 ? (int)params[1] : 1000;
524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pApp);
527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Timer* pTimer = new CJS_Timer(this, pApp);
528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_aTimer.Add(pTimer);
529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetType(0);
531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetRuntime(pRuntime);
532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetJScript(script);
533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetTimeOut(0);
534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	pTimer->SetStartTime(GetTickCount());
535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetJSTimer(dwInterval);
536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj"));
538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_TimerObj* pJS_TimerObj = (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(),pRetObj);
540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pJS_TimerObj != NULL);
541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject();
543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pTimerObj != NULL);
544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimerObj->SetTimer(pTimer);
546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet = pRetObj;
548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
552ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::setTimeOut(OBJ_METHOD_PARAMS)
553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() > 2 || params.size() == 0)
555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString script = params.size() > 0 ?  (FX_LPCWSTR)(params[0].operator CFX_WideString()) : (FX_LPCWSTR)L"";
566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (script.IsEmpty())
567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE);
569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_DWORD dwTimeOut = params.size() > 1 ? (int)params[1] : 1000;
573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pApp);
576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Timer* pTimer = new CJS_Timer(this, pApp);
577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_aTimer.Add(pTimer);
578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetType(1);
580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetRuntime(pRuntime);
581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetJScript(script);
582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetTimeOut(dwTimeOut);
583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	pTimer->SetStartTime(GetTickCount());
584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	pTimer->SetJSTimer(1000);
585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetJSTimer(dwTimeOut);
586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj"));
588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	ASSERT(pRetObj != NULL);
589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_TimerObj* pJS_TimerObj = (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(),pRetObj);
591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pJS_TimerObj != NULL);
592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject();
594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pTimerObj != NULL);
595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimerObj->SetTimer(pTimer);
597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet = pRetObj;
599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
603ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::clearTimeOut(OBJ_METHOD_PARAMS)
604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() != 1)
611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params[0].GetType() == VT_fxobject)
617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JSFXObject pObj = (JSFXObject)params[0];
619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj"))
621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (CJS_Object* pJSObj = (CJS_Object*)params[0])
623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject())
625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						if (CJS_Timer* pTimer = pTimerObj->GetTimer())
627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						{
628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							pTimer->KillJSTimer();
629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							for (int i=0,sz=m_aTimer.GetSize(); i<sz; i++)
631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							{
632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								if (m_aTimer[i] == pTimer)
633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								{
634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov									m_aTimer.RemoveAt(i);
635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov									break;
636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								}
637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							}
638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							delete pTimer;
640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							pTimerObj->SetTimer(NULL);
641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						}
642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
651ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::clearInterval(OBJ_METHOD_PARAMS)
652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params.size() != 1)
659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params[0].GetType() == VT_fxobject)
665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JSFXObject pObj = (JSFXObject)params[0];
667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj"))
669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (CJS_Object* pJSObj = (CJS_Object*)params[0])
671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject())
673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						if (CJS_Timer* pTimer = pTimerObj->GetTimer())
675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						{
676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							pTimer->KillJSTimer();
677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							for (int i=0,sz=m_aTimer.GetSize(); i<sz; i++)
679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							{
680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								if (m_aTimer[i] == pTimer)
681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								{
682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov									m_aTimer.RemoveAt(i);
683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov									break;
684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								}
685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							}
686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							delete pTimer;
688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							pTimerObj->SetTimer(NULL);
689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						}
690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
699ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::execMenuItem(OBJ_METHOD_PARAMS)
700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid app::TimerProc(CJS_Timer* pTimer)
705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pTimer != NULL);
707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch (pTimer->GetType())
709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 0: //interval
711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		RunJsScript(pTimer->GetRuntime(), pTimer->GetJScript());
712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 1:
714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pTimer->GetTimeOut() > 0)
715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			RunJsScript(pTimer->GetRuntime(), pTimer->GetJScript());
717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pTimer->KillJSTimer();
718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid app::RunJsScript(CJS_Runtime* pRuntime,const CFX_WideString& wsScript)
725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pRuntime->IsBlocking())
729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		IFXJS_Context* pContext = pRuntime->NewContext();
731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pContext != NULL);
732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pContext->OnExternal_Exec();
733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString wtInfo;
734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pContext->RunScript(wsScript,wtInfo);
735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pRuntime->ReleaseContext(pContext);
736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
739ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::goBack(OBJ_METHOD_PARAMS)
740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
750ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::goForward(OBJ_METHOD_PARAMS)
751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
761ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::mailMsg(OBJ_METHOD_PARAMS)
762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bUI = TRUE;
769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cTo = L"";
770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cCc = L"";
771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cBcc = L"";
772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cSubject = L"";
773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString cMsg = L"";
774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(params.size() < 2)
775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bUI = params.size()>=1?(int)params[0]:TRUE;
778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cTo = params.size()>=2?(const wchar_t*)(FX_LPCWSTR)params[1].operator CFX_WideString():L"";
779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cCc = params.size()>=3?(const wchar_t*)(FX_LPCWSTR)params[2].operator CFX_WideString():L"";
780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cBcc = params.size()>=4?(const wchar_t*)(FX_LPCWSTR)params[3].operator CFX_WideString():L"";
781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cSubject = params.size()>=5?(const wchar_t*)(FX_LPCWSTR)params[4].operator CFX_WideString():L"";
782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	cMsg = params.size()>=6?(const wchar_t*)(FX_LPCWSTR)params[5].operator CFX_WideString():L"";
783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (params[0].GetType() == VT_object)
786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JSObject pObj = (JSObject)params[0];
788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"bUI");
790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bUI = (int)CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue));
791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate, pObj, L"cTo");
793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cTo = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"cCc");
796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cCc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"cBcc");
799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cBcc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"cSubject");
802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cSubject = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj, L"cMsg");
805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cMsg = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFDoc_Environment* pApp = pContext->GetReaderApp();
814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pApp != NULL);
815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pRuntime->BeginBlock();
817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pApp->JS_docmailForm(NULL, 0, bUI, (FX_LPCWSTR)cTo, (FX_LPCWSTR)cSubject, (FX_LPCWSTR)cCc, (FX_LPCWSTR)cBcc, (FX_LPCWSTR)cMsg);
818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	///////////////////////////////////////////////////////////////////////////////////////////////
819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pRuntime->EndBlock();
820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//return bRet;
822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
825ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::launchURL(OBJ_METHOD_PARAMS)
826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context*)cc;
830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swURL = params[0].operator CFX_WideString();
836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pRuntime->BeginBlock();
841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	FX_BOOL bRet = pApp->OpenURL(swURL);
842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pRuntime->EndBlock();
843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	return bRet;
845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
848ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::runtimeHighlight(OBJ_PROP_PARAMS)
849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (vp.IsSetting())
851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp>>m_bRuntimeHighLight;
853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vp<<m_bRuntimeHighLight;
857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
862ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::fullscreen(OBJ_PROP_PARAMS)
863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
867ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::popUpMenu(OBJ_METHOD_PARAMS)
868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
873ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::browseForDoc(OBJ_METHOD_PARAMS)
874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//This method may trigger a "file save" dialog,while enable user to save contents of the document.
876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//Such action is considered to be unsafe.
877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsSafeMode(cc)) return TRUE;
878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bool bSave = false;
882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString cFilenameInit = CFX_ByteString();
883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString cFSInit = CFX_ByteString();
884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(params.size()>0 && (params[0].GetType() == VT_object))
886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JSObject pObj = (JSObject )params[0];
888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj,L"bSave");
890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 			bSave = (bool)CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue));
891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate, pObj,L"cFilenameInit");
893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Value t = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue));
895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 			cFilenameInit = t.operator CFX_ByteString();
896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj,L"cFSInit");
899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Value t = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue));
901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cFSInit = t.operator CFX_ByteString();
902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(params.size() >= 1)
907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bSave = (bool)params[0];
909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(params.size() >= 2)
911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Value t = params[1];
913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cFilenameInit = t.operator CFX_ByteString();
914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(params.size() >= 3)
916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Value t = params[2];
918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			cFSInit = t.operator CFX_ByteString();
919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context *)cc;
922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFDoc_Environment* pApp = pContext->GetReaderApp();
925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pApp != NULL);
926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pRuntime != NULL);
929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString wsFileNameInit = CFX_WideString::FromLocal(cFilenameInit);
931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString wsFSInit = CFX_WideString::FromLocal(cFSInit);
932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString wsFilePath = pApp->JS_appbrowseForDoc(bSave, wsFileNameInit);
933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(wsFilePath.IsEmpty())
934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, -1);
937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_PutObjectString(isolate,pRetObj, L"cPath", SysPathToPDFPath(wsFilePath));
939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_PutObjectString(isolate,pRetObj, L"cURL", SysPathToPDFPath(wsFilePath));
940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!cFSInit.IsEmpty())
942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pRetObj, L"cFS", CFX_WideString::FromLocal(cFSInit.GetBuffer(cFSInit.GetLength())));
944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_PutObjectString(isolate,pRetObj, L"cFS", CFX_WideString::FromLocal("DOS"));
948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	vRet =  pRetObj;
951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
955ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString app::SysPathToPDFPath(const CFX_WideString& sOldPath)
956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString sRet = L"/";
958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0,sz=sOldPath.GetLength(); i<sz; i++)
960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		wchar_t c = sOldPath.GetAt(i);
962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (c == L':')
963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (c == L'\\')
968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				sRet += L"/";
970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			else
972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				sRet += c;
974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return sRet;
979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
981ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString app::PDFPathToSysPath(const CFX_WideString& sOldPath)
982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//strLPath = "D:\temporay.fdf";
984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString strOPath = sOldPath;
985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	strOPath.TrimLeft();
986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	strOPath.TrimRight();
987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (strOPath.GetAt(0) == L'/' && strOPath.GetAt(2) == L'/')
989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		wchar_t c_Drive = strOPath.GetAt(1);
991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if ((c_Drive >= L'a' && c_Drive <= L'z' )||( c_Drive >= L'A' && c_Drive <= L'Z'))
992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			strOPath.Replace((FX_LPCWSTR)L"/",(FX_LPCWSTR)L"\\");
994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			//strOPath.SetAt(0,'');
995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			strOPath.Insert(2,':');
996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			strOPath.Delete(0);
997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return strOPath;
1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString app::RelativePathToSysPath(const CFX_WideString& sOldPath, const CFX_WideString& sFilePath)
1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	if (!PathIsRelative(sOldPath)) return sOldPath;
1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nSplit = 0;
1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=sFilePath.GetLength()-1; i>=0; i--)
1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (sFilePath[i] == '\\' || sFilePath[i] == '/')
1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			nSplit = i;
1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return sFilePath.Left(nSplit+1) + sOldPath;
1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::newDoc(OBJ_METHOD_PARAMS)
1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::openDoc(OBJ_METHOD_PARAMS)
1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::response(OBJ_METHOD_PARAMS)
1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swQuestion = L"";
1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swLabel = L"";
1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FOXIT_CHROME_BUILD
1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swTitle = L"Foxit";
1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swTitle = L"PDF";
1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swDefault = L"";
1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swResponse = L"";
1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	bool bPassWord = false;
1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate* isolate = GetIsolate(cc);
1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int iLength = params.size();
1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (iLength > 0 && params[0].GetType() == VT_object)
1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JSObject pObj = (JSObject )params[0];
1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj,L"cQuestion");
1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swQuestion = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
1052ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj,L"cTitle");
1054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swTitle = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
1055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj,L"cDefault");
1057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swDefault = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
1058ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1059ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj,L"cLabel");
1060ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swLabel = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString();
1061ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pValue = JS_GetObjectElement(isolate,pObj,L"bPassword");
1063ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bPassWord = (bool)CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue));
1064ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1065ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch(iLength)
1068ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 1:
1070ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swQuestion = params[0];
1071ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 2:
1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swQuestion = params[0];
1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swTitle = params[1];
1075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1076ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 3:
1077ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swQuestion = params[0];
1078ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swTitle = params[1];
1079ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swDefault = params[2];
1080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1081ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 4:
1082ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swQuestion = params[0];
1083ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swTitle = params[1];
1084ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swDefault = params[2];
1085ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bPassWord = params[3];
1086ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1087ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 5:
1088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swQuestion = params[0];
1089ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swTitle = params[1];
1090ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swDefault = params[2];
1091ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bPassWord = params[3];
1092ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swLabel = params[4];
1093ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1094ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		default:
1095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
1096ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1097ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1098ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pContext = (CJS_Context *)cc;
1100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	ASSERT(pContext != NULL);
1101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFDoc_Environment* pApp = pContext->GetReaderApp();
1103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	ASSERT(pApp != NULL);
1104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nLength = 2048;
1105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char* pBuff = new char[nLength];
1106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	nLength = pApp->JS_appResponse(swQuestion, swTitle, swDefault, swLabel, bPassWord, pBuff, nLength);
1107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(nLength<=0)
1108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vRet.SetNull();
1110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
1111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nLength = nLength>2046?2046:nLength;
1115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    pBuff[nLength] = 0;
1116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    pBuff[nLength+1] = 0;
1117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swResponse = CFX_WideString::FromUTF16LE((unsigned short*)pBuff, nLength);
1118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		vRet = swResponse;
1119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	delete[] pBuff;
1121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1125ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::media(OBJ_PROP_PARAMS)
1126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
1128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL app::execDialog(OBJ_METHOD_PARAMS)
1131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1135