Add "Tizen .NET Preview" content from TD 71/132471/2
authorEditor Lionbridge <TizenEditor.SEL@lionbridge.com>
Mon, 5 Jun 2017 11:25:11 +0000 (14:25 +0300)
committerEditor Lionbridge <TizenEditor.SEL@lionbridge.com>
Mon, 12 Jun 2017 06:18:44 +0000 (09:18 +0300)
The added content is a copy of the TD content.
No edits or fixes have been implemented here.

The purpose of this change is to push the TD content to Git.
All quality editing will be implemented in separate changes later,
to make it easier to identify and implement the same changes in TD.

PS2: Preview content added to the left-side support tree.

Change-Id: I17a5d682f62fde5ff495c03409d1fc6982b20e39

151 files changed:
preview.htm [new file with mode: 0644]
preview/.project [new file with mode: 0644]
preview/META-INF/MANIFEST.MF [new file with mode: 0644]
preview/build.properties [new file with mode: 0644]
preview/html/cover_page.htm [new file with mode: 0644]
preview/html/css/snippet.css [new file with mode: 0644]
preview/html/css/styles.css [new file with mode: 0644]
preview/html/getting_started/download.htm [new file with mode: 0644]
preview/html/getting_started/first_app.htm [new file with mode: 0644]
preview/html/getting_started/installing.htm [new file with mode: 0644]
preview/html/getting_started/porting_xamarinforms.htm [new file with mode: 0644]
preview/html/images/add_tizen_project2.png [new file with mode: 0644]
preview/html/images/addedprojects.png [new file with mode: 0644]
preview/html/images/addnewproject.png [new file with mode: 0644]
preview/html/images/addnewproject2.png [new file with mode: 0644]
preview/html/images/bg_util_bar.gif [new file with mode: 0644]
preview/html/images/btn_top.gif [new file with mode: 0644]
preview/html/images/buildsolution.png [new file with mode: 0644]
preview/html/images/cert_reg_author_cert.png [new file with mode: 0644]
preview/html/images/cert_reg_author_info.png [new file with mode: 0644]
preview/html/images/cert_reg_create_new.png [new file with mode: 0644]
preview/html/images/cert_reg_creation_wizard.png [new file with mode: 0644]
preview/html/images/cert_reg_dist_cert2.png [new file with mode: 0644]
preview/html/images/cert_reg_info.png [new file with mode: 0644]
preview/html/images/cert_reg_manage_cert.png [new file with mode: 0644]
preview/html/images/cert_reg_pencil.png [new file with mode: 0644]
preview/html/images/cert_reg_plus.png [new file with mode: 0644]
preview/html/images/cert_reg_remove_cert.png [new file with mode: 0644]
preview/html/images/cert_reg_trash.png [new file with mode: 0644]
preview/html/images/change_nuget_version.png [new file with mode: 0644]
preview/html/images/cs_creating04.png [new file with mode: 0644]
preview/html/images/cs_creating05.png [new file with mode: 0644]
preview/html/images/cs_creating06.png [new file with mode: 0644]
preview/html/images/cs_creating07.png [new file with mode: 0644]
preview/html/images/cs_creating08.png [new file with mode: 0644]
preview/html/images/cs_device_manager_connection_explorer_view.png [new file with mode: 0644]
preview/html/images/cs_device_manager_explorer.png [new file with mode: 0644]
preview/html/images/cs_device_manager_first_screen.png [new file with mode: 0644]
preview/html/images/cs_device_manager_log_add_tab.png [new file with mode: 0644]
preview/html/images/cs_device_manager_log_added_tab.png [new file with mode: 0644]
preview/html/images/cs_device_manager_log_export.png [new file with mode: 0644]
preview/html/images/cs_device_manager_menu.png [new file with mode: 0644]
preview/html/images/cs_device_manager_prompt.png [new file with mode: 0644]
preview/html/images/cs_enhancing01_1.png [new file with mode: 0644]
preview/html/images/cs_enhancing02_1.png [new file with mode: 0644]
preview/html/images/cs_first01.png [new file with mode: 0644]
preview/html/images/cs_first02_1.png [new file with mode: 0644]
preview/html/images/cs_first08.png [new file with mode: 0644]
preview/html/images/cs_first09_1.png [new file with mode: 0644]
preview/html/images/cs_first_building_certificate_01.png [new file with mode: 0644]
preview/html/images/cs_first_building_certificate_02.png [new file with mode: 0644]
preview/html/images/cs_first_building_certificate_03.png [new file with mode: 0644]
preview/html/images/cs_first_building_emulator_list.png [new file with mode: 0644]
preview/html/images/cs_first_building_emulator_manager.png [new file with mode: 0644]
preview/html/images/cs_first_building_emulator_tv1.png [new file with mode: 0644]
preview/html/images/cs_first_building_process.png [new file with mode: 0644]
preview/html/images/cs_first_building_selected_emulator.png [new file with mode: 0644]
preview/html/images/cs_first_creating_project_wizard_p3.png [new file with mode: 0644]
preview/html/images/cs_first_creating_solution_explorer.png [new file with mode: 0644]
preview/html/images/cs_first_packaging_content.png [new file with mode: 0644]
preview/html/images/cs_install01.png [new file with mode: 0644]
preview/html/images/cs_install02.png [new file with mode: 0644]
preview/html/images/cs_install03.png [new file with mode: 0644]
preview/html/images/cs_install04.png [new file with mode: 0644]
preview/html/images/cs_install05.png [new file with mode: 0644]
preview/html/images/cs_install06.png [new file with mode: 0644]
preview/html/images/cs_install07_1.png [new file with mode: 0644]
preview/html/images/cs_overview-707x282.png [new file with mode: 0644]
preview/html/images/cs_overview.png [new file with mode: 0644]
preview/html/images/cs_prerequiste01.png [new file with mode: 0644]
preview/html/images/cs_prerequiste02.png [new file with mode: 0644]
preview/html/images/demo1.jpg [new file with mode: 0644]
preview/html/images/demo1.png [new file with mode: 0644]
preview/html/images/deploy.png [new file with mode: 0644]
preview/html/images/em_skin.png [new file with mode: 0644]
preview/html/images/emulator_control_panel2-1.png [new file with mode: 0644]
preview/html/images/emulator_control_panel2.png [new file with mode: 0644]
preview/html/images/emulator_control_panel_hds.png [new file with mode: 0644]
preview/html/images/emulator_control_panel_network.png [new file with mode: 0644]
preview/html/images/emulator_control_panel_open2.png [new file with mode: 0644]
preview/html/images/emulator_manager_clone.png [new file with mode: 0644]
preview/html/images/emulator_manager_create.png [new file with mode: 0644]
preview/html/images/emulator_manager_delete.png [new file with mode: 0644]
preview/html/images/emulator_manager_device_template2.png [new file with mode: 0644]
preview/html/images/emulator_manager_modify.png [new file with mode: 0644]
preview/html/images/emulator_manager_template_config2.png [new file with mode: 0644]
preview/html/images/hardware_ram.png [new file with mode: 0644]
preview/html/images/hardware_start_instal.png [new file with mode: 0644]
preview/html/images/ico_arr_hidden.gif [new file with mode: 0644]
preview/html/images/ico_bullet_2_7.gif [new file with mode: 0644]
preview/html/images/launchtizenemul.png [new file with mode: 0644]
preview/html/images/logviewer_default.png [new file with mode: 0644]
preview/html/images/logviewer_entry_point.png [new file with mode: 0644]
preview/html/images/logviewer_keyword_filter.png [new file with mode: 0644]
preview/html/images/managenugetpackages.png [new file with mode: 0644]
preview/html/images/managenugetpackages2.png [new file with mode: 0644]
preview/html/images/manifest_editing.png [new file with mode: 0644]
preview/html/images/manifest_features.png [new file with mode: 0644]
preview/html/images/manifest_overview.png [new file with mode: 0644]
preview/html/images/manifest_privileges.png [new file with mode: 0644]
preview/html/images/manifest_text_editor.png [new file with mode: 0644]
preview/html/images/openproject.png [new file with mode: 0644]
preview/html/images/platform_mismatch_warning.png [new file with mode: 0644]
preview/html/images/pw1.png [new file with mode: 0644]
preview/html/images/pw2.png [new file with mode: 0644]
preview/html/images/release_plan_preview4_m1.png [new file with mode: 0644]
preview/html/images/solution_explorer_tizen_project2.png [new file with mode: 0644]
preview/html/images/tizen_blank_app.png [new file with mode: 0644]
preview/html/images/tizenemulmanager.png [new file with mode: 0644]
preview/html/images/tizenprojectwizard.png [new file with mode: 0644]
preview/html/images/tizentvdemo1.png [new file with mode: 0644]
preview/html/images/tizentvdemo2.png [new file with mode: 0644]
preview/html/images/vs_em_1.png [new file with mode: 0644]
preview/html/images/vs_em_2.png [new file with mode: 0644]
preview/html/images/vs_em_4.png [new file with mode: 0644]
preview/html/images/vs_em_activated_debug.png [new file with mode: 0644]
preview/html/images/vs_em_launch.png [new file with mode: 0644]
preview/html/images/vs_em_launched.png [new file with mode: 0644]
preview/html/images/vs_emulatormanager_1.png [new file with mode: 0644]
preview/html/images/vs_emulatormanager_2.png [new file with mode: 0644]
preview/html/images/vstools_cert_certificate1.png [new file with mode: 0644]
preview/html/images/vstools_cert_default.png [new file with mode: 0644]
preview/html/images/vstools_cert_menu.png [new file with mode: 0644]
preview/html/images/vstools_cert_profile1.png [new file with mode: 0644]
preview/html/images/vstools_cert_result.png [new file with mode: 0644]
preview/html/images/vstools_changing_cert.png [new file with mode: 0644]
preview/html/images/vstools_solution.png [new file with mode: 0644]
preview/html/images/xamarin_application.png [new file with mode: 0644]
preview/html/index.htm [new file with mode: 0644]
preview/html/introduction/overview.htm [new file with mode: 0644]
preview/html/introduction/roadmap.htm [new file with mode: 0644]
preview/html/scripts/common.js [new file with mode: 0644]
preview/html/scripts/core.js [new file with mode: 0644]
preview/html/scripts/jquery.util.js [new file with mode: 0644]
preview/html/scripts/jquery.zclip.min.js [new file with mode: 0644]
preview/html/scripts/navi.js [new file with mode: 0644]
preview/html/scripts/search.js [new file with mode: 0644]
preview/html/scripts/showhide.js [new file with mode: 0644]
preview/html/scripts/snippet.js [new file with mode: 0644]
preview/html/tools/certificate_manager.htm [new file with mode: 0644]
preview/html/tools/device_manager.htm [new file with mode: 0644]
preview/html/tools/emulator_control_panel.htm [new file with mode: 0644]
preview/html/tools/emulator_manager.htm [new file with mode: 0644]
preview/html/tools/log_viewer.htm [new file with mode: 0644]
preview/html/tools/manifest_editor.htm [new file with mode: 0644]
preview/html/tools/manifest_elements.htm [new file with mode: 0644]
preview/html/tools/project_wizard.htm [new file with mode: 0644]
preview/html/tools/tools_overview.htm [new file with mode: 0644]
preview/index.xml [new file with mode: 0644]
preview/plugin.xml [new file with mode: 0644]
top.htm

diff --git a/preview.htm b/preview.htm
new file mode 100644 (file)
index 0000000..fb7ce6b
--- /dev/null
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>Tizen .NET Preview</title>
+</head>
+
+<frameset cols="15%,*">
+<frame src="preview/html/index.htm" name="menu">
+<frame src="preview/html/cover_page.htm" name="content">
+</frameset>
+</HTML>
+
diff --git a/preview/.project b/preview/.project
new file mode 100644 (file)
index 0000000..f516409
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>preview</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+       </natures>
+</projectDescription>
diff --git a/preview/META-INF/MANIFEST.MF b/preview/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..71a758f
--- /dev/null
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 1
+Bundle-Name: Tizen .NET Preview
+Bundle-SymbolicName: preview;singleton=true
+Bundle-Version: 4.0.0
+Bundle-Vendor: The Linux Foundation
+
diff --git a/preview/build.properties b/preview/build.properties
new file mode 100644 (file)
index 0000000..d83e182
--- /dev/null
@@ -0,0 +1,11 @@
+bin.includes = plugin.xml,\
+               META-INF/,\
+               html/,\
+               build.properties,\
+               .project,\
+               index.xml
+
+                          
+                                  
+
+
diff --git a/preview/html/cover_page.htm b/preview/html/cover_page.htm
new file mode 100644 (file)
index 0000000..aef7dd5
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="css/snippet.css" />
+    <script type="text/javascript" src="scripts/snippet.js"></script>
+    <script type="text/javascript" src="scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="scripts/search.js" charset="utf-8"></script>
+    <title>What's New</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+ <h1>What's New</h1>
+
+<div class="note"><strong>News and Updates</strong> 
+    <ul><li><strong>Visual Studio 2017 Support.</strong> Visual Studio Tools for Tizen has supported Microsoft’s Visual Studio 2017 released on March 2017 since the second preview.</li></ul>
+</div>
+
+<p>The third preview of Tizen .NET, an application framework for Tizen based on .NET,  is now available. The third preview stepped forward. Key new features are as follows:</p>
+<ul>
+    <li><strong>New Tools</strong>. Device Manager and Log Viewer were introduced with Visual Studio Tools for Tizen.  Tizen-specific tools were added to further improve your productivity. </li>
+
+    <li><strong>Project Wizard</strong>. Visual Studio Tools for Tizen provide a number of different options to build applications. For instance, you can build an application that runs on a single device type or an application that runs on multiple device types. You can build an application that runs on Tizen only or an application that runs on multiple platforms. The project wizard helps you to select the right project type with step-by-step guides.</li>
+
+    <li><strong>Self-contained Application</strong>. Application  developers can create and install them to target devices or emulators without pre-installed .NET runtime. </li>
+
+    <li><strong>More Tizen platform-specific API</strong>. The third preview significantly increases the number of Tizen-specific API available for .NET developers. Following packages have become newly available. For the full pakage list, see <a href="https://developer.tizen.org/dev-guide/csapi/index.html">Tizen Platform-Specific API</a>.
+        <ul>
+            <li>Thumbnail Utility (capi-media-thumbnail-util)</li>
+            <li>Wave Player (capi-media-wav-player)</li>
+            <li>Tone Player (capi-media-tone-player)</li>
+            <li>Media Stream Recording (capi-media-streamrecorder)</li>
+            <li>Media Metadata Editor (capi-media-metadata-editor)</li>
+            <li>Screen Mirroring (capi-media-screen-mirroring)</li>
+            <li>Camera (capi-media-camera)</li>
+            <li>Data Control (capi-data-control)</li>
+            <li>Widget Viewer (widget_viewer_evas)</li>
+            <li>FIDO (fido-client)</li>
+            <li>Message (capi-messaing-messages)</li>
+            <li>Email (capi-messaing-email)</li>
+            <li>Input Method Manager (capi-ui-inputmethod-manager)</li>
+            <li>Bluetooth (capi-network-bluetooth)</li>
+            <li>Alarm (capi-appfw-alarm)</li>
+            <li>Maps (capi-maps-service)</li>
+        </ul></li>
+    </ul>
+
+<script type="text/javascript" src="scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/css/snippet.css b/preview/html/css/snippet.css
new file mode 100644 (file)
index 0000000..f880409
--- /dev/null
@@ -0,0 +1,52 @@
+/* Pretty printing styles. Used with prettify.js. */
+
+/* SPAN elements with the classes below are added by prettyprint. */
+.pln { color: #000 }  /* plain text */
+
+@media screen {
+  .str { color: #793AFF }  /* string content */
+  .kwd { color: #7F0055 }  /* a keyword */
+  .com { color: green}  /* a comment */
+  .typ { color: #1C1C1C }  /* a type name */
+  .lit { color: black }  /* a literal value */
+  /* punctuation, lisp open bracket, lisp close bracket */
+  .pun, .opn, .clo { color: #1C1C1C}
+  .tag { color: #008 }  /* a markup tag name */
+  .atn { color: #606 }  /* a markup attribute name */
+  .atv { color: #080 }  /* a markup attribute value */
+  .dec, .var { color: #606 }  /* a declaration; a variable name */
+  .fun { color: red }  /* a function name */
+}
+
+/* Use higher contrast and text-weight for printable form. */
+@media print, projection {
+  .str { color: #060 }
+  .kwd { color: #006; font-weight: bold }
+  .com { color: #600; font-style: italic }
+  .typ { color: #404; font-weight: bold }
+  .lit { color: #044 }
+  .pun, .opn, .clo { color: #440 }
+  .tag { color: #006; font-weight: bold }
+  .atn { color: #404 }
+  .atv { color: #060 }
+}
+
+/* Put a border around prettyprinted code snippets. */
+pre.prettyprint { overflow: auto; padding: 2px; border: 1px solid #888 }
+
+/* Specify class=linenums on a pre to get line numbering */
+ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
+li.L0,
+li.L1,
+li.L2,
+li.L3,
+li.L5,
+li.L6,
+li.L7,
+li.L8 { list-style-type: none }
+/* Alternate shading for lines */
+li.L1,
+li.L3,
+li.L5,
+li.L7,
+li.L9 { background: #eee }
diff --git a/preview/html/css/styles.css b/preview/html/css/styles.css
new file mode 100644 (file)
index 0000000..9ed4f63
--- /dev/null
@@ -0,0 +1,300 @@
+@charset "utf-8";
+
+body {
+       background: white;
+       color: #1C1C1C;
+       margin-right: 20px;
+       margin-left: 20px;
+       font-size: 9pt;
+       font-weight: normal;
+       font-family: Arial, Helvetica, sans-serif;
+}
+
+h1, h2, h3, h4, h5, h6, p, table, td, caption, th,  ol, dl, dd, footer {
+       font-family: Arial, Verdana, Helvetica, sans-serif
+       }
+
+/*     Set default font to 9 pt        */
+table, div, p, dl, td, caption, th, ul, ol, li, dd, pre, code {
+       font-size: 9pt;
+}
+       
+pre, code { 
+       font-family: "Courier New", Courier, monospace;
+       margin: 6px 1.5px;
+       padding: 1px 1px 1px 1px;
+       font-weight: normal;
+       font-style: normal;
+}
+
+h1 {font-size: 24pt; color: #0E437D;}
+h2 {font-size: 18pt; color: #0E437D;}
+h3 {font-size: 14pt; color: #1C1C1C;}
+h4 {font-size: 12pt; color: #1C1C1C;}
+h5 {font-size: 10pt; color: #1C1C1C;}
+       
+h1, h2, h3, h4, h5 {
+       font-weight: bold;
+       font-style: normal; 
+       line-height: normal; 
+       margin-top: 16pt;
+}
+
+caption { 
+       font-size: 9pt;
+       color: #1C1C1C;
+       font-weight: bold;
+       text-align: left;
+       margin-top: 20px;
+       margin-bottom: 0px;
+}
+
+ol  {
+       margin-bottom: 20px;
+}
+
+ul ul , ol ul, ul ol, ol ol{
+       margin-top: 10px;
+}
+
+ul li, ol li {
+       margin-bottom: 10px;
+}
+
+ol li p, ul li p {
+       font-size: 9pt;
+       font-weight: normal;
+       margin-bottom: 2px;
+       margin-top: 2px;
+}
+
+ol ol {
+       font-size: 9pt;
+       font-weight: normal;
+       list-style-type: lower-alpha;
+       color: #1C1C1C; 
+       border-style: none;
+       margin-top: 10px; 
+}
+
+ol ol li, ol ul li {
+       border-style: none;
+       margin-top: 5px;
+       font-size: 9pt;
+}
+
+ul {
+       font-size: 9pt;
+       font-weight: normal;
+       color: #1C1C1C;
+}
+
+
+/*     End of font face declarations   */
+
+/*     Set table borders and heading row background    */
+table {
+       border: 0px;
+       border-collapse: collapse;
+       width: 100%;
+       margin-top: 20px;
+       margin-bottom: 20px;
+       background: white;
+}
+
+th {
+       border-top: 2px solid #719cc7;
+       border-right: 1px solid #c6d9f1;
+       border-left: 1px solid #c6d9f1;
+       background-color: #f3f7fb;
+       padding: 4px;
+       color: #719cc7;
+       font-size: 9pt;
+       font-weight: bold;
+}      
+       
+td {
+       border: 1px solid #c6d9f1;
+       vertical-align:top;
+       padding: 3px 20px 5px 20px;
+       }
+       
+/*     Notes stand out using a light top & bottom borders with yellow background       */
+
+div.note {
+    background-color: #eeece1;
+    border: medium none;
+    color: #1c1c1c;
+    margin-bottom: 12px;
+    margin-top: 12px;
+    padding: 5px;
+}
+
+div.note > strong:first-child {
+    background-color: #ddd9c3;
+    border-bottom: 1px solid #719cc7;
+    border-right: medium none;
+    border-top: 2px solid #719cc7;
+    text-align: left;
+    color: #719cc7;
+    font-size: 9pt;
+    font-weight: bold;
+       margin: -4px -4px 4px -4px;  
+       padding: 4px 0px 4px 4px;
+       display: block; 
+       width: auto;
+}
+
+div.note * strong:after {
+       content: "\a ";
+    white-space: pre-line;
+}
+
+
+#toc-navigation {width: 20%; position: fixed; right: 17px; top: 0; bottom: 51px; /* overflow: auto; *//* min-width: 200px; *//* background: white; */z-index: 100;padding-top: 10px;/* padding-bottom: 88px; */margin-bottom: 89px;}
+#toc {padding: 0px 20px 5px 20px; /* border: 2px solid #567a9c; */ border-radius: 15px;position: absolute;top: 78px;bottom: 9px;overflow: auto;/* margin-bottom: 5px; */padding-bottom: 5px;border-bottom: 3px transparent solid;margin-left: 5px;}
+#main {width: 75%; height: 90%;}
+#container {width:100%;}
+#container #contents {padding:0px 0 20px; overflow: auto;position: fixed;top: 0;bottom: 0;margin-bottom: 64px;right: 200px;left: 20px;}
+body.no-toc #container #contents {right: 0;padding-right:30px;}
+body.no-toc #toc-navigation {width: auto;}
+body.no-toc .top {right: 19px; /* float:none; */ width: 28px;}
+body.no-toc #profile {float: right;right: -32px;}
+body.no-toc #profile p {padding: 0; margin: 0;}
+#container #contents:after {content: "."; display: block; height: 20px; clear: both; visibility: hidden;}
+       #container #contents>.content {/* width:75%; */min-width: 600px;/* right: 300px; *//* position: fixed; */padding-right: 5px;}
+       #container #contents>.content>.cont { margin-bottom:80px; padding-bottom:80px; }
+
+.devicespecs-util {float:right; margin-top:25px;}
+       .devicespecs-util ul.dutil {margin:0; padding-bottom:0; height: 11px; list-style-type:none;}
+       .devicespecs-util ul.dutil:after {content: "."; display: block; height: 0px; clear: both; visibility: hidden;}
+       .devicespecs-util ul.dutil li {float:left; margin-right:8px; padding-right:8px; background:url('../images/bg_util_bar.gif') no-repeat right center; color:#666;}
+       .devicespecs-util ul.dutil li.none {margin-right:0; padding-right:0; background-image:none;}
+       .devicespecs-util ul.dutil li a { font-size:11px; color:#666; line-height: 11px;}
+       .devicespecs-util ul.dutil li a:hover { color:#222; }
+       .devicespecs-util ul.dutil li a:active { color:#222; }
+
+ul.devicespecifications {clear:both; width:100%; margin:0; padding: 0;}
+ul.devicespecifications > li { width:100%; margin-top:0; padding-left:0; list-style-type:none; border:1px solid #799cd3; padding: 5px 0px 5px 0px;}
+ul.devicespecifications li div.devicespec-con {width:90%; margin:10px 0 20px 0; padding:0 14px; font-size: 13px;}
+ul.devicespecifications li div.devicespec-tit {/*height:22px;*/ padding-right: 71px; background-color:#ffffff; position: relative;}
+       ul.devicespecifications li div.devicespec-tit .items-tit { /*float:left;*/ margin:0 0 0 14px; padding:0; color:#567a9c; line-height: 22px; font-size: 14px; font-style:normal; font-weight: bold;}
+
+       ul.devicespecifications li div.devicespec-tit .items-tit-h2 { /*float:left;*/ margin: 0px 0px 0px 14px; padding:0; line-height: 22px; font-size: 18pt; color: #0E437D; font-style:normal; font-weight: bold;}
+       ul.devicespecifications li div.devicespec-tit .items-tit-h3 { /*float:left;*/ margin:0 0 0 14px; padding:0; line-height: 22px; font-size: 14pt; color: #1C1C1C; font-style:normal; font-weight: bold;}
+       ul.devicespecifications li div.devicespec-tit .items-tit-h4 { /*float:left;*/ margin:0 0 0 14px; padding:0; line-height: 22px; font-size: 12pt; color: #1C1C1C; font-style:normal; font-weight: bold;}
+
+       ul.devicespecifications li div.devicespec-tit > span {position: absolute; top: 0; right:0;background:#416cbb; display:block; height:22px; margin-right:0; border-left: solid 1px #7a9bd4; }
+       ul.devicespecifications li div.devicespec-tit > span a.bt-arr   {display:block; width: 55px; height:15px; margin-left:0; padding-top:5px; padding-left: 14px; text-align:left; background: url('../images/ico_arr_hidden.gif') 46px 9px no-repeat;}
+       ul.devicespecifications li div.devicespec-tit > span a.bt-arr em        {display:inline-block; height: 14px; line-height:11px; font-size:11px; color:#fff; font-style:normal; margin-right: 8px;}
+       ul.devicespecifications li div.devicespec-tit > span * {vertical-align:middle;}
+
+       ul.devicespecifications li div.devicespec-con ul.con-list { width:100%;  }
+       ul.devicespecifications li div.devicespec-con ul.con-list li {line-height: 18px; margin:0; padding:0 0 0 7px; background: url("../images/ico_bullet_2_7.gif") 0 8px no-repeat; }
+
+       
+.top {text-align: right;}
+.toc, ul.toc{
+       margin: 10px 0px 0px 0px;
+       padding-left: 13px;
+       list-style: disc;
+       font-size: 9pt;
+       line-height: 115%; 
+       }
+       
+.toc-title {
+       font-size: 12pt;
+       color: #0E437D; 
+       font-weight: bold;
+       font-style: normal; 
+       line-height: normal; 
+       margin-top: 16pt;
+}
+       
+a.top {
+       display:block; 
+       float: right; 
+       position:fixed;
+       width: 28px; 
+       height:89px; 
+       bottom:50px;
+       z-index: 101;
+       right: 19%;
+       }
+
+a img {border: 0;}
+       
+/*     Footer includes space and a gray line above             */
+#footer {
+       position: fixed;
+       /* width: 100%; */
+    bottom: 0px;
+       text-align: center;
+       border-top: 1px solid #CCCCCC;
+       background-color: #FFFFFF;      
+       left: 21px;  right: 21px;
+}
+
+.footer {font-size: 8pt;}
+
+p.Table {
+       text-align: center;
+       margin-top: 40px;
+       margin-bottom: -19px;
+       padding: 0;
+}
+       
+p.Table strong {
+       font-family: Arial, Verdana, Helvetica, sans-serif;
+       font-size: 9pt;
+       color: #1C1C1C;
+       font-weight: bold;
+}
+
+caption { 
+       font-size: 9pt;
+       color: #1C1C1C;
+       font-weight: bold;
+       text-align: center;
+       margin-top: 20px;
+       margin-bottom: 0px;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memitem {
+       padding: 0;
+}
+
+/* @end */
+
+.highlight {
+       background-color:#E2E2FF;
+}
+
+/* //Layout fixing */
+
+div#profile {
+    position: relative;
+}
+#profile p {
+       text-align: right;
+}
+
+div#toc_border {
+    border: 2px solid rgb(86, 122, 156);  border-top-left-radius: 15px;  border-top-right-radius: 15px;  border-bottom-right-radius: 15px;  border-bottom-left-radius: 15px;  height: 565px;
+}
+
+#contents li {
+       padding-top: 3px;
+       margin-top: 5px;
+       /* overflow: auto; */
+}
+
+p {
+       /* overflow: auto; */
+}
diff --git a/preview/html/getting_started/download.htm b/preview/html/getting_started/download.htm
new file mode 100644 (file)
index 0000000..e9df214
--- /dev/null
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Downloading Visual Studio Tools for Tizen Preview</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+ <h1>Downloading Visual Studio Tools for Tizen Preview</h1>
+
+<div class="note"><strong>Note </strong> The latest Visual Studio Tools for Tizen installer automatically detects the installed Visual Studio version (2015 or 2017), and installs the applicable Tizen .NET development environment.</div>
+
+<p>The Visual Studio Tools for Tizen P<span>review&nbsp;</span>is a&nbsp;collection of tools for developing Tizen .NET applications. It consists of Visual Studio extension for templates, debugger, and Tizen Emulator. <span>The&nbsp;Visual Studio Tools for Tizen P</span><span>review</span> runs on Windows® with Visual Studio.</p>
+
+<p><span>For the installation of Visual Studio Tools for Tizen&nbsp;</span><span>Preview, your system&nbsp;requires&nbsp;</span><span>more than 1.5GB</span><span>&nbsp;available disk space.</span></p>
+
+<p>You can download by selecting a server below where is located near your side.</p>
+
+<ul>
+       <li><a href="http://download.tizen.org/sdk/vstools/VisualStudioToolsforTizen-preview-3.exe">Origin</a></li>
+       <li><a href="http://usa.sdk-dl.tizen.org/sdk/vstools/VisualStudioToolsforTizen-preview-3.exe">Global (USA)</a></li>
+       <li><a href="http://brazil.sdk-dl.tizen.org/sdk/vstools/VisualStudioToolsforTizen-preview-3.exe">Brazil</a></li>
+       <li><a href="http://singapore.sdk-dl.tizen.org/sdk/vstools/VisualStudioToolsforTizen-preview-3.exe">China</a></li>
+       <li><a href="http://singapore.sdk-dl.tizen.org/sdk/vstools/VisualStudioToolsforTizen-preview-3.exe">India</a></li>
+</ul>
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/getting_started/first_app.htm b/preview/html/getting_started/first_app.htm
new file mode 100644 (file)
index 0000000..b4af295
--- /dev/null
@@ -0,0 +1,549 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Creating Your First Tizen .NET Application</title>
+</head>
+
+<body onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+<div id="toc_border">
+<div id="toc">
+<p class="toc-title">Content</p>
+
+<ul class="toc">
+       <li><a href="#creating">Creating a Project</a></li>
+       <li><a href="#adding_class">Adding a Class Library and Restoring NuGet Manually</a></li>
+       <li><a href="#adding_project">Adding a Tizen Project to an Existing Xamarin Cross Platform Project</a></li>
+       <li><a href="#building">Building and Running Your Application</a></li>
+       <li><a href="#enhancing">Enhancing Your Tizen .NET Application</a></li>
+       <li><a href="#packaging">Packaging Your Tizen .NET Application</a></li>
+</ul>
+</div>
+</div>
+</div>
+
+
+<div id="container"><div id="contents"><div class="content">
+
+  <h1>Creating Your First Tizen .NET Application</h1>
+<p>The Tizen .NET framework allows you to efficiently and easily create beautiful applications for Tizen. A great way to experience this yourself is to follow the steps to your first Tizen .NET application. If you have to&nbsp;set up your development environment, please go to&nbsp;<a href="../tools/tools_overview.htm" rel="nofollow">set up the development environment</a>.</p>
+
+<p>To get started,</p>
+
+<ul class="rteindent2">
+       <li><a href="#creating">Creating a new project</a></li>
+       <li><a href="#building">Building and running your application</a></li>
+</ul>
+
+<p>After completing the above steps, you will have created your first application, and you can move on to&nbsp;<a href="#enhancing">Enhancing your application</a>.</p>
+
+<h2 id="creating">Creating a Project</h2>
+
+<p><span>To build a Tizen .NET application</span>, you must follow these general steps:</p>
+
+<ol>
+       <li>Create a project.</li>
+       <li>Design the user interface for the application.</li>
+       <li>Write code to implement the logic of the application.</li>
+       <li>Build and deploy the application.</li>
+</ol>
+
+<p>You can perform all of these steps in the IDE. The Tizen .NET preview works in Microsoft's Visual Studio (2015). After making sure the&nbsp;<a href="../tools/tools_overview.htm">development environment is properly&nbsp;set up</a>, you can create a new Tizen .NET project:</p>
+
+<ol>
+       <li>Launch Visual Studio.</li>
+       <li>To create a new project, select <strong>File&nbsp;&gt;&nbsp;New&nbsp;&gt;&nbsp;Project</strong>.
+       <p align="center"><img alt="Create a new project" height="300" src="../images/cs_first01.png" width="533" /></p>
+       </li>
+       <li>In the&nbsp;New Project&nbsp;window, select&nbsp;<strong>Tizen&nbsp;</strong>in the <strong>Templates </strong>tree on the left, and select <strong>Blank App (Tizen Xamarin.Forms Portable)</strong>.&nbsp;Visual Studio defines a name, location&nbsp;and solution name&nbsp;for you, but you can modify the values: at least set the name to something meaningful.
+       <p align="center"><img alt="Select a template" height="486" src="../images/cs_first02_1.png" width="700" /></p>
+       Once you are happy with the name and location, click <strong>OK</strong>.
+
+       <p align="center"><img alt="" height="302" src="../images/cs_first_creating_project_wizard_p3.png" width="702" /></p>
+       </li>
+</ol>
+
+<p>Tizen Project Wizard window is shown as next step. You can define the package name and define which profiles are added in your solution. Click <strong>OK</strong>.&nbsp;<span>&nbsp;If&nbsp;you select <strong>Common</strong> profile, Mobile and TV profile cannot be selected.</span></p>
+
+<p>A solution with 2 or 3 projects is created:</p>
+
+<ul>
+       <li align="left"><span>One project is named&nbsp;&lt;projectname&gt; (Portable)&nbsp;and contains the Xamarin.Forms code, which can be shared across platforms.</span></li>
+       <li align="left">If you selected the common profile in the Tizen Project Wizard, a common project is added with &lt;projectname&gt;.Tizen&nbsp;suffix and&nbsp;contains the code to instantiate your common&nbsp;application within the Tizen framework.</li>
+       <li align="left">If you selected the mobile profile in the Tizen Project Wizard, a mobile project is added with&nbsp;&lt;projectname&gt;.TizenMobile suffix and contains the code to instantiate your mobile application within the Tizen framework.</li>
+       <li align="left">If you selected the TV profile in the Tizen Project Wizard, a TV project is added with&nbsp;&lt;projectname&gt;.TizenTV suffix and contains the code to instantiate your TV application within the Tizen framework.</li>
+</ul>
+
+<p>If you are already familiar with Xamarin.Forms, this project has exactly the same structure as a Xamarin.Forms portable application, with the "Portable" project being the portable class library and the others being the platform-specific projects; however, for the Tizen .NET preview, only the Tizen platform-specific project is generated.</p>
+
+<p align="center"><img alt="" src="../images/cs_first_creating_solution_explorer.png" /></p>
+
+<p>The <code>.cs</code> file in the portable project already contains simple Xamarin.Forms code, which makes a basic UI. Therefore, you can now&nbsp;build and run your application.</p>
+
+<p>When you are done running your first application, you can <a href="#enhancing">enhance it further</a> by reading a brief overview of what the code generated by the template is doing, and learning about a few more concepts to add to your application appeal.</p>
+
+<h2 id="adding_class">Adding a Class Library and Restoring NuGet Manually</h2>
+
+<p>To add a class library and restore NuGet manually:</p>
+
+<ol>
+       <li>If you add a Class Library (Tizen) in Visual Studio, the editing window shows red wavy lines.
+       <p align="center"><strong><img alt="Red wavy lines" height="253" src="../images/cs_creating04.png" width="768" /></strong></p>
+       </li>
+       <li>Right-click the solution item in the <strong>Solution Explorer</strong> view and click <strong>Restore NuGet Packages</strong>.
+       <p align="center"><img alt="Restore NuGet packages" height="278" src="../images/cs_creating05.png" width="496" /></p>
+
+       <p>Wait for the NuGet restoring to complete. Click the ClassLibrary project, and then click <strong>Refresh</strong> when the <strong>Refresh</strong> button appears.</p>
+
+       <p align="center"><img alt="Refresh" height="230" src="../images/cs_creating06.png" width="300" /></p>
+       </li>
+       <li>The .NETStandard.Library shows up and the code looks clean.
+       <p align="center"><strong><img alt=".NETStandard.Library" height="248" src="../images/cs_creating07.png" width="771" /></strong></p>
+       </li>
+</ol>
+
+<p>The following figure shows warning messages that you can see in the <strong>Error List</strong> window when building the project. These can occur because the application is based on the Microsoft.NETCore.App and the Class library is based on NETStandard.Library, and the difference makes Visual Studio 2015 or 2017 show a warning. However, it is OK to run the project, because the Microsoft.NETCore.App includes the NETStandard.Library set.</p>
+
+<p align="center"><strong>Figure: Warning messages</strong></p>
+
+<p align="center"><img alt="Warning messages" height="169" src="../images/cs_creating08.png" width="656" /></p>
+
+<p align="center">&nbsp;</p>
+
+<h2 id="adding_project">Adding a Tizen Project to an Existing Xamarin Cross Platform Project</h2>
+
+<p align="left">The Xamarin cross platform template consist of a shared PCL (Portable Class Library) and multiple platform dependent application projects for IOS and Android.</p>
+
+<p align="left">To add a new Tizen project:</p>
+
+<ol>
+       <li align="left">In the Visual Studio menu, go to <strong>File &gt; New &gt; Project</strong> to open the <strong>New Project</strong> dialog.</li>
+       <li align="left">Select <strong>Cross-Platform</strong> and <strong>Blank App (Xamarin.Forms Portable)</strong>.
+       <p align="center"><img alt="" height="548" src="../images/xamarin_application.png" width="800" /></p>
+       </li>
+       <li align="left">Right-click the solution item in the <strong>Solution Explorer</strong> view and click <strong>Add &gt; New Project</strong>.</li>
+       <li align="left">Select Tizen <strong><strong>Blank App (Tizen Xamarin.Forms Portable)</strong></strong> and click <strong><strong>OK</strong></strong>.
+       <p align="center"><img alt="" height="445" src="../images/add_tizen_project2.png" width="500" /></p>
+       </li>
+       <li align="left">Select the Tizen application’s package name and profile in the Tizen project wizard.
+       <p align="center"><img alt="" height="105" src="../images/tizen_blank_app.png" width="400" /></p>
+       </li>
+       <li align="left">The <strong><strong>Solution Explorer</strong></strong> shows the 2 Tizen projects are added in your existing Xamarin.Forms solution. The Tizen project is set as a startup project.
+       <p align="center"><img alt="" height="189" src="../images/solution_explorer_tizen_project2.png" width="261" /></p>
+       </li>
+</ol>
+
+<div class="note"><strong>Note</strong>Since the Tizen projects have dependencies with the Xamarin.Forms NuGet package version, you need to install the Xamarin.Forms NuGet package that has the same version as Xamarin.Forms.Platform.Tizen. Mismatching NuGet versions can cause build or packaging problems. To install the proper Xamarin.Forms NuGet package, right-click the solution item in the <strong>Solution Explorer</strong> view and select <strong>Manage NuGet Packages for Solution</strong>.</div>
+
+<p align="center"><strong>Figure: Mismatched NuGet version warning</strong></p>
+
+<p align="center"><img alt="" height="235" src="../images/platform_mismatch_warning.png" width="500" /></p>
+
+<p align="center">&nbsp;</p>
+
+<p align="center"><strong>Figure: Installing the correct NuGet package</strong></p>
+
+<p align="center"><img alt="" height="300" src="../images/change_nuget_version.png" width="700" /></p>
+
+<h2 id="building">Building and Running Your Application</h2>
+
+<p>When you have created your first project, you can build and run it:</p>
+
+<ol>
+       <li>Register an author certificate.</li>
+       <li>Build the solution.</li>
+       <li>Deploy the application to a target.</li>
+       <li>Run the application.</li>
+</ol>
+
+<h3 id="Buildandrunyourapplication-1.RegisteranAuthorCertificate(onceonly)">1 Registering an Author Certificate</h3>
+
+<p><strong>If you already have registered<span>&nbsp;a certificate in Visual Studio or can use a default Tizen certificate, you can skip this step.</span></strong></p>
+
+<p>After installing the Visual Studio plugin, and before making Tizen package, it is useful to set up a signing certificate.</p>
+
+<p>You have 3 options:</p>
+
+<ul>
+       <li>Use a default Tizen certificate
+       <p>If you do not need to upload your application to Tizen Application store, you can use a default certificate and deploy your application in the Tizen Emulator too. You can check this in <strong>Menu &gt; Tools &gt; Options &gt; Tizen &gt; Certification</strong>. If you do not check the <strong>Sign the&nbsp;<code>.tpk&nbsp;</code>&nbsp;file using the following option</strong> box, your application is made with a default certificate.</p>
+
+       <p align="center"><strong>Figure: Tizen default certificate registration</strong></p>
+
+       <p align="center"><img alt="" src="../images/cs_first_building_certificate_01.png" /></p>
+       </li>
+       <li>Use a Tizen certificate profile
+       <p>If you have used Tizen Studio and have already generated a certificate profile using the Tizen Certificate Manager (<strong>Menu &gt; Tools &gt; Tizen &gt; Tizen Certificate Manager</strong>, the usage is added in tools menu too), the profile information can be read in <code>%ToolPath/Tizen/SDK/user-data/profile</code>.</p>
+
+       <p align="center"><strong>Figure: Tizen certificate profile registration</strong></p>
+
+       <p align="center"><img alt="" src="../images/cs_first_building_certificate_02.png" /></p>
+       </li>
+       <li>
+       <p align="left">Use your own certificates.</p>
+
+       <p>If you already have author and distributor certificates, you can import them in <strong>Menu &gt; Tools &gt; Options &gt; Tizen &gt; Certification</strong>.</p>
+
+       <p align="center"><strong>Figure: Tizen certificates registration </strong></p>
+
+       <p align="center"><img alt="" src="../images/cs_first_building_certificate_03.png" /></p>
+       </li>
+</ul>
+
+<p align="center">&nbsp;</p>
+
+<h3 id="Buildandrunyourapplication-2.Build">2 Building the Solution</h3>
+
+<p>To build the solution, go to&nbsp;<strong>Build&nbsp;&gt;&nbsp;Build Solution</strong> in the main Visual Studio menu (you can also right-click the solution title in the <strong>Solution Explorer</strong> window and select&nbsp;<strong>Build</strong>). If the build process works all the way through to the end, the final part of the build output window shows something similar to the following figure - indicating that a <code>.tpk</code> package was built.</p>
+
+<p align="center"><strong>Figure: Building process output</strong></p>
+
+<p align="center"><img alt="" height="161" src="../images/cs_first_building_process.png" width="850" /></p>
+
+<p>Tizen .NET applications are always deployed as installed packages. The package files take the <code>.tpk</code> suffix, and the package generation is controlled by the manifest file. The Visual Studio template generates a package manifest, which is named&nbsp;<code>tizen-manifest.xml</code>&nbsp;and placed at the top level of the .Tizen project. The default manifest is sufficient to build these example applications without modification. If you need to make any changes, such as changing the icon displayed when the application is installed (it defaults to the Tizen logo), or installing resources that are used by the application at runtime, see <a href="#packaging">Packaging Your Tizen .NET Application</a>.</p>
+
+<h3>3 Deploying the Application</h3>
+
+<p>To run the application, you must first deploy it to the target: either a device or an emulator. Deploying means transfering the <code>.tpk</code> (package file) to the target and invoking the Tizen package manager to install it; this usually happens in a single command.</p>
+
+<p>To deploy to a target:</p>
+
+<ol>
+       <li>The target can be a development device (connected to a USB port), or the Tizen emulator. Launch the emulator from the Visual Studio menu by going to<strong>&nbsp;Menu &gt; Tools &gt; Tizen &gt; Tizen Emulator Manager</strong>.
+
+       <p align="center"><img alt="" height="589" src="../images/cs_first_building_emulator_manager.png" width="602" /></p>
+       </li>
+       <li>You can create emulators as shown above by clicking <strong>Create</strong>. For more information on creating emulator instances, see <a href="../tools/emulator_manager.htm">Emulator Manager</a>.</li>
+       <li>The emulator launches after a small delay. When it is up and running, the display inside Visual Studio changes a bit, and the green debug button updates to show the running emulator.
+       <p align="center"><img alt="" src="../images/cs_first_building_selected_emulator.png" /></p>
+       </li>
+</ol>
+
+<p>Communication with the device happens through the SDB program (Smart Development Bridge). Visual Studio uses this program behind the scenes, so you normally do not have to use it directly, but in case there are problems, you can run the SDB manually to check that it actually finds the device.<br />
+To check the SDB, click <strong>Menu &gt; Tools &gt; Tizen &gt; Tizen Sdb Command Prompt</strong>, and type sdb devices.</p>
+
+<p>The following figure shows an example of a successful emulator detection.</p>
+
+<p align="center"><strong>Figure: Emulator detection</strong></p>
+
+<p align="center"><img alt="Emulator detection" height="450" src="../images/cs_first08.png" width="857" /></p>
+
+<p>If you want to change the target to be deployed, you can change it in the Visual Studio configuration manager as shown in the following figure. After selecting the right target in the combo box, go to debugging or start without debugging.</p>
+
+<p align="center"><strong>Figure: Emulator list</strong></p>
+
+<p align="center"><img alt="" src="../images/cs_first_building_emulator_list.png" /></p>
+
+<h3 id="Buildandrunyourapplication-3.Run">4 Running the Application</h3>
+
+<p>After the deployment, you can launch the application. If the deployment was successful, the application icon is visible on the device screen. Click the icon to launch the application. The following figure shows the launched application (as seen on the emulator).</p>
+
+<p align="center"><strong>Figure: Application running on the mobile emulator</strong></p>
+
+<p align="center"><img alt="Application running" height="497" src="../images/cs_first09_1.png" width="290" /></p>
+
+<p align="center"><strong>Figure: Application running on the TV emulator</strong></p>
+
+<p align="center"><img alt="" src="../images/cs_first_building_emulator_tv1.png" /></p>
+
+<p>If the deployment had problems, try to use the SDB to install the application:</p>
+
+<pre class="prettyprint">
+$ sdb install &lt;path-to-package&gt;/XamarinApplication1.TizenMobile.tpk </pre>
+
+<div>
+<p align="left">or</p>
+
+<div>
+<pre class="prettyprint">
+$ sdb install &lt;path-to-package&gt;/XamarinApplication1.TizenTV.tpk </pre>
+
+<p align="left">If the installation succeeds, the application icon shows up on the emulator or device screen, and you can click it to launch the application.</p>
+</div>
+</div>
+
+<h2 id="enhancing">Enhancing Your Tizen .NET Application</h2>
+
+<p>The C# code from your first application displays a label centered on the screen, containing the <strong>Welcome to Xamarin Forms!</strong> text. The <strong>Hello</strong> application (created from the template) is set up and ready to be built and run by Visual Studio right after you create it, as shown in the preceding sections of this topic.</p>
+
+<p>Xamarin.Forms provides a way to build portable applications which run in a native way: it provides a set of controls to help build a user interface, as well as generating code which adapts the user interface code to use the native facilities of the supported platforms. The following information just scratches the surface of these controls, but it is enough to give you an idea of how to build on the initial application.</p>
+
+<p>The following example shows the portable code portion of the Tizen Xamarin.Forms Portable project <code>XamarinApplication1.cs</code> file, generated by the template:</p>
+
+<pre class="code">
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Xamarin.Forms;
+namespace XamarinApplication1
+{
+    public class App : Application
+    {
+        public App()
+        {
+            // Root page of your application
+            MainPage = new ContentPage
+            {
+                Content = new StackLayout
+                {
+                    VerticalOptions = LayoutOptions.Center,
+                    Children = {
+                        new Label {
+                            HorizontalTextAlignment = TextAlignment.Center,
+                            Text = "Welcome to Xamarin Forms!"
+                        }
+                    }
+                }
+            };
+        }
+        protected override void OnStart()
+        {
+            // Handle when your app starts
+        }
+        protected override void OnSleep()
+        {
+            // Handle when your app sleeps
+        }
+        protected override void OnResume()
+        {
+            // Handle when your app resumes
+        }
+    }
+}
+</pre>
+
+<p>&nbsp;</p>
+
+<p>The Xamarin.Forms controls used to create the user interface of a Tizen .NET application can be roughly categorized into 4 groups:</p>
+
+<ul>
+       <li><code>Pages</code> represent screens within an application. The UI of an application is built from one or more pages and with a navigation mechanism, if needed. The navigation scheme is specified by the&nbsp;<code>INavigation</code>&nbsp;interface. Many pages are of the&nbsp;<code>ContentPage</code>&nbsp;type, which describes the view of a single screen.</li>
+       <li><code>Layouts</code> are containers used to compose views into logical structures. Some available types are absolute, grid, relative, and stack layouts; each provide mechanisms, such as orientation, spacing, and padding, to control the layout. The&nbsp;<code>StackLayout</code>&nbsp;class is a basic layout where you just stack controls on top of one another (or side-by-side). Layouts can be bundled and nested in each other.</li>
+       <li><code>Views</code> are the controls displayed on the user interface, such as labels, buttons, and text entry boxes.</li>
+       <li><code>Cells</code> are specialized elements used for items in tables and lists, which help describe how the items must be rendered.</li>
+</ul>
+
+<p>You can read all about how Xamarin.Forms works at the <a class="external-link" href="https://developer.xamarin.com/guides/xamarin-forms/" rel="nofollow">Xamarin Developer Center</a>. In addition, there is a <a class="external-link" href="https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/" rel="nofollow">comprehensive book about Xamarin.Forms</a>&nbsp;from Microsoft Press, which is available as a free download. This topic does not duplicate the definitive documentation, only introduces the controls in use in the example above, and a bit more.</p>
+
+<p>The Xamarin.Forms controls in play in this application:</p>
+
+<ol>
+       <li>The&nbsp;<code>App</code>&nbsp;class is declared, deriving from the&nbsp;<a class="external-link ext" href="https://developer.xamarin.com/api/type/Xamarin.Forms.Application/" rel="nofollow">Application</a>&nbsp;class, which is the Xamarin.Forms class that represents a cross-platform mobile application.</li>
+       <li>The&nbsp;<code>App</code>&nbsp;class constructor creates a&nbsp;<code>ContentPage</code>&nbsp;instance (line 14) where you set up the view to display.</li>
+       <li>You assign what you want to display to the&nbsp;<code>Content</code>&nbsp;property of that class.
+       <p>In this case, the content is a container, specifically a&nbsp;<code>StackLayout</code>&nbsp;instance (line 16). This is just a layout that positions its child elements in a single vertical (by default) or horizontal line - thus the name: the elements are "stacked" on top of one another.</p>
+       </li>
+       <li>You set up the child elements by adding to the&nbsp;<code>Children</code>&nbsp;property (line 19) - in this case just a single&nbsp;<code>Label</code>&nbsp;instance (line 20), whose&nbsp;<code>Text</code>&nbsp;property you set to the message you want to display.</li>
+       <li>Some lines (18 and 21) implement some control over the layout.</li>
+       <li>Besides the&nbsp;<code>App</code>&nbsp;constructor, the rest of the file is just boilerplate - event handlers from the&nbsp;<code>Application</code>&nbsp;class that can be filled in if the application needs code to handle application state changes.</li>
+</ol>
+
+<p>That is a very brief view without any real details; the Xamarin.Forms documentation goes into much more detail on each of the classes, interfaces, properties, and attributes involved and is a good place to do further research.</p>
+
+<p>The code does not show the instantiation of the <code>App</code> class. Since application launching is platform-specific, the launching part, including the instatiation of the <code>App</code> class and the declaration of the <code>Main()</code> method (required as the entry point of every C# program), happens in the .Tizen project, in the matching file there. For example, if the file you are looking at in the portable project is named&nbsp;<code>XamarinApplication1.TizenMobile.cs</code>&nbsp;or &nbsp;<code>XamarinApplication1.TizenTV.cs</code>, the platform-specific file is <code>XamarinApplication1.TizenMobile.cs</code>&nbsp;or &nbsp;&nbsp;<code>XamarinApplication1.TizenTV.cs</code>&nbsp;<span>&nbsp;</span>in the .Tizen project. For an application like this one, which just uses Xamarin.Forms controls, the generated code at the .Tizen part of the project contains everything needed, and you do not need to make any modifications. The following example shows the content of the <code>XamarinApplication1.TizenMobile.cs</code>&nbsp;or &nbsp;<code>XamarinApplication1.TizenTV.cs</code>&nbsp;file:</p>
+
+<pre class="code">
+using System;
+namespace XamarinApplication1.TizenMobile
+{
+    class Program : global::Xamarin.Forms.Platform.TizenMobile.FormsApplication
+    {
+        protected override void OnCreate()
+        {
+            base.OnCreate();
+            LoadApplication(new App());
+        }
+        static void Main(string[] args)
+        {
+            var app = new Program();
+            global::Xamarin.Forms.Platform.Tizen.Forms.Init(app);
+            app.Run(args);
+        }
+    }
+}
+</pre>
+
+<h3 id="EnhancingYourFirstTizen.NETApplication-Howtodefineabutton">Defining a Button</h3>
+
+<p>The basic template uses a label, which displays text in an area of the screen. The properties inherited from the base classes of <code>Label</code> give lots of control over the display: font attributes, families, and sizes as well as layout options. A button control is relatively similar, but is specifically designed to react to click events. As a result, the <code>Button</code> class defines an event called <code>Clicked</code>, which tells the application what to do when the click event takes place. To instantiate a generic button:</p>
+
+<pre class="code">
+Button button = new Button
+{
+    Text = "Click here!"
+};
+button.Clicked += OnButtonClicked;
+</pre>
+
+<p>The above example adds the <code>OnButtonClicked</code> method to the button's <code>Clicked</code> event, and you need to define that method. When an event triggers, 2 parameters are delivered to any handler set up to watch it. The first parameter is an object representing the control that triggered the event and the second parameter is the event data appropriate to the event type:</p>
+
+<pre class="code">
+void OnButtonClicked(object sender, EventArgs e)
+{
+    // Do something with the click event
+}
+</pre>
+
+<h3 id="EnhancingYourFirstTizen.NETApplication-AddingaLabelwhichwillbeupdatedwhenthebuttonisclicked">Adding a Label to be Updated When the Button is Clicked</h3>
+
+<p>To build the modified application, create a new project. The default name for the second project is <strong>XamarinApplication2</strong> (as shown in the namespace declaration in the following code example), but of course you can name it anything you want.</p>
+
+<p>In order to do something visible on the screen to show that you actually got the click event, define another label. Give the label a value (by setting the <code>Text</code> property) to be displayed in the initial state, and have the event handler update the <code>Text</code> property (and color) once the click event triggers:</p>
+
+<ol>
+       <li>Since the the click event triggers outside the class constructor, you must declare the label and a click counter up at the class level (lines 11-12).</li>
+       <li>The button is instantiated (line 16) as is the new label (line 23): these 2 are then included as children of the&nbsp;<code>StackLayout</code>&nbsp;(lines 41-42), so they are stacked below the label from the initial program.</li>
+       <li>In this example, the initial text of the first label is changed to "Welcome to Tizen!".</li>
+       <li>The event handler is added (lines 47-52). In it, increment the click counter, build a string showing how many times the button has been clicked, and set the&nbsp;<code>Text</code> property of the label to that string. Just for visual effect, also set the color of the label to something different than the initial color (which was set at line 26).</li>
+</ol>
+
+<p>The following example shows the modified code:</p>
+
+<pre class="code">
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Xamarin.Forms;
+namespace XamarinApplication2
+{
+    public class App : Application
+    {
+        Label label;
+        int clicks = 0;
+        public App()
+        {
+            Button button = new Button
+            {
+                Text = "Click here!",
+                BackgroundColor = Color.Red,
+                HorizontalOptions = LayoutOptions.Center,
+            };
+            button.Clicked += OnButtonClicked;
+            label = new Label
+            {
+                Text = "unclicked",
+                HorizontalOptions = LayoutOptions.Center,
+            };
+            // The root page of your application
+            MainPage = new ContentPage
+            {
+                Content = new StackLayout
+                {
+                    VerticalOptions = LayoutOptions.Center,
+                    Children = {
+                        new Label {
+                            HorizontalTextAlignment = TextAlignment.Center,
+                            Text = "Welcome to Tizen!"
+                        },
+                        button,
+                        label,
+                    }
+                }
+            };
+        }
+        void OnButtonClicked(object s, EventArgs e)
+        {
+            clicks += 1;
+            label.Text = String.Format("Number of clicks: {0}", clicks);
+        }
+        protected override void OnStart()
+        {
+            // Handle when your app starts
+        }
+        protected override void OnSleep()
+        {
+            // Handle when your app sleeps
+        }
+        protected override void OnResume()
+        {
+            // Handle when your app resumes
+        }
+    }
+
+
+}
+</pre>
+
+<p>The following image shows what happens if you try out the modified code and run the application with it. At the startup, the button is red and the text below the button is <strong>unclicked</strong>. After a couple of clicks, the click counter is displayed below the button, and the button color has changed.</p>
+
+<p align="center"><strong>Figure: Enhanced application</strong></p>
+
+<p align="center"><img alt="Enhanced application" height="516" src="../images/cs_enhancing01_1.png" width="290" />&nbsp;<img alt="" height="516" src="../images/cs_enhancing02_1.png" width="290" /></p>
+
+<h2 id="packaging">Packaging Your Tizen .NET Application</h2>
+
+<p>This section gives a basic overview of packaging, to aid in understanding how to make simple changes. For more complex applications, see the packaging information in the Tizen documentation.</p>
+
+<p>A Tizen .NET application is deployed in the form of an installable package, where the package file takes the suffix&nbsp;<code>.tpk</code>. A Tizen .NET package has a relatively simple structure: internally it is a zipfile with content that matches the directory layout of the project.</p>
+
+<p>In the following figure, the layout of the platform specific (.Tizen) project is shown. It includes the&nbsp;<code>lib</code>,&nbsp;<code>res</code>, and&nbsp;<code>shared</code>&nbsp;(with a&nbsp;<code>res</code>&nbsp;subdirectory containing an image file) directories&nbsp;, and the&nbsp;<code>tizen-manifest.xml</code>&nbsp;file. There is also the&nbsp;<code>bin</code>&nbsp;directory, which Visual Studio only shows if you select the&nbsp;<span>Show all files</span>&nbsp;option for the solution. These pieces all go into the package.</p>
+
+<p align="center"><strong><span>Figure: Project layout</span></strong></p>
+
+<p align="center"><img alt="Project layout" height="546" src="../images/cs_first_creating_solution_explorer.png" width="346" /></p>
+
+<p>Package generation (and in fact installation) is controlled by a package manifest file, which is named&nbsp;<code>tizen-manifest.xml</code>. The Visual Studio template generates a package manifest, and places it at the top of the directory tree of the .Tizen project. The following figure shows the&nbsp;<code>.tpk</code>&nbsp;file for the initial application, to illustrate how the combination of the directory layout and the package manifest leads to the actual package.</p>
+
+<p align="center"><strong><span>Figure: Package content</span></strong></p>
+
+<p align="center"><img alt="Package content" height="117" src="../images/cs_first_packaging_content.png" width="329" /></p>
+
+<p>The initial points to learn here are:</p>
+
+<ul>
+       <li>The&nbsp;<code>shared</code>&nbsp;directory is for items that are considered systemwide (shareable). The application icon is packaged in&nbsp;<code>shared/res</code>: on installation, the icon appears on the home screen with the icons for the other applications. You can either replace the icon (which is just a copy of the default Tizen logo) with one of your own using the file name generated by Visual Studio,&nbsp;or&nbsp;put a new icon in the same project directory and update the package manifest to indicate the new name.</li>
+       <li>The&nbsp;<code>res</code>&nbsp;directory is for application-private resources. If the application needs a file to open at runtime, it can be placed here.</li>
+       <li>The&nbsp;<code>bin</code>&nbsp;directory contains the generated application executable.</li>
+       <li>The&nbsp;<code>lib</code>&nbsp;directory contains the generated application support code.<br />
+       &nbsp;If you use nugget libraries, they are imported in the <code>lib</code> directory.</li>
+       <li>The package manifest is included in the package, as it is used at the installation time.</li>
+       <li>2 signature files (author and distributor) are included, as they are checked at the installation time.</li>
+</ul>
+
+<p>Other information relating to packaging includes declarations of features and privileges, and the placement of language-specific files.</p>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/getting_started/installing.htm b/preview/html/getting_started/installing.htm
new file mode 100644 (file)
index 0000000..0dcf150
--- /dev/null
@@ -0,0 +1,191 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Installing Visual Studio Tools for Tizen</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+ <h1>Installing Visual Studio Tools for Tizen</h1>
+
+<h2>Prerequisites</h2>
+
+<p>To work with Visual Studio Tools for Tizen, make sure that your system meets the following requirements.</p>
+
+<p>For the installation of Visual Studio Tools for Tizen Preview, your system&nbsp;requires more than 1.5GB available disk space.</p>
+
+<h3 align="left">&nbsp;Visual Studio 2017 or Visual Studio 2015 Update 3</h3>
+
+<p align="left">Visual Studio Tools for Tizen works with all variations including Community. Installation or re-installation with the C#/.NET (Xamarin v3.1.1) in Cross Platform Mobile Development is recommended.</p>
+
+<h3 align="left">.NET Core 1.0.1&nbsp;Tools Preview 2 or later</h3>
+
+<p align="left">This update is needed to set the .NET development environment. For more information, see <a class="ext" href="https://www.microsoft.com/net/core#windows" target="_blank">https://www.microsoft.com/net/core#windows</a>.</p>
+
+<h3 id="java">Java Development Kit (JDK) Requirements</h3>
+
+<p>You must install a Java Development Kit (JDK) 8 or higher to use Emulator Manager &amp; Certificate Manager which were introduced at Preview 2. Do not install OpenJDK.</p>
+
+<p>Download the JDK from the <a class="ext" href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">official Oracle Web site</a>. Select the appropriate platform for your hardware architecture and Windows® version. Then, run the downloaded execution file and follow the displayed instructions.</p>
+
+<h3 align="left">Emulator Prerequisites</h3>
+
+<p align="left">Tizen emulator for Visual Studio requires an equivalent environment with an emulator in the Tizen Studio. To check the hardware and software requirements of the Tizen emulator, see <a href="../../../org.tizen.studio/html/download/prerequisites.htm#emulator">Emulator Requirements</a>.</p>
+
+<ul>
+       <li align="left">Emulator requires 64-bit host PC and 64-bit Windows only.</li>
+       <li align="left">Intel HAXM environment is required for accelerating the Tizen emulator. Intel HAXM is started automatically when you try to install Visual Studio Tools for Tizen. For more information, see <a href="../../../org.tizen.studio/html/download/hardware_accelerated_execution_manager.htm">Hardware Accelerated Execution Manager</a>.</li>
+       <li>Make sure <strong>Hyper-V</strong> should be disabled (in Windows® 8 or later):
+       <ol>
+               <li align="left" value="1">Run <strong>Programs and Features</strong> in the <strong>Start</strong> menu.
+               <p align="center"><img alt="Programs and Features" height="401" src="../images/cs_prerequiste01.png" width="250" /></p>
+               </li>
+               <li align="left" value="2">Select <strong>Turn Windows features on or off</strong>.</li>
+               <li align="left" value="3">Disable <strong>Hyper-V</strong>.
+               <p align="center"><img alt="Disaböe Hyper-V" height="295" src="../images/cs_prerequiste02.png" width="331" /></p>
+               </li>
+               <li>Reboot the host PC</li>
+       </ol>
+       </li>
+</ul>
+
+<p>&nbsp;</p>
+
+<h2>Visual Studio Tools for Tizen Preview Installation</h2>
+
+<p>The following steps are needed in installing Visual Studio Tools for Tizen.</p>
+
+<h3 align="left">1 InstallShield</h3>
+
+<p>The InstallShield wizard sets the basic environment for the Visual Studio extension installer and Tizen Emulator installer. The Tizen C# development environment is organized step by step with a few clicks.</p>
+
+<p align="center"><strong>Figure: Installing Visual Studio Tools for Tizen with InstallShield</strong></p>
+
+<p align="center"><img alt="" height="381" src="../images/cs_install01.png" width="500" /></p>
+
+<p>Since the license contains important legal notifications for using Visual Studio Tools for Tizen, read it line by line, and check the <strong>I accept the terms in the license agreement</strong> check box only when you agree with the license statement.</p>
+
+<p align="center"><strong>Figure: Visual Studio Tools for Tizen License Agreement</strong></p>
+
+<p align="center"><img alt="" height="381" src="../images/cs_install02.png" width="500" /></p>
+
+<h3>2 VSIX Installation</h3>
+
+<p>After the Install Shield&nbsp;process, the VSIX installer for Tizen MI-based Debugger and Visual Studio Tools for Tizen are launched. These installers add the Tizen application development extensions to Visual Studio.</p>
+
+<p align="center"><strong>Figure: MI-based Debugger installer</strong></p>
+
+<p align="center"><img alt="" height="331" src="../images/cs_install03.png" width="436" /></p>
+
+<p align="center"><strong>Figure: VISIX installer</strong></p>
+
+<p align="center"><img alt="" height="331" src="../images/cs_install04.png" width="436" /></p>
+
+<h3>3 Intel HAXM Installation</h3>
+
+<p>After the VSIX installation process, the Intel HAXM installer is launched. Intel HAXM is needed to accelerate the Tizen Emulator.</p>
+
+<p align="center"><strong>Figure: Intel HAXM installer</strong></p>
+
+<p align="center"><img alt="Start installation" height="400" src="../images/hardware_start_instal.png" width="495" /></p>
+
+<p>The memory limitation for the Tizen Emulator can be managed manually. The default value is recommended, but you can set a suitable memory limitation for your development environment.</p>
+
+<p align="center"><strong>Figure: Memory management in Intel HAXM</strong></p>
+
+<p align="center"><img alt="Adjust RAM" height="387" src="../images/hardware_ram.png" width="495" /></p>
+
+<h3 id="ToolsRelease-Checkinginstallation">4 Installation Checks</h3>
+
+<p>To check that the installation has been successful:</p>
+
+<ol>
+       <li>Run Visual Studio 2015.</li>
+       <li>Go to <strong>Tools &gt; Extensions and Update</strong>. If you find the <strong>Visual Studio Tools for Tizen</strong> and <strong>Tizen MI-based Debugger</strong> items installed, everything is OK.
+       <p align="center"><img src="../images/cs_install05.png" /></p>
+
+       <p align="center"><img src="../images/cs_install06.png" /></p>
+       </li>
+       <li>Go to <strong>File &gt; New &gt; Project</strong> to find the <strong>Tizen</strong> entry with some Tizen-specific templates in the <strong>Visual C#</strong> tree.
+       <p align="center"><img align="middle" alt="" height="284" src="../images/cs_install07_1.png" width="500" /></p>
+       </li>
+</ol>
+
+<h2 id="ToolsRelease-Whatisinstalled">Installed Components</h2>
+
+<p>The following components are installed:</p>
+
+<ul>
+       <li>In&nbsp;<code class="prettyprint"><span class="tag">&lt;Program</span><span class="pln">&nbsp;</span><span class="atn">Files</span><span class="tag">&gt;</span><span class="pln">/Tizen/Tools</span></code>:
+
+       <ul>
+               <li><code class="prettyprint"><span class="typ">Tizen</span><span class="pun">.</span><span class="typ">Extension</span><span class="pun">.</span><span class="pln">vsix</span></code>: Visual Studio extension with project templates and debugging</li>
+               <li><code class="prettyprint"><span class="typ">Tizen</span><span class="pun">.</span><span class="typ">MIDebugPackage</span><span class="pun">.</span><span class="pln">vsix</span></code>: Visual Studio extension with MIEngine fork for Tizen</li>
+       </ul>
+       </li>
+       <li>In&nbsp;<code class="prettyprint"><span class="tag">&lt;Program</span><span class="pln">&nbsp;</span><span class="atn">Files</span><span class="tag">&gt;</span><span class="pln">/Tizen/SDK/platforms</span></code>: Mobile and TV Emulator&nbsp;images</li>
+       <li>​In&nbsp;<code class="prettyprint"><span class="tag">&lt;Program</span><span class="pln">&nbsp;</span><span class="atn">Files</span><span class="tag">&gt;</span><span class="pln">/Tizen/SDK/tools</span></code>:
+       <ul>
+               <li><code class="prettyprint"><span class="pln">sdb</span><span class="pun">.</span><span class="pln">exe</span></code>: For connection with the emulator and target devices</li>
+               <li>In&nbsp;<code class="prettyprint"><span class="pln">certificate</span><span class="pun">-</span><span class="pln">generator</span></code>: Storage for&nbsp;Tizen certificates</li>
+               <li>In&nbsp;<code class="prettyprint"><span class="pln">certificate</span><span class="pun">-</span><span class="pln">manager</span></code>: Tool&nbsp;for managing Tizen certificates</li>
+               <li>In&nbsp;<code class="prettyprint"><span class="pln">device</span><span class="pun">-</span><span class="pln">manager</span></code>: Tool for managing devices including Tizen emulators and devices</li>
+               <li>In&nbsp;<code class="prettyprint"><span class="pln">emualtor</span></code>: Tool for emulator manager</li>
+               <li>In&nbsp;<code class="prettyprint"><span class="pln">on</span><span class="pun">-</span><span class="pln">demand</span></code>: lldb engines for on-demand debugger</li>
+       </ul>
+       </li>
+       <li><code class="prettyprint"><span class="typ">In</span><span class="pun">&lt;</span><span class="typ">Program</span><span class="pln">&nbsp;</span><span class="typ">Files</span><span class="pun">&gt;</span><span class="str">/MSBuild/</span><span class="typ">Tizen</span></code>:
+       <ul>
+               <li><code class="prettyprint"><span class="typ">Tizen</span><span class="pun">.</span><span class="typ">CSharp</span><span class="pun">.</span><span class="pln">targets</span></code>: Used for building</li>
+               <li><code class="prettyprint"><span class="pln">bin</span><span class="pun">/</span><span class="pln">author_test</span><span class="pun">.</span><span class="pln">p12</span></code>: Used as a test author certificate file
+               <ul>
+                       <li>The password is&nbsp;<strong><span>author_test</span></strong>&nbsp;without double quotation marks.</li>
+               </ul>
+               </li>
+               <li><code class="prettyprint"><span class="pun">​</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">tizen</span><span class="pun">-</span><span class="pln">distributor</span><span class="pun">-</span><span class="pln">signer</span><span class="pun">.</span><span class="pln">p12</span></code>: Used as a test distributor certificate file</li>
+               <li><code class="prettyprint"><span class="pln">bin</span><span class="pun">/</span><span class="pln">libxmlsec</span><span class="pun">-</span><span class="lit">1.2</span><span class="pun">.</span><span class="lit">18</span></code>: Used for signing</li>
+       </ul>
+       </li>
+</ul>
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/getting_started/porting_xamarinforms.htm b/preview/html/getting_started/porting_xamarinforms.htm
new file mode 100644 (file)
index 0000000..0201589
--- /dev/null
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Porting Xamarin.Forms Apps to Tizen using Visual Studio</title>
+</head>
+
+<body onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+<div id="toc_border">
+<div id="toc">
+<p class="toc-title">Content</p>
+
+<ul class="toc">
+       <li><a href="#opening">Opening a Xamarin.Forms Sample Application</a></li>
+       <li><a href="#adding">Adding a Tizen-dependent Project</a></li>
+       <li><a href="#deploying">Deploying and Running the Application</a></li>
+       <li><a href="#demoshots">Sample UI in Various Platforms</a></li>
+</ul>
+</div>
+</div>
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+  <h1>Porting Xamarin.Forms Apps to Tizen using Visual Studio</h1>
+
+
+<div class="wiki-content" id="main-content">
+<p>As Tizen is embracing .NET and Xamarin.Forms for better development environments, it creates opportunities for cross-platform application developers. To manage cross-platform development, you must be able to port existing Xamarin.Forms applications to the Tizen OS. As shown in the following figure, Tizen is consistent with the .NET architecture and it is easy to adapt Xamarin.Forms applications to Tizen. The following sections use a sample application as an example of how to perform porting.</p>
+
+<div class="note"><strong>Note</strong> Before porting, make sure that <a href="../getting_started/download.htm">Visual Studio Tools for Tizen</a> is installed on your system.</div>
+
+<p align="center"><strong>Figure: Tizen .NET architecture</strong></p>
+
+<p align="center"><a class="colorbox" href="../images/cs_overview.png"><img alt="Tizen .NET Architecture" height="282" src="../images/cs_overview-707x282.png" width="707" /></a></p>
+
+<p>&nbsp;</p>
+</div>
+
+<h2 id="opening">Opening a Xamarin.Forms Sample Application</h2>
+
+<p><span>You can find various sample applications at <a href="https://developer.xamarin.com/samples/xamarin-forms/all/">Xamarin.Forms Samples</a>. Among them, the <a href="https://developer.xamarin.com/samples/xamarin-forms/UserInterface/Animation/Basic/">Basic Animation</a> application shows the implementation of simple animations, such as rotating, scaling, and fading. The sample consists of a shared project and multiple platform-dependent projects for Android, iOS, and Universal Windows Platform (UWP).</span></p>
+
+<p><span>To open the sample application:</span></p>
+
+<ol>
+       <li>Download and extract the <a href="https://developer.xamarin.com/samples/xamarin-forms/UserInterface/Animation/Basic/Basic.zip">source code of the Basic Animation sample</a> from the Xamarin sample site.</li>
+       <li>Launch Visual Studio.</li>
+       <li>In the Visual Studio menu, go to <strong>File &gt; Open &gt; Project/Solution </strong>and select <strong><code>BasicAnimation.sln</code></strong>.
+       <p align="center"><img alt="Open Project" height="441" src="../images/openproject.png" width="668" /></p>
+       </li>
+</ol>
+
+<p>&nbsp;</p>
+
+<p align="center">&nbsp;</p>
+
+<h2 id="adding">Adding a Tizen-dependent Project</h2>
+
+<p><span>By adding a new project for Tizen&nbsp;and reusing the shared code, you can get the Basic Animation application ready to be built for the Tizen OS. </span></p>
+
+<p><span>To add a Tizen-dependent project:</span></p>
+
+<ol>
+       <li>
+       <p>In the <strong>Solution Explorer</strong>, right-click <strong>Solution 'BasicAnimation'</strong> and select <strong>Add &gt; New Project</strong>.</p>
+
+       <p align="center"><img alt="Add New Project" height="592" src="../images/addnewproject.png" width="654" /></p>
+       </li>
+       <li>
+       <p>Select&nbsp;<strong><strong><strong>Tizen &gt;</strong></strong></strong><strong><strong><strong> Blank App (Tizen Xamarin.Forms Portable)</strong></strong></strong>,&nbsp; enter a name and location for the Tizen project, and click <strong><strong><strong>OK</strong></strong></strong>.</p>
+
+       <p align="center"><img alt="Add New Project" height="538" src="../images/addnewproject2.png" width="844" /></p>
+       </li>
+       <li>
+       <p>In the Tizen Project Wizard, select the applicable profiles (Common, Mobile, or TV), and click <strong>OK</strong>.</p>
+
+       <p align="center"><img alt="Tizen Project Wizard" height="368" src="../images/tizenprojectwizard.png" width="652" /></p>
+
+       <p>The <strong>Solution Explorer </strong>shows that new profile-specific Tizen projects are added to the existing Xamarin.Forms solution. In this case, since 2 profiles were selected, 2 new projects are added.</p>
+
+       <p align="center"><img alt="Tizen Project Added" height="226" src="../images/addedprojects.png" width="430" /></p>
+       </li>
+       <li>
+       <p>Since the Tizen projects have dependencies with the Xamarin.Forms NuGet package version, you must install the Xamarin.Forms NuGet package that has the same version as Xamarin.Forms.Platform.Tizen. Mismatching the NuGet versions can cause build or packaging problems.<br />
+       Right-click <strong>Solution 'BasicAnimation'</strong> and select <strong>Manage NuGet Packages for Solution</strong>.</p>
+
+       <p align="center"><img alt="Manage NuGet Packages" height="484" src="../images/managenugetpackages.png" width="552" /></p>
+       </li>
+       <li>
+       <p>In the <strong>Installed </strong>tab, select <strong>Xamarin.Forms</strong>. If there are&nbsp;mismatched versions between the PCL (Portable Class Library) project and the newly added projects, install the latest Xamarin.Forms version.</p>
+
+       <p align="center"><img alt="Manage NuGet Packages" height="392" src="../images/managenugetpackages2.png" width="640" /></p>
+       </li>
+       <li>
+       <p>To build the solution, in the main menu of Visual Studio, select <strong>Build &gt; Build Solution</strong>.</p>
+
+       <p>Alternatively, you can right-click the solution in the <strong>Solution Explorer </strong>and select <strong>Build Solution</strong>.</p>
+
+       <p align="center"><img alt="Build Solution" height="408" src="../images/buildsolution.png" width="678" /></p>
+       </li>
+       <li>
+       <p>Copy the necessary image file&nbsp;for the animation (<strong><code>Droid/Resources/drawable/monkey.png</code></strong>)&nbsp; to the <strong><code>BasicAnimationTizen.TizenMobile/res</code></strong> Tizen resource directory.</p>
+       </li>
+</ol>
+
+<h2 id="deploying">Deploying and Running the Application</h2>
+
+<p><span>To run the application, you must deploy it first to the target: either a device or an emulator. Deploying means transferring the package file&nbsp;(</span><code>.tpk</code><span>) to the target and invoking the Tizen package manager to install it. In this example, the Tizen emulator in Visual Studio is used as a target.</span></p>
+
+<ol>
+       <li>
+       <p>In the Visual Studio menu, select <strong>Tools &gt; Tizen &gt; Tizen Emulator Manager</strong>.</p>
+
+       <p>Alternatively, you can launch the Tizen emulator using&nbsp;the Visual Studio toolbars as shown in the following figure.</p>
+
+       <p align="center"><img alt="Launch Tizen Emulator" height="113" src="../images/launchtizenemul.png" width="786" /></p>
+       </li>
+       <li>
+       <p>In the Tizen Emulator Manager, create an emulator by clicking <strong>Create</strong>. For more information on creating emulator instances, see <a href="../tools/emulator_manager.htm">Emulator Manager</a>.</p>
+
+       <p align="center"><img alt="Tizen Emulator Manager" height="589" src="../images/tizenemulmanager.png" width="602" /></p>
+       </li>
+       <li>
+       <p>Once you launch an emulator instance, you can&nbsp;run the application&nbsp;by clicking the emulator instance in the Visual Studio toolbar. The following figure shows a screenshot of the Xamarin.Forms sample app running on the Tizen mobile emulator.</p>
+
+       <p align="center"><img alt="Tizen Emulator Manager" height="109" src="../images/deploy.png" width="726" /></p>
+
+       <p align="center"><img alt="Demo1" height="511" src="../images/demo1.png" width="384" /></p>
+       </li>
+</ol>
+
+<p>&nbsp;</p>
+
+<h2 id="demoshots">Sample UI in Various Platforms</h2>
+
+<p><span>The following screenshots display the UI of the Basic Animation sample on different mobile platforms and the Tizen TV emulator. Since Tizen .NET&nbsp;supports the TV profile, you can port the Xamarin applications to the Tizen TV as well as Tizen mobile profile in the Tizen Project Wizard.</span></p>
+
+<p align="center"><strong>Figure: Basic Animation sample in different targets and platforms</strong></p>
+
+<p align="center"><img alt="Demo Screeshot" height="389" src="../images/demo1.jpg" width="780" /></p>
+
+<p align="center"><img alt="Tizen TV Demo Screeshot1" height="363" src="../images/tizentvdemo1.png" width="740" /></p>
+
+<p align="center"><img alt="Tizen TV Demo Screeshot2" height="363" src="../images/tizentvdemo2.png" width="740" /></p>
+
+<p>&nbsp;</p>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/images/add_tizen_project2.png b/preview/html/images/add_tizen_project2.png
new file mode 100644 (file)
index 0000000..6c377a1
Binary files /dev/null and b/preview/html/images/add_tizen_project2.png differ
diff --git a/preview/html/images/addedprojects.png b/preview/html/images/addedprojects.png
new file mode 100644 (file)
index 0000000..d31666a
Binary files /dev/null and b/preview/html/images/addedprojects.png differ
diff --git a/preview/html/images/addnewproject.png b/preview/html/images/addnewproject.png
new file mode 100644 (file)
index 0000000..850f975
Binary files /dev/null and b/preview/html/images/addnewproject.png differ
diff --git a/preview/html/images/addnewproject2.png b/preview/html/images/addnewproject2.png
new file mode 100644 (file)
index 0000000..518e94e
Binary files /dev/null and b/preview/html/images/addnewproject2.png differ
diff --git a/preview/html/images/bg_util_bar.gif b/preview/html/images/bg_util_bar.gif
new file mode 100644 (file)
index 0000000..977f94d
Binary files /dev/null and b/preview/html/images/bg_util_bar.gif differ
diff --git a/preview/html/images/btn_top.gif b/preview/html/images/btn_top.gif
new file mode 100644 (file)
index 0000000..d35e824
Binary files /dev/null and b/preview/html/images/btn_top.gif differ
diff --git a/preview/html/images/buildsolution.png b/preview/html/images/buildsolution.png
new file mode 100644 (file)
index 0000000..4d0cedd
Binary files /dev/null and b/preview/html/images/buildsolution.png differ
diff --git a/preview/html/images/cert_reg_author_cert.png b/preview/html/images/cert_reg_author_cert.png
new file mode 100644 (file)
index 0000000..cb02515
Binary files /dev/null and b/preview/html/images/cert_reg_author_cert.png differ
diff --git a/preview/html/images/cert_reg_author_info.png b/preview/html/images/cert_reg_author_info.png
new file mode 100644 (file)
index 0000000..40e541e
Binary files /dev/null and b/preview/html/images/cert_reg_author_info.png differ
diff --git a/preview/html/images/cert_reg_create_new.png b/preview/html/images/cert_reg_create_new.png
new file mode 100644 (file)
index 0000000..3ced018
Binary files /dev/null and b/preview/html/images/cert_reg_create_new.png differ
diff --git a/preview/html/images/cert_reg_creation_wizard.png b/preview/html/images/cert_reg_creation_wizard.png
new file mode 100644 (file)
index 0000000..4d4e6e7
Binary files /dev/null and b/preview/html/images/cert_reg_creation_wizard.png differ
diff --git a/preview/html/images/cert_reg_dist_cert2.png b/preview/html/images/cert_reg_dist_cert2.png
new file mode 100644 (file)
index 0000000..671e870
Binary files /dev/null and b/preview/html/images/cert_reg_dist_cert2.png differ
diff --git a/preview/html/images/cert_reg_info.png b/preview/html/images/cert_reg_info.png
new file mode 100644 (file)
index 0000000..5d5f37e
Binary files /dev/null and b/preview/html/images/cert_reg_info.png differ
diff --git a/preview/html/images/cert_reg_manage_cert.png b/preview/html/images/cert_reg_manage_cert.png
new file mode 100644 (file)
index 0000000..aa4e01a
Binary files /dev/null and b/preview/html/images/cert_reg_manage_cert.png differ
diff --git a/preview/html/images/cert_reg_pencil.png b/preview/html/images/cert_reg_pencil.png
new file mode 100644 (file)
index 0000000..271fe3f
Binary files /dev/null and b/preview/html/images/cert_reg_pencil.png differ
diff --git a/preview/html/images/cert_reg_plus.png b/preview/html/images/cert_reg_plus.png
new file mode 100644 (file)
index 0000000..31bfee7
Binary files /dev/null and b/preview/html/images/cert_reg_plus.png differ
diff --git a/preview/html/images/cert_reg_remove_cert.png b/preview/html/images/cert_reg_remove_cert.png
new file mode 100644 (file)
index 0000000..767e080
Binary files /dev/null and b/preview/html/images/cert_reg_remove_cert.png differ
diff --git a/preview/html/images/cert_reg_trash.png b/preview/html/images/cert_reg_trash.png
new file mode 100644 (file)
index 0000000..c08e8a9
Binary files /dev/null and b/preview/html/images/cert_reg_trash.png differ
diff --git a/preview/html/images/change_nuget_version.png b/preview/html/images/change_nuget_version.png
new file mode 100644 (file)
index 0000000..a831a3d
Binary files /dev/null and b/preview/html/images/change_nuget_version.png differ
diff --git a/preview/html/images/cs_creating04.png b/preview/html/images/cs_creating04.png
new file mode 100644 (file)
index 0000000..1e3a133
Binary files /dev/null and b/preview/html/images/cs_creating04.png differ
diff --git a/preview/html/images/cs_creating05.png b/preview/html/images/cs_creating05.png
new file mode 100644 (file)
index 0000000..8ffd733
Binary files /dev/null and b/preview/html/images/cs_creating05.png differ
diff --git a/preview/html/images/cs_creating06.png b/preview/html/images/cs_creating06.png
new file mode 100644 (file)
index 0000000..08ba26e
Binary files /dev/null and b/preview/html/images/cs_creating06.png differ
diff --git a/preview/html/images/cs_creating07.png b/preview/html/images/cs_creating07.png
new file mode 100644 (file)
index 0000000..4eae6c1
Binary files /dev/null and b/preview/html/images/cs_creating07.png differ
diff --git a/preview/html/images/cs_creating08.png b/preview/html/images/cs_creating08.png
new file mode 100644 (file)
index 0000000..ec21225
Binary files /dev/null and b/preview/html/images/cs_creating08.png differ
diff --git a/preview/html/images/cs_device_manager_connection_explorer_view.png b/preview/html/images/cs_device_manager_connection_explorer_view.png
new file mode 100644 (file)
index 0000000..22e7dfd
Binary files /dev/null and b/preview/html/images/cs_device_manager_connection_explorer_view.png differ
diff --git a/preview/html/images/cs_device_manager_explorer.png b/preview/html/images/cs_device_manager_explorer.png
new file mode 100644 (file)
index 0000000..8070f0d
Binary files /dev/null and b/preview/html/images/cs_device_manager_explorer.png differ
diff --git a/preview/html/images/cs_device_manager_first_screen.png b/preview/html/images/cs_device_manager_first_screen.png
new file mode 100644 (file)
index 0000000..f1576a9
Binary files /dev/null and b/preview/html/images/cs_device_manager_first_screen.png differ
diff --git a/preview/html/images/cs_device_manager_log_add_tab.png b/preview/html/images/cs_device_manager_log_add_tab.png
new file mode 100644 (file)
index 0000000..52bb577
Binary files /dev/null and b/preview/html/images/cs_device_manager_log_add_tab.png differ
diff --git a/preview/html/images/cs_device_manager_log_added_tab.png b/preview/html/images/cs_device_manager_log_added_tab.png
new file mode 100644 (file)
index 0000000..1d2cbe1
Binary files /dev/null and b/preview/html/images/cs_device_manager_log_added_tab.png differ
diff --git a/preview/html/images/cs_device_manager_log_export.png b/preview/html/images/cs_device_manager_log_export.png
new file mode 100644 (file)
index 0000000..f561832
Binary files /dev/null and b/preview/html/images/cs_device_manager_log_export.png differ
diff --git a/preview/html/images/cs_device_manager_menu.png b/preview/html/images/cs_device_manager_menu.png
new file mode 100644 (file)
index 0000000..5cd8721
Binary files /dev/null and b/preview/html/images/cs_device_manager_menu.png differ
diff --git a/preview/html/images/cs_device_manager_prompt.png b/preview/html/images/cs_device_manager_prompt.png
new file mode 100644 (file)
index 0000000..94b9d47
Binary files /dev/null and b/preview/html/images/cs_device_manager_prompt.png differ
diff --git a/preview/html/images/cs_enhancing01_1.png b/preview/html/images/cs_enhancing01_1.png
new file mode 100644 (file)
index 0000000..23105d3
Binary files /dev/null and b/preview/html/images/cs_enhancing01_1.png differ
diff --git a/preview/html/images/cs_enhancing02_1.png b/preview/html/images/cs_enhancing02_1.png
new file mode 100644 (file)
index 0000000..4ee8365
Binary files /dev/null and b/preview/html/images/cs_enhancing02_1.png differ
diff --git a/preview/html/images/cs_first01.png b/preview/html/images/cs_first01.png
new file mode 100644 (file)
index 0000000..cf87f4b
Binary files /dev/null and b/preview/html/images/cs_first01.png differ
diff --git a/preview/html/images/cs_first02_1.png b/preview/html/images/cs_first02_1.png
new file mode 100644 (file)
index 0000000..623d9af
Binary files /dev/null and b/preview/html/images/cs_first02_1.png differ
diff --git a/preview/html/images/cs_first08.png b/preview/html/images/cs_first08.png
new file mode 100644 (file)
index 0000000..05df58b
Binary files /dev/null and b/preview/html/images/cs_first08.png differ
diff --git a/preview/html/images/cs_first09_1.png b/preview/html/images/cs_first09_1.png
new file mode 100644 (file)
index 0000000..935367d
Binary files /dev/null and b/preview/html/images/cs_first09_1.png differ
diff --git a/preview/html/images/cs_first_building_certificate_01.png b/preview/html/images/cs_first_building_certificate_01.png
new file mode 100644 (file)
index 0000000..38c5b19
Binary files /dev/null and b/preview/html/images/cs_first_building_certificate_01.png differ
diff --git a/preview/html/images/cs_first_building_certificate_02.png b/preview/html/images/cs_first_building_certificate_02.png
new file mode 100644 (file)
index 0000000..034ae4b
Binary files /dev/null and b/preview/html/images/cs_first_building_certificate_02.png differ
diff --git a/preview/html/images/cs_first_building_certificate_03.png b/preview/html/images/cs_first_building_certificate_03.png
new file mode 100644 (file)
index 0000000..c9e2604
Binary files /dev/null and b/preview/html/images/cs_first_building_certificate_03.png differ
diff --git a/preview/html/images/cs_first_building_emulator_list.png b/preview/html/images/cs_first_building_emulator_list.png
new file mode 100644 (file)
index 0000000..3468ff3
Binary files /dev/null and b/preview/html/images/cs_first_building_emulator_list.png differ
diff --git a/preview/html/images/cs_first_building_emulator_manager.png b/preview/html/images/cs_first_building_emulator_manager.png
new file mode 100644 (file)
index 0000000..c2f463d
Binary files /dev/null and b/preview/html/images/cs_first_building_emulator_manager.png differ
diff --git a/preview/html/images/cs_first_building_emulator_tv1.png b/preview/html/images/cs_first_building_emulator_tv1.png
new file mode 100644 (file)
index 0000000..cd3607a
Binary files /dev/null and b/preview/html/images/cs_first_building_emulator_tv1.png differ
diff --git a/preview/html/images/cs_first_building_process.png b/preview/html/images/cs_first_building_process.png
new file mode 100644 (file)
index 0000000..7747485
Binary files /dev/null and b/preview/html/images/cs_first_building_process.png differ
diff --git a/preview/html/images/cs_first_building_selected_emulator.png b/preview/html/images/cs_first_building_selected_emulator.png
new file mode 100644 (file)
index 0000000..188177c
Binary files /dev/null and b/preview/html/images/cs_first_building_selected_emulator.png differ
diff --git a/preview/html/images/cs_first_creating_project_wizard_p3.png b/preview/html/images/cs_first_creating_project_wizard_p3.png
new file mode 100644 (file)
index 0000000..b751ed9
Binary files /dev/null and b/preview/html/images/cs_first_creating_project_wizard_p3.png differ
diff --git a/preview/html/images/cs_first_creating_solution_explorer.png b/preview/html/images/cs_first_creating_solution_explorer.png
new file mode 100644 (file)
index 0000000..5d08ff2
Binary files /dev/null and b/preview/html/images/cs_first_creating_solution_explorer.png differ
diff --git a/preview/html/images/cs_first_packaging_content.png b/preview/html/images/cs_first_packaging_content.png
new file mode 100644 (file)
index 0000000..485faad
Binary files /dev/null and b/preview/html/images/cs_first_packaging_content.png differ
diff --git a/preview/html/images/cs_install01.png b/preview/html/images/cs_install01.png
new file mode 100644 (file)
index 0000000..3ee623a
Binary files /dev/null and b/preview/html/images/cs_install01.png differ
diff --git a/preview/html/images/cs_install02.png b/preview/html/images/cs_install02.png
new file mode 100644 (file)
index 0000000..7fc93b4
Binary files /dev/null and b/preview/html/images/cs_install02.png differ
diff --git a/preview/html/images/cs_install03.png b/preview/html/images/cs_install03.png
new file mode 100644 (file)
index 0000000..c1faaf0
Binary files /dev/null and b/preview/html/images/cs_install03.png differ
diff --git a/preview/html/images/cs_install04.png b/preview/html/images/cs_install04.png
new file mode 100644 (file)
index 0000000..783338f
Binary files /dev/null and b/preview/html/images/cs_install04.png differ
diff --git a/preview/html/images/cs_install05.png b/preview/html/images/cs_install05.png
new file mode 100644 (file)
index 0000000..2b9c7c5
Binary files /dev/null and b/preview/html/images/cs_install05.png differ
diff --git a/preview/html/images/cs_install06.png b/preview/html/images/cs_install06.png
new file mode 100644 (file)
index 0000000..e559c4e
Binary files /dev/null and b/preview/html/images/cs_install06.png differ
diff --git a/preview/html/images/cs_install07_1.png b/preview/html/images/cs_install07_1.png
new file mode 100644 (file)
index 0000000..29f8009
Binary files /dev/null and b/preview/html/images/cs_install07_1.png differ
diff --git a/preview/html/images/cs_overview-707x282.png b/preview/html/images/cs_overview-707x282.png
new file mode 100644 (file)
index 0000000..0d63fad
Binary files /dev/null and b/preview/html/images/cs_overview-707x282.png differ
diff --git a/preview/html/images/cs_overview.png b/preview/html/images/cs_overview.png
new file mode 100644 (file)
index 0000000..6f2733a
Binary files /dev/null and b/preview/html/images/cs_overview.png differ
diff --git a/preview/html/images/cs_prerequiste01.png b/preview/html/images/cs_prerequiste01.png
new file mode 100644 (file)
index 0000000..cd52d5b
Binary files /dev/null and b/preview/html/images/cs_prerequiste01.png differ
diff --git a/preview/html/images/cs_prerequiste02.png b/preview/html/images/cs_prerequiste02.png
new file mode 100644 (file)
index 0000000..7c23037
Binary files /dev/null and b/preview/html/images/cs_prerequiste02.png differ
diff --git a/preview/html/images/demo1.jpg b/preview/html/images/demo1.jpg
new file mode 100644 (file)
index 0000000..e69dea1
Binary files /dev/null and b/preview/html/images/demo1.jpg differ
diff --git a/preview/html/images/demo1.png b/preview/html/images/demo1.png
new file mode 100644 (file)
index 0000000..8663738
Binary files /dev/null and b/preview/html/images/demo1.png differ
diff --git a/preview/html/images/deploy.png b/preview/html/images/deploy.png
new file mode 100644 (file)
index 0000000..264188d
Binary files /dev/null and b/preview/html/images/deploy.png differ
diff --git a/preview/html/images/em_skin.png b/preview/html/images/em_skin.png
new file mode 100644 (file)
index 0000000..119f0e7
Binary files /dev/null and b/preview/html/images/em_skin.png differ
diff --git a/preview/html/images/emulator_control_panel2-1.png b/preview/html/images/emulator_control_panel2-1.png
new file mode 100644 (file)
index 0000000..115f5f0
Binary files /dev/null and b/preview/html/images/emulator_control_panel2-1.png differ
diff --git a/preview/html/images/emulator_control_panel2.png b/preview/html/images/emulator_control_panel2.png
new file mode 100644 (file)
index 0000000..97d2615
Binary files /dev/null and b/preview/html/images/emulator_control_panel2.png differ
diff --git a/preview/html/images/emulator_control_panel_hds.png b/preview/html/images/emulator_control_panel_hds.png
new file mode 100644 (file)
index 0000000..378fef8
Binary files /dev/null and b/preview/html/images/emulator_control_panel_hds.png differ
diff --git a/preview/html/images/emulator_control_panel_network.png b/preview/html/images/emulator_control_panel_network.png
new file mode 100644 (file)
index 0000000..173fb33
Binary files /dev/null and b/preview/html/images/emulator_control_panel_network.png differ
diff --git a/preview/html/images/emulator_control_panel_open2.png b/preview/html/images/emulator_control_panel_open2.png
new file mode 100644 (file)
index 0000000..634904c
Binary files /dev/null and b/preview/html/images/emulator_control_panel_open2.png differ
diff --git a/preview/html/images/emulator_manager_clone.png b/preview/html/images/emulator_manager_clone.png
new file mode 100644 (file)
index 0000000..e5145de
Binary files /dev/null and b/preview/html/images/emulator_manager_clone.png differ
diff --git a/preview/html/images/emulator_manager_create.png b/preview/html/images/emulator_manager_create.png
new file mode 100644 (file)
index 0000000..32edade
Binary files /dev/null and b/preview/html/images/emulator_manager_create.png differ
diff --git a/preview/html/images/emulator_manager_delete.png b/preview/html/images/emulator_manager_delete.png
new file mode 100644 (file)
index 0000000..9709d45
Binary files /dev/null and b/preview/html/images/emulator_manager_delete.png differ
diff --git a/preview/html/images/emulator_manager_device_template2.png b/preview/html/images/emulator_manager_device_template2.png
new file mode 100644 (file)
index 0000000..2a47ea3
Binary files /dev/null and b/preview/html/images/emulator_manager_device_template2.png differ
diff --git a/preview/html/images/emulator_manager_modify.png b/preview/html/images/emulator_manager_modify.png
new file mode 100644 (file)
index 0000000..f6131d0
Binary files /dev/null and b/preview/html/images/emulator_manager_modify.png differ
diff --git a/preview/html/images/emulator_manager_template_config2.png b/preview/html/images/emulator_manager_template_config2.png
new file mode 100644 (file)
index 0000000..e645098
Binary files /dev/null and b/preview/html/images/emulator_manager_template_config2.png differ
diff --git a/preview/html/images/hardware_ram.png b/preview/html/images/hardware_ram.png
new file mode 100644 (file)
index 0000000..e126265
Binary files /dev/null and b/preview/html/images/hardware_ram.png differ
diff --git a/preview/html/images/hardware_start_instal.png b/preview/html/images/hardware_start_instal.png
new file mode 100644 (file)
index 0000000..7a6b528
Binary files /dev/null and b/preview/html/images/hardware_start_instal.png differ
diff --git a/preview/html/images/ico_arr_hidden.gif b/preview/html/images/ico_arr_hidden.gif
new file mode 100644 (file)
index 0000000..9a9d3ff
Binary files /dev/null and b/preview/html/images/ico_arr_hidden.gif differ
diff --git a/preview/html/images/ico_bullet_2_7.gif b/preview/html/images/ico_bullet_2_7.gif
new file mode 100644 (file)
index 0000000..8de872c
Binary files /dev/null and b/preview/html/images/ico_bullet_2_7.gif differ
diff --git a/preview/html/images/launchtizenemul.png b/preview/html/images/launchtizenemul.png
new file mode 100644 (file)
index 0000000..7e5de11
Binary files /dev/null and b/preview/html/images/launchtizenemul.png differ
diff --git a/preview/html/images/logviewer_default.png b/preview/html/images/logviewer_default.png
new file mode 100644 (file)
index 0000000..97e1e54
Binary files /dev/null and b/preview/html/images/logviewer_default.png differ
diff --git a/preview/html/images/logviewer_entry_point.png b/preview/html/images/logviewer_entry_point.png
new file mode 100644 (file)
index 0000000..bc8a67c
Binary files /dev/null and b/preview/html/images/logviewer_entry_point.png differ
diff --git a/preview/html/images/logviewer_keyword_filter.png b/preview/html/images/logviewer_keyword_filter.png
new file mode 100644 (file)
index 0000000..dbab509
Binary files /dev/null and b/preview/html/images/logviewer_keyword_filter.png differ
diff --git a/preview/html/images/managenugetpackages.png b/preview/html/images/managenugetpackages.png
new file mode 100644 (file)
index 0000000..cb98cbb
Binary files /dev/null and b/preview/html/images/managenugetpackages.png differ
diff --git a/preview/html/images/managenugetpackages2.png b/preview/html/images/managenugetpackages2.png
new file mode 100644 (file)
index 0000000..07f9bf9
Binary files /dev/null and b/preview/html/images/managenugetpackages2.png differ
diff --git a/preview/html/images/manifest_editing.png b/preview/html/images/manifest_editing.png
new file mode 100644 (file)
index 0000000..9e198a0
Binary files /dev/null and b/preview/html/images/manifest_editing.png differ
diff --git a/preview/html/images/manifest_features.png b/preview/html/images/manifest_features.png
new file mode 100644 (file)
index 0000000..82c56ff
Binary files /dev/null and b/preview/html/images/manifest_features.png differ
diff --git a/preview/html/images/manifest_overview.png b/preview/html/images/manifest_overview.png
new file mode 100644 (file)
index 0000000..1b7b7e6
Binary files /dev/null and b/preview/html/images/manifest_overview.png differ
diff --git a/preview/html/images/manifest_privileges.png b/preview/html/images/manifest_privileges.png
new file mode 100644 (file)
index 0000000..56f3d69
Binary files /dev/null and b/preview/html/images/manifest_privileges.png differ
diff --git a/preview/html/images/manifest_text_editor.png b/preview/html/images/manifest_text_editor.png
new file mode 100644 (file)
index 0000000..2bab258
Binary files /dev/null and b/preview/html/images/manifest_text_editor.png differ
diff --git a/preview/html/images/openproject.png b/preview/html/images/openproject.png
new file mode 100644 (file)
index 0000000..d7a526e
Binary files /dev/null and b/preview/html/images/openproject.png differ
diff --git a/preview/html/images/platform_mismatch_warning.png b/preview/html/images/platform_mismatch_warning.png
new file mode 100644 (file)
index 0000000..d325424
Binary files /dev/null and b/preview/html/images/platform_mismatch_warning.png differ
diff --git a/preview/html/images/pw1.png b/preview/html/images/pw1.png
new file mode 100644 (file)
index 0000000..f7c9fa8
Binary files /dev/null and b/preview/html/images/pw1.png differ
diff --git a/preview/html/images/pw2.png b/preview/html/images/pw2.png
new file mode 100644 (file)
index 0000000..ccce62b
Binary files /dev/null and b/preview/html/images/pw2.png differ
diff --git a/preview/html/images/release_plan_preview4_m1.png b/preview/html/images/release_plan_preview4_m1.png
new file mode 100644 (file)
index 0000000..f43abbb
Binary files /dev/null and b/preview/html/images/release_plan_preview4_m1.png differ
diff --git a/preview/html/images/solution_explorer_tizen_project2.png b/preview/html/images/solution_explorer_tizen_project2.png
new file mode 100644 (file)
index 0000000..fe6db49
Binary files /dev/null and b/preview/html/images/solution_explorer_tizen_project2.png differ
diff --git a/preview/html/images/tizen_blank_app.png b/preview/html/images/tizen_blank_app.png
new file mode 100644 (file)
index 0000000..b727473
Binary files /dev/null and b/preview/html/images/tizen_blank_app.png differ
diff --git a/preview/html/images/tizenemulmanager.png b/preview/html/images/tizenemulmanager.png
new file mode 100644 (file)
index 0000000..deca45a
Binary files /dev/null and b/preview/html/images/tizenemulmanager.png differ
diff --git a/preview/html/images/tizenprojectwizard.png b/preview/html/images/tizenprojectwizard.png
new file mode 100644 (file)
index 0000000..f75254d
Binary files /dev/null and b/preview/html/images/tizenprojectwizard.png differ
diff --git a/preview/html/images/tizentvdemo1.png b/preview/html/images/tizentvdemo1.png
new file mode 100644 (file)
index 0000000..9c9285e
Binary files /dev/null and b/preview/html/images/tizentvdemo1.png differ
diff --git a/preview/html/images/tizentvdemo2.png b/preview/html/images/tizentvdemo2.png
new file mode 100644 (file)
index 0000000..9f44e06
Binary files /dev/null and b/preview/html/images/tizentvdemo2.png differ
diff --git a/preview/html/images/vs_em_1.png b/preview/html/images/vs_em_1.png
new file mode 100644 (file)
index 0000000..a8c215b
Binary files /dev/null and b/preview/html/images/vs_em_1.png differ
diff --git a/preview/html/images/vs_em_2.png b/preview/html/images/vs_em_2.png
new file mode 100644 (file)
index 0000000..78035ad
Binary files /dev/null and b/preview/html/images/vs_em_2.png differ
diff --git a/preview/html/images/vs_em_4.png b/preview/html/images/vs_em_4.png
new file mode 100644 (file)
index 0000000..42a93cf
Binary files /dev/null and b/preview/html/images/vs_em_4.png differ
diff --git a/preview/html/images/vs_em_activated_debug.png b/preview/html/images/vs_em_activated_debug.png
new file mode 100644 (file)
index 0000000..de8ee43
Binary files /dev/null and b/preview/html/images/vs_em_activated_debug.png differ
diff --git a/preview/html/images/vs_em_launch.png b/preview/html/images/vs_em_launch.png
new file mode 100644 (file)
index 0000000..c3143a9
Binary files /dev/null and b/preview/html/images/vs_em_launch.png differ
diff --git a/preview/html/images/vs_em_launched.png b/preview/html/images/vs_em_launched.png
new file mode 100644 (file)
index 0000000..bc079ec
Binary files /dev/null and b/preview/html/images/vs_em_launched.png differ
diff --git a/preview/html/images/vs_emulatormanager_1.png b/preview/html/images/vs_emulatormanager_1.png
new file mode 100644 (file)
index 0000000..9d9b495
Binary files /dev/null and b/preview/html/images/vs_emulatormanager_1.png differ
diff --git a/preview/html/images/vs_emulatormanager_2.png b/preview/html/images/vs_emulatormanager_2.png
new file mode 100644 (file)
index 0000000..e6cd5b5
Binary files /dev/null and b/preview/html/images/vs_emulatormanager_2.png differ
diff --git a/preview/html/images/vstools_cert_certificate1.png b/preview/html/images/vstools_cert_certificate1.png
new file mode 100644 (file)
index 0000000..69cb2c3
Binary files /dev/null and b/preview/html/images/vstools_cert_certificate1.png differ
diff --git a/preview/html/images/vstools_cert_default.png b/preview/html/images/vstools_cert_default.png
new file mode 100644 (file)
index 0000000..7cf0f4c
Binary files /dev/null and b/preview/html/images/vstools_cert_default.png differ
diff --git a/preview/html/images/vstools_cert_menu.png b/preview/html/images/vstools_cert_menu.png
new file mode 100644 (file)
index 0000000..35c0349
Binary files /dev/null and b/preview/html/images/vstools_cert_menu.png differ
diff --git a/preview/html/images/vstools_cert_profile1.png b/preview/html/images/vstools_cert_profile1.png
new file mode 100644 (file)
index 0000000..08836a8
Binary files /dev/null and b/preview/html/images/vstools_cert_profile1.png differ
diff --git a/preview/html/images/vstools_cert_result.png b/preview/html/images/vstools_cert_result.png
new file mode 100644 (file)
index 0000000..1095c84
Binary files /dev/null and b/preview/html/images/vstools_cert_result.png differ
diff --git a/preview/html/images/vstools_changing_cert.png b/preview/html/images/vstools_changing_cert.png
new file mode 100644 (file)
index 0000000..8f40643
Binary files /dev/null and b/preview/html/images/vstools_changing_cert.png differ
diff --git a/preview/html/images/vstools_solution.png b/preview/html/images/vstools_solution.png
new file mode 100644 (file)
index 0000000..3976735
Binary files /dev/null and b/preview/html/images/vstools_solution.png differ
diff --git a/preview/html/images/xamarin_application.png b/preview/html/images/xamarin_application.png
new file mode 100644 (file)
index 0000000..8db7ee4
Binary files /dev/null and b/preview/html/images/xamarin_application.png differ
diff --git a/preview/html/index.htm b/preview/html/index.htm
new file mode 100644 (file)
index 0000000..8b8d169
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+       <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+       <meta http-equiv="X-UA-Compatible" content="IE=9" />
+       <link rel="stylesheet" type="text/css" href="css/styles.css" />
+       <link rel="stylesheet" type="text/css" href="css/snippet.css" />
+       <script type="text/javascript" src="scripts/snippet.js"></script>
+       <script type="text/javascript" src="scripts/jquery.util.js" charset="utf-8"></script>
+       <script type="text/javascript" src="scripts/common.js" charset="utf-8"></script>
+       <script type="text/javascript" src="scripts/core.js" charset="utf-8"></script>
+       <script type="text/javascript" src="scripts/search.js" charset="utf-8"></script>
+
+       <!-- tree view -->
+       <link rel="stylesheet" href="../../tree/jquery.treeview.css" />
+       <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
+       <script type="text/javascript" src="../../tree/jquery.treeview.js"></script>
+       <script src="../../tree/tizen.js"></script>
+       <!-- tree view -->
+
+       <title>Tizen .NET Preview</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+<h1><a href="cover_page.htm" target="content">Tizen .NET Preview</a></h1>
+
+<div id="sidetree">
+
+<div id="sidetreecontrol">
+       <a href="?#">Collapse All</a> | <a href="?#">Expand All</a>
+</div>
+
+       <ul id="navigation">
+               <li><a href="cover_page.htm" target="content">Introduction</a>
+                       <ul>
+                               <li><a href="cover_page.htm" target="content">What's New</a></li>
+                               <li><a href="introduction/overview.htm" target="content">Overview</a></li>
+                               <li><a href="introduction/roadmap.htm" target="content">Roadmap</a></li>
+                       </ul>
+               </li>
+               <li><a href="getting_started/download.htm" target="content">Getting Started</a>
+            <ul>
+                <li><a href="getting_started/download.htm" target="content">Download</a></li>
+                <li><a href="getting_started/installing.htm" target="content">Installing Visual Studio Tools for Tizen</a></li>
+                <li><a href="getting_started/first_app.htm" target="content">Creating Your First Tizen .NET Application</a></li>
+                <li><a href="getting_started/porting_xamarinforms.htm" target="content">Porting Xamarin.Forms Apps to Tizen using Visual Studio</a></li>
+            </ul>
+               </li>
+               <li><a href="tools/tools_overview.htm" target="content">Visual Studio Tools for Tizen</a>
+            <ul>
+                               <li><a href="tools/tools_overview.htm" target="content">Overview</a></li>
+                <li><a href="tools/project_wizard.htm" target="content">Project Wizard</a></li>
+                <li><a href="tools/certificate_manager.htm" target="content">Certificate Manager</a></li>
+                <li><a href="tools/manifest_editor.htm" target="content">Tizen Manifest Editor</a>
+                    <ul>
+                        <li><a href="tools/manifest_elements.htm" target="content">Using Additional Manifest Elements</a></li>
+                    </ul>
+                </li>
+                <li><a href="tools/emulator_manager.htm" target="content">Emulator Manager</a></li>
+                <li><a href="tools/emulator_control_panel.htm" target="content">Emulator Control Panel</a></li>
+                <li><a href="tools/device_manager.htm" target="content">Device Manager</a></li>
+                <li><a href="tools/log_viewer.htm" target="content">Log Viewer</a></li>
+            </ul>
+               </li>
+    </ul>
+</div>
+
+<script type="text/javascript" src="scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="scripts/showhide.js"></script>
+</div></div></div>
+
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+</html>
+
diff --git a/preview/html/introduction/overview.htm b/preview/html/introduction/overview.htm
new file mode 100644 (file)
index 0000000..f3e9723
--- /dev/null
@@ -0,0 +1,159 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Overview</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+ <h1>Overview</h1>
+
+<p align="left">Tizen .NET is an exciting new way to develop applications for the Tizen operating system, running on 50 million Samsung devices, including TVs, wearables, mobile, and many other IoT devices around the world.&nbsp;The existing Tizen frameworks are either C-based with no advantages of a managed runtime, or HTML5-based with fewer features and lower performance than the C-based solution. With Tizen .NET,&nbsp; you can use the C# programming language and the Common Language Infrastructure standards and benefit from a managed runtime for faster application development, and efficient, secure code execution.</p>
+
+<h2 align="left"><span>Managed Runtime Advantages</span></h2>
+
+<p>A managed runtime offers the following advantages for your application development:</p>
+
+<ul>
+       <li><strong><span>Faster time to develop</span></strong><br />
+       Application development is accelerated since the managed runtime already handles many functions that otherwise have to be coded in the application (the Tizen Native API and Tizen Web API already provide this type of benefit).<br />
+       &nbsp;</li>
+       <li><strong><span>Safer code</span></strong><br />
+       Managed runtimes can handle, for example, bound checking, type safety, garbage collection, memory protection services, and objects being invoked directly (the Tizen Web API already provides some of these benefits, but not type safety, as JavaScript is not a strongly typed language).<br />
+       &nbsp;</li>
+       <li><strong><span>Lower deployment costs</span></strong><br />
+       Component-based architecture makes it easier and faster to deploy applications in an enterprise environment characterized by multiple platforms, devices, and legacy systems.<br />
+       &nbsp;</li>
+       <li><strong><span>Better quality software</span></strong><br />
+       Managed runtimes free you to focus on the business logic and code specific to the application while reducing the number of coding errors.<br />
+       &nbsp;</li>
+       <li><strong><span>Cross-platform support</span></strong><br />
+       The managed code is portable; Tizen .NET applications can have large portions of their logic applied to other systems supported by the .NET Core and Xamarin.Forms portions of the runtime.</li>
+</ul>
+
+<h2 id="Tizen.NETFeatures">Tizen .NET Features and Components</h2>
+
+<p>Tizen .NET consists of the following main components:</p>
+
+<ul>
+       <li>
+       <p><strong>.NET Core</strong></p>
+
+       <p>.NET Core is a general purpose development platform maintained by Microsoft and the .NET community on&nbsp;<a class="external-link" href="https://github.com/dotnet/core" rel="nofollow" target="_blank">GitHub</a>. It is cross-platform, supporting Windows®, Mac OS® X, and Linux, and can be used in device, cloud, and embedded/IoT scenarios.</p>
+
+       <p>.NET Core is composed of the following parts:</p>
+
+       <ul>
+               <li>
+               <p>A&nbsp;<a href="https://github.com/dotnet/coreclr" target="_blank">.NET runtime</a>, which provides a type system, assembly loading, a garbage collector, native interop and other basic services.</p>
+               </li>
+               <li>
+               <p>A set of&nbsp;<a href="https://github.com/dotnet/corefx" target="_blank">framework libraries</a>, which provide primitive data types, app composition types and fundamental utilities.</p>
+               </li>
+               <li>
+               <p>A <a href="https://github.com/dotnet/cli" target="_blank">set of SDK tools</a>&nbsp;and&nbsp;<a href="https://github.com/dotnet/roslyn" target="_blank">language compilers</a>&nbsp;that enable the base developer experience, available in the&nbsp;<a href="https://docs.microsoft.com/en-us/dotnet/articles/core/sdk" target="_blank">.NET Core SDK</a>.</p>
+               </li>
+               <li>
+               <p>The 'dotnet' app host, which is used to launch .NET Core apps. It selects the runtime and hosts the runtime, provides an assembly loading policy and launches the app. The same host is also used to launch SDK tools in much the same way.</p>
+               </li>
+       </ul>
+       </li>
+       <li>
+       <p><strong>Xamarin.Forms as a UI framework</strong></p>
+
+       <p>Xamarin.Forms is a cross-platform UI toolkit that allows you to efficiently create native user interface layouts that can be shared across iOS, Android, Windows Phone,&nbsp;and Universal Windows Platform applications.</p>
+       </li>
+       <li>
+       <p><strong>Tizen Platform-Specific API</strong></p>
+
+       <p>Tizen .NET supports C# APIs, which expose the Tizen-specific features:</p>
+
+       <ul>
+               <li><span>Tizen.Account:&nbsp;Provides CRUD (Create, Read, Update, Delete) account management functionality and&nbsp;</span><span>the OAuth Core RFC 6749 protocol.</span></li>
+               <li>Tizen.Applications:&nbsp;Provides the Tizen application framework, including application state change events, inter-application messaging, and notification services.</li>
+               <li>Tizen.Common:&nbsp;<span>Provides predefined color name</span><span>s</span><span>.</span></li>
+               <li>Tizen.Content: Provides content management services, such as file and media downloads, storing and indexing audio and video content, and associating content types with helper applications.</li>
+               <li>Tizen.Location: Manages geographical location services and geofencing.</li>
+               <li>Tizen.<span>Messaging:&nbsp;Provides functions to receive push notifications.</span></li>
+               <li>Tizen.Multimedia: Interacts with media services, including audio playback, recording, and device policy.</li>
+               <li>Tizen.Network: Provides APIs to control connectivity devices, as well as providing various network information.</li>
+               <li>Tizen.Security: Provides access to secure storage for passwords, keys, certificates, and other sensitive data.</li>
+               <li><span>Tizen.Sensor:&nbsp;Provides sensor types and sensor information.</span></li>
+               <li>Tizen.System: Provides device-specific services, including status, system information and settings, feedback, and sensor control and access.</li>
+               <li><span>Tizen.Telephony:&nbsp;Provides call, modem, network, and SIM information.</span></li>
+               <li>Tzien.Uix:&nbsp;<span>Provides functions to recognize the speech&nbsp;and to synthesize voice from text and playing synthesized sound data.</span></li>
+               <li>Tizen.Log:&nbsp;<span>Provides methods to print log messages to&nbsp;</span><span>Tizen</span><span>&nbsp;logging system.</span></li>
+               <li>Tizen.Tracer:&nbsp;<span>Provides functions for writing trace message to the system trace buffer.</span></li>
+       </ul>
+       </li>
+</ul>
+
+<p>Tizen .NET enables you to build .NET applications with Xamarin.Forms and the Tizen .NET framework. Xamarin.Forms allows you to easily create a user interface, and the Tizen platform API provides numerous interfaces to much of the hardware that is found in modern TVs, and mobile, wearable, and IoT devices.</p>
+
+<p align="center"><strong>Figure: Tizen .NET Architecture</strong></p>
+
+<p align="center"><img alt="Tizen .NET Architecture" height="282" src="../images/cs_overview.png" width="707" /></p>
+
+<h2 id="VisualStudioToolsforTizen">Visual Studio Tools for Tizen</h2>
+
+<p>Visual Studio Tools for Tizen provides the following tools:</p>
+
+<ul>
+       <li><a href="../tools/project_wizard.htm">Project Wizard</a><br />
+       The Project Wizard is a tool that is used to create a Tizen .Net application project.</li>
+       <li><a href="../tools/certificate_manager.htm">Certificate Manager</a><br />
+       The certificates can be created, edited, removed, and set as active in the Certificate Manager. The active certificates are used when packaging your application.</li>
+       <li><span><a href="../tools/manifest_editor.htm">Tizen Manifest Editor</a></span><br />
+       The Tizen Manifest Editor is a tool that is used to edit Tizen&nbsp;manifest file, called&nbsp;<code class="prettyprint"><span class="pln"><span class="pln">tizen</span></span><span class="pun"><span class="pun">-</span></span><span class="pln"><span class="pln">manifest</span></span><span class="pun"><span class="pun">.</span></span><span class="pln"><span class="pln">xml</span></span></code>, which is used to describe the application information</li>
+       <li><a href="../tools/emulator_manager.htm"><span>Emulator Manager</span></a><br />
+       The Emulator Manager provides emulators to run your application in a virtual environment.</li>
+       <li><a href="../tools/emulator_control_panel.htm"><span>Emulator Control Panel</span></a><br />
+       The Emulator Control Panel&nbsp;allows you to run the application in the emulator, and test a variety of user scenarios, such as network access, audio input and out, and text messages.&nbsp;</li>
+       <li><a href="../tools/device_manager.htm">Device Manager</a><br />
+       The Tizen Device Manager&nbsp;is a tool that is used to manage connected Tizen devices or emulators, which is used to browse, push and pull files from them.&nbsp;</li>
+       <li><a href="../tools/log_viewer.htm">Log Viewer</a><br />
+       The Tizen Log Viewer&nbsp;is a tool that is used to see logs from connected Tizen&nbsp;devices or emulaotors.&nbsp;</li>
+</ul>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/introduction/roadmap.htm b/preview/html/introduction/roadmap.htm
new file mode 100644 (file)
index 0000000..04a6ac3
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Roadmap</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+<div id="container"><div id="contents"><div class="content">
+ <h1>Roadmap</h1>
+
+<p><span>The first public milestone&nbsp;of Tizen .NET will be released&nbsp;in June 2017 as a part of&nbsp;</span><span>Tizen 4.0.</span> Until then,&nbsp;several previews&nbsp;will be released on every two or three months so that developers can&nbsp;begin&nbsp;making themselves familar with&nbsp;Tizen .NET and give&nbsp;early feedback.</p>
+
+<p>The release plan is as follows.</p>
+
+<p><img alt="" height="1394" src="../images/release_plan_preview4_m1.png" width="1058" /></p>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/scripts/common.js b/preview/html/scripts/common.js
new file mode 100644 (file)
index 0000000..60250b6
--- /dev/null
@@ -0,0 +1,1752 @@
+$(document).ready(function(){
+       $('#contents table').each(function(){
+               if (!$(this).parent().hasClass('table')) {
+                       $(this).wrap('<div class="table"></div>');
+               }
+       });
+
+       // Lnb Menu Initialize
+       if($('div#contents').find('.lnb').length){
+               if($("ul li.events_news").size() > 0) {
+                       $("ul.lnb").after("<p class=\"mt20\"><a href=\"/wearables\" target=\"_blank\"><img src=\"http://img-developer.samsung.com/images/common/img_sw_banner.gif\" alt=\"Samsung Wearables\"></a></p>");
+               }
+               initLnb();
+               initScript(staticURL + "/js/fixednavbar.js", function(){});
+       }
+
+       //family site
+       if($('div#footer').find('dl#familySlider').length){
+               fn_rollToEx('familySlider', 'sliderBanner', 1, true);
+       }
+
+       // Svn Commit Test
+       
+       // Language Selection
+       if($('div#header').find('.util').length){
+               var $lang = $('div#header').find('.util');
+               $lang.find('a.lang').toggle(function(){
+                               $(this).css('background-image', $(this).css('background-image').replace('.gif','_.gif')).next('ul.language').show();
+                       },function(){
+                               $(this).css('background-image', $(this).css('background-image').replace('_.gif','.gif')).next('ul.language').hide();
+                       });
+
+               $lang.bind('mouseleave',function(){
+                       $(this).find('ul.language').hide();
+                       $lang.find('a.lang').css('background-image', $lang.find('a.lang').css('background-image').replace('_.gif','.gif'));
+               });
+
+               $lang.find('ul.language').children().last().on("keydown", function(e) {
+                       if(e.which == 9 && e.shiftKey) {
+                               return true;
+                       }
+                       
+                       if(e.which == 9) {
+                               e.preventDefault();
+                               $lang.find('ul.language').hide();
+                               $lang.find('a.lang').css('background-image', $lang.find('a.lang').css('background-image').replace('_.gif','.gif'));
+                               setTimeout(function() {
+                                       $("#searchTop").focus();
+                               }, 1);
+                       }
+               });
+       }
+
+       // Open the Sitemap
+       var $open = $('div#header').find('.bt-open');
+       $open.bind('click',function(){
+               var $self = $(this);
+               var $sitemap = $('div#wrapper').find('div#sitemap');
+               //var source = $sitemap.is(':visible') ? $self.css('background-image').replace('_.gif','.gif') : $self.css('background-image').replace('.gif','_.gif');
+
+               if($sitemap.is(':visible')){
+                       var source = $self.css('background-image').replace('_.gif','.gif');
+                       //if($('body#main').length) $('#header .util').css('border-bottom','3px solid #e4e4e4');
+
+                       $self.attr('title','open sitemap');
+               }else{
+                       var source = $self.css('background-image').replace('.gif','_.gif');
+                       //if($('body#main').length) $('#header .util').css('border-bottom','3px solid #114196');
+
+                       $self.attr('title','close sitemap');
+               }
+               
+               $self.css('background-image',source);
+               $sitemap.slideToggle('fast');
+               
+               $sitemap.find('ul').filter(':last').children().filter(':last').focusout(function(){
+                       var source = $self.css('background-image').replace('_.gif','.gif');
+                       $self.css('background-image',source);
+                       $sitemap.slideToggle('fast');
+               });
+
+       });
+
+       // Search Auto Complete
+       var $search = $('div#header').find('fieldset.search');
+       var $searchList = $search.find('#topAutocomplete>ul');
+
+       if($search.length){
+               $search.find('> input').each(function(){
+                       $(this).bind({
+                               keydown : function(e){
+                       
+                                       if(e.type=='keydown'&& $(this).val().length!=0){
+                                               $search.find('#topAutocomplete').show();
+                                               var hei = $searchList.outerHeight();
+                                               if(hei>400){
+                                                       $searchList.css({'height':'400px','overflow-y':'auto'});
+                                               }
+                                       }
+                                       if(e.keyCode==9){
+                                               $search.unbind('focusout.search');
+                                       }
+                                       if(e.keyCode==40){
+                                               $search.find('#topAutocomplete>ul').children(':first').find('a').focus();
+                                               //window.scrollTo(0,0);
+                                       }
+                               },
+                               focusin : function(e){
+                                       if($(this).val()==='Search'){
+                                               $(this).val('');
+                                       }
+                               },
+                               focusout : function(e){
+                                       if($(this).val().length==0) $(this).val('Search');
+                               }
+                       });
+               });
+
+               //$('#topAutocomplete>ul').children().find('a').bind('focusin',function(e){
+               //      if(e.keyCode==40){
+               //              $(this).parent().next().css('border','1px solid red').find('a').focus();
+               //      }
+               //});
+
+               $search.find('#topAutocomplete').bind('mouseleave',function(e){
+                       if($search.find('> input').val().length==0){
+                               $search.find('> input').val('Search');
+                       }
+                       $search.find('#topAutocomplete').hide();
+               });
+
+               $search.find('#topAutocomplete>ul').children().last().focusout(function(){
+                       $search.find('> input').val('Search');
+                       $search.find('#topAutocomplete').hide();
+                       
+                       //$search.bind('focusout.search', function(){
+                       //      $(this).find('> input').val('Search');
+                       //      $(this).find('#topAutocomplete').hide();
+                       //});
+               });
+       }
+});
+
+// 비차단 동적 스크립트 로딩
+function initScript(url, callback){
+       var script = document.createElement("script");
+       script.type = "text/javascript";
+
+       if(script.readyState){ // 인터넷 익스플로러
+               script.onreadystatechange = function(){
+                       if(script.readyState=="loaded" || script.readyState=="complete"){
+                               script.onreadystatechange = null;
+                               callback();
+                       }
+               };
+       }else{  // 다른  브라우저
+               script.onload = function(){
+                       callback();
+               };
+       }
+
+       script.src = url;
+       document.getElementsByTagName("head")[0].appendChild(script);
+}
+
+
+// lnb
+function initLnb(){
+       var sMenu = $('.lnb');
+       var sItem = sMenu.find('>li');
+
+       sItem.each(function(){
+               if($(this).find('a').hasClass('more')){
+                       if($(this).find('ul').is(":visible")) {
+                               $('<button type="button" class="ico-arr">close submenu</button>').insertAfter($(this).find('a').eq(0)); 
+                       } else {
+                               $('<button type="button" class="ico-arr">open submenu</button>').insertAfter($(this).find('a').eq(0));
+                       }
+               }
+       });
+       
+       var setIcoArrText = function(obj) {
+               if(obj.next().is(":visible")) {
+                       obj.text("close submenu");
+               } else {
+                       obj.text("open submenu");
+               }
+       }
+       
+       sItem.find('.ico-arr').on("click", function() {
+               var $that = $(this);
+               var liBox = $that.parent();   
+               var ulBox = $that.next();
+               
+               sItem.not(liBox).not(".on").find("a.more").next().next().hide();
+               sItem.not(liBox).removeClass("active").find("a").removeClass("bov");
+               
+               if(liBox.hasClass("on")) {
+                       if(ulBox.is(":visible")) {
+                               ulBox.hide();
+                               $that.addClass("ico-on");
+                       } else {
+                               ulBox.show();
+                               $that.removeClass("ico-on");
+                       }
+                       setIcoArrText($that);
+                       return true;
+               }
+               
+               if(liBox.hasClass("active")) {
+                       liBox.removeClass("active").find("a").eq(0).removeClass("bov");
+                       ulBox.hide();
+               } else {
+                       liBox.addClass("active").find("a").eq(0).addClass("bov");
+                       ulBox.show();
+               }
+               setIcoArrText($that);
+       });
+
+       sItem.hover(function(){
+               if($(this).hasClass('on')||$(this).hasClass('active')) return false;
+               $(this).find("a").eq(0).addClass("bov");
+       },function(){
+               if($(this).hasClass('on')||$(this).hasClass('active')) return false;
+                $(this).find("a").eq(0).removeClass("bov");
+
+       });
+}
+
+//footer rolling banner
+function fn_rollToEx(container,objectId,step,auto){
+
+       // 롤링할 객체를 변수에 담아둔다.
+       var el = $('#'+container).find('#'+objectId);
+       var lastChild;
+       var speed = 3000;
+       var timer = 0;
+       var autoplay = false;
+
+       el.data('prev', $('#'+container).find('.prev'));        //이전버튼을 data()메서드를 사용하여 저장한다.
+       el.data('next', $('#'+container).find('.next'));        //다음버튼을 data()메서드를 사용하여 저장한다.
+       el.data('size', el.children().outerWidth());            //롤링객체의 자식요소의 넓이를 저장한다.
+       el.data('len', el.children().length);                           //롤링객체의 전체요소 개수
+       el.data('animating',false);
+       el.data('step', step);                                                          //매개변수로 받은 step을 저장한다.
+       el.data('autoStart', false);                                                            //매개변수로 받은 step을 저장한다.
+
+       el.css('width',el.data('size')*el.data('len'));         //롤링객체의 전체넓이 지정한다.
+
+       if(arguments.length==4){
+               el.data('autoStart', auto);
+       }
+
+       if(el.data('autoStart')){
+               if(timer==0){
+                       timer = setInterval(moveNextSlide, speed);
+                       autoplay = true;
+               }
+       }
+
+       el.bind({
+               mouseenter:function(){
+                       if(!autoplay) return false;
+
+                       if(timer!=0 && el.data('autoStart')){
+                               clearInterval(timer);
+                               timer=0;
+                       }
+               },
+               mouseleave:function(){
+                       if(!autoplay) return false;
+
+                       if(timer==0 && el.data('autoStart')){
+                               timer = setInterval(moveNextSlide, speed);
+                       }
+               }
+       });
+
+
+       //el에 첨부된 prev 데이타를 클릭이벤트에 바인드한다.
+       el.data('prev').bind({
+               click:function(e){
+                       e.preventDefault();
+                       movePrevSlide();
+               },
+               mouseenter:function(){
+
+                       $(this).find('img').addClass('btnOn');
+
+                       if(!autoplay) return false;
+
+                       if(timer!=0 && el.data('autoStart')){
+                               clearInterval(timer);
+                               timer=0;
+                       }
+               },
+               mouseleave:function(){
+
+                       $(this).find('img').removeClass('btnOn');
+
+                       if(!autoplay) return false;
+
+                       if(timer==0 && el.data('autoStart')){
+                               timer = setInterval(moveNextSlide, speed);
+                       }
+               }
+       });
+
+       //el에 첨부된 next 데이타를 클릭이벤트에 바인드한다.
+       el.data('next').bind({
+               click:function(e){
+                       e.preventDefault();
+                       moveNextSlide();
+               },
+               mouseenter:function(){
+
+                       $(this).find('img').addClass('btnOn');
+
+                       if(!autoplay) return false;
+
+                       if(timer!=0 && el.data('autoStart')){
+                               clearInterval(timer);
+                               timer=0;
+                       }
+               },
+               mouseleave:function(){
+
+                       $(this).find('img').removeClass('btnOn');
+
+                       if(!autoplay) return false;
+
+                       if(timer==0 && el.data('autoStart')){
+                               timer = setInterval(moveNextSlide, speed);
+                       }
+               }
+       });
+
+       function movePrevSlide(){
+               if(!el.data('animating')){
+                       //전달된 step개수 만큼 롤링객체의 끝에서 요소를 선택하여 복사한후 변수에 저장한다.
+                       var lastItem = el.children().eq(-(el.data('step')+1)).nextAll().clone(true);
+                       lastItem.prependTo(el);         //복사된 요소를 롤링객체의 앞에 붙여놓는다.
+                       el.children().eq(-(el.data('step')+1)).nextAll().remove();      //step개수만큼 선택된 요소를 끝에서 제거한다
+                       el.css('left','-'+(el.data('size')*el.data('step'))+'px');      //롤링객체의 left위치값을 재설정한다.
+               
+                       el.data('animating',true);      //애니메이션 중복을 막기 위해 첨부된 animating 데이타를 true로 설정한다.
+
+                       el.animate({'left': '0px'},'normal',function(){         //롤링객체를 left:0만큼 애니메이션 시킨다.
+                               el.data('animating',false);
+                       });
+               }
+               return false;
+       }
+
+    function moveNextSlide(){
+               if(!el.data('animating')){
+                       el.data('animating',true);
+
+                       el.animate({'left':'-'+(el.data('size')*el.data('step'))+'px'},'normal',function(){     //롤링객체를 첨부된 size와 step을 곱한 만큼 애니메이션 시킨다.
+                               //전달된 step개수 만큼 롤링객체의 앞에서 요소를 선택하여 복사한후 변수에 저장한다.
+                               var firstChild = el.children().filter(':lt('+el.data('step')+')').clone(true);
+                               firstChild.appendTo(el);        //복사된 요소를 롤링객체의 끝에 붙여놓는다.
+                               el.children().filter(':lt('+el.data('step')+')').remove();      //step개수만큼 선택된 요소를 앞에서 제거한다
+                               el.css('left','0px');   ////롤링객체의 left위치값을 재설정한다.
+
+                               el.data('animating',false);
+                       });
+               }
+               return false;
+       }
+
+}
+
+function fn_slide(options){
+
+       var opts = jQuery.extend({},options);
+
+       var $bt = $('#'+opts.container).find('#'+opts.bt).children();                                   //롤링버튼에 대한 선택자
+       var $obj = $('#'+opts.container).find('#'+opts.obj);                                                            //objectId를 id로 갖는 롤링객체의 선택자
+       var $prev = $('#'+opts.container).find('#'+opts.prev).hide();                                   //이전버튼에 대한 선택자
+       var $next = $('#'+opts.container).find('#'+opts.next);                                                  //다음버튼에 대한 선택자
+       var size = $obj.children().outerWidth();                                //롤링객체의 각 이미지 넓이값
+       var len = $obj.children().length;                                               //롤링객체의 이미지 갯수
+       var effect = false;                                                                             //슬라이드효과를 위한 boolean변수
+       var auto = false;
+       var current = 0;                                                                                //현재 보여지는 이미지의 인덱스값을 저장하기 위한 변수
+       var time;
+
+
+       $obj.css('width',size*len);                                                             //롤링객체의 전체넓이 지정
+       effect = opts.effect;
+       auto = opts.auto;
+
+       if(auto){
+               time = setTimeout('slideShow()',3000);
+       }
+
+       slideShow = function(){
+
+               if(current < len-1){
+                       current++;
+               }else{
+                       current=0;
+               }
+
+               controllStatus();
+
+               moveControl('next');
+
+               time = setTimeout('slideShow()',3000);
+       }
+
+       controllStatus = function(){
+               //이미지의 인덱스값에 따라 이전,다음 버튼 활성여부 지정
+               if(current>0||current<len-1){                           
+                       $prev.show();
+                       $next.show();
+               }
+               if(current==0){
+                       $prev.hide();
+                       $next.show();
+               }
+               if(current>=len-1){
+                       $prev.show();
+                       $next.hide();
+               }
+       }
+
+       moveControl = function(msg){
+               if(opts.bt!=null){
+                       msg=='next'? $bt.eq(current-1).find('img').attr('src', $bt.eq(current-1).find('img').attr('src').replace('_.png','.png'))
+                                                       :$bt.eq(current+1).find('img').attr('src', $bt.eq(current-1).find('img').attr('src').replace('_.png','.png'));  //이전에 활성화된 롤링버튼을 비활성화
+                       $bt.eq(current).find('img').attr('src', $bt.eq(current).find('img').attr('src').replace('.png','_.png'));               //현재 인덱스값을 가지는 롤링버튼을 활성화
+               }
+
+               if(effect!=true){                               //action변수가 true가 아닐경우 슬라이드 효과없이 현재의 인덱스값을 갖는 이미지를 보여줌.
+                       $obj.children().hide();
+                       $obj.children().eq(current).show();
+               }else{                                                  //action변수가 true일 경우 현재의 인덱스값을 갖는 이미지로 슬라이드됨
+                       $obj.animate({'left':'-'+size*current},'slow');
+               }
+       }
+
+       $obj.bind({
+               mouseenter:function(){
+                       if(!auto) return false;
+                       clearTimeout(time);
+               },
+               mouseleave:function(){
+                       if(!auto) return false;
+                       time = setTimeout('slideShow()',3000);
+               }
+       });
+
+       //롤링 버튼 클릭시
+       $bt.bind({
+               mouseenter:function(){
+                       if(!auto) return false;
+                       clearTimeout(time);
+               },
+               mouseleave:function(){
+                       if(!auto) return false;
+                       time = setTimeout('slideShow()',3000);
+               },
+               click:function(){
+                       var idx = $bt.index(this);                                      //클릭한 롤링버튼의 인덱스값 저장
+
+                       current = idx;                                                          //롤링버튼의 인덱스값을 이미지의 인덱스값으로 지정
+
+                       controllStatus();
+
+                       if(effect!=true){                               //action변수가 true가 아닐경우 슬라이드 효과없이 현재의 인덱스값을 갖는 이미지를 보여줌.
+                               $obj.children().hide();
+                               $obj.children().eq(current).show();
+                       }else{                                                  //action변수가 true일 경우 현재의 인덱스값을 갖는 이미지로 슬라이드됨
+                               $obj.animate({'left':'-'+size*current},'slow');
+                       }
+
+                       // 모든 롤링 버튼을 비활성화
+                       $bt.each(function(){
+                               var source = $(this).find('img').attr('src').replace('_.png','.png');
+                                $(this).find('img').attr('src',source);
+                       });
+
+                       // 선택한 롤링버튼을 활성화
+                       var source = $(this).find('img').attr('src').replace('.png','_.png');
+                       $(this).find('img').attr('src',source);
+
+                       return false;
+               }
+       });
+
+       //이전 버튼 클릭시
+       $prev.bind({
+               mouseenter:function(){
+                       var source = $(this).find('img').attr('src').replace('.png','_.png');
+                       $(this).find('img').attr('src',source);
+                       if(!auto) return false;
+                       clearTimeout(time);
+               },
+               mouseleave:function(){
+                       var source = $(this).find('img').attr('src').replace('_.png','.png');
+                       $(this).find('img').attr('src',source);
+                       if(!auto) return false;
+                       time = setTimeout('slideShow()',3000);
+               },
+               click:function(){
+                       if(current==len-1) $next.show();        //이미지 인덱스값이 마지막이 아닐경우 비활성화된 다음버튼을 활성화 
+                       current--;                                                      //이미지 인덱스값 1씩 감소
+
+                       moveControl('prev');
+
+                       if(current==0) $(this).hide();  //이미지 인덱스값이 0일 경우, 즉 현재 첫번째 이미지가 활성화될 경우 이전버튼을 비활성화
+
+                       return false;
+               }
+       });
+
+       //다음 버튼 클릭시
+       $next.bind({
+               mouseenter:function(){
+                       var source = $(this).find('img').attr('src').replace('.png','_.png');
+                       $(this).find('img').attr('src',source);
+                       if(!auto) return false;
+                       clearTimeout(time);
+               },
+               mouseleave:function(){
+                       var source = $(this).find('img').attr('src').replace('_.png','.png');
+                       $(this).find('img').attr('src',source);
+                       if(!auto) return false;
+                       time = setTimeout('slideShow()',3000);
+               },
+               click:function(){
+                       current++;                                                      //이미지 인덱스값 1씩 증가
+                       
+                       moveControl('next');
+
+                       if(current>=len-1) $(this).hide();      //이미지인덱스값이 마지막일 경우, 즉 현재 마지막 이미지가 활성화될 경우 다음버튼을 비활성화
+                       if(current>0) $prev.show();                     //이미지인덱스값이 0이 아닌경우 이전버튼 활성화
+
+                       return false;
+               }
+       });
+
+}
+
+// main rolling banner
+function slideMotion1(){
+       var $banner = $('#rolling .motionview'),
+               //$nav = $('#rolling ul.nav'),
+               banner = {prev:null, next:null},
+               size = $banner.children().length;
+               index = 1,
+               speed = 3000,
+               timer = null,
+               auto = true,
+               width = parseInt(100/size),
+               rest = parseInt(100%size);
+
+       var $nav = $('<ul class="nav">').insertAfter($banner);
+
+       $banner.children().each(function(index){
+               index++;
+               (index==1) ? $('<li style="width:'+width+'%;"><a href="'+ $(this).attr("href") +'" class="sel">'+index+'</a></li>').appendTo($nav) : $('<li style="width:'+width+'%;"><a href="'+ $(this).attr("href") +'">'+index+'</a></li>').appendTo($nav);
+               if(index==size){
+                       $nav.children().eq(-1).find('a').css('background-image','none');
+               }
+       });
+
+       if(rest>0){
+               width+=rest;
+               $nav.children().eq(-1).css('width',width+'%');
+       }
+
+       $nav.delegate("li",'click',function(){
+               var idx = $nav.children().index(this);
+               index = idx;
+               banner.prev = $banner.find('a.active');
+               banner.next = $banner.find('a').eq(index);
+
+               clearInterval(timer);
+               auto = false;
+               
+               $nav.trigger('change.banner',banner)
+                       .trigger('change.tab',index);
+
+               return false;
+       });
+
+       $nav.bind('change.banner',function(event, banner){
+               aniMotion();
+       });
+
+       $nav.bind('change.tab',function(event, index){
+               $nav.children().find('a').removeClass('sel');
+               $nav.children().eq(index).find('a').addClass('sel');
+       });
+
+       timer = setInterval(autoMotion, speed);
+
+       function autoMotion(){
+               if(index > size-1) index = 0;
+
+               aniMotion();
+       }
+
+       function aniMotion(){
+               if(auto){
+                       banner.prev = $banner.find('a.active');
+                       banner.next = $banner.find('a').eq(index);
+
+                       $nav.children().find('a').removeClass('sel');
+                       $nav.children().eq(index).find('a').addClass('sel');
+               }
+               banner.prev.addClass('last-active');
+               banner.next.css({'opacity':0.0})
+                       .addClass('active')
+                       .animate({'opacity':1.0}, 1000, function(){
+                               banner.prev.removeClass('active last-active');
+
+                               if(auto){
+                                       index++;
+                               }else{
+                                       index++;
+                                       timer = setInterval(autoMotion, speed*1.5);
+                                       auto = true;
+                               }
+                       });
+       }
+}
+
+// forum list show or hide function
+function toggleFunc(){
+       
+       var defaulNum = [2];
+
+       $('.forum-tit').each(function(){
+               var self = $(this);
+
+               var idx = $('.forum-tit').index(this);
+
+               for(i=0;i<=defaulNum.length;i++){
+                       if(idx==defaulNum[i]){
+                               var source = self.find('a.toggle').css('background-image').replace('.gif','_.gif');
+                               self.find('a.toggle').css('background-image',source);
+
+                               self.find('a.toggle').text('Show');
+                               self.addClass('mb35').next().hide();
+                       }
+               }
+
+               self.find('a.toggle').click(function(){
+                       
+                       if(self.next().is(':visible')){
+                               var source = $(this).css('background-image').replace('.gif','_.gif');
+                               $(this).css('background-image',source);
+
+                               $(this).text('Show');
+                               self.addClass('mb35').next().hide();
+                       }else{
+                               var source = $(this).css('background-image').replace('_.gif','.gif');
+                               $(this).css('background-image',source);
+
+                               $(this).text('Hide');
+                               self.removeClass('mb35').next().show();
+                       }
+
+                       return false;
+
+               });
+
+       });
+}
+
+// 파일 업로드
+function fileUpload( width ){
+       //var $img = $('.attach input[type=image]');
+       //var width = $img.attr('width');
+
+       // 2012-08-08 추가 : 파일 input 너비영역 셋팅
+       var w = width == null || width == undefined || isNaN( width ) ? "230px" : width + "px";
+
+       var $file = $('.attach input.upload').css({
+               "position": "absolute",
+               "top": "0px",
+               "right": "0px",
+               "width": w,
+               "cursor": "pointer",
+               "opacity": "0.0",
+               "height": "23px"
+       });
+       $file.off('change');
+       $file.on('change',function(e){
+               if(this.files != undefined && this.files.length == 0) { //chrome file 선택 취소시 파일 칸이 지워짐. 방지코드
+                       return;
+               }
+               var idx = $file.index(this);
+               var localeCode = $("#localeCode").val() == undefined ? "en" : $("#localeCode").val();
+               var fileErrMsg = {
+                               limit_ko : "최대 3개의 파일까지 업로드되며 200MB를 넘을수 없습니다"
+                           ,limit_zh : "最多允许附加 3 个文件附件,并且其大小不能超过 200MB。"
+                           ,limit_en : "Up to 3 file attachments are allowed and its size cannot exceed 200MB"
+                           ,ext_ko : "지원하지 않는 확장자 입니다."
+                           ,ext_zh : "不允许上传具有该扩展名的文件。"
+                           ,ext_en : "File extention not allowed for upload."
+               };
+               var initFileInput = function(obj) {
+                       $(obj).parent().find('input.file').val("");
+                       if($.browser.msie && $.browser.msie && $.browser.version < 10.0  ) $(obj).replaceWith( $(obj).clone(true) );
+                       else $(obj).val("");
+               };
+               
+               var filename = $(this).val();
+               
+               //CHK File ext
+               var imgExts = [ "txt", "xls", "xlsx", "doc", "docx"
+                                     , "ppt", "pptx", "pdf", "bmp", "gif", "jpeg"
+                                     , "jpg", "png", "zip"];
+               var fileExt  = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
+               var findFlag = false;
+               for(var i = 0; i < imgExts.length; i++) {
+                       if(imgExts[i] == fileExt) {
+                               findFlag = true;
+                               break;
+                       }
+               }
+       
+               if(findFlag == false) {
+                       alert( fileErrMsg["ext_" + localeCode] );
+                       initFileInput(this);
+//                     setTab(localeCode); //thread_write에도 있는데 실제로 본체가 없음.
+                       return;
+               }
+               
+               //CHK File Size
+               if(
+                               ($.browser.msie && $.browser.version >= 10.0 ) //msie
+                               || $.browser.mozilla //FF
+                               || $.browser.safari //Chrome
+               )
+               {
+                       var filesize = parseInt(this.files[0].size/1024/1024); //MB;
+                       if( filesize > 200 ) {
+                               alert( fileErrMsg["limit_" + localeCode] );
+                               initFileInput(this);
+                               return;
+                       }
+               }
+               
+               $(this).parent().find('input.file').attr("disablesd","disabled").val(filename);
+       });
+};
+
+
+// Show or Hide Toggle
+function showToEx(args){
+
+       if(!arguments.length) return false;
+       
+       var bt = $('#'+args.bt);
+       var obj = $('#'+args.obj);
+
+       var source = bt.css('background-image');
+       
+       if(obj.is(':visible')){
+               obj.hide();
+       }
+
+       bt.toggle(function(){
+               var src = source.replace('.gif','_.gif');
+               bt.css('background-image', src);
+               obj.show();
+               
+               return false;
+       },function(){
+               var src = source.replace('_.gif','.gif');
+               bt.css('background-image', src);
+               obj.hide();
+
+               return false;
+       });
+
+}
+
+
+// FAQ 20131016
+function faqToEx(){
+
+ var $question = $('#contents').find('.question');
+ var $answer = $('#contents').find('.answer');
+
+ // All Answer Rows Hide
+ $answer.hide().find('.conts').hide();
+
+ $question.each(function(){
+  var $self = $(this);
+  $self.append("<div style='display: none'>" + $self.find("a").html() + "</div>");
+  
+  $self.find('a').bind('click',function(){
+   $("#selArea ul").hide();
+   /*
+   if($(this).parents('tr').next().find('.answer').is(':visible')) return false;
+
+   $answer.hide().find('.conts').hide();
+   $(this).parents('tr').next().find('.answer').show().find('.conts').slideDown('normal');
+   */
+
+   /* 20120822 hjh modify*/
+   /* if ( this open )?  close : all close, e.target open */
+   var cutTtl  = $(this).parent().children("div").html();
+   var ttl     = $(this).parent().parent().children("td.real_question").html();
+   
+   if($(this).parents('tr').next().find('.answer').is(':visible')){
+    $(this).html(cutTtl);
+    $(this).parents('tr').next().find('.answer').find('.conts').slideUp('fast',function(){
+     $answer.hide();
+    });
+   }else{
+    titleInit();
+    $(this).html(ttl);
+    $answer.hide().find('.conts').hide();
+    //$answer.slideUp('normal').find('.conts').hide();
+    $(this).parents('tr').next().find('.answer').show().find('.conts').slideDown('slow'); 
+   }   
+
+   return false;
+  });
+ });
+
+ $answer.each(function(){
+  var $self = $(this);
+
+  $(this).find('a.bt-close-faq').bind('click',function(){
+   var question_td = $(this).parent().parent().parent().prev().children("td.question");
+   var cutTtl      = question_td.children("div").html();
+   question_td.children("a").html(cutTtl);
+   
+   $self.find('.conts').slideUp('fast',function(){
+    $self.hide();
+   });
+
+   return false;
+  });
+ });
+ var titleInit = function() {
+  $question.each(function(i) {
+   $(this).find("a").html($(this).find("div").html());
+  });
+ }
+}
+
+
+
+/**
+ *  쓰기페이지 Tab 영역 컨트롤
+ *  @param     selector        텝을 선택했을 때 교체할 레이어 선택자 ex) '.bbs-write:not(#opt)'
+ */
+function setSwitchTab( selector ) {
+       var tabs = $('.tab-list').find("li");
+       var elements = $( selector );
+
+       $( elements ).each( function( i ) {
+               if( i != 0 )
+               {
+                       $(this).hide();
+               }
+       })
+
+       // Control Tabs
+       $( tabs ).each( function( i ) {
+               $( this ).click( function(){
+                       resetClass();
+
+                       $( this ).find( 'a' ).addClass( "sel" );
+                       $( elements[i] ).show();
+
+                       return false;
+               });
+       });
+
+       // Class 리셋
+       function resetClass()
+       {
+               $( tabs ).each( function( i ) {
+                       $( this ).find( 'a' ).removeClass( 'sel' );
+               });
+
+               $( elements ).each( function( i ) {
+                       $( this ).hide();
+               });
+       }
+}
+
+var SET_ATTACH_LIMIT;
+var SET_ATTACH_WIDTH;
+var SET_ATTACH_BTNNAME;
+
+var firstAddAction = function(obj, limit, w, btnName) {
+ var bn            = btnName || 'File';
+ var fileAttachStr = "<li class='clfix no-first'>";
+ fileAttachStr += '<div class="attach">';
+ fileAttachStr += '<input readonly="readonly" disabled="disabled" type="text" class="ipt-txt file" />';
+ fileAttachStr += '<span class="fbtn" style="margin-left: 4px;">' + bn + '</span>';
+ fileAttachStr += '<input type="file" name="file" class="upload" title="File upload" />';
+ fileAttachStr += '</div>';
+ fileAttachStr += '<a href="#none" class="remove-btn fl" style="margin-left: 3px;">remove file</a>';
+ fileAttachStr += '</li>';
+ obj.on("keydown", function(e) {
+  if(e.which == 9 && e.shiftKey) {
+   e.preventDefault();
+   setTimeout(function() {
+    $("a.remove-btn").eq(0).focus();
+   }, 1);
+  }
+ });
+ obj.click( function()
+ {
+  var ul = $( this ).parentsUntil( $("td"), ".file-att-form" );
+  
+  if( $( ul ).find( "li" ).length >= limit )
+  {
+   alert( "Only " + limit + " files are allowed" );
+   return;
+  }
+  //$( fileAttachStr ).find( ".ipt-txt" ).css("width", w + "px" );
+  $( ul ).append( fileAttachStr );
+  var removeBtns = $( ul ).find( ".remove-btn" ).last();
+  $( removeBtns ).bind( "click", onBtnFileDetachClick );
+  
+  
+  removeBtns.on("keydown", function(e) {
+   var that = $(this);
+   if(e.which == 9 && e.shiftKey) {
+    e.preventDefault();
+    setTimeout(function() {
+     that.prev().find("input[type=file]").focus();
+    }, 1);
+   }
+  });
+  
+  var addInputFile = $("ul.file-att-form input[type=file]").last(); 
+  
+  addInputFile.on("keydown", function(e) {
+   var that = $(this);
+   if(e.which == 9 && e.shiftKey) {
+    return true;
+   }
+   
+   if(e.which === 9) {
+    e.preventDefault();
+    setTimeout(function() {
+     that.parent().parent().find("a.remove-btn").eq(0).focus();
+    }, 1);
+   }
+  }).on("focusin", function(e) {
+   $(this).parent().css("outline", "1px dotted #2d2d2d");
+  }).on("focusout", function(e) {
+   $(this).parent().css("outline", "");
+  });
+
+  fileUpload( w + 50 );
+  updateFileField();
+  return false;
+ });
+ function onBtnFileDetachClick()
+ {
+  var that = $(this);
+  $( this ).unbind( "click", onBtnFileDetachClick );
+   var a = that.parent().prev().children("a").eq(0);
+   setTimeout(function() {
+   that.parents(".no-first").remove();
+  }, 1);
+  
+  setTimeout(function() {
+   a.focus();
+  }, 300);
+  return false;
+ }
+ function updateFileField()
+ {
+  var ul = $( ".file-att-form" );
+  $( ul ).find( ".ipt-txt" ).css( "width", w + "px" );
+ }
+}
+
+var firstRemoveAction = function(id) {
+ var obj = $("#" + id);
+ var compFile    = $("input[type=file]");
+ var compFileCnt = compFile.size();
+ var ulObj       = compFile.eq(0).parent().parent().parent();
+ if(compFileCnt <= 1) {
+  var firstCompFile = compFile.eq(0);
+  firstCompFile.prev().prev().val("");
+  if ($.browser.msie) {
+               $(obj).parent().find('input.file').val("");
+               firstCompFile.replaceWith( firstCompFile.clone(true) );
+       } else {
+               firstCompFile.val("");
+               firstCompFile.prev().prev().val("");
+  }
+ } else {
+  obj.parent().remove();
+  ulObj.find("a.remove-btn").eq(0).after("<a href=\"JAVA-SCRIPT:;\" class=\"add-btn fl\" style=\"margin-left: 3px;\">add file</a>");
+  
+  //add-btn event..
+  firstAddAction($("a.add-btn"), SET_ATTACH_LIMIT, SET_ATTACH_WIDTH, SET_ATTACH_BTNNAME);
+ }
+ ulObj
+ .find("li")
+ .eq(0)
+ .removeClass("no-first")
+ .find("a.remove-btn")
+ .attr("id", id)
+ .unbind("click");
+ setTimeout(function() {
+  $("#" + id).focus();
+ }, 100);
+ $("#" + id).on("keydown", function(e) {
+  if(e.which == 9 && e.shiftKey) {
+   e.preventDefault();
+   var that = $(this);
+   setTimeout(function() {
+    that.prev().focus();
+   }, 1);
+  }
+ });
+ $("#" + id).on("click", function(e) {
+  firstRemoveAction($(this).attr("id"));
+ });
+}
+
+/** 
+ * File 첨부컨트롤
+ * @param limit 최대 파일 첨부 갯수
+ * @param width 파일 업로드 필드의 너비 <- 2012-08-08 추가
+ */
+function setAttachFile( limit, width, btnName, removeBtnId )
+{
+ var w = width == null || width == undefined  || isNaN( width ) ? 180 : width;
+ var btnFileAttach = $( 'ul.file-att-form' ).find( 'a.add-btn' );
+ var inputFile     = $( 'ul.file-att-form input[type=file]' );
+ SET_ATTACH_LIMIT = limit;
+ SET_ATTACH_WIDTH = w;
+ SET_ATTACH_BTNNAME = btnName;
+ inputFile.on("keydown", function(e) {
+  var that = $(this);
+  
+  if(e.which == 9 && e.shiftKey) {
+   return true;
+  }
+  
+  if(e.which === 9) {
+   e.preventDefault();
+   setTimeout(function() {
+    that.parent().parent().find("#" + removeBtnId).eq(0).focus();
+   }, 1);
+  }
+ });
+ inputFile.on("focusin", function(e) {
+  $(this).parent().css("outline", "1px dotted #2d2d2d");
+ }).on("focusout", function(e) {
+  $(this).parent().css("outline", "");
+ });
+ firstAddAction(btnFileAttach, limit, w, btnName);
+ /*
+ btnFileAttach.on("keydown", function(e) {
+  if(e.which == 9 && e.shiftKey) {
+   e.preventDefault();
+   setTimeout(function() {
+    inputFile.focus();
+   }, 1);
+  }
+ });
+ btnFileAttach.click( function()
+ {
+  var ul = $( this ).parentsUntil( $("td"), ".file-att-form" );
+  
+  if( $( ul ).find( "li" ).length >= limit )
+  {
+   alert( "Only " + limit + " files are allowed" );
+   return;
+  }
+  //$( fileAttachStr ).find( ".ipt-txt" ).css("width", w + "px" );
+  $( ul ).append( fileAttachStr );
+  var removeBtns = $( ul ).find( ".remove-btn" ).last();
+  $( removeBtns ).bind( "click", onBtnFileDetachClick );
+  
+  
+  removeBtns.on("keydown", function(e) {
+   var that = $(this);
+   if(e.which == 9 && e.shiftKey) {
+    e.preventDefault();
+    setTimeout(function() {
+     that.prev().find("input[type=file]").focus();
+    }, 1);
+   }
+  });
+  
+  var addInputFile = $("ul.file-att-form input[type=file]").last(); 
+  
+  addInputFile.on("keydown", function(e) {
+   var that = $(this);
+   if(e.which == 9 && e.shiftKey) {
+    return true;
+   }
+   
+   if(e.which === 9) {
+    e.preventDefault();
+    setTimeout(function() {
+     that.parent().parent().find("a.remove-btn").eq(0).focus();
+    }, 1);
+   }
+  }).on("focusin", function(e) {
+   $(this).parent().css("outline", "1px dotted #2d2d2d");
+  }).on("focusout", function(e) {
+   $(this).parent().css("outline", "");
+  });
+
+  fileUpload( w + 50 );
+  updateFileField();
+  return false;
+ });
+
+ // File 제거 버튼
+ function onBtnFileDetachClick()
+ {
+  var that = $(this);
+  $( this ).unbind( "click", onBtnFileDetachClick );
+   var a = that.parent().prev().children("a").eq(0);
+   setTimeout(function() {
+   that.parents(".no-first").remove();
+  }, 1);
+  
+  setTimeout(function() {
+   a.focus();
+  }, 300);
+  return false;
+ }
+ */
+ /**
+  *  2012-08-08 전종호 추가
+  *  파일 Input Text 영역 너비를 잡아주는 메서드
+  */
+ function updateFileField()
+ {
+  var ul = $( ".file-att-form" );
+  $( ul ).find( ".ipt-txt" ).css( "width", w + "px" );
+ }
+
+ updateFileField();
+ fileUpload( w + 50 );
+ $("#" + removeBtnId).on("click", function(e) {
+  firstRemoveAction($(this).attr("id"));
+ });
+}
+
+
+
+/** 
+ * [PAGE] device speces list page
+ * date : 20120808
+ * id : hjh
+ */
+function initDevicespecsList (){
+       var isCompareView=false;
+       $("#devicespecs-list > li").each( 
+               function(i){ 
+                       $(".info", this).bind("click", devicespecsListInfoToggle);
+                       $(".xx", this).bind("click", devicespecsListInfoToggle);
+                       
+                       //detail info layer toggle function
+                       function devicespecsListInfoToggle (){
+                               $("#devicespecs-list li:nth-child("+(i+1)+") .info-detail").toggle();
+                               return false;
+                       }
+       });
+
+
+       /* DEVICE COMPARE 열리는 부분
+       - defualt : close. 
+       - 최초 한번만 열림 
+       - 현재는 compare 버튼에 공통으로 함수 바인딩
+       */
+       function devicespecsCompareOnOff (){
+               if ( isCompareView ) return;
+               var ww = ( isCompareView ) ? "30px":"207px";
+               $("#devicespecs-compare").animate({
+                   height: ww }, 300, "linear", function(){ });
+
+               isCompareView = ( isCompareView ) ? false:true;
+               return false;
+       }
+
+       //compare 버튼 공통으로 클릭 이벤트 걸림 
+       $(".compare").bind("click", function (){ devicespecsCompareOnOff() });
+}
+
+/** 
+ * [PAGE] device speces view page
+ * date : 20120808
+ * id : hjh
+ */
+ function initDevicespecsView (){
+       var isImgView = false;
+       var isView = 0;
+       
+       //thumbnail overevent bind
+       $("#img-viewer-thumbnail > li").each( function(i){ $(this).bind("mouseover focusin",function(){focusDeviceDetail(i+1);}); } );
+       focusDeviceDetail (1);
+       
+       $("#img-viewer-thumbnail li").last().on("keydown keyup", function(e) {
+               if(e.which == 9 && e.shiftKey) {
+                       return true;
+               }
+               
+               if(e.type === "keydown" && e.which == 9) {
+                       setTimeout(function() {
+                               $("#img-viewer-handle a").eq(0).focus();        
+                       }, 1);
+               }
+       });
+       
+       //thumbnail viewarea controll handler bind
+       $("#img-viewer-handle").click(function () {
+               var ww;
+               var src = $("#img-viewer-handle img").attr("src");
+               if ( isImgView ){
+                       ww = "300px";
+                       src = src.replace(".gif", "_.gif");
+                       $("#img-viewer-thumbnail").hide();
+                       $("#device-info").show();
+               }else{
+                       ww = "730px";
+                       src = src.replace("_.gif", ".gif");
+                       $("#img-viewer-thumbnail").show();
+                       $("#device-info").hide();
+                       focusDeviceDetail(1);
+               }
+               
+               $("#img-viewer-handle img").attr("src", src);
+       $("#img-viewer").animate({
+                   width: ww
+                       }, 300, "linear", function(){
+                       if($.browser.msie)
+                               $("#img-inner").css("width", ww);
+               });
+               
+       isImgView = ( isImgView ) ? false:true;
+    });
+
+       //thumbnail overevent function (update date 2012.09.05 kangki)
+       function focusDeviceDetail ( id ) {
+               if ( isView == id ) return;
+
+               $("#img-viewer-thumbnail li:nth-child("+isView+")").removeClass ("on");
+               var imgSrc = $("#img-viewer-thumbnail li:nth-child("+id+")").addClass ("on").find('img').attr('src');
+
+               $( "#img-viewer-bic > img").attr("src", imgSrc);
+               isView = (id);          
+       }
+
+       /*toggle devicespecs List*/
+       if($('div#contents').find('.devicespec-tit').length){
+               
+               $('.devicespec-tit').each(function(){
+                       var self = $(this);
+                       $('a', self).bind ("click", fnToggle);
+
+                       function fnToggle(){
+
+                               if ( $(this).parent().parent().next().is(':visible') ){
+                                       $(this).css('background-image', $(this).css('background-image').replace('.gif','_.gif'));
+
+                                       self.find('em').text('Show');
+                                       self.next().hide();
+
+                                       return false;
+                               }else{
+                                       $(this).css('background-image', $(this).css('background-image').replace('_.gif','.gif'));
+                                       self.find('em').text('Hide');
+                                       self.next().show();
+
+                                       return false;
+                               }
+                       }
+                                                       
+               });
+       }
+
+       /*all Show Hide devicespecs List*/
+       if($('div#contents').find('.devicespecs-util').length){
+               var self = $('div#contents').find('.devicespecs-util');
+
+               $('.showA', self).bind ("click", function (){
+                       $('.devicespec-tit').each(function(){
+
+                               var me = $(this);
+                               if ( !me.next().is(':visible') ){
+                                       me.find("a").css('background-image', me.find("a").css('background-image').replace('_.gif','.gif'));
+                                       me.find('em').text('Hide');
+                                       me.next().show();
+                               }
+                       });
+                       return false;
+               })
+               $('.hideA', self).bind ("click", function (){
+                       
+                       $('.devicespec-tit').each(function(){
+
+                               var me = $(this);
+                               if ( me.next().is(':visible') ){
+                                       me.find("a").css('background-image', me.find("a").css('background-image').replace('.gif','_.gif'));
+                                       me.find('em').text('Show');
+                                       me.next().hide();
+                               }
+                                                               
+                       });
+                       return false;
+               })
+       }       
+}
+
+/** 
+ * [PAGE] Search Result
+ * date : 20120810
+ * author : 전종호
+function searchInit()
+{
+       var focusTarget = "input";
+
+       $("#searchInput").bind("keydown", checkSearchText);
+       $("#searchInput").focusout(function() {
+               if( focusTarget == "dropdown" )
+               {
+                       return false;
+               }
+               else
+               {
+                       //toggleClass( false );
+               }
+       });
+       
+       $( "#searchInput" ).focusin( function() {
+               focusTarget = "input";
+       });
+
+       $("#btnDropdown").mousedown( function(){
+               focusTarget = "dropdown";
+       });
+
+       $(".autocomplete ul li").focusin( function() {
+               //
+       });
+
+       $(".autocomplete ul li:last-child").focusout( function() {
+               toggleClass( false );
+       })
+
+       $(".autocomplete").mouseleave(function(){
+               toggleClass( false );
+       });
+       
+       $("#btnDropdown").click( function(){
+               //alert("btn click");
+               if( $("#searchInput").val().length == 0 ){ 
+                       return false;
+               }
+               else{
+                       if( $("#btnDropdown").hasClass("dropdown") ){
+                               toggleClass( true );
+                       }
+                       else{
+                               toggleClass( false );
+                       }
+               }
+
+               return false;
+       });
+
+       function checkSearchText(){
+               setTimeout(function(){
+                       var txt = $("#searchInput").val();
+
+                       if( txt.length > 0 ){
+                               toggleClass( true );
+                       }
+                       else{
+                               toggleClass( false );   
+                       }
+               }, 1);
+       }
+
+       function toggleClass( bo ){
+               if( bo ){
+                       $(".autocomplete").css("visibility", "visible");
+
+                       $("#btnDropdown").removeClass("dropdown");
+                       $("#btnDropdown").addClass("dropdownoff");
+
+                       var hei = $(".autocomplete").find('>ul').outerHeight();
+                       if(hei>400){
+                               $(".autocomplete").css({'height':'400px','overflow-y':'auto'});
+                       }
+               }
+               else{
+                       $(".autocomplete").css("visibility", "hidden");
+                       
+                       $("#btnDropdown").removeClass("dropdownoff");
+                       $("#btnDropdown").addClass("dropdown");
+               }
+       }
+}
+ */
+
+function setTopScroll(selector) {
+       if ( !selector ) return false;
+       var btn = $( selector );
+       var w = $( window );
+       btn.css( "position", "absolute" );
+
+
+       btn.click( function(){ w.scrollTop( 0 ) } );
+
+       var wheight = w.innerHeight();
+       
+       $(window).resize( function() {
+               wheight = w.innerHeight();
+               redraw();
+       });
+
+       $(window).scroll( function() {
+               redraw();
+       })
+
+       /**
+        *      Top 버튼의 재정렬 메서드
+        */
+       function redraw()
+       {
+               var t = w.scrollTop() + wheight - 289;
+
+               if( t < wheight / 2 && w.scrollTop() == 0 )     {
+                       t = wheight / 2;
+               }
+               
+               btn.clearQueue();
+
+               btn.animate({
+           top: t
+               }, 500, function() {
+           // Animation complete.
+               });
+               //btn.css( "top", t );
+               //console.log( "target : " + t );
+       }
+
+       redraw();
+       /*
+       obj.initTop = position;
+       obj.topLimit = topLimit;
+       obj.bottomLimit = Math.max( document.documentElement.scrollHeight, document.body.scrollHeight ) - btmLimit - obj.offsetHeight;
+
+       obj.style.position = "absolute";
+       obj.top = obj.initTop;
+       // obj.left = obj.initLeft;
+
+       if ( typeof( window.pageYOffset ) === "number" ) {      //WebKit
+               obj.getTop = function() {
+                       return window.pageYOffset;
+               }
+       } else if ( typeof( document.documentElement.scrollTop ) === "number" ) {
+               obj.getTop = function() {
+                       return Math.max( document.documentElement.scrollTop, document.body.scrollTop );
+               }
+       } else {
+               obj.getTop = function() {
+                       return 0;
+               }
+       }
+
+       if ( self.innerHeight ) {       //WebKit
+               obj.getHeight = function() {
+                       return self.innerHeight;
+               }
+       } else if( document.documentElement.clientHeight ) {
+               obj.getHeight = function() {
+                       return document.documentElement.clientHeight;
+               }
+       } else {
+               obj.getHeight = function() {
+                       return 500;
+               }
+       }
+
+       obj.move = setInterval( function() {
+               if ( obj.initTop > 0 ) {
+                       pos = obj.getTop() + obj.initTop;
+               } else {
+                       pos = obj.getTop() + obj.getHeight() + obj.initTop;
+               }
+
+               if ( pos > obj.bottomLimit ) pos = obj.bottomLimit;
+               if ( pos < obj.topLimit ) pos = obj.topLimit;
+
+               interval = obj.top - pos;
+               obj.top = obj.top - interval / 3;
+               obj.style.top = obj.top + "px";
+       }, 30 )
+       */
+}
+
+
+//popup
+function pop(url,name,w,h){window.open(url,name,'width='+w+',height='+h+',scrollbars=no')} //Popup(스크롤바없음)
+function pops(url,name,w,h){ window.open(url,name,'width='+w+',height='+h+',scrollbars=yes') } //Popup(스크롤바있음)
+
+//popup 중앙에 띄우기
+function pop_center(){ 
+       var x,y; 
+       if (window.innerHeight) { // IE 외 모든 브라우저 
+               x = (screen.availWidth - self.innerWidth) / 2; 
+               y = (screen.availHeight - self.innerHeight) / 2; 
+       }else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict 모드 
+               x = (screen.availWidth - document.documentElement.clientWidth) / 2; 
+               y = (screen.availHeight - document.documentElement.clientHeight) / 2; 
+       }else if (document.body) { // 다른 IE 브라우저( IE &lt; 6) 
+               x = (screen.availWidth - document.body.clientWidth) / 2; 
+               y = (screen.availHeight - document.body.clientHeight) / 2; 
+       } 
+       window.moveTo(x,y); 
+}
+
+// Layer Popup Open
+function layer_open(el){
+       var temp = $('#' + el);
+
+       if(!temp.hasClass('sty2')){
+               $('.layer').fadeIn();
+       }
+
+       if (temp.outerHeight() < $(document).height() ) temp.css('margin-top', '-'+temp.outerHeight()/2+'px');
+       else temp.css('top', '0px');
+       if (temp.outerWidth() < $(document).width() ) temp.css('margin-left', '-'+temp.outerWidth()/2+'px');
+       else temp.css('left', '0px');
+
+       if(temp.hasClass('sty2')){
+               temp.fadeIn();
+
+               temp.find('a.cbtn').click(function(e){
+                       temp.fadeOut();
+               });
+               temp.find('a.gbtn').click(function(e){
+                       temp.fadeOut();
+               });
+
+               return false;
+       }
+       // 닫는 버튼 gbtn-c 추가 20130627
+       $('.layer .bg, .pop-header .close, .gbtn-c').click(function(){
+               $('.layer').fadeOut();
+               return false;
+       });
+}
+
+// background dim - 2013-05-31
+function layer_open2(el){
+       var temp = $('#' + el);
+       $('input').attr('disabled', 'disabled');
+       $('.layerPop').fadeIn();
+       
+
+       if (temp.outerHeight() < $(document).height() ) temp.css('margin-top', '-'+temp.outerHeight()/2+'px');
+       else temp.css('top', '0px');
+       if (temp.outerWidth() < $(document).width() ) temp.css('margin-left', '-'+temp.outerWidth()/2+'px');
+       else temp.css('left', '0px');
+
+       $('.layerPop .bg, .pop-header .close, .gbtn, .cbtn').click(function(){
+               $('.layerPop').fadeOut();
+               $('input').removeAttr('disabled');
+               return false;
+       });
+}
+
+
+function pop_account(url){
+       window.open(url,'account','width=619,height=591,scrollbars=yes')
+}
+
+function pop_loadDoc(url){
+       window.open(url,'online','width=850,height=600,scrollbars=yes')
+}
+
+/** 
+ *  [PAGE] Tags
+ *  date : 20120820
+ *  author : 전종호
+ */
+function initTags()
+{
+       // Tag리스트의 각 엘리먼트 뒤에 "," 리터럴 추가.
+       // 마지막 아이템은 제외
+       var eleArr = $(".tag-list").find("li");
+
+       $( eleArr ).each( function( i ) {
+               if( i < eleArr.length - 1 )
+               {
+                       var target = $(this).find("a")[0];
+                       var content = $( target ).html();
+
+                       $( target ).html( content + "," );
+               }
+       })
+}
+
+$(document).ready(function(){
+       $(".tip_info").css("cursor","pointer");
+       $(".tip_info > img").mouseover(function(){
+               $(".tip_cont").css("display","block");
+       });
+       $(".tip_info > img").mouseout(function(){
+               $(".tip_cont").css("display","none");
+       });
+});
+
+// new layer popup script by ygh 2013.11.14
+
+var isPopup = false ;
+
+function popupLayerView(id){
+
+       var $L = $("#" + id) ;
+       var $D  = $("#" + id + "down") ;
+
+       $T = $("#" + id) ;
+
+       $L.show();
+       isPopup = true ;
+
+       $('html, body').animate({ scrollTop: $L.offset().top }, 500);
+
+       $("#" + id + "agree").focus() ;
+
+       jQuery(":focusable").focusin(function(e){
+               if (isPopup) {
+                       e.stopPropagation() ;
+                       if ($L.find(jQuery(this)).length > 0) {
+                       } else {
+                               jQuery(this).blur() ;
+                               jQuery("#" + id + " :focusable:first").focus() ;
+                       }
+               }
+       }) ;
+
+       $L.find('.close').click(function(){
+               resetPopup(id) ;
+       });
+
+       $("#" + id + "agree").click(function() { $(this).is(':checked') ? $D.show() : $D.hide() ; });
+}
+
+function resetPopup(T) {
+       $("#" + T + "down").hide();
+       $("#" + T + "agree").attr("checked", false) ;
+       isPopup = false ;
+       $("#" + T).hide() ;
+       $("#" + T + "Btn").focus() ;
+}
+
+function getDownload(T, F, I) {
+       if ($("#" + T + "agree").is(':checked')) {
+               commonDownloadLog(F, I) ;
+               resetPopup(T) ;
+       }
+}
+
+function focusable( element, isTabIndexNotNaN ) {
+       var map, mapName, img, nodeName = element.nodeName.toLowerCase() ;
+       if ( "area" === nodeName ) {
+               map = element.parentNode;
+               mapName = map.name;
+               if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { return false ; }
+               img = $( "img[usemap=#" + mapName + "]" )[0];
+               return !!img && visible( img );
+       }
+       return ( /input|select|textarea|button|object/.test( nodeName ) ? !element.disabled : "a" === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && // the element and all of its ancestors must be visible
+                       visible( element ) ;
+}
+
+function visible( element ) {
+       return $.expr.filters.visible( element ) && !$( element ).parents().addBack().filter(function() {
+               return $.css( this, "visibility" ) === "hidden";
+       }).length;
+}
+if ( !$.fn.addBack ) { $.fn.addBack = function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter( selector ) ); }; }
+
+$.extend( $.expr[ ":" ], {
+       data: $.expr.createPseudo ? $.expr.createPseudo(function( dataName ) { return function( elem ) { return !!$.data( elem, dataName ); }; }) : function( elem, i, match ) { return !!$.data( elem, match[ 3 ] ); },
+       focusable: function( element ) { return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); },
+       tabbable: function( element ) { var tabIndex = $.attr( element, "tabindex" ), isTabIndexNaN = isNaN( tabIndex ); return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); }
+});
+// new layer popup script by ygh 2013.11.14
+
+// 2013-11-15 타이젠 썸네일 추가
+$(document).ready(function() {
+       $('.view_device1').hide();
+       
+       $('#thumb_view_btn').hover(function() {
+               $('.view_device1').show();
+       },function() {
+               $('.view_device1').hide();
+       });
+               
+});
+
+// 2014-04-22 타이젠 썸네일 추가
+$(document).ready(function() {
+       $('.view_device2').hide();
+       
+       $('#thumb_view_btn2').hover(function() {
+               $('.view_device2').show();
+       },function() {
+               $('.view_device2').hide();
+       });
+               
+});
+
+
+function beforePopupLayerView(popId, popId2, popContinue){
+       var $L = $("#" + popId) ;
+       $L.show(100);
+       $('html, body').animate({ scrollTop: $L.offset().top }, 500);
+       $L.find('.close').click(function(){
+               $L.hide();
+       });
+       $L.find("." + popContinue).click(function() { $L.hide(); popupLayerView(popId2); });
+}
diff --git a/preview/html/scripts/core.js b/preview/html/scripts/core.js
new file mode 100644 (file)
index 0000000..68dea4c
--- /dev/null
@@ -0,0 +1,899 @@
+// /////////////////////////////////////////////////////////////////////////////////////////////////
+// # com.samsung.devloper common core javascript #
+// # Create Date : 2012.07.10. 
+// # Create By : kangki
+;(function ($) {
+/**
+ * Samsung Developer Common JavaScript
+ */
+$.SD = {};
+
+/*
+ * Method Common
+ */
+$.SD.message = function (msg) { if (msg) alert(msg); };
+$.SD.replaceAll = function (str, from, to) { return str.split(from).join(to); }
+$.SD.typeOf = function (data) { var func = func || Object.prototype.toString; return func.call(data); };
+$.SD.typeTest = function (data, datatype) {
+       if (datatype === "String" || datatype === "string") return /String/.test($.SD.typeOf(data));
+       if (datatype === "Number" || datatype === "number") return /Number/.test($.SD.typeOf(data));
+       if (datatype === "Array" || datatype === "array") return /Array/.test($.SD.typeOf(data));
+       if (datatype === "Boolean" || datatype === "boolean") return /Boolean/.test($.SD.typeOf(data));
+       if (datatype === "Function" || datatype === "function") return /Function/.test($.SD.typeOf(data));
+       if (datatype === "Date" || datatype === "date") return /Date/.test($.SD.typeOf(data));
+       if (datatype === "Object" || datatype === "object") return /Object/.test($.SD.typeOf(data));
+
+       return (new RegExp("/" + datatype + "/")).test($.SD.typeOf(data));
+};
+
+$.SD.toDate = function (date, seperator) {
+       if (!seperator) seperator = '-';
+
+       date = $.SD.replaceAll(date, seperator, '');
+       date = $.SD.replaceAll(date, '/', '');
+
+       if (date.length !== 8) return null;
+       
+       date = new Date(date.substring(0,4) + '/' + date.substring(4,6) + '/' + date.substring(6,8));
+
+       if (date.valueOf().toString() === 'NaN') return null;
+
+       return date;
+};
+
+$.SD.toDateString = function (date, seperator) {
+       if (!seperator) seperator = '/';
+       if (/String/.test(Object.prototype.toString.call(date))) date = $.SD.toDate(date);
+       if (/Date/.test(Object.prototype.toString.call(date)) === false) return "";
+
+       var str, dateString = date.getFullYear();
+
+       str             = "0" + (date.getMonth()+1);
+       dateString      = dateString + seperator + str.substring(str.length-2, str.length);
+       str             = "0" + date.getDate();
+       dateString      = dateString + seperator + str.substring(str.length-2, str.length);
+
+       return dateString;
+};
+
+$.SD.addYear = function (date, number) { date.setYear(date.getFullYear() + number); return date; };
+$.SD.addMonth = function (date, number) { date.setMonth(date.getMonth() + number); return date; };
+$.SD.addDate = function (date, number) { date.setDate(date.getDate() + number); return date; };
+
+$.SD.insertComma = function(num) {
+       var tnum    = num + "";
+       var tarr    = new Array();
+       var dot     = "";
+       var idxDot  = tnum.indexOf(".");
+       var sign    = "";
+       var tinx    = 0;
+       var fnum    = tnum;
+        
+       
+       if(idxDot > -1) {
+               fnum = tnum.substring(0, idxDot);
+               dot  = tnum.substring(idxDot);
+               tnum = fnum;
+       } 
+       
+       if(tnum.indexOf("-") > -1) {
+               fnum = tnum.substring(1);
+               sign = tnum.substring(0, 1);
+       }
+       
+       for(var inx = fnum.length; inx > 0; ) {
+               tarr[tinx++] = fnum.substring(inx, inx - 3);
+               inx = inx - 3;
+       }
+       
+       return sign + tarr.reverse().join(",") + dot;
+}
+
+/**
+ * Method Ajax
+ */
+$.SD.ajax = {
+       doAjax : function (json) {
+               var param = {
+                       async : json.async,
+                       type : json.type,
+                       dataType : json.dataType,
+                       cache: json.cache,
+                       timeout : json.timeout,
+                       success : json.success,
+                       error : json.error
+               };
+
+               if (param.dataType === 'jsonp') {
+                       param.url = json.url + '?' + $.param(json.data) + '&callback=?';
+               } else {
+                       param.url = json.url;
+                       param.data = json.data;
+               }
+               $.ajax(param);
+       },
+       
+       get : function (json) {
+               $.SD.ajax.doAjax({ 
+                       url:json.url,
+                       cache:json.cache != null ? json.cache : false,
+                       async:json.async != null ? json.async : true,
+                       type:'get', 
+                       dataType:'json',
+                       data:json.data != null ? json.data : {}, 
+                       timeout:10000, success:json.success, 
+                       error: function(){ if(json.error != null)json.error(); }
+               });
+       },
+       
+       post : function (json) {
+               $.SD.ajax.doAjax({ url:json.url,
+                       cache: json.cache != null ? json.cache : false,
+                       async:json.async != null ? json.async : true,
+                       type:'post', dataType:'json',
+                       data:json.data != null ? json.data : {}, 
+                       timeout:10000, success:json.success, 
+                       error: function(){ if(json.error != null)json.error(); }
+               });
+       }
+};
+
+/**
+ * SD20 password check
+ */
+
+$.SD.isSD20Pwd = function(pwd) {
+       
+       if(/[a-zA-Z]{1,}/.test(pwd) == false) {
+               return false;
+       }
+       
+       if(/[0-9]{1,}/.test(pwd) == false) {
+               return false;
+       }
+       
+       if(/^[0-9a-zA-Z]{6,16}$/.test(pwd) == false) {
+               return false;
+       }
+       
+       return true;
+};
+
+$.SD.popupCenter = function(popObj) {
+       var scrollbars  = "no";
+       var resizeable  = "no";
+       
+       if(popObj.scrollbars) {
+               scrollbars = popObj.scrollbars; 
+       }
+       
+       if(popObj.resizeable) {
+               resizeable = popObj.resizeable;
+       }
+       
+       var width  = screen.width;
+       var height = screen.height;
+
+       var x = ( width / 2 ) - ( popObj.width / 2 );
+       var y = ( height / 2 ) - ( popObj.height / 2 );
+
+       var opt = "left=" + x +
+                 ",top=" + y +
+                 ",width=" + popObj.width +
+                 ",height=" + popObj.height +
+                 ",toolbar=no,location=no,directories=no,status=no,menubar=no" +
+                 ",scrollbars=" + scrollbars +
+                 ",resizable=" + resizeable;
+       var pop = window.open(popObj.url, popObj.target, opt);
+       if(pop) {
+               pop.focus();
+       }
+}
+
+$.SD.isValidDate = function(val) {
+       if(val.length != 8) {
+               return false;
+       }
+       
+       var yyyy = Number(val.substring(0, 4)); 
+       var mm   = Number(val.substring(4, 6));
+       var dd   = Number(val.substring(6));
+       
+       if( mm < 1 || mm > 12 ) {
+               return false;
+       }
+       
+       var endDay  = 0;
+       
+       if( mm == 2 ) {
+               if(yyyy % 4 == 0 && yyyy % 100 != 0 || yyyy % 400 == 0) {
+                       endDay = 29;
+               } else {
+                       endDay = 28;
+               }
+               
+       } else {
+               var endDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
+               endDay = endDays[mm - 1];
+       }
+       
+       if( dd <= 0 || dd > endDay ) {
+               return false;
+       } 
+       
+       return true;
+       
+}
+
+$.SD.boardDownload = function(option, func) {
+       var jsonData = {
+               url: "/board/ajaxDwnldProc.do",
+               async: false,
+               data: {ctgy1: option.ctgy1, ctgy2: option.ctgy2, ctgyId: option.ctgyId, bdId: option.bdId, attachId: option.attachId},
+               success: function(data) {
+                       if(data.existFileYn == "Y") {
+                               location.href = "/board/download.do?bdId=" + option.bdId + "&attachId=" + option.attachId;
+                               //location.href = $(obj).attr("href");
+                               if(func) {
+                                       func(data);
+                               }       
+                       } else {
+                               alert("File does not exist.");
+                       }
+               }
+       }
+       
+       $.SD.ajax.get(jsonData);
+}
+
+$.SD.commonDownload = function(fileName, categoryId, func) {
+       var jsonData = {
+               url: "/common/ajaxCommonDwnldProc.do",
+               async: false,
+               data: {fileName: fileName, categoryId: categoryId},
+               success: function(data) {
+                       if(data.existFileYn == "Y") {
+                               location.href = "/common/commonDownload.do?fileName=" + fileName + "&categoryId=" + categoryId;
+                               if(func) {
+                                       func(data);
+                               }       
+                       } else {
+                               alert("File does not exist.");
+                       }
+               }
+       }
+       
+       $.SD.ajax.get(jsonData); 
+}
+
+$.SD.commonDownloadLog = function(fileFullPath, categoryId, func) {
+       var jsonData = {
+               url: "/common/ajaxCommonDownloadLogProc.do",
+               async: false,
+               data: {fileFullPath: fileFullPath, categoryId: categoryId},
+               success: function(data) {
+                       if(data.existFileYn == "Y") {
+                               //location.href = "/common/commonDownload.do?fileName=" + fileName + "&categoryId=" + categoryId;
+                               location.href = fileFullPath;
+                               if(func) {
+                                       func(data);
+                               }       
+                       } else {
+                               alert("File does not exist.");
+                       }
+               }
+       }
+       
+       $.SD.ajax.get(jsonData); 
+}
+
+$.SD.commonDownloadLogTarget = function(fileFullPath, categoryId, target, func) {
+       var jsonData = {
+               url: "/common/ajaxCommonDownloadLogProc.do",
+               async: false,
+               data: {fileFullPath: fileFullPath, categoryId: categoryId},
+               success: function(data) {
+                       if(data.existFileYn == "Y") {
+                               //location.href = "/common/commonDownload.do?fileName=" + fileName + "&categoryId=" + categoryId;
+                               if(target == 'new'){
+                                       window.open(fileFullPath, '');
+                               }else{
+                                       location.href = fileFullPath;
+                               }
+                               
+                               if(func) {
+                                       func(data);
+                               }       
+                       } else {
+                               alert("File does not exist.");
+                       }
+               }
+       }
+       
+       $.SD.ajax.get(jsonData); 
+}
+
+$.SD.commonAllShareClickCount = function(fileFullPath, categoryId, func) {
+       var jsonData = {
+               url: "/common/ajaxCommonAllShareClickCountProc.do",
+               async: false,
+               data: {fileFullPath: fileFullPath, categoryId: categoryId},
+               success: function(data) {}
+       }
+       
+       $.SD.ajax.get(jsonData); 
+}
+
+$.SD.commonClickCount = function(categoryName, categoryId) {
+       var jsonData = {
+               url: "/common/ajaxCommonClickCountProc.do",
+               data: {categoryName: categoryName, categoryId: categoryId},
+               success: function(data) {}
+       }
+       
+       $.SD.ajax.get(jsonData);
+}
+
+$.SD.getByteLen = function(str) {
+       var resultSize = 0;
+       if(str == null){
+               return 0;
+       }
+       for(var i=0; i<str.length; i++){
+         var c = escape(str.charAt(i));
+         if(c.length == 1){
+                 resultSize ++;
+         }     else if(c.indexOf("%u") != -1) {
+                 resultSize += 2;
+         }     else if(c.indexOf("%") != -1) {
+                 resultSize += c.length/3;
+         }
+       }
+       return resultSize;
+}
+
+$.SD.cutByte = function(str, limit) {
+       var tempStr = new String(str);
+       var len = 0;
+       for ( var i = 0; i < str.length; i++) {
+               var c = escape(str.charAt(i));
+               if (c.length == 1)
+                       len++;
+               else if (c.indexOf("%u") != -1)
+                       len += 2;
+               else if (c.indexOf("%") != -1)
+                       len += c.length / 3;
+               if (len > limit) {
+                       tempStr = tempStr.substring(0, i);
+                       break;
+               }
+       }
+       return tempStr;
+}
+
+$.SD.pagination = {alt:{first:"",prev:"",next:"",last:""}};
+
+/* ---------------- ADD JQUERY CUSTOM METHOD -------------------------------- */
+
+/** 
+ * Method pagination 
+ * */
+$.fn.frontPagination = function (pageInfo, func) {
+       var info = {
+                        prev : 1
+                       ,first : 1
+                       ,begin : pageInfo.begin - 0
+                       ,current : pageInfo.current - 0
+                       ,end : pageInfo.end - 0
+                       ,last : pageInfo.last - 0
+                       ,next : 1
+               },
+               target  = this, 
+               page    = $('<span class="page"></span>'),
+               prev    = "", 
+               next    = "", 
+               i               = 0, 
+               n               = 0;
+
+       info.begin       = info.begin < 1 ? 1 : info.begin;
+       info.current = info.current < 1 ? 1 : info.current;
+       info.end         = info.end < 1 ? 1 : info.end;
+       info.last        = info.last < 1 ? 1 : info.last;
+
+       info.prev = info.current - 1;
+       info.next = info.current + 1;
+
+       target.addClass("pageNumber");
+       target.addClass("mt20");
+       target.children().remove();
+
+       if (info.first < info.begin) {
+               target.append($('<a href="#" class="first"><img src="/images/common/ico/ico_arr_first.gif" alt="'+$.SD.pagination.alt.first+'" /></a>').bind('click', function(e) {
+                       e.preventDefault();
+                       func(info.first);
+               }));
+       }
+
+       if (info.prev >= info.first) {
+               target.append($('<a href="#" class="prev"><img src="/images/common/ico/ico_arr_prev.gif" alt="'+$.SD.pagination.alt.prev+'"/></a>').bind('click', function(e) {
+                       e.preventDefault();
+                       func(info.prev);
+               }));
+       }
+
+       i = info.begin;
+       n = info.end;
+       for(; i <= n; i++) {
+               if (i === info.current) {
+                       page.append('<strong>'+i+'</strong>');
+               } else {
+                       (function(index){
+                               page.append($('<a href="#">'+index+'</a>').bind('click', function(e){
+                                       e.preventDefault();
+                                       func(index);
+                               }));
+                       })(i);
+               }
+       }
+
+       target.append(page);
+
+       if (info.next <= info.last) {
+               target.append($('<a href="#" class="next"><img src="/images/common/ico/ico_arr_next.gif" alt="'+$.SD.pagination.alt.next+'" /></a>').bind('click', function(e) {
+                       e.preventDefault();
+                       func(info.next);
+               }));
+       }
+       
+       if (info.last > info.end) {
+               target.append($('<a href="#" class="last"><img src="/images/common/ico/ico_arr_last.gif" alt="'+$.SD.pagination.alt.last+'" /></a>').bind('click', function(e) {
+                       e.preventDefault();
+                       func(info.last);
+               }));
+       }       
+};
+
+/**
+ *  Method : popup Show Hide 
+ */
+$.fn.popupShow = function(options) {
+       var opts = $.extend({}, $.fn.popupShow.defaults, options);
+       
+       if($("body div#" + opts.maskId).size() == 0) {
+               $("body").append("<div id='" + opts.maskId + "'></div>");
+               $("#" + opts.maskId).css({
+                       "position" : "absolute",
+                       "left"     : "0",
+                       "top"      : "0",
+                       "z-index"  : "9000",
+                       "background-color" : "#000",
+                       "display"  : "none"
+               });
+       }
+       
+       var mask_layer  = $("#" + opts.maskId);
+       var popup_layer = $(this);
+       
+       popup_layer.css("z-index", "9999");
+       
+       var maskHeight = $(document).height();
+       var maskWidth = $(window).width();
+       
+       mask_layer.css({'width':maskWidth,'height':maskHeight});
+       
+       mask_layer.fadeIn(opts.fadeSec);
+       mask_layer.fadeTo(opts.speed, opts.fadeLow);
+       
+       var winH = $(window).height();
+       var winW = $(window).width();
+       
+       popup_layer.css('top',  $(window).scrollTop() + winH/2 - popup_layer.height()/2);
+       popup_layer.css('left', $(window).scrollLeft()  + winW/2 - popup_layer.width()/2);
+       
+       popup_layer.fadeIn(opts.fadeSec);
+       
+       var init_num = 0;
+       
+       if(init_num == 0) {
+               mask_layer.click(function() {
+                       $(this).hide();
+                       popup_layer.hide();
+               });
+               
+               
+               $("#" + opts.closeId).click( function(e) {
+                       e.preventDefault();
+                       popup_layer.popupHidden(opts.maskId);
+               });
+               
+               
+               $(window).resize( function() {
+                       var maskHeight = $(document).height();
+                       var maskWidth  = $(window).width();
+                       var winH       = $(window).height();
+                       var winW       = $(window).width();
+                       
+                       mask_layer.css({'width':maskWidth,'height':maskHeight});
+                       
+                       popup_layer.css('top',  $(window).scrollTop() + winH/2 - popup_layer.height()/2);
+                       popup_layer.css('left', $(window).scrollLeft()  + winW/2 - popup_layer.width()/2);
+               });
+               
+               init_num++;
+       }
+};
+
+$.fn.popupHidden = function(maskId) {
+       var id = "#";
+       
+       if(maskId) {
+               id = id + maskId;
+       } else {
+               id = id + $.fn.popupShow.defaults.maskId; 
+       }
+       
+       $(id).hide();
+       $(this).hide();
+};
+
+
+$.fn.popupShow.defaults = {
+       speed : "slow",
+       fadeLow : 0.8,
+       fadeSec : 100,
+       maskId  : "mask",
+       popupId : "layer-pop",
+       closeId : "layer-pop-close"
+};
+
+/**
+ *  Method : validate File Ext
+ */
+$.fn.isNotValidateFileExt = function(imgExts) {
+       imgExts = imgExts || {txt:true, xls:true, xlsx:true, doc:true, docx:true, ppt:true, pptx:true, pdf:true, bmp:true,gif:true, jpeg:true, jpg:true, png:true, zip:true, swf:true};
+       var that = this;
+       var target = null;
+
+       that.each(function (i, item) {
+               var filePath = $(item).attr('type') === 'file' ? $(item).val() : '';
+               if (filePath != "") {
+                       var fileExt  = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase();
+                       if (!imgExts[fileExt]) {
+                               target = item;
+                               return false;
+                       }
+               }
+       });
+
+       return target;
+}      
+
+/**
+ *  Method : validate SD20 Password
+ */
+$.validator.addMethod("isSD20Pwd", function(value, element) {
+       return this.optional(element) 
+              || $.SD.isSD20Pwd(value);
+}, "비밀번호를 다시 입력해 주세요.");
+
+$.SD.alterParent = function(options, event) {
+    var label = $(this).data('label');
+    
+    /*
+    if (event && event.type === 'focusin') {
+      label.hide();
+    } else if (event && event.type === 'focusout') {
+      label.css('opacity', options.placeholderOpacity);
+    }
+    */
+    
+    if (event && event.type !== 'keydown') {
+      toggleLabel(this, label);
+    } else {
+      // Use timeout to catch val() just after the key is pressed
+      // Using keyup is too slow.   
+      (function(input) {
+        setTimeout(function() {
+          toggleLabel(input, label);
+        }, 0);
+      })(this);
+    }
+    
+    if (event && event.type === 'focusin') {
+       label.hide();
+    }
+  };
+  
+  var toggleLabel = function(input, label) {
+    if ($(input).val()) {
+      label.hide();
+    } else {
+      label.show();
+    }
+  };
+
+  $.fn.stickyPlaceholders = function(options) {
+    var defaults = {
+      wrapperClass: 'sticky-placeholder-wrapper',
+      wrapperDisplay: 'block',
+      labelClass: 'sticky-placeholder-label',
+      placeholderAttr: 'placeholder',
+      dataAttr: 'data-sticky-placeholder',
+      placeholderColor: '#000',
+      placeholderOpacity: 0.5,
+      placeholderFocusOpacity: 0.25
+    };
+    options = $.extend(defaults, options);
+
+    return this.each(function() {
+      var input       = $(this),
+          placeholder = input.attr(options.placeholderAttr),
+          wrapper     = $(this).wrap('<span class="' + options.wrapperClass + '" />').parent().css({'position':'relative', 'display':options.wrapperDisplay}),
+          label       = $('<label class="' + options.labelClass + '" for="' + input.attr('id') + '">' + placeholder + '</label>').appendTo(wrapper),
+          labelStyle;
+
+      // store a reference to each input's label
+      input.data('label', label);
+
+      // remove the placeholder attribute to avoid conflcits
+      input.removeAttr('placeholder');
+      
+      // If the dataAttr is set and it's not equal to the placeholderAttr
+      if ( options.dataAttr && options.placeholderAttr !== options.dataAttr ) {
+        input.attr('data-sticky-placeholder', placeholder);
+      }
+
+      labelStyle = {
+        'color': options.placeholderColor,
+        'cursor': 'text',
+        'font-family': input.css('font-family'),
+        'font-weight': input.css('font-weight'),
+        'font-size': input.css('font-size'),
+        'left': parseInt(input.css('border-left-width'), 10) + parseInt(input.css('margin-left'), 10),
+        'line-height': this.currentStyle ? this.currentStyle.lineHeight : input.css('line-height'),
+        // fix for an IE/jQuery bug returning 1px when the line-height doesn't have a unit: http://bugs.jquery.com/ticket/2671
+        'opacity': options.placeholderOpacity,
+        'padding-left': input.css('padding-left'),
+        'padding-top': input.css('padding-top'),
+        'position': 'absolute',
+        'text-transform': input.css('text-transform'),
+        'top': parseInt(input.css('border-top-width'), 10) + parseInt(input.css('margin-top'), 10)
+      };
+      label.css(labelStyle);
+      
+      // hide the placeholder if the input already has a value
+      if (input.val()) {
+        label.hide();
+      }
+
+      $(this).bind('keydown input focusin focusout', function(event) {
+        $.SD.alterParent.call(this, options, event);
+      });
+        
+      // prevent click/dblclick from selecting the label text
+      label.bind('mousedown', function(e) {
+        e.preventDefault();
+      });
+      
+      // call alterParent initially without an event to set up the wrapper elements
+      $.SD.alterParent.call(this, options);
+    });
+  };
+$.SD.setInputFileKeyEvent = function(file_id, after_id) {
+       $("#" + file_id).on("keydown", function(e) {
+               var that = $(this);
+               if(e.which == 9 && e.shiftKey) {
+                       return true;
+               }
+               
+               if(e.which === 9) {
+                       e.preventDefault();
+                       setTimeout(function() {
+                               $("#" + after_id).focus();
+                       }, 1);
+               }
+       });
+       
+       $("#" + after_id).on("keydown", function(e) {
+               if(e.which == 9 && e.shiftKey) {
+                       e.preventDefault();
+                       setTimeout(function() {
+                               $("#" + file_id).focus();
+                       }, 1);
+               }
+       });
+}  
+
+$.SD.closeWP = function() {
+       var Browser = navigator.appName;
+       var indexB = Browser.indexOf('Explorer');
+       if (indexB > 0) {
+           var indexV = navigator.userAgent.indexOf('MSIE') + 5;
+           var Version = navigator.userAgent.substring(indexV, indexV + 1);
+           window.opener.focus();
+           if (Version >= 7) {
+               window.open('', '_self', '');
+               window.close();
+           }
+           else if (Version == 6) {
+               window.opener = null;
+               window.close();
+           }
+           else {
+               window.opener = '';
+               window.close();
+           }
+       }
+       else {
+           window.close();
+       }
+}
+
+$.SD.profileFacebook = function() {
+       location.replace("http://facebook.com/profile.php");
+}
+
+/* ------------------------------ END --------------------------------------- */
+window.$SD = $.SD;
+
+})(jQuery);
+
+
+$(document).ready(function(){
+//document rady Start #########################################
+
+// Top menu action Start
+var onClickChangeEn            = function(e){ e.preventDefault(); $("#langCode").val("en"); $("#chLanguage").submit(); };
+var onClickChangeZh            = function(e){ e.preventDefault(); $("#langCode").val("zh"); $("#chLanguage").submit(); };
+var onClickChangeKo            = function(e){ e.preventDefault(); $("#langCode").val("ko"); $("#chLanguage").submit(); };
+var onClickSignOut                     = function(e){ e.preventDefault(); $("#signForm").attr("action", "/sa/mbr.logout.do"); $("#signForm").submit(); };
+var onClickSignUp                      = function(e){ e.preventDefault(); $("#signForm").attr("action", "/signup"); $("#signForm").submit(); };
+var onClickSignIn                      = function(e){ e.preventDefault(); $("#signForm").attr("action", "/sa/signIn.do"); $("#signForm").submit(); };
+var onClickUserInfoUpdate      = function(e){ e.preventDefault(); $("#signForm").attr("action", "/mypage/myforum/list.do"); $("#signForm").submit(); };
+var onClickSignOff                     = function(e){ e.preventDefault(); $("#signForm").attr("action", "/sa/signOff.do"); $("#signForm").submit(); }; 
+var onClickMyProfileUpdate     = function(e){ e.preventDefault(); $("#signForm").attr("action", "/sa/update.profile.do"); $("#signForm").submit(); };
+var onClickDeleteAccount       = function(e){ e.preventDefault(); $("#signForm").attr("action", "/sa/signOff.do"); $("#signForm").submit(); };
+
+$("#wrapper").on('click', 'a', function(e) {
+        switch($(this).attr('id')) {
+        case 'changeEn': onClickChangeEn(e);  break;
+        case 'changeZh': onClickChangeZh(e); break;
+        case 'changeKo': onClickChangeKo(e); break;
+        case 'signOut': onClickSignOut(e); break;
+        case 'signUp': onClickSignUp(e); break;
+        case 'signIn': onClickSignIn(e); break;
+        case 'userInfoUpdate': onClickUserInfoUpdate(e); break;
+        case 'signOff': onClickSignOff(e); break;
+        case 'myProfileUpdate' : onClickMyProfileUpdate(e); break;
+        case 'deleteAccount' : onClickDeleteAccount(e); break;
+        }
+});
+//Top menu action End
+
+
+$("#sendFacebook, #sendTwitter").click(function(e) {
+       e.preventDefault();
+       var $this = $(this);
+       
+       if(typeof(copyUrl) != "undefined" && typeof(boardTitle) != "undefined") {
+               var sns = $this.attr("id").substring(4).toLowerCase();
+               switch(sns) {
+               case "facebook" :
+                       var imgUrl = "http://img-developer.samsung.com/images/common/logo_200x200.gif";
+                       $("div.content img").each(function() {
+                               var that = $(this);
+                               if(that.width() > 200 && that.height() > 200) {
+                                       imgUrl = that.attr("src");
+                                       return false;
+                               }
+                       });
+                       
+                       var data = {
+                               app_id : $("#sd_appId").text(),
+                               link : copyUrl,
+                               picture : imgUrl,
+                               name : $("title").text(),
+                               caption : "developer.samsung.com",
+                               description : $("div.content p").eq(0).text(),
+                               redirectUri : "http://" + location.host + "/board/sns.do"
+                       };
+                       var url = "https://www.facebook.com/dialog/feed?" ;
+                       url += "app_id=" + data.app_id + "&" ;
+                       url += "link=" + data.link + "&" ;
+                       url += "picture=" + data.picture + "&" ;
+                       url += "name=" + encodeURIComponent(data.name) + "&" ;
+                       url += "caption=" + encodeURIComponent(data.caption) + "&" ;
+                       url += "description=" + encodeURIComponent(data.description) + "&" ;
+                       url += "redirect_uri=" + data.redirectUri ;
+                       sendSNS(sns, url, 850, 600);
+                       break;
+               case "twitter" :
+                       sendSNS(sns, "http://twitter.com/home?status=" + encodeURIComponent(boardTitle) + " " + encodeURIComponent(copyUrl), 600, 400);
+                       break;
+               }
+       }
+       
+       function sendSNS(sns, url, iWidth, iHeight) {
+               var popObj = { url : url
+                                    , width : iWidth
+                                    , height: iHeight
+                                    , target: sns
+                                    , scrollbars: "yes"
+                                    , resizeable: "yes"};
+       
+               $SD.popupCenter(popObj);
+       }
+})
+//document rady End #########################################
+ });
+
+;(function(){
+       window.deviceImageError = function(el) {
+               var noImage = noImage || '/images/common/device_details_noimage.gif';
+               if (el.src === noImage) 
+                       return;
+               el.src = noImage;
+       };
+})();
+
+function commonDownload(fileName, categoryId){
+       if (fileName == "" || categoryId == ""){
+               alert("필요한 인자값을 확인해주세요!!!!")
+               return;
+       }else{
+               $SD.commonDownload(fileName, categoryId, function(data) {
+               });
+       }
+}
+
+function commonDownloadLog(fileFullPath, categoryId){
+       if (fileFullPath == "" || categoryId == ""){
+               alert("필요한 인자값을 확인해주세요!!")
+               return;
+       }else{
+               $SD.commonDownloadLog(fileFullPath, categoryId, function(data) {
+               });
+       }
+}
+
+function commonDownloadLogTarget(fileFullPath, categoryId, target){
+       if (fileFullPath == "" || categoryId == ""){
+               alert("필요한 인자값을 확인해주세요!!")
+               return;
+       }else{
+               $SD.commonDownloadLogTarget(fileFullPath, categoryId, target, function(data) {
+               });
+       }
+}
+
+function commonAllShareClickCount(fileFullPath, categoryId){
+       if (fileFullPath == "" || categoryId == ""){
+               alert("필요한 인자값을 확인해주세요!!")
+               return;
+       }else{
+               $SD.commonAllShareClickCount(fileFullPath, categoryId, function(data) {
+               });
+       }
+}
+
+/*
+function layer_view(id){
+
+       var $layer = $('#'+id);
+       var $down  = $('.license-layer').find('a#down');
+
+       $layer.show();
+       $layer.find('.close, #down').click(function(){
+               $layer.hide();
+       });
+
+       function countChecked() {
+               $(":checkbox").is(':checked') ? $down.show() : $down.hide()
+       }
+
+       $(":checkbox").click(countChecked);
+}
+*/
diff --git a/preview/html/scripts/jquery.util.js b/preview/html/scripts/jquery.util.js
new file mode 100644 (file)
index 0000000..3fc3ad0
--- /dev/null
@@ -0,0 +1,1441 @@
+/* org: 'http://www.JSON.org', copyright: '(c)2005 JSON.org', license: 'http://www.crockford.com/JSON/license.html' */
+(function (wn) {var JSON={stringify:function stringify(c){var a,d,f,b='',e;switch(typeof c){case'object':if(c){if(c.constructor==Array){for(d=0;d<c.length;++d){e=stringify(c[d]);if(b){b+=','}b+=e}return'['+b+']'}else if(typeof c.toString!='undefined'){for(d in c){e=stringify(c[d]);if(typeof e!='function'){if(b){b+=','}b+=stringify(d)+':'+e}}return'{'+b+'}'}}return'null';case'number':return isFinite(c)?String(c):'null';case'string':f=c.length;b='"';for(d=0;d<f;d+=1){a=c.charAt(d);if(a>=' '){if(a=='\\'||a=='"'){b+='\\'}b+=a}else{switch(a){case'\b':b+='\\b';break;case'\f':b+='\\f';break;case'\n':b+='\\n';break;case'\r':b+='\\r';break;case'\t':b+='\\t';break;default:a=a.charCodeAt();b+='\\u00'+Math.floor(a/16).toString(16)+(a%16).toString(16)}}}return b+'"';case'boolean':return String(c);case'function':return c.toString();default:return'null'}},parse:function(c){var a=c;if(a.substr(0,9)=="while(1);"){a=a.substr(9)}if(a.substr(0,2)=="/*"){a=a.substr(2,a.length-4)}return eval('('+a+')')}};wn.JSON = wn.JSON || JSON ;})(window);
+
+
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
+
+/*
+ * Metadata - jQuery plugin for parsing metadata from elements
+ *
+ * Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: $Id: jquery.metadata.js 4187 2007-12-16 17:15:27Z joern.zaefferer $
+ *
+ */
+
+/**
+ * Sets the type of metadata to use. Metadata is encoded in JSON, and each property
+ * in the JSON will become a property of the element itself.
+ *
+ * There are three supported types of metadata storage:
+ *
+ *   attr:  Inside an attribute. The name parameter indicates *which* attribute.
+ *          
+ *   class: Inside the class attribute, wrapped in curly braces: { }
+ *   
+ *   elem:  Inside a child element (e.g. a script tag). The
+ *          name parameter indicates *which* element.
+ *          
+ * The metadata for an element is loaded the first time the element is accessed via jQuery.
+ *
+ * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
+ * matched by expr, then redefine the metadata type and run another $(expr) for other elements.
+ * 
+ * @name $.metadata.setType
+ *
+ * @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p>
+ * @before $.metadata.setType("class")
+ * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
+ * @desc Reads metadata from the class attribute
+ * 
+ * @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p>
+ * @before $.metadata.setType("attr", "data")
+ * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
+ * @desc Reads metadata from a "data" attribute
+ * 
+ * @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p>
+ * @before $.metadata.setType("elem", "script")
+ * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
+ * @desc Reads metadata from a nested script element
+ * 
+ * @param String type The encoding type
+ * @param String name The name of the attribute to be used to get metadata (optional)
+ * @cat Plugins/Metadata
+ * @descr Sets the type of encoding to be used when loading metadata for the first time
+ * @type undefined
+ * @see metadata()
+ */
+
+(function($) {
+
+$.extend({
+       metadata : {
+               defaults : {
+                       type: 'class',
+                       name: 'metadata',
+                       cre: /({.*})/,
+                       single: 'metadata'
+               },
+               setType: function( type, name ){
+                       this.defaults.type = type;
+                       this.defaults.name = name;
+               },
+               get: function( elem, opts ){
+                       var settings = $.extend({},this.defaults,opts);
+                       // check for empty string in single property
+                       if ( !settings.single.length ) settings.single = 'metadata';
+                       
+                       var data = $.data(elem, settings.single);
+                       // returned cached data if it already exists
+                       if ( data ) return data;
+                       
+                       data = "{}";
+                       
+                       if ( settings.type == "class" ) {
+                               var m = settings.cre.exec( elem.className );
+                               if ( m )
+                                       data = m[1];
+                       } else if ( settings.type == "elem" ) {
+                               if( !elem.getElementsByTagName )
+                                       return undefined;
+                               var e = elem.getElementsByTagName(settings.name);
+                               if ( e.length )
+                                       data = $.trim(e[0].innerHTML);
+                       } else if ( elem.getAttribute != undefined ) {
+                               var attr = elem.getAttribute( settings.name );
+                               if ( attr )
+                                       data = attr;
+                       }
+                       
+                       if ( data.indexOf( '{' ) <0 )
+                       data = "{" + data + "}";
+                       
+                       data = eval("(" + data + ")");
+                       
+                       $.data( elem, settings.single, data );
+                       return data;
+               }
+       }
+});
+
+/**
+ * Returns the metadata object for the first member of the jQuery object.
+ *
+ * @name metadata
+ * @descr Returns element's metadata object
+ * @param Object opts An object contianing settings to override the defaults
+ * @type jQuery
+ * @cat Plugins/Metadata
+ */
+$.fn.metadata = function( opts ){
+       return $.metadata.get( this[0], opts );
+};
+
+})(jQuery);
+
+
+/**
+ * jQuery Validation Plugin 1.9.0
+
+ *
+ * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
+ * http://docs.jquery.com/Plugins/Validation
+ *
+ * Copyright (c) 2006 - 2011 J철rn Zaefferer
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ */
+
+/**
+ * 353 line 변경 - jquery.validate.js 버전을 업그레이드 할 경우에는 확인 요망
+ */
+
+(function($) {
+
+$.extend($.fn, {
+       // http://docs.jquery.com/Plugins/Validation/validate
+       validate: function( options ) {
+
+               // if nothing is selected, return nothing; can't chain anyway
+               if (!this.length) {
+                       options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
+                       return;
+               }
+
+               // check if a validator for this form was already created
+               var validator = $.data(this[0], 'validator');
+               if ( validator ) {
+                       return validator;
+               }
+
+               // Add novalidate tag if HTML5.
+               this.attr('novalidate', 'novalidate');
+
+               validator = new $.validator( options, this[0] );
+               $.data(this[0], 'validator', validator);
+
+               if ( validator.settings.onsubmit ) {
+
+                       var inputsAndButtons = this.find("input, button");
+
+                       // allow suppresing validation by adding a cancel class to the submit button
+                       inputsAndButtons.filter(".cancel").click(function () {
+                               validator.cancelSubmit = true;
+                       });
+
+                       // when a submitHandler is used, capture the submitting button
+                       if (validator.settings.submitHandler) {
+                               inputsAndButtons.filter(":submit").click(function () {
+                                       validator.submitButton = this;
+                               });
+                       }
+
+                       // validate the form on submit
+                       this.submit( function( event ) {
+                               if ( validator.settings.debug )
+                                       // prevent form submit to be able to see console output
+                                       event.preventDefault();
+
+                               function handle() {
+                                       if ( validator.settings.submitHandler ) {
+                                               if (validator.submitButton) {
+                                                       // insert a hidden input as a replacement for the missing submit button
+                                                       var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
+                                               }
+                                               validator.settings.submitHandler.call( validator, validator.currentForm );
+                                               if (validator.submitButton) {
+                                                       // and clean up afterwards; thanks to no-block-scope, hidden can be referenced
+                                                       hidden.remove();
+                                               }
+                                               return false;
+                                       }
+                                       return true;
+                               }
+
+                               // prevent submit for invalid forms or custom submit handlers
+                               if ( validator.cancelSubmit ) {
+                                       validator.cancelSubmit = false;
+                                       return handle();
+                               }
+                               if ( validator.form() ) {
+                                       if ( validator.pendingRequest ) {
+                                               validator.formSubmitted = true;
+                                               return false;
+                                       }
+                                       return handle();
+                               } else {
+                                       validator.focusInvalid();
+                                       return false;
+                               }
+                       });
+               }
+
+               return validator;
+       },
+       // http://docs.jquery.com/Plugins/Validation/valid
+       valid: function() {
+        if ( $(this[0]).is('form')) {
+            return this.validate().form();
+        } else {
+            var valid = true;
+            var validator = $(this[0].form).validate();
+            this.each(function() {
+                               valid &= validator.element(this);
+            });
+            return valid;
+        }
+    },
+       // attributes: space seperated list of attributes to retrieve and remove
+       removeAttrs: function(attributes) {
+               var result = {},
+                       $element = this;
+               $.each(attributes.split(/\s/), function(index, value) {
+                       result[value] = $element.attr(value);
+                       $element.removeAttr(value);
+               });
+               return result;
+       },
+       // http://docs.jquery.com/Plugins/Validation/rules
+       rules: function(command, argument) {
+               var element = this[0];
+
+               if (command) {
+                       var settings = $.data(element.form, 'validator').settings;
+                       var staticRules = settings.rules;
+                       var existingRules = $.validator.staticRules(element);
+                       switch(command) {
+                       case "add":
+                               $.extend(existingRules, $.validator.normalizeRule(argument));
+                               staticRules[element.name] = existingRules;
+                               if (argument.messages)
+                                       settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
+                               break;
+                       case "remove":
+                               if (!argument) {
+                                       delete staticRules[element.name];
+                                       return existingRules;
+                               }
+                               var filtered = {};
+                               $.each(argument.split(/\s/), function(index, method) {
+                                       filtered[method] = existingRules[method];
+                                       delete existingRules[method];
+                               });
+                               return filtered;
+                       }
+               }
+
+               var data = $.validator.normalizeRules(
+               $.extend(
+                       {},
+                       $.validator.metadataRules(element),
+                       $.validator.classRules(element),
+                       $.validator.attributeRules(element),
+                       $.validator.staticRules(element)
+               ), element);
+
+               // make sure required is at front
+               if (data.required) {
+                       var param = data.required;
+                       delete data.required;
+                       data = $.extend({required: param}, data);
+               }
+
+               return data;
+       }
+});
+
+// Custom selectors
+$.extend($.expr[":"], {
+       // http://docs.jquery.com/Plugins/Validation/blank
+       blank: function(a) {return !$.trim("" + a.value);},
+       // http://docs.jquery.com/Plugins/Validation/filled
+       filled: function(a) {return !!$.trim("" + a.value);},
+       // http://docs.jquery.com/Plugins/Validation/unchecked
+       unchecked: function(a) {return !a.checked;}
+});
+
+// constructor for validator
+$.validator = function( options, form ) {
+       this.settings = $.extend( true, {}, $.validator.defaults, options );
+       this.currentForm = form;
+       this.init();
+};
+
+$.validator.format = function(source, params) {
+       if ( arguments.length == 1 )
+               return function() {
+                       var args = $.makeArray(arguments);
+                       args.unshift(source);
+                       return $.validator.format.apply( this, args );
+               };
+       if ( arguments.length > 2 && params.constructor != Array  ) {
+               params = $.makeArray(arguments).slice(1);
+       }
+       if ( params.constructor != Array ) {
+               params = [ params ];
+       }
+       $.each(params, function(i, n) {
+               source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
+       });
+       return source;
+};
+
+$.extend($.validator, {
+
+       defaults: {
+               messages: {},
+               groups: {},
+               rules: {},
+               errorClass: "error",
+               validClass: "valid",
+               errorElement: "label",
+               focusInvalid: true,
+               errorContainer: $( [] ),
+               errorLabelContainer: $( [] ),
+               onsubmit: true,
+               ignore: ":hidden",
+               ignoreTitle: false,
+               onfocusin: function(element, event) {
+                       this.lastActive = element;
+
+                       // hide error label and remove error class on focus if enabled
+                       if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
+                               this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
+                               this.addWrapper(this.errorsFor(element)).hide();
+                       }
+               },
+               onfocusout: function(element, event) {
+                       if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
+                               this.element(element);
+                       }
+               },
+               onkeyup: function(element, event) {
+                       if ( element.name in this.submitted || element == this.lastElement ) {
+                               this.element(element);
+                       }
+               },
+               onclick: function(element, event) {
+                       // click on selects, radiobuttons and checkboxes
+                       if ( element.name in this.submitted )
+                               this.element(element);
+                       // or option elements, check parent select in that case
+                       else if (element.parentNode.name in this.submitted)
+                               this.element(element.parentNode);
+               },
+               highlight: function(element, errorClass, validClass) {
+                       if (element.type === 'radio') {
+                               this.findByName(element.name).addClass(errorClass).removeClass(validClass);
+                       } else {
+                               $(element).addClass(errorClass).removeClass(validClass);
+                       }
+               },
+               unhighlight: function(element, errorClass, validClass) {
+                       if (element.type === 'radio') {
+                               this.findByName(element.name).removeClass(errorClass).addClass(validClass);
+                       } else {
+                               $(element).removeClass(errorClass).addClass(validClass);
+                       }
+               }
+       },
+
+       // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
+       setDefaults: function(settings) {
+               $.extend( $.validator.defaults, settings );
+       },
+
+       messages: {
+               required: "This field is required.",
+               remote: "Please fix this field.",
+               email: "Please enter a valid email address.",
+               url: "Please enter a valid URL.",
+               date: "Please enter a valid date.",
+               dateISO: "Please enter a valid date (ISO).",
+               number: "Please enter a valid number.",
+               digits: "Please enter only digits.",
+               creditcard: "Please enter a valid credit card number.",
+               equalTo: "Please enter the same value again.",
+               accept: "Please enter a value with a valid extension.",
+               maxlength: $.validator.format("Please enter no more than {0} characters."),
+               minlength: $.validator.format("Please enter at least {0} characters."),
+               rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
+               range: $.validator.format("Please enter a value between {0} and {1}."),
+               max: $.validator.format("Please enter a value less than or equal to {0}."),
+               min: $.validator.format("Please enter a value greater than or equal to {0}.")
+       },
+
+       autoCreateRanges: false,
+
+       prototype: {
+
+               init: function() {
+                       this.labelContainer = $(this.settings.errorLabelContainer);
+                       this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
+                       this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
+                       this.submitted = {};
+                       this.valueCache = {};
+                       this.pendingRequest = 0;
+                       this.pending = {};
+                       this.invalid = {};
+                       this.reset();
+
+                       var groups = (this.groups = {});
+                       $.each(this.settings.groups, function(key, value) {
+                               $.each(value.split(/\s/), function(index, name) {
+                                       groups[name] = key;
+                               });
+                       });
+                       var rules = this.settings.rules;
+                       $.each(rules, function(key, value) {
+                               rules[key] = $.validator.normalizeRule(value);
+                       });
+
+                       function delegate(event) {
+                               var validator = $.data(this[0].form, "validator"),
+                                       eventType = "on" + event.type.replace(/^validate/, "");
+                               validator.settings[eventType] && validator.settings[eventType].call(validator, this[0], event);
+                       }
+                       $(this.currentForm)
+                              .validateDelegate("[type='text'], [type='password'], [type='file'], select, textarea, " +
+                                               "[type='number'], [type='search'] ,[type='tel'], [type='url'], " +
+                                               "[type='email'], [type='datetime'], [type='date'], [type='month'], " +
+                                               "[type='week'], [type='time'], [type='datetime-local'], " +
+                                               "[type='range'], [type='color'] ",
+                                               "focusin focusout keyup", delegate)
+                               .validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", delegate);
+
+                       if (this.settings.invalidHandler)
+                               $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Validator/form
+               form: function() {
+                       this.checkForm();
+                       $.extend(this.submitted, this.errorMap);
+                       this.invalid = $.extend({}, this.errorMap);
+                       if (!this.valid())
+                               $(this.currentForm).triggerHandler("invalid-form", [this]);
+                       this.showErrors();
+                       return this.valid();
+               },
+
+               // 원본소스
+               /*
+               checkForm: function() {
+                       this.prepareForm();
+                       for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
+                               this.check( elements[i] );
+                       }
+                       return this.valid();
+               },
+               */
+
+               // 수정소스 : 동일한 name 속성의 개체 array에 대해서도 validation을 하도록 변경
+               checkForm: function() {
+                       this.prepareForm();
+                       for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
+                               if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) {
+                                       for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) {
+                                               this.check( this.findByName( elements[i].name )[cnt] );
+                                       }
+                               } else {
+                                       this.check( elements[i] );
+                               }
+                       }
+                       return this.valid();
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Validator/element
+               element: function( element ) {
+                       element = this.validationTargetFor( this.clean( element ) );
+                       this.lastElement = element;
+                       this.prepareElement( element );
+                       this.currentElements = $(element);
+                       var result = this.check( element );
+                       if ( result ) {
+                               delete this.invalid[element.name];
+                       } else {
+                               this.invalid[element.name] = true;
+                       }
+                       if ( !this.numberOfInvalids() ) {
+                               // Hide error containers on last error
+                               this.toHide = this.toHide.add( this.containers );
+                       }
+                       this.showErrors();
+                       return result;
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Validator/showErrors
+               showErrors: function(errors) {
+                       if(errors) {
+                               // add items to error list and map
+                               $.extend( this.errorMap, errors );
+                               this.errorList = [];
+                               for ( var name in errors ) {
+                                       this.errorList.push({
+                                               message: errors[name],
+                                               element: this.findByName(name)[0]
+                                       });
+                               }
+                               // remove items from success list
+                               this.successList = $.grep( this.successList, function(element) {
+                                       return !(element.name in errors);
+                               });
+                       }
+                       this.settings.showErrors
+                               ? this.settings.showErrors.call( this, this.errorMap, this.errorList )
+                               : this.defaultShowErrors();
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Validator/resetForm
+               resetForm: function() {
+                       if ( $.fn.resetForm )
+                               $( this.currentForm ).resetForm();
+                       this.submitted = {};
+                       this.lastElement = null;
+                       this.prepareForm();
+                       this.hideErrors();
+                       this.elements().removeClass( this.settings.errorClass );
+               },
+
+               numberOfInvalids: function() {
+                       return this.objectLength(this.invalid);
+               },
+
+               objectLength: function( obj ) {
+                       var count = 0;
+                       for ( var i in obj )
+                               count++;
+                       return count;
+               },
+
+               hideErrors: function() {
+                       this.addWrapper( this.toHide ).hide();
+               },
+
+               valid: function() {
+                       return this.size() == 0;
+               },
+
+               size: function() {
+                       return this.errorList.length;
+               },
+
+               focusInvalid: function() {
+                       if( this.settings.focusInvalid ) {
+                               try {
+                                       $(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])
+                                       .filter(":visible")
+                                       .focus()
+                                       // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
+                                       .trigger("focusin");
+                               } catch(e) {
+                                       // ignore IE throwing errors when focusing hidden elements
+                               }
+                       }
+               },
+
+               findLastActive: function() {
+                       var lastActive = this.lastActive;
+                       return lastActive && $.grep(this.errorList, function(n) {
+                               return n.element.name == lastActive.name;
+                       }).length == 1 && lastActive;
+               },
+
+               elements: function() {
+                       var validator = this,
+                               rulesCache = {};
+
+                       // select all valid inputs inside the form (no submit or reset buttons)
+                       return $(this.currentForm)
+                       .find("input, select, textarea")
+                       .not(":submit, :reset, :image, [disabled]")
+                       .not( this.settings.ignore )
+                       .filter(function() {
+                               !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
+
+                               // select only the first element for each name, and only those with rules specified
+                               if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
+                                       return false;
+
+                               rulesCache[this.name] = true;
+                               return true;
+                       });
+               },
+
+               clean: function( selector ) {
+                       return $( selector )[0];
+               },
+
+               errors: function() {
+                       return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
+               },
+
+               reset: function() {
+                       this.successList = [];
+                       this.errorList = [];
+                       this.errorMap = {};
+                       this.toShow = $([]);
+                       this.toHide = $([]);
+                       this.currentElements = $([]);
+               },
+
+               prepareForm: function() {
+                       this.reset();
+                       this.toHide = this.errors().add( this.containers );
+               },
+
+               prepareElement: function( element ) {
+                       this.reset();
+                       this.toHide = this.errorsFor(element);
+               },
+
+               check: function( element ) {
+                       element = this.validationTargetFor( this.clean( element ) );
+
+                       var rules = $(element).rules();
+                       var dependencyMismatch = false;
+                       for (var method in rules ) {
+                               var rule = { method: method, parameters: rules[method] };
+                               try {
+                                       var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
+
+                                       // if a method indicates that the field is optional and therefore valid,
+                                       // don't mark it as valid when there are no other rules
+                                       if ( result == "dependency-mismatch" ) {
+                                               dependencyMismatch = true;
+                                               continue;
+                                       }
+                                       dependencyMismatch = false;
+
+                                       if ( result == "pending" ) {
+                                               this.toHide = this.toHide.not( this.errorsFor(element) );
+                                               return;
+                                       }
+
+                                       if( !result ) {
+                                               this.formatAndAdd( element, rule );
+                                               return false;
+                                       }
+                               } catch(e) {
+                                       this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
+                                                + ", check the '" + rule.method + "' method", e);
+                                       throw e;
+                               }
+                       }
+                       if (dependencyMismatch)
+                               return;
+                       if ( this.objectLength(rules) )
+                               this.successList.push(element);
+                       return true;
+               },
+
+               // return the custom message for the given element and validation method
+               // specified in the element's "messages" metadata
+               customMetaMessage: function(element, method) {
+                       if (!$.metadata)
+                               return;
+
+                       var meta = this.settings.meta
+                               ? $(element).metadata()[this.settings.meta]
+                               : $(element).metadata();
+
+                       return meta && meta.messages && meta.messages[method];
+               },
+
+               // return the custom message for the given element name and validation method
+               customMessage: function( name, method ) {
+                       var m = this.settings.messages[name];
+                       return m && (m.constructor == String
+                               ? m
+                               : m[method]);
+               },
+
+               // return the first defined argument, allowing empty strings
+               findDefined: function() {
+                       for(var i = 0; i < arguments.length; i++) {
+                               if (arguments[i] !== undefined)
+                                       return arguments[i];
+                       }
+                       return undefined;
+               },
+
+               defaultMessage: function( element, method) {
+                       return this.findDefined(
+                               this.customMessage( element.name, method ),
+                               this.customMetaMessage( element, method ),
+                               // title is never undefined, so handle empty string as undefined
+                               !this.settings.ignoreTitle && element.title || undefined,
+                               $.validator.messages[method],
+                               "<strong>Warning: No message defined for " + element.name + "</strong>"
+                       );
+               },
+
+               formatAndAdd: function( element, rule ) {
+                       var message = this.defaultMessage( element, rule.method ),
+                               theregex = /\$?\{(\d+)\}/g;
+                       if ( typeof message == "function" ) {
+                               message = message.call(this, rule.parameters, element);
+                       } else if (theregex.test(message)) {
+                               message = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);
+                       }
+                       this.errorList.push({
+                               message: message,
+                               element: element
+                       });
+
+                       this.errorMap[element.name] = message;
+                       this.submitted[element.name] = message;
+               },
+
+               addWrapper: function(toToggle) {
+                       if ( this.settings.wrapper )
+                               toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
+                       return toToggle;
+               },
+
+               defaultShowErrors: function() {
+                       for ( var i = 0; this.errorList[i]; i++ ) {
+                               var error = this.errorList[i];
+                               this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
+                               this.showLabel( error.element, error.message );
+                       }
+                       if( this.errorList.length ) {
+                               this.toShow = this.toShow.add( this.containers );
+                       }
+                       if (this.settings.success) {
+                               for ( var i = 0; this.successList[i]; i++ ) {
+                                       this.showLabel( this.successList[i] );
+                               }
+                       }
+                       if (this.settings.unhighlight) {
+                               for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
+                                       this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
+                               }
+                       }
+                       this.toHide = this.toHide.not( this.toShow );
+                       this.hideErrors();
+                       this.addWrapper( this.toShow ).show();
+               },
+
+               validElements: function() {
+                       return this.currentElements.not(this.invalidElements());
+               },
+
+               invalidElements: function() {
+                       return $(this.errorList).map(function() {
+                               return this.element;
+                       });
+               },
+
+               showLabel: function(element, message) {
+                       var label = this.errorsFor( element );
+                       if ( label.length ) {
+                               // refresh error/success class
+                               label.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );
+
+                               // check if we have a generated label, replace the message then
+                               label.attr("generated") && label.html(message);
+                       } else {
+                               // create label
+                               label = $("<" + this.settings.errorElement + "/>")
+                                       .attr({"for":  this.idOrName(element), generated: true})
+                                       .addClass(this.settings.errorClass)
+                                       .html(message || "");
+                               if ( this.settings.wrapper ) {
+                                       // make sure the element is visible, even in IE
+                                       // actually showing the wrapped element is handled elsewhere
+                                       label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
+                               }
+                               if ( !this.labelContainer.append(label).length )
+                                       this.settings.errorPlacement
+                                               ? this.settings.errorPlacement(label, $(element) )
+                                               : label.insertAfter(element);
+                       }
+                       if ( !message && this.settings.success ) {
+                               label.text("");
+                               typeof this.settings.success == "string"
+                                       ? label.addClass( this.settings.success )
+                                       : this.settings.success( label );
+                       }
+                       this.toShow = this.toShow.add(label);
+               },
+
+               errorsFor: function(element) {
+                       var name = this.idOrName(element);
+               return this.errors().filter(function() {
+                               return $(this).attr('for') == name;
+                       });
+               },
+
+               idOrName: function(element) {
+                       return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
+               },
+
+               validationTargetFor: function(element) {
+                       // if radio/checkbox, validate first element in group instead
+                       if (this.checkable(element)) {
+                               element = this.findByName( element.name ).not(this.settings.ignore)[0];
+                       }
+                       return element;
+               },
+
+               checkable: function( element ) {
+                       return /radio|checkbox/i.test(element.type);
+               },
+
+               findByName: function( name ) {
+                       // select by name and filter by form for performance over form.find("[name=...]")
+                       var form = this.currentForm;
+                       return $(document.getElementsByName(name)).map(function(index, element) {
+                               return element.form == form && element.name == name && element  || null;
+                       });
+               },
+
+               getLength: function(value, element) {
+                       switch( element.nodeName.toLowerCase() ) {
+                       case 'select':
+                               return $("option:selected", element).length;
+                       case 'input':
+                               if( this.checkable( element) )
+                                       return this.findByName(element.name).filter(':checked').length;
+                       }
+                       return value.length;
+               },
+
+               depend: function(param, element) {
+                       return this.dependTypes[typeof param]
+                               ? this.dependTypes[typeof param](param, element)
+                               : true;
+               },
+
+               dependTypes: {
+                       "boolean": function(param, element) {
+                               return param;
+                       },
+                       "string": function(param, element) {
+                               return !!$(param, element.form).length;
+                       },
+                       "function": function(param, element) {
+                               return param(element);
+                       }
+               },
+
+               optional: function(element) {
+                       return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
+               },
+
+               startRequest: function(element) {
+                       if (!this.pending[element.name]) {
+                               this.pendingRequest++;
+                               this.pending[element.name] = true;
+                       }
+               },
+
+               stopRequest: function(element, valid) {
+                       this.pendingRequest--;
+                       // sometimes synchronization fails, make sure pendingRequest is never < 0
+                       if (this.pendingRequest < 0)
+                               this.pendingRequest = 0;
+                       delete this.pending[element.name];
+                       if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
+                               $(this.currentForm).submit();
+                               this.formSubmitted = false;
+                       } else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
+                               $(this.currentForm).triggerHandler("invalid-form", [this]);
+                               this.formSubmitted = false;
+                       }
+               },
+
+               previousValue: function(element) {
+                       return $.data(element, "previousValue") || $.data(element, "previousValue", {
+                               old: null,
+                               valid: true,
+                               message: this.defaultMessage( element, "remote" )
+                       });
+               }
+
+       },
+
+       classRuleSettings: {
+               required: {required: true},
+               email: {email: true},
+               url: {url: true},
+               date: {date: true},
+               dateISO: {dateISO: true},
+               dateDE: {dateDE: true},
+               number: {number: true},
+               numberDE: {numberDE: true},
+               digits: {digits: true},
+               creditcard: {creditcard: true}
+       },
+
+       addClassRules: function(className, rules) {
+               className.constructor == String ?
+                       this.classRuleSettings[className] = rules :
+                       $.extend(this.classRuleSettings, className);
+       },
+
+       classRules: function(element) {
+               var rules = {};
+               var classes = $(element).attr('class');
+               classes && $.each(classes.split(' '), function() {
+                       if (this in $.validator.classRuleSettings) {
+                               $.extend(rules, $.validator.classRuleSettings[this]);
+                       }
+               });
+               return rules;
+       },
+
+       attributeRules: function(element) {
+               var rules = {};
+               var $element = $(element);
+
+               for (var method in $.validator.methods) {
+                       var value;
+                       // If .prop exists (jQuery >= 1.6), use it to get true/false for required
+                       if (method === 'required' && typeof $.fn.prop === 'function') {
+                               value = $element.prop(method);
+                       } else {
+                               value = $element.attr(method);
+                       }
+                       if (value) {
+                               rules[method] = value;
+                       } else if ($element[0].getAttribute("type") === method) {
+                               rules[method] = true;
+                       }
+               }
+
+               // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
+               if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
+                       delete rules.maxlength;
+               }
+
+               return rules;
+       },
+
+       metadataRules: function(element) {
+               if (!$.metadata) return {};
+
+               var meta = $.data(element.form, 'validator').settings.meta;
+               return meta ?
+                       $(element).metadata()[meta] :
+                       $(element).metadata();
+       },
+
+       staticRules: function(element) {
+               var rules = {};
+               var validator = $.data(element.form, 'validator');
+               if (validator.settings.rules) {
+                       rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
+               }
+               return rules;
+       },
+
+       normalizeRules: function(rules, element) {
+               // handle dependency check
+               $.each(rules, function(prop, val) {
+                       // ignore rule when param is explicitly false, eg. required:false
+                       if (val === false) {
+                               delete rules[prop];
+                               return;
+                       }
+                       if (val.param || val.depends) {
+                               var keepRule = true;
+                               switch (typeof val.depends) {
+                                       case "string":
+                                               keepRule = !!$(val.depends, element.form).length;
+                                               break;
+                                       case "function":
+                                               keepRule = val.depends.call(element, element);
+                                               break;
+                               }
+                               if (keepRule) {
+                                       rules[prop] = val.param !== undefined ? val.param : true;
+                               } else {
+                                       delete rules[prop];
+                               }
+                       }
+               });
+
+               // evaluate parameters
+               $.each(rules, function(rule, parameter) {
+                       rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
+               });
+
+               // clean number parameters
+               $.each(['minlength', 'maxlength', 'min', 'max'], function() {
+                       if (rules[this]) {
+                               rules[this] = Number(rules[this]);
+                       }
+               });
+               $.each(['rangelength', 'range'], function() {
+                       if (rules[this]) {
+                               rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
+                       }
+               });
+
+               if ($.validator.autoCreateRanges) {
+                       // auto-create ranges
+                       if (rules.min && rules.max) {
+                               rules.range = [rules.min, rules.max];
+                               delete rules.min;
+                               delete rules.max;
+                       }
+                       if (rules.minlength && rules.maxlength) {
+                               rules.rangelength = [rules.minlength, rules.maxlength];
+                               delete rules.minlength;
+                               delete rules.maxlength;
+                       }
+               }
+
+               // To support custom messages in metadata ignore rule methods titled "messages"
+               if (rules.messages) {
+                       delete rules.messages;
+               }
+
+               return rules;
+       },
+
+       // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
+       normalizeRule: function(data) {
+               if( typeof data == "string" ) {
+                       var transformed = {};
+                       $.each(data.split(/\s/), function() {
+                               transformed[this] = true;
+                       });
+                       data = transformed;
+               }
+               return data;
+       },
+
+       // http://docs.jquery.com/Plugins/Validation/Validator/addMethod
+       addMethod: function(name, method, message) {
+               $.validator.methods[name] = method;
+               $.validator.messages[name] = message != undefined ? message : $.validator.messages[name];
+               if (method.length < 3) {
+                       $.validator.addClassRules(name, $.validator.normalizeRule(name));
+               }
+       },
+
+       methods: {
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/required
+               required: function(value, element, param) {
+                       // check if dependency is met
+                       if ( !this.depend(param, element) )
+                               return "dependency-mismatch";
+                       switch( element.nodeName.toLowerCase() ) {
+                       case 'select':
+                               // could be an array for select-multiple or a string, both are fine this way
+                               var val = $(element).val();
+                               return val && val.length > 0;
+                       case 'input':
+                               if ( this.checkable(element) )
+                                       return this.getLength(value, element) > 0;
+                       default:
+                               return $.trim(value).length > 0;
+                       }
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/remote
+               remote: function(value, element, param) {
+                       if ( this.optional(element) )
+                               return "dependency-mismatch";
+
+                       var previous = this.previousValue(element);
+                       if (!this.settings.messages[element.name] )
+                               this.settings.messages[element.name] = {};
+                       previous.originalMessage = this.settings.messages[element.name].remote;
+                       this.settings.messages[element.name].remote = previous.message;
+
+                       param = typeof param == "string" && {url:param} || param;
+
+                       if ( this.pending[element.name] ) {
+                               return "pending";
+                       }
+                       if ( previous.old === value ) {
+                               return previous.valid;
+                       }
+
+                       previous.old = value;
+                       var validator = this;
+                       this.startRequest(element);
+                       var data = {};
+                       data[element.name] = value;
+                       $.ajax($.extend(true, {
+                               url: param,
+                               mode: "abort",
+                               port: "validate" + element.name,
+                               dataType: "json",
+                               data: data,
+                               success: function(response) {
+                                       validator.settings.messages[element.name].remote = previous.originalMessage;
+                                       var valid = response === true;
+                                       if ( valid ) {
+                                               var submitted = validator.formSubmitted;
+                                               validator.prepareElement(element);
+                                               validator.formSubmitted = submitted;
+                                               validator.successList.push(element);
+                                               validator.showErrors();
+                                       } else {
+                                               var errors = {};
+                                               var message = response || validator.defaultMessage( element, "remote" );
+                                               errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
+                                               validator.showErrors(errors);
+                                       }
+                                       previous.valid = valid;
+                                       validator.stopRequest(element, valid);
+                               }
+                       }, param));
+                       return "pending";
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/minlength
+               minlength: function(value, element, param) {
+                       return this.optional(element) || this.getLength($.trim(value), element) >= param;
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/maxlength
+               maxlength: function(value, element, param) {
+                       return this.optional(element) || this.getLength($.trim(value), element) <= param;
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/rangelength
+               rangelength: function(value, element, param) {
+                       var length = this.getLength($.trim(value), element);
+                       return this.optional(element) || ( length >= param[0] && length <= param[1] );
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/min
+               min: function( value, element, param ) {
+                       return this.optional(element) || value >= param;
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/max
+               max: function( value, element, param ) {
+                       return this.optional(element) || value <= param;
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/range
+               range: function( value, element, param ) {
+                       return this.optional(element) || ( value >= param[0] && value <= param[1] );
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/email
+               email: function(value, element) {
+                       // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
+                       return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value);
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/url
+               url: function(value, element) {
+                       // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
+                       return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/date
+               date: function(value, element) {
+                       return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/dateISO
+               dateISO: function(value, element) {
+                       return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/number
+               number: function(value, element) {
+                       return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/digits
+               digits: function(value, element) {
+                       return this.optional(element) || /^\d+$/.test(value);
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/creditcard
+               // based on http://en.wikipedia.org/wiki/Luhn
+               creditcard: function(value, element) {
+                       if ( this.optional(element) )
+                               return "dependency-mismatch";
+                       // accept only spaces, digits and dashes
+                       if (/[^0-9 -]+/.test(value))
+                               return false;
+                       var nCheck = 0,
+                               nDigit = 0,
+                               bEven = false;
+
+                       value = value.replace(/\D/g, "");
+
+                       for (var n = value.length - 1; n >= 0; n--) {
+                               var cDigit = value.charAt(n);
+                               var nDigit = parseInt(cDigit, 10);
+                               if (bEven) {
+                                       if ((nDigit *= 2) > 9)
+                                               nDigit -= 9;
+                               }
+                               nCheck += nDigit;
+                               bEven = !bEven;
+                       }
+
+                       return (nCheck % 10) == 0;
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/accept
+               accept: function(value, element, param) {
+                       param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
+                       return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
+               },
+
+               // http://docs.jquery.com/Plugins/Validation/Methods/equalTo
+               equalTo: function(value, element, param) {
+                       // bind to the blur event of the target in order to revalidate whenever the target field is updated
+                       // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
+                       var target = $(param).unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
+                               $(element).valid();
+                       });
+                       return value == target.val();
+               }
+
+       }
+
+});
+
+// deprecated, use $.validator.format instead
+$.format = $.validator.format;
+
+})(jQuery);
+
+// ajax mode: abort
+// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
+// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
+;(function($) {
+       var pendingRequests = {};
+       // Use a prefilter if available (1.5+)
+       if ( $.ajaxPrefilter ) {
+               $.ajaxPrefilter(function(settings, _, xhr) {
+                       var port = settings.port;
+                       if (settings.mode == "abort") {
+                               if ( pendingRequests[port] ) {
+                                       pendingRequests[port].abort();
+                               }
+                               pendingRequests[port] = xhr;
+                       }
+               });
+       } else {
+               // Proxy ajax
+               var ajax = $.ajax;
+               $.ajax = function(settings) {
+                       var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
+                               port = ( "port" in settings ? settings : $.ajaxSettings ).port;
+                       if (mode == "abort") {
+                               if ( pendingRequests[port] ) {
+                                       pendingRequests[port].abort();
+                               }
+                               return (pendingRequests[port] = ajax.apply(this, arguments));
+                       }
+                       return ajax.apply(this, arguments);
+               };
+       }
+})(jQuery);
+
+// provides cross-browser focusin and focusout events
+// IE has native support, in other browsers, use event caputuring (neither bubbles)
+
+// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
+// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
+;(function($) {
+       // only implement if not provided by jQuery core (since 1.4)
+       // TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs
+       if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {
+               $.each({
+                       focus: 'focusin',
+                       blur: 'focusout'
+               }, function( original, fix ){
+                       $.event.special[fix] = {
+                               setup:function() {
+                                       this.addEventListener( original, handler, true );
+                               },
+                               teardown:function() {
+                                       this.removeEventListener( original, handler, true );
+                               },
+                               handler: function(e) {
+                                       arguments[0] = $.event.fix(e);
+                                       arguments[0].type = fix;
+                                       return $.event.handle.apply(this, arguments);
+                               }
+                       };
+                       function handler(e) {
+                               e = $.event.fix(e);
+                               e.type = fix;
+                               return $.event.handle.call(this, e);
+                       }
+               });
+       };
+       $.extend($.fn, {
+               validateDelegate: function(delegate, type, handler) {
+                       return this.bind(type, function(event) {
+                               var target = $(event.target);
+                               if (target.is(delegate)) {
+                                       return handler.apply(target, arguments);
+                               }
+                       });
+               }
+       });
+})(jQuery);
+
+/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)
+ * Licensed under the MIT License (LICENSE.txt).
+ *
+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
+ * Thanks to: Seamus Leahy for adding deltaX and deltaY
+ *
+ * Version: 3.0.6
+ * 
+ * Requires: 1.2.2+
+ */
+
+(function($) {
+
+var types = ['DOMMouseScroll', 'mousewheel'];
+
+if ($.event.fixHooks) {
+    for ( var i=types.length; i; ) {
+        $.event.fixHooks[ types[--i] ] = $.event.mouseHooks;
+    }
+}
+
+$.event.special.mousewheel = {
+    setup: function() {
+        if ( this.addEventListener ) {
+            for ( var i=types.length; i; ) {
+                this.addEventListener( types[--i], handler, false );
+            }
+        } else {
+            this.onmousewheel = handler;
+        }
+    },
+    
+    teardown: function() {
+        if ( this.removeEventListener ) {
+            for ( var i=types.length; i; ) {
+                this.removeEventListener( types[--i], handler, false );
+            }
+        } else {
+            this.onmousewheel = null;
+        }
+    }
+};
+
+$.fn.extend({
+    mousewheel: function(fn) {
+        return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
+    },
+    
+    unmousewheel: function(fn) {
+        return this.unbind("mousewheel", fn);
+    }
+});
+
+
+function handler(event) {
+    var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0;
+    event = $.event.fix(orgEvent);
+    event.type = "mousewheel";
+    
+    // Old school scrollwheel delta
+    if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; }
+    if ( orgEvent.detail     ) { delta = -orgEvent.detail/3; }
+    
+    // New school multidimensional scroll (touchpads) deltas
+    deltaY = delta;
+    
+    // Gecko
+    if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
+        deltaY = 0;
+        deltaX = -1*delta;
+    }
+    
+    // Webkit
+    if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; }
+    if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; }
+    
+    // Add event and delta to the front of the arguments
+    args.unshift(event, delta, deltaX, deltaY);
+    
+    return ($.event.dispatch || $.event.handle).apply(this, args);
+}
+
+})(jQuery);
+
+/*
+ * jScrollPane - v2.0.0beta12 - 2012-07-24
+ * http://jscrollpane.kelvinluck.com/
+ *
+ * Copyright (c) 2010 Kelvin Luck
+ * Dual licensed under the MIT and GPL licenses.
+ */
+(function(b,a,c){b.fn.jScrollPane=function(e){function d(D,O){var ay,Q=this,Y,aj,v,al,T,Z,y,q,az,aE,au,i,I,h,j,aa,U,ap,X,t,A,aq,af,am,G,l,at,ax,x,av,aH,f,L,ai=true,P=true,aG=false,k=false,ao=D.clone(false,false).empty(),ac=b.fn.mwheelIntent?"mwheelIntent.jsp":"mousewheel.jsp";aH=D.css("paddingTop")+" "+D.css("paddingRight")+" "+D.css("paddingBottom")+" "+D.css("paddingLeft");f=(parseInt(D.css("paddingLeft"),10)||0)+(parseInt(D.css("paddingRight"),10)||0);function ar(aQ){var aL,aN,aM,aJ,aI,aP,aO=false,aK=false;ay=aQ;if(Y===c){aI=D.scrollTop();aP=D.scrollLeft();D.css({overflow:"hidden",padding:0});aj=D.innerWidth()+f;v=D.innerHeight();D.width(aj);Y=b('<div class="jspPane" />').css("padding",aH).append(D.children());al=b('<div class="jspContainer" />').css({width:aj+"px",height:v+"px"}).append(Y).appendTo(D)}else{D.css("width","");aO=ay.stickToBottom&&K();aK=ay.stickToRight&&B();aJ=D.innerWidth()+f!=aj||D.outerHeight()!=v;if(aJ){aj=D.innerWidth()+f;v=D.innerHeight();al.css({width:aj+"px",height:v+"px"})}if(!aJ&&L==T&&Y.outerHeight()==Z){D.width(aj);return}L=T;Y.css("width","");D.width(aj);al.find(">.jspVerticalBar,>.jspHorizontalBar").remove().end()}Y.css("overflow","auto");if(aQ.contentWidth){T=aQ.contentWidth}else{T=Y[0].scrollWidth}Z=Y[0].scrollHeight;Y.css("overflow","");y=T/aj;q=Z/v;az=q>1;aE=y>1;if(!(aE||az)){D.removeClass("jspScrollable");Y.css({top:0,width:al.width()-f});n();E();R();w()}else{D.addClass("jspScrollable");aL=ay.maintainPosition&&(I||aa);if(aL){aN=aC();aM=aA()}aF();z();F();if(aL){N(aK?(T-aj):aN,false);M(aO?(Z-v):aM,false)}J();ag();an();if(ay.enableKeyboardNavigation){S()}if(ay.clickOnTrack){p()}C();if(ay.hijackInternalLinks){m()}}if(ay.autoReinitialise&&!av){av=setInterval(function(){ar(ay)},ay.autoReinitialiseDelay)}else{if(!ay.autoReinitialise&&av){clearInterval(av)}}aI&&D.scrollTop(0)&&M(aI,false);aP&&D.scrollLeft(0)&&N(aP,false);D.trigger("jsp-initialised",[aE||az])}function aF(){if(az){al.append(b('<div class="jspVerticalBar" />').append(b('<div class="jspCap jspCapTop" />'),b('<div class="jspTrack" />').append(b('<div class="jspDrag" />').append(b('<div class="jspDragTop" />'),b('<div class="jspDragBottom" />'))),b('<div class="jspCap jspCapBottom" />')));U=al.find(">.jspVerticalBar");ap=U.find(">.jspTrack");au=ap.find(">.jspDrag");if(ay.showArrows){aq=b('<a class="jspArrow jspArrowUp" />').bind("mousedown.jsp",aD(0,-1)).bind("click.jsp",aB);af=b('<a class="jspArrow jspArrowDown" />').bind("mousedown.jsp",aD(0,1)).bind("click.jsp",aB);if(ay.arrowScrollOnHover){aq.bind("mouseover.jsp",aD(0,-1,aq));af.bind("mouseover.jsp",aD(0,1,af))}ak(ap,ay.verticalArrowPositions,aq,af)}t=v;al.find(">.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow").each(function(){t-=b(this).outerHeight()});au.hover(function(){au.addClass("jspHover")},function(){au.removeClass("jspHover")}).bind("mousedown.jsp",function(aI){b("html").bind("dragstart.jsp selectstart.jsp",aB);au.addClass("jspActive");var s=aI.pageY-au.position().top;b("html").bind("mousemove.jsp",function(aJ){V(aJ.pageY-s,false)}).bind("mouseup.jsp mouseleave.jsp",aw);return false});o()}}function o(){ap.height(t+"px");I=0;X=ay.verticalGutter+ap.outerWidth();Y.width(aj-X-f);try{if(U.position().left===0){Y.css("margin-left",X+"px")}}catch(s){}}function z(){if(aE){al.append(b('<div class="jspHorizontalBar" />').append(b('<div class="jspCap jspCapLeft" />'),b('<div class="jspTrack" />').append(b('<div class="jspDrag" />').append(b('<div class="jspDragLeft" />'),b('<div class="jspDragRight" />'))),b('<div class="jspCap jspCapRight" />')));am=al.find(">.jspHorizontalBar");G=am.find(">.jspTrack");h=G.find(">.jspDrag");if(ay.showArrows){ax=b('<a class="jspArrow jspArrowLeft" />').bind("mousedown.jsp",aD(-1,0)).bind("click.jsp",aB);x=b('<a class="jspArrow jspArrowRight" />').bind("mousedown.jsp",aD(1,0)).bind("click.jsp",aB);
+if(ay.arrowScrollOnHover){ax.bind("mouseover.jsp",aD(-1,0,ax));x.bind("mouseover.jsp",aD(1,0,x))}ak(G,ay.horizontalArrowPositions,ax,x)}h.hover(function(){h.addClass("jspHover")},function(){h.removeClass("jspHover")}).bind("mousedown.jsp",function(aI){b("html").bind("dragstart.jsp selectstart.jsp",aB);h.addClass("jspActive");var s=aI.pageX-h.position().left;b("html").bind("mousemove.jsp",function(aJ){W(aJ.pageX-s,false)}).bind("mouseup.jsp mouseleave.jsp",aw);return false});l=al.innerWidth();ah()}}function ah(){al.find(">.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow").each(function(){l-=b(this).outerWidth()});G.width(l+"px");aa=0}function F(){if(aE&&az){var aI=G.outerHeight(),s=ap.outerWidth();t-=aI;b(am).find(">.jspCap:visible,>.jspArrow").each(function(){l+=b(this).outerWidth()});l-=s;v-=s;aj-=aI;G.parent().append(b('<div class="jspCorner" />').css("width",aI+"px"));o();ah()}if(aE){Y.width((al.outerWidth()-f)+"px")}Z=Y.outerHeight();q=Z/v;if(aE){at=Math.ceil(1/y*l);if(at>ay.horizontalDragMaxWidth){at=ay.horizontalDragMaxWidth}else{if(at<ay.horizontalDragMinWidth){at=ay.horizontalDragMinWidth}}h.width(at+"px");j=l-at;ae(aa)}if(az){A=Math.ceil(1/q*t);if(A>ay.verticalDragMaxHeight){A=ay.verticalDragMaxHeight}else{if(A<ay.verticalDragMinHeight){A=ay.verticalDragMinHeight}}au.height(A+"px");i=t-A;ad(I)}}function ak(aJ,aL,aI,s){var aN="before",aK="after",aM;if(aL=="os"){aL=/Mac/.test(navigator.platform)?"after":"split"}if(aL==aN){aK=aL}else{if(aL==aK){aN=aL;aM=aI;aI=s;s=aM}}aJ[aN](aI)[aK](s)}function aD(aI,s,aJ){return function(){H(aI,s,this,aJ);this.blur();return false}}function H(aL,aK,aO,aN){aO=b(aO).addClass("jspActive");var aM,aJ,aI=true,s=function(){if(aL!==0){Q.scrollByX(aL*ay.arrowButtonSpeed)}if(aK!==0){Q.scrollByY(aK*ay.arrowButtonSpeed)}aJ=setTimeout(s,aI?ay.initialDelay:ay.arrowRepeatFreq);aI=false};s();aM=aN?"mouseout.jsp":"mouseup.jsp";aN=aN||b("html");aN.bind(aM,function(){aO.removeClass("jspActive");aJ&&clearTimeout(aJ);aJ=null;aN.unbind(aM)})}function p(){w();if(az){ap.bind("mousedown.jsp",function(aN){if(aN.originalTarget===c||aN.originalTarget==aN.currentTarget){var aL=b(this),aO=aL.offset(),aM=aN.pageY-aO.top-I,aJ,aI=true,s=function(){var aR=aL.offset(),aS=aN.pageY-aR.top-A/2,aP=v*ay.scrollPagePercent,aQ=i*aP/(Z-v);if(aM<0){if(I-aQ>aS){Q.scrollByY(-aP)}else{V(aS)}}else{if(aM>0){if(I+aQ<aS){Q.scrollByY(aP)}else{V(aS)}}else{aK();return}}aJ=setTimeout(s,aI?ay.initialDelay:ay.trackClickRepeatFreq);aI=false},aK=function(){aJ&&clearTimeout(aJ);aJ=null;b(document).unbind("mouseup.jsp",aK)};s();b(document).bind("mouseup.jsp",aK);return false}})}if(aE){G.bind("mousedown.jsp",function(aN){if(aN.originalTarget===c||aN.originalTarget==aN.currentTarget){var aL=b(this),aO=aL.offset(),aM=aN.pageX-aO.left-aa,aJ,aI=true,s=function(){var aR=aL.offset(),aS=aN.pageX-aR.left-at/2,aP=aj*ay.scrollPagePercent,aQ=j*aP/(T-aj);if(aM<0){if(aa-aQ>aS){Q.scrollByX(-aP)}else{W(aS)}}else{if(aM>0){if(aa+aQ<aS){Q.scrollByX(aP)}else{W(aS)}}else{aK();return}}aJ=setTimeout(s,aI?ay.initialDelay:ay.trackClickRepeatFreq);aI=false},aK=function(){aJ&&clearTimeout(aJ);aJ=null;b(document).unbind("mouseup.jsp",aK)};s();b(document).bind("mouseup.jsp",aK);return false}})}}function w(){if(G){G.unbind("mousedown.jsp")}if(ap){ap.unbind("mousedown.jsp")}}function aw(){b("html").unbind("dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp");if(au){au.removeClass("jspActive")}if(h){h.removeClass("jspActive")}}function V(s,aI){if(!az){return}if(s<0){s=0}else{if(s>i){s=i}}if(aI===c){aI=ay.animateScroll}if(aI){Q.animate(au,"top",s,ad)}else{au.css("top",s);ad(s)}}function ad(aI){if(aI===c){aI=au.position().top}al.scrollTop(0);I=aI;var aL=I===0,aJ=I==i,aK=aI/i,s=-aK*(Z-v);if(ai!=aL||aG!=aJ){ai=aL;aG=aJ;D.trigger("jsp-arrow-change",[ai,aG,P,k])}u(aL,aJ);Y.css("top",s);D.trigger("jsp-scroll-y",[-s,aL,aJ]).trigger("scroll")}function W(aI,s){if(!aE){return}if(aI<0){aI=0}else{if(aI>j){aI=j}}if(s===c){s=ay.animateScroll}if(s){Q.animate(h,"left",aI,ae)
+}else{h.css("left",aI);ae(aI)}}function ae(aI){if(aI===c){aI=h.position().left}al.scrollTop(0);aa=aI;var aL=aa===0,aK=aa==j,aJ=aI/j,s=-aJ*(T-aj);if(P!=aL||k!=aK){P=aL;k=aK;D.trigger("jsp-arrow-change",[ai,aG,P,k])}r(aL,aK);Y.css("left",s);D.trigger("jsp-scroll-x",[-s,aL,aK]).trigger("scroll")}function u(aI,s){if(ay.showArrows){aq[aI?"addClass":"removeClass"]("jspDisabled");af[s?"addClass":"removeClass"]("jspDisabled")}}function r(aI,s){if(ay.showArrows){ax[aI?"addClass":"removeClass"]("jspDisabled");x[s?"addClass":"removeClass"]("jspDisabled")}}function M(s,aI){var aJ=s/(Z-v);V(aJ*i,aI)}function N(aI,s){var aJ=aI/(T-aj);W(aJ*j,s)}function ab(aV,aQ,aJ){var aN,aK,aL,s=0,aU=0,aI,aP,aO,aS,aR,aT;try{aN=b(aV)}catch(aM){return}aK=aN.outerHeight();aL=aN.outerWidth();al.scrollTop(0);al.scrollLeft(0);while(!aN.is(".jspPane")){s+=aN.position().top;aU+=aN.position().left;aN=aN.offsetParent();if(/^body|html$/i.test(aN[0].nodeName)){return}}aI=aA();aO=aI+v;if(s<aI||aQ){aR=s-ay.verticalGutter}else{if(s+aK>aO){aR=s-v+aK+ay.verticalGutter}}if(aR){M(aR,aJ)}aP=aC();aS=aP+aj;if(aU<aP||aQ){aT=aU-ay.horizontalGutter}else{if(aU+aL>aS){aT=aU-aj+aL+ay.horizontalGutter}}if(aT){N(aT,aJ)}}function aC(){return -Y.position().left}function aA(){return -Y.position().top}function K(){var s=Z-v;return(s>20)&&(s-aA()<10)}function B(){var s=T-aj;return(s>20)&&(s-aC()<10)}function ag(){al.unbind(ac).bind(ac,function(aL,aM,aK,aI){var aJ=aa,s=I;Q.scrollBy(aK*ay.mouseWheelSpeed,-aI*ay.mouseWheelSpeed,false);return aJ==aa&&s==I})}function n(){al.unbind(ac)}function aB(){return false}function J(){Y.find(":input,a").unbind("focus.jsp").bind("focus.jsp",function(s){ab(s.target,false)})}function E(){Y.find(":input,a").unbind("focus.jsp")}function S(){var s,aI,aK=[];aE&&aK.push(am[0]);az&&aK.push(U[0]);Y.focus(function(){D.focus()});D.attr("tabindex",0).unbind("keydown.jsp keypress.jsp").bind("keydown.jsp",function(aN){if(aN.target!==this&&!(aK.length&&b(aN.target).closest(aK).length)){return}var aM=aa,aL=I;switch(aN.keyCode){case 40:case 38:case 34:case 32:case 33:case 39:case 37:s=aN.keyCode;aJ();break;case 35:M(Z-v);s=null;break;case 36:M(0);s=null;break}aI=aN.keyCode==s&&aM!=aa||aL!=I;return !aI}).bind("keypress.jsp",function(aL){if(aL.keyCode==s){aJ()}return !aI});if(ay.hideFocus){D.css("outline","none");if("hideFocus" in al[0]){D.attr("hideFocus",true)}}else{D.css("outline","");if("hideFocus" in al[0]){D.attr("hideFocus",false)}}function aJ(){var aM=aa,aL=I;switch(s){case 40:Q.scrollByY(ay.keyboardSpeed,false);break;case 38:Q.scrollByY(-ay.keyboardSpeed,false);break;case 34:case 32:Q.scrollByY(v*ay.scrollPagePercent,false);break;case 33:Q.scrollByY(-v*ay.scrollPagePercent,false);break;case 39:Q.scrollByX(ay.keyboardSpeed,false);break;case 37:Q.scrollByX(-ay.keyboardSpeed,false);break}aI=aM!=aa||aL!=I;return aI}}function R(){D.attr("tabindex","-1").removeAttr("tabindex").unbind("keydown.jsp keypress.jsp")}function C(){if(location.hash&&location.hash.length>1){var aK,aI,aJ=escape(location.hash.substr(1));try{aK=b("#"+aJ+', a[name="'+aJ+'"]')}catch(s){return}if(aK.length&&Y.find(aJ)){if(al.scrollTop()===0){aI=setInterval(function(){if(al.scrollTop()>0){ab(aK,true);b(document).scrollTop(al.position().top);clearInterval(aI)}},50)}else{ab(aK,true);b(document).scrollTop(al.position().top)}}}}function m(){if(b(document.body).data("jspHijack")){return}b(document.body).data("jspHijack",true);b(document.body).delegate("a[href*=#]","click",function(s){var aI=this.href.substr(0,this.href.indexOf("#")),aK=location.href,aO,aP,aJ,aM,aL,aN;if(location.href.indexOf("#")!==-1){aK=location.href.substr(0,location.href.indexOf("#"))}if(aI!==aK){return}aO=escape(this.href.substr(this.href.indexOf("#")+1));aP;try{aP=b("#"+aO+', a[name="'+aO+'"]')}catch(aQ){return}if(!aP.length){return}aJ=aP.closest(".jspScrollable");aM=aJ.data("jsp");aM.scrollToElement(aP,true);if(aJ[0].scrollIntoView){aL=b(a).scrollTop();aN=aP.offset().top;if(aN<aL||aN>aL+b(a).height()){aJ[0].scrollIntoView()}}s.preventDefault()
+})}function an(){var aJ,aI,aL,aK,aM,s=false;al.unbind("touchstart.jsp touchmove.jsp touchend.jsp click.jsp-touchclick").bind("touchstart.jsp",function(aN){var aO=aN.originalEvent.touches[0];aJ=aC();aI=aA();aL=aO.pageX;aK=aO.pageY;aM=false;s=true}).bind("touchmove.jsp",function(aQ){if(!s){return}var aP=aQ.originalEvent.touches[0],aO=aa,aN=I;Q.scrollTo(aJ+aL-aP.pageX,aI+aK-aP.pageY);aM=aM||Math.abs(aL-aP.pageX)>5||Math.abs(aK-aP.pageY)>5;return aO==aa&&aN==I}).bind("touchend.jsp",function(aN){s=false}).bind("click.jsp-touchclick",function(aN){if(aM){aM=false;return false}})}function g(){var s=aA(),aI=aC();D.removeClass("jspScrollable").unbind(".jsp");D.replaceWith(ao.append(Y.children()));ao.scrollTop(s);ao.scrollLeft(aI);if(av){clearInterval(av)}}b.extend(Q,{reinitialise:function(aI){aI=b.extend({},ay,aI);ar(aI)},scrollToElement:function(aJ,aI,s){ab(aJ,aI,s)},scrollTo:function(aJ,s,aI){N(aJ,aI);M(s,aI)},scrollToX:function(aI,s){N(aI,s)},scrollToY:function(s,aI){M(s,aI)},scrollToPercentX:function(aI,s){N(aI*(T-aj),s)},scrollToPercentY:function(aI,s){M(aI*(Z-v),s)},scrollBy:function(aI,s,aJ){Q.scrollByX(aI,aJ);Q.scrollByY(s,aJ)},scrollByX:function(s,aJ){var aI=aC()+Math[s<0?"floor":"ceil"](s),aK=aI/(T-aj);W(aK*j,aJ)},scrollByY:function(s,aJ){var aI=aA()+Math[s<0?"floor":"ceil"](s),aK=aI/(Z-v);V(aK*i,aJ)},positionDragX:function(s,aI){W(s,aI)},positionDragY:function(aI,s){V(aI,s)},animate:function(aI,aL,s,aK){var aJ={};aJ[aL]=s;aI.animate(aJ,{duration:ay.animateDuration,easing:ay.animateEase,queue:false,step:aK})},getContentPositionX:function(){return aC()},getContentPositionY:function(){return aA()},getContentWidth:function(){return T},getContentHeight:function(){return Z},getPercentScrolledX:function(){return aC()/(T-aj)},getPercentScrolledY:function(){return aA()/(Z-v)},getIsScrollableH:function(){return aE},getIsScrollableV:function(){return az},getContentPane:function(){return Y},scrollToBottom:function(s){V(i,s)},hijackInternalLinks:b.noop,destroy:function(){g()}});ar(O)}e=b.extend({},b.fn.jScrollPane.defaults,e);b.each(["mouseWheelSpeed","arrowButtonSpeed","trackClickSpeed","keyboardSpeed"],function(){e[this]=e[this]||e.speed});return this.each(function(){var f=b(this),g=f.data("jsp");if(g){g.reinitialise(e)}else{b("script",f).filter('[type="text/javascript"],not([type])').remove();g=new d(f,e);f.data("jsp",g)}})};b.fn.jScrollPane.defaults={showArrows:false,maintainPosition:true,stickToBottom:false,stickToRight:false,clickOnTrack:true,autoReinitialise:false,autoReinitialiseDelay:500,verticalDragMinHeight:0,verticalDragMaxHeight:99999,horizontalDragMinWidth:0,horizontalDragMaxWidth:99999,contentWidth:c,animateScroll:false,animateDuration:300,animateEase:"linear",hijackInternalLinks:false,verticalGutter:4,horizontalGutter:4,mouseWheelSpeed:0,arrowButtonSpeed:0,arrowRepeatFreq:50,arrowScrollOnHover:false,trackClickSpeed:0,trackClickRepeatFreq:70,verticalArrowPositions:"split",horizontalArrowPositions:"split",enableKeyboardNavigation:true,hideFocus:false,keyboardSpeed:0,initialDelay:300,speed:30,scrollPagePercent:0.8}})(jQuery,this);
\ No newline at end of file
diff --git a/preview/html/scripts/jquery.zclip.min.js b/preview/html/scripts/jquery.zclip.min.js
new file mode 100644 (file)
index 0000000..51471a1
--- /dev/null
@@ -0,0 +1,12 @@
+/*
+ * zClip :: jQuery ZeroClipboard v1.1.1
+ * http://steamdev.com/zclip
+ *
+ * Copyright 2011, SteamDev
+ * Released under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: Wed Jun 01, 2011
+ */
+
+(function(a){a.fn.zclip=function(c){if(typeof c=="object"&&!c.length){var b=a.extend({path:"ZeroClipboard.swf",copy:null,beforeCopy:null,afterCopy:null,clickAfter:true,setHandCursor:true,setCSSEffects:true},c);return this.each(function(){var e=a(this);if(e.is(":visible")&&(typeof b.copy=="string"||a.isFunction(b.copy))){ZeroClipboard.setMoviePath(b.path);var d=new ZeroClipboard.Client();if(a.isFunction(b.copy)){e.bind("zClip_copy",b.copy)}if(a.isFunction(b.beforeCopy)){e.bind("zClip_beforeCopy",b.beforeCopy)}if(a.isFunction(b.afterCopy)){e.bind("zClip_afterCopy",b.afterCopy)}d.setHandCursor(b.setHandCursor);d.setCSSEffects(b.setCSSEffects);d.addEventListener("mouseOver",function(f){e.trigger("mouseenter")});d.addEventListener("mouseOut",function(f){e.trigger("mouseleave")});d.addEventListener("mouseDown",function(f){e.trigger("mousedown");if(!a.isFunction(b.copy)){d.setText(b.copy)}else{d.setText(e.triggerHandler("zClip_copy"))}if(a.isFunction(b.beforeCopy)){e.trigger("zClip_beforeCopy")}});d.addEventListener("complete",function(f,g){if(a.isFunction(b.afterCopy)){e.trigger("zClip_afterCopy")}else{if(g.length>500){g=g.substr(0,500)+"...\n\n("+(g.length-500)+" characters not shown)"}e.removeClass("hover");alert("Copied text to clipboard:\n\n "+g)}if(b.clickAfter){e.trigger("click")}});d.glue(e[0],e.parent()[0]);a(window).bind("load resize",function(){d.reposition()})}})}else{if(typeof c=="string"){return this.each(function(){var f=a(this);c=c.toLowerCase();var e=f.data("zclipId");var d=a("#"+e+".zclip");if(c=="remove"){d.remove();f.removeClass("active hover")}else{if(c=="hide"){d.hide();f.removeClass("active hover")}else{if(c=="show"){d.show()}}}})}}}})(jQuery);var ZeroClipboard={version:"1.0.7",clients:{},moviePath:"ZeroClipboard.swf",nextId:1,$:function(a){if(typeof(a)=="string"){a=document.getElementById(a)}if(!a.addClass){a.hide=function(){this.style.display="none"};a.show=function(){this.style.display=""};a.addClass=function(b){this.removeClass(b);this.className+=" "+b};a.removeClass=function(d){var e=this.className.split(/\s+/);var b=-1;for(var c=0;c<e.length;c++){if(e[c]==d){b=c;c=e.length}}if(b>-1){e.splice(b,1);this.className=e.join(" ")}return this};a.hasClass=function(b){return !!this.className.match(new RegExp("\\s*"+b+"\\s*"))}}return a},setMoviePath:function(a){this.moviePath=a},dispatch:function(d,b,c){var a=this.clients[d];if(a){a.receiveEvent(b,c)}},register:function(b,a){this.clients[b]=a},getDOMObjectPosition:function(c,a){var b={left:0,top:0,width:c.width?c.width:c.offsetWidth,height:c.height?c.height:c.offsetHeight};if(c&&(c!=a)){b.left+=c.offsetLeft;b.top+=c.offsetTop}return b},Client:function(a){this.handlers={};this.id=ZeroClipboard.nextId++;this.movieId="ZeroClipboardMovie_"+this.id;ZeroClipboard.register(this.id,this);if(a){this.glue(a)}}};ZeroClipboard.Client.prototype={id:0,ready:false,movie:null,clipText:"",handCursorEnabled:true,cssEffects:true,handlers:null,glue:function(d,b,e){this.domElement=ZeroClipboard.$(d);var f=99;if(this.domElement.style.zIndex){f=parseInt(this.domElement.style.zIndex,10)+1}if(typeof(b)=="string"){b=ZeroClipboard.$(b)}else{if(typeof(b)=="undefined"){b=document.getElementsByTagName("body")[0]}}var c=ZeroClipboard.getDOMObjectPosition(this.domElement,b);this.div=document.createElement("div");this.div.className="zclip";this.div.id="zclip-"+this.movieId;$(this.domElement).data("zclipId","zclip-"+this.movieId);var a=this.div.style;a.position="absolute";a.left=""+c.left+"px";a.top=""+c.top+"px";a.width=""+c.width+"px";a.height=""+c.height+"px";a.zIndex=f;if(typeof(e)=="object"){for(addedStyle in e){a[addedStyle]=e[addedStyle]}}b.appendChild(this.div);this.div.innerHTML=this.getHTML(c.width,c.height)},getHTML:function(d,a){var c="";var b="id="+this.id+"&width="+d+"&height="+a;if(navigator.userAgent.match(/MSIE/)){var e=location.href.match(/^https/i)?"https://":"http://";c+='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+e+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+d+'" height="'+a+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+b+'"/><param name="wmode" value="transparent"/></object>'}else{c+='<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+d+'" height="'+a+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+b+'" wmode="transparent" />'}return c},hide:function(){if(this.div){this.div.style.left="-2000px"}},show:function(){this.reposition()},destroy:function(){if(this.domElement&&this.div){this.hide();this.div.innerHTML="";var a=document.getElementsByTagName("body")[0];try{a.removeChild(this.div)}catch(b){}this.domElement=null;this.div=null}},reposition:function(c){if(c){this.domElement=ZeroClipboard.$(c);if(!this.domElement){this.hide()}}if(this.domElement&&this.div){var b=ZeroClipboard.getDOMObjectPosition(this.domElement);var a=this.div.style;a.left=""+b.left+"px";a.top=""+b.top+"px"}},setText:function(a){this.clipText=a;if(this.ready){this.movie.setText(a)}},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");if(!this.handlers[a]){this.handlers[a]=[]}this.handlers[a].push(b)},setHandCursor:function(a){this.handCursorEnabled=a;if(this.ready){this.movie.setHandCursor(a)}},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(d,f){d=d.toString().toLowerCase().replace(/^on/,"");switch(d){case"load":this.movie=document.getElementById(this.movieId);if(!this.movie){var c=this;setTimeout(function(){c.receiveEvent("load",null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){var c=this;setTimeout(function(){c.receiveEvent("load",null)},100);this.ready=true;return}this.ready=true;try{this.movie.setText(this.clipText)}catch(h){}try{this.movie.setHandCursor(this.handCursorEnabled)}catch(h){}break;case"mouseover":if(this.domElement&&this.cssEffects){this.domElement.addClass("hover");if(this.recoverActive){this.domElement.addClass("active")}}break;case"mouseout":if(this.domElement&&this.cssEffects){this.recoverActive=false;if(this.domElement.hasClass("active")){this.domElement.removeClass("active");this.recoverActive=true}this.domElement.removeClass("hover")}break;case"mousedown":if(this.domElement&&this.cssEffects){this.domElement.addClass("active")}break;case"mouseup":if(this.domElement&&this.cssEffects){this.domElement.removeClass("active");this.recoverActive=false}break}if(this.handlers[d]){for(var b=0,a=this.handlers[d].length;b<a;b++){var g=this.handlers[d][b];if(typeof(g)=="function"){g(this,f)}else{if((typeof(g)=="object")&&(g.length==2)){g[0][g[1]](this,f)}else{if(typeof(g)=="string"){window[g](this,f)}}}}}}};
\ No newline at end of file
diff --git a/preview/html/scripts/navi.js b/preview/html/scripts/navi.js
new file mode 100644 (file)
index 0000000..badc738
--- /dev/null
@@ -0,0 +1,192 @@
+//<![CDATA[
+    var staticURL = "http://img-developer.samsung.com";
+       var sslCall = "";
+
+       if('' !== 'N') {
+               var locationStr = location.href;
+               if(locationStr.indexOf("https://") > -1) {
+                       location.href = "http://" + locationStr.substring(8);
+               }     
+    }
+
+//     if( typeof($) === function ) {
+               //https? ??? $SD? ??? ??? https ???? http? js ???? ???? ???.
+               //? ??? ?? ?? ??? ?? ?? ???.
+//     }
+    $SD.pagination.alt = {
+               first:"go first",
+               prev:"go prev",
+               next:"go next",
+               last:"go last"
+    };
+    $(document).ready(function(){
+       var myVar;
+           topSearchInit();//top search ??
+           $('#searchTop').attr("autocomplete","off");
+           var searchingBoolean = false;
+           
+           var topSearchChange = function(){
+               
+               if (searchingBoolean) return;
+               
+                       var searchInput = $('#searchTop').val();
+                       
+                       if($('#searchTop').val() != ""){
+                               $("#topAutocomplete").hide();
+                               searchingBoolean = true;
+                               
+                               var jsonData = {
+                                               url : "/search/autoComplete.do;jsessionid=hphlTh5pL0pypqhNXb18Tnhbxwzk2hBC6KxnThCvysc2Hz2WG1y2!1103778492",
+                                               async : true,
+                                               data : { searchInput : searchInput},
+                                               success : function(data){
+                                                       if (searchInput == $('#searchTop').val()){
+                                                               var autoComplete = data.kwdNm;
+                                                               var tmpHtml = "";
+                                                               
+                                                               if (autoComplete.length > 0){
+                                                                       $('#topAutocomplete').children().remove();
+                                                                       $('#topAutocomplete').append($('<ul id="topAutocompleteList"><\/ul>'));
+                                                                       $.each(autoComplete, function(i, item){
+                                                                               var a = $("<a href='javascript:;'><em>"+data.searchInput+"<\/em>"+item.kwdNmSub+"<\/a>");
+                                                                               a.data('keyword', item.kwdNm);
+                                                                               $('#topAutocompleteList').append($('<li><\/li>').html(a));
+                                                                       });
+                                                                       $("#topAutocompleteList").find("li").last().on("keydown", function(e) {
+                                                                               if(e.which == 9 && e.shiftKey) {
+                                                                                       return true;
+                                                                               }
+                                                                               
+                                                                               if(e.which == 9) {
+                                                                                       e.preventDefault();
+                                                                                       $('#topAutocomplete').hide();   
+                                                                                       setTimeout(function() {
+                                                                                               $("#searchTopBtn").focus();
+                                                                                       }, 1);
+                                                                               }
+                                                                               
+                                                                       });
+                                                                       $("#searchTopBtn").off("focusout", function(e) {});
+                                                                   $("#searchTopBtn").on("focusout", function(e) {
+                                                                               $('#topAutocomplete').hide();
+                                                                       });
+                                                               }else{
+                                                                       $('#topAutocomplete').children().remove();
+                                                               }
+                                                               if($('#searchTop').val() == ""){
+                                                                       $("#topAutocomplete").hide();
+                                                                       searchingBoolean = false;
+                                                                       return;
+                                                               }else{
+                                                                       if (searchInput == $('#searchTop').val()){
+                                                                               searchingBoolean = false;
+                                                                       }else{
+                                                                               searchingBoolean = false;
+                                                                               topSearchChange();
+                                                                       }
+                                                               }
+                                                               if (autoComplete.length == 0){
+                                                                       $("#topAutocomplete").hide();
+                                                               }else{
+                                                                       if (searchInput == $('#searchTop').val()){
+                                                                               $("#topAutocomplete").show();
+                                                                               var $searchList = $("#topAutocomplete").find('ul');
+                                                                               var hei = $searchList.outerHeight();
+                                                                               if(hei>180){
+                                                                                       $searchList.css({'height':'180px','overflow-y':'auto'});
+                                                                               }
+                                                                       }else{
+                                                                               searchingBoolean = false;
+                                                                               topSearchChange();
+                                                                       }
+                                                               }
+                                                       }else{
+                                                               searchingBoolean = false;
+                                                               topSearchChange();
+                                                       }
+                                               },
+                                               error : function() {searchingBoolean = false;}
+                                               
+                               };
+                               //setTimeout(function(){$SD.ajax.get(jsonData);},100);
+                               $SD.ajax.get(jsonData);
+                               searchingBoolean = false;
+                       }
+                       
+                       //console.log("/search/autoComplete.do end");
+                       //console.groupEnd();
+               };
+               
+               $('#searchTop').keyup(function(e){
+                       if($('#searchTop').val() == ""){
+                               $('#topAutocomplete').children().remove();
+                               $("#topAutocomplete").hide();
+                       }else{
+                               if(e.which == 13){
+                                       search();
+                               }else{
+                                       topSearchChange();
+                               }
+                       }
+               });
+               
+               var search = function(){
+                       if($.trim($('#searchTop').val()) == ""){
+                               alert('Search keyword is required.');
+                       }else{
+                               $('#topSearchForm').submit();
+                       }
+               };
+               $("#topAutocomplete").on('mousedown','ul li a', function(e){
+                       e.preventDefault();
+                       var keyword = $(this).data('keyword');
+                       $("#searchTop").val(keyword);
+                       $('#topSearchForm').submit();
+               });
+               
+               $("#topAutocomplete").on('keydown keypress','ul li a', function(e){
+                       if(e.which == 13) {
+                               e.preventDefault();
+                               var keyword = $(this).data('keyword');
+                               $("#searchTop").val(keyword);
+                               $('#topSearchForm').submit();                   
+                       }
+               });
+               
+               $('#searchTopBtn').click(function(e){
+                       search();       
+               });  
+    });
+    
+    function topSearchEnter(){
+       if($.trim($('#searchTop').val()) == "" || $.trim($('#searchTop').val()) == "Search"){
+               alert('Search keyword is required.');
+               return false;
+       }else{
+               return true;
+       }
+    }
+
+/* Tracking Code TOTAL */
+               var _gaq = _gaq || [];
+               var pluginUrl = '//www.google-analytics.com/plugins/ga/inpage_linkid.js';
+               _gaq.push(['_require', 'inpage_linkid', pluginUrl]);
+               _gaq.push(['_setAccount', 'UA-6892706-3']);
+               _gaq.push(['_setDomainName', 'samsung.com']);
+               _gaq.push(['_setAllowLinker', true]);
+               _gaq.push(['_trackPageview']);
+               (function() {
+                 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+                 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+                 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+               })();
+       
+               <!--// Tracking Code 1 -->
+                       var _gaq = _gaq || [];
+                       _gaq.push(['_setAccount', 'UA-6892706-4']);
+                       _gaq.push(['_trackPageview']);
+                       (function() {
+                         var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+                         ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+                         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+                       })();
diff --git a/preview/html/scripts/search.js b/preview/html/scripts/search.js
new file mode 100644 (file)
index 0000000..d1ae5ad
--- /dev/null
@@ -0,0 +1,168 @@
+/** 
+ * [PAGE] Search Result
+ * date : 20120810
+ * author : 전종호
+ */
+function searchInit()
+{
+       var focusTarget = "input";
+
+       //$("#autocomplete").hide();
+
+       //$("#searchInput").bind("keydown", checkSearchText);
+       
+       $("#searchInput").focusout(function() {
+               if( focusTarget == "dropdown" )
+               {
+                       return false;
+               }
+               else
+               {
+                       //toggleClass( false );
+               }
+       });
+       
+       $( "#searchInput" ).focusin( function() {
+               focusTarget = "input";
+       });
+
+       $("#btnDropdown").mousedown( function(){
+               focusTarget = "dropdown";
+       });
+
+       $(".autocomplete ul li").focusin( function() {
+               //
+       });
+       
+       $("#autocomplete").bind("mouseleave",function(){
+               $(this).hide();
+               $("#btnDropdown").removeClass("dropdownoff");
+               $("#btnDropdown").addClass("dropdown");         
+       });
+
+       $(".autocomplete ul li:last-child").focusout( function() {
+               toggleClass( false );
+       });
+       
+       $("#btnDropdown").click( function(){
+               //alert("btn click");
+               if( $("#searchInput").val().length == 0 ){ 
+                       return false;
+               }
+               else{
+                       if( $("#btnDropdown").hasClass("dropdown") ){
+                               toggleClass( true );
+                       }
+                       else{
+                               toggleClass( false );
+                       }
+               }
+
+               return false;
+       });
+
+       function checkSearchText(){
+               setTimeout(function(){
+                       var txt = $("#searchInput").val();
+
+                       if( txt.length > 0 ){
+                               toggleClass( true );
+                       }
+                       else{
+                               toggleClass( false );   
+                       }
+               }, 1);
+       }
+
+       function toggleClass( bo ){
+               if( bo ){
+                       //$(".autocomplete").css("visibility", "visible");
+                       $("#autocomplete").show();
+                       
+                       $("#btnDropdown").removeClass("dropdown");
+                       $("#btnDropdown").addClass("dropdownoff");
+               }
+               else{
+                       //$(".autocomplete").css("visibility", "hidden");
+                       $("#autocomplete").hide();
+                       
+                       $("#btnDropdown").removeClass("dropdownoff");
+                       $("#btnDropdown").addClass("dropdown");
+               }
+       }
+}
+
+
+
+function topSearchInit()
+{
+       var focusTarget = "input";
+
+       //$("#searchTop").bind("keydown", checkSearchText);
+       
+       $("#searchTop").focusout(function() {
+               if( focusTarget == "dropdown" )
+               {
+                       return false;
+               }
+               else
+               {       
+                       //toggleClass( false );
+               }
+       });
+       
+       $( "#searchTop" ).focusin( function()   {
+               focusTarget = "input";
+       });
+
+       $("#btnDropdown").mousedown( function(){
+               focusTarget = "dropdown";
+       });
+
+       $(".autocomplete ul li").focusin( function() {
+               //
+       });
+       
+       $(".autocomplete ul li:last-child").focusout( function() {
+               toggleClass( false );
+       })
+       
+       $("#btnDropdown").click( function(){
+               //alert("btn click");
+               if( $("#searchInput").val().length == 0 ){ 
+                       return false;
+               }
+               else{
+                       if( $("#btnDropdown").hasClass("dropdown") ){
+                               toggleClass( true );
+                       }
+                       else{
+                               toggleClass( false );
+                       }
+               }
+
+               return false;
+       });
+
+       function checkSearchText(){
+               setTimeout(function(){
+                       var txt = $("#searchTop").val();
+
+                       if( txt.length > 0 ){
+                               toggleClass( true );
+                       }
+                       else{
+                               toggleClass( false );   
+                       }
+               }, 1);
+       }
+
+       function toggleClass( bo ){
+               if( bo ){
+                       $(".topAutocomplete").css("visibility", "visible");
+               }else{
+                       $(".topAutocomplete").css("visibility", "hidden");
+                       $("#topAutocomplete").hide();
+               }
+       }
+}
diff --git a/preview/html/scripts/showhide.js b/preview/html/scripts/showhide.js
new file mode 100644 (file)
index 0000000..2e85407
--- /dev/null
@@ -0,0 +1,204 @@
+/*all Show Hide devicespecs List*/
+if($('div#contents').find('.devicespecs-util').length){
+var self = $('div#contents').find('.devicespecs-util');
+
+$('.showA', self).bind ("click", function (){
+$(this).parents('.devicespecs-util').next().find('.devicespec-tit').each(function(){
+var me = $(this);
+var idx = $('.devicespecifications .devicespec-tit').index(this);
+
+if ( !me.next().is(':visible') ){
+       me.find("a").css('background-image', me.find("a").css('background-image').replace('_.gif','.gif'));
+       me.find('em').text('Hide');
+       me.next().show();
+}
+});
+return false;
+})
+$('.hideA', self).bind ("click", function (){
+$(this).parents('.devicespecs-util').next().find('.devicespec-tit').each(function(){
+
+       var me = $(this);
+       var idx = $('.devicespecifications .devicespec-tit').index(this);
+
+       if ( me.next().is(':visible') ){
+               me.find("a").css('background-image', me.find("a").css('background-image').replace('.gif','_.gif'));
+               me.find('em').text('Show');
+               me.next().hide();
+       }
+                                       
+});
+return false;
+})
+}      
+
+/*toggle devicespecs List*/
+if($('div#contents').find('.devicespec-tit').length){
+
+$('.devicespec-tit').each(function(){
+var self = $(this);
+$('a', self).bind ("click", function(){
+       var idx = $('.devicespec-tit a').index(this);
+
+       if ( $(this).parent().parent().next().is(':visible') ){
+               $(this).css('background-image', $(this).css('background-image').replace('.gif','_.gif'));
+
+               self.find('em').text('Show');
+               self.next().hide();
+
+               return false;
+       }else{
+               $(this).css('background-image', $(this).css('background-image').replace('_.gif','.gif'));
+               self.find('em').text('Hide');
+
+               self.next().show();
+
+               return false;
+       }
+
+});
+
+});
+}
+
+$('ul.devicespecifications li div.devicespec-con').hide();
+
+
+$('.devicespec-tit').each(function(){
+var self = $(this);
+var arrow =  $('a', self);
+
+if(self.next().is(':visible')){
+arrow.css('background-image', arrow.css('background-image').replace('_.gif','.gif'));
+self.find('em').text('Hide');
+}else{
+arrow.css('background-image', arrow.css('background-image').replace('.gif','_.gif'));
+self.find('em').text('Show');
+}
+
+});
+
+$(document).ready(function(){
+       var openheading = function(target) {
+               var origin = $(target);
+               target = origin.closest('.devicespec-con');
+               if (!(target.length > 0)) {
+                       target = origin.closest('.devicespec-tit');
+               }
+               if (target.length > 0) {
+                       if (!$('.devicespec-con', target.parent()).is(":visible")) {
+                               $("div.devicespec-tit a.bt-arr", target.parent()).click();
+                       }
+               }
+
+               $(window.location.hash)[0].scrollIntoView();
+       };
+
+       $(".opensection").click(function(){
+               var target = $($(this).attr("href"));//.closest('.devicespec-con');
+               openheading(target);
+       });
+
+       if (window.location.hash) {
+               var target = $(window.location.hash);
+               openheading(target);
+               //$(target).focus(); //uncomment if fail to work
+       }
+
+       var isScrolledIntoView = function(elem)
+       {
+               var docViewTop = $('#contents').scrollTop();
+               var docViewBottom = docViewTop + $('#contents').height();
+
+               var elemTop = $(elem).offset().top;
+               var elemBottom = elemTop + $(elem).height();
+
+               return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom)
+                 && (elemBottom <= docViewBottom) &&  (elemTop >= docViewTop) );
+       }
+
+       $('#contents').scroll();
+
+       var checkBreadCrumbs = function() {
+               if (!isScrolledIntoView($('#contents .content h1')))
+               {
+                       $('a.top.sms').show();
+                       $('.help_breadcrumbs').hide();
+               } else {
+                       $('a.top.sms').hide();
+                       $('.help_breadcrumbs').show();
+               }
+               $('#contents').css('padding-top', $('.help_breadcrumbs').outerHeight()*(7/6));
+       }       
+
+       var updateH = function(){
+               checkBreadCrumbs();
+               $('a.top').css('bottom', $('#footer').outerHeight());
+               $('a.top').css('left', $('#toc-navigation').position()['left'] + (($('#toc-navigation').outerWidth() - $('a.top').outerWidth())/2));
+
+               $('#toc').css('top', $('#toc_border').position()['top'] + 7);
+
+               if ($('a.top').is(':visible'))
+               {
+                       $('#toc').css('height', $(window).height()-$('#toc').position()['top']-($(window).height() - $('a.top').position()['top']) - 10);
+               } else {
+                       $('#toc').css('height', $(window).height()-$('#toc').position()['top']-$('#footer').outerHeight() - 20);
+               }
+               $('#toc').css('height', $('#toc').css('height') - 5);
+
+               $('#toc_border').height($('#toc').outerHeight() + 5);
+               $('#container #contents').css('margin-bottom', $('#footer').outerHeight());
+               //$('#toc').css('top', $('#toc_border').position()['top'] + 2);
+               $('#toc').css('top', $('#toc_border').position()['top'] + 7);
+               $('#contents').css('right', $(window).width() - $('#toc-navigation').position()['left'] + 5);
+               //$('#toc').css('width', $('#toc_border').width() - 40);
+               $('#toc').css('width', $('#toc_border').width() - 49);
+       };
+
+       var updateH_no_toc = function() {
+               checkBreadCrumbs();
+               if (!isScrolledIntoView($('#contents .content h1')))
+               {
+                       $('a.top.sms').show();
+               } else {
+                       $('a.top.sms').hide();
+               }
+               $('a.top').css('bottom', $('#footer').outerHeight());
+               
+               $('#container #contents').css('margin-bottom', $('#footer').outerHeight());
+       }
+
+       if ($('body').hasClass('no-toc')) {
+               updateH = updateH_no_toc;
+       }
+       $(window).resize(updateH);
+       $('#contents').scroll(updateH);
+       $(window).resize();
+       
+       $('a.top').click(function(){$('#contents').scrollTop(0)});
+
+       var hashchanged = function() {
+               if (window.location.hash.length) {
+                       openheading(window.location.hash);
+                       //$(window.location.hash).scrollTo();
+                       $(window.location.hash)[0].scrollIntoView();
+
+               } else 
+               {
+                       $('#contents').scrollTop(0);
+               }
+       };
+
+       if (("onhashchange" in window) && !($.browser.msie)) { 
+               $(window).bind( 'hashchange',hashchanged);
+       }
+       else { 
+               var prevHash = window.location.hash;
+               window.setInterval(function () {
+                       if (window.location.hash != prevHash) {
+                               hashchanged();
+                               prevHash = window.location.hash;
+                       }
+               }, 100);
+       }
+});
diff --git a/preview/html/scripts/snippet.js b/preview/html/scripts/snippet.js
new file mode 100644 (file)
index 0000000..777e9ae
--- /dev/null
@@ -0,0 +1,1478 @@
+// Copyright (C) 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+/**
+ * @fileoverview
+ * some functions for browser-side pretty printing of code contained in html.
+ *
+ * <p>
+ * For a fairly comprehensive set of languages see the
+ * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
+ * file that came with this source.  At a minimum, the lexer should work on a
+ * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
+ * XML, CSS, Javascript, and Makefiles.  It works passably on Ruby, PHP and Awk
+ * and a subset of Perl, but, because of commenting conventions, doesn't work on
+ * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
+ * <p>
+ * Usage: <ol>
+ * <li> include this source file in an html page via
+ *   {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
+ * <li> define style rules.  See the example page for examples.
+ * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
+ *    {@code class=prettyprint.}
+ *    You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
+ *    printer needs to do more substantial DOM manipulations to support that, so
+ *    some css styles may not be preserved.
+ * </ol>
+ * That's it.  I wanted to keep the API as simple as possible, so there's no
+ * need to specify which language the code is in, but if you wish, you can add
+ * another class to the {@code <pre>} or {@code <code>} element to specify the
+ * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
+ * starts with "lang-" followed by a file extension, specifies the file type.
+ * See the "lang-*.js" files in this directory for code that implements
+ * per-language file handlers.
+ * <p>
+ * Change log:<br>
+ * cbeust, 2006/08/22
+ * <blockquote>
+ *   Java annotations (start with "@") are now captured as literals ("lit")
+ * </blockquote>
+ * @requires console
+ */
+
+// JSLint declarations
+/*global console, document, navigator, setTimeout, window */
+
+/**
+ * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
+ * UI events.
+ * If set to {@code false}, {@code prettyPrint()} is synchronous.
+ */
+window['PR_SHOULD_USE_CONTINUATION'] = true;
+
+(function () {
+  // Keyword lists for various languages.
+  // We use things that coerce to strings to make them compact when minified
+  // and to defeat aggressive optimizers that fold large string constants.
+  var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
+  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," + 
+      "double,enum,extern,float,goto,int,long,register,short,signed,sizeof," +
+      "static,struct,switch,typedef,union,unsigned,void,volatile"];
+  var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
+      "new,operator,private,protected,public,this,throw,true,try,typeof"];
+  var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool," +
+      "concept,concept_map,const_cast,constexpr,decltype," +
+      "dynamic_cast,explicit,export,friend,inline,late_check," +
+      "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," +
+      "template,typeid,typename,using,virtual,where"];
+  var JAVA_KEYWORDS = [COMMON_KEYWORDS,
+      "abstract,boolean,extends,final,finally,implements,import," +
+      "instanceof,null,native,package,strictfp,super,synchronized,throws," +
+      "transient"];
+  var CSHARP_KEYWORDS = [JAVA_KEYWORDS,
+      "as,base,by,checked,decimal,delegate,descending,dynamic,event," +
+      "fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock," +
+      "object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed," +
+      "stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];
+  var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
+      "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
+      "true,try,unless,until,when,while,yes";
+  var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
+      "debugger,eval,export,function,get,null,set,undefined,var,with," +
+      "Infinity,NaN"];
+  var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," +
+      "goto,if,import,last,local,my,next,no,our,print,package,redo,require," +
+      "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
+  var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
+      "elif,except,exec,finally,from,global,import,in,is,lambda," +
+      "nonlocal,not,or,pass,print,raise,try,with,yield," +
+      "False,True,None"];
+  var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
+      "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
+      "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
+      "BEGIN,END"];
+  var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
+      "function,in,local,set,then,until"];
+  var ALL_KEYWORDS = [
+      CPP_KEYWORDS, CSHARP_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS +
+      PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];
+  var C_TYPES = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;
+
+  // token style names.  correspond to css classes
+  /**
+   * token style for a string literal
+   * @const
+   */
+  var PR_STRING = 'str';
+  /**
+   * token style for a keyword
+   * @const
+   */
+  var PR_KEYWORD = 'kwd';
+  /**
+   * token style for a comment
+   * @const
+   */
+  var PR_COMMENT = 'com';
+  /**
+   * token style for a type
+   * @const
+   */
+  var PR_TYPE = 'typ';
+  /**
+   * token style for a literal value.  e.g. 1, null, true.
+   * @const
+   */
+  var PR_LITERAL = 'lit';
+  /**
+   * token style for a punctuation string.
+   * @const
+   */
+  var PR_PUNCTUATION = 'pun';
+  /**
+   * token style for a punctuation string.
+   * @const
+   */
+  var PR_PLAIN = 'pln';
+
+  /**
+   * token style for an sgml tag.
+   * @const
+   */
+  var PR_TAG = 'tag';
+  /**
+   * token style for a markup declaration such as a DOCTYPE.
+   * @const
+   */
+  var PR_DECLARATION = 'dec';
+  /**
+   * token style for embedded source.
+   * @const
+   */
+  var PR_SOURCE = 'src';
+  /**
+   * token style for an sgml attribute name.
+   * @const
+   */
+  var PR_ATTRIB_NAME = 'atn';
+  /**
+   * token style for an sgml attribute value.
+   * @const
+   */
+  var PR_ATTRIB_VALUE = 'atv';
+
+  /**
+   * A class that indicates a section of markup that is not code, e.g. to allow
+   * embedding of line numbers within code listings.
+   * @const
+   */
+  var PR_NOCODE = 'nocode';
+
+
+
+/**
+ * A set of tokens that can precede a regular expression literal in
+ * javascript
+ * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html
+ * has the full list, but I've removed ones that might be problematic when
+ * seen in languages that don't support regular expression literals.
+ *
+ * <p>Specifically, I've removed any keywords that can't precede a regexp
+ * literal in a syntactically legal javascript program, and I've removed the
+ * "in" keyword since it's not a keyword in many languages, and might be used
+ * as a count of inches.
+ *
+ * <p>The link a above does not accurately describe EcmaScript rules since
+ * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
+ * very well in practice.
+ *
+ * @private
+ * @const
+ */
+var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';
+
+// CAVEAT: this does not properly handle the case where a regular
+// expression immediately follows another since a regular expression may
+// have flags for case-sensitivity and the like.  Having regexp tokens
+// adjacent is not valid in any language I'm aware of, so I'm punting.
+// TODO: maybe style special characters inside a regexp as punctuation.
+
+
+  /**
+   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
+   * matches the union of the sets of strings matched by the input RegExp.
+   * Since it matches globally, if the input strings have a start-of-input
+   * anchor (/^.../), it is ignored for the purposes of unioning.
+   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
+   * @return {RegExp} a global regex.
+   */
+  function combinePrefixPatterns(regexs) {
+    var capturedGroupIndex = 0;
+  
+    var needToFoldCase = false;
+    var ignoreCase = false;
+    for (var i = 0, n = regexs.length; i < n; ++i) {
+      var regex = regexs[i];
+      if (regex.ignoreCase) {
+        ignoreCase = true;
+      } else if (/[a-z]/i.test(regex.source.replace(
+                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
+        needToFoldCase = true;
+        ignoreCase = false;
+        break;
+      }
+    }
+  
+    var escapeCharToCodeUnit = {
+      'b': 8,
+      't': 9,
+      'n': 0xa,
+      'v': 0xb,
+      'f': 0xc,
+      'r': 0xd
+    };
+  
+    function decodeEscape(charsetPart) {
+      var cc0 = charsetPart.charCodeAt(0);
+      if (cc0 !== 92 /* \\ */) {
+        return cc0;
+      }
+      var c1 = charsetPart.charAt(1);
+      cc0 = escapeCharToCodeUnit[c1];
+      if (cc0) {
+        return cc0;
+      } else if ('0' <= c1 && c1 <= '7') {
+        return parseInt(charsetPart.substring(1), 8);
+      } else if (c1 === 'u' || c1 === 'x') {
+        return parseInt(charsetPart.substring(2), 16);
+      } else {
+        return charsetPart.charCodeAt(1);
+      }
+    }
+  
+    function encodeEscape(charCode) {
+      if (charCode < 0x20) {
+        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
+      }
+      var ch = String.fromCharCode(charCode);
+      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
+        ch = '\\' + ch;
+      }
+      return ch;
+    }
+  
+    function caseFoldCharset(charSet) {
+      var charsetParts = charSet.substring(1, charSet.length - 1).match(
+          new RegExp(
+              '\\\\u[0-9A-Fa-f]{4}'
+              + '|\\\\x[0-9A-Fa-f]{2}'
+              + '|\\\\[0-3][0-7]{0,2}'
+              + '|\\\\[0-7]{1,2}'
+              + '|\\\\[\\s\\S]'
+              + '|-'
+              + '|[^-\\\\]',
+              'g'));
+      var groups = [];
+      var ranges = [];
+      var inverse = charsetParts[0] === '^';
+      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
+        var p = charsetParts[i];
+        if (/\\[bdsw]/i.test(p)) {  // Don't muck with named groups.
+          groups.push(p);
+        } else {
+          var start = decodeEscape(p);
+          var end;
+          if (i + 2 < n && '-' === charsetParts[i + 1]) {
+            end = decodeEscape(charsetParts[i + 2]);
+            i += 2;
+          } else {
+            end = start;
+          }
+          ranges.push([start, end]);
+          // If the range might intersect letters, then expand it.
+          // This case handling is too simplistic.
+          // It does not deal with non-latin case folding.
+          // It works for latin source code identifiers though.
+          if (!(end < 65 || start > 122)) {
+            if (!(end < 65 || start > 90)) {
+              ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
+            }
+            if (!(end < 97 || start > 122)) {
+              ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
+            }
+          }
+        }
+      }
+  
+      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
+      // -> [[1, 12], [14, 14], [16, 17]]
+      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
+      var consolidatedRanges = [];
+      var lastRange = [NaN, NaN];
+      for (var i = 0; i < ranges.length; ++i) {
+        var range = ranges[i];
+        if (range[0] <= lastRange[1] + 1) {
+          lastRange[1] = Math.max(lastRange[1], range[1]);
+        } else {
+          consolidatedRanges.push(lastRange = range);
+        }
+      }
+  
+      var out = ['['];
+      if (inverse) { out.push('^'); }
+      out.push.apply(out, groups);
+      for (var i = 0; i < consolidatedRanges.length; ++i) {
+        var range = consolidatedRanges[i];
+        out.push(encodeEscape(range[0]));
+        if (range[1] > range[0]) {
+          if (range[1] + 1 > range[0]) { out.push('-'); }
+          out.push(encodeEscape(range[1]));
+        }
+      }
+      out.push(']');
+      return out.join('');
+    }
+  
+    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
+      // Split into character sets, escape sequences, punctuation strings
+      // like ('(', '(?:', ')', '^'), and runs of characters that do not
+      // include any of the above.
+      var parts = regex.source.match(
+          new RegExp(
+              '(?:'
+              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
+              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
+              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
+              + '|\\\\[0-9]+'  // a back-reference or octal escape
+              + '|\\\\[^ux0-9]'  // other escape sequence
+              + '|\\(\\?[:!=]'  // start of a non-capturing group
+              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
+              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
+              + ')',
+              'g'));
+      var n = parts.length;
+  
+      // Maps captured group numbers to the number they will occupy in
+      // the output or to -1 if that has not been determined, or to
+      // undefined if they need not be capturing in the output.
+      var capturedGroups = [];
+  
+      // Walk over and identify back references to build the capturedGroups
+      // mapping.
+      for (var i = 0, groupIndex = 0; i < n; ++i) {
+        var p = parts[i];
+        if (p === '(') {
+          // groups are 1-indexed, so max group index is count of '('
+          ++groupIndex;
+        } else if ('\\' === p.charAt(0)) {
+          var decimalValue = +p.substring(1);
+          if (decimalValue && decimalValue <= groupIndex) {
+            capturedGroups[decimalValue] = -1;
+          }
+        }
+      }
+  
+      // Renumber groups and reduce capturing groups to non-capturing groups
+      // where possible.
+      for (var i = 1; i < capturedGroups.length; ++i) {
+        if (-1 === capturedGroups[i]) {
+          capturedGroups[i] = ++capturedGroupIndex;
+        }
+      }
+      for (var i = 0, groupIndex = 0; i < n; ++i) {
+        var p = parts[i];
+        if (p === '(') {
+          ++groupIndex;
+          if (capturedGroups[groupIndex] === undefined) {
+            parts[i] = '(?:';
+          }
+        } else if ('\\' === p.charAt(0)) {
+          var decimalValue = +p.substring(1);
+          if (decimalValue && decimalValue <= groupIndex) {
+            parts[i] = '\\' + capturedGroups[groupIndex];
+          }
+        }
+      }
+  
+      // Remove any prefix anchors so that the output will match anywhere.
+      // ^^ really does mean an anchored match though.
+      for (var i = 0, groupIndex = 0; i < n; ++i) {
+        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
+      }
+  
+      // Expand letters to groups to handle mixing of case-sensitive and
+      // case-insensitive patterns if necessary.
+      if (regex.ignoreCase && needToFoldCase) {
+        for (var i = 0; i < n; ++i) {
+          var p = parts[i];
+          var ch0 = p.charAt(0);
+          if (p.length >= 2 && ch0 === '[') {
+            parts[i] = caseFoldCharset(p);
+          } else if (ch0 !== '\\') {
+            // TODO: handle letters in numeric escapes.
+            parts[i] = p.replace(
+                /[a-zA-Z]/g,
+                function (ch) {
+                  var cc = ch.charCodeAt(0);
+                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
+                });
+          }
+        }
+      }
+  
+      return parts.join('');
+    }
+  
+    var rewritten = [];
+    for (var i = 0, n = regexs.length; i < n; ++i) {
+      var regex = regexs[i];
+      if (regex.global || regex.multiline) { throw new Error('' + regex); }
+      rewritten.push(
+          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
+    }
+  
+    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
+  }
+
+
+  /**
+   * Split markup into a string of source code and an array mapping ranges in
+   * that string to the text nodes in which they appear.
+   *
+   * <p>
+   * The HTML DOM structure:</p>
+   * <pre>
+   * (Element   "p"
+   *   (Element "b"
+   *     (Text  "print "))       ; #1
+   *   (Text    "'Hello '")      ; #2
+   *   (Element "br")            ; #3
+   *   (Text    "  + 'World';")) ; #4
+   * </pre>
+   * <p>
+   * corresponds to the HTML
+   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
+   *
+   * <p>
+   * It will produce the output:</p>
+   * <pre>
+   * {
+   *   sourceCode: "print 'Hello '\n  + 'World';",
+   *   //                 1         2
+   *   //       012345678901234 5678901234567
+   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
+   * }
+   * </pre>
+   * <p>
+   * where #1 is a reference to the {@code "print "} text node above, and so
+   * on for the other text nodes.
+   * </p>
+   *
+   * <p>
+   * The {@code} spans array is an array of pairs.  Even elements are the start
+   * indices of substrings, and odd elements are the text nodes (or BR elements)
+   * that contain the text for those substrings.
+   * Substrings continue until the next index or the end of the source.
+   * </p>
+   *
+   * @param {Node} node an HTML DOM subtree containing source-code.
+   * @return {Object} source code and the text nodes in which they occur.
+   */
+  function extractSourceSpans(node) {
+    var nocode = /(?:^|\s)nocode(?:\s|$)/;
+  
+    var chunks = [];
+    var length = 0;
+    var spans = [];
+    var k = 0;
+  
+    var whitespace;
+    if (node.currentStyle) {
+      whitespace = node.currentStyle.whiteSpace;
+    } else if (window.getComputedStyle) {
+      whitespace = document.defaultView.getComputedStyle(node, null)
+          .getPropertyValue('white-space');
+    }
+    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
+  
+    function walk(node) {
+      switch (node.nodeType) {
+        case 1:  // Element
+          if (nocode.test(node.className)) { return; }
+          for (var child = node.firstChild; child; child = child.nextSibling) {
+            walk(child);
+          }
+          var nodeName = node.nodeName;
+          if ('BR' === nodeName || 'LI' === nodeName) {
+            chunks[k] = '\n';
+            spans[k << 1] = length++;
+            spans[(k++ << 1) | 1] = node;
+          }
+          break;
+        case 3: case 4:  // Text
+          var text = node.nodeValue;
+          if (text.length) {
+            if (!isPreformatted) {
+              text = text.replace(/[ \t\r\n]+/g, ' ');
+            } else {
+              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
+            }
+            // TODO: handle tabs here?
+            chunks[k] = text;
+            spans[k << 1] = length;
+            length += text.length;
+            spans[(k++ << 1) | 1] = node;
+          }
+          break;
+      }
+    }
+  
+    walk(node);
+  
+    return {
+      sourceCode: chunks.join('').replace(/\n$/, ''),
+      spans: spans
+    };
+  }
+
+
+  /**
+   * Apply the given language handler to sourceCode and add the resulting
+   * decorations to out.
+   * @param {number} basePos the index of sourceCode within the chunk of source
+   *    whose decorations are already present on out.
+   */
+  function appendDecorations(basePos, sourceCode, langHandler, out) {
+    if (!sourceCode) { return; }
+    var job = {
+      sourceCode: sourceCode,
+      basePos: basePos
+    };
+    langHandler(job);
+    out.push.apply(out, job.decorations);
+  }
+
+  var notWs = /\S/;
+
+  /**
+   * Given an element, if it contains only one child element and any text nodes
+   * it contains contain only space characters, return the sole child element.
+   * Otherwise returns undefined.
+   * <p>
+   * This is meant to return the CODE element in {@code <pre><code ...>} when
+   * there is a single child element that contains all the non-space textual
+   * content, but not to return anything where there are multiple child elements
+   * as in {@code <pre><code>...</code><code>...</code></pre>} or when there
+   * is textual content.
+   */
+  function childContentWrapper(element) {
+    var wrapper = undefined;
+    for (var c = element.firstChild; c; c = c.nextSibling) {
+      var type = c.nodeType;
+      wrapper = (type === 1)  // Element Node
+          ? (wrapper ? element : c)
+          : (type === 3)  // Text Node
+          ? (notWs.test(c.nodeValue) ? element : wrapper)
+          : wrapper;
+    }
+    return wrapper === element ? undefined : wrapper;
+  }
+
+  /** Given triples of [style, pattern, context] returns a lexing function,
+    * The lexing function interprets the patterns to find token boundaries and
+    * returns a decoration list of the form
+    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
+    * where index_n is an index into the sourceCode, and style_n is a style
+    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
+    * all characters in sourceCode[index_n-1:index_n].
+    *
+    * The stylePatterns is a list whose elements have the form
+    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
+    *
+    * Style is a style constant like PR_PLAIN, or can be a string of the
+    * form 'lang-FOO', where FOO is a language extension describing the
+    * language of the portion of the token in $1 after pattern executes.
+    * E.g., if style is 'lang-lisp', and group 1 contains the text
+    * '(hello (world))', then that portion of the token will be passed to the
+    * registered lisp handler for formatting.
+    * The text before and after group 1 will be restyled using this decorator
+    * so decorators should take care that this doesn't result in infinite
+    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
+    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
+    * '<script>foo()<\/script>', which would cause the current decorator to
+    * be called with '<script>' which would not match the same rule since
+    * group 1 must not be empty, so it would be instead styled as PR_TAG by
+    * the generic tag rule.  The handler registered for the 'js' extension would
+    * then be called with 'foo()', and finally, the current decorator would
+    * be called with '<\/script>' which would not match the original rule and
+    * so the generic tag rule would identify it as a tag.
+    *
+    * Pattern must only match prefixes, and if it matches a prefix, then that
+    * match is considered a token with the same style.
+    *
+    * Context is applied to the last non-whitespace, non-comment token
+    * recognized.
+    *
+    * Shortcut is an optional string of characters, any of which, if the first
+    * character, gurantee that this pattern and only this pattern matches.
+    *
+    * @param {Array} shortcutStylePatterns patterns that always start with
+    *   a known character.  Must have a shortcut string.
+    * @param {Array} fallthroughStylePatterns patterns that will be tried in
+    *   order if the shortcut ones fail.  May have shortcuts.
+    *
+    * @return {function (Object)} a
+    *   function that takes source code and returns a list of decorations.
+    */
+  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
+    var shortcuts = {};
+    var tokenizer;
+    (function () {
+      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
+      var allRegexs = [];
+      var regexKeys = {};
+      for (var i = 0, n = allPatterns.length; i < n; ++i) {
+        var patternParts = allPatterns[i];
+        var shortcutChars = patternParts[3];
+        if (shortcutChars) {
+          for (var c = shortcutChars.length; --c >= 0;) {
+            shortcuts[shortcutChars.charAt(c)] = patternParts;
+          }
+        }
+        var regex = patternParts[1];
+        var k = '' + regex;
+        if (!regexKeys.hasOwnProperty(k)) {
+          allRegexs.push(regex);
+          regexKeys[k] = null;
+        }
+      }
+      allRegexs.push(/[\0-\uffff]/);
+      tokenizer = combinePrefixPatterns(allRegexs);
+    })();
+
+    var nPatterns = fallthroughStylePatterns.length;
+
+    /**
+     * Lexes job.sourceCode and produces an output array job.decorations of
+     * style classes preceded by the position at which they start in
+     * job.sourceCode in order.
+     *
+     * @param {Object} job an object like <pre>{
+     *    sourceCode: {string} sourceText plain text,
+     *    basePos: {int} position of job.sourceCode in the larger chunk of
+     *        sourceCode.
+     * }</pre>
+     */
+    var decorate = function (job) {
+      var sourceCode = job.sourceCode, basePos = job.basePos;
+      /** Even entries are positions in source in ascending order.  Odd enties
+        * are style markers (e.g., PR_COMMENT) that run from that position until
+        * the end.
+        * @type {Array.<number|string>}
+        */
+      var decorations = [basePos, PR_PLAIN];
+      var pos = 0;  // index into sourceCode
+      var tokens = sourceCode.match(tokenizer) || [];
+      var styleCache = {};
+
+      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
+        var token = tokens[ti];
+        var style = styleCache[token];
+        var match = void 0;
+
+        var isEmbedded;
+        if (typeof style === 'string') {
+          isEmbedded = false;
+        } else {
+          var patternParts = shortcuts[token.charAt(0)];
+          if (patternParts) {
+            match = token.match(patternParts[1]);
+            style = patternParts[0];
+          } else {
+            for (var i = 0; i < nPatterns; ++i) {
+              patternParts = fallthroughStylePatterns[i];
+              match = token.match(patternParts[1]);
+              if (match) {
+                style = patternParts[0];
+                break;
+              }
+            }
+
+            if (!match) {  // make sure that we make progress
+              style = PR_PLAIN;
+            }
+          }
+
+          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
+          if (isEmbedded && !(match && typeof match[1] === 'string')) {
+            isEmbedded = false;
+            style = PR_SOURCE;
+          }
+
+          if (!isEmbedded) { styleCache[token] = style; }
+        }
+
+        var tokenStart = pos;
+        pos += token.length;
+
+        if (!isEmbedded) {
+          decorations.push(basePos + tokenStart, style);
+        } else {  // Treat group 1 as an embedded block of source code.
+          var embeddedSource = match[1];
+          var embeddedSourceStart = token.indexOf(embeddedSource);
+          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
+          if (match[2]) {
+            // If embeddedSource can be blank, then it would match at the
+            // beginning which would cause us to infinitely recurse on the
+            // entire token, so we catch the right context in match[2].
+            embeddedSourceEnd = token.length - match[2].length;
+            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
+          }
+          var lang = style.substring(5);
+          // Decorate the left of the embedded source
+          appendDecorations(
+              basePos + tokenStart,
+              token.substring(0, embeddedSourceStart),
+              decorate, decorations);
+          // Decorate the embedded source
+          appendDecorations(
+              basePos + tokenStart + embeddedSourceStart,
+              embeddedSource,
+              langHandlerForExtension(lang, embeddedSource),
+              decorations);
+          // Decorate the right of the embedded section
+          appendDecorations(
+              basePos + tokenStart + embeddedSourceEnd,
+              token.substring(embeddedSourceEnd),
+              decorate, decorations);
+        }
+      }
+      job.decorations = decorations;
+    };
+    return decorate;
+  }
+
+  /** returns a function that produces a list of decorations from source text.
+    *
+    * This code treats ", ', and ` as string delimiters, and \ as a string
+    * escape.  It does not recognize perl's qq() style strings.
+    * It has no special handling for double delimiter escapes as in basic, or
+    * the tripled delimiters used in python, but should work on those regardless
+    * although in those cases a single string literal may be broken up into
+    * multiple adjacent string literals.
+    *
+    * It recognizes C, C++, and shell style comments.
+    *
+    * @param {Object} options a set of optional parameters.
+    * @return {function (Object)} a function that examines the source code
+    *     in the input job and builds the decoration list.
+    */
+  function sourceDecorator(options) {
+    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
+    if (options['tripleQuotedStrings']) {
+      // '''multi-line-string''', 'single-line-string', and double-quoted
+      shortcutStylePatterns.push(
+          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
+           null, '\'"']);
+    } else if (options['multiLineStrings']) {
+      // 'multi-line-string', "multi-line-string"
+      shortcutStylePatterns.push(
+          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
+           null, '\'"`']);
+    } else {
+      // 'single-line-string', "single-line-string"
+      shortcutStylePatterns.push(
+          [PR_STRING,
+           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
+           null, '"\'']);
+    }
+    if (options['verbatimStrings']) {
+      // verbatim-string-literal production from the C# grammar.  See issue 93.
+      fallthroughStylePatterns.push(
+          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
+    }
+    var hc = options['hashComments'];
+    if (hc) {
+      if (options['cStyleComments']) {
+        if (hc > 1) {  // multiline hash comments
+          shortcutStylePatterns.push(
+              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
+              
+        } else {
+          // Stop C preprocessor declarations at an unclosed open comment
+//          shortcutStylePatterns.push(
+//              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
+//               null, '#']);
+        }
+        fallthroughStylePatterns.push(
+            [PR_STRING,
+             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
+             null]);
+      } else {
+        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
+      }
+    }
+    if (options['cStyleComments']) {
+      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
+      fallthroughStylePatterns.push(
+          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
+    }
+    if (options['regexLiterals']) {
+      /**
+       * @const
+       */
+      var REGEX_LITERAL = (
+          // A regular expression literal starts with a slash that is
+          // not followed by * or / so that it is not confused with
+          // comments.
+          '/(?=[^/*])'
+          // and then contains any number of raw characters,
+          + '(?:[^/\\x5B\\x5C]'
+          // escape sequences (\x5C),
+          +    '|\\x5C[\\s\\S]'
+          // or non-nesting character sets (\x5B\x5D);
+          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
+          // finally closed by a /.
+          + '/');
+      fallthroughStylePatterns.push(
+          ['lang-regex',
+           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
+           ]);
+    }
+
+    var types = options['types'];
+    if (types) {
+      fallthroughStylePatterns.push([PR_TYPE, types]);
+    }
+
+    var keywords = ("" + options['keywords']).replace(/^ | $/g, '');
+    if (keywords.length) {
+      fallthroughStylePatterns.push(
+          [PR_KEYWORD,
+           new RegExp('^(?:' + keywords.replace(/[\s,]+/g, '|') + ')\\b'),
+           null]);
+    }
+
+    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
+    fallthroughStylePatterns.push(
+        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
+        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
+        [PR_TYPE,        /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null],
+        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
+        [PR_LITERAL,
+         new RegExp(
+             '^(?:'
+             // A hex number
+             + '0x[a-f0-9]+'
+             // or an octal or decimal number,
+             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
+             // possibly in scientific notation
+             + '(?:e[+\\-]?\\d+)?'
+             + ')'
+             // with an optional modifier like UL for unsigned long
+             + '[a-z]*', 'i'),
+         null, '0123456789'],
+        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
+        [PR_PLAIN,       /^\\[\s\S]?/, null],
+        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
+
+    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
+  }
+
+  var decorateSource = sourceDecorator({
+        'keywords': ALL_KEYWORDS,
+        'hashComments': true,
+        'cStyleComments': true,
+        'multiLineStrings': true,
+        'regexLiterals': true
+      });
+
+  /**
+   * Given a DOM subtree, wraps it in a list, and puts each line into its own
+   * list item.
+   *
+   * @param {Node} node modified in place.  Its content is pulled into an
+   *     HTMLOListElement, and each line is moved into a separate list item.
+   *     This requires cloning elements, so the input might not have unique
+   *     IDs after numbering.
+   */
+  function numberLines(node, opt_startLineNum) {
+    var nocode = /(?:^|\s)nocode(?:\s|$)/;
+    var lineBreak = /\r\n?|\n/;
+  
+    var document = node.ownerDocument;
+  
+    var whitespace;
+    if (node.currentStyle) {
+      whitespace = node.currentStyle.whiteSpace;
+    } else if (window.getComputedStyle) {
+      whitespace = document.defaultView.getComputedStyle(node, null)
+          .getPropertyValue('white-space');
+    }
+    // If it's preformatted, then we need to split lines on line breaks
+    // in addition to <BR>s.
+    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
+  
+    var li = document.createElement('LI');
+    while (node.firstChild) {
+      li.appendChild(node.firstChild);
+    }
+    // An array of lines.  We split below, so this is initialized to one
+    // un-split line.
+    var listItems = [li];
+  
+    function walk(node) {
+      switch (node.nodeType) {
+        case 1:  // Element
+          if (nocode.test(node.className)) { break; }
+          if ('BR' === node.nodeName) {
+            breakAfter(node);
+            // Discard the <BR> since it is now flush against a </LI>.
+            if (node.parentNode) {
+              node.parentNode.removeChild(node);
+            }
+          } else {
+            for (var child = node.firstChild; child; child = child.nextSibling) {
+              walk(child);
+            }
+          }
+          break;
+        case 3: case 4:  // Text
+          if (isPreformatted) {
+            var text = node.nodeValue;
+            var match = text.match(lineBreak);
+            if (match) {
+              var firstLine = text.substring(0, match.index);
+              node.nodeValue = firstLine;
+              var tail = text.substring(match.index + match[0].length);
+              if (tail) {
+                var parent = node.parentNode;
+                parent.insertBefore(
+                    document.createTextNode(tail), node.nextSibling);
+              }
+              breakAfter(node);
+              if (!firstLine) {
+                // Don't leave blank text nodes in the DOM.
+                node.parentNode.removeChild(node);
+              }
+            }
+          }
+          break;
+      }
+    }
+  
+    // Split a line after the given node.
+    function breakAfter(lineEndNode) {
+      // If there's nothing to the right, then we can skip ending the line
+      // here, and move root-wards since splitting just before an end-tag
+      // would require us to create a bunch of empty copies.
+      while (!lineEndNode.nextSibling) {
+        lineEndNode = lineEndNode.parentNode;
+        if (!lineEndNode) { return; }
+      }
+  
+      function breakLeftOf(limit, copy) {
+        // Clone shallowly if this node needs to be on both sides of the break.
+        var rightSide = copy ? limit.cloneNode(false) : limit;
+        var parent = limit.parentNode;
+        if (parent) {
+          // We clone the parent chain.
+          // This helps us resurrect important styling elements that cross lines.
+          // E.g. in <i>Foo<br>Bar</i>
+          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
+          var parentClone = breakLeftOf(parent, 1);
+          // Move the clone and everything to the right of the original
+          // onto the cloned parent.
+          var next = limit.nextSibling;
+          parentClone.appendChild(rightSide);
+          for (var sibling = next; sibling; sibling = next) {
+            next = sibling.nextSibling;
+            parentClone.appendChild(sibling);
+          }
+        }
+        return rightSide;
+      }
+  
+      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
+  
+      // Walk the parent chain until we reach an unattached LI.
+      for (var parent;
+           // Check nodeType since IE invents document fragments.
+           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
+        copiedListItem = parent;
+      }
+      // Put it on the list of lines for later processing.
+      listItems.push(copiedListItem);
+    }
+  
+    // Split lines while there are lines left to split.
+    for (var i = 0;  // Number of lines that have been split so far.
+         i < listItems.length;  // length updated by breakAfter calls.
+         ++i) {
+      walk(listItems[i]);
+    }
+  
+    // Make sure numeric indices show correctly.
+    if (opt_startLineNum === (opt_startLineNum|0)) {
+      listItems[0].setAttribute('value', opt_startLineNum);
+    }
+  
+    var ol = document.createElement('OL');
+    ol.className = 'linenums';
+    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
+    for (var i = 0, n = listItems.length; i < n; ++i) {
+      li = listItems[i];
+      // Stick a class on the LIs so that stylesheets can
+      // color odd/even rows, or any other row pattern that
+      // is co-prime with 10.
+      li.className = 'L' + ((i + offset) % 10);
+      if (!li.firstChild) {
+        li.appendChild(document.createTextNode('\xA0'));
+      }
+      ol.appendChild(li);
+    }
+  
+    node.appendChild(ol);
+  }
+
+  /**
+   * Breaks {@code job.sourceCode} around style boundaries in
+   * {@code job.decorations} and modifies {@code job.sourceNode} in place.
+   * @param {Object} job like <pre>{
+   *    sourceCode: {string} source as plain text,
+   *    spans: {Array.<number|Node>} alternating span start indices into source
+   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
+   *       span.
+   *    decorations: {Array.<number|string} an array of style classes preceded
+   *       by the position at which they start in job.sourceCode in order
+   * }</pre>
+   * @private
+   */
+  function recombineTagsAndDecorations(job) {
+    var isIE = /\bMSIE\b/.test(navigator.userAgent);
+    var newlineRe = /\n/g;
+  
+    var source = job.sourceCode;
+    var sourceLength = source.length;
+    // Index into source after the last code-unit recombined.
+    var sourceIndex = 0;
+  
+    var spans = job.spans;
+    var nSpans = spans.length;
+    // Index into spans after the last span which ends at or before sourceIndex.
+    var spanIndex = 0;
+  
+    var decorations = job.decorations;
+    var nDecorations = decorations.length;
+    // Index into decorations after the last decoration which ends at or before
+    // sourceIndex.
+    var decorationIndex = 0;
+  
+    // Remove all zero-length decorations.
+    decorations[nDecorations] = sourceLength;
+    var decPos, i;
+    for (i = decPos = 0; i < nDecorations;) {
+      if (decorations[i] !== decorations[i + 2]) {
+        decorations[decPos++] = decorations[i++];
+        decorations[decPos++] = decorations[i++];
+      } else {
+        i += 2;
+      }
+    }
+    nDecorations = decPos;
+  
+    // Simplify decorations.
+    for (i = decPos = 0; i < nDecorations;) {
+      var startPos = decorations[i];
+      // Conflate all adjacent decorations that use the same style.
+      var startDec = decorations[i + 1];
+      var end = i + 2;
+      while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {
+        end += 2;
+      }
+      decorations[decPos++] = startPos;
+      decorations[decPos++] = startDec;
+      i = end;
+    }
+  
+    nDecorations = decorations.length = decPos;
+  
+    var decoration = null;
+    while (spanIndex < nSpans) {
+      var spanStart = spans[spanIndex];
+      var spanEnd = spans[spanIndex + 2] || sourceLength;
+  
+      var decStart = decorations[decorationIndex];
+      var decEnd = decorations[decorationIndex + 2] || sourceLength;
+  
+      var end = Math.min(spanEnd, decEnd);
+  
+      var textNode = spans[spanIndex + 1];
+      var styledText;
+      if (textNode.nodeType !== 1  // Don't muck with <BR>s or <LI>s
+          // Don't introduce spans around empty text nodes.
+          && (styledText = source.substring(sourceIndex, end))) {
+        // This may seem bizarre, and it is.  Emitting LF on IE causes the
+        // code to display with spaces instead of line breaks.
+        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
+        // space to appear at the beginning of every line but the first.
+        // Emitting an old Mac OS 9 line separator makes everything spiffy.
+        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
+        textNode.nodeValue = styledText;
+        var document = textNode.ownerDocument;
+        var span = document.createElement('SPAN');
+        span.className = decorations[decorationIndex + 1];
+        var parentNode = textNode.parentNode;
+        parentNode.replaceChild(span, textNode);
+        span.appendChild(textNode);
+        if (sourceIndex < spanEnd) {  // Split off a text node.
+          spans[spanIndex + 1] = textNode
+              // TODO: Possibly optimize by using '' if there's no flicker.
+              = document.createTextNode(source.substring(end, spanEnd));
+          parentNode.insertBefore(textNode, span.nextSibling);
+        }
+      }
+  
+      sourceIndex = end;
+  
+      if (sourceIndex >= spanEnd) {
+        spanIndex += 2;
+      }
+      if (sourceIndex >= decEnd) {
+        decorationIndex += 2;
+      }
+    }
+  }
+
+
+  /** Maps language-specific file extensions to handlers. */
+  var langHandlerRegistry = {};
+  /** Register a language handler for the given file extensions.
+    * @param {function (Object)} handler a function from source code to a list
+    *      of decorations.  Takes a single argument job which describes the
+    *      state of the computation.   The single parameter has the form
+    *      {@code {
+    *        sourceCode: {string} as plain text.
+    *        decorations: {Array.<number|string>} an array of style classes
+    *                     preceded by the position at which they start in
+    *                     job.sourceCode in order.
+    *                     The language handler should assigned this field.
+    *        basePos: {int} the position of source in the larger source chunk.
+    *                 All positions in the output decorations array are relative
+    *                 to the larger source chunk.
+    *      } }
+    * @param {Array.<string>} fileExtensions
+    */
+  function registerLangHandler(handler, fileExtensions) {
+    for (var i = fileExtensions.length; --i >= 0;) {
+      var ext = fileExtensions[i];
+      if (!langHandlerRegistry.hasOwnProperty(ext)) {
+        langHandlerRegistry[ext] = handler;
+      } else if (window['console']) {
+        console['warn']('cannot override language handler %s', ext);
+      }
+    }
+  }
+  function langHandlerForExtension(extension, source) {
+    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
+      // Treat it as markup if the first non whitespace character is a < and
+      // the last non-whitespace character is a >.
+      extension = /^\s*</.test(source)
+          ? 'default-markup'
+          : 'default-code';
+    }
+    return langHandlerRegistry[extension];
+  }
+  registerLangHandler(decorateSource, ['default-code']);
+  registerLangHandler(
+      createSimpleLexer(
+          [],
+          [
+           [PR_PLAIN,       /^[^<?]+/],
+           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
+           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
+           // Unescaped content in an unknown language
+           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
+           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
+           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
+           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
+           // Unescaped content in javascript.  (Or possibly vbscript).
+           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
+           // Contains unescaped stylesheet content
+           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
+           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
+          ]),
+      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
+  registerLangHandler(
+      createSimpleLexer(
+          [
+           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
+           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
+           ],
+          [
+           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
+           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
+           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
+           [PR_PUNCTUATION,  /^[=<>\/]+/],
+           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
+           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
+           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
+           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
+           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
+           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
+           ]),
+      ['in.tag']);
+  registerLangHandler(
+      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
+  registerLangHandler(sourceDecorator({
+          'keywords': CPP_KEYWORDS,
+          'hashComments': true,
+          'cStyleComments': true,
+          'types': C_TYPES
+        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
+  registerLangHandler(sourceDecorator({
+          'keywords': 'null,true,false'
+        }), ['json']);
+  registerLangHandler(sourceDecorator({
+          'keywords': CSHARP_KEYWORDS,
+          'hashComments': true,
+          'cStyleComments': true,
+          'verbatimStrings': true,
+          'types': C_TYPES
+        }), ['cs']);
+  registerLangHandler(sourceDecorator({
+          'keywords': JAVA_KEYWORDS,
+          'cStyleComments': true
+        }), ['java']);
+  registerLangHandler(sourceDecorator({
+          'keywords': SH_KEYWORDS,
+          'hashComments': true,
+          'multiLineStrings': true
+        }), ['bsh', 'csh', 'sh']);
+  registerLangHandler(sourceDecorator({
+          'keywords': PYTHON_KEYWORDS,
+          'hashComments': true,
+          'multiLineStrings': true,
+          'tripleQuotedStrings': true
+        }), ['cv', 'py']);
+  registerLangHandler(sourceDecorator({
+          'keywords': PERL_KEYWORDS,
+          'hashComments': true,
+          'multiLineStrings': true,
+          'regexLiterals': true
+        }), ['perl', 'pl', 'pm']);
+  registerLangHandler(sourceDecorator({
+          'keywords': RUBY_KEYWORDS,
+          'hashComments': true,
+          'multiLineStrings': true,
+          'regexLiterals': true
+        }), ['rb']);
+  registerLangHandler(sourceDecorator({
+          'keywords': JSCRIPT_KEYWORDS,
+          'cStyleComments': true,
+          'regexLiterals': true
+        }), ['js']);
+  registerLangHandler(sourceDecorator({
+          'keywords': COFFEE_KEYWORDS,
+          'hashComments': 3,  // ### style block comments
+          'cStyleComments': true,
+          'multilineStrings': true,
+          'tripleQuotedStrings': true,
+          'regexLiterals': true
+        }), ['coffee']);
+  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
+
+  function applyDecorator(job) {
+    var opt_langExtension = job.langExtension;
+
+    try {
+      // Extract tags, and convert the source code to plain text.
+      var sourceAndSpans = extractSourceSpans(job.sourceNode);
+      /** Plain text. @type {string} */
+      var source = sourceAndSpans.sourceCode;
+      job.sourceCode = source;
+      job.spans = sourceAndSpans.spans;
+      job.basePos = 0;
+
+      // Apply the appropriate language handler
+      langHandlerForExtension(opt_langExtension, source)(job);
+
+      // Integrate the decorations and tags back into the source code,
+      // modifying the sourceNode in place.
+      recombineTagsAndDecorations(job);
+    } catch (e) {
+      if ('console' in window) {
+        console['log'](e && e['stack'] ? e['stack'] : e);
+      }
+    }
+  }
+
+  /**
+   * @param sourceCodeHtml {string} The HTML to pretty print.
+   * @param opt_langExtension {string} The language name to use.
+   *     Typically, a filename extension like 'cpp' or 'java'.
+   * @param opt_numberLines {number|boolean} True to number lines,
+   *     or the 1-indexed number of the first line in sourceCodeHtml.
+   */
+  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
+    var container = document.createElement('PRE');
+    // This could cause images to load and onload listeners to fire.
+    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
+    // We assume that the inner HTML is from a trusted source.
+    container.innerHTML = sourceCodeHtml;
+    if (opt_numberLines) {
+      numberLines(container, opt_numberLines);
+    }
+
+    var job = {
+      langExtension: opt_langExtension,
+      numberLines: opt_numberLines,
+      sourceNode: container
+    };
+    applyDecorator(job);
+    return container.innerHTML;
+  }
+
+  function prettyPrint(opt_whenDone) {
+    function byTagName(tn) { return document.getElementsByTagName(tn); }
+    // fetch a list of nodes to rewrite
+    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
+    var elements = [];
+    for (var i = 0; i < codeSegments.length; ++i) {
+      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
+        elements.push(codeSegments[i][j]);
+      }
+    }
+    codeSegments = null;
+
+    var clock = Date;
+    if (!clock['now']) {
+      clock = { 'now': function () { return +(new Date); } };
+    }
+
+    // The loop is broken into a series of continuations to make sure that we
+    // don't make the browser unresponsive when rewriting a large page.
+    var k = 0;
+    var prettyPrintingJob;
+
+    var langExtensionRe = /\blang(?:uage)?-([\w.]+)(?!\S)/;
+    var prettyPrintRe = /\bprettyprint\b/;
+
+    function doWork() {
+      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
+                     clock['now']() + 250 /* ms */ :
+                     Infinity);
+      for (; k < elements.length && clock['now']() < endTime; k++) {
+        var cs = elements[k];
+        var className = cs.className;
+        if (className.indexOf('prettyprint') >= 0) {
+          // If the classes includes a language extensions, use it.
+          // Language extensions can be specified like
+          //     <pre class="prettyprint lang-cpp">
+          // the language extension "cpp" is used to find a language handler as
+          // passed to PR.registerLangHandler.
+          // HTML5 recommends that a language be specified using "language-"
+          // as the prefix instead.  Google Code Prettify supports both.
+          // http://dev.w3.org/html5/spec-author-view/the-code-element.html
+          var langExtension = className.match(langExtensionRe);
+          // Support <pre class="prettyprint"><code class="language-c">
+          var wrapper;
+          if (!langExtension && (wrapper = childContentWrapper(cs))
+              && "CODE" === wrapper.tagName) {
+            langExtension = wrapper.className.match(langExtensionRe);
+          }
+
+          if (langExtension) {
+            langExtension = langExtension[1];
+          }
+
+          // make sure this is not nested in an already prettified element
+          var nested = false;
+          for (var p = cs.parentNode; p; p = p.parentNode) {
+            if ((p.tagName === 'pre' || p.tagName === 'code' ||
+                 p.tagName === 'xmp') &&
+                p.className && p.className.indexOf('prettyprint') >= 0) {
+              nested = true;
+              break;
+            }
+          }
+          if (!nested) {
+            // Look for a class like linenums or linenums:<n> where <n> is the
+            // 1-indexed number of the first line.
+            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
+            lineNums = lineNums
+                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
+                  : false;
+            if (lineNums) { numberLines(cs, lineNums); }
+
+            // do the pretty printing
+            prettyPrintingJob = {
+              langExtension: langExtension,
+              sourceNode: cs,
+              numberLines: lineNums
+            };
+            applyDecorator(prettyPrintingJob);
+          }
+        }
+      }
+      if (k < elements.length) {
+        // finish up in a continuation
+        setTimeout(doWork, 250);
+      } else if (opt_whenDone) {
+        opt_whenDone();
+      }
+    }
+
+    doWork();
+  }
+
+   /**
+    * Find all the {@code <pre>} and {@code <code>} tags in the DOM with
+    * {@code class=prettyprint} and prettify them.
+    *
+    * @param {Function?} opt_whenDone if specified, called when the last entry
+    *     has been finished.
+    */
+  window['prettyPrintOne'] = prettyPrintOne;
+   /**
+    * Pretty print a chunk of code.
+    *
+    * @param {string} sourceCodeHtml code as html
+    * @return {string} code as html, but prettier
+    */
+  window['prettyPrint'] = prettyPrint;
+   /**
+    * Contains functions for creating and registering new language handlers.
+    * @type {Object}
+    */
+  window['PR'] = {
+        'createSimpleLexer': createSimpleLexer,
+        'registerLangHandler': registerLangHandler,
+        'sourceDecorator': sourceDecorator,
+        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
+        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
+        'PR_COMMENT': PR_COMMENT,
+        'PR_DECLARATION': PR_DECLARATION,
+        'PR_KEYWORD': PR_KEYWORD,
+        'PR_LITERAL': PR_LITERAL,
+        'PR_NOCODE': PR_NOCODE,
+        'PR_PLAIN': PR_PLAIN,
+        'PR_PUNCTUATION': PR_PUNCTUATION,
+        'PR_SOURCE': PR_SOURCE,
+        'PR_STRING': PR_STRING,
+        'PR_TAG': PR_TAG,
+        'PR_TYPE': PR_TYPE
+      };
+})();
diff --git a/preview/html/tools/certificate_manager.htm b/preview/html/tools/certificate_manager.htm
new file mode 100644 (file)
index 0000000..3ae189d
--- /dev/null
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Certificate Manager</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+  <h1>Certificate Manager</h1>
+<p align="left">Before installing your application on a device or submitting it to the Tizen Store, it must be signed with a certificate profile. The certificate ensures the source of the application and makes sure it has not been tampered with since its publication. A certificate profile consists of author and distributor certificates. They can be made in Certificate Manager and they can be managed in <strong>Tools &gt; Options &gt; Tizen &gt; Certification</strong>. The certificates can be created, edited, removed, and set as active in the Certificate Manager. The active certificates are used when packaging your application.</p>
+
+<p align="left">In Visual Studio Tools for Tizen, the certification can be defined in the following ways:</p>
+
+<ul>
+       <li><strong>Using the default certificates</strong>
+
+       <p>If you do not need to upload your application to the Tizen Store, you can use a default certificate and deploy your application in the Tizen Emulator. For using this option, set the certification as illustrated in the following figure.</p>
+
+       <p align="center" class="figure"><strong>Figure: Using the default certificates</strong></p>
+
+       <p align="center"><img alt="" height="125" src="../images/vstools_cert_default.png" width="943" /></p>
+       </li>
+       <li><strong>Using an existing certificate profile</strong>
+       <p>If you have used Tizen Studio and have already generated a certificate profile using the Tizen Certificate Manager, it can be imported in <strong>Tools &gt; Options &gt; Tizen &gt; Certification</strong>. If you create a Certificate Profile using the Tizen Certificate Manager, it is set as default automatically.</p>
+
+       <p align="center" class="figure"><strong>Figure: Using an existing certificate profile</strong></p>
+
+       <p align="center"><img alt="" height="272" src="../images/vstools_cert_profile1.png" width="940" /></p>
+       </li>
+       <li><strong>Using your own certificates</strong>
+       <p>If you already have author and distributor certificates, you can import them in <strong>Menu &gt; Tools &gt; Options &gt; Tizen &gt; Certification</strong>.</p>
+
+       <p align="center" class="figure"><strong>Figure: Using your own certificates</strong></p>
+
+       <p align="center"><img alt="" height="576" src="../images/vstools_cert_certificate1.png" width="940" /></p>
+       </li>
+</ul>
+
+<h2 id="certificate_profile">Certificate Profile and Certificates</h2>
+
+<p>The certificate profile consists of an author certificate and 1 or 2 distributor certificates. To distribute your application, you must create a certificate profile and sign the application with it:</p>
+
+<ul>
+       <li>An author certificate includes information about the author of the application. It is used to create an author signature, which ensures the integrity of the application from the author since the publication of the application.</li>
+       <li>A distributor certificate includes information about the distributor of the application, such as a store. It is used to create a distributor signature, which ensures the integrity of the application from the distributor since the distribution of the application.</li>
+</ul>
+
+<h2 id="creating_certificate">Creating the Certificate Profile</h2>
+
+<p>You can create a new certificate profile with the Certificate Manager. To run the Certificate Manager, in the&nbsp;Visual Studio menu, select <strong>Tools &gt; Tizen &gt; Tizen Certificate Manager</strong>.</p>
+
+<p align="center" class="figure"><strong>Figure: Certificate Manager</strong></p>
+
+<p align="center"><img alt="" height="174" src="../images/vstools_cert_menu.png" width="861" /></p>
+
+<p>In the Certificate Manager, click the plus icon (<img alt="Plus icon" src="../images/cert_reg_plus.png" />) to create a new profile.</p>
+
+<p align="center" class="figure"><strong>Figure: Creating a new certificate profile</strong></p>
+
+<p align="center"><img alt="Creating a new certificate profile" src="../images/cert_reg_create_new.png" /></p>
+
+<p>You can create a new certificate profile with the creation wizard.</p>
+
+<p align="center" class="figure"><strong>Figure: Creation wizard</strong></p>
+
+<p align="center"><img alt="Creation wizard" src="../images/cert_reg_creation_wizard.png" /></p>
+
+<h2 id="adding_author">Adding the Author and Distributor Certificates</h2>
+
+<p>To add author and distributor certificates:</p>
+
+<ol>
+       <li>Create a new author certificate or use a previously created author certificate.
+       <p align="center"><img alt="Author certificate" src="../images/cert_reg_author_cert.png" /></p>
+       </li>
+       <li>Fill in the required information.
+       <p align="center"><img alt="Author information" src="../images/cert_reg_author_info.png" /></p>
+       </li>
+       <li>You can use the default Tizen distributor certificate or another distributor certificate if you have one. In general, the default Tizen distributor certificate is used and you do not need to modify distributor certificates. You can also select the privilege level of the distributor certificate (in <a href="../../../org.tizen.training/html/native/details/sec_privileges_n.htm">native</a> and <a href="../../../org.tizen.training/html/web/details/sec_privileges_w.htm">Web</a> applications)).
+       <p align="center"><img alt="Distributor certificate" height="453" src="../images/cert_reg_dist_cert2.png" width="666" /></p>
+       </li>
+</ol>
+
+<h2 id="managing_certificate">Managing the Certificate Profile</h2>
+
+<p>You can also view, edit, and remove the certificate profiles you have created.</p>
+
+<p align="center" class="figure"><strong>Figure: Managing certificate profiles</strong></p>
+
+<p align="center"><img alt="Managing certificate profiles" src="../images/cert_reg_manage_cert.png" /></p>
+
+<p>To manage a certificate profile:</p>
+
+<ul>
+       <li>Click the info icon (<img alt="Info" src="../images/cert_reg_info.png" />) to see detailed information of the certificate.
+       <p align="center" class="figure"><strong>Figure: Certificate information</strong></p>
+
+       <p align="center"><img alt="" height="560" src="../images/vstools_cert_result.png" width="695" /></p>
+       </li>
+       <li>Click the pencil icon (<img alt="Pencil" src="../images/cert_reg_pencil.png" />) to change the author or distributor certificate of the selected certificate profile.
+       <p align="center" class="figure"><strong>Figure: Changing the certificate</strong></p>
+
+       <p align="center"><img alt="" height="394" src="../images/vstools_changing_cert.png" width="666" /></p>
+       </li>
+       <li>Click the trash icon (<img alt="Trash" src="../images/cert_reg_trash.png" />) to remove the selected certificate profile.
+       <p align="center" class="figure"><strong>Figure: Removing the certificate profile</strong></p>
+
+       <p align="center"><img alt="Removing the certificate profile" src="../images/cert_reg_remove_cert.png" /></p>
+       </li>
+       <li>The active profile is used when you package your application. Click the check icon to set the selected certificate profile as active. The active profile is also set in <strong>Tools &gt; Options &gt; Tizen &gt; Certification</strong> automatically.</li>
+</ul>
+
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/tools/device_manager.htm b/preview/html/tools/device_manager.htm
new file mode 100644 (file)
index 0000000..9517989
--- /dev/null
@@ -0,0 +1,265 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Device Manager</title>
+</head>
+
+<body onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+<div id="toc_border">
+<div id="toc">
+<p class="toc-title">Content</p>
+
+<ul class="toc">
+       <li><a href="#launching">Launching Tizen Device Manager</a></li>
+       <li><a href="#connectexploreview">Connection Explore View</a></li>
+</ul>
+</div>
+</div>
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+  <h1>Device Manager</h1>
+
+<p>Tizen Device Manager is a standalone tool that provides informations of connected Tizen device or emulators&nbsp;for application debugging.</p>
+
+<p>With this tool, you can manage&nbsp;the connected devices or emulators and&nbsp;you can also push or pull files from host PC to devices. Plus, the log viewer in device manager can help you to check logs from connected devices too.</p>
+
+<p>The features provided are as follows.</p>
+
+<ul>
+       <li>Connection Explore View</li>
+       <li>Log View</li>
+</ul>
+
+<h2 align="left">Launching Tizen Device Manager</h2>
+
+<p>You can launch&nbsp;the&nbsp;Tizen Device Manager with below action</p>
+
+<ul>
+       <li>From Visual Studio tools for Tizen, select&nbsp;<span>Tools &gt; Tizen &gt; Tizen Device Manager</span>.<br />
+       <br />
+       <span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img alt="" height="188" src="../images/cs_device_manager_menu.png" width="623" /></span><br />
+       &nbsp;</li>
+       <li>From File Explorer, select&nbsp;<span>%program files%/Tizen/SDK/tools/device-manager</span>.<br />
+       <span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img alt="" height="339" src="../images/cs_device_manager_explorer.png" width="700" /></span><br />
+       &nbsp;</li>
+       <li>From the command line, you can also launch the Tizen Device Manager.<br />
+       <span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img alt="" height="120" src="../images/cs_device_manager_prompt.png" width="900" /></span><br />
+       &nbsp;</li>
+</ul>
+
+<p>If you can select this tool with above, Tizen Device Manager will be shown.</p>
+
+<p><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img alt="" height="529" src="../images/cs_device_manager_first_screen.png" width="700" /></span></p>
+
+<h3>&nbsp;</h3>
+
+<h2>Connection Explore View</h2>
+
+<p>The connection explorer view shows the devices or emulators connected to the system.</p>
+
+<p>A list of connected devices is available after connecting a device or launching a Tizen emulator with a tree view.</p>
+
+<p>The connection explorer view provides the following actions for the connected devices:</p>
+
+<ul>
+       <li>Show a list of connected devices and connects devices for running and debugging the application.</li>
+       <li>Provide file operations on connected devices like as push or pull.</li>
+       <li>Send or receive files between the Project Explorer and Connection Explorer views by dragging and dropping.
+       <ul>
+               <li>showing folder/file list of connected device</li>
+               <li>Information of file (date/size)</li>
+               <li>create/delete/rename</li>
+               <li>upload/download</li>
+       </ul>
+       </li>
+       <li>Explore the file system on the connected devices.</li>
+       <li>Launch the Emulator Manager to handle the multiple instances of the emulator.<br />
+       &nbsp;</li>
+</ul>
+
+<p><img alt="" height="471" src="../images/cs_device_manager_connection_explorer_view.png" width="980" /><img src="../images/cs_device_manager_connection_explorer_view.png" /></p>
+
+<h3>Log View</h3>
+
+<p>The Log view helps you&nbsp;debug your application by capturing all the events logged by the platform and your application.</p>
+
+<p>The Log view shows the logs through the Tizen.Library.</p>
+
+<p>You can create a log message as below. Tizen.Library is referenced in your project. So, you can call Log function.</p>
+
+<pre class="prettyprint">
+using System;
+namespace XamarinApplication1.Tizen
+{
+    class Program : global::Xamarin.Forms.Platform.Tizen.FormsApplication
+    {
+        protected override void OnCreate()
+        {
+            // Using Tizen.Log directly
+            global::Tizen.Log.Debug("TEST", "Test Debug Message!");
+            global::Tizen.Log.Error("TEST", "Test Error Message!");
+            global::Tizen.Log.Fatal("TEST", "Test Fatal Message!");
+            global::Tizen.Log.Info("TEST", "Test Info Message!");
+            global::Tizen.Log.Verbose("TEST", "Test Verbose Message!");
+            global::Tizen.Log.Warn("TEST", "Test Warn Message!"); 
+
+            base.OnCreate();
+            LoadApplication(new App());
+        }
+
+        static void Main(string[] args)
+        {
+            var app = new Program();
+            global::Xamarin.Forms.Platform.Tizen.Forms.Init(app);
+            app.Run(args);
+        }
+    }
+}
+</pre>
+
+<p>&nbsp;</p>
+
+<h3>Adding and Removing the Log Tab</h3>
+
+<p>Adding a log tab:</p>
+
+<ol>
+       <li>Click the Add LogTab icon.</li>
+       <li>Type the tab name in the Name field and select a device in the Device list.</li>
+       <li>Type the search keywords in the Tag, Pid, and Message fields.</li>
+       <li>Click OK.</li>
+</ol>
+
+<p><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img alt="" height="283" src="../images/cs_device_manager_log_add_tab.png" width="397" /></span><br />
+<br />
+<img alt="" height="470" src="../images/cs_device_manager_log_added_tab.png" width="980" /></p>
+
+<p>Removing a log tab:</p>
+
+<ol>
+       <li>Click the log tab which you want to remove.</li>
+       <li>Click the Remove LogTab button.<br />
+       &nbsp;</li>
+</ol>
+
+<h3 id="DeviceManager-UnderstandingandFilteringLogs">Understanding and Filtering Logs</h3>
+
+<p>The log table consists of the following fields:</p>
+
+<ul>
+       <li>
+       <p>Time: log time</p>
+       </li>
+       <li>
+       <p>Level: priority level indicates the urgency of the log message</p>
+       </li>
+       <li>
+       <p>Pid: process ID</p>
+       </li>
+       <li>
+       <p>Tid: thread ID</p>
+       </li>
+       <li>
+       <p>Tag: identification of the log message source</p>
+       </li>
+       <li>
+       <p>Message: log message</p>
+       </li>
+</ul>
+
+<p>In the log table, you have the following options and functions:</p>
+
+<ul>
+       <li>
+       <p>Log level filtering option</p>
+
+       <ul>
+               <li>
+               <p>In the Log view, you can filter the log messages using the V (verbose), D (debug), I (info), W (warning), E (error), and F (fatal) buttons to show specific log messages suitable to the selected type.</p>
+               </li>
+       </ul>
+       </li>
+       <li>Keyword filtering option
+       <ul>
+               <li>
+               <p>You can filter the log messages by selecting one of the PID, Tag, and Message options, or entering keywords at&nbsp;the search box which is in the bottom of the log view. The keywords must be separated by a space and a comma.<br />
+               &nbsp;</p>
+               </li>
+       </ul>
+       </li>
+       <li>Scroll lock
+       <ul>
+               <li>The log table shows the latest logs by default. This can make you uncomfortable when checking the specified log. Enable scroll lock&nbsp;when checking a specified log.<br />
+               &nbsp;</li>
+       </ul>
+       </li>
+       <li>
+       <p>Clearing the table</p>
+
+       <ul>
+               <li>
+               <p>You can remove all log messages from the log tab by clicking the clear the log icon.</p>
+               </li>
+       </ul>
+       </li>
+       <li>
+       <p>Exporting logs to a file</p>
+
+       <ul>
+               <li>You can export the current log messages in the log tab and save them as a log file by clicking the export the log icon.</li>
+       </ul>
+       </li>
+</ul>
+
+<p>&nbsp;</p>
+
+<ul>
+       <li>
+       <p>Export the log<br />
+       <br />
+       <span class="confluence-embedded-file-wrapper"><img alt="" height="470" src="../images/cs_device_manager_log_export.png" width="980" /></span><br />
+       &nbsp;</p>
+       </li>
+</ul>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/tools/emulator_control_panel.htm b/preview/html/tools/emulator_control_panel.htm
new file mode 100644 (file)
index 0000000..ec757b0
--- /dev/null
@@ -0,0 +1,597 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Emulator Control Panel</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+  <h1>Emulator Control Panel</h1>
+
+<p>Before deploying your application, it is important that you test it in an environment similar to a real device.</p>
+
+<p>You can run the application in the emulator, and test a variety of user scenarios, such as network access, audio input and out, and text messages. You can control the application in the emulator with mouse and keyboard buttons, like if you used an actual device.</p>
+
+<p>During the run, you can use the Emulator Control Panel to inject events for several system options that the actual device provides. For example, by manipulating the optional battery, you can simulate the application in different charge environments.</p>
+
+<p>The emulator controls consist of internal and external parts:</p>
+
+<ul>
+       <li>The <strong><strong><strong>HOME</strong></strong></strong>, <strong><strong><strong>Volume control</strong></strong></strong> and <strong><strong><strong>Back</strong></strong></strong> buttons, for example, are external parts controlling the device from the outside.
+
+       <p>In the emulator, the external parts are called the <strong><strong><strong>emulator control keys and menu</strong></strong></strong>.</p>
+       </li>
+       <li>Battery level and screen brightness, for example, are internal parts controlling the device from the inside. In the emulator, the internal parts are called the <strong><strong><strong>Emulator Control Panel</strong></strong></strong>.</li>
+</ul>
+
+<h2 id="controls">Using the Control Keys and Context Menu</h2>
+
+<p>The control keys are visible on the emulator when you start it. To access the context menu, right-click the emulator.&nbsp;The following figure illustrates the&nbsp;TV and mobile&nbsp;emulator.</p>
+
+<p align="center" class="figure"><strong><strong><strong>Figure:&nbsp;TV and mobile&nbsp;emulator</strong></strong></strong></p>
+
+<p align="center" class="figure"><strong><img alt="" height="281" src="../images/em_skin.png" width="750" /></strong></p>
+
+<div class="note"><strong><strong>Note</strong></strong>You can create a custom resolution emulator by using the <a href="../../../org.tizen.studio/html/common_tools/emulator_manager.htm#control"><u><font color="#000080">Emulator Manager CLI</font></u></a>, and launch it with the&nbsp;TV and mobile&nbsp;skin. It is not guaranteed that all the applications are correctly shown in the custom resolution.</div>
+
+<h3 id="controlkeys" name="controlkeys">Control Keys</h3>
+
+<p>The following hardware keys are available on the emulator:</p>
+
+<ul>
+       <li><strong><strong><strong>Menu</strong></strong></strong>
+
+       <p>When tapped, it opens a list of options available for the current screen. This button can be used to delete an application on the TV platform.</p>
+       </li>
+       <li><strong><strong><strong>Home</strong></strong></strong>
+       <p>When long-pressed, the Task switcher application opens as in a real device.</p>
+       </li>
+       <li><strong><strong><strong>Back</strong></strong></strong>
+       <p>When tapped, the emulator returns to the previous screen.</p>
+       </li>
+       <li><strong><strong><strong>Power</strong></strong></strong>
+       <p>You can power off the display by tapping the <strong><strong><strong>Power</strong></strong></strong> key in most general situations. Sometimes, the display does not power off though you tap the <strong><strong><strong>Power</strong></strong></strong> key. This is to guarantee the operation of a current application, such as the Stopwatch in the Clock application. If you tap the <strong><strong><strong>Power</strong></strong></strong> or <strong><strong><strong>Home</strong></strong></strong> key again, the display is powered on.</p>
+       </li>
+       <li><strong><strong><strong>Volume Up</strong></strong></strong> and <strong><strong><strong>Volume Down</strong></strong></strong> (mobile only)
+       <p>When tapped, the volume changes accordingly.</p>
+       </li>
+       <li>
+       <p><strong><strong>Arrow keys </strong></strong>(TV only)</p>
+
+       <p>When tapped, the cursor or selection moves to the desired direction.</p>
+       </li>
+       <li>
+       <p><strong><strong>OK </strong></strong>(TV only)</p>
+
+       <p>When tapped, the item is selected.</p>
+       </li>
+</ul>
+
+<h3 name="menu">&nbsp;</h3>
+
+<h3 id="menu" name="menu">Context Menu</h3>
+
+<p>You can access the context menu by right-clicking the emulator. In the menu, you can select:</p>
+
+<ul>
+       <li>Emulator name (the top row in the menu)
+       <p>The <strong><strong><strong>Detailed Info</strong></strong></strong> window is displayed, showing the <strong><strong><strong>Shortcut Info</strong></strong></strong> and <strong><strong><strong>VM Info</strong></strong></strong> tabs. The <strong><strong><strong>Shortcut Info</strong></strong></strong> tab lists the <a href="../../../org.tizen.studio/html/common_tools/keyboard_shortcuts.htm#emulator"><u><font color="#000080">emulator keyboard shortcuts</font></u></a> and the <strong><strong><strong>VM Info</strong></strong></strong> tab defines the virtual machine details.</p>
+
+       <p>In Mac OS® X: To use the emulator keyboard shortcuts, open the Keyboard Setting dialog and switch your Mac function keys option to work as standard function keys.</p>
+
+       <p align="center" class="Table"><strong><strong><strong>Table: VM Info</strong></strong></strong></p>
+
+       <table border="1">
+               <tbody>
+                       <tr>
+                               <th>Feature</th>
+                               <th>Description</th>
+                       </tr>
+                       <tr>
+                               <td>VM Name</td>
+                               <td>VM name</td>
+                       </tr>
+                       <tr>
+                               <td>Skin Name</td>
+                               <td>Skin name</td>
+                       </tr>
+                       <tr>
+                               <td>CPU Arch</td>
+                               <td>CPU architecture</td>
+                       </tr>
+                       <tr>
+                               <td>RAM Size</td>
+                               <td>RAM size (in MB)</td>
+                       </tr>
+                       <tr>
+                               <td>Display</td>
+                               <td>Target display resolution (in DPI; Dots Per Inch)</td>
+                       </tr>
+                       <tr>
+                               <td>Network connection</td>
+                               <td>NAT (Network Address Translation) or Bridged</td>
+                       </tr>
+                       <tr>
+                               <td>CPU Virtualization</td>
+                               <td>Whether hardware virtualization is supported</td>
+                       </tr>
+                       <tr>
+                               <td>GPU Virtualization</td>
+                               <td>Whether GPU virtualization is supported</td>
+                       </tr>
+                       <tr>
+                               <td>Platform Image Version</td>
+                               <td>Version of the used platform image</td>
+                       </tr>
+                       <tr>
+                               <td>Platform Image File</td>
+                               <td>Location of the used platform image</td>
+                       </tr>
+                       <tr>
+                               <td>Directory Sharing</td>
+                               <td>Whether host directory sharing is used</td>
+                       </tr>
+                       <tr>
+                               <td>File Shared Path</td>
+                               <td>Path to the shared host directory</td>
+                       </tr>
+                       <tr>
+                               <td>Kernel Log File</td>
+                               <td>Kernel log file path</td>
+                       </tr>
+                       <tr>
+                               <td>Emulator Log File</td>
+                               <td>Emulator (Qemu) log file path</td>
+                       </tr>
+                       <tr>
+                               <td>Emulator Version</td>
+                               <td>Tizen&nbsp;Emulator version</td>
+                       </tr>
+               </tbody>
+       </table>
+       </li>
+       <li><strong><strong><strong>Always On Top</strong></strong></strong>
+       <p>Select this option to keep the emulator window on top of other windows.</p>
+       </li>
+       <li><strong><strong><strong>Rotate </strong></strong></strong>(mobile only)
+       <p>Select either <strong><strong><strong>Portrait</strong></strong></strong>, <strong><strong><strong>Landscape</strong></strong></strong>, <strong><strong><strong>Reverse Portrait</strong></strong></strong>, or <strong><strong><strong>Reverse Landscape</strong></strong></strong> as the orientation of the emulator.</p>
+       </li>
+       <li><strong><strong><strong>Scale</strong></strong></strong> (mobile only)
+       <p>Scale the size of the emulator between 1x, 1/2x (default), 3/4x, and 1/4x.</p>
+       </li>
+       <li><strong><strong><strong>Advanced &gt; Controller</strong></strong></strong>
+       <p>Show or hide the controller window.</p>
+
+       <div class="note"><strong><strong><strong>Note</strong></strong></strong>The Controller menu is not supported in the profile-specific skin.</div>
+       </li>
+       <li><strong><strong><strong>Advanced &gt; Screenshot</strong></strong></strong>
+       <p>Capture a screenshot of the emulator.</p>
+       </li>
+       <li><strong><strong><strong>Advanced &gt; About</strong></strong></strong>
+       <p>Display the emulator version and build time.</p>
+       </li>
+       <li><strong><strong><strong>Advanced &gt; Force Reboot</strong></strong></strong>
+       <p>Force the emulator to reboot. Since force rebooting the emulator can cause problems, use the reboot option from the SDB shell to reboot the emulator. Use <strong><strong><strong>Force Reboot</strong></strong></strong> only when absolutely necessary.</p>
+       </li>
+       <li><strong><strong><strong>Advanced &gt; Force Close</strong></strong></strong>
+       <p>Force the emulator to exit. Since force stopping the emulator can cause problems, use the <strong><strong><strong>Close</strong></strong></strong> option to exit the emulator. Use <strong><strong><strong>Force Close</strong></strong></strong> only when absolutely necessary.</p>
+       </li>
+       <li><strong><strong><strong>Shell</strong></strong></strong>
+       <p>Open a Smart Development Bridge (SDB) shell command window.</p>
+       </li>
+       <li><strong><strong><strong>Control Panel</strong></strong></strong>
+       <p>Help to control or monitor the state of the emulator dynamically.</p>
+       </li>
+       <li><strong><strong><strong>Close</strong></strong></strong>
+       <p>Exit the emulator.</p>
+       </li>
+</ul>
+
+<div class="note"><strong><strong><strong>Note</strong></strong></strong>In Ubuntu, you must change a global GNOME setting to view the menu icons:
+
+<ol>
+       <li>In the command console, execute the <code>gconf-editor</code> command.</li>
+       <li>In the tree, navigate to <code>desktop &gt; gnome &gt; interface</code>.</li>
+       <li>Enable the <code>menus_have_icons</code> option.</li>
+</ol>
+</div>
+
+<h2 id="panel">Using the Control Panel</h2>
+
+<p>With the Emulator Control Panel, you can inject system events and perform related tasks.</p>
+
+<p align="center" class="figure"><span>Figure: Emulator Control Panel</span></p>
+
+<p align="center"><span><img alt="Emulator Control Panel" src="../images/emulator_control_panel2.png" /></span></p>
+
+<p>The control panel consists of 3 layers:</p>
+
+<ul>
+       <li><strong><strong><strong>Dialog</strong></strong></strong>, which is the main application window, shows a list of testable device cards.</li>
+       <li><strong><strong><strong>Card</strong></strong></strong>, which represents each device, shows the representative device status. By clicking a card, you can inject an event directly or open <strong><strong><strong>Popup</strong></strong></strong> to do it.</li>
+       <li><strong><strong><strong>Popup</strong></strong></strong> displays testable events for each device.</li>
+</ul>
+
+<p align="center" class="figure"><strong><strong><strong>Figure: Emulator Control Panel Layers</strong></strong></strong></p>
+
+<p align="center"><strong><img alt="" height="539" src="../images/emulator_control_panel2-1.png" width="1360" /></strong></p>
+
+<p>To open the control panel:</p>
+
+<ol>
+       <li>Launch the emulator.</li>
+       <li>Right-click the emulator and select <strong><strong><strong>Control Panel</strong></strong></strong>.</li>
+</ol>
+
+<p align="center" class="figure"><strong><strong><strong>Figure: Opening the control panel</strong></strong></strong></p>
+
+<p align="center"><strong><img alt="Opening the control panel" height="668" src="../images/emulator_control_panel_open2.png" width="515" /></strong></p>
+
+<p>The main features of the Emulator Control Panel are described in the following sections.</p>
+
+<h3>Controlling the Network Setting</h3>
+
+<p>You can control the user network.</p>
+
+<p>To lose the network connection, set the link status to off. To forward a remote or local port to an inside port of the emulator, enter values in text boxes, and click <strong><strong><strong>Apply</strong></strong></strong>.</p>
+
+<p align="center" class="figure"><span>Figure: Network Setting</span></p>
+
+<p align="center"><span><img alt="" height="539" src="../images/emulator_control_panel_network.png" width="1360" /></span></p>
+
+<h3>Mounting a Host Directory</h3>
+
+<p>The specified host directory is mounted to <code>/mnt/host</code> to share resources. Therefore, file transfer is possible through the host directory sharing feature without using the SDB utility.</p>
+
+<p align="center" class="figure"><span>Figure: Host Directory Sharing</span></p>
+
+<p align="center"><span><img alt="" height="539" src="../images/emulator_control_panel_hds.png" width="1360" /></span></p>
+
+<h3>Providing Device Data</h3>
+
+<p>The control panel can be used to simulate device data, such as the battery level, adding or removing a earjack (headset) or USB device, setting RSSI (remote signal strength indicator) information, and attaching and detaching the SD card:</p>
+
+<ul>
+       <li>In the <strong><strong><strong>Battery</strong></strong></strong> card, set the battery level using the <strong><strong><strong>Level</strong></strong></strong> slider. To set the charger status to connected or disconnected, select the appropriate <strong><strong><strong>Charger</strong></strong></strong> radio button.</li>
+       <li>In the <strong><strong><strong>EarJack</strong></strong></strong> card, select the earjack setting:
+       <ul>
+               <li><strong><strong><strong>3 Wire</strong></strong></strong></li>
+               <li><strong>4 Wire</strong></li>
+               <li><strong>Disconnect</strong></li>
+       </ul>
+       </li>
+       <li>In the <strong><strong><strong>USB</strong></strong></strong>&nbsp;card, set the USB device setting to the connected or disconnected state.</li>
+       <li>In the <strong><strong><strong>RSSI</strong></strong></strong> card, set the RSSI information level using the <strong><strong><strong>Level</strong></strong></strong> slider.</li>
+       <li>In the <strong><strong><strong>SD Card</strong></strong></strong>&nbsp;card, select the <strong><strong><strong>4G</strong></strong></strong>, <strong><strong><strong>8G</strong></strong></strong>, <strong><strong><strong>16G</strong></strong></strong>, or <strong><strong><strong>32G</strong></strong></strong> SD card and attach it to the emulator at runtime.
+       <div class="note"><strong><strong><strong>Note</strong></strong></strong>The same SD card cannot be attached to multiple emulators at the same time.</div>
+       </li>
+</ul>
+
+<p>The device information set using the control panel is reflected on the indicator bar of the device.</p>
+
+<h3>Providing Location Data</h3>
+
+<p>The control panel can be used to provide imitated responses to location data requests by loading GPS log files, manually entering location coordinates, or injecting markers directly on the map in the <strong><strong><strong>Location</strong></strong></strong> tab:</p>
+
+<ul>
+       <li>Loading a GPS log file
+       <p>In the <strong><strong><strong>Log</strong></strong></strong> section, select the pre-logged GPS data file (NMEA183 format) and click <strong><strong><strong>Inject Log</strong></strong></strong> to send the location data to the emulator.</p>
+       </li>
+       <li>Manually entering location coordinates
+       <p>In the <strong><strong><strong>Manual</strong></strong></strong> section, enter the coordinates and click <strong><strong><strong>Inject Location</strong></strong></strong> to send the location data to the emulator. The range of the latitude, longitude, altitude, and horizontal accuracy is from -90 to 90, -180 to 180, -300 to 100000, and 0 to 100000, respectively.</p>
+       </li>
+       <li>Injecting markers on the map
+       <p>In the <strong><strong><strong>Map</strong></strong></strong> section, right-click the desired map locations and click <strong><strong><strong>Inject Markers</strong></strong></strong> to send the location data to the emulator.</p>
+       </li>
+</ul>
+
+<h3>Providing NFC Data</h3>
+
+<p>The control panel can be used to test the near-field communication (NFC) features, such as NFC data exchange format (NDEF) events, NFC tag detection, and peer-to-peer (P2P) data connections in the <strong><strong><strong>NFC</strong></strong></strong> tab.</p>
+
+<div class="note"><strong><strong><strong>Note</strong></strong></strong>The control panel only sends NFC-related events to the emulator. There is no actual information exchange between the control panel and emulator. Therefore, for features such as writing information to an NFC tag, the emulator simply displays a success message.</div>
+
+<ul>
+       <li>Creating NDEF messages
+       <p>An NDEF message contains one or more NDEF records. In the <strong><strong><strong>NDEF Message</strong></strong></strong> section:</p>
+
+       <ol>
+               <li>Select the record type name format.</li>
+               <li>Enter the record type name, ID, and payload.</li>
+               <li>Click <strong><strong><strong>Add</strong></strong></strong>.</li>
+       </ol>
+
+       <p>You can add multiple NDEF records, as required, in the NDEF message.</p>
+
+       <p>Click <strong><strong><strong>Edit</strong></strong></strong> or <strong><strong><strong>Remove</strong></strong></strong> to modify or delete a selected record.</p>
+       </li>
+       <li>Attaching and detaching NFC tags
+       <p>In the <strong><strong><strong>NFC Tag</strong></strong></strong> section:</p>
+
+       <ol>
+               <li>Select the tag type.</li>
+               <li>Click <strong><strong><strong>Tag Attach</strong></strong></strong>.
+               <p>If the NDEF record list is not empty, an NDEF message is created using this list and the attach message is sent to the emulator with the NDEF message.</p>
+               </li>
+               <li>When the tag operation is finished, click <strong><strong><strong>Tag Detach</strong></strong></strong>.</li>
+       </ol>
+       </li>
+       <li>Creating a P2P data Connection
+       <p>In the <strong><strong><strong>Peer to Peer</strong></strong></strong> section:</p>
+
+       <ul>
+               <li>To send the emulator the discovered state of the new device, click <strong><strong><strong>P2P Discovered</strong></strong></strong>.</li>
+               <li>To send the emulator an NDEF message, click <strong><strong><strong>P2P Send</strong></strong></strong>.</li>
+               <li>To send the emulator the detached state of the connected device, click <strong><strong><strong>P2P Detached</strong></strong></strong>.</li>
+       </ul>
+       </li>
+</ul>
+
+<h3>Providing Sensor Data</h3>
+
+<p>In the control panel, you can model your actions, such as shaking, throwing, and tilting the device for the emulator instance. In addition, you can generate a single sensor event on the instance, or inject sequences of 3-axis sensor events to the instance.</p>
+
+<p>To control 3-axis sensors, select <strong><strong><strong>Event Injector &gt; Sensor &gt; 3-Axis Sensor</strong></strong></strong>. The <strong><strong><strong>3-Axis Sensor</strong></strong></strong> tab consist of 4 subtabs, in which you can adjust the acceleration, magnetic, and gyro sensors of the emulator instance. In the <strong><strong><strong>GUI</strong></strong></strong> subtab, you can intuitively adjust various sensor data by using 3D graphics. In the other subtabs, you can inject a single event into the individual sensor, or use the sensor data files to inject sequences of events into the sensor.</p>
+
+<ul>
+       <li>GUI
+       <p>In the <strong><strong><strong>GUI</strong></strong></strong> subtab, you can select an active sensor and move the 3D model of the emulator instance by the 3 axis sliders or direction buttons (<strong><strong><strong>Portrait</strong></strong></strong>, <strong><strong><strong>Landscape</strong></strong></strong>, <strong><strong><strong>Reverse Portrait</strong></strong></strong>, and <strong><strong><strong>Reverse Landscape</strong></strong></strong>). The instance monitor displays the acceleration, magnetic, and gyro values.</p>
+
+       <p>To better control the movement, select the <strong><strong><strong>With axis</strong></strong></strong> checkbox to see the axes in the emulator image. You can also fix the Y or Z axis by selecting the <strong><strong><strong>X/Z</strong></strong></strong> or <strong><strong><strong>X/Y</strong></strong></strong> radio button, respectively. To change the emulator accelerator value in the direction of the movement, select the <strong><strong><strong>Move</strong></strong></strong> radio button.</p>
+       </li>
+       <li>Acceleration
+       <p>You can control the acceleration of the instance along the coordinate axes. When the instance is standing, the acceleration value of the Y axis is -1 g as gravitational acceleration. By using the sliders in the <strong><strong><strong>Acceleration</strong></strong></strong> subtab, you can control the acceleration 3-axis values from -2 g to 2 g.</p>
+       </li>
+       <li>Magnetic
+       <p>You can control the magnetic values of the instance along the coordinate axes. When the instance is standing, the magnetic 3-axis tesla values (azimuth 0) are set for the North. By using the sliders in the <strong><strong><strong>Magnetic</strong></strong></strong> subtab, you can control the magnetic 3-axis values from -2000 uT to 2000 uT.</p>
+       </li>
+       <li>Gyro
+       <p>You can control the gyro (rotation angle per second) of the instance along the coordinate axes. By using the sliders in the <strong><strong><strong>Gyro</strong></strong></strong> subtab, you can control the gyro 3-axis values from -573 deg/s to 573 deg/s.</p>
+       </li>
+       <li>Event file
+       <p>The event file consists of predefined events. It is written in ASCII. By loading the event file in the <strong><strong><strong>Acceleration</strong></strong></strong>, <strong><strong><strong>Magnetic</strong></strong></strong>, or <strong><strong><strong>Gyro</strong></strong></strong> subtab, you can replay a sequence of predefined events. You can also add multiple event files to replay. The format of each line in the event file is:</p>
+
+       <pre class="prettyprint">
+timestamp, x, y, z
+</pre>
+
+       <p>When you add the event files and click <strong><strong><strong>Start</strong></strong></strong>, the predefined events are injected at their specified relative timestamp. The timestamp unit is 0.01 seconds. Some events can be discarded, if they exceed certain limits of performance, resource, or logic. When you add multiple event files, the files are executed in sequence. You can also repeat the replay.</p>
+       </li>
+</ul>
+
+<p>In the <strong><strong><strong>Event Injector &gt; Sensor</strong></strong></strong> tab, you can control other sensors, such as light, proximity, pressure, ultraviolet, and HRM sensors:</p>
+
+<ul>
+       <li>To control the light sensor, set the Lux value in the <strong><strong><strong>Light</strong></strong></strong> tab. The range of this value is from 0 Lux to 65635 Lux.
+
+       <p>If you set brightness as <strong><strong><strong>auto</strong></strong></strong>, the display is changed based on the injected light value.</p>
+       </li>
+       <li>To control the proximity sensor, set it on or off in the <strong><strong><strong>Proximity</strong></strong></strong> tab.</li>
+       <li>To control the pressure sensor, set the hPa (Hectopascal) value in the <strong><strong><strong>Pressure</strong></strong></strong> tab. The range of this value is from 260 hPa to 1260 hPa.</li>
+       <li>To control the ultraviolet sensor, use the slider in the <strong><strong><strong>Ultraviolet</strong></strong></strong> tab. The unit is UV index and the range of this value is from 0 to 15.0.</li>
+       <li>To control the HRM (Heart Rate Monitor) sensor, use the sliders in the <strong><strong><strong>Heart Rate Monitor</strong></strong></strong> tab. You can set the <strong><strong><strong>Heart Rate</strong></strong></strong> value between 0 and 220, and the <strong><strong><strong>Peek-to-Peek</strong></strong></strong> value between 0 and 5000 (in milliseconds).</li>
+</ul>
+
+<h3>Providing Telephony Features</h3>
+
+<p>The control panel can be used to generate incoming calls and messages in the <strong><strong><strong>Telephony</strong></strong></strong> tab.</p>
+
+<ul>
+       <li>Generating incoming calls
+       <p>Incoming calls are generated in the <strong><strong><strong>Event Injector &gt; Telephony &gt; Call</strong></strong></strong> tab.</p>
+
+       <div class="note"><strong><strong><strong>Note</strong></strong></strong>A Mobile Termination (MT) call is made from the Event Injector view to the emulator. A Mobile Origination (MO) call is made from the emulator to the Event Injector view using the phone application of the emulator.</div>
+
+       <p>To make an MT call:</p>
+
+       <ol>
+               <li>Enter the phone number you want to imitate the call from.</li>
+               <li>Click <strong><strong><strong>Connect</strong></strong></strong>.</li>
+               <li>To hide the phone number on the emulator, select the <strong><strong><strong>Hidden</strong></strong></strong> option.
+               <p>The caller ID on the emulator is set to "Unknown".</p>
+               </li>
+       </ol>
+
+       <p>To make an MO call, use the emulator's phone application:</p>
+
+       <ol>
+               <li>To ready the emulator for the connection, click <strong><strong><strong>Alert</strong></strong></strong>.</li>
+               <li>To ready the emulator for the call, click <strong><strong><strong>Connect</strong></strong></strong>.</li>
+       </ol>
+       </li>
+       <li>Generating messages
+       <p>SMS messages are generated in the <strong><strong><strong>Event Injector &gt; Telephony &gt; Messaging</strong></strong></strong> tab. After sending a message, your application waits for the asynchronous send status message. You can generate this status report for SMS messages using the same <strong><strong><strong>Messaging</strong></strong></strong> tab.</p>
+
+       <p>To generate an SMS message:</p>
+
+       <ol>
+               <li>Enter the sender phone number you want to imitate.</li>
+               <li>Enter the message body text and click <strong><strong><strong>Send Msg</strong></strong></strong>.</li>
+       </ol>
+
+       <p>To generate status reports, set the sending status value for the SMS message:</p>
+
+       <ul>
+               <li><strong><strong><strong>SMS OK</strong></strong></strong> (Success)</li>
+               <li><strong><strong><strong>SMS Not Available</strong></strong></strong></li>
+       </ul>
+
+       <p>You can also generate MMS message status reports. To generate MMS status reports, set the sending status value for the MMS message:</p>
+
+       <ul>
+               <li><strong><strong><strong>MMS OK</strong></strong></strong> (Success)</li>
+               <li><strong><strong><strong>MMS Failure</strong></strong></strong></li>
+       </ul>
+       </li>
+</ul>
+
+<h3>Providing Memory Data</h3>
+
+<p>The control panel can be used to simulate low memory status in the <strong><strong><strong>Memory</strong></strong></strong> tab.</p>
+
+<p>Set the low memory status using the radio buttons:</p>
+
+<ul>
+       <li><strong><strong><strong>Hard-Warning</strong></strong></strong> (40 MB and under)</li>
+       <li><strong><strong><strong>Soft-Warning</strong></strong></strong> (60 MB and under)</li>
+       <li><strong><strong><strong>Normal</strong></strong></strong> (sufficient)</li>
+</ul>
+
+<h3>Control Panel Features on Different Profiles</h3>
+
+<p>The following table lists the control panel features and their availability on different profiles.</p>
+
+<p align="center" class="Table"><strong><strong><strong>Table: Control panel features</strong></strong></strong></p>
+
+<table>
+       <tbody>
+               <tr>
+                       <th colspan="2">Feature</th>
+                       <th>Mobile</th>
+                       <th>TV</th>
+                       <th>Description</th>
+               </tr>
+               <tr>
+                       <td colspan="2">Network</td>
+                       <td>Yes</td>
+                       <td>Yes</td>
+                       <td>You can control the user network and forward a remote or local port to an inside port of the emulator.</td>
+               </tr>
+               <tr>
+                       <td colspan="2">Host Directory Sharing</td>
+                       <td>Yes</td>
+                       <td>Yes</td>
+                       <td>File transfer is possible through the host directory sharing feature without using the SDB utility.</td>
+               </tr>
+               <tr>
+                       <td colspan="2">Battery</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can set the battery level and charger status.</td>
+               </tr>
+               <tr>
+                       <td colspan="2">RSSI</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can set the remote signal strength.</td>
+               </tr>
+               <tr>
+                       <td rowspan="6">Sensor</td>
+                       <td>3-Axis Sensor</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can inject user acceleration, magnetic, and gyroscope values.</td>
+               </tr>
+               <tr>
+                       <td>Light</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can inject a lux value into the light sensor.</td>
+               </tr>
+               <tr>
+                       <td>Proximity</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can inject the presence of nearby objects.</td>
+               </tr>
+               <tr>
+                       <td>Pressure</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can inject an hPa value into the pressure sensor.</td>
+               </tr>
+               <tr>
+                       <td>Ultraviolet</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can inject an ultraviolet index.</td>
+               </tr>
+               <tr>
+                       <td>Heart Rate Monitor</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can inject the heart rate and peek-to-peek time.</td>
+               </tr>
+               <tr>
+                       <td colspan="2">Earjack</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can add or remove a headset.</td>
+               </tr>
+               <tr>
+                       <td colspan="2">USB</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can add or remove a USB device.</td>
+               </tr>
+               <tr>
+                       <td colspan="2">SD Card</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can inject a 4, 8, 16, or 32G SD card.</td>
+               </tr>
+               <tr>
+                       <td colspan="2">Location</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can inject latitude and longitude values using a map, manually, or from a log file.</td>
+               </tr>
+               <tr>
+                       <td colspan="2">Telephony</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can make and receive a call. You can also send and receive SMS messages.</td>
+               </tr>
+               <tr>
+                       <td colspan="2">Memory</td>
+                       <td>Yes</td>
+                       <td>No</td>
+                       <td>You can set the low memory status.</td>
+               </tr>
+       </tbody>
+</table>
+
+<p>&nbsp;</p>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/tools/emulator_manager.htm b/preview/html/tools/emulator_manager.htm
new file mode 100644 (file)
index 0000000..c741f96
--- /dev/null
@@ -0,0 +1,230 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Emulator Manager</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+  <h1>Emulator Manager</h1>
+
+<p>The Visual Studio Tools for Tizen provides emulators to run your application in a virtual environment.</p>
+
+<p>In order to test the application in a variety of environments, you need a variety of emulators. The Visual Studio Tools for Tizen provides the Emulator Manager to help you easily create and manage the emulator instances.</p>
+
+<p>Basically, the Emulator Manager allows you to easily generate emulator instances from a pre-defined platform and template. In addition, you can define the settings of the virtual device, such as skin, resolution, and hardware devices.</p>
+
+<p>The main features of the Emulator Manager are:</p>
+
+<ul>
+       <li>Creating a new emulator instance or hardware profile</li>
+       <li>Managing&nbsp;an existing emulator instance or hardware profile</li>
+       <li>Deleting an emulator instance or hardware profile</li>
+       <li>Launching and stopping the emulator instance</li>
+</ul>
+
+<h2 id="access">Accessing the Emulator Manager</h2>
+
+<p>If you do not have the Emulator Manager installed, you can install it using the Visual Studio Tools for Tizen installer.</p>
+
+<p>There are 2 different ways to access the Emulator Manager from Visual Studio:</p>
+
+<ul>
+       <li>Go to <strong>Tools &gt; Tizen,</strong> and select <strong>Tizen Emulator Manager</strong>.</li>
+</ul>
+
+<p align="center" class="figure"><strong><strong><strong>Figure: Launch </strong></strong>the Emulator Manager in the Tools menu</strong></p>
+
+<p align="center" class="figure"><img alt="" src="../images/vs_emulatormanager_1.png" /></p>
+
+<ul>
+       <li>Click <strong>Launch Tizen Emulator</strong> on the Visual Studio toolbar.</li>
+</ul>
+
+<p align="center" class="figure"><strong>Figure: Launch the Emulator Manager in the Visual Studio</strong></p>
+
+<p align="center"><img alt="" src="../images/vs_emulatormanager_2.png" /></p>
+
+<h2 id="create">Creating an Emulator Instance</h2>
+
+<p>The Emulator Manager can help you to select the recommended platform and template. When you need another device environment, you can edit the existing emulator instance, or create a new one with a more suitable platform and template. You can also create platforms and templates to suit your needs.</p>
+
+<p align="center" class="figure"><strong><strong>Figure: Emulator Manager</strong></strong></p>
+
+<p align="center"><strong><img alt="" src="../images/vs_em_1.png" /></strong></p>
+
+<p>To create a new emulator instance:</p>
+
+<ol>
+       <li>In the Emulator Manager, click <strong><strong>Create</strong></strong>.</li>
+       <li>Select the platform (system image), and click <strong><strong>Next</strong></strong>.</li>
+       <li>Select the template (device definition), and click <strong><strong>Next</strong></strong>.</li>
+       <li>Change properties as needed, and click <strong><strong>Finish</strong></strong>.
+       <p>The emulator instance appears in the Emulator Manager.</p>
+
+       <p>To view the detailed information, right-click the emulator to see a context menu.</p>
+
+       <div class="note"><strong><strong>Note</strong></strong>
+
+       <p>To run the application faster, switch on CPU VT and GPU. If CPU VT is disabled, check <a href="../../../org.tizen.studio/html/common_tools/emulator.htm#speed"><u><font color="#000080">Increasing the Application Execution Speed</font></u></a> for more information. If GPU is disabled, <a href="../../../org.tizen.studio/html/download/prerequisites.htm#emulator"><u><font color="#000080">install the latest vendor-provided graphic driver</font></u></a>.</p>
+
+       <p>Mobile emulator supports&nbsp;HD(720x1280) or WVGA(480x800) resolutions.</p>
+       </div>
+       </li>
+</ol>
+
+<p align="center" class="figure"><strong><strong>Figure: Emulator Configuration dialog</strong></strong></p>
+
+<p align="center"><strong><img alt="" src="../images/vs_em_2.png" /></strong></p>
+
+<h3>Creating Platforms</h3>
+
+<p>To create an emulator, you have to first select the platform. You can create, modify, and delete a custom platform, and view the generated platforms. Most application developers do not need a custom platform, but it can be useful for a platform developer.</p>
+
+<p align="center" class="figure"><strong><strong>Figure: Platforms list</strong></strong></p>
+
+<p align="center"><img alt="" src="../images/vs_em_2.png" /></p>
+
+<p>To create a custom platform:</p>
+
+<ol>
+       <li>Click the create icon (<img alt="Create icon" src="../images/emulator_manager_create.png" />).</li>
+       <li>In the dialog box, select a base platform and platform image file.
+       <p>You can create a custom platform using a qcow2 or raw format image.</p>
+
+       <p>Qcow2 is a platform image format that is released with the Tizen&nbsp;Studio. Using the Emulator Manager's "Export as" feature, you can also create a qcow2 image.</p>
+
+       <p>A platform image of the development stage is in the raw format. If you try launching an emulator with a raw image, you can see the current state of this image. This can be useful for platform developers.</p>
+       </li>
+       <li>Click <strong><strong>OK</strong></strong> to save your configuration and click <strong><strong>Next</strong></strong>.
+       <p>The newly created platform is added to the list with a settings icon.</p>
+       </li>
+</ol>
+
+<p align="center" class="figure"><strong><strong>Figure: Platform configuration</strong></strong></p>
+
+<p align="center"><strong><img alt="" src="../images/vs_em_4.png" /></strong></p>
+
+<h3>Creating Templates</h3>
+
+<p>The Emulator Manager provides several device template types. A device template refers to, for example, the screen resolution and size, and the sensors in the device specification. You can make an emulator instanced based on the desired template.</p>
+
+<p align="center" class="figure"><strong><strong>Figure: Device templates</strong></strong></p>
+
+<p align="center"><strong><img alt="Device templates" src="../images/emulator_manager_device_template2.png" /></strong></p>
+
+<p>You can create a new template from the beginning, or clone a template and change some properties.</p>
+
+<ul>
+       <li>To create a new template, click the create icon (<img alt="Create icon" src="../images/emulator_manager_create.png" />) to open a dialog box. Click <strong><strong>OK</strong></strong> to save your settings.</li>
+       <li>To clone a new template, click the clone icon (<img alt="Clone icon" src="../images/emulator_manager_clone.png" />), make the appropriate changes, and click <strong><strong>OK</strong></strong> .</li>
+</ul>
+
+<p>After configuring the template, click <strong><strong>Next</strong></strong>. The new device template is added to the list with a settings icon.</p>
+
+<p align="center" class="figure"><strong><strong>Figure: Template configuration</strong></strong></p>
+
+<p align="center"><strong><img alt="Template configuration" src="../images/emulator_manager_template_config2.png" /></strong></p>
+
+<h2 id="manage">Managing the Emulator</h2>
+
+<p>In the Emulator Manager, you can edit, delete, reset, and export emulator instances:</p>
+
+<ul>
+       <li>To edit an emulator instance, click <strong><strong>Edit</strong></strong>, make the appropriate changes, and click <strong><strong>Confirm</strong></strong>.</li>
+       <li>To delete an emulator instance, click <strong><strong>Delete</strong></strong>.</li>
+       <li>To reset an emulator instance, right-click it and select <strong><strong>Reset</strong></strong>.</li>
+       <li>To export an emulator instance, right-click it and select <strong><strong>Export As</strong></strong>. Specify the new image file location.
+       <p>When you export the emulator instance, the same state as in the platform image is replicated.</p>
+       </li>
+</ul>
+
+<h2 id="platform">Managing Platforms and Templates</h2>
+
+<p>To manage the template:</p>
+
+<ul>
+       <li>To modify a template, click the modify icon (<img alt="Modify icon" src="../images/emulator_manager_modify.png" />), make the appropriate changes, and click <strong><strong>Confirm</strong></strong>. You can only modify the custom device templates you have created.</li>
+       <li>To delete a template, click the delete icon (<img alt="Delete icon" src="../images/emulator_manager_delete.png" />). You can only delete the custom device templates you have created.</li>
+</ul>
+
+<p>To manage the platforms:</p>
+
+<ul>
+       <li>To modify a custom platform, click the modify icon (<img alt="Modify icon" src="../images/emulator_manager_modify.png" />), make the appropriate changes, and click <strong><strong>Confirm</strong></strong>. You can only modify the custom platforms you have created.</li>
+       <li>To delete a custom platform, click the delete icon (<img alt="Delete icon" src="../images/emulator_manager_delete.png" />). You can only delete the custom platforms you have created.</li>
+</ul>
+
+<h2 align="left">Launching an Emulator Instance</h2>
+
+<p align="left">To launch an emulator instance:</p>
+
+<ul>
+       <li>Launch the Emulator Manager and select an emulator instance on the list.</li>
+       <li>Click <strong>Launch</strong>.</li>
+</ul>
+
+<p align="center"><strong>Figure: Launch an emulator instance</strong></p>
+
+<p align="center"><strong><img alt="" height="632" src="../images/vs_em_launch.png" width="645" /></strong></p>
+
+<ul>
+       <li>The selected emulator is booted after a few seconds.</li>
+</ul>
+
+<p align="center"><strong>Figure: Launched emulator instance</strong></p>
+
+<p align="center"><img alt="" src="../images/vs_em_launched.png" /></p>
+
+<ul>
+       <li>The debug and launch options are activated after the emulator has booted. The name of the emulator instance is displayed on the toolbar.</li>
+</ul>
+
+<p align="center"><strong>Figure: Activated debug option</strong></p>
+
+<p align="center"><img alt="" src="../images/vs_em_activated_debug.png" /></p>
+
+<h2 id="control">&nbsp;</h2>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/tools/log_viewer.htm b/preview/html/tools/log_viewer.htm
new file mode 100644 (file)
index 0000000..9c58566
--- /dev/null
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Log Viewer</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+  <h1>Log Viewer</h1>
+
+<p>This topic explains how to insert logging methods to your code and check the logs of your application in the&nbsp;<span>Log&nbsp;Viewer</span>.</p>
+
+<h2 id="view">Viewing Logs in Log Tabs</h2>
+
+<p>&nbsp;If you want to open the&nbsp;<span>Log Viewer</span>, go to&nbsp;<span>Tools &gt;&nbsp;Tizen &gt; Tizen&nbsp;Log Viewer&nbsp;</span>in the&nbsp;Visual Studio menu.</p>
+
+<p align="center" class="figure"><span>Figure: Log Viewer Menu</span></p>
+
+<p align="center" class="figure"><span><img alt="" height="138" src="../images/logviewer_entry_point.png" width="631" /></span></p>
+
+<p align="center" class="figure">&nbsp;</p>
+
+<p>The&nbsp;Log Viewer helps you debug your application by capturing all the events logged by the platform and your application. The&nbsp;Log Viewer&nbsp;shows the logs through the&nbsp;<a href="../../../org.tizen.guides/html/native/error/system_logs_n.htm">dlog logging service</a>. The service consists of the dlogutil and dlog library. You can also see logs with the&nbsp;<code>dlogutil</code>&nbsp;command in the CLI environment, and create log entries with the dlog library.</p>
+
+<p>&nbsp;</p>
+
+<p align="center" class="figure"><span>Figure: Log Viewer</span></p>
+
+<p align="center"><img alt="" height="539" src="../images/logviewer_default.png" width="700" /></p>
+
+<h3>Creating a Log Message</h3>
+
+<p>You can create a log message in your application with the dlog library. Before using the dlog library, make sure you know which priorities and tags to use and how to send the message to the log device. With appropriate properties and tags, it is easy to filter and check the messages.</p>
+
+<p>For more information, see the&nbsp;<a href="../../../org.tizen.guides/html/native/error/system_logs_n.htm">System Logs</a>&nbsp;guide.</p>
+
+<h2 id="filter">Understanding and Filtering Logs</h2>
+
+<p>The log table consists of the following fields:</p>
+
+<ul>
+       <li><span>Time</span>: log time</li>
+       <li><span>Level</span>: priority level indicates the urgency of the log message</li>
+       <li><span>Pid</span>: process ID</li>
+       <li><span>Tid</span>: thread ID</li>
+       <li><span>Tag</span>: identification of the log message source</li>
+       <li><span>Msg</span>: log message</li>
+</ul>
+
+<p align="center" class="figure"><span>Figure: Log table fields</span></p>
+
+<p align="center"><img alt="" height="150" src="../images/logviewer_keyword_filter.png" width="800" /></p>
+<p>In the log table, you have the following options and functions:</p>
+
+<ul>
+       <li>Log level filtering option
+       <p>In the Log Viewer, you can filter the log messages using the&nbsp;<span>V</span>&nbsp;(verbose),&nbsp;<span>D</span>&nbsp;(debug),&nbsp;<span>I</span>&nbsp;(info),&nbsp;<span>W</span>&nbsp;(warning),&nbsp;<span>E</span>&nbsp;(error), and&nbsp;<span>F</span>&nbsp;(fatal) buttons to show specific log messages suitable to the selected type.</p>
+       </li>
+       <li>Keyword filtering option
+       <p>You can filter the log messages by selecting one of the&nbsp;<span>PID</span>,&nbsp;<span>Tag</span>, and&nbsp;<span>Message</span>&nbsp;options, or entering keywords in the bottom of the Log Viewer. The keywords must be separated by a space.</p>
+       </li>
+       <li>Scroll lock
+       <p>The log table shows the latest logs by default. This can make you uncomfortable when checking the specified log. Enable scroll lock when checking a specified log.</p>
+       </li>
+       <li>Clearing the table
+       <p>You can remove all log messages from the log tab by clicking the Clear button.</p>
+       </li>
+       <li>Exporting logs to a file
+       <p>You can export the current log messages in the Log Viewer and save them as a log file by clicking the Export button.</p>
+       </li>
+</ul>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/tools/manifest_editor.htm b/preview/html/tools/manifest_editor.htm
new file mode 100644 (file)
index 0000000..5a913a1
--- /dev/null
@@ -0,0 +1,865 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Tizen Manifest Editor</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+  <h1>Tizen Manifest Editor</h1>
+
+<p>A Tizen .Net application project consists of exactly 1 manifest file, called&nbsp;<code>tizen-manifest.xml</code>, which is used to describe the application information. The manifest file is composed of XML elements, which include the root&nbsp;<a href="#manifest">&lt;manifest&gt;</a>&nbsp;element and its child elements representing application information, such as&nbsp;<code>&lt;version&gt;</code>, and&nbsp;<code>&lt;privileges&gt;</code>. The&nbsp;<a href="#hierarchy">child elements are organized into a specific hierarchy</a>. The elements can have attributes associated with them, providing more information about the element.</p>
+
+<h2 id="editing" name="editing">Editing the Manifest File</h2>
+
+<p>There are 2 different ways to edit the&nbsp;<code>tizen-manifest.xml</code>&nbsp;file:</p>
+
+<ul>
+       <li>Use the text editor to modify the XML structure directly:
+       <p align="center" class="figure"><span>Figure: Text Editor</span></p>
+
+       <p align="center"><img alt="" height="294" src="../images/manifest_text_editor.png" width="958" /></p>
+
+       <ol>
+               <li>Right-click the&nbsp;<code>tizen-manifest.xml</code>&nbsp;file in the&nbsp;<span>Solution&nbsp;Explorer</span>.</li>
+               <li>Select&nbsp;<span>Open with &gt; XML (Text) Editor</span>.</li>
+       </ol>
+       </li>
+       <li>Use the manifest editor to modify the manifest in a form editor:
+       <p>Double-click the&nbsp;<code>tizen-manifest.xml</code>&nbsp;file in the&nbsp;<span>Solution Explorer</span>.</p>
+
+       <p align="center" class="figure"><span>Figure: Manifest editor</span></p>
+       </li>
+</ul>
+
+<p align="center"><img alt="" height="692" src="../images/manifest_overview.png" width="739" /></p>
+
+<div class="note"><span><strong>Note</strong></span><br />
+The&nbsp;<code>tizen-manifest.xml</code>&nbsp;file must conform to both the standard XML file format and the Tizen .Net&nbsp;application specification requirements. Editing the manifest file XML structure with the text editor is intended for advanced users only. If the file does not conform to the standard and requirements, errors can occur during installation.</div>
+
+<h2 id="hierarchy" name="hierarchy">Manifest Element Hierarchy</h2>
+
+<p>The Tizen .Net application manifest file consists of XML elements organized in a hierarchy. The following tree structure shows the relationship between the elements of the&nbsp;<code>tizen-manifest.xml</code>&nbsp;file.</p>
+
+<table>
+       <colgroup>
+               <col width="10%" />
+               <col width="10%" />
+               <col width="10%" />
+               <col width="10%" />
+               <col width="10%" />
+               <col width="10%" />
+               <col width="40%" />
+       </colgroup>
+       <tbody>
+               <tr>
+                       <td colspan="7"><code><a href="#manifest_element">&lt;manifest&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td colspan="6"><code><a href="#author">&lt;author&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td colspan="6"><code><a href="#description">&lt;description&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td colspan="6"><code><a href="#profile_element">&lt;profile&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td colspan="6"><code><a href="#ui">&lt;ui-application&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="5"><code><a href="manifest_elements.htm#label">&lt;label&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="5"><code><a href="manifest_elements.htm#icon">&lt;icon&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="5"><code><a href="manifest_elements.htm#appcontrol">&lt;app-control&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="5"><code><a href="manifest_elements.htm#metadata">&lt;metadata&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="5"><code><a href="manifest_elements.htm#datacontrol">&lt;datacontrol&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="5"><code><a href="manifest_elements.htm#bg-category">&lt;background-category&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td colspan="6"><code><a href="#shortcut-list">&lt;shortcut-list&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="5"><code><a href="#shortcut">&lt;shortcut&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="4"><code><a href="manifest_elements.htm#icon">&lt;icon&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="4"><code><a href="manifest_elements.htm#label">&lt;label&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td colspan="6"><code><a href="#account">&lt;account&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="5"><code><a href="#accountprovider">&lt;account-provider&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="4"><code><a href="#icon">&lt;icon&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="4"><code><a href="manifest_elements.htm#label">&lt;label&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="4"><code><a href="#capability">&lt;capability&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td colspan="6"><code><a href="#privileges">&lt;privileges&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>&nbsp;</td>
+                       <td colspan="5"><code><a href="#privilege">&lt;privilege&gt;</a></code></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td colspan="6"><code><a href="#feature">&lt;feature&gt;</a></code></td>
+               </tr>
+       </tbody>
+</table>
+
+<h2 id="manifest" name="manifest">Manifest Elements</h2>
+
+<p>The following sections summarize the elements used in the&nbsp;<code>tizen-manifest.xml</code>&nbsp;file of the .Net application.</p>
+
+<h3 id="manifest_element">&lt;manifest&gt; Element</h3>
+
+<p>This element contains the manifest information of the Tizen .Net application. The&nbsp;<code>&lt;manifest&gt;</code>&nbsp;element is an easily readable description of the Tizen package and serves as a container for the other elements of the configuration document.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>
+       <p>1</p>
+       </li>
+</ul>
+
+<p><span>Expected children (in the following order):</span></p>
+
+<table border="1">
+       <tbody>
+               <tr>
+                       <th width="50%">Child element</th>
+                       <th>Occurrences</th>
+               </tr>
+               <tr>
+                       <td><code><a href="#author">&lt;author&gt;</a></code></td>
+                       <td>1 (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="#description">&lt;description&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="#profile_element">&lt;profile&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="#ui">&lt;ui-application&gt;</a></code></td>
+                       <td>1 (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="#shortcut-list">&lt;shortcut-list&gt;</a></code></td>
+                       <td>1 (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="#account">&lt;account&gt;</a></code></td>
+                       <td>1 (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="#privileges">&lt;privileges&gt;</a></code></td>
+                       <td>1 (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="#feature">&lt;feature&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+       </tbody>
+</table>
+
+<p align="center" class="figure"><span>Figure: Editing the &lt;manifest&gt; element in the manifest editor</span></p>
+
+<p align="center" class="figure"><img alt="" height="669" src="../images/manifest_editing.png" width="724" /></p>
+
+<p id="attributes"><span>Attributes:</span></p>
+
+<ul>
+       <li>
+       <p><code>api-version</code></p>
+
+       <p>API version number for the application (available value: number in the "x.y.z" format, where z is optional, for example,&nbsp;<code>3.0</code>)</p>
+       </li>
+       <li>
+       <p><code>install-location</code></p>
+
+       <p>Installation location for the application (available value:&nbsp;<code>"auto"</code>)</p>
+
+       <div class="note"><strong><span>Note</span></strong>This attribute is read-only. Do not attempt to modify it.</div>
+       </li>
+       <li>
+       <p><code>package</code></p>
+
+       <p>Package of the application (available value:&nbsp;<code>"org.tizen.applicationName"</code>)</p>
+       </li>
+       <li>
+       <p><code>type</code></p>
+
+       <p>Package type of the application (available value:&nbsp;<code>"tpk"</code>)</p>
+
+       <div class="note"><strong><span>Note</span></strong>This attribute is read-only. Do not attempt to modify it.</div>
+       </li>
+       <li>
+       <p><code>version</code></p>
+
+       <p>Version number of the application (available value: number in the "x.y.z" format, where 0 &lt;= x &lt;= 255, 0 &lt;= y &lt;= 255, and 0 &lt;= z &lt;= 65535)</p>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;manifest xmlns="http://tizen.org/ns/packages" api-version="3.0" package="org.tizen.uiapp" version="1.0.0"&gt;
+&nbsp;&nbsp;&nbsp;&lt;author&gt;.....&lt;/author&gt;
+&nbsp;&nbsp;&nbsp;&lt;description&gt;.....&lt;/description&gt;
+&nbsp;&nbsp;&nbsp;&lt;profile name="mobile"/&gt;
+&nbsp;&nbsp;&nbsp;&lt;ui-application&gt;.....&lt;/ui-application&gt;
+&nbsp;&nbsp;&nbsp;&lt;shortcut-list&gt;.....&lt;/shortcut-list&gt;
+&nbsp;&nbsp;&nbsp;&lt;account&gt;.....&lt;/account&gt;
+&nbsp;&nbsp;&nbsp;&lt;privileges&gt;.....&lt;/privileges&gt;
+&nbsp;&nbsp;&nbsp;&lt;feature&gt;.....&lt;/feature&gt;
+&lt;/manifest&gt;</pre>
+
+<h3 id="author">&lt;author&gt; Element</h3>
+
+<p>This element represents the creator of the Tizen package.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>
+       <p>1 (optional)</p>
+       </li>
+</ul>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li>
+       <p><code>email</code></p>
+
+       <p>Email of the package creator (available value: any valid email ID string value)</p>
+       </li>
+       <li>
+       <p><code>href</code></p>
+
+       <p>Web site of the package creator, such as a homepage or a profile on a social network (available value: any valid Web site string value)</p>
+       </li>
+</ul>
+
+<p><span>Expected value:</span></p>
+
+<ul>
+       <li>Package creator name in string</li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;author email="email@email.com" href="http://test.com"&gt;author&lt;/author&gt;</pre>
+
+<h3 id="description">&lt;description&gt; Element</h3>
+
+<p>This element contains an easily readable description of the Tizen package.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 or more (optional)</li>
+</ul>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>xml:lang</code>
+
+       <p>Language and country code (available value: "&lt;2-letter lowercase language code (ISO 639-1)&gt;-&lt;2-letter lowercase country code (ISO 3166-1 alpha-2)&gt;")</p>
+       </li>
+</ul>
+
+<p><span>Expected value:</span></p>
+
+<ul>
+       <li>Description value in string</li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;description xml:lang="en-us"&gt;This is a sample&lt;/description&gt;
+</pre>
+
+<h3 id="profile_element">&lt;profile&gt; Element</h3>
+
+<p>In Tizen .Net application, the&nbsp;<code>&lt;profile&gt;</code>&nbsp;element set to&nbsp;common. This element has no child elements.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1</li>
+</ul>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>name</code>
+
+       <p>Profile name (available values:&nbsp;<code>common</code>,&nbsp;<code>mobile</code>,&nbsp;<code>tv</code>)</p>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;profile name="common"/&gt;
+</pre>
+
+<h3 id="ui">&lt;ui-application&gt; Element</h3>
+
+<p>This element contains the manifest information of a Tizen .Net UI application with a graphical user interface (GUI).</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 or more (optional)</li>
+</ul>
+
+<p><span>Expected children (in the following order):</span></p>
+
+<table border="1">
+       <tbody>
+               <tr>
+                       <th width="50%">Child element</th>
+                       <th>Occurrences</th>
+               </tr>
+               <tr>
+                       <td><code><a href="manifest_elements.htm#label">&lt;label&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="manifest_elements.htm#icon">&lt;icon&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="manifest_elements.htm#appcontrol">&lt;app-control&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="manifest_elements.htm#metadata">&lt;metadata&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="manifest_elements.htm#datacontrol">&lt;datacontrol&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="manifest_elements.htm#bg-category">&lt;background-category&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+       </tbody>
+</table>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>appid</code>
+
+       <p>Application unique ID (string)</p>
+
+       <p>This can be used for launching or terminating the application explicitly.</p>
+       </li>
+       <li><code>exec</code>
+       <p>Application executable file path (string)</p>
+       </li>
+       <li><code>hw-acceleration</code>
+       <p>Indicates the application hardware acceleration status (available values: not defined (depends on the system setting),&nbsp;<code>on</code>&nbsp;(use hardware acceleration),&nbsp;<code>off</code>&nbsp;(do not use hardware acceleration))</p>
+
+       <p>By default, this value is not defined.</p>
+       </li>
+       <li id="launch_mode"><code>launch_mode</code>
+       <p>Application launch mode (available values:&nbsp;<code>single</code>&nbsp;(launched as a main application),&nbsp;<code>group</code>&nbsp;(launched as a sub application),&nbsp;<code>caller</code>&nbsp;(caller application))</p>
+
+       <p>By default, this value is set to&nbsp;<code>single</code>.</p>
+       </li>
+       <li><code>multiple</code>
+       <p>Indicates whether the application can be launched as a multiple (available values:&nbsp;<code>true</code>,&nbsp;<code>false</code>)</p>
+
+       <div class="note"><strong><span>Note</span></strong>This attribute is read-only. Do not attempt to modify it.</div>
+       </li>
+       <li><code>nodisplay</code>
+       <p>Indicates whether the application is shown in the app-tray (available values:&nbsp;<code>true</code>,&nbsp;<code>false</code>)</p>
+       </li>
+       <li><code>taskmanage</code>
+       <p>Indicates whether the application is shown in the task manager (available values:&nbsp;<code>true</code>,&nbsp;<code>false</code>)</p>
+       </li>
+       <li><code>type</code>
+       <p>Tizen application type (available values:&nbsp;<code>dotnet</code>)</p>
+
+       <div class="note"><strong><span>Note</span></strong>This attribute is read-only. Do not attempt to modify it.</div>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;ui-application appid="org.tizen.uiapp" exec="uiapp" hw-acceleration="on" launch_mode="single" 
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multiple="false" nodisplay="false" taskmanage="true" type="dotnet"&gt;
+&nbsp;&nbsp;&nbsp;&lt;label&gt;uiapplication&lt;/label&gt;
+&nbsp;&nbsp;&nbsp;&lt;label xml:lang="en-gb"&gt;testlang&lt;/label&gt;
+&nbsp;&nbsp;&nbsp;&lt;icon&gt;uiapp.png&lt;/icon&gt;
+&nbsp;&nbsp;&nbsp;&lt;app-control&gt;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;operation name="http://tizen.org/appcontrol/operation/dial"/&gt;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mime name="application/vnd.ms-excel"/&gt;
+&nbsp;&nbsp;&nbsp;&lt;/app-control&gt;
+&nbsp;&nbsp;&nbsp;&lt;metadata key="testkey" value="testvalue"/&gt;
+&nbsp;&nbsp;&nbsp;&lt;datacontrol access="ReadOnly" 
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;providerid="http://uiapp.com/datacontrol/provider/uiapp" type="Sql"/&gt;
+&lt;/ui-application&gt;</pre>
+
+<h3 id="shortcut-list">&lt;shortcut-list&gt; Element</h3>
+
+<p>This element contains the shortcut template list used for adding a shortcut to the home screen.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 (optional)</li>
+</ul>
+
+<p><span>Expected children:</span></p>
+
+<table border="1">
+       <tbody>
+               <tr>
+                       <th width="50%">Child element</th>
+                       <th>Occurrences</th>
+               </tr>
+               <tr>
+                       <td><code><a href="#shortcut">&lt;shortcut&gt;</a></code></td>
+                       <td>1 or more</td>
+               </tr>
+       </tbody>
+</table>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;shortcut-list&gt;
+&nbsp;&nbsp;&nbsp;&lt;shortcut&gt;.....&lt;/shortcut&gt;
+&lt;/shortcut-list&gt;
+</pre>
+
+<h3 id="shortcut">&lt;shortcut&gt; Element</h3>
+
+<p>This element contains the information that indicates the shortcut for the application on the home screen.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 (optional)</li>
+</ul>
+
+<p><span>Expected children:</span></p>
+
+<table border="1">
+       <tbody>
+               <tr>
+                       <th width="50%">Child element</th>
+                       <th>Occurrences</th>
+               </tr>
+               <tr>
+                       <td><code><a href="manifest_elements.htm#icon">&lt;icon&gt;</a></code></td>
+                       <td>1 or more</td>
+               </tr>
+               <tr>
+                       <td><code><a href="manifest_elements.htm#label">&lt;label&gt;</a></code></td>
+                       <td>1 or more</td>
+               </tr>
+       </tbody>
+</table>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>appid</code>
+
+       <p>Application unique ID (string)</p>
+
+       <p>This can be used for launching or terminating the application explicitly.</p>
+       </li>
+       <li><code>extra_data</code>
+       <p>Data for user content (string)</p>
+
+       <p>Shortcut element property in the manifest file</p>
+       </li>
+       <li><code>extra_key</code>
+       <p>Key for user content (string)</p>
+
+       <p>Shortcut element property in the manifest file</p>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;shortcut appid="org.example.shortcut" extra_data="data" extra_key="key"&gt;
+&nbsp;&nbsp;&nbsp;&lt;icon&gt;shortcut.png&lt;/icon&gt;
+&nbsp;&nbsp;&nbsp;&lt;label&gt;shortcut&lt;/label&gt;
+&nbsp;&nbsp;&nbsp;&lt;label xml:lang="en-us"&gt;short&lt;/label&gt;
+&lt;/shortcut&gt;
+</pre>
+
+<h3 id="account">&lt;account&gt; Element</h3>
+
+<p>This element contains a set of user accounts and account provider-related information in the Tizen application.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 (optional)</li>
+</ul>
+
+<p><span>Expected children:</span></p>
+
+<table border="1">
+       <tbody>
+               <tr>
+                       <th width="50%">Child element</th>
+                       <th>Occurrences</th>
+               </tr>
+               <tr>
+                       <td><code><a href="#accountprovider">&lt;account-provider&gt;</a></code></td>
+                       <td>1 or more</td>
+               </tr>
+       </tbody>
+</table>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;account&gt;
+&nbsp;&nbsp;&nbsp;&lt;account-provider&gt;.....&lt;/account-provider&gt;
+&lt;/account&gt;
+</pre>
+
+<h3 id="accountprovider"><span>&lt;account-provider&gt; Element</span></h3>
+
+<p>This element contains a specific service provider or user account protocol-related information.</p>
+
+<p><span>Expected children:</span></p>
+
+<table border="1">
+       <tbody>
+               <tr>
+                       <th width="50%">Child element</th>
+                       <th>Occurrences</th>
+               </tr>
+               <tr>
+                       <td><code><a href="#icon">&lt;icon&gt;</a></code></td>
+                       <td>1 or more</td>
+               </tr>
+               <tr>
+                       <td><code><a href="manifest_elements.htm#label">&lt;label&gt;</a></code></td>
+                       <td>1 or more</td>
+               </tr>
+               <tr>
+                       <td><code><a href="#capability">&lt;capability&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+       </tbody>
+</table>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>appid</code>
+
+       <p>Application unique ID (string)</p>
+
+       <p>This can be used for launching or terminating the application explicitly.</p>
+       </li>
+       <li><code>multiple-accounts-support</code>
+       <p>Indicates whether multiple accounts are supported (available values:&nbsp;<code>true</code>,&nbsp;<code>false</code>)</p>
+       </li>
+       <li><code>providerid</code>
+       <p>ID of the account provider (string)</p>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;account-provider appid="org.tizen.uiapp" multiple-accounts-support="false" providerid="org.tizen.uiapp"&gt;
+&nbsp;&nbsp;&nbsp;&lt;icon&gt;.....&lt;/icon&gt;
+&nbsp;&nbsp;&nbsp;&lt;label&gt;.....&lt;/label&gt;
+&nbsp;&nbsp;&nbsp;&lt;capability&gt;.....&lt;/capability&gt;
+&lt;/account-provider&gt;
+</pre>
+
+<h3 id="icon"><span>&lt;icon&gt; Element</span></h3>
+
+<p>This element contains the account provider icon image. Since the icons are used in the device under settings, the account icons are placed in a shared directory.</p>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>section</code>
+
+       <p>Usage information of the icon image (available values:&nbsp;<code>account</code>&nbsp;(image size: 72 x 72 for density xhigh and 48 x 48 for density high),&nbsp;<code>account-small</code>&nbsp;(image size: 45 x 45 for density xhigh and 30 x 30 for density high))</p>
+       </li>
+</ul>
+
+<p><span>Expected value:</span></p>
+
+<ul>
+       <li>Icon file name</li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;icon section="account"&gt;uiapp.png&lt;/icon&gt;
+&lt;icon section="account-small"&gt;uiapp.png&lt;/icon&gt;
+</pre>
+
+<h3 id="capability"><span>&lt;capability&gt; Element</span></h3>
+
+<p>This element contains the account provider capability. The capabilities are defined as&nbsp;<code>http://&lt;VENDOR_INFORMATION&gt;/account/capability/&lt;NAME&gt;</code>.</p>
+
+<p><span>Expected value:</span></p>
+
+<ul>
+       <li>IRI string</li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;capability&gt;http://tizen.org/account/capability/calendar&lt;/capability&gt;
+</pre>
+
+<h3 id="privileges">&lt;privileges&gt; Element</h3>
+
+<p>This element contains a set of required privileges for the Tizen application.</p>
+
+<p>Applications that use sensitive APIs must declare the required privileges in the&nbsp;<code>tizen-manifest.xml</code>&nbsp;file.</p>
+
+<p>Click&nbsp;<span>Add&nbsp;</span>to open the&nbsp;<span>Add Privilege</span>&nbsp;dialog.</p>
+
+<p align="center" class="figure"><span>Figure: Editing the &lt;privileges&gt; element in the manifest editor</span></p>
+
+<p align="center" class="figure"><img alt="" height="700" src="../images/manifest_privileges.png" width="802" /></p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 (optional)</li>
+</ul>
+
+<p><span>Expected children:</span></p>
+
+<table border="1">
+       <tbody>
+               <tr>
+                       <th width="50%">Child element</th>
+                       <th>Occurrences</th>
+               </tr>
+               <tr>
+                       <td><a href="#privilege"><code>&lt;privilege&gt;</code></a></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+       </tbody>
+</table>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;privileges&gt;
+&nbsp;&nbsp;&nbsp;&lt;privilege&gt;.....&lt;/privilege&gt;
+&lt;/privileges&gt;
+</pre>
+
+<h3 id="privilege"><span>&lt;privilege&gt; Element</span></h3>
+
+<p>This element contains the required privileges for the Tizen application.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 or more (optional)</li>
+</ul>
+
+<p><span>Expected value:</span></p>
+
+<p>Name (mandatory, the URI of the Device API privilege)</p>
+
+<p>For example:</p>
+
+<ul>
+       <li><code>http://tizen.org/privilege/application.admin</code></li>
+       <li><code>http://tizen.org/privilege/appmanager.launch</code></li>
+       <li><code>http://tizen.org/privilege/account.read</code></li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;privilege&gt;http://tizen.org/privilege/application.admin&lt;/privilege&gt;
+&lt;privilege&gt;http://tizen.org/privilege/appmanager.launch&lt;/privilege&gt;
+&lt;privilege&gt;http://tizen.org/privilege/account.read&lt;/privilege&gt;
+</pre>
+
+<h3 id="feature">&lt;feature&gt; Element</h3>
+
+<p>This element contains a list of required features for feature-based filtering in the Tizen Store.</p>
+
+<p>The element is used to define the hardware and software components for the Tizen application. In order to use or access an API that is specialized for each vendor or platform, the feature must be declared. This element has no child elements.</p>
+
+<p align="center" class="figure"><span>Figure: Editing the &lt;feature&gt; element in the manifest editor</span></p>
+
+<p align="center" class="figure"><img alt="" height="698" src="../images/manifest_features.png" width="840" /></p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 or more (optional)</li>
+</ul>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>name</code>&nbsp;(mandatory, a feature key URI)
+
+       <p>Item name used in feature-based filtering in the Tizen Store, for example,&nbsp;<code>"http://tizen.org/feature/camera"</code>,&nbsp;<code>"http://tizen.org/feature/fmradio"</code></p>
+       </li>
+</ul>
+
+<p><span>Expected value:</span></p>
+
+<ul>
+       <li><code>true</code></li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;feature name="http://tizen.org/feature/camera"&gt;true&lt;/privilege&gt;
+&lt;feature name="http://tizen.org/feature/fmradio"&gt;true&lt;/privilege&gt;</pre>
+
+
+
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/tools/manifest_elements.htm b/preview/html/tools/manifest_elements.htm
new file mode 100644 (file)
index 0000000..e2638d8
--- /dev/null
@@ -0,0 +1,303 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Using Additional Manifest Elements</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+  <h1>Using Additional Manifest Elements</h1>
+
+<p>The following sections summarize some of the common child elements used in the&nbsp;<code>tizen-manifest.xml</code>&nbsp;file of the .Net application.</p>
+
+<h2 id="appcontrol" name="appcontrol">&lt;app-control&gt; Element</h2>
+
+<p>This element represents Tizen application control configuration information.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="manifest_editor.htm#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 or more (optional)</li>
+</ul>
+
+<p><span>Expected children:</span></p>
+
+<table border="1" id="feature">
+       <tbody>
+               <tr>
+                       <th width="50%">Child element</th>
+                       <th>Occurrences</th>
+               </tr>
+               <tr>
+                       <td><code><a href="#operation">&lt;operation&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="#uri">&lt;uri&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+               <tr>
+                       <td><code><a href="#mime">&lt;mime&gt;</a></code></td>
+                       <td>1 or more (optional)</td>
+               </tr>
+       </tbody>
+</table>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;app-control&gt;
+&nbsp;&nbsp;&nbsp;&lt;operation name="http://tizen.org/appcontrol/operation/compose"/&gt;
+&nbsp;&nbsp;&nbsp;&lt;uri name="testuristring"/&gt;
+&nbsp;&nbsp;&nbsp;&lt;mime name="application/pdf"/&gt;
+&lt;/app-control&gt;
+</pre>
+
+<h3 id="operation">&lt;operation&gt; Element</h3>
+
+<p>This element represents the operation type of the application control.</p>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>name</code>
+
+       <p>Name of the application control, for example,&nbsp;<code>http://tizen.org/appcontrol/operation/compose</code></p>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;operation name="http://tizen.org/appcontrol/operation/compose"/&gt;
+</pre>
+
+<h3 id="uri">&lt;uri&gt; Element</h3>
+
+<p>This element represents the URI scheme of the application control.</p>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>name</code>
+
+       <p>Name of the URI scheme (string)</p>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;uri name="testuristring"/&gt;
+</pre>
+
+<h3 id="mime">&lt;mime&gt; Element</h3>
+
+<p>This element represents the MIME type of the application control.</p>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>name</code>
+
+       <p>Name of the MIME type (string)</p>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;mime name="application/pdf"/&gt;
+</pre>
+
+<h2 id="bg-category" name="bg-category">&lt;background-category&gt; Element</h2>
+
+<p>This element represents the category of the application running on the background.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="manifest_editor.htm#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 or more (optional)</li>
+</ul>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>value</code>
+
+       <p>Value of the background category (string)</p>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;background-category value="download"/&gt;
+</pre>
+
+<h2 id="datacontrol" name="datacontrol">&lt;datacontrol&gt; Element</h2>
+
+<p>This element represents configuration information for the Tizen data controls.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="manifest_editor.htm#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 or more (optional)</li>
+</ul>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>access</code>
+
+       <p>Access mode of the data control (string)</p>
+       </li>
+       <li><code>providerid</code>
+       <p>ID of the data control provider (string)</p>
+       </li>
+       <li><code>type</code>
+       <p>Type of the data control (string)</p>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;datacontrol access="WriteOnly" providerid="http://uiapp.com/datacontrol/provider/uiapp" type="Sql"/&gt;
+</pre>
+
+<h2 id="icon" name="icon">&lt;icon&gt; Element</h2>
+
+<p>This element represents the icon relative or absolute file path for the Tizen application.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="manifest_editor.htm#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 (optional)</li>
+</ul>
+
+<p><span>Expected value:</span></p>
+
+<ul>
+       <li>Icon path</li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;icon&gt;testicon.png&lt;/icon&gt;
+</pre>
+
+<h2 id="label" name="label">&lt;label&gt; Element</h2>
+
+<p>This element represents the label value for the Tizen application. It is a set of human readable names for the Tizen application according to the language.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="manifest_editor.htm#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 or more (optional)</li>
+</ul>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>xml:lang</code>
+
+       <p>Language of the label (available value: "&lt;2-letter lowercase language code (ISO 639-1)&gt;-&lt;2-letter lowercase country code (ISO 3166-1 alpha-2)&gt;")</p>
+       </li>
+</ul>
+
+<p><span>Expected value:</span></p>
+
+<ul>
+       <li>Label value in string</li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;label&gt;testlabel&lt;/label&gt;
+&lt;label xml:lang="en-gb"&gt;testlabel&lt;/label&gt;
+</pre>
+
+<h2 id="metadata" name="metadata">&lt;metadata&gt; Element</h2>
+
+<p>This element represents user-defined key-value pairs for the application.</p>
+
+<p>For more information on the relationship between the elements, see the&nbsp;<a href="manifest_editor.htm#hierarchy">element hierarchy</a>.</p>
+
+<p><span>Occurrences:</span></p>
+
+<ul>
+       <li>1 or more (optional)</li>
+</ul>
+
+<p><span>Attributes:</span></p>
+
+<ul>
+       <li><code>key</code>
+
+       <p>Key of metadata (string)</p>
+       </li>
+       <li><code>value</code>
+       <p>Value of metadata (string)</p>
+       </li>
+</ul>
+
+<p><span>For example:</span></p>
+
+<pre class="prettyprint">
+&lt;metadata key="testkey" value="testvalue"/&gt;</pre>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/tools/project_wizard.htm b/preview/html/tools/project_wizard.htm
new file mode 100644 (file)
index 0000000..222feea
--- /dev/null
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Project Wizard</title>
+</head>
+
+<body onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+<div id="toc_border">
+<div id="toc">
+<p class="toc-title">Content</p>
+
+<ul class="toc">
+       <li><a href="#template">Template</a></li>
+       <li><a href="#profile">Profile</a></li>
+</ul>
+</div>
+</div>
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+  <h1>Project Wizard</h1>
+<p align="left">The Project Wizard of Visual Studio Tools for Tizen is a tool that is used to create a Tizen .Net application project.</p>
+
+<p align="left">The Visual Studio Tools for Tizen provides 3 project templates. When you create a new project, you can select a specific template, which the Project Wizard uses to automatically create basic functionalities for the application. The default project files and folders are also created.</p>
+
+<p align="left">In the Project Wizard, you can select a templates and profile to create the project. In addition, you can set basic project properties, such as the project name, package name and location.</p>
+
+<p align="left">To open the Project Wizard, select <strong>File &gt; New &gt; Project &gt; Templates &gt; Visual C# &gt; Tizen</strong>.</p>
+
+<h2 align="left" id="template">Template</h2>
+
+<p align="left">You can select a template for your project. The Project Wizard creates the project based on the selected template.</p>
+
+<p align="center"><strong>Figure: Selecting the template</strong></p>
+
+<p align="center"><img alt="" height="653" src="../images/pw1.png" width="941" /></p>
+
+<p align="left">Visual Studio Tools for Tizen provides 3 templates with a basic structure where you can start the native application project:</p>
+
+<ul>
+       <li><strong>Blank App (Tizen Xamarin.Forms Portable)</strong>
+
+       <ul>
+               <li>Use this template for creating a Tizen Xamarin Application (mobile and TV)</li>
+               <li>Also use this template in case of adding Tizen Project to Xamarin Forms solution.</li>
+       </ul>
+       </li>
+       <li><strong>Blank App (Tizen Xamarin.Forms Single)</strong>
+       <ul>
+               <li>Use this for creating a Tizen Xamarin Application in a single project without PCL (Portable Class Library).</li>
+       </ul>
+       </li>
+       <li><strong>Class Library (Tizen)</strong>
+       <ul>
+               <li>Use this for creating a blank class library.</li>
+       </ul>
+       </li>
+</ul>
+
+<p align="left">After selecting a template and setting the location in your local repository, Click <strong>OK</strong>.</p>
+
+<h2 align="left" id="profile">Profile</h2>
+
+<p align="left">In case of Blank&nbsp;App (Tizen Xamarin.Forms Portable), the Tizen Project Wizard is shown for setting the project name and selecting the profile that you want to add in your solution.</p>
+
+<p align="center"><strong>Figure: Selecting the profile</strong></p>
+
+<p align="center"><img alt="" height="300" src="../images/pw2.png" width="700" /></p>
+
+<p align="left">To move to the next step, select the profile, and click <strong>OK</strong>.</p>
+
+<p>The solution illustrated in the following figure contains both profiles (mobile and TV).</p>
+
+<p align="center"><strong>Figure: Solution containing mobile and TV profiles</strong></p>
+
+<p align="center"><img alt="" height="537" src="../images/vstools_solution.png" width="341" /></p>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/html/tools/tools_overview.htm b/preview/html/tools/tools_overview.htm
new file mode 100644 (file)
index 0000000..932257f
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=9" />
+    <link rel="stylesheet" type="text/css" href="../css/styles.css" />
+    <link rel="stylesheet" type="text/css" href="../css/snippet.css" />
+    <script type="text/javascript" src="../scripts/snippet.js"></script>
+    <script type="text/javascript" src="../scripts/jquery.util.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/core.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../scripts/search.js" charset="utf-8"></script>
+    <title>Overview</title>
+</head>
+
+<body class="no-toc" onload="prettyPrint()" style="overflow: auto;">
+
+<div id="toc-navigation">
+</div>
+
+<div id="container"><div id="contents"><div class="content">
+
+ <h1>Overview</h1>
+
+<p>Visual Studio Tools for Tizen Preview provides <span>Tizen-specific tools to improve your productivity:</span></p>
+
+<ul>
+       <li><strong><a href="../tools/project_wizard.htm">Project Wizard</a></strong><br />
+       <span>The Project Wizard is a tool that is used to create a Tizen .NET&nbsp;application project.</span></li>
+       <li><strong><a href="../tools/certificate_manager.htm">Certificate Registration</a></strong><br />
+       The certificates can be created, edited, removed, and set as active in the Certificate Manager. The active certificates are used when packaging your application.</li>
+       <li><strong><a href="../tools/manifest_editor.htm">Tizen Manifest Editor</a></strong><br />
+       The Tizen Manifest Editor is a tool that is used to edit Tizen&nbsp;<span>manifest file, called&nbsp;</span><code class="prettyprint"><span class="pln">tizen</span><span class="pun">-</span><span class="pln">manifest</span><span class="pun">.</span><span class="pln">xml</span></code><span>, which is used to describe the application information.&nbsp;</span></li>
+       <li><a href="../tools/emulator_manager.htm"><strong>Emulator Manager</strong></a><br />
+       The Emulator Manager provides emulators to run your application in a virtual environment.</li>
+       <li><a href="../tools/emulator_control_panel.htm"><strong>Emulator Control Panel</strong></a><br />
+       <span>The Emulator Control panel&nbsp;allows you to run the application in the emulator, and test a variety of user scenarios, such as network access, audio input and out, and text messages.&nbsp;</span></li>
+       <li><strong><span><a href="../tools/device_manager.htm">Device Manager</a></span></strong><br />
+       The Device Manager&nbsp;<span>is a standalone tool that provides information&nbsp;of connected Tizen devices or emulators&nbsp;for application debugging.</span></li>
+       <li><strong><a href="../tools/log_viewer.htm"><span>Log Viewer</span></a></strong><br />
+       The Log Viewer <span>helps you debug your application by capturing all the events logged by the platform and your application.</span></li>
+</ul>
+
+
+<script type="text/javascript" src="../scripts/jquery.zclip.min.js"></script>
+<script type="text/javascript" src="../scripts/showhide.js"></script>
+
+</div></div></div>
+
+<a class="top sms" href="#"><img src="../images/btn_top.gif" alt="Go to top" /></a>
+
+<div id="footer">
+<p class="footer">Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>.<br/>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.</p>
+</div>
+
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-25976949-1']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/preview/index.xml b/preview/index.xml
new file mode 100644 (file)
index 0000000..d12e1c7
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.toc"?>
+
+
+<toc label="Tizen .NET Preview" topic="html/cover_page.htm">
+
+<topic href="html/cover_page.htm" label="Introduction">
+       <topic href="html/cover_page.htm" label="What's New"></topic>
+       <topic href="html/introduction/overview.htm" label="Overview"></topic>
+       <topic href="html/introduction/roadmap.htm" label="Roadmap"></topic>
+</topic>
+<topic href="html/getting_started/download.htm" label="Getting Started">
+       <topic href="html/getting_started/download.htm" label="Download"></topic>
+       <topic href="html/getting_started/installing.htm" label="Installing Visual Studio Tools for Tizen"></topic>
+       <topic href="html/getting_started/first_app.htm" label="Creating Your First Tizen .NET Application"></topic>
+       <topic href="html/getting_started/porting_xamarinforms.htm" label="Porting Xamarin.Forms Apps to Tizen using Visual Studio"></topic>
+</topic>
+<topic href="html/tools/tools_overview.htm" label="Visual Studio Tools for Tizen">
+       <topic href="html/tools/tools_overview.htm" label="Overview"></topic>
+       <topic href="html/tools/project_wizard.htm" label="Project Wizard"></topic>
+       <topic href="html/tools/certificate_manager.htm" label="Certificate Manager"></topic>
+       <topic href="html/tools/manifest_editor.htm" label="Tizen Manifest Editor">
+               <topic href="html/tools/manifest_elements.htm" label="Using Additional Manifest Elements"></topic>
+       </topic>
+       <topic href="html/tools/emulator_manager.htm" label="Emulator Manager"></topic>
+       <topic href="html/tools/emulator_control_panel.htm" label="Emulator Control Panel"></topic>
+       <topic href="html/tools/device_manager.htm" label="Device Manager"></topic>
+       <topic href="html/tools/log_viewer.htm" label="Log Viewer"></topic>
+</topic>
+</toc>
diff --git a/preview/plugin.xml b/preview/plugin.xml
new file mode 100644 (file)
index 0000000..90140e5
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+       <extension point="org.eclipse.help.toc">
+               <toc file="index.xml" primary="true" />
+       </extension>
+</plugin>
diff --git a/top.htm b/top.htm
index 0df3ff2..3fae9b0 100644 (file)
--- a/top.htm
+++ b/top.htm
@@ -9,6 +9,7 @@
 <a href='guides.htm' target='body'>Guides</a>&nbsp;&nbsp;&nbsp;&nbsp;
 <a href='studio.htm' target='body'>Tizen Studio</a>&nbsp;&nbsp;&nbsp;&nbsp;
 <a href='org.tizen.web.apireference/html/index.htm' target='body'>Web API Reference</a>&nbsp;&nbsp;&nbsp;&nbsp;
+<a href='preview.htm' target='body'>Tizen .NET Preview</a>&nbsp;&nbsp;&nbsp;&nbsp;
 </h3>
 </body>
 </html>