[MERGE]
authorHarry (OpenERP) <hmo@tinyerp.com>
Fri, 13 Aug 2010 05:38:52 +0000 (11:08 +0530)
committerHarry (OpenERP) <hmo@tinyerp.com>
Fri, 13 Aug 2010 05:38:52 +0000 (11:08 +0530)
bzr revid: hmo@tinyerp.com-20100813053852-hjpxyt2tnbsfwdji

115 files changed:
addons/thunderbird/__init__.py
addons/thunderbird/__openerp__.py
addons/thunderbird/installer.py
addons/thunderbird/partner/__init__.py
addons/thunderbird/partner/partner.py
addons/thunderbird/plugin/chrome.manifest [new file with mode: 0755]
addons/thunderbird/plugin/chrome/openerp_plugin.jar [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/content/address.xul [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/content/config.js [new file with mode: 0755]
addons/thunderbird/plugin/chrome/openerp_plugin/content/config.xul [new file with mode: 0755]
addons/thunderbird/plugin/chrome/openerp_plugin/content/config_change.xul [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/content/create.xul [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/content/createpartner.xul [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/content/exportTools.js [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/content/loaddata.js [new file with mode: 0755]
addons/thunderbird/plugin/chrome/openerp_plugin/content/overlay.js [new file with mode: 0755]
addons/thunderbird/plugin/chrome/openerp_plugin/content/overlay.xul [new file with mode: 0755]
addons/thunderbird/plugin/chrome/openerp_plugin/content/plugin.xul [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/content/selectpartner.xul [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/content/static.js [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/content/tiny_xmlrpc.js [new file with mode: 0755]
addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/address.dtd [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/config.dtd [new file with mode: 0755]
addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/config_change.dtd [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/create.dtd [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/createpartner.dtd [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/mboximport.properties [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/overlay.dtd [new file with mode: 0755]
addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/plugin.dtd [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/selectpartner.dtd [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Account.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Archive.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Case.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Contact.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Create.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Error.gif [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Invoice.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Move.gif [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/MoveDown.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/MoveLeft.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/NEWT.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/NEWT1.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Partner.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Product.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Project.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Sale.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Search.gif [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Success.gif [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/Task.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/developped_by.png [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/overlay.css [new file with mode: 0755]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/perform.gif [new file with mode: 0644]
addons/thunderbird/plugin/chrome/openerp_plugin/skin/tinyerp-icon.ico [new file with mode: 0644]
addons/thunderbird/plugin/components/nsXmlRpcClient.js [new file with mode: 0755]
addons/thunderbird/plugin/components/xml-rpc.xpt [new file with mode: 0755]
addons/thunderbird/plugin/defaults/preferences/tiny.js [new file with mode: 0755]
addons/thunderbird/plugin/install.js [new file with mode: 0755]
addons/thunderbird/plugin/install.rdf [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin.xpi [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome.manifest [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin.jar [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/address.xul [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config.js [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config.xul [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config_change.xul [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/create.xul [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/createpartner.xul [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/exportTools.js [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/loaddata.js [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.js [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.xul [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/plugin.xul [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/selectpartner.xul [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/static.js [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/tiny_xmlrpc.js [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/address.dtd [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config.dtd [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config_change.dtd [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/create.dtd [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/createpartner.dtd [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/mboximport.properties [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/overlay.dtd [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/plugin.dtd [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/selectpartner.dtd [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Account.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Archive.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Case.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Contact.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Create.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Error.gif [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Invoice.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Move.gif [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/MoveDown.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/MoveLeft.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/NEWT.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/NEWT1.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Partner.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Product.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Project.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Sale.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Search.gif [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Success.gif [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Task.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/developped_by.png [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/overlay.css [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/perform.gif [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/tinyerp-icon.ico [new file with mode: 0644]
addons/thunderbird/plugin/openerp_plugin/components/nsXmlRpcClient.js [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/components/xml-rpc.xpt [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/defaults/preferences/tiny.js [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/install.js [new file with mode: 0755]
addons/thunderbird/plugin/openerp_plugin/install.rdf [new file with mode: 0755]
addons/thunderbird/plugin/tiny_plugin-2.0.xpi [deleted file]
addons/thunderbird/security/ir.model.access.csv
addons/thunderbird/thunderbird_installer.xml

index 4ab5861..68afc0c 100644 (file)
@@ -1,50 +1,23 @@
-# -*- encoding: utf-8 -*-
+# -*- coding: utf-8 -*-
 ##############################################################################
 #
-#    OpenERP, Open Source Management Solution    
-#    Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
-#    $Id$
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
 #
 #    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
 #
 #    This program is distributed in the hope that it will be useful,
 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
+#    GNU Affero General Public License for more details.
 #
-#    You should have received a copy of the GNU General Public License
+#    You should have received a copy of the GNU Affero General Public License
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
-##############################################################################
-#
-# Copyright (c) 2004 Axelor SPRL. (http://www.axelor.com) All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
 
 import partner
 import installer
index 4c2820c..ed16b49 100644 (file)
@@ -2,7 +2,7 @@
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). All Rights Reserved
 #    Copyright (c) 2004 Axelor SPRL. (http://www.axelor.com) All Rights Reserved.
 #
 #    This program is free software: you can redistribute it and/or modify
 {
     "name" : "Thunderbird Interface",
     "version" : "1.0",
-    "author" : "Axelor",
-    "website" : "http://www.axelor.com/",
-    "depends" : ["base"],
+    "author" : "OpenERP SA & Axelor",
+    "website" : "http://www.openerp.com/",
+    "depends" : ["base","mail_gateway"],
     "category" : "Generic Modules/Thunderbird interface",
-    "description": '''
+    "description": """
       This module is required for the thuderbird plug-in to work
       properly.
 
@@ -35,8 +35,7 @@
       a project, an analytical account, or any other object and attach selected
       mail as .eml file in attachment of selected record.
 
-      You can create new case in crm using Create Case button.
-      Select a section for which you want to create case.''',
+      """,
     "init_xml" : [],
     "demo_xml" : [],
     "update_xml" : ['thunderbird_installer.xml',
index 68ffc82..cbe1db8 100644 (file)
@@ -2,7 +2,7 @@
 ##############################################################################
 #
 #    OpenERP, Open Source Management Solution
-#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
 #
 #    This program is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as
@@ -24,6 +24,7 @@ from osv import osv
 from tools import config
 
 import base64
+import addons
 
 class thunderbird_installer(osv.osv_memory):
     _name = 'thunderbird.installer'
@@ -31,9 +32,9 @@ class thunderbird_installer(osv.osv_memory):
 
     def default_get(self, cr, uid, fields, context={}):
         data = super(thunderbird_installer, self).default_get(cr, uid, fields, context)
-        pdf_file = open(config['addons_path'] + "/thunderbird/doc/Installation Guide to OpenERP Thunderbid Plug-in.pdf", 'r')
+        pdf_file = open(addons.get_module_resource('thunderbird','doc', 'Installation Guide to OpenERP Thunderbid Plug-in.pdf'),'rb')
         data['pdf_file'] = base64.encodestring(pdf_file.read())
-        file = open(config['addons_path'] + "/thunderbird/plugin/tiny_plugin-2.0.xpi", 'r')
+        file = open(addons.get_module_resource('thunderbird','plugin', 'openerp_plugin.xpi'),'rb')
         data['plugin_file'] = base64.encodestring(file.read())
         return data
 
@@ -48,9 +49,23 @@ class thunderbird_installer(osv.osv_memory):
 
     _defaults = {
         'thunderbird' : True,
-        'name' : 'OpenERP_plugin-2.0.xpi',
+        'name' : 'openerp_plugin.xpi',
         'pdf_name' : 'Installation Guide to OpenERP Thunderbid Plug-in.pdf',
-        'description' : """ * Save the Thunderbird plug­in. \n * Follow the steps to install Thunderbird plug­in. \n -> 1.From Menu Bar of Thunderbird, open Tools ­> Addons. \n -> 2. Click on install button and a browser window appears. \n -> 3. Select the plug-in(.xpi file) and click Ok. \n -> 4. Software installation window appears and within a short time “Install Now” button will be enabled \n -> 5. Click "Install Now". \n -> 6. Restart Thunderbird. \n Follow the steps to configure OpenERP in Thunderbird. \n -> 1. Go to Tools > OpenERP Synchronization. \n -> 2. Check  data (configured by default) \n -> 3. Click Test  Connection. \n -> 4. A message appears with state of your connection. \n -> 5. If your connection failed, check if your database is open, and check your data. \n -> 6. If you have a good connection, click Ok and start to archive mail in OpenERP. """
-        }
+        'description' : """* Save the Thunderbird plug­in.
+* Follows the following step to install Thunderbird plug­in.
+    1. From Menu Bar of Thunderbird, open Tools ­> Add ons.
+    2. Click on install button and a browser window appears.
+    3. Select the plug-in(.xpi file) and click Ok.
+    4. Software installation window appears and within a short time “Install Now” button will be enabled.
+    5. Click "Install Now".
+    6. Restart Thunderbird.
+* Follow the steps to configure OpenERP in Thunderbird. 
+    1. Go to Tools > OpenERP Synchronization. 
+    2. Check  data (configured by default).
+    3. Click "Connect". 
+    4. A message appears with state of your connection.
+    5. If your connection failed, check if your database is open, and check your data.
+    6. If you have a good connection, you can start to archive mail in OpenERP. """
+    }
 
 thunderbird_installer()
index 5b7582a..8eee7a8 100644 (file)
@@ -1,50 +1,23 @@
-# -*- encoding: utf-8 -*-
+# -*- coding: utf-8 -*-
 ##############################################################################
 #
-#    OpenERP, Open Source Management Solution    
-#    Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
-#    $Id$
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
 #
 #    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
 #
 #    This program is distributed in the hope that it will be useful,
 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
+#    GNU Affero General Public License for more details.
 #
-#    You should have received a copy of the GNU General Public License
+#    You should have received a copy of the GNU Affero General Public License
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
-##############################################################################
-#
-# Copyright (c) 2004 Axelor SPRL. (http://www.axelor.com) All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
 
 import partner
 
index 08ed6dd..4e5baf2 100644 (file)
-# -*- encoding: utf-8 -*-
-##############################################################################
-#
-#    OpenERP, Open Source Management Solution    
-#    Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
-#    $Id$
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-##############################################################################
-#
-# Copyright (c) 2004 Axelor SPRL. (http://www.axelor.com) All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-##############################################################################
-
-import time
-import ir
-from osv import osv,fields
-import base64
-import netsvc
-from tools.translate import _
-
-class tinythunderbird_partner(osv.osv):
-
-    def _links_get(self, cr, uid, context={}):
-        obj = self.pool.get('res.request.link')
-        ids = obj.search(cr, uid, [])
-        res = obj.read(cr, uid, ids, ['object', 'name'], context)
-
-        return [(r['object'], r['name']) for r in res]
-
-    _name = "tinythunderbird.partner"
-    _description="Thunderbid mails"
-    _rec_name="sender"
-    _columns = {
-                'sender':fields.char("Sender",size=128,required=True,select=True),
-                'receiver':fields.text("Receiver"),
-                "copy_to":fields.text("Copy To"),
-                "date":fields.date("Date",select=True),
-                "title":fields.char("Subject",size=128,select=True),
-                "description":fields.text("Description"),
-                "reference":fields.reference("Reference", selection=_links_get, size=128),
-                "res_user_id":fields.many2one("res.users","User"),
-                "attachments":fields.text("Attached Files",readonly=True),
-                }
-    _defaults = {
-                 'res_user_id':lambda obj,cr,uid,context: uid,
-                 'date': lambda *a: time.strftime('%Y-%m-%d')
-                 }
-
-    def thunderbird_mailcreate(self,cr,user,vals):
-        dictcreate = dict(vals)
-        import email
-        header_name = email.Header.decode_header(dictcreate['name'])
-        dictcreate['name'] = header_name and header_name[0] and header_name[0][0] 
-        add_obj=self.pool.get('res.partner.address')
-        case_pool=self.pool.get(dictcreate.get('object','crm.case'))
-        partner_ids=add_obj.search(cr,user,[('email','=',dictcreate['email_from'])])
-        partner=add_obj.read(cr,user,partner_ids,['partner_id'])
-        if partner and partner[0] and partner[0]['partner_id']:
-            dictcreate.update({'partner_id':partner[0]['partner_id'][0]})
-        create_id = case_pool.create(cr, user, dictcreate)
-        cases=case_pool.browse(cr,user,[create_id])
-        case_pool._history(cr, user, cases, _('Archive'), history=True, email=False)
-        return create_id
-
-    def thunderbird_createcontact(self,cr,user,vals):
-        dictcreate = dict(vals)
-        create_id = self.pool.get('res.partner.address').create(cr, user, dictcreate)
-        return create_id
-
-    def thunderbird_createpartner(self,cr,user,vals):
-        dictcreate = dict(vals)
-        address_obj = self.pool.get('res.partner')
-        search_id = address_obj.search(cr, user,[('name','=',dictcreate['name'])])
-        if search_id:
-            return 0
-        create_id = address_obj.create(cr, user, dictcreate)
-        return create_id
-
-    def thunderbird_searchobject(self,cr,user,vals):
-        dictcreate = dict(vals)
-        search_id = self.pool.get('ir.model').search(cr, user,[('model','=',dictcreate['model'])])
-        return (search_id and search_id[0]) or 0
-
-    def thunderbird_searchcontact(self,cr,user,vals):
-        address_obj = self.pool.get('res.partner.address')
-        search_id1 = address_obj.search(cr,user,[('name','ilike',vals)])
-        search_id2 = address_obj.search(cr,user,[('email','=',vals)])
-        if search_id1:
-            return address_obj.name_get(cr, user, search_id1)
-        elif search_id2:
-            return address_obj.name_get(cr, user, search_id2)
-        return []
-
-    def thunderbird_tempsearch(self,cr,user,vals):
-        if vals[0]:
-            value = vals[0][0]
-        if vals[1]:
-            obj = vals[1];
-        name_get=[]
-        er_val=[]
-        for object in obj:
-            dyn_object = self.pool.get(object)
-            if object == 'res.partner.address':
-                search_id1 = dyn_object.search(cr,user,[('name','ilike',value)])
-                search_id2 = dyn_object.search(cr,user,[('email','=',value)])
-                if search_id1:
-                    name_get.append(object)
-                    name_get.append(dyn_object.name_get(cr, user, search_id1))
-                elif search_id2:
-                    name_get.append(object)
-                    name_get.append(dyn_object.name_get(cr, user, search_id2))
-            else:
-                try:
-                    search_id1 = dyn_object.search(cr,user,[('name','ilike',value)])
-                    if search_id1:
-                        name_get.append(object)
-                        name_get.append(dyn_object.name_get(cr, user, search_id1))
-                except:
-                    er_val.append(object)
-                    continue
-        if len(er_val) > 0:
-            name_get.append('error')
-            name_get.append(er_val)
-        return name_get
-
-    def thunderbird_attachment(self,cr,user,vals):
-        dictcreate = dict(vals)
-        datas = [dictcreate['datas']]
-        name = [dictcreate['name']]
-        f_name = [dictcreate['datas_fname']]
-        if(dictcreate['datas'].__contains__(',')):
-            name = dictcreate['name'].split(',')
-            datas = dictcreate['datas'].split(',')
-            f_name = dictcreate['datas_fname'].split(',')
-        for i in range(0,datas.__len__()):
-            dictcreate['name'] = name[i]
-            dictcreate['datas'] = datas[i]
-            dictcreate['datas_fname'] = f_name[i]
-            create_id = self.pool.get('ir.attachment').create(cr,user,dictcreate)
-        return 0
-
-    def thunderbird_login(self,cr,user,vals):
-        dictcreate = dict(vals)
-        service = netsvc.LocalService('common')
-        res = service.login(dictcreate['db'],dictcreate['login'],dictcreate['passwd'])
-        return res or 0
-
-    def read(self, cr, user, ids, fields=None, context={}, load='_classic_read'):
-         ret_read = super(tinythunderbird_partner, self).read(cr, user, ids,fields,context,load)
-         attach_obj = self.pool.get('ir.attachment')
-         for read_data in ret_read:
-             attachments = attach_obj.search(cr,user,[('res_model','=',self._name),('res_id','=',read_data['id'])])
-             attechments_data = sattach_obj.read(cr,user,attachments,['name'])
-             file_names = [a['name'] for a in attechments_data]
-             text_atteched = '\n'.join(file_names)
-             read_data['attachments'] = text_atteched
-         return ret_read
-
-    def unlink(self, cr, uid, ids, context={}):
-        attach_obj = self.pool.get('ir.attachment')
-        attachments = attach_obj.search(cr,uid,[('res_model','=',self._name),('res_id','in',ids)])
-        attach_obj.unlink(cr,uid,attachments)
-        return super(tinythunderbird_partner, self).unlink(cr, uid, ids,context)
-
-    def thunderbird_objectsearch(self,cr,user,vals):
-        obj_list= [('crm.claim', 'Claim'), ('crm.lead','Lead'), ('crm.meeting','Metting'), ('crm.opportunity','Opportunity'), ('crm.phonecall','Phonecall'), ('crm.fundraising','Fund raising'), ('crm.helpdesk','Helpdesk')]
-        object=[]
-        model_obj = self.pool.get('ir.model')
-        for obj in obj_list:
-            if model_obj.search(cr, user, [('model', '=', obj[0])]):
-                object.append(obj)
-        return object
-
-    def thunderbird_list_search_object(self,cr,user,vals):
-        model_obj = self.pool.get('ir.model')
-        object=''
-        for obj in vals[0][1].split(','):
-            if model_obj.search(cr, user, [('model', '=', obj)]):
-                object += obj + ","
-            else:
-                object += "null,"
-        return object
-
-tinythunderbird_partner()
+# -*- coding: utf-8 -*-\r
+##############################################################################\r
+#\r
+#    OpenERP, Open Source Management Solution\r
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).\r
+#\r
+#    This program is free software: you can redistribute it and/or modify\r
+#    it under the terms of the GNU Affero General Public License as\r
+#    published by the Free Software Foundation, either version 3 of the\r
+#    License, or (at your option) any later version.\r
+#\r
+#    This program is distributed in the hope that it will be useful,\r
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+#    GNU Affero General Public License for more details.\r
+#\r
+#    You should have received a copy of the GNU Affero General Public License\r
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
+#\r
+##############################################################################\r
+\r
+import time\r
+import ir\r
+from osv import osv,fields\r
+import base64\r
+import netsvc\r
+from tools.translate import _\r
+import email\r
+import tools\r
+import binascii\r
+class email_server_tools(osv.osv_memory):\r
+    _inherit = "email.server.tools"\r
+    def history_message(self, cr, uid, model, res_id, message):\r
+        #@param message: string of mail which is read from EML File\r
+        attachment_pool = self.pool.get('ir.attachment')\r
+        msg = self.parse_message(message)\r
+        attachments = msg.get('attachments', [])\r
+        att_ids = []\r
+        for attachment in attachments:\r
+            data_attach = {\r
+                'name': attachment,\r
+                'datas': binascii.b2a_base64(str(attachments.get(attachment))),\r
+                'datas_fname': attachment,\r
+                'description': 'Mail attachment From Thunderbird msg_id: %s' %(msg.get('message_id', '')),\r
+                'res_model': model,\r
+                'res_id': res_id,\r
+            }\r
+            att_ids.append(attachment_pool.create(cr, uid, data_attach))\r
+        return self.history(cr, uid, model, res_id, msg, att_ids)\r
+\r
+    def parse_message(self, message):\r
+        #TOCHECK: put this function in mailgateway\r
+        msg_txt = email.message_from_string(message)\r
+        message_id = msg_txt.get('message-id', False)\r
+        msg = {}\r
+        msg_txt = email.message_from_string(message)\r
+        fields = msg_txt.keys()\r
+        msg['id'] = message_id\r
+        msg['message-id'] = message_id\r
+\r
+        if 'Subject' in fields:\r
+            msg['subject'] = self._decode_header(msg_txt.get('Subject'))\r
+\r
+        if 'Content-Type' in fields:\r
+            msg['content-type'] = msg_txt.get('Content-Type')\r
+\r
+        if 'From' in fields:\r
+            msg['from'] = self._decode_header(msg_txt.get('From'))\r
+\r
+        if 'Delivered-To' in fields:\r
+            msg['to'] = self._decode_header(msg_txt.get('Delivered-To'))\r
+\r
+        if 'CC' in fields:\r
+            msg['cc'] = self._decode_header(msg_txt.get('CC'))\r
+\r
+        if 'Reply-to' in fields:\r
+            msg['reply'] = self._decode_header(msg_txt.get('Reply-To'))\r
+\r
+        if 'Date' in fields:\r
+            msg['date'] = self._decode_header(msg_txt.get('Date'))\r
+\r
+        if 'Content-Transfer-Encoding' in fields:\r
+            msg['encoding'] = msg_txt.get('Content-Transfer-Encoding')\r
+\r
+        if 'References' in fields:\r
+            msg['references'] = msg_txt.get('References')\r
+\r
+        if 'In-Reply-To' in fields:\r
+            msg['in-reply-to'] = msg_txt.get('In-Reply-To')\r
+\r
+        if 'X-Priority' in fields:\r
+            msg['priority'] = msg_txt.get('X-Priority', '3 (Normal)').split(' ')[0]\r
+\r
+        if not msg_txt.is_multipart() or 'text/plain' in msg.get('Content-Type', ''):\r
+            encoding = msg_txt.get_content_charset()\r
+            body = msg_txt.get_payload(decode=True)\r
+            msg['body'] = tools.ustr(body, encoding)\r
+\r
+        attachments = {}\r
+        has_plain_text = False\r
+        if msg_txt.is_multipart() or 'multipart/alternative' in msg.get('content-type', ''):\r
+            body = ""\r
+            for part in msg_txt.walk():\r
+                if part.get_content_maintype() == 'multipart':\r
+                    continue\r
+\r
+                encoding = part.get_content_charset()\r
+                filename = part.get_filename()\r
+                if part.get_content_maintype()=='text':\r
+                    content = part.get_payload(decode=True)\r
+                    if filename:\r
+                        attachments[filename] = content\r
+                    elif not has_plain_text:\r
+                        # main content parts should have 'text' maintype\r
+                        # and no filename. we ignore the html part if\r
+                        # there is already a plaintext part without filename,\r
+                        # because presumably these are alternatives.\r
+                        content = tools.ustr(content, encoding)\r
+                        if part.get_content_subtype() == 'html':\r
+                            body = tools.ustr(tools.html2plaintext(content))\r
+                        elif part.get_content_subtype() == 'plain':\r
+                            body = content\r
+                            has_plain_text = True\r
+                elif part.get_content_maintype() in ('application', 'image'):\r
+                    if filename :\r
+                        attachments[filename] = part.get_payload(decode=True)\r
+                    else:\r
+                        res = part.get_payload(decode=True)\r
+                        body += tools.ustr(res, encoding)\r
+\r
+            msg['body'] = body\r
+            msg['attachments'] = attachments\r
+        return msg\r
+email_server_tools()\r
+\r
+class thunderbird_partner(osv.osv_memory):\r
+    _name = "thunderbird.partner"\r
+    _description="Thunderbid mails"\r
+\r
+    def create_contact(self,cr,user,vals):\r
+        dictcreate = dict(vals)\r
+        if not eval(dictcreate.get('partner_id')):\r
+            dictcreate.update({'partner_id': False})\r
+        create_id = self.pool.get('res.partner.address').create(cr, user, dictcreate)\r
+        return create_id\r
+\r
+    def history_message(self,cr,uid,vals):\r
+        dictcreate = dict(vals)\r
+        server_tools_pool = self.pool.get('email.server.tools')\r
+        res_id = int(dictcreate.get('res_id'))\r
+        model = str(dictcreate.get('model'))\r
+        message = str(dictcreate.get('message'))\r
+        server_tools_pool.history_message(cr,uid,model,res_id,message)\r
+        return True\r
+\r
+    def process_email(self,cr,uid,vals):\r
+        dictcreate = dict(vals)\r
+        model = str(dictcreate.get('model'))\r
+        message = str(dictcreate.get('message'))\r
+        return self.pool.get('email.server.tools').process_email(cr, uid, model, message, attach=True, context=None)\r
+\r
+    def search_contact(self, cr, user, vals):\r
+        address_obj = self.pool.get('res.partner.address')\r
+        partner = address_obj.search(cr, user,[('email','=',vals)])\r
+        res = {}\r
+        res1 = {}\r
+\r
+        if not partner:\r
+            res1 = {\r
+                'email': '',\r
+                    }\r
+            return res1.items()\r
+\r
+        if partner:\r
+            partner=partner[0]\r
+            data = address_obj.read(cr,user, partner)\r
+            res = {\r
+                'partner_name': data['partner_id'] and data['partner_id'][1] or '',\r
+                'contactname': data['name'] or '',\r
+                'street': data['street'] or '',\r
+                'street2': data['street2'] or '',\r
+                'zip': data['zip'] or '',\r
+                'city': data['city'] or '',\r
+                'country': data['country_id'] and data['country_id'][1] or '',\r
+                'state': data['state_id'] and data['state_id'][1] or '',\r
+                'email': data['email'] or '',\r
+                'phone': data['phone'] or '',\r
+                'mobile': data['mobile'] or '',\r
+                'fax': data['fax'] or '',\r
+                'res_id': str(partner),\r
+            }\r
+        return res.items()\r
+\r
+    def update_contact(self,cr,user,vals):\r
+        dictcreate = dict(vals)\r
+        res_id = dictcreate.get('res_id',False)\r
+        result={}\r
+\r
+        if not (dictcreate.get('partner_id')):\r
+            dictcreate.update({'partner_id': False})\r
+            create_id = self.pool.get('res.partner.address').create(cr, user, dictcreate)\r
+            return create_id\r
+\r
+        if res_id:\r
+            address_obj = self.pool.get('res.partner.address')\r
+            address_data = address_obj.read(cr, user, int(res_id), [])\r
+            result={           'partner_id': address_data['partner_id'] and address_data['partner_id'][0] or False,\r
+                               'country_id': dictcreate['country_id'] and int(dictcreate['country_id'][0]) or False,\r
+                               'state_id': dictcreate['state_id'] and int(dictcreate['state_id'][0]) or False,\r
+                               'name': dictcreate['name'],\r
+                               'street': dictcreate['street'],\r
+                               'street2': dictcreate['street2'],\r
+                               'zip': dictcreate['zip'],\r
+                               'city': dictcreate['city'],\r
+                               'phone': dictcreate['phone'],\r
+                               'fax': dictcreate['fax'],\r
+                               'mobile': dictcreate['mobile'],\r
+                               'email': dictcreate['email'],\r
+                               }\r
+        address_obj.write(cr, user,int(res_id),result )\r
+        return True\r
+\r
+    def create_partner(self,cr,user,vals):\r
+        dictcreate = dict(vals)\r
+        partner_obj = self.pool.get('res.partner')\r
+        search_id =  partner_obj.search(cr, user,[('name','=',dictcreate['name'])])\r
+        if search_id:\r
+            return 0\r
+        create_id =  partner_obj.create(cr, user, dictcreate)\r
+        return create_id\r
+\r
+    def search_document(self,cr,user,vals):\r
+        dictcreate = dict(vals)\r
+        search_id = self.pool.get('ir.model').search(cr, user,[('model','=',dictcreate['model'])])\r
+        return (search_id and search_id[0]) or 0\r
+\r
+    def search_checkbox(self,cr,user,vals):\r
+        if vals[0]:\r
+            value = vals[0][0]\r
+        if vals[1]:\r
+            obj = vals[1];\r
+        name_get=[]\r
+        er_val=[]\r
+        for object in obj:\r
+            dyn_object = self.pool.get(object)\r
+            if object == 'res.partner.address':\r
+                search_id1 = dyn_object.search(cr,user,[('name','ilike',value)])\r
+                search_id2 = dyn_object.search(cr,user,[('email','=',value)])\r
+                if search_id1:\r
+                    name_get.append(object)\r
+                    name_get.append(dyn_object.name_get(cr, user, search_id1))\r
+                elif search_id2:\r
+                    name_get.append(object)\r
+                    name_get.append(dyn_object.name_get(cr, user, search_id2))\r
+            else:\r
+                try:\r
+                    search_id1 = dyn_object.search(cr,user,[('name','ilike',value)])\r
+                    if search_id1:\r
+                        name_get.append(object)\r
+                        name_get.append(dyn_object.name_get(cr, user, search_id1))\r
+                except:\r
+                    er_val.append(object)\r
+                    continue\r
+        if len(er_val) > 0:\r
+            name_get.append('error')\r
+            name_get.append(er_val)\r
+        return name_get\r
+\r
+\r
+\r
+    def list_alldocument(self,cr,user,vals):\r
+        obj_list= [('crm.lead','Lead'),('project.issue','Project Issue'), ('hr.applicant','HR Recruitment')]\r
+        object=[]\r
+        model_obj = self.pool.get('ir.model')\r
+        for obj in obj_list:\r
+            if model_obj.search(cr, user, [('model', '=', obj[0])]):\r
+                object.append(obj)\r
+        return object\r
+\r
+    def list_allcountry(self,cr,user,vals):\r
+        country_list = []\r
+        cr.execute("SELECT id, name from res_country")\r
+        country_list = cr.fetchall()\r
+        return country_list\r
+\r
+    def list_allstate(self,cr,user,vals):\r
+        cr.execute("SELECT id, name from res_country_state")\r
+        state_country_list = cr.fetchall()\r
+        return state_country_list\r
+\r
+    def search_document_attachment(self,cr,user,vals):\r
+        model_obj = self.pool.get('ir.model')\r
+        object=''\r
+        for obj in vals[0][1].split(','):\r
+            if model_obj.search(cr, user, [('model', '=', obj)]):\r
+                object += obj + ","\r
+            else:\r
+                object += "null,"\r
+        return object\r
+\r
+thunderbird_partner()\r
diff --git a/addons/thunderbird/plugin/chrome.manifest b/addons/thunderbird/plugin/chrome.manifest
new file mode 100755 (executable)
index 0000000..5fa9c2f
--- /dev/null
@@ -0,0 +1,5 @@
+content        openerp_plugin  jar:chrome/openerp_plugin.jar!/content/
+overlay        chrome://messenger/content/messenger.xul        chrome://openerp_plugin/content/overlay.xul
+locale openerp_plugin  en-US   jar:chrome/openerp_plugin.jar!/locale/en-US/
+skin   openerp_plugin  classic/1.0 jar:chrome/openerp_plugin.jar!/skin/
+#style chrome://global/content/customizeToolbar.xul    chrome://openerp_plugin/skin/overlay.css
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin.jar b/addons/thunderbird/plugin/chrome/openerp_plugin.jar
new file mode 100644 (file)
index 0000000..5a74b44
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin.jar differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/address.xul b/addons/thunderbird/plugin/chrome/openerp_plugin/content/address.xul
new file mode 100644 (file)
index 0000000..2d6f0e2
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/address.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml"
+       title="&title.label;" onload="myPrefObserver.createContactAddress()" height="380" width="800">
+
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+
+<tabpanel id="contact">
+  <groupbox id="contact">
+     <hbox>
+        <label  align="right" id="emailid"  value="&emailid.value;" width="94" />
+                <textbox id="txtemail" width="268" align="right"/>
+         <spacer width="5"/>
+          <button label="&create.label;" accesskey="r" image="&imagecreate.value;" oncommand="Create.onMenuItemCommand(event);"/>
+         <button label="&bsearch.label;" oncommand="searchContactdetail();" image="&imagesearch.value;"/>
+       </hbox>
+       <hbox>
+        <label  align="right" id="name"  value="&name.value;" width="80" />
+               <textbox id="txtname" align="right" width="270" readonly="true"/>
+        <spacer width="5"/>
+         <button label="New Partner" image="&imagecreate.value;" oncommand="CreatePartner.onMenuItemCommand(event);" width="133"/>
+       </hbox>
+   </groupbox>
+</tabpanel>
+
+<tabpanel id="address">
+  <groupbox id="address">
+    <hbox>
+        <caption label="&postaladdress.value;" />
+        <spacer width="300"/>
+     <vbox>
+        <caption label="&communication.value;" />
+     </vbox>
+    </hbox>
+
+     <hbox>
+        <label  align="right" id="contactname"  value="&contactname.value;" width="80" />
+               <textbox id="txtcontactname" align="right" width="270" />
+        <spacer width="33"/>
+        <vbox>
+             <label  align="right" id="office"  value="&office.value;" width="50" />
+        </vbox>
+        <vbox>
+               <textbox id="txtoffice" />
+        </vbox>
+       </hbox>
+    
+    <hbox>
+        <label  align="right" id="street"  value="&street.value;" width="97" />
+               <textbox id="txtstreet" width="270"/>
+        <spacer width="33"/>
+        <vbox>
+        <label  align="right" id="mobile"  value="&mobile.value;" width="50" />
+        </vbox>
+        <vbox>
+               <textbox id="txtmobile"/>
+        </vbox>
+       </hbox>
+    <hbox>
+        <label  align="right" id="street2"  value="&street2.value;" width="97" />
+               <textbox id="txtstreet2" width="270"/>
+        <spacer width="35"/>
+        <vbox>
+        <label  align="right" id="fax"  value="&fax.value;" width="48" />
+        </vbox>
+        <vbox>
+               <textbox id="txtfax" />
+        </vbox>
+       </hbox>
+
+     <hbox>
+        <label  align="right" id="zip"  value="&zip.value;" width="97" />
+               <textbox id="txtzip" />
+        <spacer width="115"/>
+       </hbox>
+    <hbox>
+        <label  align="right" id="city"  value="&city.value;" width="97" />
+               <textbox id="txtcity" />
+    </hbox>
+
+    <hbox>
+         <label  align="right" id="countryname"  value="&country.value;" width="97" />
+         <menulist id="country" width="190">
+           <menupopup>
+            <menuitem label="" value=""/>
+           </menupopup>
+         </menulist>
+       </hbox>
+
+     <hbox>
+         <label  align="right" id="statename"  value="&state.value;" width="97" />
+         <menulist id="state" width="190">
+           <menupopup>
+            <menuitem label="" value=""/>
+           </menupopup>
+         </menulist>
+       </hbox>
+</groupbox>
+</tabpanel>
+
+<description></description>
+
+<hbox>
+  <spacer width="600"/>
+    <button label="&cancel.label;" image="&imagecancel.value;" oncommand="close();" />
+    <button label="&ok.label;" image="&imageok.value;" oncommand="UpdateContact();"/>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/config.js b/addons/thunderbird/plugin/chrome/openerp_plugin/content/config.js
new file mode 100755 (executable)
index 0000000..5757897
--- /dev/null
@@ -0,0 +1,163 @@
+
+function config_close()
+{
+       //window.close("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+    //ksa
+   window.close("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+       window.open("chrome://openerp_plugin/content/config.xul", "", "chrome");
+}
+
+//set the value of the configuration fields
+function config_change_load()
+{
+       var s = getServer();
+       var a =s.split(':');
+       if (String(a)=="" || String(a)=="undefined"){
+               document.getElementById('txtcurl').value = "localhost"
+               document.getElementById('txtcport').value = "8069"
+       }
+       else
+       {
+               len = a[1];
+               var url = "";
+               for (i=0;i<len.length;i++)
+               {       if (len[i] == "/")
+                       {
+                               continue
+                       }
+                       url += len[i]
+               }
+               if (String(url) == "" || String(url) == "undefined"){
+                       document.getElementById('txtcurl').value = "localhost"
+               }
+               else
+               {
+                       document.getElementById('txtcurl').value = url
+               }
+
+               if (String(a[2]) == "" || String(a[2]) == "undefined"){
+                       document.getElementById('txtcport').value = "8069"
+                       setPort("8069");
+               }
+               else
+               {
+                       document.getElementById('txtcport').value = a[2]
+                       setPort(a[2]);
+               }
+
+       }
+}
+function config_ok()
+{
+       if (document.getElementById('txtcurl').value == '')
+       {
+        alert("You Must Enter Server Name!")
+               return false;
+      
+       }
+       if (document.getElementById('txtcport').value == '')
+       {
+               alert("You Must Enter Port!")
+               return false;
+       }
+       setServer("http://"+document.getElementById('txtcurl').value +":" + document.getElementById('txtcport').value);
+       window.close("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+    //ksa
+    window.open("chrome://openerp_plugin/content/config.xul", "", "chrome");
+}
+function openConfigChange()
+{
+       //window.open("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+    //ksa
+    window.close("chrome://openerp_plugin/content/config.xul", "", "chrome");
+    window.open("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+}
+
+function appendDbList()
+{
+       setServerService('xmlrpc/db');
+       getDbList('DBlist');
+}
+
+//set the database list in the listbox in configuration window
+function setDb()
+{
+       var cmbDbList = document.getElementById('listDBListBox');
+       document.getElementById('DBlist').value = cmbDbList.getItemAtIndex(cmbDbList.selectedIndex).value;
+}
+
+//stores the value of configuration fields in preferences
+function okClick()
+{
+       if (getDBList()=="false")
+       {
+               if (document.getElementById('DBlist_text').value =='')
+               {
+                       alert("You Must Enter Database Name");
+                       return false;
+               }
+               setDbName(document.getElementById('DBlist_text').value);
+       }
+       else if(document.getElementById('DBlist') != null)
+       {
+               setDbName(document.getElementById('DBlist').value);
+       }
+       setServer(document.getElementById('txturl').value);
+       var s = document.getElementById('txturl').value;
+       var a =s.split(':');
+       setPort(a[a.length-1]);
+       setUsername(document.getElementById('txtusername').value);
+       setPassword(document.getElementById('txtpassword').value);
+       window.close();
+}
+
+//deletes the value of the selected value in the listbox in configuraton menu
+function deleteDocument(){
+       if(document.getElementById("listObjectListBox").selectedItem){
+               var objectlist = getPref().getCharPref("object").split(',');
+               var imagelist = getPref().getCharPref("imagename").split(',');
+               var objlist = getPref().getCharPref("listobject").split(',');
+               if(objectlist.length>0){
+                       var objectcharpref = '';
+                       var imagecharpref = '';
+                       var objcharpref = '';
+                       var nodelist = document.getElementById("listObjectListBox").selectedItem.childNodes
+                       var childnode = document.getElementById("listObjectListBox").childNodes
+                       for(i=2;i<childnode.length;i++){
+                               if(childnode[i].hasChildNodes){
+                                       var secondchild = childnode[i].childNodes;
+                                       if (secondchild[1].getAttribute("label") != nodelist[1].getAttribute("label")){
+                                               objcharpref += secondchild[0].getAttribute("label")+',';
+                                               objectcharpref += secondchild[1].getAttribute("label")+',';
+                                               imagecharpref += secondchild[2].getAttribute("image")+',';
+                                       }
+                               }
+                       }
+                       var demo3 = objectcharpref.substring(0,objectcharpref.length-1);
+                       var demo4 = imagecharpref.substring(0,imagecharpref.length-1);
+                       var demo5 = objcharpref.substring(0,objcharpref.length-1);
+
+                       getPref().setCharPref("listobject",demo5);
+                       getPref().setCharPref("object",demo3);
+                       getPref().setCharPref("imagename",demo4);
+               }
+               document.getElementById("listObjectListBox").removeItemAt(document.getElementById("listObjectListBox").selectedIndex)
+       }
+       else{
+               alert("No Document Selected");
+       }
+}
+
+//function to add the image file for the checkbox
+function addFile(){
+       var nsIFilePicker = Components.interfaces.nsIFilePicker;
+       var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
+       fp.init(this, "Select a File", nsIFilePicker.modeOpen);
+       fp.appendFilters(nsIFilePicker.filterImages);
+       var res = fp.show();
+       if (res == nsIFilePicker.returnOK){
+         var thefile = fp.file;
+         document.getElementById("txtimagename").value = thefile.path
+       }
+}
+
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/config.xul b/addons/thunderbird/plugin/chrome/openerp_plugin/content/config.xul
new file mode 100755 (executable)
index 0000000..348ef92
--- /dev/null
@@ -0,0 +1,113 @@
+<?xml version="1.0"?>\r
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>\r
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/config.dtd">\r
+\r
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\r
+       xmlns:html="http://www.w3.org/1999/xhtml"\r
+       title="&title.label;" onload="myPrefObserver.register();"  unload="myPrefObserver.unregister()" height="410" width="900">\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>\r
+<tabbox>\r
+  <tabs>\r
+    <tab label="Configuration Settings"/>\r
+    <tab label="Document Settings"/>\r
+    <tab label="About"/>\r
+  </tabs>\r
+  <tabpanels>\r
+    <tabpanel id="configtab">\r
+       <vbox >\r
+               <groupbox id="gpConnection" width="770" height="300" align ="center" >\r
+                         <caption label="&gpConnection.label;"/>\r
+                               <hbox>\r
+                                       <label  align="right" id="url"  value="&txturl.label;" width="80" />\r
+                                       <textbox id="txturl" width="200" readonly="true" />\r
+                                       <button label="&getdblist.label;" oncommand="openConfigChange();" image="&imagesearch.value;" width="90"/>\r
+                               </hbox>\r
+                               <hbox align="center" id="database_option">\r
+                               </hbox>\r
+                               <hbox id="first">\r
+                                       <label align="right" id="lbldb_list1" control="DBlist" value="&database.label;" width="80"/> 
+                                       <textbox id="DBlist_text" width="300"/>\r
+                               </hbox>\r
+\r
+                               <hbox >\r
+                                       <label align="right"  control="txtusername" value="&username.label;" width="80"/>\r
+                                       <textbox id="txtusername" width="300"/>\r
+                               </hbox>\r
+                               <hbox>\r
+                                       <label align="right" control="txtpassword" value="&password.label;" width="80"/>\r
+                                       <textbox id="txtpassword" type="password" width="300"/>\r
+                               </hbox>\r
+                               <hbox >\r
+                                       <spacer width="290"/>\r
+                                       <button align="center" id="btconnection" label="&connection.label;" oncommand="testConnection();" image="&imageok.value;" width="100"/>\r
+                               </hbox>\r
+                       </groupbox>\r
+               </vbox>\r
+    </tabpanel>\r
+    <tabpanel id="objecttab">\r
+               <groupbox id="gpObject" width="700" >\r
+               <caption label="&listDocument.header;"/>\r
+                       <hbox>\r
+                               <vbox>\r
+                                       <hbox>\r
+                                               <label control="txtobject" value="Title : " />\r
+                                               <textbox id="txtobj" width="100"/>\r
+                                               <label control="txtobject" value="&document.label;"/>\r
+                                               <textbox id="txtobject" width="100"/>\r
+                                               <label control="txtimagename" value="&image.label;"/>\r
+                                               <textbox id="txtimagename" width="100" readonly="true" />\r
+                                               <button id="btaddfile" label="&addfile.label;" oncommand="addFile();" image="&imagemoveleft.value;"/>\r
+                               \r
+                                               <button id="btobjectcreate" label="&documentcreate.label;" oncommand="searchDocument();" image="&imagemovedown.value;"/>\r
+                        <button id="btobjectdelete" label="&documentdelete.label;" oncommand="deleteDocument();" image="&imagecancel.value;"/>\r
+                                       </hbox>\r
+                                       \r
+                                       <listbox id="listObjectListBox" flex="1" rows="10">\r
+                                       <listhead>\r
+                                               <listheader label="Title"/>\r
+                                               <listheader label="&listDocumentListBox.header;"/>\r
+                                               <listheader label="Image"/>\r
+                                       </listhead>\r
+                                       <listcols>\r
+                                               <listcol flex="1"/>\r
+                                               <listcol flex="2"/>\r
+                                               <listcol flex="3"/>\r
+                                       </listcols>\r
+                                   </listbox>\r
+                               </vbox>\r
+                               <vbox>\r
+                                       <description>       </description>\r
+                               </vbox>\r
+                       </hbox>\r
+               </groupbox>\r
+    </tabpanel>\r
+    <tabpanel id="abouttab">\r
+               <groupbox id="gpAbout" width="770" align="center">\r
+                       <caption label="&gpAbout.label;"/>\r
+                       <image src="chrome://openerp_plugin/skin/developped_by.png" sizemode="stretch" align="center"/>\r
+                       <description> </description>\r
+                       <description> </description>\r
+                       <description>&develop.value;</description>\r
+                       <description> </description>\r
+                       <description> </description>\r
+                       <description>&information.value;</description>\r
+                       <description><html:a href="&openerp.value;">&openerp.value;</html:a></description>\r
+                       <description><html:a href="&axelor.value;">&axelor.value;</html:a></description>\r
+                       <description><html:a href="&tinyerp.value;">&tinyerp.value;</html:a></description>\r
+                       <description> </description>\r
+                       <description> </description>\r
+                       <description>Copyright © 2006-TODAY OpenERP SA All Rights Reserved.</description>\r
+                       <description>OpenERP is a trademark of the OpenERP SA Company. OpenERP Web is jointly developed by OpenERP SA and Axelor.</description>\r
+                       <description>Licenced under the terms of <html:a href="https://tiny.odoo.com/LICENSE.txt"> OpenERP Public License (OEPL) v1.1 (https://tiny.odoo.com/LICENSE.txt)</html:a> </description>\r
+               </groupbox>\r
+    </tabpanel>\r
+  </tabpanels>\r
+</tabbox>\r
+<hbox align="center">\r
+       <spacer width="800"/>\r
+       <button label="&close.label;" oncommand="close();" image="&imagecancel.value;"/>\r
+</hbox>\r
+</window>\r
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/config_change.xul b/addons/thunderbird/plugin/chrome/openerp_plugin/content/config_change.xul
new file mode 100644 (file)
index 0000000..1e23652
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/config_change.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml"  onload="config_change_load()"
+       title="Openerp Connection" height="140" width="280">
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+       <hbox>
+    <spacer width="70"/>
+       <description>Openerp Connection</description>
+    </hbox>
+<groupbox id="gpData" width="200">
+       <hbox >
+               <label id="lblurl" control="txtcurl" value="&lblurl.label;" width="80"/>
+               <textbox id="txtcurl" width="100" />
+       </hbox>
+       <hbox>  
+               <label id="lblport" control="txtcport" value="&lblport.label;" width="80"/>
+               <textbox id="txtcport" width="100" />
+       </hbox>
+    
+</groupbox>
+<hbox align="right">
+       <spacer width="50"/>
+  <button label="Cancel" image="&imagecancel.value;" oncommand="config_close();" />
+  <button label="OK" image="&imageok.value;" oncommand="config_ok()"/>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/create.xul b/addons/thunderbird/plugin/chrome/openerp_plugin/content/create.xul
new file mode 100644 (file)
index 0000000..d3d551d
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/create.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml"
+       title="&title.label;" onload="myPrefObserver.createContact()" height="350" width="780">
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+<tabpanel id="contact">
+  <groupbox id="contact">
+    <hbox>
+        <label  align="right" id="partner"  value="&selectpartner.value;" width="97" />
+               <textbox id="txtselectpartner" readonly="true" value="" width="270"/>
+               <button label="&bsearch.label;" oncommand="Select.onMenuItemCommand(event);" image="&imagesearch.value;"/>
+       </hbox>
+       <hbox>
+        <label  align="right" id="name"  value="&name.value;" width="80" />
+               <textbox id="txtname" align="right" width="270"/>
+       </hbox>
+    </groupbox>
+    </tabpanel>    
+
+ <tabpanel id="address">
+  <groupbox id="address">
+    <hbox>
+        <caption label="&postaladdress.value;" />
+        <spacer width="300"/>
+     <vbox>
+        <caption label="&communication.value;" />
+     </vbox>
+    </hbox>
+
+     <hbox>
+        <label  align="right" id="street"  value="&street.value;" width="97" />
+               <textbox id="txtstreet" width="270"/>
+        <spacer width="33"/>
+         <vbox>
+             <label  align="right" id="office"  value="&office.value;" width="50" />
+        </vbox>
+        <vbox>
+               <textbox id="txtoffice" />
+        </vbox>
+       </hbox>
+
+     <hbox>
+        <label  align="right" id="street2"  value="&street2.value;" width="97" />
+               <textbox id="txtstreet2" width="270"/>
+        <spacer width="35"/>
+        <vbox>
+        <label  align="right" id="fax"  value="&fax.value;" width="48" />
+        </vbox>
+        <vbox>
+               <textbox id="txtfax" />
+        </vbox>
+       </hbox>
+   <hbox>
+        <label  align="right" id="zip"  value="&zip.value;" width="97" />
+               <textbox id="txtzip" />
+        <spacer width="114"/>
+        <vbox>
+        <label  align="right" id="mobile"  value="&mobile.value;" width="48" />
+        </vbox>
+        <vbox>
+               <textbox id="txtmobile"/>
+        </vbox>
+       </hbox>
+
+     <hbox>
+        <label  align="right" id="city"  value="&city.value;" width="97"/>
+               <textbox id="txtcity" />
+        <spacer width="112"/>
+        <vbox>
+          <label  align="right" id="emailid"  value="&email.value;" width="50" />
+        </vbox>
+        <vbox>
+               <textbox id="txtemail" width="260" />
+        </vbox>
+       </hbox>
+    <hbox>
+         <label  align="right" id="countryname"  value="&country.value;" width="97" />
+         <menulist id="country" width="190">
+           <menupopup>
+            <menuitem label="" value=""/>
+           </menupopup>
+         </menulist>
+       </hbox>
+
+     <hbox>
+         <label  align="right" id="statename"  value="&state.value;" width="97" />
+         <menulist id="state" width="190">
+           <menupopup>
+            <menuitem label="" value=""/>
+           </menupopup>
+         </menulist>
+       </hbox>
+</groupbox>
+</tabpanel>
+<description></description>
+<hbox>
+  <spacer width="580"/>
+  <button label="&cancel.label;" image="&imagecancel.value;" oncommand="close();" />
+  <button label="&ok.label;" image="&imageok.value;" oncommand="createContact();"/>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/createpartner.xul b/addons/thunderbird/plugin/chrome/openerp_plugin/content/createpartner.xul
new file mode 100644 (file)
index 0000000..abc23a5
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/createpartner.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml"
+       title="&title.label;" height="100" width="325">
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+<groupbox id="gpData">
+       <hbox>
+               <description>&name.value;</description>
+               <spacer width="50"/>
+               <textbox id="txtname" align="right" />
+       </hbox>
+</groupbox>
+<description></description>
+<hbox>
+  <spacer width="140"/>
+  <button label="&cancel.label;" image="&imagecancel.value;" oncommand="close();" />
+  <button label="&ok.label;" image="&imageok.value;" oncommand="createPartner();"/>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/exportTools.js b/addons/thunderbird/plugin/chrome/openerp_plugin/content/exportTools.js
new file mode 100644 (file)
index 0000000..7da3701
--- /dev/null
@@ -0,0 +1,248 @@
+
+var MBstrBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].
+                       getService(Components.interfaces.nsIStringBundleService);
+var mboximportbundle = MBstrBundleService.createBundle("chrome://openerp_plugin/locale/mboximport.properties"); 
+
+
+function saveMsgAsEML(msguri,file,append,uriArray,hdrArray,fileArray) {
+       
+    var myEMLlistner = {
+          
+               scriptStream : null,
+               emailtext : "",
+
+        QueryInterface : function(iid)  {
+                if (iid.equals(Components.interfaces.nsIStreamListener) ||   
+                    iid.equals(Components.interfaces.nsIMsgHeaderSink) ||
+                    iid.equals(Components.interfaces.nsISupports))
+                 return this;
+        
+                throw Components.results.NS_NOINTERFACE;
+                return 0;
+        },
+        
+        onStartRequest : function (aRequest, aContext) { 
+                       this.scriptStream = Components.classes['@mozilla.org/binaryinputstream;1'].createInstance(Components.interfaces.nsIBinaryInputStream);
+        },
+            
+        onStopRequest : function (aRequest, aContext, aStatusCode) {
+                       this.scriptStream = null;
+                                               
+                       if (append) {
+                               if (this.emailtext != "") {
+                                       var data = this.emailtext + "\n";
+                                       // Some Imap servers don't add to the message the "From" prologue
+                                       if (data && ! data.match(/^From/)) {
+                                               var now = new Date;
+                                               var prologue = "From - " + now.toString() + "\n";
+                                               data = prologue+data;
+                                       }
+                                       data = IETescapeBeginningFrom(data);
+                               }
+                               var fileClone = file.clone();
+                               IETwriteDataOnDisk(fileClone,data,true,this.sub,null);
+                       }
+                       else {
+                               if (! hdrArray)
+                                       var sub = getSubjectForHdr(hdr);
+                               else {
+                                       var parts = hdrArray[IETexported].split("§][§^^§");
+                                       var sub = parts[4];
+                               }
+                       
+                               var data = this.emailtext.replace(/^From.+\r?\n]/, "");
+                               data = IETescapeBeginningFrom(data);
+                               var clone = file.clone();
+                               // The name is taken from the subject "corrected"
+                               clone.append(sub+".eml");
+                               clone.createUnique(0,0644);
+                               var time = (hdr.dateInSeconds)*1000;
+                               IETwriteDataOnDisk(clone,data,false,null,time);
+                       }
+                       IETexported = IETexported + 1;
+                       IETwritestatus(mboximportbundle.GetStringFromName("exported")+" "+IETexported+" "+mboximportbundle.GetStringFromName("msgs")+" "+IETtotal);
+                       
+                       if (IETexported < IETtotal) {
+                               if (fileArray) {
+                                       var nextUri = uriArray[IETexported];
+                                       var nextFile = fileArray[IETexported];
+                               }
+                               else if (! hdrArray) {
+                                       var nextUri = uriArray[IETexported];
+                                       var nextFile = file;
+                               }
+                               else {
+                                       parts = hdrArray[IETexported].split("§][§^^§");
+                                       var nextUri = parts[5];
+                                       var nextFile = file;
+                               }
+                               saveMsgAsEML(nextUri,nextFile,append,uriArray,hdrArray,fileArray);
+                       }
+                       else {
+                               IETexported = 0;
+                               IETtotal = 0;
+                       }
+               },
+            
+        onDataAvailable : function (aRequest, aContext, aInputStream, aOffset, aCount) {
+                       this.scriptStream.setInputStream(aInputStream);
+                       var chunk = this.scriptStream.readBytes(aCount);
+               this.emailtext += chunk;
+            }        
+        };
+       var mms = messenger.messageServiceFromURI(msguri).QueryInterface(Components.interfaces.nsIMsgMessageService);
+       var hdr = mms.messageURIToMsgHdr(msguri);
+       mms.streamMessage(msguri, myEMLlistner, msgWindow, null, false, null);
+}
+
+
+function nametoascii(str) {
+       if (! gPrefBranch.getBoolPref("mboximport.export.filenames_toascii")) {
+               str = str.replace(/[\x00-\x19]/g,"_");
+               return str.replace(/[\/\\:,<>*\?\"\|]/g,"_");
+       }
+       if (str)
+               str = str.replace(/[^a-zA-Z0-9]/g,"_");
+       else
+               str = "Undefinied_or_empty";
+       return str;
+}
+
+
+function  IETwriteDataOnDisk(file,data,append,name,time) {
+       var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
+               .createInstance(Components.interfaces.nsIFileOutputStream);
+       if (append) {
+               file.append(name);
+               foStream.init(file, 0x02 | 0x08 | 0x10, 0664, 0); // write,  create, append
+       }
+       else 
+               foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
+       if (data)
+               foStream.write(data,data.length);
+       foStream.close();
+       var prefs = Components.classes["@mozilla.org/preferences-service;1"]
+               .getService(Components.interfaces.nsIPrefBranch);
+       if (time && prefs.getBoolPref("mboximport.export.set_filetime"))
+               file.lastModifiedTime = time;
+}
+
+
+
+function IETescapeBeginningFrom(data) {
+       // Workaround to fix the "From " in beginning line problem in body messages
+       // See https://bugzilla.mozilla.org/show_bug.cgi?id=119441 and
+       // https://bugzilla.mozilla.org/show_bug.cgi?id=194382
+       // TB2 has uncorrect beahviour with html messages
+       // This is not very fine, but I didnt' find anything better...
+       var datacorrected = data.replace(/\nFrom /g, "\n From ");
+       return datacorrected;
+}
+
+
+function getPredefinedFolder(type) {
+       var prefs = Components.classes["@mozilla.org/preferences-service;1"]
+               .getService(Components.interfaces.nsIPrefBranch);
+       // type 0 = folder
+       // type 1 = all messages
+       // type 2 = selected messages
+
+       var use_dir = "mboximport.exportMSG.use_dir";
+
+       var dir_path="";
+       if(navigator.userAgent.indexOf('Linux')!= -1){
+               dir_path ="/tmp"
+       }
+       else if(navigator.userAgent.indexOf('Win')!= -1){
+               dir_path ="C:\\"
+       }
+       else if(navigator.userAgent.indexOf('Mac OS X')!= -1){ 
+               dir_path ="/tmp"
+       } 
+       try {
+               var localFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+               localFile.initWithPath(dir_path);
+               return localFile;
+
+       }
+       catch(e) {
+               return null;
+       }
+}
+
+function getSubjectForHdr(hdr) {
+       var emlNameType = gPrefBranch.getIntPref("mboximport.exportEML.filename_format");       
+       var mustcorrectname = gPrefBranch.getBoolPref("mboximport.export.filenames_toascii");
+       var subMaxLen = gPrefBranch.getIntPref("mboximport.subject.max_length")-1;
+       if (hdr.mime2DecodedSubject)
+
+               var subj = hdr.mime2DecodedSubject.substring(0, subMaxLen);
+       else
+               var subj =IETnosub;
+       subj = nametoascii(subj);
+       var dateInSec = hdr.dateInSeconds;
+       var msgDate8601string = dateInSecondsTo8601(dateInSec);
+       var key = hdr.messageKey;
+       if (emlNameType == 2) {
+               var pattern = gPrefBranch.getCharPref("mboximport.export.filename_pattern");
+               pattern = pattern.replace("%s",subj);
+       pattern = pattern.replace("%k",key);
+               pattern = pattern.replace("%d", msgDate8601string);
+               pattern = pattern.replace(/-%e/g, "");
+               pattern = pattern.replace(/[\x00-\x19]/g,"_");
+               var fname = pattern;
+       }
+       else {
+
+               var fname = msgDate8601string+"-"+subj+"-"+hdr.messageKey;
+       }
+       setFileName(fname)
+       fname = fname.replace(/[\x00-\x19]/g,"_");
+       if (mustcorrectname)
+               fname = nametoascii(fname);
+       else
+               fname = fname.replace(/[\/\\:,<>*\?\"\|]/g,"_");
+       return fname;
+}
+
+function dateInSecondsTo8601(secs) {
+       var addTime = gPrefBranch.getBoolPref("mboximport.export.filenames_addtime");
+       var msgDate = new Date(secs*1000);
+       var msgDate8601 = msgDate.getFullYear();
+       if (msgDate.getMonth() < 9)
+               var month = "0"+(msgDate.getMonth()+1);
+       else
+               var month = msgDate.getMonth()+1;
+       if (msgDate.getDate() < 10)
+               var day = "0"+ msgDate.getDate();
+       else
+               var day = msgDate.getDate();
+       var msgDate8601string = msgDate8601.toString()+month.toString()+day.toString();
+       if (addTime &&  gPrefBranch.getIntPref("mboximport.exportEML.filename_format") == 2) {
+               if (msgDate.getHours() < 10)
+                       var hours = "0"+msgDate.getHours();
+               else
+                       var hours = msgDate.getHours();
+               if (msgDate.getMinutes() < 10)
+                       var min = "0"+msgDate.getMinutes();
+               else
+                       var min = msgDate.getMinutes();
+               msgDate8601string += "-"+ hours.toString() + min.toString();
+       }
+       return msgDate8601string;
+}
+
+function IETwritestatus(text) {
+       document.getElementById("statusText").setAttribute("label", text);
+       var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
+       var delay = prefs.getIntPref("mboximport.delay.clean_statusbar");
+       if (delay > 0)
+               window.setTimeout(function(){IETdeletestatus(text);}, delay);
+}
+
+function IETdeletestatus(text) {
+       if (document.getElementById("statusText").getAttribute("label") == text)
+               document.getElementById("statusText").setAttribute("label", "");
+}
+
+
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/loaddata.js b/addons/thunderbird/plugin/chrome/openerp_plugin/content/loaddata.js
new file mode 100755 (executable)
index 0000000..8a3b226
--- /dev/null
@@ -0,0 +1,134 @@
+//gives the preference branch instance
+var preferenceBranch = getPref();
+
+//returns the selected checkbox for searching
+function getnamesearch()
+{
+       var checkboxlist = [];
+       var j=0;
+       var objectlist = preferenceBranch.getCharPref("object").split(',');
+       if (objectlist[0]!=''){
+               for (var i=1;i<=objectlist.length;i++)
+               {
+                       if(document.getElementById('cbx'+i) && document.getElementById('cbx'+i).checked == true)
+                       {
+                               checkboxlist[j] = objectlist[i-1] //document.getElementById('cbx'+i).label;
+                               j++;
+                       }
+               }
+       }
+       return checkboxlist;
+}
+//function to set the text value for the selected partner for contact creation
+function selectPartner(){
+       if(document.getElementById('listPartnerBox').selectedItem){
+               var listselectedItem = document.getElementById('listPartnerBox').selectedItem;
+               var value = listselectedItem.firstChild.getAttribute('label');
+               setPartnerId(listselectedItem.value);
+               document.getElementById('txtselectpartner').setAttribute('value',value);
+               window.opener.document.getElementById('txtselectpartner').setAttribute('value',value);
+               }
+       else{
+               window.opener.document.getElementById('txtselectpartner').setAttribute('value','');
+       }
+}
+
+//function for the intialization procedure //used while loading and unloading of the window
+var myPrefObserver =
+{
+       //set the intial value of the email for the text field in plugin window and also loads the listbox of objects with image
+       loaddata: function()
+       {       
+               setTimeout("listSearchDocumentAttachment()", 0)
+       },
+
+       //set the initial value of name and email field of create contact window
+       createContact: function()
+       {
+        document.getElementById("txtname").value = getSenderName();
+        document.getElementById("txtemail").value = getSenderEmail();
+        document.getElementById("country").value = getAllCountry();
+        document.getElementById("state").value = getAllState();
+        setPartnerId(0);
+       },
+
+       //sets the value of email information in preferences and adds observer for the window
+       register: function()
+       {
+           appendDbList()
+           preferenceBranch.addObserver("", myPrefObserver, false);
+           document.getElementById("txturl").value = getServer();
+           var s = document.getElementById('txturl').value;
+           var a =s.split(':');
+           setPort(a[a.length-1]);
+           document.getElementById("txtusername").value = getUsername();
+           document.getElementById("txtpassword").value = getPassword();
+           document.getElementById("DBlist_text").value = getDbName();
+               if(getPref().getCharPref("object") != ''){
+               var objectlist = getPref().getCharPref("object").split(',');
+               var imagelist = getPref().getCharPref("imagename").split(',');
+               var obj = getPref().getCharPref("listobject").split(',');
+                       if(objectlist.length>0){
+                               for(i=0;i<objectlist.length;i++){
+                                       var     listItem = document.createElement("listitem");
+                                       var listcell1 = document.createElement("listcell");
+                                       var listcell2 = document.createElement("listcell");
+                                       var listcell3 = document.createElement("listcell");
+                                       listcell1.setAttribute("label",obj[i]);
+                                       listcell2.setAttribute("label",objectlist[i]);
+                                       listcell3.setAttribute("image",imagelist[i]);
+                                       listcell3.setAttribute("class","listcell-iconic")
+                                       listcell3.setAttribute("width",16)
+                                       listcell3.setAttribute("height",16)
+                                       listItem.appendChild(listcell1);
+                                       listItem.appendChild(listcell2);
+                                       listItem.appendChild(listcell3);
+                                       document.getElementById("listObjectListBox").appendChild(listItem);
+                   
+                               }
+                       }
+               }
+    },
+
+    createContactAddress: function()
+       {
+               document.getElementById("txtname").value = getPartnerName();
+        document.getElementById("txtcontactname").value = getSenderName();
+        document.getElementById("txtstreet").value = getStreet();
+        document.getElementById("txtstreet2").value = getStreet2();
+        document.getElementById("txtzip").value = getZipCode();
+        document.getElementById("txtcity").value = getCity();
+        document.getElementById("txtoffice").value = getOfficenumber();
+        document.getElementById("txtfax").value = getFax();
+        document.getElementById("txtmobile").value = getMobilenumber();
+           document.getElementById("txtemail").value = getSenderEmail();
+        document.getElementById("country").value =getAllCountry();
+        document.getElementById("state").value = getAllState();
+       },
+
+       //unregistering the window observer
+       unregister: function()
+       {
+               if(!preferenceBranch) return;
+           preferenceBranch.removeObserver("", myPrefObserver);
+       },
+
+       observe: function(aSubject, aTopic, aData)
+       {
+       if(aTopic != "nsPref:changed") return;
+       // aSubject is the nsIPrefBranch we're observing (after appropriate QI)
+       // aData is the name of the pref that's been changed (relative to aSubject)
+       switch (aData) {
+               case "serverport":
+               break;
+       case "serverurl":
+               break;
+       case "serverdbname":
+               break;
+       }
+       },
+}
+
+function runMoreCode() 
+{
+} 
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/overlay.js b/addons/thunderbird/plugin/chrome/openerp_plugin/content/overlay.js
new file mode 100755 (executable)
index 0000000..75a4b67
--- /dev/null
@@ -0,0 +1,315 @@
+//global array creation and declaration\r
+var contentType = new Array();\r
+var uri = new Array();\r
+var url = new Array();\r
+var name = new Array();\r
+var test = new Array();\r
+\r
+var MBstrBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].\r
+                       getService(Components.interfaces.nsIStringBundleService);\r
+var mboximportbundle = MBstrBundleService.createBundle("chrome://mboximport/locale/mboximport.properties"); \r
+//function to get the required details of the selected email\r
+\r
+function searchmail()\r
+{      \r
+       setTimeout("createConnection()",5000)\r
+       if (getconnect_server() == "false")\r
+       {\r
+               alert("Please Login To The Database First !")\r
+               return false;\r
+       }\r
+       setTimeout("module_install()", 10000)\r
+       if (getmodule_install() == "no")\r
+       {\r
+               alert("Please install the thunderbird module on your '" + getDbName() +"' database Or try again !");\r
+               return false\r
+       }\r
+       var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);\r
+       var version_obj = prefService.getBranch("extensions.");\r
+       version_obj.QueryInterface(Components.interfaces.nsIPrefBranch2);\r
+       version = version_obj.getCharPref("lastAppVersion");\r
+       version = parseInt(version[0])\r
+       \r
+       file = getPredefinedFolder(2);\r
+       \r
+       if (version > 2)\r
+       {\r
+               var emlsArray = gFolderDisplay.selectedMessages;\r
+       }\r
+       else\r
+       {\r
+               var emlsArray = GetSelectedMessages();\r
+       }\r
+\r
+       IETtotal = emlsArray.length;\r
+       IETexported = 0;\r
+       var msguri = emlsArray[0];\r
+\r
+       if(GetNumSelectedMessages() < 1 || GetNumSelectedMessages() > 1){\r
+               alert("You must select only one mail to archive");\r
+               return false\r
+       }\r
+\r
+       //gives the selected email uri\r
+       var messageUri= gDBView.URIForFirstSelectedMessage;\r
+\r
+       var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);\r
+\r
+       //gives the selected email object\r
+       var message = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);\r
+\r
+\r
+       if (version > 2)\r
+       {\r
+               m_uri = message.folder.getUriForMsg(message);\r
+               saveMsgAsEML(m_uri,file,false,emlsArray,null);\r
+       }\r
+       else\r
+       {\r
+               saveMsgAsEML(msguri,file,false,emlsArray,null);\r
+       }\r
+\r
+       //gives the received email date\r
+       var stdate = new Date(message.date / 1000);\r
+\r
+       //functionality to split the author name and email\r
+       if(message.author.charAt(0) == '"'){\r
+               sendername = message.author.split('"')[1].split('"')[0];\r
+       }\r
+       else if(message.author.indexOf('<')!=-1){\r
+               sendername = message.author.split('<')[0];\r
+       }\r
+       else{\r
+               sendername = message.author;\r
+       }\r
+       if(message.author.indexOf('<')!=-1){\r
+               senderemail = message.author.split('<')[1].split('>')[0];
+       }\r
+       else{\r
+               senderemail = message.author
+       }\r
+\r
+       //gives the receiver email address\r
+       receiveremail = message.mime2DecodedRecipients;\r
+\r
+       //parsing the received date in the particular format\r
+       receivedDate = stdate.getFullYear()+'/'+(stdate.getMonth()+1)+'/'+stdate.getDate();\r
+\r
+       //gives the selected email subject\r
+       subject = message.subject;\r
+\r
+       //gives the selected email cclist\r
+       cclist = message.ccList;\r
+\r
+       //gives the selected email message body in text format\r
+       if (version > 2)\r
+       {\r
+               var listener = Components.classes["@mozilla.org/network/sync-stream-listener;1"].createInstance(Components.interfaces.nsISyncStreamListener);  \r
+               var uri = message.folder.getUriForMsg(message);\r
+               messenger.messageServiceFromURI(uri)  \r
+                   .streamMessage(uri, listener, null, null, false, "");    \r
+               var folder = message.folder;  \r
+               messagebody = folder.getMsgTextFromStream(listener.inputStream,message.Charset,65536,32768,false,true,{})\r
+       }\r
+       else\r
+       {\r
+               messagebody = getMessageBrowser().docShell.contentViewer.DOMDocument.body.textContent;\r
+       }\r
+       //gives the selected email message body in html format\r
+       msghtmlbody = ""// getMessageBrowser().docShell.contentViewer.DOMDocument.body.innerHTML;\r
+\r
+       //set the initial information for the selected email\r
+       setSenderEmail(senderemail);\r
+       setSenderName(sendername);\r
+       setReceiverEmail(receiveremail);\r
+       setSubject(subject);\r
+       setReceivedDate(receivedDate);\r
+       setCCList(cclist);\r
+       setMessageBody(messagebody);\r
+       getPref().setCharPref('displayName','');\r
+       getPref().setCharPref('attachmentdata','');\r
+       name = [];\r
+       test = [];\r
+       getPref().setCharPref('attachmentlength',currentAttachments.length);\r
+       //retrieving the information for the selected email's attachment\r
+       if(currentAttachments.length > 0){\r
+               for(i=0;i<currentAttachments.length;i++){\r
+                       contentType[i] = currentAttachments[i].contentType;\r
+                       uri = currentAttachments[i].uri;\r
+                       url[i] = currentAttachments[i].url;\r
+                       name[i] = currentAttachments[i].displayName;\r
+                       var obj = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
+                       if(navigator.userAgent.indexOf('Linux')!= -1){\r
+                               obj.initWithPath("/tmp/");\r
+                       }\r
+                       else if(navigator.userAgent.indexOf('Win')!= -1){\r
+                               obj.initWithPath("c:\\");\r
+                       }\r
+                       else if(navigator.userAgent.indexOf('Mac OS X')!= -1){ \r
+                               obj.initWithPath("/tmp/");\r
+                       } \r
+                       else{\r
+                               alert("Not Compatible for this Operating System");\r
+                               false();\r
+                       }\r
+                       //saving the attachment files in system's temp folder\r
+                       test[i] = messenger.saveAttachmentToFolder(contentType[i],url[i],name[i],uri,obj);\r
+               }\r
+               //function to read the attachment file contents\r
+               att =getAttachValue()\r
+               if (getmodule_install() == "no")\r
+               {\r
+                       alert("Please install the thunderbird module on your '" + getDbName() +"' database  Or try again !");\r
+                       return false\r
+               }\r
+               window.open("chrome://openerp_plugin/content/plugin.xul", "", "chrome, resizable=yes");\r
+               createInstance(name,test)\r
+\r
+       }\r
+       else\r
+       {\r
+                       if (getmodule_install() == "no")\r
+                       {\r
+                               alert("Please install the thunderbird module on your '" + getDbName() +"' database  Or try again !");\r
+                               return false\r
+                       }\r
+               window.open("chrome://openerp_plugin/content/plugin.xul", "", "chrome, resizable=yes");\r
+       }\r
+}\r
+
+function open_contact()\r
+{      \r
+       setTimeout("createConnection()",5000)\r
+       if (getconnect_server() == "false")\r
+       {\r
+               alert("Please Login To The Database First !")\r
+               return false;\r
+       }\r
+       setTimeout("module_install()", 10000)\r
+       if (getmodule_install() == "no")\r
+       {\r
+               alert("Please install the thunderbird module on your '" + getDbName() +"' database Or try again !");\r
+               return false\r
+       }\r
+       if(GetNumSelectedMessages() < 1 || GetNumSelectedMessages() > 1){\r
+               alert("You must select only one mail For Open Contact Detail");\r
+               return false\r
+       }\r
+\r
+       //gives the selected email uri\r
+       var messageUri= gDBView.URIForFirstSelectedMessage;\r
+\r
+       var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);\r
+\r
+       //gives the selected email object \r
+       var message = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);\r
+\r
+       //functionality to split the author name and email\r
+       if(message.author.charAt(0) == '"'){\r
+               sendername = message.author.split('"')[1].split('"')[0];\r
+       }\r
+       else if(message.author.indexOf('<')!=-1){\r
+               sendername = message.author.split('<')[0];
+       }\r
+       else{\r
+               sendername = message.author;
+       }\r
+       if(message.author.indexOf('<')!=-1){\r
+               senderemail = message.author.split('<')[1].split('>')[0];
+       }\r
+       else{\r
+               senderemail = message.author
+       }\r
+\r
+       //set the initial information for the selected email
+       setSenderEmail(senderemail);
+       setSenderName(sendername);
+    setPartnerName("");
+    setStreet("");
+    setStreet2("");
+    setZipCode("");
+    setCity("");
+    setOfficenumber("");
+    setFax("");
+    setMobilenumber("");
+
+    if (getmodule_install() == "no")\r
+       {\r
+               alert("Please install the thunderbird module on your '" + getDbName() +"' database  Or try again !");\r
+               return false\r
+       }\r
+       window.open("chrome://openerp_plugin/content/address.xul", "", "chrome, resizable=yes");\r
+\r
+}\r
+\r
+//function to open the configuration window\r
+var Config = {\r
+  onLoad: function() {\r
+    // initialization code\r
+    this.initialized = true;\r
+  },\r
+\r
+  onMenuItemCommand: function() {\r
+    window.open("chrome://openerp_plugin/content/config.xul", "", "chrome");\r
+  }\r
+};\r
+window.addEventListener("load", function(e) { Config.onLoad(e); }, false);\r
+\r
+//function to open the plugin window for searching the records for a particular object\r
+var Plugin = {\r
+       onLoad: function() {\r
+       this.initialized = true;\r
+       },\r
+\r
+       onMenuItemCommand: function() {\r
+               window.open("chrome://openerp_plugin/content/plugin.xul", "", "chrome, resizable=yes");\r
+       }\r
+};\r
+window.addEventListener("load", function(e) { Plugin.onLoad(e); }, false);\r
+\r
+//function to open the window for creating a new partner contact\r
+var Create = {\r
+       onLoad: function(){\r
+       this.initialized=true;\r
+       },\r
+\r
+       onMenuItemCommand: function(){\r
+               window.open("chrome://openerp_plugin/content/create.xul", "", "chrome");\r
+       }\r
+};\r
+window.addEventListener("load", function(e) { Create.onLoad(e); }, false);\r
+
+var Address = {\r
+       onLoad: function(){\r
+       this.initialized=true;\r
+       },\r
+\r
+       onMenuItemCommand: function(){
+       open_contact();
+        searchContact();\r
+       }\r
+};\r
+
+\r
+//function to open the window for selecting the partner for a new contact creation\r
+var Select = {\r
+       onLoad: function(){\r
+       this.initialized=true;\r
+       },\r
+\r
+       onMenuItemCommand: function(){\r
+               window.open("chrome://openerp_plugin/content/selectpartner.xul", "", "chrome");\r
+       }\r
+};\r
+\r
+var CreatePartner = {\r
+       onLoad: function(){\r
+       this.initialized=true;\r
+       },\r
+\r
+       onMenuItemCommand: function(){\r
+               window.open("chrome://openerp_plugin/content/createpartner.xul", "", "chrome");\r
+       }\r
+};\r
+window.addEventListener("load", function(e) { CreatePartner.onLoad(e); }, false);\r
+\r
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/overlay.xul b/addons/thunderbird/plugin/chrome/openerp_plugin/content/overlay.xul
new file mode 100755 (executable)
index 0000000..1956ebe
--- /dev/null
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>\r
+<?xml-stylesheet href="chrome://openerp_plugin/skin/overlay.css" type="text/css"?>\r
+<!DOCTYPE overlay SYSTEM "chrome://openerp_plugin/locale/overlay.dtd">\r
+<overlay id="tiny-overlay"\r
+         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\r
+         xmlns:html="http://www.w3.org/1999/xhtml">\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/exportTools.js"></script>\r
+\r
+<menupopup id="taskPopup">\r
+    <menuitem id="tiny-plugin" label="&tinyplugin;"\r
+          oncommand="Config.onMenuItemCommand(event);"\r
+          image="&menuicon.value;"\r
+          class="menuitem-iconic"\r
+          tooltiptext="&pluginconfig.value;"/>\r
+</menupopup>\r
+\r
+<menupopup id="taskPopup">\r
+    <menuitem id="tiny-plugin1" label="&tinypluginconfig;"\r
+          oncommand="searchmail();"\r
+          image="&menuicon.value;"\r
+          class="menuitem-iconic"\r
+          tooltiptext="&pluginconfigvalue.value;"/>\r
+</menupopup>\r
+\r
+<popup id="threadPaneContext">\r
+       <menuitem id="threadPaneContext-saveAsMultiple"\r
+               insertbefore="threadPaneContext-print"\r
+               class="menuitem-iconic"\r
+               image="&menuicon.value;"\r
+               label="Archive To OpenERP"\r
+               accesskey="T"\r
+               oncommand="searchmail();"/>\r
+</popup>\r
+\r
+<toolbarpalette id="MailToolbarPalette">\r
+       <toolbarbutton id="GA-button"\r
+               class="toolbarbutton-1"\r
+               image="&menuicon.value;"\r
+               label= "Archive To OpenERP"\r
+               oncommand="searchmail();" />\r
+</toolbarpalette> \r
+\r
+<toolbarpalette id="MailToolbarPalette">\r
+       <toolbarbutton id="GA-button1"\r
+               class="toolbarbutton-1"\r
+               image="&partnericon.value;"\r
+               label= "Open Contact"\r
+               oncommand="Address.onMenuItemCommand(event);" />\r
+</toolbarpalette> \r
+\r
+<toolbarpalette id="MailToolbarPalette">\r
+       <toolbarbutton id="GA-button2"\r
+               class="toolbarbutton-1"\r
+               image="&imagearchive.value;"\r
+               label= "Open Document"\r
+               oncommand="archivemail();"  />\r
+</toolbarpalette> \r
+\r
+\r
+</overlay>\r
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/plugin.xul b/addons/thunderbird/plugin/chrome/openerp_plugin/content/plugin.xul
new file mode 100644 (file)
index 0000000..137bdca
--- /dev/null
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<?xml-stylesheet href="chrome://openerp_plugin/skin/line.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/plugin.dtd">
+<window id="pluginwindows" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml"
+       title="&title.label;" onload="myPrefObserver.loaddata()" height="480" width="1000">
+
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/exportTools.js"></script>
+<description></description>
+<hbox id="root">
+   <vbox width="400">
+      <groupbox height="30" id="existsobjectgroup" width="400">
+         <caption label="&gptinyobj.label;" />
+          <hbox>
+          <label id="lblsearch" control="txtvalueobj" value="&search.label;"/>
+          <textbox id="txtvalueobj" size="30"/>
+          <button label="&bsearch.label;" oncommand="searchCheckbox()" image="&imagesearch.value;" accesskey="s"/> 
+          </hbox>
+          <vbox align="left" id="checkbox-dynamic"> 
+         </vbox> 
+         <hbox align="center">
+          <image src='chrome://tiny_plugin/skin/perform.gif'/>
+           <checkbox id="cbxselectall" oncommand="selectAllCheckbox();" label="&cbxselectall.label;" checked="false"/>
+           <spacer width="10"/>
+      
+         </hbox>
+    <label id="lblex" value=" "/>
+    <hbox>
+    <description>Documents</description>
+    </hbox>
+       <listbox height="250" id="listSearchBox" seltype="multiple">
+           <listhead >
+               <listheader label="&listSearchBox.header;"/>
+           </listhead>
+           <listcols>
+               <listcol  flex="1"/>
+           </listcols>
+       </listbox>
+       <hbox>
+       <spacer width="360"/>
+       <button label="&attach.label;" image="&imagearchive.value;" oncommand="attachmentWidnowOpen('upload');"/>
+       </hbox>
+      </groupbox>
+
+   </vbox>
+   <vbox>
+      <groupbox id="newobjectgroup" align="center" width="170" height="375">
+       <caption label="&newobject.label;" />
+       <hbox>
+       <label id="lblex" value=" "/>
+         <label id="lblex3" control="section" value="&object.label;"/>
+         <menulist id="section" width="150">
+           <menupopup>
+            <menuitem label="" value=""/>
+           </menupopup>
+         </menulist>
+        <vbox>
+         <button width="50" label="&archive.label;" accesskey="c" image="&imagearchive.value;" oncommand="attachmentWidnowOpen('create');"/>
+        </vbox>
+       </hbox>
+
+       <label id="lblsection" value=" "/>      
+       <separator class="groove-thin" orient="horizontal" width="180"/>
+
+    <tabpanels>\r
+    <tabpanel id="contact">
+    <hbox>
+       <label id="lblsection" control="section" value="&partner.label;"/>
+        <vbox>
+           <button label="&create.label;" accesskey="r" image="&imagecreate.value;" oncommand="Create.onMenuItemCommand(event);"/>
+        </vbox>
+    </hbox>
+    </tabpanel>
+    </tabpanels>
+ </groupbox>
+  <label id="lblex" value=" "/>
+  <label id="lblex" value=" "/>
+  <hbox align="right">
+  <spacer width="360"/>
+           <button label="&close.label;" accesskey="l" image="&imagecancel.value;" oncommand="win_close();"/>
+    </hbox>
+    
+  
+  </vbox>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/selectpartner.xul b/addons/thunderbird/plugin/chrome/openerp_plugin/content/selectpartner.xul
new file mode 100644 (file)
index 0000000..f051233
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/selectpartner.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml" onload="getPartnerList()"
+       title="&title.label;" height="500" width="375">
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+<groupbox id="gpPartner">
+       <hbox>
+               <textbox id="txtselectpartner"/>
+               <spacer width="25"/>
+               <button label="&bsearch.label;" image="&imagesearch.value;" oncommand="getPartnerList();"/>
+       </hbox>
+</groupbox>
+<listbox id="listPartnerBox" flex="1" rows="5">
+    <listhead>
+       <listheader label="&listPartnerName.header;"/>
+    </listhead>
+    <listcols>
+       <listcol flex="1"/>
+    </listcols>
+</listbox>
+<description></description>
+<hbox>
+  <button label="Create Partner" image="&imagecreate.value;" oncommand="CreatePartner.onMenuItemCommand(event);"/>
+  <spacer width="45"/>
+  <button label="&cancel.label;" image="&imagecancel.value;" oncommand="close();" />
+  <button label="&select.label;" image="&imageok.value;" oncommand="selectPartner();close()"/>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/static.js b/addons/thunderbird/plugin/chrome/openerp_plugin/content/static.js
new file mode 100644 (file)
index 0000000..c44c5bf
--- /dev/null
@@ -0,0 +1,19 @@
+
+//function to check all the checkbox
+function selectAllCheckbox()
+{
+       var objectlist = preferenceBranch.getCharPref("object").split(',');
+       if(objectlist.length == 1 && objectlist[0]==''){
+               return false;
+       }
+       for (var i=1;i<=objectlist.length;i++)
+       {
+               var checkboxobj = document.getElementById('cbx'+i);
+               if (!checkboxobj)
+                       continue
+               if(document.getElementById('cbxselectall').checked == true)
+                       checkboxobj.checked = true;
+               else
+                       checkboxobj.checked = false;
+       }
+}
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/content/tiny_xmlrpc.js b/addons/thunderbird/plugin/chrome/openerp_plugin/content/tiny_xmlrpc.js
new file mode 100755 (executable)
index 0000000..61afb15
--- /dev/null
@@ -0,0 +1,2045 @@
+/**
+* Global instance stored here
+*/
+
+var xmlRpcClient;
+
+//Service name on server like /common,/db etc...
+var strServerService;
+
+//temporary variables
+var strobject;
+
+//Array
+var arrDbList = new Array();
+var arrPartnerList = new Array();
+var arrFinalList = new Array();
+
+
+var contentType = new Array();
+var uri = new Array();
+var url = new Array();
+var name = new Array();
+var attach_eml ="no";
+var popup_display = "yes"
+var rpc= {
+       servers: {},
+       addserver: function(name,ip,port,path) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               this.servers[name]= {
+                       ip: ip,
+                       port: port,
+                       path: path,
+                       avaible: true,
+                       sock: Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient)};
+       },
+       getany: function(rpcval,n) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var t = ['PRUint8','PRUint16','PRInt16','PRInt32','PRBool','Char','CString','Float','Double','PRTime','InputStream','Array','Dictionary'];
+               for (var i=0; i<t.length; i++)
+                       try { return [t[i],this.Iget(rpcval,Components.interfaces[((i==10 || i==12)? 'nsI': 'nsISupports')+t[i]],n)]; } catch(e) {}
+               return [false,'error getany','Undefined type'];
+       },
+       onfault: function(t) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               return (t.constructor==Array && t.length==3 && !t[0] && (t[1].substr(0,5)=='error' || t[1].substr(0,5)=='fault'))?
+                       true : false;
+       },
+       getall: function(rpcval,n) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var t = this.getany(rpcval,n);
+               if (this.onfault(t)) return t;
+               if (t[0]=='PRBool') return (t[1]=='true');
+               if (t[0]=='PRInt32') return parseInt(t[1]+'');
+               if (t[0]=='PRTime') {
+                       dte= new Date("January 1, 1970, 00:00:00");
+                       dte.setUTCMilliseconds(t[1]+'');
+                       return dte; }
+               if (t[0]=='Double' || t[0]=='Float') return parseFloat(t[1]+'');
+               if (t[0]=='Char' || t[0]=='CString') return (t[1]+'').replace(/¬/g,'€');
+               if (t[0]=='Array') {
+                       var a=[];
+                       for (var i=0; i<t[1].Count(); i++) a[i]= this.getall(t[1],i);
+               } else if (t[0]=='Dictionary') {
+                       var a={};
+                       var keys = t[1].getKeys({});
+                       for (var k = 0; k < keys.length; k++)
+                               a[keys[k]]= this.getall(t[1],keys[k]);
+               } else return t[1];
+               return a;
+       },
+       Iget: function(rpcval,itype,n) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               if (n == undefined) return rpcval.QueryInterface(itype);
+               else if (n==parseInt(n)) return rpcval.QueryElementAt(n,itype);
+               else return rpcval.getValue(n).QueryInterface(itype);
+       },
+       checktype: function(val) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               if (val != undefined) {
+                       switch (val.constructor) {
+                               case Number: return (val==parseInt(val))? 1:4;
+                               case Boolean: return 2;
+                               case String: return 3;
+                               case Date: return 5;
+                               case Object: return 7;
+                               case Array: return 6;
+
+                       }
+               }
+               return 7;
+
+       },
+       set: function(rpcobj,param) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               if (param==undefined) return [false,'error set','Undefined parameter'];
+               var itype= this.checktype(param);
+               if (this.onfault(itype)) return itype;
+               var p = this.servers[rpcobj].sock.createType(itype,{});
+               if (itype==6) {
+                       if (param.length>0)
+                               for (var i=0; i<param.length; i++) p.AppendElement( this.set(rpcobj,param[i]) );
+               } else if (itype==7) {
+                       for (var i in param) p.setValue( i, this.set(rpcobj,param[i]) );
+               } else if (itype==4) {
+                       p.data=(''+param).replace(',','.');
+               } else p.data=param;
+               return p;
+       },
+       ask: function(rpcobj,method,params,func_out) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var a=this.disableNset(rpcobj) ;
+               if (this.onfault(a)) return a;
+               var handler = {
+                       onResult: function(client, async, result) {
+                               rpc.servers[rpcobj].avaible= true;
+                               func_out(rpc.getall(result)); },
+                       onFault: function (client, async, faute) {alert("in ask infault"+result)
+                                rpc.servers[rpcobj].avaible= true; func_out([false,'fault',faute]); },
+                       onError: function (client, async, status, msg) {
+                               rpc.servers[rpcobj].avaible= true;
+                               if (status=='2147500037') {
+                                       status= "no network or no server";
+                                       msg= "1. Check your network connection.";
+                                       msg+= "\n2. Check your server connection parameters:";
+                                       msg+= "\n\t"+rpc.servers[rpcobj].ip+":"+rpc.servers[rpcobj].port+"=>"+params[0];
+                                       msg+= "\n3. Your server may not be launched or connected to the network.";
+                               }
+                               func_out([false,'error '+status,msg]);
+                               } };
+               var p = [];
+               for (var i=0; i<params.length; i++)
+                       p[i]= this.set(rpcobj,params[i]);
+               try { this.servers[rpcobj].sock.asyncCall(handler, null, method, p, p.length);
+               } catch(e) {
+                       this.servers[rpcobj].avaible= true;
+                       this.servers[rpcobj].sock= Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient) ;
+                       func_out([false,'error catch',e]); }
+               return true;
+       },
+       disableNset: function(rpcobj) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               if (this.servers[rpcobj]) {
+                       this.servers[rpcobj].avaible= false;//alert('http://'+this.servers[rpcobj].ip+':'+this.servers[rpcobj].port+this.servers[rpcobj].path);
+                       server_path=this.servers[rpcobj].ip+':'+this.servers[rpcobj].port+this.servers[rpcobj].path
+                       this.servers[rpcobj].sock.init(server_path);
+                       
+                       return true; }
+               return [false,'error disableNset','Server vars not set'];
+       }
+}
+function handler_function( result ) {
+       if ( rpc.onfault( result ) ) { alert( result[0] + "\n" + result[1] ); return; }
+       else{
+               alert("got result>>>>"+result)  
+       }
+}
+
+//Sets the preference service
+function getPref(){
+       var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
+    var branchobj = prefService.getBranch("extensions.tiny.");
+    branchobj.QueryInterface(Components.interfaces.nsIPrefBranch2);
+       return branchobj
+}
+
+function setFileName(fname){
+       getPref().setCharPref('fname',fname);
+}
+
+//set attachment file save or not
+function setAttachment(argAttac){
+       getPref().setCharPref('attachment',argAttac);
+}
+
+//set preference value for server url
+function setServer(argServer){
+       getPref().setCharPref('serverurl',argServer);
+}
+
+//set preference value for server port
+function setPort(argPort){
+       getPref().setCharPref('serverport',argPort)
+}
+
+//set preference value of database name for data searching and selection
+function setDbName(argDbName){
+       getPref().setCharPref('serverdbname',argDbName);
+}
+
+//set preference value of username for login
+function setUsername(argUsername){
+       getPref().setCharPref('username',argUsername);
+}
+
+//set preference value of password for login
+function setPassword(argPassword){
+       getPref().setCharPref('password',argPassword);
+}
+
+//set preference value for storing partner id
+function setPartnerId(argPartnerId){
+       getPref().setCharPref('partnerid',argPartnerId)
+}
+
+//set preference value for Resource Id
+function setResourceId(argResourceId){
+    getPref().setCharPref('res_id',argResourceId)
+}
+//set server service
+function setServerService(argServerService){
+       strServerService = argServerService;
+}
+
+//set preference value for sender email
+function setSenderEmail(argSenderEmail){
+       getPref().setCharPref('senderemail',argSenderEmail)
+}
+
+//set preference value for receiver email
+function setReceiverEmail(argReceiverEmail){
+       getPref().setCharPref('receiveremail',argReceiverEmail)
+}
+
+//set preference value for sender name
+function setSenderName(argSenderName){
+    getPref().setCharPref('sendername',argSenderName)
+}
+
+//set preference value for email subject
+function setSubject(argSubject){
+       getPref().setCharPref('subject',argSubject)
+}
+
+//set preference value for email received date
+function setReceivedDate(argReceivedDate){
+       getPref().setCharPref('receiveddate',argReceivedDate)
+}
+
+//set preference value for storing contact id which is used while storing mail contents after creating a new partner contact
+function setContactId(argContactId){
+       getPref().setCharPref('contactid',argContactId)
+}
+
+//set preference value for storing attachment option in config
+function setAttachValue(argAttachValue){
+       getPref().setCharPref('attachvalue',argAttachValue)
+}
+
+//set preference value for email cclist
+function setCCList(argCCList){
+       getPref().setCharPref('cclist',argCCList)
+}
+
+//set preference value for email message body
+function setMessageBody(argMessageBody){
+       getPref().setCharPref('messagebody',argMessageBody)
+}
+
+//set preference value for Partner Name
+function setPartnerName(argPartnerName){
+       getPref().setCharPref('partnername',argPartnerName)
+}
+
+//set preference value for Contact Name
+function setContactName(argContactName){
+       getPref().setCharPref('contactname',argContactName)
+}
+
+//set preference value for street
+function setStreet(argStreet){
+       getPref().setCharPref('street',argStreet)
+}
+
+//set preference value for street2
+function setStreet2(argStreet2){
+       getPref().setCharPref('street2',argStreet2)
+}
+
+//set preference value for zipcode
+function setZipCode(argZipcode){
+       getPref().setCharPref('zipcode',argZipcode)
+}
+
+//set preference value for Office Number
+function setOfficenumber(argOfficenumber){
+       getPref().setCharPref('officeno',argOfficenumber)
+}
+
+//set preference value for Phone Number
+function setMobilenumber(argMobilenumber){
+       getPref().setCharPref('phoneno',argMobilenumber)
+}
+
+//set preference value for Fax
+function setFax(argFax){
+       getPref().setCharPref('fax',argFax)
+}
+
+//set preference value for city
+function setCity(argCity){
+       getPref().setCharPref('city',argCity)
+}
+
+//set preference value for country
+function setCountry(argCountry){
+       getPref().setCharPref('country',argCountry)
+}
+
+//set preference value for state
+function setState(argState){
+       getPref().setCharPref('state',argState)
+}
+
+
+//set the value for the whole server url
+function setServerUrl(argServerUrl)
+{
+       var seperateUrl = argServerUrl.split(':');
+       setServer(seperateUrl.slice(0,seperateUrl.length-1).join(":"));
+       setPort(seperateUrl[seperateUrl.length-1]);
+}
+
+//set preference value for storing user id
+function setUserId(argUserId){
+       getPref().setIntPref('userid',argUserId);
+}
+
+//set database list is displaye or not
+function setDBList(argDBList){
+       getPref().setCharPref('db_list',argDBList)
+}
+
+//set server connect or not
+function setconnect_server(argconnect_server){
+       getPref().setCharPref('connect_server',argconnect_server)
+}
+
+//set module install or not
+function setmodule_install(argconnect_module){
+       getPref().setCharPref('module_install',argconnect_module)
+}
+
+//get module install or not
+function getmodule_install(){
+       return getPref().getCharPref('module_install');
+}
+
+
+//get server connect or not
+function getconnect_server(){
+       return getPref().getCharPref('connect_server');
+}
+
+
+//get partner id
+function getPartnerId(){
+       return getPref().getCharPref('partnerid');
+}
+//get database list is displaye or not
+function getDBList(){
+       return getPref().getCharPref('db_list');
+}
+
+function getFileName(){
+       return getPref().getCharPref('fname');
+}
+
+//get attachment save or not
+function getAttachment(){
+       return getPref().getCharPref('attachment');
+}
+
+//get serverurl
+function getServer(){
+       return getPref().getCharPref('serverurl');
+}
+
+//get server port
+function getPort(){
+       return getPref().getCharPref('serverport');
+}
+
+//get database name
+function getDbName(){
+       return getPref().getCharPref('serverdbname');
+}
+
+//get username from config settings
+function getUsername(){
+       return getPref().getCharPref('username');
+}
+
+//get password from config settings
+function getPassword(){
+       return getPref().getCharPref('password');
+}
+
+//get serverservice
+function getServerService(){
+       return strServerService;
+
+}
+
+//get sender email
+function getSenderEmail(){
+       return getPref().getCharPref('senderemail');
+}
+
+//get receiver email
+function getReceiverEmail(){
+       return getPref().getCharPref('receiveremail');
+}
+
+//get resource id
+function getResourceId(){
+       return getPref().getCharPref('res_id');
+}
+
+
+//get sender name
+function getSenderName(){
+        str = getPref().getCharPref('sendername');
+        if(!str.toString().match(/=?utf-8?q?/))
+        {
+            return str;
+        }
+        else
+        {
+
+            string = str.replace(/[\'Š',\'Ž',\'š',\'ž',\'Ÿ',\'À',\'Á',\'Â',\'Ã',\'Ä',\'Å',\'Ç',\'È',\'É',\'Ê',\'Ë',\'Ì',\'Í',\'Î',\'Ï',\'Ñ',\'Ò',\'Ó',\'Ô',\'Õ',\'Ö',\'Ø',\'Ù',\'Ú',\'Û',\'Ü',\'Ý',\'à',\'á',\'â',\'ã',\'ä',\'å',\'ç',\'è',\'é',\'ê',\'ë',\'ì',\'í',\'î',\'ï',\'ñ',\'ò',\'ó',\'ô',\'õ',\'ö',\'ø',\'ù',\'ú',\'û',\'ü',\'ý',\'ÿ',\'Þ',\'þ',\'Ð',\'ð',\'ß',\'Œ',\'œ',\'Æ',\'æ',\'µ']/g,'"',"'",'“','”',"\n","\r",'_/',"'S','Z','s','z','Y','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N','O','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y','TH','th','DH','dh','ss','OE','oe','AE','ae','u','','','','','','','-'");
+
+            var utftext = "";
+            var encoded_string = "";
+            var convertedString = "";
+                   for (var n = 0; n < string.length; n++)
+            {
+                       var c = string.charCodeAt(n);
+                           if (c < 128) {
+                                   utftext += String.fromCharCode(c);
+                           }
+                   }
+
+            encoded_string = encode64(utftext);
+                  return encoded_string;
+        }
+}
+
+//ger partner name
+function getPartnerName(){
+       return getPref().getCharPref('partnername');
+}
+
+//get contact name
+function getContactName(){
+       return getPref().getCharPref('contactname');
+}
+
+
+//get street name
+function getStreet(){
+       return getPref().getCharPref('street');
+}
+
+//get street2 name
+function getStreet2(){
+       return getPref().getCharPref('street2');
+}
+
+//get zip code
+function getZipCode(){
+       return getPref().getCharPref('zipcode');
+}
+
+//get city name
+function getCity(){
+       return getPref().getCharPref('city');
+}
+
+//get country name
+function getCountry(){
+    return getPref().getCharPref('country');
+}
+
+//get state name
+function getState(){
+       return getPref().getCharPref('state');
+}
+
+//get office no
+function getOfficenumber(){
+       return getPref().getCharPref('officeno');
+}
+
+//get mobile no
+function getMobilenumber(){
+       return getPref().getCharPref('phoneno');
+}
+
+//get fax no
+function getFax(){
+       return getPref().getCharPref('fax');
+}
+
+
+//get email subject
+function getSubject(){
+       return getPref().getCharPref('subject');
+}
+
+//get email received date
+function getReceivedDate(){
+       return getPref().getCharPref('receiveddate');
+}
+
+//get contact id which is used while storing mail contents after creating a new partner contact
+function getContactId(){
+       return getPref().getCharPref('contactid');
+}
+
+//get attachment option information from the configuration settings
+function getAttachValue(){
+       return getPref().getCharPref('attachvalue');
+}
+
+//get email cclist information
+function getCCList(){
+       return getPref().getCharPref('cclist');
+}
+
+//get email message body
+function getMessageBody(){
+       return getPref().getCharPref('messagebody');
+}
+
+//get the whole server path
+function getServerUrl(){
+       return getServer()+":"+getPort()+"/"+getServerService();
+}
+
+//get user id for the xmlrpc request
+function getUserId(){
+       return getPref().getIntPref('userid');
+}
+
+//Creates and returns and instance of the XML-RPC client
+function getClient() {
+       // Enable correct security
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       return Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient);
+}
+
+//returns the xmlrpc client instance
+function getXmlRpc() {
+       if (!xmlRpcClient) {
+               xmlRpcClient = getClient();
+       }
+
+       // Initialize the client with the URL
+       xmlRpcClient.init(getServerUrl());
+       return xmlRpcClient;
+}
+
+// function to get all basic parameters
+function getBasicList(){
+       var branchobj = getPref();
+       arrBasicList = [];
+       arrBasicList[0] = branchobj.getCharPref("serverdbname");
+       arrBasicList[1] = branchobj.getIntPref('userid');
+       arrBasicList[2] = branchobj.getCharPref("password");
+       arrBasicList[3] = getServer()
+       arrBasicList[4] = getPort()
+       return arrBasicList
+}
+
+function createMenuItem_db(aLabel) {
+       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+       var item = document.createElementNS(XUL_NS, "menuitem"); // create a new XUL menuitem
+       item.setAttribute("label", aLabel);
+       item.setAttribute("value", aLabel);
+       return item;
+}
+
+//xmlrpc request handler for getting the list of database
+var listDbHandler = {
+       onResult: function(client, context, result) {
+               setconnect_server("true")
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrMethodList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+                // Set the number of results
+               var count = arrMethodList.Count();
+               // Loop through the results, adding items to the list
+               for (i = 0; i < count; i++) {
+                       var strlDbName = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsCString);
+                        arrDbList[i] = strlDbName.data;
+               }
+               var database = ""
+               if (count > 0)
+               {
+                       setDBList("true")
+                       var label = document.getElementById("database_option");
+                       var vbox = document.createElement("vbox");
+                       var hbox = document.createElement("hbox");
+                       var label1 = document.createElement("label");
+                       label1.setAttribute("width","80");
+                       label1.setAttribute("value","Database:");
+                       label1.setAttribute("id","label111");
+                       var menu1 = document.createElement("menulist");
+                       var menupopup1 = document.createElement("menupopup");
+                       menu1.setAttribute("id","DBlist");
+                       menu1.setAttribute("width","300");
+                       var menuitem1 = document.createElement("menuitem");
+                       database = arrDbList[0]
+                       menuitem1.setAttribute("label", arrDbList[0]);
+                       menuitem1.setAttribute("value", arrDbList[0]);
+                       menupopup1.appendChild(menuitem1);
+                       menu1.appendChild(menupopup1)
+                       hbox.appendChild(label1);
+                       hbox.appendChild(menu1);
+                       vbox.appendChild(hbox);
+                       label.appendChild(vbox);
+
+                       var d = document.getElementById("first"); 
+                       var d_nested = document.getElementById("lbldb_list1"); 
+                       var throwawayNode = d.removeChild(d_nested);
+                       var d_nested = document.getElementById("DBlist_text"); 
+                       var throwawayNode = d.removeChild(d_nested);
+
+
+               }
+               else
+               {
+                       setDBList("false")
+               }
+               // Loop through the results, adding items to the list
+               if (count)
+               {
+                       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+                       var popup = document.getElementById("DBlist"); // a <menupopup> element
+                       var arrsec=new Array()
+                       for (var i=0;i<popup.menupopup.childNodes.length;i++) {
+                               arrsec.push(popup.menupopup.childNodes[i].label)
+                       }
+                       for (i=0;i<arrDbList.length;i++){
+                               
+                               if (arrsec.indexOf(arrDbList[i])==-1) {
+                                       if (arrDbList[i] != database){
+                                               popup.menupopup.appendChild(createMenuItem_db(arrDbList[i]));
+                                       }
+                               }
+                       }
+               }
+       },
+
+
+       onFault: function (client, ctxt, fault) {
+               
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+               
+       }
+};
+//function to get the database list
+function getDbList(argControl)
+{
+       setDBList("false")
+       setconnect_server("false")
+       // Enable correct security
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       // Get the instance of the XML-RPC client
+       var xmlRpcClient = getXmlRpc();
+       arrDbList = [];
+       var cmbDbList = document.getElementById(argControl);
+
+       xmlRpcClient.asyncCall(listDbHandler,cmbDbList,'list',[],0);
+       return arrDbList;
+}
+
+function createMenuItem_partner(aLabel, aValue) {
+       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+       var item = document.createElementNS(XUL_NS, "menuitem"); // create a new XUL menuitem
+       item.setAttribute("label", aLabel);
+       item.setAttribute("value", aValue);
+       return item;
+}
+
+//xmlrpc request handler for getting the list of All objects
+var listAllDocumentHandler = {
+
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+                // Set the number of results
+               var count = arrIdList.Count();
+
+               // Loop through the results, adding items to the list
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+                       var resultcount = strlResult.Count();
+                       var arrDataPair = new Array();
+                       arrDataPair[0] = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsCString);
+                       arrDataPair[1] = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+                       arrPartnerList[i] = arrDataPair;
+               }
+               if (context)
+               {
+                       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+                       var popup = document.getElementById("section"); // a <menupopup> element
+                       for (i=0;i<arrPartnerList.length;i++){
+                               popup.menupopup.appendChild(createMenuItem_partner(arrPartnerList[i][1],arrPartnerList[i][0]));
+                       }
+               }
+               popup_display = "no"
+               searchCheckbox()
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+var listAllCountryHandler = {
+
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+               var count = arrIdList.Count();
+               // Loop through the results, adding items to the list
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+                       var resultcount = strlResult.Count();
+                       var arrDataPair = new Array();
+                       arrDataPair[0] = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
+          
+                       arrDataPair[1] = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+                       arrPartnerList[i] = arrDataPair;
+               }
+               if (!context)
+               {
+                       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+                       var popup = document.getElementById("country"); // a <menupopup> element
+                       for (i=0;i<arrPartnerList.length;i++){
+                               popup.menupopup.appendChild(createMenuItem_partner(arrPartnerList[i][1],arrPartnerList[i][0]));
+
+                       }
+               }
+       
+       },
+       onFault: function (client, ctxt, fault) {
+               
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+               
+       }
+}
+
+var listAllStateHandler = {
+
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+                // Set the number of results
+               var count = arrIdList.Count();
+
+               // Loop through the results, adding items to the list
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+                       var resultcount = strlResult.Count();
+                       var arrDataPair = new Array();
+                       arrDataPair[0] = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
+                       arrDataPair[1] = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+                       arrPartnerList1[i] = arrDataPair;
+               }
+               if (!context)
+               {
+                       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+                       var popup = document.getElementById("state"); 
+            // a <menupopup> element
+                       for (i=0;i<arrPartnerList1.length;i++){
+                               popup.menupopup.appendChild(createMenuItem_partner(arrPartnerList1[i][1],arrPartnerList1[i][0]));
+
+                       }
+               }
+       
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+
+//function to get the list of All object
+function getAllDocument(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       var xmlRpcClient = getXmlRpc();
+       arrPartnerList = [];
+       var end = document.getElementById("section")
+       length = end.itemCount
+       for (i = 0; i < length; i++) {
+               end.removeItemAt(0)
+       }
+       var cmdObjectList = document.getElementById("section");
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'list_alldocument';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strvalue.data = ""
+       xmlRpcClient.asyncCall(listAllDocumentHandler,cmdObjectList,'execute',[ strDbName,struid,strpass,strobj,strmethod,strvalue ],6);
+}
+
+function getAllCountry(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       var xmlRpcClient = getXmlRpc();
+       arrPartnerList = [];
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'list_allcountry';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strvalue.data = document.getElementById("country").value;
+       xmlRpcClient.asyncCall(listAllCountryHandler,null,'execute',[ strDbName,struid,strpass,strobj,strmethod,strvalue ],6);
+}
+
+function getAllState(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       var xmlRpcClient = getXmlRpc();
+       arrPartnerList1 = [];
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'list_allstate';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strvalue.data = document.getElementById("state").value;
+    xmlRpcClient.asyncCall(listAllStateHandler,null,'execute',[ strDbName,struid,strpass,strobj,strmethod,strvalue ],6);
+}
+
+
+//function to create array object to pass as an parameter for xmlrpc request
+function dictcreation(value,checkboxobj){
+       var temp = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+       var test = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+       var strkey = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strkey.data = value;
+       test.AppendElement(strkey);
+       temp.AppendElement(test);
+       var test1 = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+       for(i=0;i<checkboxobj.length;i++){
+               var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strvalue.data = checkboxobj[i];
+               test1.AppendElement(strvalue);
+       }
+       if(checkboxobj.length>0){
+               temp.AppendElement(test1);
+       }
+       return temp;
+}
+
+//function to search and fillup section selection box
+function createMenuItem(aLabel) {
+  const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+  var item = document.createElementNS(XUL_NS, "menuitem"); // create a new XUL menuitem
+  item.setAttribute("label", aLabel[1]);
+  item.setAttribute("value", aLabel[0]);
+  return item;
+}
+
+
+function listinstallmodule( result ) {
+       if ( rpc.onfault( result ) ) 
+       { 
+               setmodule_install('no')
+       }
+}
+
+function module_install()
+{
+       setmodule_install("yes")
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       strDbName = branchobj.getCharPref("serverdbname");
+       struid = branchobj.getIntPref('userid');
+       strpass = branchobj.getCharPref("password");
+       strmethod = 'search';
+       strobj = 'thunderbird.partner'; // TOFIX: Find module 'thunderbird' into 'module.module' model.
+       var temp = new Array()
+       server=getServer()
+       port=getPort()
+       basicList=getBasicList()
+       rpc.addserver('object',basicList[3] , basicList[4],'/xmlrpc/object');
+       srcids=rpc.ask( 'object', 'execute', [basicList[0],basicList[1],basicList[2],strobj,strmethod,[]],listinstallmodule)
+}
+
+
+var listSearchContactHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+        var sendername = getSenderEmail();
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+               var count = arrIdList.Count();
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+            var strlSearchResult = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsCString);
+            var strlSearchResultValue = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+            if(strlSearchResult=="partner_name"){
+                 setPartnerName(strlSearchResultValue);
+                 var t = getPartnerName();}
+
+             if(strlSearchResult=="contactname"){
+                 setSenderName(strlSearchResultValue);
+                 var t = getSenderName();}
+            
+            if(strlSearchResult=="street"){
+                 setStreet(strlSearchResultValue);
+                 var t = getStreet();}
+            
+            if(strlSearchResult=="street2"){
+                 setStreet2(strlSearchResultValue);
+                 var t = getStreet2();}
+            
+            if(strlSearchResult=="zip"){
+                 setZipCode(strlSearchResultValue);
+                 var t = getZipCode();}
+
+            if(strlSearchResult=="city"){
+                 setCity(strlSearchResultValue);
+                 var t = getCity();}
+        
+            if(strlSearchResult=="phone"){
+                 setOfficenumber(strlSearchResultValue);
+                 var t = getOfficenumber();}
+        
+            if(strlSearchResult=="fax"){
+                 setFax(strlSearchResultValue);
+                 var t = getFax();}
+            
+            if(strlSearchResult=="mobile"){
+                 setMobilenumber(strlSearchResultValue);
+                 var t = getMobilenumber();}
+
+           if(strlSearchResult=="email" && strlSearchResultValue!=''){
+                 setSenderEmail(sendername);
+                 var t = getSenderEmail();} 
+    
+            if(strlSearchResult=="res_id"){
+                 setResourceId(strlSearchResultValue);
+                 var t = getResourceId();}
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+
+}
+var listSearchContactdetailHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+        var sendername = getSenderEmail();
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+               var count = arrIdList.Count();
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+            var strlSearchResult = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsCString);
+            var strlSearchResultValue = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+            if(strlSearchResult=="email" && strlSearchResultValue=='')
+            {
+                alert("Contact is not Available")
+                document.getElementById("txtemail").value = sendername;
+            } 
+            if(strlSearchResult=="partner_name"){
+                 document.getElementById("txtname").value =strlSearchResultValue;}
+
+            if(strlSearchResult=="contactname"){
+                 document.getElementById("txtcontactname").value =strlSearchResultValue;}
+            
+            if(strlSearchResult=="street"){
+                document.getElementById("txtstreet").value =strlSearchResultValue;}
+            
+            if(strlSearchResult=="street2"){
+                 document.getElementById("txtstreet2").value =strlSearchResultValue;}
+            if(strlSearchResult=="zip"){
+                 document.getElementById("txtzip").value =strlSearchResultValue;}
+
+            if(strlSearchResult=="city"){
+                document.getElementById("txtcity").value =strlSearchResultValue;}
+            if(strlSearchResult=="phone"){
+                 document.getElementById("txtoffice").value =strlSearchResultValue;}
+        
+            if(strlSearchResult=="fax"){
+                 document.getElementById("txtfax").value =strlSearchResultValue;}
+            
+            if(strlSearchResult=="mobile"){
+                 document.getElementById("txtmobile").value =strlSearchResultValue;}
+
+            if(strlSearchResult=="email"&& strlSearchResultValue!=''){
+                document.getElementById("txtemail").value =strlSearchResultValue;}
+
+            if(strlSearchResult=="res_id"){
+                 setResourceId(strlSearchResultValue);
+                 var t = getResourceId();}
+
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+
+}
+
+function searchContactdetail()
+{
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       arrFinalList = [];
+       var xmlRpcClient = getXmlRpc();
+       var cmbSearchList = document.getElementById('listSearchBox');
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+    var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'search_contact';
+       var strname = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strname.data =document.getElementById("txtemail").value;
+       xmlRpcClient.asyncCall(listSearchContactdetailHandler,cmbSearchList,'execute',[ strDbName,struid,strpass,strobj,strmethod,strname ],6);
+}
+
+//xmlrpc request handler for getting the search results for the particular selected check box object
+var listSearchCheckboxHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrMethodList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+                // Set the number of results
+               var count = arrMethodList.Count();
+               var close=0;
+               if(count == 0  && popup_display != "no"){
+                       alert("No records Found");
+                       return false;
+               }
+               else if(count ==2 )
+               {
+                       if (arrMethodList.QueryElementAt(0, Components.interfaces.nsISupportsCString)=="error")
+                       {
+                               close =1;
+                       }
+               }
+               popup_display = "yes"
+               // Loop through the results, adding items to the list
+               var arr1 = new Array();
+               var arr2 = new Array();
+               var flag1 = 0;
+               var flag2 = 0;
+               var er ="";
+               var er_val =new Array();
+               for (i = 0; i < count; i++) 
+               {
+                       if(i%2==0){
+                               if (arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsCString)=="error")
+                               {
+                                       er = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsCString);
+                                       er_val[0] =arrMethodList.QueryElementAt(i+1, Components.interfaces.nsISupportsArray);
+                                       i +=1;
+                                       continue;
+                               }
+                               arr1[flag1] = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsCString);
+                               flag1++;
+                       }
+                       else{
+                               arr2[flag2] = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+                               flag2++;
+                       }
+               }
+               if (er)
+               {
+                       var arrSearchList1 = new Array();
+                       for(j=0;j<er_val[0].Count();j++)
+                       {
+                               var arrDataPair = new Array();
+                               arrDataPair[0] = er_val[0].QueryElementAt(j, Components.interfaces.nsISupportsCString)
+                               arrSearchList1[j]=arrDataPair;
+                       }
+                       alert( arrSearchList1 + "  model not exists")
+                       if (close == 1)
+                       {
+                               alert("No records Found");
+                               return false;
+                       }
+               }
+               for (i = 0; i < arr2.length; i++) {
+                       var arrSearchList1 = new Array();
+                       for(j=0;j<arr2[i].Count();j++){
+                               var strlSearchResult = arr2[i].QueryElementAt(j, Components.interfaces.nsISupportsArray);
+                               var resultcount = strlSearchResult.Count();
+                               var arrDataPair = new Array();
+                               arrDataPair[0] = strlSearchResult.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
+                               arrDataPair[1] = strlSearchResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+                               arrDataPair[2] = arr1[i];
+                               arrSearchList1[j] = arrDataPair;
+                       }
+                       arrFinalList[i]=arrSearchList1;
+               }
+               if (context)
+               {
+
+                       var row_count = context.getRowCount();
+                       var cmbSearchList = document.getElementById('listSearchBox');
+                       for (i=0;i<row_count;i++)
+                       {
+                               context.removeItemAt(0);
+                       }
+                       for (i=0;i<arrFinalList.length;i++)
+                       {
+                               for(j=0;j<arrFinalList[i].length;j++){
+                               //creates the dynamic listbox which shows the searched records for the selected object in checkbox
+                                       var listcell = document.createElement("listcell");
+                                       var     listItem = document.createElement("listitem");
+
+                                       var objectcharpref = getPref().getCharPref("object").split(',');
+                                       var imagecharpref = getPref().getCharPref("imagename").split(',');
+                                       var imagename = ''
+                                       for(k=0;k<objectcharpref.length;k++){
+                                               if(arr1[i] == objectcharpref[k]){
+                                                       imagename = imagecharpref[k]
+                                               }
+                                       }
+
+                                       listcell.setAttribute("image",imagename); // stores the image of the object
+                                       listcell.setAttribute("class","listcell-iconic");
+                                       listcell.setAttribute("width",12);
+                                       listcell.setAttribute("height",12);
+                                       listcell.setAttribute("label",arrFinalList[i][j][1]); //stores the name ofthe record
+                                       listItem.appendChild(listcell);
+                                       listItem.value = arrFinalList[i][j][0]; //stores the id of the record
+                                       listItem.label = arr1[i]; // stores the value of the object
+                                       cmbSearchList.appendChild(listItem);
+                               }
+                       }
+               }
+       },
+
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+};
+
+//function to search the records of selected checkbox object
+function searchCheckbox()
+{
+       var checkboxlist = getnamesearch();
+       if(checkboxlist.length == 0){
+               alert("Select One or More Document");
+               return false;
+       }
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       arrFinalList = [];
+       var xmlRpcClient = getXmlRpc();
+       var end = document.getElementById('listSearchBox').getRowCount();
+       for(i=0; i< end; i++){
+               document.getElementById('listSearchBox').removeItemAt(0);
+       }
+       var cmbSearchList = document.getElementById('listSearchBox');
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'search_checkbox';
+       var strname = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strname.data = document.getElementById('txtvalueobj').value;
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var arrofarr = dictcreation(strname,checkboxlist);
+       xmlRpcClient.asyncCall(listSearchCheckboxHandler,cmbSearchList,'execute',[ strDbName,struid,strpass,strobj,strmethod,arrofarr ],6);
+}
+
+function searchContact()
+{
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       arrFinalList = [];
+       var xmlRpcClient = getXmlRpc();
+       var cmbSearchList = document.getElementById('listSearchBox');
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+    var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'search_contact';
+       var strname = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strname.data =getSenderEmail();
+       
+       xmlRpcClient.asyncCall(listSearchContactHandler,cmbSearchList,'execute',[ strDbName,struid,strpass,strobj,strmethod,strname ],6);
+}
+
+//xmlrpc request handler for getting the list of partners
+var listPartnerHandler = {
+
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+                // Set the number of results
+               var count = arrIdList.Count();
+               // Loop through the results, adding items to the list
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+                       var resultcount = strlResult.Count();
+                       var arrDataPair = new Array();
+                       arrDataPair[0] = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
+                       arrDataPair[1] = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+                       arrPartnerList[i] = arrDataPair;
+               }
+               if (context)
+               {
+                       var row_count = context.getRowCount();
+                       var cmdPartnerList = document.getElementById('listPartnerBox');
+                       for (i=0;i<row_count;i++)
+                       {
+                               context.removeItemAt(0);
+                       }
+                       for (i=0;i<arrPartnerList.length;i++)
+                       {
+                               var listcell = document.createElement("listcell");
+                               var listItem = document.createElement("listitem");
+                               listcell.setAttribute("label",arrPartnerList[i][1]);
+                               listItem.appendChild(listcell);
+                               listItem.value = arrPartnerList[i][0];
+                               cmdPartnerList.appendChild(listItem);
+                       }
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+//function to get the list of partners
+function getPartnerList(){
+       var branchobj = getPref();
+       window.opener.document.getElementById('txtselectpartner').setAttribute('value','');
+       setServerService('xmlrpc/object');
+       var xmlRpcClient = getXmlRpc();
+       arrPartnerList = [];
+       var end = document.getElementById('listPartnerBox').getRowCount();
+       for(i=0; i< end; i++){
+               document.getElementById('listPartnerBox').removeItemAt(0);
+       }
+       var cmdPartnerList = document.getElementById('listPartnerBox');
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'name_search';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'res.partner';
+       var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strvalue.data = document.getElementById('txtselectpartner').value;
+       xmlRpcClient.asyncCall(listPartnerHandler,cmdPartnerList,'execute',[ strDbName,struid,strpass,strobj,strmethod,strvalue ],6);
+}
+//function to create the xmlrpc supported variables for xmlrpc request
+function dictcontact(a,b){
+       var temp = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+       for(i=0;i<a.length;i++){
+               var strkey = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strkey.data = a[i]
+               var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strvalue.data = b[i]
+               var test = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+               test.AppendElement(strkey);
+               test.AppendElement(strvalue);
+               temp.AppendElement(test);
+       }
+       return temp;
+}
+
+//xmlrpc request handler for creating the record of mail
+var listArchiveHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var createId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+//function to archive the mail content through xmlrpc request
+
+function parse_eml(){
+       var fpath =""
+       if(navigator.userAgent.indexOf('Linux')!= -1){
+               fpath ="/tmp/"
+       }
+       else if(navigator.userAgent.indexOf('Win')!= -1){
+               fpath ="C:\\"
+       }
+       else if(navigator.userAgent.indexOf('Mac OS X')!= -1){ 
+               fpath ="/tmp/"
+       } 
+
+       name = fpath + getFileName() +".eml"
+
+       var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+       file.initWithPath( name );
+       if ( file.exists() == false ) {
+               return null;
+       } else {
+               var is = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance( Components.interfaces.nsIFileInputStream );
+               is.init( file,0x01, 00004, null);
+               var sis = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance( Components.interfaces.nsIScriptableInputStream );
+               sis.init( is );
+               var output = sis.read( sis.available() );
+               return output
+    }
+}
+function upload_archivemail()
+{
+    list_documents = document.getElementById('listSearchBox')
+    var context = []
+    var cnt = list_documents.selectedCount
+       for(i=0;i<cnt;i++)
+       {       
+        var object = list_documents.getSelectedItem(i)
+               var eml_string = parse_eml();
+        var model = object.label;
+        var res_id = object.value;
+               var branchobj = getPref();
+               setServerService('xmlrpc/object');
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var xmlRpcClient = getXmlRpc();
+               var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strDbName.data = branchobj.getCharPref("serverdbname");
+               var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+               struids.data = branchobj.getIntPref('userid');
+               var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strpass.data = branchobj.getCharPref("password");
+               var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strmethod.data = 'history_message';
+               var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strobj.data = 'thunderbird.partner';
+               var resobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+        var a = ['model', 'res_id','message'];
+           var b = [model, res_id,eml_string];
+        var arrofarr = dictcontact(a,b)
+        xmlRpcClient.asyncCall(listArchiveHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+        alert("Mail Archive Successfully");
+               window.close();
+       }
+       
+}
+
+function create_archivemail(){
+       var popup = document.getElementById("section").selectedItem; // a <menupopup> element
+
+       if (String(popup) != "null"){
+               object=popup.value;
+               if (object == undefined) { alert("select At Least one Document !")}
+               else{
+               var branchobj = getPref();
+               setServerService('xmlrpc/object');
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var xmlRpcClient = getXmlRpc();
+               var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strDbName.data = branchobj.getCharPref("serverdbname");
+               var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+               struids.data = branchobj.getIntPref('userid');
+               var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strpass.data = branchobj.getCharPref("password");
+               var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strmethod.data = 'process_email';
+               var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strobj.data = 'thunderbird.partner';
+        var eml_string = parse_eml()
+               var a = ['model', 'message'];
+               var b = [object, eml_string];
+               var arrofarr = dictcontact(a,b);
+               xmlRpcClient.asyncCall(listArchiveHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+        alert("Mail Archive Successfully");
+               window.close();
+               }
+       }
+       else
+       {
+               alert(" select At Least one Document !")
+       }
+}
+
+
+//xmlrpc request handler for creating a new contact
+var listCreateContactHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var createId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+               setContactId(createId);
+               alert("Contact Created Successfully."); 
+               window.close();
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+var listUpdateContactHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+        alert("Contact Update Successfully.");
+        window.close();
+               var partnerId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+               setResourceId(partnerId);
+               window.close();
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+//function to create a new contact
+function createContact(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struids.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'create_contact';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var a = ['partner_id','name','street','street2','zip','city','country_id','state_id','phone','fax','mobile','email'];
+       var b = [getPartnerId(),getSenderName(),document.getElementById("txtstreet").value,document.getElementById("txtstreet2").value,document.getElementById("txtzip").value, document.getElementById("txtcity").value,document.getElementById("country").value,document.getElementById("state").value,document.getElementById("txtoffice").value,document.getElementById("txtfax").value,document.getElementById("txtmobile").value,getSenderEmail()];
+       var arrofarr = dictcontact(a,b);
+       xmlRpcClient.asyncCall(listCreateContactHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+}
+
+function UpdateContact(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struids.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'update_contact';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var a = ['res_id','partner_id','name','street','street2','zip','city','country_id','state_id','phone','fax','mobile','email'];
+       var b = [getResourceId(),getPartnerName(),document.getElementById("txtcontactname").value,document.getElementById("txtstreet").value,document.getElementById("txtstreet2").value,document.getElementById("txtzip").value, document.getElementById("txtcity").value,document.getElementById("country").value,document.getElementById("state").value,document.getElementById("txtoffice").value,document.getElementById("txtfax").value,document.getElementById("txtmobile").value,document.getElementById("txtemail").value];
+       var arrofarr = dictcontact(a,b);
+       xmlRpcClient.asyncCall(listUpdateContactHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+}
+
+//xmlrpc request handler for creating a attachment record
+var listAttachHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var createId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+
+//function to encode the string into base64
+var base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split("");
+function base64_encode (s)
+ {
+   // the result/encrypted string, the padding string, and the pad count
+   var r = ""; var p = ""; var c = s.length % 3;
+
+   // add a right zero pad to make this string a multiple of 3 characters
+   if (c > 0) { for (; c < 3; c++) { p += '='; s += "\0"; } }
+
+   // increment over the length of the string, three characters at a time
+   for (c = 0; c < s.length; c += 3) {
+
+     // we add newlines after every 76 output characters, according to the MIME specs
+     if (c > 0 && (c / 3 * 4) % 76 == 0) { r += "\r\n"; }
+
+     // these three 8-bit (ASCII) characters become one 24-bit number
+     var n = (s.charCodeAt(c) << 16) + (s.charCodeAt(c+1) << 8) + s.charCodeAt(c+2);
+
+     // this 24-bit number gets separated into four 6-bit numbers
+     n = [(n >>> 18) & 63, (n >>> 12) & 63, (n >>> 6) & 63, n & 63];
+
+     // those four 6-bit numbers are used as indices into the base64 character list
+     r += base64chars[n[0]] + base64chars[n[1]] + base64chars[n[2]] + base64chars[n[3]];
+
+     // add the actual padding string, after removing the zero pad
+   } return r.substring(0, r.length - p.length) + p;
+ }
+
+//function to encode the string into base64
+var keyStr = "ABCDEFGHIJKLMNOP" +
+                "QRSTUVWXYZabcdef" +
+                "ghijklmnopqrstuv" +
+                "wxyz0123456789+/" +
+                "="+"-_.!~*'()";
+
+function encode64(input) {
+var output = "";
+var chr1, chr2, chr3 = "";
+var enc1, enc2, enc3, enc4 = "";
+var i = 0;
+
+do {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+    enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+    enc4 = 64;
+ }
+
+ output = output +
+    keyStr.charAt(enc1) +
+    keyStr.charAt(enc2) +
+    keyStr.charAt(enc3) +
+    keyStr.charAt(enc4);
+ chr1 = chr2 = chr3 = "";
+ enc1 = enc2 = enc3 = enc4 = "";
+} while (i < input.length);
+
+return output;
+}
+
+
+//function to read the contents of the attachment files from the temp folder
+function createInstance(name,test){
+       var encoded_string = '';
+       var file_name = ''
+
+       for(i=0;i<test.length;i++){
+               var stream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
+               stream.init(test[i], 0x01, 00004, 0);
+               var bstream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
+               bstream.setInputStream(stream);
+               var r = new Array();
+               var fileContents = bstream.readByteArray(bstream.available(),r);
+               bstream.close();
+               var printstring = '';
+               for(j=0;j<fileContents.length;j++)
+               {
+                       printstring += String.fromCharCode(fileContents[j]);
+               }
+               encoded_string += encode64(printstring)+',';
+               file_name += name[i]+',';
+               test[i].remove(true);
+       }
+       encoded_string = encoded_string.substring(0,encoded_string.length-1);
+       file_name = file_name.substring(0,file_name.length-1);
+       getPref().setCharPref('displayName',file_name);
+       getPref().setCharPref('attachmentdata',encoded_string);
+
+
+}
+
+//xmlrpc request handler for handling the login information
+var listLoginHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var login = result.QueryInterface(Components.interfaces.nsISupportsPrimitive)
+               if(login.type == 12){
+                       login = result.QueryInterface(Components.interfaces.nsISupportsPRInt32)
+                       setUserId(login.data);
+                       alert('Successful Login To OpenERP');
+            window.close();
+               }
+               else{
+                       alert("Login Failed");
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+               alert("Database does not Exist!\n\n Please specify proper database name.");
+       }
+}
+
+//function to check the login information
+function testConnection(){
+       if (getconnect_server() == "false")
+       {
+               alert("No Server Running..."+" "+getServer())
+               return false;
+       }
+       if (getDBList()=="false")
+       {
+               if (document.getElementById('DBlist_text').value =='')
+               {
+                       alert("You Must Enter Database Name");
+                       return false;
+               }
+               setDbName(document.getElementById('DBlist_text').value);
+       }
+       else
+       {
+               if (document.getElementById('DBlist').value == 0 || document.getElementById('DBlist').value =="--select--")
+               {
+                       alert("You Must Select Database Name");
+                       return false;
+               }
+               setDbName(document.getElementById('DBlist').value);
+       }
+       var branchobj = getPref();
+       setServer(document.getElementById('txturl').value);
+       var s = document.getElementById('txturl').value;
+       var a =s.split(':');
+       setPort(a[a.length-1]);
+       setUsername(document.getElementById('txtusername').value);
+       setPassword(document.getElementById('txtpassword').value);
+       setServerService('xmlrpc/common');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = getPref().getCharPref('serverdbname');
+       var strusername = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strusername.data = getPref().getCharPref('username');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = getPref().getCharPref('password');
+       xmlRpcClient.asyncCall(listLoginHandler,null,'login',[strDbName,strusername,strpass],3);
+}
+
+
+//xmlrpc request handler for handling the login information
+var listcreateLoginHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var login = result.QueryInterface(Components.interfaces.nsISupportsPrimitive)
+               setconnect_server("true")               
+               if(login.type == 12){
+                       login = result.QueryInterface(Components.interfaces.nsISupportsPRInt32)
+                       setUserId(login.data);
+               }
+               else{
+                       alert("Login Failed");
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+               
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+               setconnect_server("false")
+       }
+}
+
+//function to check the login information
+function createConnection(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/common');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = getPref().getCharPref('serverdbname');
+       var strusername = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strusername.data = getPref().getCharPref('username');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = getPref().getCharPref('password');
+       xmlRpcClient.asyncCall(listcreateLoginHandler,null,'login',[strDbName,strusername,strpass],3);
+}
+
+//xmlrpc request handler for handling the partner information
+var listCreatePartnerHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var createId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+               
+               if(typeof(createId.data) == 'number' && createId!=0){
+                       window.close();
+               }
+               if(createId == 0){
+                       alert("Partner Already Exist");
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+//function to create the tiny partner object
+function createPartner(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struids.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'create_partner';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       if(document.getElementById('txtname').value ==''){
+               alert("You Must Enter Partner Name");
+               return false;
+       }
+       var a = ['name'];
+       var b = [document.getElementById('txtname').value];
+       var arrofarr = dictcontact(a,b);
+       xmlRpcClient.asyncCall(listCreatePartnerHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+}
+//xmlrpc request handler for handling the object information
+var listSearchDocumentHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var searchResult = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+               if(searchResult.data == 0){
+                       alert("Document Does Not Exist");
+                       return false;
+               }
+               var objvalue = getPref().getCharPref("listobject");
+               var objectvalue = getPref().getCharPref("object");
+               var imagevalue = getPref().getCharPref("imagename");
+
+               var objcharpref = getPref().getCharPref("listobject").split(',');
+               var objectcharpref = getPref().getCharPref("object").split(',');
+               var imagecharpref = getPref().getCharPref("imagename").split(',');
+
+
+               if(objectcharpref.indexOf(document.getElementById("txtobject").value) != -1){
+                       alert("Document already in List");
+               }
+               else{
+                       var     listItem = document.createElement("listitem");
+                       var listcell1 = document.createElement("listcell");
+                       var listcell2 = document.createElement("listcell");
+                       var listcell3 = document.createElement("listcell");
+                       listcell1.setAttribute("label",document.getElementById("txtobj").value);
+                       listcell2.setAttribute("label",document.getElementById("txtobject").value);
+                       listcell3.setAttribute("image",'file://'+document.getElementById("txtimagename").value);
+                       listcell3.setAttribute("class","listcell-iconic")
+                       listcell3.setAttribute("width",16)
+                       listcell3.setAttribute("height",16)
+                       listItem.appendChild(listcell1);
+                       listItem.appendChild(listcell2);
+                       listItem.appendChild(listcell3);
+                       document.getElementById("listObjectListBox").appendChild(listItem)
+                       if(getPref().getCharPref("object")!=''){
+                               getPref().setCharPref("listobject",objvalue+','+document.getElementById("txtobj").value);
+                               getPref().setCharPref("object",objectvalue+','+document.getElementById("txtobject").value);
+                               getPref().setCharPref("imagename",imagevalue+','+"file://"+document.getElementById("txtimagename").value);
+                       }
+                       else{
+                               getPref().setCharPref("listobject",document.getElementById("txtobj").value);
+                               getPref().setCharPref("object",document.getElementById("txtobject").value);
+                               getPref().setCharPref("imagename","file://"+document.getElementById("txtimagename").value);
+                       }
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+//function to search the tiny objects for configuration settings
+function searchDocument(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struids.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'search_document';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       if(document.getElementById('txtobj').value =='' ){
+               alert("You Must Enter Document");
+               return false;
+       }
+       if(document.getElementById('txtobject').value =='' ){
+               alert("You Must Enter Document Name");
+               return false;
+       }
+       var a = ['model'];
+       var b = [document.getElementById('txtobject').value];
+       var arrofarr = dictcontact(a,b);
+       xmlRpcClient.asyncCall(listSearchDocumentHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+}
+
+//xmlrpc request handler for list of search object exist in database or not.
+var listsearchAttachmentHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var objectlist = result.QueryInterface(Components.interfaces.nsISupportsCString);
+               getPref().setCharPref('tempobject',objectlist)
+               document.getElementById("txtvalueobj").value= getSenderEmail();
+               var checkbox = document.getElementById("checkbox-dynamic");
+               
+               var object = preferenceBranch.getCharPref("listobject").split(',');
+               var obj = preferenceBranch.getCharPref("tempobject").split(',');
+               var imagelist = preferenceBranch.getCharPref("imagename").split(',');
+
+               count = 0
+               if (object[0]!=''){
+                       for(var i=0; i<object.length; i++){
+                               if (obj[i] == "null")
+                               {
+                                       continue
+                               }
+
+                               if(count%3==0){
+                                       var vbox = document.createElement("hbox");
+                               }
+                               count += 1
+                               var hbox = document.createElement("vbox");
+                               var checkbox1 = document.createElement("checkbox");
+
+                               checkbox1.setAttribute("label",object[i]);
+                               checkbox1.setAttribute("id","cbx"+(i+1));
+                               checkbox1.setAttribute("width",150)
+                               if (obj[i] =="res.partner.address")
+                               {
+                                       checkbox1.setAttribute("checked",true);
+                               }
+                               if(i==0){
+                                       checkbox1.setAttribute("checked",true);
+                               }
+
+                               var image1 = document.createElement("image");
+                               image1.setAttribute("src",imagelist[i]);
+                               image1.setAttribute("width",16)
+                               image1.setAttribute("height",16)
+
+                               vbox.appendChild(image1);
+                               hbox.appendChild(checkbox1);
+                               vbox.appendChild(hbox);
+                               checkbox.appendChild(vbox);
+                       }
+               }
+               setTimeout("getAllDocument()", 0)
+               exis_grp = document.getElementById("existsobjectgroup")
+               new_grp = document.getElementById("newobjectgroup")
+
+               new_grp.height = parseInt(parseInt(new_grp.height) + parseInt((count /3) * 23.5))
+               win = document.getElementById("pluginwindows").setAttribute("height",1000)
+
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+//function to create a new attachment record
+function listSearchDocumentAttachment(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struids.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'search_document_attachment';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var resobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       var popup = document.getElementById("section").selectedItem; // a <menupopup> element
+       object=popup.value;
+       resobj.data = object;
+       var a = ['object'];
+       var b = [getPref().getCharPref("object")];
+       var arrofarr = dictcontact(a,b);
+       xmlRpcClient.asyncCall(listsearchAttachmentHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+}
+
+
+//function to create a new attachment record
+
+function win_close()
+{
+       var fpath =""
+       if(navigator.userAgent.indexOf('Linux')!= -1){
+               fpath ="/tmp/"
+       }
+       else if(navigator.userAgent.indexOf('Win')!= -1){
+               fpath ="C:\\"
+       }
+       else if(navigator.userAgent.indexOf('Mac OS X')!= -1){ 
+               fpath ="/tmp/"
+       } 
+       try
+         {
+               name = fpath + getFileName() +".eml"
+
+               var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+               file.initWithPath( name );
+               file.remove(true);
+               window.close();
+         }
+       catch(err)
+         {
+               window.close();
+         }
+}
+
+function attachmentWidnowOpen(msg)
+{
+
+               if (msg=="create")
+               {
+                       var popup = document.getElementById("section").selectedItem; // a <menupopup> element
+                       if (String(popup) != "null"){
+                               object=popup.value;
+                               if (object=="" || object == undefined) { alert("select at least one document !")}
+                               else{
+                                       create_archivemail()
+                               }
+                       }
+                       else
+                       {
+                               alert("select at least one Document !")
+                       }
+               }
+               else if (msg=="upload")
+               {       
+                       if(document.getElementById('listSearchBox').selectedItem)
+                       {       
+                               upload_archivemail()
+                       }
+                       else{
+                               alert("Please select at least one record");
+                       }
+               }
+}
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/address.dtd b/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/address.dtd
new file mode 100644 (file)
index 0000000..3b5b95e
--- /dev/null
@@ -0,0 +1,26 @@
+<!ENTITY title.label "Open Contact">
+<!ENTITY name.value "Partner Name:">
+<!ENTITY contactname.value "Contact Name:">
+<!ENTITY street.value "Street:">
+<!ENTITY street2.value "Street2:">
+<!ENTITY zip.value "Zip:">
+<!ENTITY city.value "City:">
+<!ENTITY country.value "Country:">
+<!ENTITY state.value "State:">
+<!ENTITY office.value "Office:">
+<!ENTITY fax.value "Fax:">
+<!ENTITY mobile.value "Mobile:">
+<!ENTITY email.value "Email:">
+<!ENTITY emailid.value "Email ID:">
+<!ENTITY communication.value "Communication:">
+<!ENTITY postaladdress.value "Postal Address:">
+<!ENTITY ok.label "Save">
+<!ENTITY partner.label "Create New Contact :">
+<!ENTITY create.label "New Contact">
+<!ENTITY cancel.label "Cancel">
+<!ENTITY newpartner.label "New Partner">
+<!ENTITY bsearch.label "Search Contact">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/config.dtd b/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/config.dtd
new file mode 100755 (executable)
index 0000000..23cd94e
--- /dev/null
@@ -0,0 +1,49 @@
+<!ENTITY title.label "OpenERP Configuration">\r
+<!ENTITY separate.label "Configuration Login for OpenERP!">\r
+<!ENTITY close.label "Cancel">\r
+<!ENTITY database.label "Database:">
+<!ENTITY ok.label "OK">\r
+<!ENTITY connection.label "Connect">\r
+<!ENTITY txturl.label "Server: ">\r
+<!ENTITY image.label "Image : ">\r
+<!ENTITY obj.label "Document : ">\r
+<!ENTITY username.label "Username: ">\r
+<!ENTITY password.label "Password: ">\r
+<!ENTITY setdb.label "Move &gt;">\r
+<!ENTITY getdblist.label "Change">\r
+<!ENTITY gpConnection.label "Connection Parameters">\r
+<!ENTITY listDBListBox.header "Available DBs">\r
+<!ENTITY listDocument.header "Document">\r
+<!ENTITY listDocumentListBox.header "Document Name">\r
+<!ENTITY document.label "Document Name : ">\r
+<!ENTITY documentcreate.label "Add">\r
+<!--<!ENTITY objectdelete.label "Delete Selected Object From The List"> -->\r
+<!ENTITY documentdelete.label "Delete">\r
+<!ENTITY gpArchive.label "Archived Email Attachment Options">\r
+<!ENTITY rdAlwaysAttached.label "Always Send Email Attachments to OpenERP">\r
+<!ENTITY rdPromptAttached.label "Prompt Before Sending Email Attachments">\r
+<!ENTITY rdNeverAttached.label "Never Send Email attachments to OpenERP">\r
+<!ENTITY reserve.value "Copyright © 2006-TODAY OpenERP SA All Rights Reserved.\r
+OpenERP is a trademark of the OpenERP SA Company. OpenERP Web is jointly developed by OpenERP SA and Axelor.\n\r
+Licenced under the terms of OpenERP Public License (OEPL) v1.1 ">\r
+<!ENTITY openerp.value "http://www.openerp.com/">\r
+<!ENTITY axelor.value "http://www.axelor.com">\r
+<!ENTITY tinyerp.value "http://tiny.be/">\r
+\r
+<!ENTITY openerp_s.value "OpenERP">\r
+<!ENTITY axelor_s.value "The Axelor Company">\r
+<!ENTITY tinyerp_s.value "The Tiny Company">\r
+\r
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">\r
+<!ENTITY gpAbout.label "About OpenERP Thunderbird Plugin">\r
+<!ENTITY develop.value "This Thunderbird Plugin for OpenERP has been developed by OpenERP SA &amp; Axelor">\r
+<!ENTITY information.value "For more information, please visit our website">\r
+<!ENTITY contact.label "Contact Us">\r
+<!ENTITY contact.value "info@axelor.com">\r
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">\r
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">\r
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">\r
+<!ENTITY imagemove.value "chrome://openerp_plugin/skin/Move.gif">\r
+<!ENTITY imagemoveleft.value "chrome://openerp_plugin/skin/MoveLeft.png">\r
+<!ENTITY imagemovedown.value "chrome://openerp_plugin/skin/MoveDown.png">\r
+<!ENTITY addfile.label "Load Image">\r
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/config_change.dtd b/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/config_change.dtd
new file mode 100644 (file)
index 0000000..a926d3a
--- /dev/null
@@ -0,0 +1,5 @@
+<!ENTITY lblurl.label "Server: ">\r
+<!ENTITY lblport.label "Port: ">\r
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">\r
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">\r
+\r
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/create.dtd b/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/create.dtd
new file mode 100644 (file)
index 0000000..181d408
--- /dev/null
@@ -0,0 +1,37 @@
+<!ENTITY title.label "Create a new Contact">
+<!ENTITY name.value "Contact Name:">
+<!ENTITY street.value "Street:">
+<!ENTITY street2.value "Street2:">
+<!ENTITY zip.value "Zip:">
+<!ENTITY city.value "City:">
+<!ENTITY country.value "Country:">
+<!ENTITY state.value "State:">
+<!ENTITY office.value "Office:">
+<!ENTITY fax.value "Fax:">
+<!ENTITY mobile.value "Mobile:">
+<!ENTITY email.value "Email:">
+<!ENTITY communication.value "Communication:">
+<!ENTITY postaladdress.value "Postal Address:">
+
+
+<!ENTITY selectpartner.value "Partner:">
+<!ENTITY listEmail.header "Email">
+<!ENTITY listName.header "Name">
+<!ENTITY bsearch.label "Search">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
+<!ENTITY cbxarchive.label "Archive">
+<!ENTITY ok.label "Save">
+<!ENTITY cancel.label "Cancel">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
+
+<!ENTITY title.label "Select Partner">
+<!ENTITY listPartnerName.header "Partner Name">
+<!ENTITY bsearch.label "Search">
+<!ENTITY create.label "Create">
+<!ENTITY select.label "Select">
+<!ENTITY cancel.label "Cancel">
+<!ENTITY reload.label "Reload">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
+<!ENTITY imagereload.value "chrome://openerp_plugin/skin/Archive.png">
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/createpartner.dtd b/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/createpartner.dtd
new file mode 100644 (file)
index 0000000..67b32b3
--- /dev/null
@@ -0,0 +1,7 @@
+<!ENTITY title.label "Create a new Partner">
+<!ENTITY name.value "Name:">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
+<!ENTITY ok.label "Save">
+<!ENTITY cancel.label "Cancel">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/mboximport.properties b/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/mboximport.properties
new file mode 100644 (file)
index 0000000..3384542
--- /dev/null
@@ -0,0 +1,31 @@
+nomboxfile=není mbox souborem
+folderexists=Není možné importovat: složka se stejným názvem již existuje
+fileexists=Není možné importovat: soubor se stejným názvem již existuje
+nowritable=Není možné importovat: nemáte právo zápisu do složky
+exportOK=Export byl úspěšně dokončen
+isNewsgroup=Tato funkce není dostupná: export složky z IMAP účtů nebo diskuzních \nskupin je možný, pouze pokud je nastavené čtení v režimu Offline
+nofolder=Nebyla vybrána žádná cílová složka
+badfolder=Není možné importovat do této složky (typ IMAP nebo diskuzní skupina)
+exportAccount=Export všech složek
+exportFolder=Export složky
+filePickerImport=Výběr souboru k importu
+filePickerExport=Výběr cílové složky
+extensions.{3ed8cc52-86fc-4613-9026-c1ef969da4c3}.description=Umožňuje import a export souborů ve formátu mbox a eml
+virtualfolder=Toto je virtuální složka. Pro export jejich\nzpráv musíte tyto zprávy nejdříve\nzkopírovat do normální složky.
+searchdir=Vyberte složku, ve které budou vyhledány mbox soubory
+confirmimport=Chcete importovat soubor?
+endscan=Konec prohledávání složek
+internalerror=Není možné provést import, protože nastala neznámá chyba
+exportstart=Probíhá export, čekejte prosím...
+exported=Exportovalo se
+msgs=zpráv z
+nosubjectmsg=bez_predmetu
+messsubdir=zprávy
+badfolder2=Není možné importovat do této složky (IMAP nebo diskuzní skupina nebo virtuální složka)
+temp_error=Není možné importovat: nastala chyba při vytváření dočasného souboru
+importEMLstart=Pobíhá import, čekejte prosím...
+numEML=Naimportovány eml soubory:
+CSVseparator=,
+noEML=No eml file found in this directory
+backupWarning=During this operation, the program could be\nunresponsive for some minutes.\nDo you want to go on?\n  
+noWaring=Don't show again this warning
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/overlay.dtd b/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/overlay.dtd
new file mode 100755 (executable)
index 0000000..9a91cf1
--- /dev/null
@@ -0,0 +1,11 @@
+<!ENTITY tinyplugin "OpenERP Configuration">
+<!ENTITY tinypluginconfig "Archieve To OpenERP">
+<!ENTITY tinyarchive "Archive to OpenERP">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
+<!ENTITY menuicon.value "chrome://openerp_plugin/skin/NEWT.png">
+<!ENTITY partnericon.value "chrome://openerp_plugin/skin/Partner.png">
+<!ENTITY imagearchive.value "chrome://openerp_plugin/skin/Archive.png">
+<!ENTITY tooltip.value "Add To Archive">
+<!ENTITY pluginconfig.value "OpenERP Configuration Settings">
+<!ENTITY pluginconfigvalue.value "Archieve To OpenERP Settings">
+
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/plugin.dtd b/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/plugin.dtd
new file mode 100644 (file)
index 0000000..ed26728
--- /dev/null
@@ -0,0 +1,28 @@
+<!ENTITY title.label "Archive To OpenERP">
+<!ENTITY gptinyobj.label "Link to an Existing Document">
+<!ENTITY newobject.label "New Documents">
+<!ENTITY bsearch.label "Search">
+<!ENTITY close.label "Close">
+<!ENTITY attach.label "Archive to OpenERP">
+<!ENTITY create.label "New Contact">
+<!ENTITY archive.label "Create">
+<!ENTITY attach.label "Attach">
+<!ENTITY cbxcontact.label "Contact">
+<!ENTITY cbxinvoice.label "Invoice">
+<!ENTITY cbxproject.label "Project">
+<!ENTITY cbxpartner.label "Partner">
+<!ENTITY cbxproduct.label "Product">
+<!ENTITY cbxaccount.label "Account">
+<!ENTITY cbxsale.label "Sale">
+<!ENTITY cbxcase.label "Case">
+<!ENTITY cbxtask.label "Task">
+<!ENTITY cbxselectall.label "Select All">
+<!ENTITY object.label "Type of Document :">
+<!ENTITY partner.label "Create New Contact :">
+<!ENTITY search.label "Search :">
+<!ENTITY listSearchBox.header "Name">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imagearchive.value "chrome://openerp_plugin/skin/Archive.png">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
+<!ENTITY gptinyobjexe.label "Documents">
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/selectpartner.dtd b/addons/thunderbird/plugin/chrome/openerp_plugin/locale/en-US/selectpartner.dtd
new file mode 100644 (file)
index 0000000..e6a62c1
--- /dev/null
@@ -0,0 +1,12 @@
+<!ENTITY title.label "Select Partner">
+<!ENTITY selectpartner.value "Partner">
+<!ENTITY listPartnerName.header "Partner Name">
+<!ENTITY bsearch.label "Search">
+<!ENTITY create.label "Create">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
+<!ENTITY select.label "Select">
+<!ENTITY cancel.label "Cancel">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Account.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Account.png
new file mode 100644 (file)
index 0000000..b13f2b0
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Account.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Archive.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Archive.png
new file mode 100644 (file)
index 0000000..5aa6a95
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Archive.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Case.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Case.png
new file mode 100644 (file)
index 0000000..9b950b8
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Case.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Contact.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Contact.png
new file mode 100644 (file)
index 0000000..9bd6f9f
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Contact.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Create.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Create.png
new file mode 100644 (file)
index 0000000..1ab240c
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Create.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Error.gif b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Error.gif
new file mode 100644 (file)
index 0000000..38c3523
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Error.gif differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Invoice.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Invoice.png
new file mode 100644 (file)
index 0000000..4551107
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Invoice.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Move.gif b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Move.gif
new file mode 100644 (file)
index 0000000..401bf86
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Move.gif differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/MoveDown.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/MoveDown.png
new file mode 100644 (file)
index 0000000..3761ff1
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/MoveDown.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/MoveLeft.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/MoveLeft.png
new file mode 100644 (file)
index 0000000..031d753
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/MoveLeft.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/NEWT.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/NEWT.png
new file mode 100644 (file)
index 0000000..373464b
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/NEWT.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/NEWT1.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/NEWT1.png
new file mode 100644 (file)
index 0000000..2daac22
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/NEWT1.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Partner.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Partner.png
new file mode 100644 (file)
index 0000000..c661339
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Partner.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Product.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Product.png
new file mode 100644 (file)
index 0000000..51451e4
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Product.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Project.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Project.png
new file mode 100644 (file)
index 0000000..0f8ea2a
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Project.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Sale.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Sale.png
new file mode 100644 (file)
index 0000000..1b0b44f
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Sale.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Search.gif b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Search.gif
new file mode 100644 (file)
index 0000000..b29c3cf
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Search.gif differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Success.gif b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Success.gif
new file mode 100644 (file)
index 0000000..fb3bff7
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Success.gif differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Task.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Task.png
new file mode 100644 (file)
index 0000000..52056b1
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/Task.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/developped_by.png b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/developped_by.png
new file mode 100644 (file)
index 0000000..54dc465
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/developped_by.png differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/overlay.css b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/overlay.css
new file mode 100755 (executable)
index 0000000..1f71b8f
--- /dev/null
@@ -0,0 +1,3 @@
+menuitem#tiny-plugin {\r
+  color: red !important;\r
+}
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/perform.gif b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/perform.gif
new file mode 100644 (file)
index 0000000..16cc387
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/perform.gif differ
diff --git a/addons/thunderbird/plugin/chrome/openerp_plugin/skin/tinyerp-icon.ico b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/tinyerp-icon.ico
new file mode 100644 (file)
index 0000000..b1e78c0
Binary files /dev/null and b/addons/thunderbird/plugin/chrome/openerp_plugin/skin/tinyerp-icon.ico differ
diff --git a/addons/thunderbird/plugin/components/nsXmlRpcClient.js b/addons/thunderbird/plugin/components/nsXmlRpcClient.js
new file mode 100755 (executable)
index 0000000..40347a9
--- /dev/null
@@ -0,0 +1,1039 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla XML-RPC Client component.
+ *
+ * The Initial Developer of the Original Code is
+ * Digital Creations 2, Inc.
+ * Portions created by the Initial Developer are Copyright (C) 2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Martijn Pieters <mj@digicool.com> (original author)
+ *   Samuel Sieb <samuel@sieb.net>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ *  nsXmlRpcClient XPCOM component
+ *  Version: $Revision: 1.39 $
+ *
+ *  $Id: nsXmlRpcClient.js,v 1.39 2006/10/24 16:02:01 silver%warwickcompsoc.co.uk Exp $
+ */
+
+/*
+ * Constants
+ */
+const XMLRPCCLIENT_CONTRACTID = '@mozilla.org/xml-rpc/client;1';
+const XMLRPCCLIENT_CID =
+    Components.ID('{4d7d15c0-3747-4f7f-b6b3-792a5ea1a9aa}');
+const XMLRPCCLIENT_IID = Components.interfaces.nsIXmlRpcClient;
+
+const XMLRPCFAULT_CONTRACTID = '@mozilla.org/xml-rpc/fault;1';
+const XMLRPCFAULT_CID =
+    Components.ID('{691cb864-0a7e-448c-98ee-4a7f359cf145}');
+const XMLRPCFAULT_IID = Components.interfaces.nsIXmlRpcFault;
+
+const XMLHTTPREQUEST_CONTRACTID = '@mozilla.org/xmlextras/xmlhttprequest;1';
+
+const NSICHANNEL = Components.interfaces.nsIChannel;
+
+const DEBUG = false;
+const DEBUGPARSE = false;
+
+const DOMNode = Components.interfaces.nsIDOMNode;
+/*
+ * Class definitions
+ */
+
+/* The nsXmlRpcFault class constructor. */
+function nsXmlRpcFault() {}
+
+/* the nsXmlRpcFault class def */
+nsXmlRpcFault.prototype = {
+    faultCode: 0,
+    faultString: '',
+
+    init: function(faultCode, faultString) {
+        this.faultCode = faultCode;
+        this.faultString = faultString;
+    },
+
+    toString: function() {
+        return '<XML-RPC Fault: (' + this.faultCode + ') ' +
+            this.faultString + '>';
+    },
+
+    // nsISupports interface
+    QueryInterface: function(iid) {
+        if (!iid.equals(Components.interfaces.nsISupports) &&
+            !iid.equals(XMLRPCFAULT_IID))
+            throw Components.results.NS_ERROR_NO_INTERFACE;
+        return this;
+    }
+};
+
+/* The nsXmlRpcClient class constructor. */
+function nsXmlRpcClient() {}
+
+/* the nsXmlRpcClient class def */
+nsXmlRpcClient.prototype = {
+    _serverUrl: null,
+    _useAuth: false,
+
+    init: function(serverURL) {
+        this._serverUrl = serverURL;
+        this._encoding = "UTF-8";
+    },
+
+    setAuthentication: function(username, password){
+        if ((typeof username == "string") &&
+            (typeof password == "string")){
+          this._useAuth = true;
+          this._username = username;
+          this._password = password;
+        }
+    },
+
+    clearAuthentication: function(){
+        this._useAuth = false;
+    },
+
+    setEncoding: function(encoding){
+        this._encoding = encoding;
+    },
+
+    get serverUrl() { return this._serverUrl; },
+
+    // Internal copy of the status
+    _status: null,
+    _listener: null,
+
+    asyncCall: function(listener, context, methodName, methodArgs, count) {
+        debug('asyncCall');
+        // Check for call in progress.
+        if (this._inProgress)   
+            return;
+            //throw Components.Exception('Call in progress!');
+
+        // Check for the server URL;
+        if (!this._serverUrl)
+            throw Components.Exception('Not initialized');
+
+        this._inProgress = true;
+
+        // Clear state.
+        this._foundFault = false;
+        this._passwordTried = false;
+        this._result = null;
+        this._fault = null;
+        this._status = null;
+        this._responseStatus = null;
+        this._responseString = null;
+        this._listener = listener;
+        this._seenStart = false;
+        this._context = context;
+        
+        debug('Arguments: ' + methodArgs);
+
+        // Generate request body
+        var xmlWriter = new XMLWriter(this._encoding);
+        this._generateRequestBody(xmlWriter, methodName, methodArgs);
+
+        var requestBody = xmlWriter.data;
+
+        debug('Request: ' + requestBody);
+
+        this.xmlhttp = Components.classes[XMLHTTPREQUEST_CONTRACTID]
+            .createInstance(Components.interfaces.nsIXMLHttpRequest);
+        if (this._useAuth) {
+            this.xmlhttp.open('POST', this._serverUrl, true,
+                              this._username, this._password);
+        } else {
+            this.xmlhttp.open('POST', this._serverUrl);
+        }
+        this.xmlhttp.onload = this._onload;
+        this.xmlhttp.onerror = this._onerror;
+        this.xmlhttp.parent = this;
+        this.xmlhttp.setRequestHeader('Content-Type','text/xml');
+        this.xmlhttp.send(requestBody);
+        var chan = this.xmlhttp.channel.QueryInterface(NSICHANNEL);
+        chan.notificationCallbacks = this;
+    },
+
+    _onload: function(e) {
+        var result;
+        var parent = e.target.parent;
+        parent._inProgress = false;
+        parent._responseStatus = e.target.status;
+        parent._responseString = e.target.statusText;
+        if (!e.target.responseXML) {
+            if (e.target.status) {
+                try {
+                    parent._listener.onError(parent, parent._context,
+                        Components.results.NS_ERROR_FAILURE,
+                        'Server returned status ' + e.target.status);
+                } catch (ex) {
+                    debug('Exception in listener.onError: ' + ex);
+                }
+            } else {
+                try {
+                    parent._listener.onError(parent, parent._context,
+                                      Components.results.NS_ERROR_FAILURE,
+                                      'Unknown network error');
+                } catch (ex) {
+                    debug('Exception in listener.onError: ' + ex);
+                }
+            }
+            return;
+        }
+        try {
+            e.target.responseXML.normalize();
+            result = parent.parse(e.target.responseXML);
+        } catch (ex) {
+            try {
+                parent._listener.onError(parent, parent._context,
+                                         ex.result, ex.message);
+            } catch (ex) {
+                debug('Exception in listener.onError: ' + ex);
+            }
+            return;
+        }
+        if (parent._foundFault) {
+            parent._fault = result;
+            try {
+                parent._listener.onFault(parent, parent._context, result);
+            } catch(ex) {
+                debug('Exception in listener.onFault: ' + ex);
+            }
+        } else {
+            parent._result = result.value;
+            try { 
+                parent._listener.onResult(parent, parent._context,
+                                          result.value);
+            } catch (ex) {
+                debug('Exception in listener.onResult: ' + ex);
+            }
+        }
+    },
+
+    _onerror: function(e) {
+        var parent = e.target.parent;
+        parent._inProgress = false;
+        try {
+            parent._listener.onError(parent, parent._context,
+                                Components.results.NS_ERROR_FAILURE,
+                                'Unknown network error');
+        } catch (ex) {
+            debug('Exception in listener.onError: ' + ex);
+        }
+    },
+    
+    _foundFault: false,
+
+    _fault: null,
+    _result: null,
+    _responseStatus: null,
+    _responseString: null,
+
+    get fault() { return this._fault; },
+    get result() { return this._result; },
+    get responseStatus() { return this._responseStatus; },
+    get responseString() { return this._responseString; },
+
+    /* Convenience. Create an appropriate XPCOM object for a given type */
+    INT:      1,
+    BOOLEAN:  2,
+    STRING:   3,
+    DOUBLE:   4,
+    DATETIME: 5,
+    ARRAY:    6,
+    STRUCT:   7,
+    BASE64:   8, // Not part of nsIXmlRpcClient interface, internal use.
+    createType: function(type, uuid) {
+        const SUPPORTSID = '@mozilla.org/supports-';
+        switch(type) {
+            case this.INT:
+                uuid.value = Components.interfaces.nsISupportsPRInt32
+                return createInstance(SUPPORTSID + 'PRInt32;1',
+                    'nsISupportsPRInt32');
+
+            case this.BOOLEAN:
+                uuid.value = Components.interfaces.nsISupportsPRBool
+                return createInstance(SUPPORTSID + 'PRBool;1',
+                    'nsISupportsPRBool');
+
+            case this.STRING:
+                uuid.value = Components.interfaces.nsISupportsCString
+                return createInstance(SUPPORTSID + 'cstring;1',
+                    'nsISupportsCString');
+
+            case this.DOUBLE:
+                uuid.value = Components.interfaces.nsISupportsDouble
+                return createInstance(SUPPORTSID + 'double;1',
+                    'nsISupportsDouble');
+
+            case this.DATETIME:
+                uuid.value = Components.interfaces.nsISupportsPRTime
+                return createInstance(SUPPORTSID + 'PRTime;1',
+                    'nsISupportsPRTime');
+
+            case this.ARRAY:
+                uuid.value = Components.interfaces.nsISupportsArray
+                return createInstance(SUPPORTSID + 'array;1',
+                    'nsISupportsArray');
+
+            case this.STRUCT:
+                uuid.value = Components.interfaces.nsIDictionary
+                return createInstance('@mozilla.org/dictionary;1', 
+                    'nsIDictionary');
+
+            default: throw Components.Exception('Unsupported type');
+        }
+    },
+
+    // nsISupports interface
+    QueryInterface: function(iid) {
+        if (!iid.equals(Components.interfaces.nsISupports) &&
+            !iid.equals(XMLRPCCLIENT_IID) &&
+            !iid.equals(Components.interfaces.nsIInterfaceRequestor))
+            throw Components.results.NS_ERROR_NO_INTERFACE;
+        return this;
+    },
+
+    // nsIInterfaceRequester interface
+    getInterface: function(iid, result){
+        if (iid.equals(Components.interfaces.nsIAuthPrompt)){
+            return this;
+        }
+        Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE;
+        return null;
+    },
+
+    // nsIAuthPrompt interface
+    _passwordTried: false,
+    promptUsernameAndPassword: function(dialogTitle, text, passwordRealm,
+                                        savePassword, user, pwd){
+
+        if (this._useAuth){
+            if (this._passwordTried){
+                return false;
+            }
+            user.value = this._username;
+            pwd.value = this._password;
+            this._passwordTried = true;
+            return true;
+        }
+        return false;
+    },
+
+    /* Generate the XML-RPC request body */
+    _generateRequestBody: function(writer, methodName, methodArgs) {
+        writer.startElement('methodCall');
+
+        writer.startElement('methodName');
+        writer.write(methodName);
+        writer.endElement('methodName');
+
+        writer.startElement('params');
+        for (var i = 0; i < methodArgs.length; i++) {
+            writer.startElement('param');
+            this._generateArgumentBody(writer, methodArgs[i]);
+            writer.endElement('param');
+        }
+        writer.endElement('params');
+
+        writer.endElement('methodCall');
+    },
+
+    /* Write out a XML-RPC parameter value */
+    _generateArgumentBody: function(writer, obj) {
+        writer.startElement('value');
+        var sType = this._typeOf(obj);
+        switch (sType) {
+            case 'PRUint8':
+            case 'PRUint16':
+            case 'PRInt16':
+            case 'PRInt32':
+                obj=obj.QueryInterface(Components.interfaces['nsISupports' +
+                    sType]);
+                writer.startElement('i4');
+                writer.write(obj.toString());
+                writer.endElement('i4');
+                break;
+
+            case 'PRBool':
+                obj=obj.QueryInterface(Components.interfaces.nsISupportsPRBool);
+                writer.startElement('boolean');
+                writer.write(obj.data ? '1' : '0');
+                writer.endElement('boolean');
+                break;
+
+            case 'Char':
+            case 'CString':
+                obj=obj.QueryInterface(Components.interfaces['nsISupports' +
+                    sType]);
+                writer.startElement('string');
+                writer.write(obj.toString());
+                writer.endElement('string');
+                break;
+
+            case 'Float':
+            case 'Double':
+                obj=obj.QueryInterface(Components.interfaces['nsISupports' +
+                    sType]);
+                writer.startElement('double');
+                writer.write(obj.toString());
+                writer.endElement('double');
+                break;
+
+            case 'PRTime':
+                obj = obj.QueryInterface(
+                    Components.interfaces.nsISupportsPRTime);
+                var date = new Date(obj.data)
+                writer.startElement('dateTime.iso8601');
+                writer.write(iso8601Format(date));
+                writer.endElement('dateTime.iso8601');
+                break;
+                
+            case 'InputStream':
+                obj = obj.QueryInterface(Components.interfaces.nsIInputStream);
+                obj = toScriptableStream(obj);
+                writer.startElement('base64');
+                streamToBase64(obj, writer);
+                writer.endElement('base64');
+                break;
+            
+            case 'Array':
+                obj = obj.QueryInterface(
+                    Components.interfaces.nsISupportsArray);
+                writer.startElement('array');
+                writer.startElement('data');
+                for (var i = 0; i < obj.Count(); i++)
+                    this._generateArgumentBody(writer, obj.GetElementAt(i));
+                writer.endElement('data');
+                writer.endElement('array');
+                break;
+
+            case 'Dictionary':
+                obj = obj.QueryInterface(Components.interfaces.nsIDictionary);
+                writer.startElement('struct');
+                var keys = obj.getKeys({});
+                for (var k = 0; k < keys.length; k++) {
+                    writer.startElement('member');
+                    writer.startElement('name');
+                    writer.write(keys[k]);
+                    writer.endElement('name');
+                    this._generateArgumentBody(writer, obj.getValue(keys[k]));
+                    writer.endElement('member');
+                }
+                writer.endElement('struct');
+                break;
+
+            default:
+                throw Components.Exception('Unsupported argument', null, null,
+                    obj);
+        }
+
+        writer.endElement('value');
+    },
+
+    /* Determine type of a nsISupports primitive, array or dictionary. */
+    _typeOf: function(obj) {
+        // XPConnect alows JS to pass in anything, because we are a regular
+        // JS object to it. So we have to test rigorously.
+        if (typeof obj != 'object') return 'Unknown';
+
+        // Anything else not nsISupports is not allowed.
+        if (typeof obj.QueryInterface != 'function') return 'Unknown';
+
+        // Now we will have to eliminate by trying all possebilities.
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRUint8);
+            return 'PRUint8';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRUint16);
+            return 'PRUint16';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRInt16);
+            return 'PRInt16';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+            return 'PRInt32';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRBool);
+            return 'PRBool';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsChar);
+            return 'Char';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsCString);
+            return 'CString';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsFloat);
+            return 'Float';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsDouble);
+            return 'Double';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRTime);
+            return 'PRTime';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsIInputStream);
+            return 'InputStream';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsArray);
+            return 'Array';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsIDictionary);
+            return 'Dictionary';
+        } catch(e) {}
+        
+        // Not a supported type
+        return 'Unknown';
+    },
+
+    // Response parsing state
+    _valueStack: [],
+    _currValue: null,
+    _cdata: null,
+
+    parse: function(doc) {
+        var node = doc.firstChild;
+        var result;
+        if (node.nodeType == DOMNode.TEXT_NODE)
+            node = node.nextSibling;
+        if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
+            (node.nodeName != 'methodResponse')) {
+            throw Components.Exception('Expecting a methodResponse', null, null,
+                                       doc);
+        }
+        node = node.firstChild;
+        if (node.nodeType == DOMNode.TEXT_NODE)
+            node = node.nextSibling;
+        if (node.nodeType != DOMNode.ELEMENT_NODE)
+            throw Components.Exception('Expecting a params or fault', null,
+                                       null, doc);
+        if (node.nodeName == 'params') {
+            node = node.firstChild;
+            if (node.nodeType == DOMNode.TEXT_NODE)
+                node = node.nextSibling;
+            if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
+                (node.nodeName != 'param')) {
+                throw Components.Exception('Expecting a param', null, null,
+                                           doc);
+            }
+            result = this.parseValue(node.firstChild);
+        } else if (node.nodeName == 'fault') {
+            this._foundFault = true;
+            result = this.parseFault(node.firstChild);
+        } else {
+            throw Components.Exception('Expecting a params or fault', null,
+                                       null, doc);
+        }
+        debug('Parse finished');
+        return result;
+    },
+
+    parseValue: function(node) {
+        var cValue = new Value();
+        if (node && (node.nodeType == DOMNode.TEXT_NODE))
+            node = node.nextSibling;
+        if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
+            (node.nodeName != 'value')) {
+            throw Components.Exception('Expecting a value', null, null, node);
+        }
+        node = node.firstChild;
+        if (!node)
+            return cValue;
+        if (node.nodeType == DOMNode.TEXT_NODE){
+            if (!node.nextSibling) {
+                cValue.value = node.nodeValue;
+                return cValue;
+            } else {
+                node = node.nextSibling;
+            }
+        }
+        if (node.nodeType != DOMNode.ELEMENT_NODE)
+            throw Components.Exception('Expecting a value type', null, null,
+                                       node);
+        switch (node.nodeName) {
+            case 'string':
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'i4':
+            case 'int':
+                cValue.type = this.INT;
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'boolean':
+                cValue.type = this.BOOLEAN;
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'double':
+                cValue.type = this.DOUBLE;
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'dateTime.iso8601':
+                cValue.type = this.DATETIME;
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'base64':
+                cValue.type = this.BASE64;
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'struct':
+                cValue.type = this.STRUCT;
+                this.parseStruct(cValue, node.firstChild);
+                break;
+            case 'array':
+                cValue.type = this.ARRAY;
+                this.parseArray(cValue, node.firstChild);
+                break;
+            default:
+                throw Components.Exception('Expecting a value type', null, null,
+                                           node);
+        }
+        return cValue;
+    },
+
+    parseString: function(node) {
+        value = '';
+        while (node) {
+            if (node.nodeType != DOMNode.TEXT_NODE)
+                throw Components.Exception('Expecting a text node', null, null,
+                                           node);
+            value += node.nodeValue; 
+            node = node.nextSibling;
+        }
+        return value;
+    },
+
+    parseStruct: function(struct, node) {
+        while (node) {
+            if (node.nodeType == DOMNode.TEXT_NODE)
+                node = node.nextSibling;
+            if (!node)
+                return;
+            if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
+                (node.nodeName != 'member')) {
+                throw Components.Exception('Expecting a member', null, null,
+                                           node);
+            }
+            this.parseMember(struct, node.firstChild);
+            node = node.nextSibling;
+        }
+    },
+
+    parseMember: function(struct, node) {
+        var cValue;
+        if (node.nodeType == DOMNode.TEXT_NODE)
+            node = node.nextSibling;
+        if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
+            (node.nodeName != 'name')) {
+            throw Components.Exception('Expecting a name', null, null, node);
+        }
+        struct.name = this.parseString(node.firstChild);
+        cValue = this.parseValue(node.nextSibling);
+        struct.appendValue(cValue.value);
+    },
+
+    parseArray: function(array, node) {
+        if (node.nodeType == DOMNode.TEXT_NODE)
+            node = node.nextSibling;
+        if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
+            (node.nodeName != 'data')) {
+            throw Components.Exception('Expecting array data', null, null, node);
+        }
+        for (node = node.firstChild; node; node = node.nextSibling) {
+            if (node.nodeType == DOMNode.TEXT_NODE)
+                continue;
+            array.appendValue(this.parseValue(node).value);
+        }
+    },
+
+    parseFault: function(node) {
+        var fault = createInstance(XMLRPCFAULT_CONTRACTID, 'nsIXmlRpcFault');
+        var cValue = this.parseValue(node);
+        if ((cValue.type != this.STRUCT) ||
+            (!cValue.value.hasKey('faultCode')) ||
+            (!cValue.value.hasKey('faultString'))) {
+            throw Components.Exception('Invalid fault', null, null, node);
+        }
+        fault.init(cValue.value.getValue('faultCode').data,
+                   cValue.value.getValue('faultString').data);
+        return fault;
+    }
+};
+
+/* The XMLWriter class constructor */
+function XMLWriter(encoding) {
+    if (!encoding)
+        encoding = "UTF-8";
+    this.data = '<?xml version="1.0" encoding="' + encoding + '"?>';
+}
+
+/* The XMLWriter class def */
+XMLWriter.prototype = {
+    data: '',
+    
+    startElement: function(element) {
+        this.data += '<' + element + '>';
+    },
+
+    endElement: function(element) {
+        this.data += '</' + element + '>';
+    },
+    
+    write: function(text) {
+        for (var i = 0; i < text.length; i++) {
+            var c = text[i];
+            switch (c) {
+                case '<':
+                    this.data += '&lt;';
+                    break;
+                case '&':
+                    this.data += '&amp;';
+                    break;
+                default:
+                    this.data += c;
+            }
+        }
+    },
+
+    markup: function(text) { this.data += text }
+};
+
+/* The Value class contructor */
+function Value() { this.type = this.STRING; };
+
+/* The Value class def */
+Value.prototype = {
+    INT:      nsXmlRpcClient.prototype.INT,
+    BOOLEAN:  nsXmlRpcClient.prototype.BOOLEAN,
+    STRING:   nsXmlRpcClient.prototype.STRING,
+    DOUBLE:   nsXmlRpcClient.prototype.DOUBLE,
+    DATETIME: nsXmlRpcClient.prototype.DATETIME,
+    ARRAY:    nsXmlRpcClient.prototype.ARRAY,
+    STRUCT:   nsXmlRpcClient.prototype.STRUCT,
+    BASE64:   nsXmlRpcClient.prototype.BASE64,
+    
+    _createType: nsXmlRpcClient.prototype.createType,
+
+    name: null,
+    
+    _value: null,
+    get value() { return this._value; },
+    set value(val) {
+        // accepts [0-9]+ or x[0-9a-fA-F]+ and returns the character.
+        function entityTrans(substr, code) {
+            return String.fromCharCode("0" + code);
+        }
+        
+        switch (this.type) {
+            case this.STRING:
+                val = val.replace(/&#([0-9]+);/g, entityTrans);
+                val = val.replace(/&#(x[0-9a-fA-F]+);/g, entityTrans);
+                val = val.replace(/&lt;/g, '<');
+                val = val.replace(/&gt;/g, '>');
+                val = val.replace(/&amp;/g, '&');
+                this._value.data = val;
+                break;
+        
+            case this.BOOLEAN:
+                this._value.data = (val == 1);
+                break;
+
+            case this.DATETIME:
+                this._value.data = Date.UTC(val.slice(0, 4), 
+                    val.slice(4, 6) - 1, val.slice(6, 8), val.slice(9, 11),
+                    val.slice(12, 14), val.slice(15));
+                break;
+
+            case this.BASE64:
+                this._value.data = base64ToString(val);
+                break;
+
+            default:
+                this._value.data = val;
+        }
+    },
+
+    _type: null,
+    get type() { return this._type; },
+    set type(type) { 
+        this._type = type;
+        if (type == this.BASE64) 
+            this._value = this._createType(this.STRING, {});
+        else this._value = this._createType(type, {});
+    },
+
+    appendValue: function(val) {
+        switch (this.type) {
+            case this.ARRAY:
+                this.value.AppendElement(val);
+                break;
+
+            case this.STRUCT:
+                this.value.setValue(this.name, val);
+                break;
+        }
+    }
+};
+
+/*
+ * Objects
+ */
+
+/* nsXmlRpcClient Module (for XPCOM registration) */
+var nsXmlRpcClientModule = {
+    registerSelf: function(compMgr, fileSpec, location, type) {
+        compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
+
+        compMgr.registerFactoryLocation(XMLRPCCLIENT_CID, 
+                                        'XML-RPC Client JS component', 
+                                        XMLRPCCLIENT_CONTRACTID, 
+                                        fileSpec,
+                                        location, 
+                                        type);
+        compMgr.registerFactoryLocation(XMLRPCFAULT_CID, 
+                                        'XML-RPC Fault JS component', 
+                                        XMLRPCFAULT_CONTRACTID, 
+                                        fileSpec,
+                                        location, 
+                                        type);
+    },
+
+    getClassObject: function(compMgr, cid, iid) {
+        if (!cid.equals(XMLRPCCLIENT_CID) && !cid.equals(XMLRPCFAULT_CID))
+            throw Components.results.NS_ERROR_NO_INTERFACE;
+
+        if (!iid.equals(Components.interfaces.nsIFactory))
+            throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
+
+        if (cid.equals(XMLRPCCLIENT_CID))
+            return nsXmlRpcClientFactory
+        else return nsXmlRpcFaultFactory;
+    },
+
+    canUnload: function(compMgr) { return true; }
+};
+
+/* nsXmlRpcClient Class Factory */
+var nsXmlRpcClientFactory = {
+    createInstance: function(outer, iid) {
+        if (outer != null)
+            throw Components.results.NS_ERROR_NO_AGGREGATION;
+    
+        if (!iid.equals(XMLRPCCLIENT_IID) &&
+            !iid.equals(Components.interfaces.nsISupports))
+            throw Components.results.NS_ERROR_INVALID_ARG;
+
+        return new nsXmlRpcClient();
+    }
+}
+
+/* nsXmlRpcFault Class Factory */
+var nsXmlRpcFaultFactory = {
+    createInstance: function(outer, iid) {
+        if (outer != null)
+            throw Components.results.NS_ERROR_NO_AGGREGATION;
+
+        if (!iid.equals(XMLRPCFAULT_IID) &&
+            !iid.equals(Components.interfaces.nsISupports))
+            throw Components.results.NS_ERROR_INVALID_ARG;
+
+        return new nsXmlRpcFault();
+    }
+}
+
+/*
+ * Functions
+ */
+
+/* module initialisation */
+function NSGetModule(comMgr, fileSpec) { return nsXmlRpcClientModule; }
+
+/* Create an instance of the given ContractID, with given interface */
+function createInstance(contractId, intf) {
+    return Components.classes[contractId]
+        .createInstance(Components.interfaces[intf]);
+}
+
+/* Get a pointer to a service indicated by the ContractID, with given interface */
+function getService(contractId, intf) {
+    return Components.classes[contractId]
+        .getService(Components.interfaces[intf]);
+}
+
+/* Convert an inputstream to a scriptable inputstream */
+function toScriptableStream(input) {
+    var SIStream = Components.Constructor(
+        '@mozilla.org/scriptableinputstream;1',
+        'nsIScriptableInputStream', 'init');
+    return new SIStream(input);
+}
+
+/* format a Date object into a iso8601 datetime string, UTC time */
+function iso8601Format(date) {
+    var datetime = date.getUTCFullYear();
+    var month = String(date.getUTCMonth() + 1);
+    datetime += (month.length == 1 ?  '0' + month : month);
+    var day = date.getUTCDate();
+    datetime += (day < 10 ? '0' + day : day);
+
+    datetime += 'T';
+
+    var hour = date.getUTCHours();
+    datetime += (hour < 10 ? '0' + hour : hour) + ':';
+    var minutes = date.getUTCMinutes();
+    datetime += (minutes < 10 ? '0' + minutes : minutes) + ':';
+    var seconds = date.getUTCSeconds();
+    datetime += (seconds < 10 ? '0' + seconds : seconds);
+
+    return datetime;
+}
+
+/* Convert a stream to Base64, writing it away to a string writer */
+const BASE64CHUNK = 255; // Has to be dividable by 3!!
+function streamToBase64(stream, writer) {
+    while (stream.available()) {
+        var data = [];
+        while (data.length < BASE64CHUNK && stream.available()) {
+            var d = stream.read(1).charCodeAt(0);
+            // reading a 0 results in NaN, compensate.
+            data = data.concat(isNaN(d) ? 0 : d);
+        }
+        writer.write(toBase64(data));
+    }
+}
+
+/* Convert data (an array of integers) to a Base64 string. */
+const toBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' +
+    '0123456789+/';
+const base64Pad = '=';
+function toBase64(data) {
+    var result = '';
+    var length = data.length;
+    var i;
+    // Convert every three bytes to 4 ascii characters.
+    for (i = 0; i < (length - 2); i += 3) {
+        result += toBase64Table[data[i] >> 2];
+        result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)];
+        result += toBase64Table[((data[i+1] & 0x0f) << 2) + (data[i+2] >> 6)];
+        result += toBase64Table[data[i+2] & 0x3f];
+    }
+
+    // Convert the remaining 1 or 2 bytes, pad out to 4 characters.
+    if (length%3) {
+        i = length - (length%3);
+        result += toBase64Table[data[i] >> 2];
+        if ((length%3) == 2) {
+            result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)];
+            result += toBase64Table[(data[i+1] & 0x0f) << 2];
+            result += base64Pad;
+        } else {
+            result += toBase64Table[(data[i] & 0x03) << 4];
+            result += base64Pad + base64Pad;
+        }
+    }
+
+    return result;
+}
+
+/* Convert Base64 data to a string */
+const toBinaryTable = [
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
+    52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1,
+    -1, 0, 1, 2,  3, 4, 5, 6,  7, 8, 9,10, 11,12,13,14,
+    15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
+    -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
+    41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
+];
+function base64ToString(data) {
+    var result = '';
+    var leftbits = 0; // number of bits decoded, but yet to be appended
+    var leftdata = 0; // bits decoded, but yet to be appended
+
+    // Convert one by one.
+    for (var i = 0; i < data.length; i++) {
+        var c = toBinaryTable[data.charCodeAt(i) & 0x7f];
+        var padding = (data[i] == base64Pad);
+        // Skip illegal characters and whitespace
+        if (c == -1) continue;
+        
+        // Collect data into leftdata, update bitcount
+        leftdata = (leftdata << 6) | c;
+        leftbits += 6;
+
+        // If we have 8 or more bits, append 8 bits to the result
+        if (leftbits >= 8) {
+            leftbits -= 8;
+            // Append if not padding.
+            if (!padding)
+                result += String.fromCharCode((leftdata >> leftbits) & 0xff);
+            leftdata &= (1 << leftbits) - 1;
+        }
+    }
+
+    // If there are any bits left, the base64 string was corrupted
+    if (leftbits)
+        throw Components.Exception('Corrupted base64 string');
+
+    return result;
+}
+
+if (DEBUG) debug = function(msg) { 
+    dump(' -- XML-RPC client -- : ' + msg + '\n'); 
+};
+else debug = function() {}
+
+// vim:sw=4:sr:sta:et:sts:
diff --git a/addons/thunderbird/plugin/components/xml-rpc.xpt b/addons/thunderbird/plugin/components/xml-rpc.xpt
new file mode 100755 (executable)
index 0000000..8e59aa2
Binary files /dev/null and b/addons/thunderbird/plugin/components/xml-rpc.xpt differ
diff --git a/addons/thunderbird/plugin/defaults/preferences/tiny.js b/addons/thunderbird/plugin/defaults/preferences/tiny.js
new file mode 100755 (executable)
index 0000000..ca8332c
--- /dev/null
@@ -0,0 +1,56 @@
+
+pref("extensions.tiny.serverurl", "http://localhost");
+pref("extensions.tiny.serverport", "8069");
+pref("extensions.tiny.serverdbname", "terp");
+pref("extensions.tiny.username","admin");
+pref("extensions.tiny.password","admin");
+pref("extensions.tiny.senderemail","");
+pref("extensions.tiny.sendername","");
+pref("extensions.tiny.receiveremail","");
+pref("extensions.tiny.subject","");
+pref("extensions.tiny.receiveddate","");
+pref("extensions.tiny.partnerid","");
+pref("extensions.tiny.contactid","");
+pref("extensions.tiny.attachvalue","");
+pref("extensions.tiny.cclist","");
+pref("extensions.tiny.messagebody","");
+pref("extensions.tiny.displayName","");
+pref("extensions.tiny.attachmentdata","");
+pref("extensions.tiny.userid",3);
+pref("extensions.tiny.partnername","");
+pref("extensions.tiny.officeno","");
+pref("extensions.tiny.phoneno","");
+pref("extensions.tiny.address","");
+pref("extensions.tiny.listobject","Partner,Partner Address,Accout Invoice,Project,Product,Account,Sale Order,Project Task");
+pref("extensions.tiny.object","res.partner,res.partner.address,account.invoice,project.project,product.product,account.account,sale.order,project.task");
+pref("extensions.tiny.imagename","chrome://openerp_plugin/skin/Partner.png,chrome://openerp_plugin/skin/Contact.png,chrome://openerp_plugin/skin/Invoice.png,chrome://openerp_plugin/skin/Project.png,chrome://openerp_plugin/skin/Product.png,chrome://openerp_plugin/skin/Account.png,chrome://openerp_plugin/skin/Sale.png,chrome://openerp_plugin/skin/Case.png,chrome://openerp_plugin/skin/Task.png");
+pref("extensions.tiny.attachmentlength","");
+pref("extensions.tiny.attachment","");
+pref("extensions.tiny.db_list","false");
+pref("extensions.tiny.connect_server","false");
+pref("extensions.tiny.module_install","yes");
+pref("extensions.tiny.serverprotocol", "false");
+
+
+
+pref("mboximport.export.filenames_toascii", false);
+pref("mboximport.export.overwrite", false);
+pref("mboximport.confirm.before_mbox_import", true);
+pref("mboximport.clipboard.always_just_text", false);
+pref("mboximport.export.HTML_as_displayed", false);
+pref("mboximport.exportEML.filename_format", 0);
+pref("mboximport.delay.clean_statusbar", 5000);
+pref("mboximport.subject.max_length", 50);
+pref("mboximport.author.max_length", 50);
+pref("mboximport.recipients.max_length", 50);
+pref("extensions.{3ed8cc52-86fc-4613-9026-c1ef969da4c3}.description", "chrome://mboximport/locale/mboximport.properties");
+pref("mboximport.export.set_filetime", false);
+pref("mboximport.exportEML.use_dir", false);
+pref("mboximport.exportMBOX.use_dir", false);
+pref("mboximport.exportMSG.use_dir", false);
+pref("mboximport.export.filenames_addtime", false);
+pref("mboximport.export_all.warning1", true);
+pref("mboximport.export_all.warning2", true);
+
+pref("mboximport.exportMSG.dir", "/tmp");
+
diff --git a/addons/thunderbird/plugin/install.js b/addons/thunderbird/plugin/install.js
new file mode 100755 (executable)
index 0000000..50e4b30
--- /dev/null
@@ -0,0 +1,105 @@
+// constants
+const APP_DISPLAY_NAME = "OpenERP Thunderbird Plugins";
+const APP_NAME = "OpenERP";
+const APP_VERSION = "1.0";
+const WARNING = "WARNING: You need administrator privileges to install OpenERP Thunderbird Plugin. It will be installed in the application directory for all users.";
+const VERSION_ERROR = "This extension can only be installed in a version higher than 2.0";
+const NOT_WRITABLE_ERROR = "This extension requires write access to the application directory to install properly."
+const locales = [
+       "en-US",
+       null
+];
+
+// Gecko 1.7 doesn't support custom button labels
+var incompatible = (typeof Install.BUTTON_POS_0 == "undefined");
+if (incompatible)
+       alert(VERSION_ERROR);
+
+if (!incompatible) {
+       // Check whether all directories can be accessed
+       var dirList = [
+               getFolder("Components"),
+               getFolder(getFolder("Program", "defaults"), "pref")
+       ];
+       for (var i = 0; i < dirList.length; i++)
+               if (!File.isWritable(dirList[i]))
+                       incompatible = true;
+
+       if (incompatible)
+               alert(NOT_WRITABLE_ERROR);
+}
+
+if (!incompatible && confirm(WARNING, APP_DISPLAY_NAME)) {
+       /* Pre-Install Cleanup (for prior versions) */
+
+       // List of files to be checked
+       var checkFiles = [
+               [getFolder("Components"), "nsXmlRpcClient.js"],            // Root component
+               [getFolder("Components"), "xml-rpc.xpt"],           // Component interface
+                       ];
+
+       // Remove any existing files
+       initInstall("pre-install", "/rename", "0.0");  // open dummy-install
+       for (var i = 0 ; i < checkFiles.length ; i++) {
+               var currentDir = checkFiles[i][0];
+               var name = checkFiles[i][1];
+               var oldFile = getFolder(currentDir, name);
+
+               // Find a name to rename the file into
+               var newName = name + "-uninstalled";
+               for (var n = 1; File.exists(oldFile) && File.exists(getFolder(currentDir, newName)); n++)
+                       newName = name + n + "-uninstalled";
+
+               if (File.exists(oldFile))
+                       File.rename(oldFile, newName);
+       }
+       performInstall(); // commit renamed files
+
+       /* Main part of the installation */
+
+       var chromeType = DELAYED_CHROME;
+
+       var files = [
+               ["components/nsXmlRpcClient.js", getFolder("Components")],
+               ["components/xml-rpc.xpt", getFolder("Components")],
+               ["defaults/preferences/tiny.js", getFolder(getFolder("Program", "defaults"), "pref")],
+       ];
+
+       // initialize our install
+       initInstall(APP_NAME, APP_PACKAGE, APP_VERSION);
+
+       // Add files
+       for (var i = 0; i < files.length; i++)
+               addFile(APP_NAME, APP_VERSION, files[i][0], files[i][1], null);
+
+       try {
+               var err = registerChrome(CONTENT | chromeType, jar, "content/");
+               if (err != SUCCESS)
+                       throw "Chrome registration for content failed (error code " + err + ").";
+
+               err = registerChrome(SKIN | chromeType, jar, "skin/classic/");
+               if (err != SUCCESS)
+                       throw "Chrome registration for skin failed (error code " + err + ").";
+
+               for (i = 0; i < locales.length; i++) {
+                       if (!locales[i])
+                               continue;
+
+                       err = registerChrome(LOCALE | chromeType, jar, "locale/" + locales[i] + "/");
+                       if (err != SUCCESS)
+                               throw "Chrome registration for " + locales[i] + " locale failed (error code " + err + ").";
+               }
+
+               var err = performInstall();
+               if (err != SUCCESS && err != 999)
+                       throw "Committing installation failed (error code " + err + ").";
+
+               alert("OpenERP Thunderbird Plugin " + APP_VERSION + " is now installed.\n" +
+                                       "It will become active after you restart your browser.");
+       }
+       catch (ex) {
+               alert("Installation failed: " + ex + "\n" +
+                                       "You probably don't have the necessary permissions (log in as system administrator).");
+               cancelInstall(err);
+       }
+}
diff --git a/addons/thunderbird/plugin/install.rdf b/addons/thunderbird/plugin/install.rdf
new file mode 100755 (executable)
index 0000000..07fdd11
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>\r
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
+     xmlns:em="http://www.mozilla.org/2004/em-rdf#">\r
+  <Description about="urn:mozilla:install-manifest">\r
+    <em:id>{d57f315a-9f5d-4366-a530-a769a4a8c949}</em:id>\r
+    <em:iconURL>chrome://openerp_plugin/skin/tinyerp-icon.ico</em:iconURL>\r
+    <em:name>OpenERP Plugin for Thunderbird 2.0</em:name>\r
+    <em:version>1.0</em:version>\r
+    <em:description>OpenERP Thunderbird Integration</em:description>\r
+    <em:creator>OpenERP SA</em:creator>\r
+    <!-- optional items -->\r
+    <em:homepageURL>http://openerp.com</em:homepageURL>\r
+    <!-- Thunderbird -->\r
+    <em:targetApplication>\r
+      <Description>\r
+        <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>\r
+        <em:minVersion>2.0</em:minVersion>\r
+        <em:maxVersion>3.0.*</em:maxVersion>\r
+      </Description>\r
+    </em:targetApplication>\r
+  </Description>\r
+</RDF>\r
diff --git a/addons/thunderbird/plugin/openerp_plugin.xpi b/addons/thunderbird/plugin/openerp_plugin.xpi
new file mode 100644 (file)
index 0000000..c9715e4
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin.xpi differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome.manifest b/addons/thunderbird/plugin/openerp_plugin/chrome.manifest
new file mode 100755 (executable)
index 0000000..5fa9c2f
--- /dev/null
@@ -0,0 +1,5 @@
+content        openerp_plugin  jar:chrome/openerp_plugin.jar!/content/
+overlay        chrome://messenger/content/messenger.xul        chrome://openerp_plugin/content/overlay.xul
+locale openerp_plugin  en-US   jar:chrome/openerp_plugin.jar!/locale/en-US/
+skin   openerp_plugin  classic/1.0 jar:chrome/openerp_plugin.jar!/skin/
+#style chrome://global/content/customizeToolbar.xul    chrome://openerp_plugin/skin/overlay.css
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin.jar b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin.jar
new file mode 100644 (file)
index 0000000..26bdfe9
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin.jar differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/address.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/address.xul
new file mode 100644 (file)
index 0000000..2d6f0e2
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/address.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml"
+       title="&title.label;" onload="myPrefObserver.createContactAddress()" height="380" width="800">
+
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+
+<tabpanel id="contact">
+  <groupbox id="contact">
+     <hbox>
+        <label  align="right" id="emailid"  value="&emailid.value;" width="94" />
+                <textbox id="txtemail" width="268" align="right"/>
+         <spacer width="5"/>
+          <button label="&create.label;" accesskey="r" image="&imagecreate.value;" oncommand="Create.onMenuItemCommand(event);"/>
+         <button label="&bsearch.label;" oncommand="searchContactdetail();" image="&imagesearch.value;"/>
+       </hbox>
+       <hbox>
+        <label  align="right" id="name"  value="&name.value;" width="80" />
+               <textbox id="txtname" align="right" width="270" readonly="true"/>
+        <spacer width="5"/>
+         <button label="New Partner" image="&imagecreate.value;" oncommand="CreatePartner.onMenuItemCommand(event);" width="133"/>
+       </hbox>
+   </groupbox>
+</tabpanel>
+
+<tabpanel id="address">
+  <groupbox id="address">
+    <hbox>
+        <caption label="&postaladdress.value;" />
+        <spacer width="300"/>
+     <vbox>
+        <caption label="&communication.value;" />
+     </vbox>
+    </hbox>
+
+     <hbox>
+        <label  align="right" id="contactname"  value="&contactname.value;" width="80" />
+               <textbox id="txtcontactname" align="right" width="270" />
+        <spacer width="33"/>
+        <vbox>
+             <label  align="right" id="office"  value="&office.value;" width="50" />
+        </vbox>
+        <vbox>
+               <textbox id="txtoffice" />
+        </vbox>
+       </hbox>
+    
+    <hbox>
+        <label  align="right" id="street"  value="&street.value;" width="97" />
+               <textbox id="txtstreet" width="270"/>
+        <spacer width="33"/>
+        <vbox>
+        <label  align="right" id="mobile"  value="&mobile.value;" width="50" />
+        </vbox>
+        <vbox>
+               <textbox id="txtmobile"/>
+        </vbox>
+       </hbox>
+    <hbox>
+        <label  align="right" id="street2"  value="&street2.value;" width="97" />
+               <textbox id="txtstreet2" width="270"/>
+        <spacer width="35"/>
+        <vbox>
+        <label  align="right" id="fax"  value="&fax.value;" width="48" />
+        </vbox>
+        <vbox>
+               <textbox id="txtfax" />
+        </vbox>
+       </hbox>
+
+     <hbox>
+        <label  align="right" id="zip"  value="&zip.value;" width="97" />
+               <textbox id="txtzip" />
+        <spacer width="115"/>
+       </hbox>
+    <hbox>
+        <label  align="right" id="city"  value="&city.value;" width="97" />
+               <textbox id="txtcity" />
+    </hbox>
+
+    <hbox>
+         <label  align="right" id="countryname"  value="&country.value;" width="97" />
+         <menulist id="country" width="190">
+           <menupopup>
+            <menuitem label="" value=""/>
+           </menupopup>
+         </menulist>
+       </hbox>
+
+     <hbox>
+         <label  align="right" id="statename"  value="&state.value;" width="97" />
+         <menulist id="state" width="190">
+           <menupopup>
+            <menuitem label="" value=""/>
+           </menupopup>
+         </menulist>
+       </hbox>
+</groupbox>
+</tabpanel>
+
+<description></description>
+
+<hbox>
+  <spacer width="600"/>
+    <button label="&cancel.label;" image="&imagecancel.value;" oncommand="close();" />
+    <button label="&ok.label;" image="&imageok.value;" oncommand="UpdateContact();"/>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config.js b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config.js
new file mode 100755 (executable)
index 0000000..5757897
--- /dev/null
@@ -0,0 +1,163 @@
+
+function config_close()
+{
+       //window.close("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+    //ksa
+   window.close("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+       window.open("chrome://openerp_plugin/content/config.xul", "", "chrome");
+}
+
+//set the value of the configuration fields
+function config_change_load()
+{
+       var s = getServer();
+       var a =s.split(':');
+       if (String(a)=="" || String(a)=="undefined"){
+               document.getElementById('txtcurl').value = "localhost"
+               document.getElementById('txtcport').value = "8069"
+       }
+       else
+       {
+               len = a[1];
+               var url = "";
+               for (i=0;i<len.length;i++)
+               {       if (len[i] == "/")
+                       {
+                               continue
+                       }
+                       url += len[i]
+               }
+               if (String(url) == "" || String(url) == "undefined"){
+                       document.getElementById('txtcurl').value = "localhost"
+               }
+               else
+               {
+                       document.getElementById('txtcurl').value = url
+               }
+
+               if (String(a[2]) == "" || String(a[2]) == "undefined"){
+                       document.getElementById('txtcport').value = "8069"
+                       setPort("8069");
+               }
+               else
+               {
+                       document.getElementById('txtcport').value = a[2]
+                       setPort(a[2]);
+               }
+
+       }
+}
+function config_ok()
+{
+       if (document.getElementById('txtcurl').value == '')
+       {
+        alert("You Must Enter Server Name!")
+               return false;
+      
+       }
+       if (document.getElementById('txtcport').value == '')
+       {
+               alert("You Must Enter Port!")
+               return false;
+       }
+       setServer("http://"+document.getElementById('txtcurl').value +":" + document.getElementById('txtcport').value);
+       window.close("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+    //ksa
+    window.open("chrome://openerp_plugin/content/config.xul", "", "chrome");
+}
+function openConfigChange()
+{
+       //window.open("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+    //ksa
+    window.close("chrome://openerp_plugin/content/config.xul", "", "chrome");
+    window.open("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+}
+
+function appendDbList()
+{
+       setServerService('xmlrpc/db');
+       getDbList('DBlist');
+}
+
+//set the database list in the listbox in configuration window
+function setDb()
+{
+       var cmbDbList = document.getElementById('listDBListBox');
+       document.getElementById('DBlist').value = cmbDbList.getItemAtIndex(cmbDbList.selectedIndex).value;
+}
+
+//stores the value of configuration fields in preferences
+function okClick()
+{
+       if (getDBList()=="false")
+       {
+               if (document.getElementById('DBlist_text').value =='')
+               {
+                       alert("You Must Enter Database Name");
+                       return false;
+               }
+               setDbName(document.getElementById('DBlist_text').value);
+       }
+       else if(document.getElementById('DBlist') != null)
+       {
+               setDbName(document.getElementById('DBlist').value);
+       }
+       setServer(document.getElementById('txturl').value);
+       var s = document.getElementById('txturl').value;
+       var a =s.split(':');
+       setPort(a[a.length-1]);
+       setUsername(document.getElementById('txtusername').value);
+       setPassword(document.getElementById('txtpassword').value);
+       window.close();
+}
+
+//deletes the value of the selected value in the listbox in configuraton menu
+function deleteDocument(){
+       if(document.getElementById("listObjectListBox").selectedItem){
+               var objectlist = getPref().getCharPref("object").split(',');
+               var imagelist = getPref().getCharPref("imagename").split(',');
+               var objlist = getPref().getCharPref("listobject").split(',');
+               if(objectlist.length>0){
+                       var objectcharpref = '';
+                       var imagecharpref = '';
+                       var objcharpref = '';
+                       var nodelist = document.getElementById("listObjectListBox").selectedItem.childNodes
+                       var childnode = document.getElementById("listObjectListBox").childNodes
+                       for(i=2;i<childnode.length;i++){
+                               if(childnode[i].hasChildNodes){
+                                       var secondchild = childnode[i].childNodes;
+                                       if (secondchild[1].getAttribute("label") != nodelist[1].getAttribute("label")){
+                                               objcharpref += secondchild[0].getAttribute("label")+',';
+                                               objectcharpref += secondchild[1].getAttribute("label")+',';
+                                               imagecharpref += secondchild[2].getAttribute("image")+',';
+                                       }
+                               }
+                       }
+                       var demo3 = objectcharpref.substring(0,objectcharpref.length-1);
+                       var demo4 = imagecharpref.substring(0,imagecharpref.length-1);
+                       var demo5 = objcharpref.substring(0,objcharpref.length-1);
+
+                       getPref().setCharPref("listobject",demo5);
+                       getPref().setCharPref("object",demo3);
+                       getPref().setCharPref("imagename",demo4);
+               }
+               document.getElementById("listObjectListBox").removeItemAt(document.getElementById("listObjectListBox").selectedIndex)
+       }
+       else{
+               alert("No Document Selected");
+       }
+}
+
+//function to add the image file for the checkbox
+function addFile(){
+       var nsIFilePicker = Components.interfaces.nsIFilePicker;
+       var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
+       fp.init(this, "Select a File", nsIFilePicker.modeOpen);
+       fp.appendFilters(nsIFilePicker.filterImages);
+       var res = fp.show();
+       if (res == nsIFilePicker.returnOK){
+         var thefile = fp.file;
+         document.getElementById("txtimagename").value = thefile.path
+       }
+}
+
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config.xul
new file mode 100755 (executable)
index 0000000..348ef92
--- /dev/null
@@ -0,0 +1,113 @@
+<?xml version="1.0"?>\r
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>\r
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/config.dtd">\r
+\r
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\r
+       xmlns:html="http://www.w3.org/1999/xhtml"\r
+       title="&title.label;" onload="myPrefObserver.register();"  unload="myPrefObserver.unregister()" height="410" width="900">\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>\r
+<tabbox>\r
+  <tabs>\r
+    <tab label="Configuration Settings"/>\r
+    <tab label="Document Settings"/>\r
+    <tab label="About"/>\r
+  </tabs>\r
+  <tabpanels>\r
+    <tabpanel id="configtab">\r
+       <vbox >\r
+               <groupbox id="gpConnection" width="770" height="300" align ="center" >\r
+                         <caption label="&gpConnection.label;"/>\r
+                               <hbox>\r
+                                       <label  align="right" id="url"  value="&txturl.label;" width="80" />\r
+                                       <textbox id="txturl" width="200" readonly="true" />\r
+                                       <button label="&getdblist.label;" oncommand="openConfigChange();" image="&imagesearch.value;" width="90"/>\r
+                               </hbox>\r
+                               <hbox align="center" id="database_option">\r
+                               </hbox>\r
+                               <hbox id="first">\r
+                                       <label align="right" id="lbldb_list1" control="DBlist" value="&database.label;" width="80"/> 
+                                       <textbox id="DBlist_text" width="300"/>\r
+                               </hbox>\r
+\r
+                               <hbox >\r
+                                       <label align="right"  control="txtusername" value="&username.label;" width="80"/>\r
+                                       <textbox id="txtusername" width="300"/>\r
+                               </hbox>\r
+                               <hbox>\r
+                                       <label align="right" control="txtpassword" value="&password.label;" width="80"/>\r
+                                       <textbox id="txtpassword" type="password" width="300"/>\r
+                               </hbox>\r
+                               <hbox >\r
+                                       <spacer width="290"/>\r
+                                       <button align="center" id="btconnection" label="&connection.label;" oncommand="testConnection();" image="&imageok.value;" width="100"/>\r
+                               </hbox>\r
+                       </groupbox>\r
+               </vbox>\r
+    </tabpanel>\r
+    <tabpanel id="objecttab">\r
+               <groupbox id="gpObject" width="700" >\r
+               <caption label="&listDocument.header;"/>\r
+                       <hbox>\r
+                               <vbox>\r
+                                       <hbox>\r
+                                               <label control="txtobject" value="Title : " />\r
+                                               <textbox id="txtobj" width="100"/>\r
+                                               <label control="txtobject" value="&document.label;"/>\r
+                                               <textbox id="txtobject" width="100"/>\r
+                                               <label control="txtimagename" value="&image.label;"/>\r
+                                               <textbox id="txtimagename" width="100" readonly="true" />\r
+                                               <button id="btaddfile" label="&addfile.label;" oncommand="addFile();" image="&imagemoveleft.value;"/>\r
+                               \r
+                                               <button id="btobjectcreate" label="&documentcreate.label;" oncommand="searchDocument();" image="&imagemovedown.value;"/>\r
+                        <button id="btobjectdelete" label="&documentdelete.label;" oncommand="deleteDocument();" image="&imagecancel.value;"/>\r
+                                       </hbox>\r
+                                       \r
+                                       <listbox id="listObjectListBox" flex="1" rows="10">\r
+                                       <listhead>\r
+                                               <listheader label="Title"/>\r
+                                               <listheader label="&listDocumentListBox.header;"/>\r
+                                               <listheader label="Image"/>\r
+                                       </listhead>\r
+                                       <listcols>\r
+                                               <listcol flex="1"/>\r
+                                               <listcol flex="2"/>\r
+                                               <listcol flex="3"/>\r
+                                       </listcols>\r
+                                   </listbox>\r
+                               </vbox>\r
+                               <vbox>\r
+                                       <description>       </description>\r
+                               </vbox>\r
+                       </hbox>\r
+               </groupbox>\r
+    </tabpanel>\r
+    <tabpanel id="abouttab">\r
+               <groupbox id="gpAbout" width="770" align="center">\r
+                       <caption label="&gpAbout.label;"/>\r
+                       <image src="chrome://openerp_plugin/skin/developped_by.png" sizemode="stretch" align="center"/>\r
+                       <description> </description>\r
+                       <description> </description>\r
+                       <description>&develop.value;</description>\r
+                       <description> </description>\r
+                       <description> </description>\r
+                       <description>&information.value;</description>\r
+                       <description><html:a href="&openerp.value;">&openerp.value;</html:a></description>\r
+                       <description><html:a href="&axelor.value;">&axelor.value;</html:a></description>\r
+                       <description><html:a href="&tinyerp.value;">&tinyerp.value;</html:a></description>\r
+                       <description> </description>\r
+                       <description> </description>\r
+                       <description>Copyright © 2006-TODAY OpenERP SA All Rights Reserved.</description>\r
+                       <description>OpenERP is a trademark of the OpenERP SA Company. OpenERP Web is jointly developed by OpenERP SA and Axelor.</description>\r
+                       <description>Licenced under the terms of <html:a href="https://tiny.odoo.com/LICENSE.txt"> OpenERP Public License (OEPL) v1.1 (https://tiny.odoo.com/LICENSE.txt)</html:a> </description>\r
+               </groupbox>\r
+    </tabpanel>\r
+  </tabpanels>\r
+</tabbox>\r
+<hbox align="center">\r
+       <spacer width="800"/>\r
+       <button label="&close.label;" oncommand="close();" image="&imagecancel.value;"/>\r
+</hbox>\r
+</window>\r
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config_change.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/config_change.xul
new file mode 100644 (file)
index 0000000..1e23652
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/config_change.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml"  onload="config_change_load()"
+       title="Openerp Connection" height="140" width="280">
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+       <hbox>
+    <spacer width="70"/>
+       <description>Openerp Connection</description>
+    </hbox>
+<groupbox id="gpData" width="200">
+       <hbox >
+               <label id="lblurl" control="txtcurl" value="&lblurl.label;" width="80"/>
+               <textbox id="txtcurl" width="100" />
+       </hbox>
+       <hbox>  
+               <label id="lblport" control="txtcport" value="&lblport.label;" width="80"/>
+               <textbox id="txtcport" width="100" />
+       </hbox>
+    
+</groupbox>
+<hbox align="right">
+       <spacer width="50"/>
+  <button label="Cancel" image="&imagecancel.value;" oncommand="config_close();" />
+  <button label="OK" image="&imageok.value;" oncommand="config_ok()"/>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/create.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/create.xul
new file mode 100644 (file)
index 0000000..d3d551d
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/create.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml"
+       title="&title.label;" onload="myPrefObserver.createContact()" height="350" width="780">
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+<tabpanel id="contact">
+  <groupbox id="contact">
+    <hbox>
+        <label  align="right" id="partner"  value="&selectpartner.value;" width="97" />
+               <textbox id="txtselectpartner" readonly="true" value="" width="270"/>
+               <button label="&bsearch.label;" oncommand="Select.onMenuItemCommand(event);" image="&imagesearch.value;"/>
+       </hbox>
+       <hbox>
+        <label  align="right" id="name"  value="&name.value;" width="80" />
+               <textbox id="txtname" align="right" width="270"/>
+       </hbox>
+    </groupbox>
+    </tabpanel>    
+
+ <tabpanel id="address">
+  <groupbox id="address">
+    <hbox>
+        <caption label="&postaladdress.value;" />
+        <spacer width="300"/>
+     <vbox>
+        <caption label="&communication.value;" />
+     </vbox>
+    </hbox>
+
+     <hbox>
+        <label  align="right" id="street"  value="&street.value;" width="97" />
+               <textbox id="txtstreet" width="270"/>
+        <spacer width="33"/>
+         <vbox>
+             <label  align="right" id="office"  value="&office.value;" width="50" />
+        </vbox>
+        <vbox>
+               <textbox id="txtoffice" />
+        </vbox>
+       </hbox>
+
+     <hbox>
+        <label  align="right" id="street2"  value="&street2.value;" width="97" />
+               <textbox id="txtstreet2" width="270"/>
+        <spacer width="35"/>
+        <vbox>
+        <label  align="right" id="fax"  value="&fax.value;" width="48" />
+        </vbox>
+        <vbox>
+               <textbox id="txtfax" />
+        </vbox>
+       </hbox>
+   <hbox>
+        <label  align="right" id="zip"  value="&zip.value;" width="97" />
+               <textbox id="txtzip" />
+        <spacer width="114"/>
+        <vbox>
+        <label  align="right" id="mobile"  value="&mobile.value;" width="48" />
+        </vbox>
+        <vbox>
+               <textbox id="txtmobile"/>
+        </vbox>
+       </hbox>
+
+     <hbox>
+        <label  align="right" id="city"  value="&city.value;" width="97"/>
+               <textbox id="txtcity" />
+        <spacer width="112"/>
+        <vbox>
+          <label  align="right" id="emailid"  value="&email.value;" width="50" />
+        </vbox>
+        <vbox>
+               <textbox id="txtemail" width="260" />
+        </vbox>
+       </hbox>
+    <hbox>
+         <label  align="right" id="countryname"  value="&country.value;" width="97" />
+         <menulist id="country" width="190">
+           <menupopup>
+            <menuitem label="" value=""/>
+           </menupopup>
+         </menulist>
+       </hbox>
+
+     <hbox>
+         <label  align="right" id="statename"  value="&state.value;" width="97" />
+         <menulist id="state" width="190">
+           <menupopup>
+            <menuitem label="" value=""/>
+           </menupopup>
+         </menulist>
+       </hbox>
+</groupbox>
+</tabpanel>
+<description></description>
+<hbox>
+  <spacer width="580"/>
+  <button label="&cancel.label;" image="&imagecancel.value;" oncommand="close();" />
+  <button label="&ok.label;" image="&imageok.value;" oncommand="createContact();"/>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/createpartner.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/createpartner.xul
new file mode 100644 (file)
index 0000000..abc23a5
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/createpartner.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml"
+       title="&title.label;" height="100" width="325">
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+<groupbox id="gpData">
+       <hbox>
+               <description>&name.value;</description>
+               <spacer width="50"/>
+               <textbox id="txtname" align="right" />
+       </hbox>
+</groupbox>
+<description></description>
+<hbox>
+  <spacer width="140"/>
+  <button label="&cancel.label;" image="&imagecancel.value;" oncommand="close();" />
+  <button label="&ok.label;" image="&imageok.value;" oncommand="createPartner();"/>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/exportTools.js b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/exportTools.js
new file mode 100644 (file)
index 0000000..7da3701
--- /dev/null
@@ -0,0 +1,248 @@
+
+var MBstrBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].
+                       getService(Components.interfaces.nsIStringBundleService);
+var mboximportbundle = MBstrBundleService.createBundle("chrome://openerp_plugin/locale/mboximport.properties"); 
+
+
+function saveMsgAsEML(msguri,file,append,uriArray,hdrArray,fileArray) {
+       
+    var myEMLlistner = {
+          
+               scriptStream : null,
+               emailtext : "",
+
+        QueryInterface : function(iid)  {
+                if (iid.equals(Components.interfaces.nsIStreamListener) ||   
+                    iid.equals(Components.interfaces.nsIMsgHeaderSink) ||
+                    iid.equals(Components.interfaces.nsISupports))
+                 return this;
+        
+                throw Components.results.NS_NOINTERFACE;
+                return 0;
+        },
+        
+        onStartRequest : function (aRequest, aContext) { 
+                       this.scriptStream = Components.classes['@mozilla.org/binaryinputstream;1'].createInstance(Components.interfaces.nsIBinaryInputStream);
+        },
+            
+        onStopRequest : function (aRequest, aContext, aStatusCode) {
+                       this.scriptStream = null;
+                                               
+                       if (append) {
+                               if (this.emailtext != "") {
+                                       var data = this.emailtext + "\n";
+                                       // Some Imap servers don't add to the message the "From" prologue
+                                       if (data && ! data.match(/^From/)) {
+                                               var now = new Date;
+                                               var prologue = "From - " + now.toString() + "\n";
+                                               data = prologue+data;
+                                       }
+                                       data = IETescapeBeginningFrom(data);
+                               }
+                               var fileClone = file.clone();
+                               IETwriteDataOnDisk(fileClone,data,true,this.sub,null);
+                       }
+                       else {
+                               if (! hdrArray)
+                                       var sub = getSubjectForHdr(hdr);
+                               else {
+                                       var parts = hdrArray[IETexported].split("§][§^^§");
+                                       var sub = parts[4];
+                               }
+                       
+                               var data = this.emailtext.replace(/^From.+\r?\n]/, "");
+                               data = IETescapeBeginningFrom(data);
+                               var clone = file.clone();
+                               // The name is taken from the subject "corrected"
+                               clone.append(sub+".eml");
+                               clone.createUnique(0,0644);
+                               var time = (hdr.dateInSeconds)*1000;
+                               IETwriteDataOnDisk(clone,data,false,null,time);
+                       }
+                       IETexported = IETexported + 1;
+                       IETwritestatus(mboximportbundle.GetStringFromName("exported")+" "+IETexported+" "+mboximportbundle.GetStringFromName("msgs")+" "+IETtotal);
+                       
+                       if (IETexported < IETtotal) {
+                               if (fileArray) {
+                                       var nextUri = uriArray[IETexported];
+                                       var nextFile = fileArray[IETexported];
+                               }
+                               else if (! hdrArray) {
+                                       var nextUri = uriArray[IETexported];
+                                       var nextFile = file;
+                               }
+                               else {
+                                       parts = hdrArray[IETexported].split("§][§^^§");
+                                       var nextUri = parts[5];
+                                       var nextFile = file;
+                               }
+                               saveMsgAsEML(nextUri,nextFile,append,uriArray,hdrArray,fileArray);
+                       }
+                       else {
+                               IETexported = 0;
+                               IETtotal = 0;
+                       }
+               },
+            
+        onDataAvailable : function (aRequest, aContext, aInputStream, aOffset, aCount) {
+                       this.scriptStream.setInputStream(aInputStream);
+                       var chunk = this.scriptStream.readBytes(aCount);
+               this.emailtext += chunk;
+            }        
+        };
+       var mms = messenger.messageServiceFromURI(msguri).QueryInterface(Components.interfaces.nsIMsgMessageService);
+       var hdr = mms.messageURIToMsgHdr(msguri);
+       mms.streamMessage(msguri, myEMLlistner, msgWindow, null, false, null);
+}
+
+
+function nametoascii(str) {
+       if (! gPrefBranch.getBoolPref("mboximport.export.filenames_toascii")) {
+               str = str.replace(/[\x00-\x19]/g,"_");
+               return str.replace(/[\/\\:,<>*\?\"\|]/g,"_");
+       }
+       if (str)
+               str = str.replace(/[^a-zA-Z0-9]/g,"_");
+       else
+               str = "Undefinied_or_empty";
+       return str;
+}
+
+
+function  IETwriteDataOnDisk(file,data,append,name,time) {
+       var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
+               .createInstance(Components.interfaces.nsIFileOutputStream);
+       if (append) {
+               file.append(name);
+               foStream.init(file, 0x02 | 0x08 | 0x10, 0664, 0); // write,  create, append
+       }
+       else 
+               foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
+       if (data)
+               foStream.write(data,data.length);
+       foStream.close();
+       var prefs = Components.classes["@mozilla.org/preferences-service;1"]
+               .getService(Components.interfaces.nsIPrefBranch);
+       if (time && prefs.getBoolPref("mboximport.export.set_filetime"))
+               file.lastModifiedTime = time;
+}
+
+
+
+function IETescapeBeginningFrom(data) {
+       // Workaround to fix the "From " in beginning line problem in body messages
+       // See https://bugzilla.mozilla.org/show_bug.cgi?id=119441 and
+       // https://bugzilla.mozilla.org/show_bug.cgi?id=194382
+       // TB2 has uncorrect beahviour with html messages
+       // This is not very fine, but I didnt' find anything better...
+       var datacorrected = data.replace(/\nFrom /g, "\n From ");
+       return datacorrected;
+}
+
+
+function getPredefinedFolder(type) {
+       var prefs = Components.classes["@mozilla.org/preferences-service;1"]
+               .getService(Components.interfaces.nsIPrefBranch);
+       // type 0 = folder
+       // type 1 = all messages
+       // type 2 = selected messages
+
+       var use_dir = "mboximport.exportMSG.use_dir";
+
+       var dir_path="";
+       if(navigator.userAgent.indexOf('Linux')!= -1){
+               dir_path ="/tmp"
+       }
+       else if(navigator.userAgent.indexOf('Win')!= -1){
+               dir_path ="C:\\"
+       }
+       else if(navigator.userAgent.indexOf('Mac OS X')!= -1){ 
+               dir_path ="/tmp"
+       } 
+       try {
+               var localFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+               localFile.initWithPath(dir_path);
+               return localFile;
+
+       }
+       catch(e) {
+               return null;
+       }
+}
+
+function getSubjectForHdr(hdr) {
+       var emlNameType = gPrefBranch.getIntPref("mboximport.exportEML.filename_format");       
+       var mustcorrectname = gPrefBranch.getBoolPref("mboximport.export.filenames_toascii");
+       var subMaxLen = gPrefBranch.getIntPref("mboximport.subject.max_length")-1;
+       if (hdr.mime2DecodedSubject)
+
+               var subj = hdr.mime2DecodedSubject.substring(0, subMaxLen);
+       else
+               var subj =IETnosub;
+       subj = nametoascii(subj);
+       var dateInSec = hdr.dateInSeconds;
+       var msgDate8601string = dateInSecondsTo8601(dateInSec);
+       var key = hdr.messageKey;
+       if (emlNameType == 2) {
+               var pattern = gPrefBranch.getCharPref("mboximport.export.filename_pattern");
+               pattern = pattern.replace("%s",subj);
+       pattern = pattern.replace("%k",key);
+               pattern = pattern.replace("%d", msgDate8601string);
+               pattern = pattern.replace(/-%e/g, "");
+               pattern = pattern.replace(/[\x00-\x19]/g,"_");
+               var fname = pattern;
+       }
+       else {
+
+               var fname = msgDate8601string+"-"+subj+"-"+hdr.messageKey;
+       }
+       setFileName(fname)
+       fname = fname.replace(/[\x00-\x19]/g,"_");
+       if (mustcorrectname)
+               fname = nametoascii(fname);
+       else
+               fname = fname.replace(/[\/\\:,<>*\?\"\|]/g,"_");
+       return fname;
+}
+
+function dateInSecondsTo8601(secs) {
+       var addTime = gPrefBranch.getBoolPref("mboximport.export.filenames_addtime");
+       var msgDate = new Date(secs*1000);
+       var msgDate8601 = msgDate.getFullYear();
+       if (msgDate.getMonth() < 9)
+               var month = "0"+(msgDate.getMonth()+1);
+       else
+               var month = msgDate.getMonth()+1;
+       if (msgDate.getDate() < 10)
+               var day = "0"+ msgDate.getDate();
+       else
+               var day = msgDate.getDate();
+       var msgDate8601string = msgDate8601.toString()+month.toString()+day.toString();
+       if (addTime &&  gPrefBranch.getIntPref("mboximport.exportEML.filename_format") == 2) {
+               if (msgDate.getHours() < 10)
+                       var hours = "0"+msgDate.getHours();
+               else
+                       var hours = msgDate.getHours();
+               if (msgDate.getMinutes() < 10)
+                       var min = "0"+msgDate.getMinutes();
+               else
+                       var min = msgDate.getMinutes();
+               msgDate8601string += "-"+ hours.toString() + min.toString();
+       }
+       return msgDate8601string;
+}
+
+function IETwritestatus(text) {
+       document.getElementById("statusText").setAttribute("label", text);
+       var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
+       var delay = prefs.getIntPref("mboximport.delay.clean_statusbar");
+       if (delay > 0)
+               window.setTimeout(function(){IETdeletestatus(text);}, delay);
+}
+
+function IETdeletestatus(text) {
+       if (document.getElementById("statusText").getAttribute("label") == text)
+               document.getElementById("statusText").setAttribute("label", "");
+}
+
+
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/loaddata.js b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/loaddata.js
new file mode 100755 (executable)
index 0000000..8a3b226
--- /dev/null
@@ -0,0 +1,134 @@
+//gives the preference branch instance
+var preferenceBranch = getPref();
+
+//returns the selected checkbox for searching
+function getnamesearch()
+{
+       var checkboxlist = [];
+       var j=0;
+       var objectlist = preferenceBranch.getCharPref("object").split(',');
+       if (objectlist[0]!=''){
+               for (var i=1;i<=objectlist.length;i++)
+               {
+                       if(document.getElementById('cbx'+i) && document.getElementById('cbx'+i).checked == true)
+                       {
+                               checkboxlist[j] = objectlist[i-1] //document.getElementById('cbx'+i).label;
+                               j++;
+                       }
+               }
+       }
+       return checkboxlist;
+}
+//function to set the text value for the selected partner for contact creation
+function selectPartner(){
+       if(document.getElementById('listPartnerBox').selectedItem){
+               var listselectedItem = document.getElementById('listPartnerBox').selectedItem;
+               var value = listselectedItem.firstChild.getAttribute('label');
+               setPartnerId(listselectedItem.value);
+               document.getElementById('txtselectpartner').setAttribute('value',value);
+               window.opener.document.getElementById('txtselectpartner').setAttribute('value',value);
+               }
+       else{
+               window.opener.document.getElementById('txtselectpartner').setAttribute('value','');
+       }
+}
+
+//function for the intialization procedure //used while loading and unloading of the window
+var myPrefObserver =
+{
+       //set the intial value of the email for the text field in plugin window and also loads the listbox of objects with image
+       loaddata: function()
+       {       
+               setTimeout("listSearchDocumentAttachment()", 0)
+       },
+
+       //set the initial value of name and email field of create contact window
+       createContact: function()
+       {
+        document.getElementById("txtname").value = getSenderName();
+        document.getElementById("txtemail").value = getSenderEmail();
+        document.getElementById("country").value = getAllCountry();
+        document.getElementById("state").value = getAllState();
+        setPartnerId(0);
+       },
+
+       //sets the value of email information in preferences and adds observer for the window
+       register: function()
+       {
+           appendDbList()
+           preferenceBranch.addObserver("", myPrefObserver, false);
+           document.getElementById("txturl").value = getServer();
+           var s = document.getElementById('txturl').value;
+           var a =s.split(':');
+           setPort(a[a.length-1]);
+           document.getElementById("txtusername").value = getUsername();
+           document.getElementById("txtpassword").value = getPassword();
+           document.getElementById("DBlist_text").value = getDbName();
+               if(getPref().getCharPref("object") != ''){
+               var objectlist = getPref().getCharPref("object").split(',');
+               var imagelist = getPref().getCharPref("imagename").split(',');
+               var obj = getPref().getCharPref("listobject").split(',');
+                       if(objectlist.length>0){
+                               for(i=0;i<objectlist.length;i++){
+                                       var     listItem = document.createElement("listitem");
+                                       var listcell1 = document.createElement("listcell");
+                                       var listcell2 = document.createElement("listcell");
+                                       var listcell3 = document.createElement("listcell");
+                                       listcell1.setAttribute("label",obj[i]);
+                                       listcell2.setAttribute("label",objectlist[i]);
+                                       listcell3.setAttribute("image",imagelist[i]);
+                                       listcell3.setAttribute("class","listcell-iconic")
+                                       listcell3.setAttribute("width",16)
+                                       listcell3.setAttribute("height",16)
+                                       listItem.appendChild(listcell1);
+                                       listItem.appendChild(listcell2);
+                                       listItem.appendChild(listcell3);
+                                       document.getElementById("listObjectListBox").appendChild(listItem);
+                   
+                               }
+                       }
+               }
+    },
+
+    createContactAddress: function()
+       {
+               document.getElementById("txtname").value = getPartnerName();
+        document.getElementById("txtcontactname").value = getSenderName();
+        document.getElementById("txtstreet").value = getStreet();
+        document.getElementById("txtstreet2").value = getStreet2();
+        document.getElementById("txtzip").value = getZipCode();
+        document.getElementById("txtcity").value = getCity();
+        document.getElementById("txtoffice").value = getOfficenumber();
+        document.getElementById("txtfax").value = getFax();
+        document.getElementById("txtmobile").value = getMobilenumber();
+           document.getElementById("txtemail").value = getSenderEmail();
+        document.getElementById("country").value =getAllCountry();
+        document.getElementById("state").value = getAllState();
+       },
+
+       //unregistering the window observer
+       unregister: function()
+       {
+               if(!preferenceBranch) return;
+           preferenceBranch.removeObserver("", myPrefObserver);
+       },
+
+       observe: function(aSubject, aTopic, aData)
+       {
+       if(aTopic != "nsPref:changed") return;
+       // aSubject is the nsIPrefBranch we're observing (after appropriate QI)
+       // aData is the name of the pref that's been changed (relative to aSubject)
+       switch (aData) {
+               case "serverport":
+               break;
+       case "serverurl":
+               break;
+       case "serverdbname":
+               break;
+       }
+       },
+}
+
+function runMoreCode() 
+{
+} 
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.js b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.js
new file mode 100755 (executable)
index 0000000..75a4b67
--- /dev/null
@@ -0,0 +1,315 @@
+//global array creation and declaration\r
+var contentType = new Array();\r
+var uri = new Array();\r
+var url = new Array();\r
+var name = new Array();\r
+var test = new Array();\r
+\r
+var MBstrBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].\r
+                       getService(Components.interfaces.nsIStringBundleService);\r
+var mboximportbundle = MBstrBundleService.createBundle("chrome://mboximport/locale/mboximport.properties"); \r
+//function to get the required details of the selected email\r
+\r
+function searchmail()\r
+{      \r
+       setTimeout("createConnection()",5000)\r
+       if (getconnect_server() == "false")\r
+       {\r
+               alert("Please Login To The Database First !")\r
+               return false;\r
+       }\r
+       setTimeout("module_install()", 10000)\r
+       if (getmodule_install() == "no")\r
+       {\r
+               alert("Please install the thunderbird module on your '" + getDbName() +"' database Or try again !");\r
+               return false\r
+       }\r
+       var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);\r
+       var version_obj = prefService.getBranch("extensions.");\r
+       version_obj.QueryInterface(Components.interfaces.nsIPrefBranch2);\r
+       version = version_obj.getCharPref("lastAppVersion");\r
+       version = parseInt(version[0])\r
+       \r
+       file = getPredefinedFolder(2);\r
+       \r
+       if (version > 2)\r
+       {\r
+               var emlsArray = gFolderDisplay.selectedMessages;\r
+       }\r
+       else\r
+       {\r
+               var emlsArray = GetSelectedMessages();\r
+       }\r
+\r
+       IETtotal = emlsArray.length;\r
+       IETexported = 0;\r
+       var msguri = emlsArray[0];\r
+\r
+       if(GetNumSelectedMessages() < 1 || GetNumSelectedMessages() > 1){\r
+               alert("You must select only one mail to archive");\r
+               return false\r
+       }\r
+\r
+       //gives the selected email uri\r
+       var messageUri= gDBView.URIForFirstSelectedMessage;\r
+\r
+       var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);\r
+\r
+       //gives the selected email object\r
+       var message = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);\r
+\r
+\r
+       if (version > 2)\r
+       {\r
+               m_uri = message.folder.getUriForMsg(message);\r
+               saveMsgAsEML(m_uri,file,false,emlsArray,null);\r
+       }\r
+       else\r
+       {\r
+               saveMsgAsEML(msguri,file,false,emlsArray,null);\r
+       }\r
+\r
+       //gives the received email date\r
+       var stdate = new Date(message.date / 1000);\r
+\r
+       //functionality to split the author name and email\r
+       if(message.author.charAt(0) == '"'){\r
+               sendername = message.author.split('"')[1].split('"')[0];\r
+       }\r
+       else if(message.author.indexOf('<')!=-1){\r
+               sendername = message.author.split('<')[0];\r
+       }\r
+       else{\r
+               sendername = message.author;\r
+       }\r
+       if(message.author.indexOf('<')!=-1){\r
+               senderemail = message.author.split('<')[1].split('>')[0];
+       }\r
+       else{\r
+               senderemail = message.author
+       }\r
+\r
+       //gives the receiver email address\r
+       receiveremail = message.mime2DecodedRecipients;\r
+\r
+       //parsing the received date in the particular format\r
+       receivedDate = stdate.getFullYear()+'/'+(stdate.getMonth()+1)+'/'+stdate.getDate();\r
+\r
+       //gives the selected email subject\r
+       subject = message.subject;\r
+\r
+       //gives the selected email cclist\r
+       cclist = message.ccList;\r
+\r
+       //gives the selected email message body in text format\r
+       if (version > 2)\r
+       {\r
+               var listener = Components.classes["@mozilla.org/network/sync-stream-listener;1"].createInstance(Components.interfaces.nsISyncStreamListener);  \r
+               var uri = message.folder.getUriForMsg(message);\r
+               messenger.messageServiceFromURI(uri)  \r
+                   .streamMessage(uri, listener, null, null, false, "");    \r
+               var folder = message.folder;  \r
+               messagebody = folder.getMsgTextFromStream(listener.inputStream,message.Charset,65536,32768,false,true,{})\r
+       }\r
+       else\r
+       {\r
+               messagebody = getMessageBrowser().docShell.contentViewer.DOMDocument.body.textContent;\r
+       }\r
+       //gives the selected email message body in html format\r
+       msghtmlbody = ""// getMessageBrowser().docShell.contentViewer.DOMDocument.body.innerHTML;\r
+\r
+       //set the initial information for the selected email\r
+       setSenderEmail(senderemail);\r
+       setSenderName(sendername);\r
+       setReceiverEmail(receiveremail);\r
+       setSubject(subject);\r
+       setReceivedDate(receivedDate);\r
+       setCCList(cclist);\r
+       setMessageBody(messagebody);\r
+       getPref().setCharPref('displayName','');\r
+       getPref().setCharPref('attachmentdata','');\r
+       name = [];\r
+       test = [];\r
+       getPref().setCharPref('attachmentlength',currentAttachments.length);\r
+       //retrieving the information for the selected email's attachment\r
+       if(currentAttachments.length > 0){\r
+               for(i=0;i<currentAttachments.length;i++){\r
+                       contentType[i] = currentAttachments[i].contentType;\r
+                       uri = currentAttachments[i].uri;\r
+                       url[i] = currentAttachments[i].url;\r
+                       name[i] = currentAttachments[i].displayName;\r
+                       var obj = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
+                       if(navigator.userAgent.indexOf('Linux')!= -1){\r
+                               obj.initWithPath("/tmp/");\r
+                       }\r
+                       else if(navigator.userAgent.indexOf('Win')!= -1){\r
+                               obj.initWithPath("c:\\");\r
+                       }\r
+                       else if(navigator.userAgent.indexOf('Mac OS X')!= -1){ \r
+                               obj.initWithPath("/tmp/");\r
+                       } \r
+                       else{\r
+                               alert("Not Compatible for this Operating System");\r
+                               false();\r
+                       }\r
+                       //saving the attachment files in system's temp folder\r
+                       test[i] = messenger.saveAttachmentToFolder(contentType[i],url[i],name[i],uri,obj);\r
+               }\r
+               //function to read the attachment file contents\r
+               att =getAttachValue()\r
+               if (getmodule_install() == "no")\r
+               {\r
+                       alert("Please install the thunderbird module on your '" + getDbName() +"' database  Or try again !");\r
+                       return false\r
+               }\r
+               window.open("chrome://openerp_plugin/content/plugin.xul", "", "chrome, resizable=yes");\r
+               createInstance(name,test)\r
+\r
+       }\r
+       else\r
+       {\r
+                       if (getmodule_install() == "no")\r
+                       {\r
+                               alert("Please install the thunderbird module on your '" + getDbName() +"' database  Or try again !");\r
+                               return false\r
+                       }\r
+               window.open("chrome://openerp_plugin/content/plugin.xul", "", "chrome, resizable=yes");\r
+       }\r
+}\r
+
+function open_contact()\r
+{      \r
+       setTimeout("createConnection()",5000)\r
+       if (getconnect_server() == "false")\r
+       {\r
+               alert("Please Login To The Database First !")\r
+               return false;\r
+       }\r
+       setTimeout("module_install()", 10000)\r
+       if (getmodule_install() == "no")\r
+       {\r
+               alert("Please install the thunderbird module on your '" + getDbName() +"' database Or try again !");\r
+               return false\r
+       }\r
+       if(GetNumSelectedMessages() < 1 || GetNumSelectedMessages() > 1){\r
+               alert("You must select only one mail For Open Contact Detail");\r
+               return false\r
+       }\r
+\r
+       //gives the selected email uri\r
+       var messageUri= gDBView.URIForFirstSelectedMessage;\r
+\r
+       var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);\r
+\r
+       //gives the selected email object \r
+       var message = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);\r
+\r
+       //functionality to split the author name and email\r
+       if(message.author.charAt(0) == '"'){\r
+               sendername = message.author.split('"')[1].split('"')[0];\r
+       }\r
+       else if(message.author.indexOf('<')!=-1){\r
+               sendername = message.author.split('<')[0];
+       }\r
+       else{\r
+               sendername = message.author;
+       }\r
+       if(message.author.indexOf('<')!=-1){\r
+               senderemail = message.author.split('<')[1].split('>')[0];
+       }\r
+       else{\r
+               senderemail = message.author
+       }\r
+\r
+       //set the initial information for the selected email
+       setSenderEmail(senderemail);
+       setSenderName(sendername);
+    setPartnerName("");
+    setStreet("");
+    setStreet2("");
+    setZipCode("");
+    setCity("");
+    setOfficenumber("");
+    setFax("");
+    setMobilenumber("");
+
+    if (getmodule_install() == "no")\r
+       {\r
+               alert("Please install the thunderbird module on your '" + getDbName() +"' database  Or try again !");\r
+               return false\r
+       }\r
+       window.open("chrome://openerp_plugin/content/address.xul", "", "chrome, resizable=yes");\r
+\r
+}\r
+\r
+//function to open the configuration window\r
+var Config = {\r
+  onLoad: function() {\r
+    // initialization code\r
+    this.initialized = true;\r
+  },\r
+\r
+  onMenuItemCommand: function() {\r
+    window.open("chrome://openerp_plugin/content/config.xul", "", "chrome");\r
+  }\r
+};\r
+window.addEventListener("load", function(e) { Config.onLoad(e); }, false);\r
+\r
+//function to open the plugin window for searching the records for a particular object\r
+var Plugin = {\r
+       onLoad: function() {\r
+       this.initialized = true;\r
+       },\r
+\r
+       onMenuItemCommand: function() {\r
+               window.open("chrome://openerp_plugin/content/plugin.xul", "", "chrome, resizable=yes");\r
+       }\r
+};\r
+window.addEventListener("load", function(e) { Plugin.onLoad(e); }, false);\r
+\r
+//function to open the window for creating a new partner contact\r
+var Create = {\r
+       onLoad: function(){\r
+       this.initialized=true;\r
+       },\r
+\r
+       onMenuItemCommand: function(){\r
+               window.open("chrome://openerp_plugin/content/create.xul", "", "chrome");\r
+       }\r
+};\r
+window.addEventListener("load", function(e) { Create.onLoad(e); }, false);\r
+
+var Address = {\r
+       onLoad: function(){\r
+       this.initialized=true;\r
+       },\r
+\r
+       onMenuItemCommand: function(){
+       open_contact();
+        searchContact();\r
+       }\r
+};\r
+
+\r
+//function to open the window for selecting the partner for a new contact creation\r
+var Select = {\r
+       onLoad: function(){\r
+       this.initialized=true;\r
+       },\r
+\r
+       onMenuItemCommand: function(){\r
+               window.open("chrome://openerp_plugin/content/selectpartner.xul", "", "chrome");\r
+       }\r
+};\r
+\r
+var CreatePartner = {\r
+       onLoad: function(){\r
+       this.initialized=true;\r
+       },\r
+\r
+       onMenuItemCommand: function(){\r
+               window.open("chrome://openerp_plugin/content/createpartner.xul", "", "chrome");\r
+       }\r
+};\r
+window.addEventListener("load", function(e) { CreatePartner.onLoad(e); }, false);\r
+\r
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/overlay.xul
new file mode 100755 (executable)
index 0000000..1956ebe
--- /dev/null
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>\r
+<?xml-stylesheet href="chrome://openerp_plugin/skin/overlay.css" type="text/css"?>\r
+<!DOCTYPE overlay SYSTEM "chrome://openerp_plugin/locale/overlay.dtd">\r
+<overlay id="tiny-overlay"\r
+         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\r
+         xmlns:html="http://www.w3.org/1999/xhtml">\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/exportTools.js"></script>\r
+\r
+<menupopup id="taskPopup">\r
+    <menuitem id="tiny-plugin" label="&tinyplugin;"\r
+          oncommand="Config.onMenuItemCommand(event);"\r
+          image="&menuicon.value;"\r
+          class="menuitem-iconic"\r
+          tooltiptext="&pluginconfig.value;"/>\r
+</menupopup>\r
+\r
+<menupopup id="taskPopup">\r
+    <menuitem id="tiny-plugin1" label="&tinypluginconfig;"\r
+          oncommand="searchmail();"\r
+          image="&menuicon.value;"\r
+          class="menuitem-iconic"\r
+          tooltiptext="&pluginconfigvalue.value;"/>\r
+</menupopup>\r
+\r
+<popup id="threadPaneContext">\r
+       <menuitem id="threadPaneContext-saveAsMultiple"\r
+               insertbefore="threadPaneContext-print"\r
+               class="menuitem-iconic"\r
+               image="&menuicon.value;"\r
+               label="Archive To OpenERP"\r
+               accesskey="T"\r
+               oncommand="searchmail();"/>\r
+</popup>\r
+\r
+<toolbarpalette id="MailToolbarPalette">\r
+       <toolbarbutton id="GA-button"\r
+               class="toolbarbutton-1"\r
+               image="&menuicon.value;"\r
+               label= "Archive To OpenERP"\r
+               oncommand="searchmail();" />\r
+</toolbarpalette> \r
+\r
+<toolbarpalette id="MailToolbarPalette">\r
+       <toolbarbutton id="GA-button1"\r
+               class="toolbarbutton-1"\r
+               image="&partnericon.value;"\r
+               label= "Open Contact"\r
+               oncommand="Address.onMenuItemCommand(event);" />\r
+</toolbarpalette> \r
+\r
+<toolbarpalette id="MailToolbarPalette">\r
+       <toolbarbutton id="GA-button2"\r
+               class="toolbarbutton-1"\r
+               image="&imagearchive.value;"\r
+               label= "Open Document"\r
+               oncommand="archivemail();"  />\r
+</toolbarpalette> \r
+\r
+\r
+</overlay>\r
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/plugin.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/plugin.xul
new file mode 100644 (file)
index 0000000..137bdca
--- /dev/null
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<?xml-stylesheet href="chrome://openerp_plugin/skin/line.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/plugin.dtd">
+<window id="pluginwindows" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml"
+       title="&title.label;" onload="myPrefObserver.loaddata()" height="480" width="1000">
+
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/exportTools.js"></script>
+<description></description>
+<hbox id="root">
+   <vbox width="400">
+      <groupbox height="30" id="existsobjectgroup" width="400">
+         <caption label="&gptinyobj.label;" />
+          <hbox>
+          <label id="lblsearch" control="txtvalueobj" value="&search.label;"/>
+          <textbox id="txtvalueobj" size="30"/>
+          <button label="&bsearch.label;" oncommand="searchCheckbox()" image="&imagesearch.value;" accesskey="s"/> 
+          </hbox>
+          <vbox align="left" id="checkbox-dynamic"> 
+         </vbox> 
+         <hbox align="center">
+          <image src='chrome://tiny_plugin/skin/perform.gif'/>
+           <checkbox id="cbxselectall" oncommand="selectAllCheckbox();" label="&cbxselectall.label;" checked="false"/>
+           <spacer width="10"/>
+      
+         </hbox>
+    <label id="lblex" value=" "/>
+    <hbox>
+    <description>Documents</description>
+    </hbox>
+       <listbox height="250" id="listSearchBox" seltype="multiple">
+           <listhead >
+               <listheader label="&listSearchBox.header;"/>
+           </listhead>
+           <listcols>
+               <listcol  flex="1"/>
+           </listcols>
+       </listbox>
+       <hbox>
+       <spacer width="360"/>
+       <button label="&attach.label;" image="&imagearchive.value;" oncommand="attachmentWidnowOpen('upload');"/>
+       </hbox>
+      </groupbox>
+
+   </vbox>
+   <vbox>
+      <groupbox id="newobjectgroup" align="center" width="170" height="375">
+       <caption label="&newobject.label;" />
+       <hbox>
+       <label id="lblex" value=" "/>
+         <label id="lblex3" control="section" value="&object.label;"/>
+         <menulist id="section" width="150">
+           <menupopup>
+            <menuitem label="" value=""/>
+           </menupopup>
+         </menulist>
+        <vbox>
+         <button width="50" label="&archive.label;" accesskey="c" image="&imagearchive.value;" oncommand="attachmentWidnowOpen('create');"/>
+        </vbox>
+       </hbox>
+
+       <label id="lblsection" value=" "/>      
+       <separator class="groove-thin" orient="horizontal" width="180"/>
+
+    <tabpanels>\r
+    <tabpanel id="contact">
+    <hbox>
+       <label id="lblsection" control="section" value="&partner.label;"/>
+        <vbox>
+           <button label="&create.label;" accesskey="r" image="&imagecreate.value;" oncommand="Create.onMenuItemCommand(event);"/>
+        </vbox>
+    </hbox>
+    </tabpanel>
+    </tabpanels>
+ </groupbox>
+  <label id="lblex" value=" "/>
+  <label id="lblex" value=" "/>
+  <hbox align="right">
+  <spacer width="360"/>
+           <button label="&close.label;" accesskey="l" image="&imagecancel.value;" oncommand="win_close();"/>
+    </hbox>
+    
+  
+  </vbox>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/selectpartner.xul b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/selectpartner.xul
new file mode 100644 (file)
index 0000000..f051233
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/selectpartner.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+       xmlns:html="http://www.w3.org/1999/xhtml" onload="getPartnerList()"
+       title="&title.label;" height="500" width="375">
+<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/loaddata.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/static.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/overlay.js"></script>
+<groupbox id="gpPartner">
+       <hbox>
+               <textbox id="txtselectpartner"/>
+               <spacer width="25"/>
+               <button label="&bsearch.label;" image="&imagesearch.value;" oncommand="getPartnerList();"/>
+       </hbox>
+</groupbox>
+<listbox id="listPartnerBox" flex="1" rows="5">
+    <listhead>
+       <listheader label="&listPartnerName.header;"/>
+    </listhead>
+    <listcols>
+       <listcol flex="1"/>
+    </listcols>
+</listbox>
+<description></description>
+<hbox>
+  <button label="Create Partner" image="&imagecreate.value;" oncommand="CreatePartner.onMenuItemCommand(event);"/>
+  <spacer width="45"/>
+  <button label="&cancel.label;" image="&imagecancel.value;" oncommand="close();" />
+  <button label="&select.label;" image="&imageok.value;" oncommand="selectPartner();close()"/>
+</hbox>
+
+</window>
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/static.js b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/static.js
new file mode 100644 (file)
index 0000000..c44c5bf
--- /dev/null
@@ -0,0 +1,19 @@
+
+//function to check all the checkbox
+function selectAllCheckbox()
+{
+       var objectlist = preferenceBranch.getCharPref("object").split(',');
+       if(objectlist.length == 1 && objectlist[0]==''){
+               return false;
+       }
+       for (var i=1;i<=objectlist.length;i++)
+       {
+               var checkboxobj = document.getElementById('cbx'+i);
+               if (!checkboxobj)
+                       continue
+               if(document.getElementById('cbxselectall').checked == true)
+                       checkboxobj.checked = true;
+               else
+                       checkboxobj.checked = false;
+       }
+}
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/tiny_xmlrpc.js b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/content/tiny_xmlrpc.js
new file mode 100755 (executable)
index 0000000..61afb15
--- /dev/null
@@ -0,0 +1,2045 @@
+/**
+* Global instance stored here
+*/
+
+var xmlRpcClient;
+
+//Service name on server like /common,/db etc...
+var strServerService;
+
+//temporary variables
+var strobject;
+
+//Array
+var arrDbList = new Array();
+var arrPartnerList = new Array();
+var arrFinalList = new Array();
+
+
+var contentType = new Array();
+var uri = new Array();
+var url = new Array();
+var name = new Array();
+var attach_eml ="no";
+var popup_display = "yes"
+var rpc= {
+       servers: {},
+       addserver: function(name,ip,port,path) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               this.servers[name]= {
+                       ip: ip,
+                       port: port,
+                       path: path,
+                       avaible: true,
+                       sock: Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient)};
+       },
+       getany: function(rpcval,n) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var t = ['PRUint8','PRUint16','PRInt16','PRInt32','PRBool','Char','CString','Float','Double','PRTime','InputStream','Array','Dictionary'];
+               for (var i=0; i<t.length; i++)
+                       try { return [t[i],this.Iget(rpcval,Components.interfaces[((i==10 || i==12)? 'nsI': 'nsISupports')+t[i]],n)]; } catch(e) {}
+               return [false,'error getany','Undefined type'];
+       },
+       onfault: function(t) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               return (t.constructor==Array && t.length==3 && !t[0] && (t[1].substr(0,5)=='error' || t[1].substr(0,5)=='fault'))?
+                       true : false;
+       },
+       getall: function(rpcval,n) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var t = this.getany(rpcval,n);
+               if (this.onfault(t)) return t;
+               if (t[0]=='PRBool') return (t[1]=='true');
+               if (t[0]=='PRInt32') return parseInt(t[1]+'');
+               if (t[0]=='PRTime') {
+                       dte= new Date("January 1, 1970, 00:00:00");
+                       dte.setUTCMilliseconds(t[1]+'');
+                       return dte; }
+               if (t[0]=='Double' || t[0]=='Float') return parseFloat(t[1]+'');
+               if (t[0]=='Char' || t[0]=='CString') return (t[1]+'').replace(/¬/g,'€');
+               if (t[0]=='Array') {
+                       var a=[];
+                       for (var i=0; i<t[1].Count(); i++) a[i]= this.getall(t[1],i);
+               } else if (t[0]=='Dictionary') {
+                       var a={};
+                       var keys = t[1].getKeys({});
+                       for (var k = 0; k < keys.length; k++)
+                               a[keys[k]]= this.getall(t[1],keys[k]);
+               } else return t[1];
+               return a;
+       },
+       Iget: function(rpcval,itype,n) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               if (n == undefined) return rpcval.QueryInterface(itype);
+               else if (n==parseInt(n)) return rpcval.QueryElementAt(n,itype);
+               else return rpcval.getValue(n).QueryInterface(itype);
+       },
+       checktype: function(val) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               if (val != undefined) {
+                       switch (val.constructor) {
+                               case Number: return (val==parseInt(val))? 1:4;
+                               case Boolean: return 2;
+                               case String: return 3;
+                               case Date: return 5;
+                               case Object: return 7;
+                               case Array: return 6;
+
+                       }
+               }
+               return 7;
+
+       },
+       set: function(rpcobj,param) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               if (param==undefined) return [false,'error set','Undefined parameter'];
+               var itype= this.checktype(param);
+               if (this.onfault(itype)) return itype;
+               var p = this.servers[rpcobj].sock.createType(itype,{});
+               if (itype==6) {
+                       if (param.length>0)
+                               for (var i=0; i<param.length; i++) p.AppendElement( this.set(rpcobj,param[i]) );
+               } else if (itype==7) {
+                       for (var i in param) p.setValue( i, this.set(rpcobj,param[i]) );
+               } else if (itype==4) {
+                       p.data=(''+param).replace(',','.');
+               } else p.data=param;
+               return p;
+       },
+       ask: function(rpcobj,method,params,func_out) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var a=this.disableNset(rpcobj) ;
+               if (this.onfault(a)) return a;
+               var handler = {
+                       onResult: function(client, async, result) {
+                               rpc.servers[rpcobj].avaible= true;
+                               func_out(rpc.getall(result)); },
+                       onFault: function (client, async, faute) {alert("in ask infault"+result)
+                                rpc.servers[rpcobj].avaible= true; func_out([false,'fault',faute]); },
+                       onError: function (client, async, status, msg) {
+                               rpc.servers[rpcobj].avaible= true;
+                               if (status=='2147500037') {
+                                       status= "no network or no server";
+                                       msg= "1. Check your network connection.";
+                                       msg+= "\n2. Check your server connection parameters:";
+                                       msg+= "\n\t"+rpc.servers[rpcobj].ip+":"+rpc.servers[rpcobj].port+"=>"+params[0];
+                                       msg+= "\n3. Your server may not be launched or connected to the network.";
+                               }
+                               func_out([false,'error '+status,msg]);
+                               } };
+               var p = [];
+               for (var i=0; i<params.length; i++)
+                       p[i]= this.set(rpcobj,params[i]);
+               try { this.servers[rpcobj].sock.asyncCall(handler, null, method, p, p.length);
+               } catch(e) {
+                       this.servers[rpcobj].avaible= true;
+                       this.servers[rpcobj].sock= Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient) ;
+                       func_out([false,'error catch',e]); }
+               return true;
+       },
+       disableNset: function(rpcobj) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               if (this.servers[rpcobj]) {
+                       this.servers[rpcobj].avaible= false;//alert('http://'+this.servers[rpcobj].ip+':'+this.servers[rpcobj].port+this.servers[rpcobj].path);
+                       server_path=this.servers[rpcobj].ip+':'+this.servers[rpcobj].port+this.servers[rpcobj].path
+                       this.servers[rpcobj].sock.init(server_path);
+                       
+                       return true; }
+               return [false,'error disableNset','Server vars not set'];
+       }
+}
+function handler_function( result ) {
+       if ( rpc.onfault( result ) ) { alert( result[0] + "\n" + result[1] ); return; }
+       else{
+               alert("got result>>>>"+result)  
+       }
+}
+
+//Sets the preference service
+function getPref(){
+       var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
+    var branchobj = prefService.getBranch("extensions.tiny.");
+    branchobj.QueryInterface(Components.interfaces.nsIPrefBranch2);
+       return branchobj
+}
+
+function setFileName(fname){
+       getPref().setCharPref('fname',fname);
+}
+
+//set attachment file save or not
+function setAttachment(argAttac){
+       getPref().setCharPref('attachment',argAttac);
+}
+
+//set preference value for server url
+function setServer(argServer){
+       getPref().setCharPref('serverurl',argServer);
+}
+
+//set preference value for server port
+function setPort(argPort){
+       getPref().setCharPref('serverport',argPort)
+}
+
+//set preference value of database name for data searching and selection
+function setDbName(argDbName){
+       getPref().setCharPref('serverdbname',argDbName);
+}
+
+//set preference value of username for login
+function setUsername(argUsername){
+       getPref().setCharPref('username',argUsername);
+}
+
+//set preference value of password for login
+function setPassword(argPassword){
+       getPref().setCharPref('password',argPassword);
+}
+
+//set preference value for storing partner id
+function setPartnerId(argPartnerId){
+       getPref().setCharPref('partnerid',argPartnerId)
+}
+
+//set preference value for Resource Id
+function setResourceId(argResourceId){
+    getPref().setCharPref('res_id',argResourceId)
+}
+//set server service
+function setServerService(argServerService){
+       strServerService = argServerService;
+}
+
+//set preference value for sender email
+function setSenderEmail(argSenderEmail){
+       getPref().setCharPref('senderemail',argSenderEmail)
+}
+
+//set preference value for receiver email
+function setReceiverEmail(argReceiverEmail){
+       getPref().setCharPref('receiveremail',argReceiverEmail)
+}
+
+//set preference value for sender name
+function setSenderName(argSenderName){
+    getPref().setCharPref('sendername',argSenderName)
+}
+
+//set preference value for email subject
+function setSubject(argSubject){
+       getPref().setCharPref('subject',argSubject)
+}
+
+//set preference value for email received date
+function setReceivedDate(argReceivedDate){
+       getPref().setCharPref('receiveddate',argReceivedDate)
+}
+
+//set preference value for storing contact id which is used while storing mail contents after creating a new partner contact
+function setContactId(argContactId){
+       getPref().setCharPref('contactid',argContactId)
+}
+
+//set preference value for storing attachment option in config
+function setAttachValue(argAttachValue){
+       getPref().setCharPref('attachvalue',argAttachValue)
+}
+
+//set preference value for email cclist
+function setCCList(argCCList){
+       getPref().setCharPref('cclist',argCCList)
+}
+
+//set preference value for email message body
+function setMessageBody(argMessageBody){
+       getPref().setCharPref('messagebody',argMessageBody)
+}
+
+//set preference value for Partner Name
+function setPartnerName(argPartnerName){
+       getPref().setCharPref('partnername',argPartnerName)
+}
+
+//set preference value for Contact Name
+function setContactName(argContactName){
+       getPref().setCharPref('contactname',argContactName)
+}
+
+//set preference value for street
+function setStreet(argStreet){
+       getPref().setCharPref('street',argStreet)
+}
+
+//set preference value for street2
+function setStreet2(argStreet2){
+       getPref().setCharPref('street2',argStreet2)
+}
+
+//set preference value for zipcode
+function setZipCode(argZipcode){
+       getPref().setCharPref('zipcode',argZipcode)
+}
+
+//set preference value for Office Number
+function setOfficenumber(argOfficenumber){
+       getPref().setCharPref('officeno',argOfficenumber)
+}
+
+//set preference value for Phone Number
+function setMobilenumber(argMobilenumber){
+       getPref().setCharPref('phoneno',argMobilenumber)
+}
+
+//set preference value for Fax
+function setFax(argFax){
+       getPref().setCharPref('fax',argFax)
+}
+
+//set preference value for city
+function setCity(argCity){
+       getPref().setCharPref('city',argCity)
+}
+
+//set preference value for country
+function setCountry(argCountry){
+       getPref().setCharPref('country',argCountry)
+}
+
+//set preference value for state
+function setState(argState){
+       getPref().setCharPref('state',argState)
+}
+
+
+//set the value for the whole server url
+function setServerUrl(argServerUrl)
+{
+       var seperateUrl = argServerUrl.split(':');
+       setServer(seperateUrl.slice(0,seperateUrl.length-1).join(":"));
+       setPort(seperateUrl[seperateUrl.length-1]);
+}
+
+//set preference value for storing user id
+function setUserId(argUserId){
+       getPref().setIntPref('userid',argUserId);
+}
+
+//set database list is displaye or not
+function setDBList(argDBList){
+       getPref().setCharPref('db_list',argDBList)
+}
+
+//set server connect or not
+function setconnect_server(argconnect_server){
+       getPref().setCharPref('connect_server',argconnect_server)
+}
+
+//set module install or not
+function setmodule_install(argconnect_module){
+       getPref().setCharPref('module_install',argconnect_module)
+}
+
+//get module install or not
+function getmodule_install(){
+       return getPref().getCharPref('module_install');
+}
+
+
+//get server connect or not
+function getconnect_server(){
+       return getPref().getCharPref('connect_server');
+}
+
+
+//get partner id
+function getPartnerId(){
+       return getPref().getCharPref('partnerid');
+}
+//get database list is displaye or not
+function getDBList(){
+       return getPref().getCharPref('db_list');
+}
+
+function getFileName(){
+       return getPref().getCharPref('fname');
+}
+
+//get attachment save or not
+function getAttachment(){
+       return getPref().getCharPref('attachment');
+}
+
+//get serverurl
+function getServer(){
+       return getPref().getCharPref('serverurl');
+}
+
+//get server port
+function getPort(){
+       return getPref().getCharPref('serverport');
+}
+
+//get database name
+function getDbName(){
+       return getPref().getCharPref('serverdbname');
+}
+
+//get username from config settings
+function getUsername(){
+       return getPref().getCharPref('username');
+}
+
+//get password from config settings
+function getPassword(){
+       return getPref().getCharPref('password');
+}
+
+//get serverservice
+function getServerService(){
+       return strServerService;
+
+}
+
+//get sender email
+function getSenderEmail(){
+       return getPref().getCharPref('senderemail');
+}
+
+//get receiver email
+function getReceiverEmail(){
+       return getPref().getCharPref('receiveremail');
+}
+
+//get resource id
+function getResourceId(){
+       return getPref().getCharPref('res_id');
+}
+
+
+//get sender name
+function getSenderName(){
+        str = getPref().getCharPref('sendername');
+        if(!str.toString().match(/=?utf-8?q?/))
+        {
+            return str;
+        }
+        else
+        {
+
+            string = str.replace(/[\'Š',\'Ž',\'š',\'ž',\'Ÿ',\'À',\'Á',\'Â',\'Ã',\'Ä',\'Å',\'Ç',\'È',\'É',\'Ê',\'Ë',\'Ì',\'Í',\'Î',\'Ï',\'Ñ',\'Ò',\'Ó',\'Ô',\'Õ',\'Ö',\'Ø',\'Ù',\'Ú',\'Û',\'Ü',\'Ý',\'à',\'á',\'â',\'ã',\'ä',\'å',\'ç',\'è',\'é',\'ê',\'ë',\'ì',\'í',\'î',\'ï',\'ñ',\'ò',\'ó',\'ô',\'õ',\'ö',\'ø',\'ù',\'ú',\'û',\'ü',\'ý',\'ÿ',\'Þ',\'þ',\'Ð',\'ð',\'ß',\'Œ',\'œ',\'Æ',\'æ',\'µ']/g,'"',"'",'“','”',"\n","\r",'_/',"'S','Z','s','z','Y','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N','O','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y','TH','th','DH','dh','ss','OE','oe','AE','ae','u','','','','','','','-'");
+
+            var utftext = "";
+            var encoded_string = "";
+            var convertedString = "";
+                   for (var n = 0; n < string.length; n++)
+            {
+                       var c = string.charCodeAt(n);
+                           if (c < 128) {
+                                   utftext += String.fromCharCode(c);
+                           }
+                   }
+
+            encoded_string = encode64(utftext);
+                  return encoded_string;
+        }
+}
+
+//ger partner name
+function getPartnerName(){
+       return getPref().getCharPref('partnername');
+}
+
+//get contact name
+function getContactName(){
+       return getPref().getCharPref('contactname');
+}
+
+
+//get street name
+function getStreet(){
+       return getPref().getCharPref('street');
+}
+
+//get street2 name
+function getStreet2(){
+       return getPref().getCharPref('street2');
+}
+
+//get zip code
+function getZipCode(){
+       return getPref().getCharPref('zipcode');
+}
+
+//get city name
+function getCity(){
+       return getPref().getCharPref('city');
+}
+
+//get country name
+function getCountry(){
+    return getPref().getCharPref('country');
+}
+
+//get state name
+function getState(){
+       return getPref().getCharPref('state');
+}
+
+//get office no
+function getOfficenumber(){
+       return getPref().getCharPref('officeno');
+}
+
+//get mobile no
+function getMobilenumber(){
+       return getPref().getCharPref('phoneno');
+}
+
+//get fax no
+function getFax(){
+       return getPref().getCharPref('fax');
+}
+
+
+//get email subject
+function getSubject(){
+       return getPref().getCharPref('subject');
+}
+
+//get email received date
+function getReceivedDate(){
+       return getPref().getCharPref('receiveddate');
+}
+
+//get contact id which is used while storing mail contents after creating a new partner contact
+function getContactId(){
+       return getPref().getCharPref('contactid');
+}
+
+//get attachment option information from the configuration settings
+function getAttachValue(){
+       return getPref().getCharPref('attachvalue');
+}
+
+//get email cclist information
+function getCCList(){
+       return getPref().getCharPref('cclist');
+}
+
+//get email message body
+function getMessageBody(){
+       return getPref().getCharPref('messagebody');
+}
+
+//get the whole server path
+function getServerUrl(){
+       return getServer()+":"+getPort()+"/"+getServerService();
+}
+
+//get user id for the xmlrpc request
+function getUserId(){
+       return getPref().getIntPref('userid');
+}
+
+//Creates and returns and instance of the XML-RPC client
+function getClient() {
+       // Enable correct security
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       return Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient);
+}
+
+//returns the xmlrpc client instance
+function getXmlRpc() {
+       if (!xmlRpcClient) {
+               xmlRpcClient = getClient();
+       }
+
+       // Initialize the client with the URL
+       xmlRpcClient.init(getServerUrl());
+       return xmlRpcClient;
+}
+
+// function to get all basic parameters
+function getBasicList(){
+       var branchobj = getPref();
+       arrBasicList = [];
+       arrBasicList[0] = branchobj.getCharPref("serverdbname");
+       arrBasicList[1] = branchobj.getIntPref('userid');
+       arrBasicList[2] = branchobj.getCharPref("password");
+       arrBasicList[3] = getServer()
+       arrBasicList[4] = getPort()
+       return arrBasicList
+}
+
+function createMenuItem_db(aLabel) {
+       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+       var item = document.createElementNS(XUL_NS, "menuitem"); // create a new XUL menuitem
+       item.setAttribute("label", aLabel);
+       item.setAttribute("value", aLabel);
+       return item;
+}
+
+//xmlrpc request handler for getting the list of database
+var listDbHandler = {
+       onResult: function(client, context, result) {
+               setconnect_server("true")
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrMethodList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+                // Set the number of results
+               var count = arrMethodList.Count();
+               // Loop through the results, adding items to the list
+               for (i = 0; i < count; i++) {
+                       var strlDbName = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsCString);
+                        arrDbList[i] = strlDbName.data;
+               }
+               var database = ""
+               if (count > 0)
+               {
+                       setDBList("true")
+                       var label = document.getElementById("database_option");
+                       var vbox = document.createElement("vbox");
+                       var hbox = document.createElement("hbox");
+                       var label1 = document.createElement("label");
+                       label1.setAttribute("width","80");
+                       label1.setAttribute("value","Database:");
+                       label1.setAttribute("id","label111");
+                       var menu1 = document.createElement("menulist");
+                       var menupopup1 = document.createElement("menupopup");
+                       menu1.setAttribute("id","DBlist");
+                       menu1.setAttribute("width","300");
+                       var menuitem1 = document.createElement("menuitem");
+                       database = arrDbList[0]
+                       menuitem1.setAttribute("label", arrDbList[0]);
+                       menuitem1.setAttribute("value", arrDbList[0]);
+                       menupopup1.appendChild(menuitem1);
+                       menu1.appendChild(menupopup1)
+                       hbox.appendChild(label1);
+                       hbox.appendChild(menu1);
+                       vbox.appendChild(hbox);
+                       label.appendChild(vbox);
+
+                       var d = document.getElementById("first"); 
+                       var d_nested = document.getElementById("lbldb_list1"); 
+                       var throwawayNode = d.removeChild(d_nested);
+                       var d_nested = document.getElementById("DBlist_text"); 
+                       var throwawayNode = d.removeChild(d_nested);
+
+
+               }
+               else
+               {
+                       setDBList("false")
+               }
+               // Loop through the results, adding items to the list
+               if (count)
+               {
+                       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+                       var popup = document.getElementById("DBlist"); // a <menupopup> element
+                       var arrsec=new Array()
+                       for (var i=0;i<popup.menupopup.childNodes.length;i++) {
+                               arrsec.push(popup.menupopup.childNodes[i].label)
+                       }
+                       for (i=0;i<arrDbList.length;i++){
+                               
+                               if (arrsec.indexOf(arrDbList[i])==-1) {
+                                       if (arrDbList[i] != database){
+                                               popup.menupopup.appendChild(createMenuItem_db(arrDbList[i]));
+                                       }
+                               }
+                       }
+               }
+       },
+
+
+       onFault: function (client, ctxt, fault) {
+               
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+               
+       }
+};
+//function to get the database list
+function getDbList(argControl)
+{
+       setDBList("false")
+       setconnect_server("false")
+       // Enable correct security
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       // Get the instance of the XML-RPC client
+       var xmlRpcClient = getXmlRpc();
+       arrDbList = [];
+       var cmbDbList = document.getElementById(argControl);
+
+       xmlRpcClient.asyncCall(listDbHandler,cmbDbList,'list',[],0);
+       return arrDbList;
+}
+
+function createMenuItem_partner(aLabel, aValue) {
+       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+       var item = document.createElementNS(XUL_NS, "menuitem"); // create a new XUL menuitem
+       item.setAttribute("label", aLabel);
+       item.setAttribute("value", aValue);
+       return item;
+}
+
+//xmlrpc request handler for getting the list of All objects
+var listAllDocumentHandler = {
+
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+                // Set the number of results
+               var count = arrIdList.Count();
+
+               // Loop through the results, adding items to the list
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+                       var resultcount = strlResult.Count();
+                       var arrDataPair = new Array();
+                       arrDataPair[0] = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsCString);
+                       arrDataPair[1] = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+                       arrPartnerList[i] = arrDataPair;
+               }
+               if (context)
+               {
+                       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+                       var popup = document.getElementById("section"); // a <menupopup> element
+                       for (i=0;i<arrPartnerList.length;i++){
+                               popup.menupopup.appendChild(createMenuItem_partner(arrPartnerList[i][1],arrPartnerList[i][0]));
+                       }
+               }
+               popup_display = "no"
+               searchCheckbox()
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+var listAllCountryHandler = {
+
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+               var count = arrIdList.Count();
+               // Loop through the results, adding items to the list
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+                       var resultcount = strlResult.Count();
+                       var arrDataPair = new Array();
+                       arrDataPair[0] = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
+          
+                       arrDataPair[1] = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+                       arrPartnerList[i] = arrDataPair;
+               }
+               if (!context)
+               {
+                       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+                       var popup = document.getElementById("country"); // a <menupopup> element
+                       for (i=0;i<arrPartnerList.length;i++){
+                               popup.menupopup.appendChild(createMenuItem_partner(arrPartnerList[i][1],arrPartnerList[i][0]));
+
+                       }
+               }
+       
+       },
+       onFault: function (client, ctxt, fault) {
+               
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+               
+       }
+}
+
+var listAllStateHandler = {
+
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+                // Set the number of results
+               var count = arrIdList.Count();
+
+               // Loop through the results, adding items to the list
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+                       var resultcount = strlResult.Count();
+                       var arrDataPair = new Array();
+                       arrDataPair[0] = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
+                       arrDataPair[1] = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+                       arrPartnerList1[i] = arrDataPair;
+               }
+               if (!context)
+               {
+                       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+                       var popup = document.getElementById("state"); 
+            // a <menupopup> element
+                       for (i=0;i<arrPartnerList1.length;i++){
+                               popup.menupopup.appendChild(createMenuItem_partner(arrPartnerList1[i][1],arrPartnerList1[i][0]));
+
+                       }
+               }
+       
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+
+//function to get the list of All object
+function getAllDocument(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       var xmlRpcClient = getXmlRpc();
+       arrPartnerList = [];
+       var end = document.getElementById("section")
+       length = end.itemCount
+       for (i = 0; i < length; i++) {
+               end.removeItemAt(0)
+       }
+       var cmdObjectList = document.getElementById("section");
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'list_alldocument';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strvalue.data = ""
+       xmlRpcClient.asyncCall(listAllDocumentHandler,cmdObjectList,'execute',[ strDbName,struid,strpass,strobj,strmethod,strvalue ],6);
+}
+
+function getAllCountry(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       var xmlRpcClient = getXmlRpc();
+       arrPartnerList = [];
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'list_allcountry';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strvalue.data = document.getElementById("country").value;
+       xmlRpcClient.asyncCall(listAllCountryHandler,null,'execute',[ strDbName,struid,strpass,strobj,strmethod,strvalue ],6);
+}
+
+function getAllState(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       var xmlRpcClient = getXmlRpc();
+       arrPartnerList1 = [];
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'list_allstate';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strvalue.data = document.getElementById("state").value;
+    xmlRpcClient.asyncCall(listAllStateHandler,null,'execute',[ strDbName,struid,strpass,strobj,strmethod,strvalue ],6);
+}
+
+
+//function to create array object to pass as an parameter for xmlrpc request
+function dictcreation(value,checkboxobj){
+       var temp = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+       var test = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+       var strkey = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strkey.data = value;
+       test.AppendElement(strkey);
+       temp.AppendElement(test);
+       var test1 = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+       for(i=0;i<checkboxobj.length;i++){
+               var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strvalue.data = checkboxobj[i];
+               test1.AppendElement(strvalue);
+       }
+       if(checkboxobj.length>0){
+               temp.AppendElement(test1);
+       }
+       return temp;
+}
+
+//function to search and fillup section selection box
+function createMenuItem(aLabel) {
+  const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+  var item = document.createElementNS(XUL_NS, "menuitem"); // create a new XUL menuitem
+  item.setAttribute("label", aLabel[1]);
+  item.setAttribute("value", aLabel[0]);
+  return item;
+}
+
+
+function listinstallmodule( result ) {
+       if ( rpc.onfault( result ) ) 
+       { 
+               setmodule_install('no')
+       }
+}
+
+function module_install()
+{
+       setmodule_install("yes")
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       strDbName = branchobj.getCharPref("serverdbname");
+       struid = branchobj.getIntPref('userid');
+       strpass = branchobj.getCharPref("password");
+       strmethod = 'search';
+       strobj = 'thunderbird.partner'; // TOFIX: Find module 'thunderbird' into 'module.module' model.
+       var temp = new Array()
+       server=getServer()
+       port=getPort()
+       basicList=getBasicList()
+       rpc.addserver('object',basicList[3] , basicList[4],'/xmlrpc/object');
+       srcids=rpc.ask( 'object', 'execute', [basicList[0],basicList[1],basicList[2],strobj,strmethod,[]],listinstallmodule)
+}
+
+
+var listSearchContactHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+        var sendername = getSenderEmail();
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+               var count = arrIdList.Count();
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+            var strlSearchResult = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsCString);
+            var strlSearchResultValue = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+            if(strlSearchResult=="partner_name"){
+                 setPartnerName(strlSearchResultValue);
+                 var t = getPartnerName();}
+
+             if(strlSearchResult=="contactname"){
+                 setSenderName(strlSearchResultValue);
+                 var t = getSenderName();}
+            
+            if(strlSearchResult=="street"){
+                 setStreet(strlSearchResultValue);
+                 var t = getStreet();}
+            
+            if(strlSearchResult=="street2"){
+                 setStreet2(strlSearchResultValue);
+                 var t = getStreet2();}
+            
+            if(strlSearchResult=="zip"){
+                 setZipCode(strlSearchResultValue);
+                 var t = getZipCode();}
+
+            if(strlSearchResult=="city"){
+                 setCity(strlSearchResultValue);
+                 var t = getCity();}
+        
+            if(strlSearchResult=="phone"){
+                 setOfficenumber(strlSearchResultValue);
+                 var t = getOfficenumber();}
+        
+            if(strlSearchResult=="fax"){
+                 setFax(strlSearchResultValue);
+                 var t = getFax();}
+            
+            if(strlSearchResult=="mobile"){
+                 setMobilenumber(strlSearchResultValue);
+                 var t = getMobilenumber();}
+
+           if(strlSearchResult=="email" && strlSearchResultValue!=''){
+                 setSenderEmail(sendername);
+                 var t = getSenderEmail();} 
+    
+            if(strlSearchResult=="res_id"){
+                 setResourceId(strlSearchResultValue);
+                 var t = getResourceId();}
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+
+}
+var listSearchContactdetailHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+        var sendername = getSenderEmail();
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+               var count = arrIdList.Count();
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+            var strlSearchResult = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsCString);
+            var strlSearchResultValue = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+            if(strlSearchResult=="email" && strlSearchResultValue=='')
+            {
+                alert("Contact is not Available")
+                document.getElementById("txtemail").value = sendername;
+            } 
+            if(strlSearchResult=="partner_name"){
+                 document.getElementById("txtname").value =strlSearchResultValue;}
+
+            if(strlSearchResult=="contactname"){
+                 document.getElementById("txtcontactname").value =strlSearchResultValue;}
+            
+            if(strlSearchResult=="street"){
+                document.getElementById("txtstreet").value =strlSearchResultValue;}
+            
+            if(strlSearchResult=="street2"){
+                 document.getElementById("txtstreet2").value =strlSearchResultValue;}
+            if(strlSearchResult=="zip"){
+                 document.getElementById("txtzip").value =strlSearchResultValue;}
+
+            if(strlSearchResult=="city"){
+                document.getElementById("txtcity").value =strlSearchResultValue;}
+            if(strlSearchResult=="phone"){
+                 document.getElementById("txtoffice").value =strlSearchResultValue;}
+        
+            if(strlSearchResult=="fax"){
+                 document.getElementById("txtfax").value =strlSearchResultValue;}
+            
+            if(strlSearchResult=="mobile"){
+                 document.getElementById("txtmobile").value =strlSearchResultValue;}
+
+            if(strlSearchResult=="email"&& strlSearchResultValue!=''){
+                document.getElementById("txtemail").value =strlSearchResultValue;}
+
+            if(strlSearchResult=="res_id"){
+                 setResourceId(strlSearchResultValue);
+                 var t = getResourceId();}
+
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+
+}
+
+function searchContactdetail()
+{
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       arrFinalList = [];
+       var xmlRpcClient = getXmlRpc();
+       var cmbSearchList = document.getElementById('listSearchBox');
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+    var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'search_contact';
+       var strname = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strname.data =document.getElementById("txtemail").value;
+       xmlRpcClient.asyncCall(listSearchContactdetailHandler,cmbSearchList,'execute',[ strDbName,struid,strpass,strobj,strmethod,strname ],6);
+}
+
+//xmlrpc request handler for getting the search results for the particular selected check box object
+var listSearchCheckboxHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrMethodList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+                // Set the number of results
+               var count = arrMethodList.Count();
+               var close=0;
+               if(count == 0  && popup_display != "no"){
+                       alert("No records Found");
+                       return false;
+               }
+               else if(count ==2 )
+               {
+                       if (arrMethodList.QueryElementAt(0, Components.interfaces.nsISupportsCString)=="error")
+                       {
+                               close =1;
+                       }
+               }
+               popup_display = "yes"
+               // Loop through the results, adding items to the list
+               var arr1 = new Array();
+               var arr2 = new Array();
+               var flag1 = 0;
+               var flag2 = 0;
+               var er ="";
+               var er_val =new Array();
+               for (i = 0; i < count; i++) 
+               {
+                       if(i%2==0){
+                               if (arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsCString)=="error")
+                               {
+                                       er = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsCString);
+                                       er_val[0] =arrMethodList.QueryElementAt(i+1, Components.interfaces.nsISupportsArray);
+                                       i +=1;
+                                       continue;
+                               }
+                               arr1[flag1] = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsCString);
+                               flag1++;
+                       }
+                       else{
+                               arr2[flag2] = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+                               flag2++;
+                       }
+               }
+               if (er)
+               {
+                       var arrSearchList1 = new Array();
+                       for(j=0;j<er_val[0].Count();j++)
+                       {
+                               var arrDataPair = new Array();
+                               arrDataPair[0] = er_val[0].QueryElementAt(j, Components.interfaces.nsISupportsCString)
+                               arrSearchList1[j]=arrDataPair;
+                       }
+                       alert( arrSearchList1 + "  model not exists")
+                       if (close == 1)
+                       {
+                               alert("No records Found");
+                               return false;
+                       }
+               }
+               for (i = 0; i < arr2.length; i++) {
+                       var arrSearchList1 = new Array();
+                       for(j=0;j<arr2[i].Count();j++){
+                               var strlSearchResult = arr2[i].QueryElementAt(j, Components.interfaces.nsISupportsArray);
+                               var resultcount = strlSearchResult.Count();
+                               var arrDataPair = new Array();
+                               arrDataPair[0] = strlSearchResult.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
+                               arrDataPair[1] = strlSearchResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+                               arrDataPair[2] = arr1[i];
+                               arrSearchList1[j] = arrDataPair;
+                       }
+                       arrFinalList[i]=arrSearchList1;
+               }
+               if (context)
+               {
+
+                       var row_count = context.getRowCount();
+                       var cmbSearchList = document.getElementById('listSearchBox');
+                       for (i=0;i<row_count;i++)
+                       {
+                               context.removeItemAt(0);
+                       }
+                       for (i=0;i<arrFinalList.length;i++)
+                       {
+                               for(j=0;j<arrFinalList[i].length;j++){
+                               //creates the dynamic listbox which shows the searched records for the selected object in checkbox
+                                       var listcell = document.createElement("listcell");
+                                       var     listItem = document.createElement("listitem");
+
+                                       var objectcharpref = getPref().getCharPref("object").split(',');
+                                       var imagecharpref = getPref().getCharPref("imagename").split(',');
+                                       var imagename = ''
+                                       for(k=0;k<objectcharpref.length;k++){
+                                               if(arr1[i] == objectcharpref[k]){
+                                                       imagename = imagecharpref[k]
+                                               }
+                                       }
+
+                                       listcell.setAttribute("image",imagename); // stores the image of the object
+                                       listcell.setAttribute("class","listcell-iconic");
+                                       listcell.setAttribute("width",12);
+                                       listcell.setAttribute("height",12);
+                                       listcell.setAttribute("label",arrFinalList[i][j][1]); //stores the name ofthe record
+                                       listItem.appendChild(listcell);
+                                       listItem.value = arrFinalList[i][j][0]; //stores the id of the record
+                                       listItem.label = arr1[i]; // stores the value of the object
+                                       cmbSearchList.appendChild(listItem);
+                               }
+                       }
+               }
+       },
+
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+};
+
+//function to search the records of selected checkbox object
+function searchCheckbox()
+{
+       var checkboxlist = getnamesearch();
+       if(checkboxlist.length == 0){
+               alert("Select One or More Document");
+               return false;
+       }
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       arrFinalList = [];
+       var xmlRpcClient = getXmlRpc();
+       var end = document.getElementById('listSearchBox').getRowCount();
+       for(i=0; i< end; i++){
+               document.getElementById('listSearchBox').removeItemAt(0);
+       }
+       var cmbSearchList = document.getElementById('listSearchBox');
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'search_checkbox';
+       var strname = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strname.data = document.getElementById('txtvalueobj').value;
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var arrofarr = dictcreation(strname,checkboxlist);
+       xmlRpcClient.asyncCall(listSearchCheckboxHandler,cmbSearchList,'execute',[ strDbName,struid,strpass,strobj,strmethod,arrofarr ],6);
+}
+
+function searchContact()
+{
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       arrFinalList = [];
+       var xmlRpcClient = getXmlRpc();
+       var cmbSearchList = document.getElementById('listSearchBox');
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+    var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'search_contact';
+       var strname = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strname.data =getSenderEmail();
+       
+       xmlRpcClient.asyncCall(listSearchContactHandler,cmbSearchList,'execute',[ strDbName,struid,strpass,strobj,strmethod,strname ],6);
+}
+
+//xmlrpc request handler for getting the list of partners
+var listPartnerHandler = {
+
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+                // Set the number of results
+               var count = arrIdList.Count();
+               // Loop through the results, adding items to the list
+               for (i = 0; i < count; i++) {
+                       var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+                       var resultcount = strlResult.Count();
+                       var arrDataPair = new Array();
+                       arrDataPair[0] = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
+                       arrDataPair[1] = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+                       arrPartnerList[i] = arrDataPair;
+               }
+               if (context)
+               {
+                       var row_count = context.getRowCount();
+                       var cmdPartnerList = document.getElementById('listPartnerBox');
+                       for (i=0;i<row_count;i++)
+                       {
+                               context.removeItemAt(0);
+                       }
+                       for (i=0;i<arrPartnerList.length;i++)
+                       {
+                               var listcell = document.createElement("listcell");
+                               var listItem = document.createElement("listitem");
+                               listcell.setAttribute("label",arrPartnerList[i][1]);
+                               listItem.appendChild(listcell);
+                               listItem.value = arrPartnerList[i][0];
+                               cmdPartnerList.appendChild(listItem);
+                       }
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+//function to get the list of partners
+function getPartnerList(){
+       var branchobj = getPref();
+       window.opener.document.getElementById('txtselectpartner').setAttribute('value','');
+       setServerService('xmlrpc/object');
+       var xmlRpcClient = getXmlRpc();
+       arrPartnerList = [];
+       var end = document.getElementById('listPartnerBox').getRowCount();
+       for(i=0; i< end; i++){
+               document.getElementById('listPartnerBox').removeItemAt(0);
+       }
+       var cmdPartnerList = document.getElementById('listPartnerBox');
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struid.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'name_search';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'res.partner';
+       var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strvalue.data = document.getElementById('txtselectpartner').value;
+       xmlRpcClient.asyncCall(listPartnerHandler,cmdPartnerList,'execute',[ strDbName,struid,strpass,strobj,strmethod,strvalue ],6);
+}
+//function to create the xmlrpc supported variables for xmlrpc request
+function dictcontact(a,b){
+       var temp = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+       for(i=0;i<a.length;i++){
+               var strkey = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strkey.data = a[i]
+               var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strvalue.data = b[i]
+               var test = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+               test.AppendElement(strkey);
+               test.AppendElement(strvalue);
+               temp.AppendElement(test);
+       }
+       return temp;
+}
+
+//xmlrpc request handler for creating the record of mail
+var listArchiveHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var createId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+//function to archive the mail content through xmlrpc request
+
+function parse_eml(){
+       var fpath =""
+       if(navigator.userAgent.indexOf('Linux')!= -1){
+               fpath ="/tmp/"
+       }
+       else if(navigator.userAgent.indexOf('Win')!= -1){
+               fpath ="C:\\"
+       }
+       else if(navigator.userAgent.indexOf('Mac OS X')!= -1){ 
+               fpath ="/tmp/"
+       } 
+
+       name = fpath + getFileName() +".eml"
+
+       var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+       file.initWithPath( name );
+       if ( file.exists() == false ) {
+               return null;
+       } else {
+               var is = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance( Components.interfaces.nsIFileInputStream );
+               is.init( file,0x01, 00004, null);
+               var sis = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance( Components.interfaces.nsIScriptableInputStream );
+               sis.init( is );
+               var output = sis.read( sis.available() );
+               return output
+    }
+}
+function upload_archivemail()
+{
+    list_documents = document.getElementById('listSearchBox')
+    var context = []
+    var cnt = list_documents.selectedCount
+       for(i=0;i<cnt;i++)
+       {       
+        var object = list_documents.getSelectedItem(i)
+               var eml_string = parse_eml();
+        var model = object.label;
+        var res_id = object.value;
+               var branchobj = getPref();
+               setServerService('xmlrpc/object');
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var xmlRpcClient = getXmlRpc();
+               var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strDbName.data = branchobj.getCharPref("serverdbname");
+               var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+               struids.data = branchobj.getIntPref('userid');
+               var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strpass.data = branchobj.getCharPref("password");
+               var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strmethod.data = 'history_message';
+               var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strobj.data = 'thunderbird.partner';
+               var resobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+        var a = ['model', 'res_id','message'];
+           var b = [model, res_id,eml_string];
+        var arrofarr = dictcontact(a,b)
+        xmlRpcClient.asyncCall(listArchiveHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+        alert("Mail Archive Successfully");
+               window.close();
+       }
+       
+}
+
+function create_archivemail(){
+       var popup = document.getElementById("section").selectedItem; // a <menupopup> element
+
+       if (String(popup) != "null"){
+               object=popup.value;
+               if (object == undefined) { alert("select At Least one Document !")}
+               else{
+               var branchobj = getPref();
+               setServerService('xmlrpc/object');
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var xmlRpcClient = getXmlRpc();
+               var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strDbName.data = branchobj.getCharPref("serverdbname");
+               var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+               struids.data = branchobj.getIntPref('userid');
+               var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strpass.data = branchobj.getCharPref("password");
+               var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strmethod.data = 'process_email';
+               var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+               strobj.data = 'thunderbird.partner';
+        var eml_string = parse_eml()
+               var a = ['model', 'message'];
+               var b = [object, eml_string];
+               var arrofarr = dictcontact(a,b);
+               xmlRpcClient.asyncCall(listArchiveHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+        alert("Mail Archive Successfully");
+               window.close();
+               }
+       }
+       else
+       {
+               alert(" select At Least one Document !")
+       }
+}
+
+
+//xmlrpc request handler for creating a new contact
+var listCreateContactHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var createId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+               setContactId(createId);
+               alert("Contact Created Successfully."); 
+               window.close();
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+var listUpdateContactHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+        alert("Contact Update Successfully.");
+        window.close();
+               var partnerId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+               setResourceId(partnerId);
+               window.close();
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+//function to create a new contact
+function createContact(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struids.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'create_contact';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var a = ['partner_id','name','street','street2','zip','city','country_id','state_id','phone','fax','mobile','email'];
+       var b = [getPartnerId(),getSenderName(),document.getElementById("txtstreet").value,document.getElementById("txtstreet2").value,document.getElementById("txtzip").value, document.getElementById("txtcity").value,document.getElementById("country").value,document.getElementById("state").value,document.getElementById("txtoffice").value,document.getElementById("txtfax").value,document.getElementById("txtmobile").value,getSenderEmail()];
+       var arrofarr = dictcontact(a,b);
+       xmlRpcClient.asyncCall(listCreateContactHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+}
+
+function UpdateContact(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struids.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'update_contact';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var a = ['res_id','partner_id','name','street','street2','zip','city','country_id','state_id','phone','fax','mobile','email'];
+       var b = [getResourceId(),getPartnerName(),document.getElementById("txtcontactname").value,document.getElementById("txtstreet").value,document.getElementById("txtstreet2").value,document.getElementById("txtzip").value, document.getElementById("txtcity").value,document.getElementById("country").value,document.getElementById("state").value,document.getElementById("txtoffice").value,document.getElementById("txtfax").value,document.getElementById("txtmobile").value,document.getElementById("txtemail").value];
+       var arrofarr = dictcontact(a,b);
+       xmlRpcClient.asyncCall(listUpdateContactHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+}
+
+//xmlrpc request handler for creating a attachment record
+var listAttachHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var createId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+
+//function to encode the string into base64
+var base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split("");
+function base64_encode (s)
+ {
+   // the result/encrypted string, the padding string, and the pad count
+   var r = ""; var p = ""; var c = s.length % 3;
+
+   // add a right zero pad to make this string a multiple of 3 characters
+   if (c > 0) { for (; c < 3; c++) { p += '='; s += "\0"; } }
+
+   // increment over the length of the string, three characters at a time
+   for (c = 0; c < s.length; c += 3) {
+
+     // we add newlines after every 76 output characters, according to the MIME specs
+     if (c > 0 && (c / 3 * 4) % 76 == 0) { r += "\r\n"; }
+
+     // these three 8-bit (ASCII) characters become one 24-bit number
+     var n = (s.charCodeAt(c) << 16) + (s.charCodeAt(c+1) << 8) + s.charCodeAt(c+2);
+
+     // this 24-bit number gets separated into four 6-bit numbers
+     n = [(n >>> 18) & 63, (n >>> 12) & 63, (n >>> 6) & 63, n & 63];
+
+     // those four 6-bit numbers are used as indices into the base64 character list
+     r += base64chars[n[0]] + base64chars[n[1]] + base64chars[n[2]] + base64chars[n[3]];
+
+     // add the actual padding string, after removing the zero pad
+   } return r.substring(0, r.length - p.length) + p;
+ }
+
+//function to encode the string into base64
+var keyStr = "ABCDEFGHIJKLMNOP" +
+                "QRSTUVWXYZabcdef" +
+                "ghijklmnopqrstuv" +
+                "wxyz0123456789+/" +
+                "="+"-_.!~*'()";
+
+function encode64(input) {
+var output = "";
+var chr1, chr2, chr3 = "";
+var enc1, enc2, enc3, enc4 = "";
+var i = 0;
+
+do {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+    enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+    enc4 = 64;
+ }
+
+ output = output +
+    keyStr.charAt(enc1) +
+    keyStr.charAt(enc2) +
+    keyStr.charAt(enc3) +
+    keyStr.charAt(enc4);
+ chr1 = chr2 = chr3 = "";
+ enc1 = enc2 = enc3 = enc4 = "";
+} while (i < input.length);
+
+return output;
+}
+
+
+//function to read the contents of the attachment files from the temp folder
+function createInstance(name,test){
+       var encoded_string = '';
+       var file_name = ''
+
+       for(i=0;i<test.length;i++){
+               var stream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
+               stream.init(test[i], 0x01, 00004, 0);
+               var bstream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
+               bstream.setInputStream(stream);
+               var r = new Array();
+               var fileContents = bstream.readByteArray(bstream.available(),r);
+               bstream.close();
+               var printstring = '';
+               for(j=0;j<fileContents.length;j++)
+               {
+                       printstring += String.fromCharCode(fileContents[j]);
+               }
+               encoded_string += encode64(printstring)+',';
+               file_name += name[i]+',';
+               test[i].remove(true);
+       }
+       encoded_string = encoded_string.substring(0,encoded_string.length-1);
+       file_name = file_name.substring(0,file_name.length-1);
+       getPref().setCharPref('displayName',file_name);
+       getPref().setCharPref('attachmentdata',encoded_string);
+
+
+}
+
+//xmlrpc request handler for handling the login information
+var listLoginHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var login = result.QueryInterface(Components.interfaces.nsISupportsPrimitive)
+               if(login.type == 12){
+                       login = result.QueryInterface(Components.interfaces.nsISupportsPRInt32)
+                       setUserId(login.data);
+                       alert('Successful Login To OpenERP');
+            window.close();
+               }
+               else{
+                       alert("Login Failed");
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+               alert("Database does not Exist!\n\n Please specify proper database name.");
+       }
+}
+
+//function to check the login information
+function testConnection(){
+       if (getconnect_server() == "false")
+       {
+               alert("No Server Running..."+" "+getServer())
+               return false;
+       }
+       if (getDBList()=="false")
+       {
+               if (document.getElementById('DBlist_text').value =='')
+               {
+                       alert("You Must Enter Database Name");
+                       return false;
+               }
+               setDbName(document.getElementById('DBlist_text').value);
+       }
+       else
+       {
+               if (document.getElementById('DBlist').value == 0 || document.getElementById('DBlist').value =="--select--")
+               {
+                       alert("You Must Select Database Name");
+                       return false;
+               }
+               setDbName(document.getElementById('DBlist').value);
+       }
+       var branchobj = getPref();
+       setServer(document.getElementById('txturl').value);
+       var s = document.getElementById('txturl').value;
+       var a =s.split(':');
+       setPort(a[a.length-1]);
+       setUsername(document.getElementById('txtusername').value);
+       setPassword(document.getElementById('txtpassword').value);
+       setServerService('xmlrpc/common');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = getPref().getCharPref('serverdbname');
+       var strusername = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strusername.data = getPref().getCharPref('username');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = getPref().getCharPref('password');
+       xmlRpcClient.asyncCall(listLoginHandler,null,'login',[strDbName,strusername,strpass],3);
+}
+
+
+//xmlrpc request handler for handling the login information
+var listcreateLoginHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var login = result.QueryInterface(Components.interfaces.nsISupportsPrimitive)
+               setconnect_server("true")               
+               if(login.type == 12){
+                       login = result.QueryInterface(Components.interfaces.nsISupportsPRInt32)
+                       setUserId(login.data);
+               }
+               else{
+                       alert("Login Failed");
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+               
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+               setconnect_server("false")
+       }
+}
+
+//function to check the login information
+function createConnection(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/common');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = getPref().getCharPref('serverdbname');
+       var strusername = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strusername.data = getPref().getCharPref('username');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = getPref().getCharPref('password');
+       xmlRpcClient.asyncCall(listcreateLoginHandler,null,'login',[strDbName,strusername,strpass],3);
+}
+
+//xmlrpc request handler for handling the partner information
+var listCreatePartnerHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var createId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+               
+               if(typeof(createId.data) == 'number' && createId!=0){
+                       window.close();
+               }
+               if(createId == 0){
+                       alert("Partner Already Exist");
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+//function to create the tiny partner object
+function createPartner(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struids.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'create_partner';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       if(document.getElementById('txtname').value ==''){
+               alert("You Must Enter Partner Name");
+               return false;
+       }
+       var a = ['name'];
+       var b = [document.getElementById('txtname').value];
+       var arrofarr = dictcontact(a,b);
+       xmlRpcClient.asyncCall(listCreatePartnerHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+}
+//xmlrpc request handler for handling the object information
+var listSearchDocumentHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var searchResult = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+               if(searchResult.data == 0){
+                       alert("Document Does Not Exist");
+                       return false;
+               }
+               var objvalue = getPref().getCharPref("listobject");
+               var objectvalue = getPref().getCharPref("object");
+               var imagevalue = getPref().getCharPref("imagename");
+
+               var objcharpref = getPref().getCharPref("listobject").split(',');
+               var objectcharpref = getPref().getCharPref("object").split(',');
+               var imagecharpref = getPref().getCharPref("imagename").split(',');
+
+
+               if(objectcharpref.indexOf(document.getElementById("txtobject").value) != -1){
+                       alert("Document already in List");
+               }
+               else{
+                       var     listItem = document.createElement("listitem");
+                       var listcell1 = document.createElement("listcell");
+                       var listcell2 = document.createElement("listcell");
+                       var listcell3 = document.createElement("listcell");
+                       listcell1.setAttribute("label",document.getElementById("txtobj").value);
+                       listcell2.setAttribute("label",document.getElementById("txtobject").value);
+                       listcell3.setAttribute("image",'file://'+document.getElementById("txtimagename").value);
+                       listcell3.setAttribute("class","listcell-iconic")
+                       listcell3.setAttribute("width",16)
+                       listcell3.setAttribute("height",16)
+                       listItem.appendChild(listcell1);
+                       listItem.appendChild(listcell2);
+                       listItem.appendChild(listcell3);
+                       document.getElementById("listObjectListBox").appendChild(listItem)
+                       if(getPref().getCharPref("object")!=''){
+                               getPref().setCharPref("listobject",objvalue+','+document.getElementById("txtobj").value);
+                               getPref().setCharPref("object",objectvalue+','+document.getElementById("txtobject").value);
+                               getPref().setCharPref("imagename",imagevalue+','+"file://"+document.getElementById("txtimagename").value);
+                       }
+                       else{
+                               getPref().setCharPref("listobject",document.getElementById("txtobj").value);
+                               getPref().setCharPref("object",document.getElementById("txtobject").value);
+                               getPref().setCharPref("imagename","file://"+document.getElementById("txtimagename").value);
+                       }
+               }
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+//function to search the tiny objects for configuration settings
+function searchDocument(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struids.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'search_document';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       if(document.getElementById('txtobj').value =='' ){
+               alert("You Must Enter Document");
+               return false;
+       }
+       if(document.getElementById('txtobject').value =='' ){
+               alert("You Must Enter Document Name");
+               return false;
+       }
+       var a = ['model'];
+       var b = [document.getElementById('txtobject').value];
+       var arrofarr = dictcontact(a,b);
+       xmlRpcClient.asyncCall(listSearchDocumentHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+}
+
+//xmlrpc request handler for list of search object exist in database or not.
+var listsearchAttachmentHandler = {
+       onResult: function(client, context, result) {
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+               var objectlist = result.QueryInterface(Components.interfaces.nsISupportsCString);
+               getPref().setCharPref('tempobject',objectlist)
+               document.getElementById("txtvalueobj").value= getSenderEmail();
+               var checkbox = document.getElementById("checkbox-dynamic");
+               
+               var object = preferenceBranch.getCharPref("listobject").split(',');
+               var obj = preferenceBranch.getCharPref("tempobject").split(',');
+               var imagelist = preferenceBranch.getCharPref("imagename").split(',');
+
+               count = 0
+               if (object[0]!=''){
+                       for(var i=0; i<object.length; i++){
+                               if (obj[i] == "null")
+                               {
+                                       continue
+                               }
+
+                               if(count%3==0){
+                                       var vbox = document.createElement("hbox");
+                               }
+                               count += 1
+                               var hbox = document.createElement("vbox");
+                               var checkbox1 = document.createElement("checkbox");
+
+                               checkbox1.setAttribute("label",object[i]);
+                               checkbox1.setAttribute("id","cbx"+(i+1));
+                               checkbox1.setAttribute("width",150)
+                               if (obj[i] =="res.partner.address")
+                               {
+                                       checkbox1.setAttribute("checked",true);
+                               }
+                               if(i==0){
+                                       checkbox1.setAttribute("checked",true);
+                               }
+
+                               var image1 = document.createElement("image");
+                               image1.setAttribute("src",imagelist[i]);
+                               image1.setAttribute("width",16)
+                               image1.setAttribute("height",16)
+
+                               vbox.appendChild(image1);
+                               hbox.appendChild(checkbox1);
+                               vbox.appendChild(hbox);
+                               checkbox.appendChild(vbox);
+                       }
+               }
+               setTimeout("getAllDocument()", 0)
+               exis_grp = document.getElementById("existsobjectgroup")
+               new_grp = document.getElementById("newobjectgroup")
+
+               new_grp.height = parseInt(parseInt(new_grp.height) + parseInt((count /3) * 23.5))
+               win = document.getElementById("pluginwindows").setAttribute("height",1000)
+
+       },
+       onFault: function (client, ctxt, fault) {
+
+       },
+
+       onError: function (client, ctxt, status, errorMsg) {
+
+       }
+}
+
+//function to create a new attachment record
+function listSearchDocumentAttachment(){
+       var branchobj = getPref();
+       setServerService('xmlrpc/object');
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+       var xmlRpcClient = getXmlRpc();
+       var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strDbName.data = branchobj.getCharPref("serverdbname");
+       var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
+       struids.data = branchobj.getIntPref('userid');
+       var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strpass.data = branchobj.getCharPref("password");
+       var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strmethod.data = 'search_document_attachment';
+       var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       strobj.data = 'thunderbird.partner';
+       var resobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+       var popup = document.getElementById("section").selectedItem; // a <menupopup> element
+       object=popup.value;
+       resobj.data = object;
+       var a = ['object'];
+       var b = [getPref().getCharPref("object")];
+       var arrofarr = dictcontact(a,b);
+       xmlRpcClient.asyncCall(listsearchAttachmentHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
+}
+
+
+//function to create a new attachment record
+
+function win_close()
+{
+       var fpath =""
+       if(navigator.userAgent.indexOf('Linux')!= -1){
+               fpath ="/tmp/"
+       }
+       else if(navigator.userAgent.indexOf('Win')!= -1){
+               fpath ="C:\\"
+       }
+       else if(navigator.userAgent.indexOf('Mac OS X')!= -1){ 
+               fpath ="/tmp/"
+       } 
+       try
+         {
+               name = fpath + getFileName() +".eml"
+
+               var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+               file.initWithPath( name );
+               file.remove(true);
+               window.close();
+         }
+       catch(err)
+         {
+               window.close();
+         }
+}
+
+function attachmentWidnowOpen(msg)
+{
+
+               if (msg=="create")
+               {
+                       var popup = document.getElementById("section").selectedItem; // a <menupopup> element
+                       if (String(popup) != "null"){
+                               object=popup.value;
+                               if (object=="" || object == undefined) { alert("select at least one document !")}
+                               else{
+                                       create_archivemail()
+                               }
+                       }
+                       else
+                       {
+                               alert("select at least one Document !")
+                       }
+               }
+               else if (msg=="upload")
+               {       
+                       if(document.getElementById('listSearchBox').selectedItem)
+                       {       
+                               upload_archivemail()
+                       }
+                       else{
+                               alert("Please select at least one record");
+                       }
+               }
+}
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/address.dtd b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/address.dtd
new file mode 100644 (file)
index 0000000..3b5b95e
--- /dev/null
@@ -0,0 +1,26 @@
+<!ENTITY title.label "Open Contact">
+<!ENTITY name.value "Partner Name:">
+<!ENTITY contactname.value "Contact Name:">
+<!ENTITY street.value "Street:">
+<!ENTITY street2.value "Street2:">
+<!ENTITY zip.value "Zip:">
+<!ENTITY city.value "City:">
+<!ENTITY country.value "Country:">
+<!ENTITY state.value "State:">
+<!ENTITY office.value "Office:">
+<!ENTITY fax.value "Fax:">
+<!ENTITY mobile.value "Mobile:">
+<!ENTITY email.value "Email:">
+<!ENTITY emailid.value "Email ID:">
+<!ENTITY communication.value "Communication:">
+<!ENTITY postaladdress.value "Postal Address:">
+<!ENTITY ok.label "Save">
+<!ENTITY partner.label "Create New Contact :">
+<!ENTITY create.label "New Contact">
+<!ENTITY cancel.label "Cancel">
+<!ENTITY newpartner.label "New Partner">
+<!ENTITY bsearch.label "Search Contact">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config.dtd b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config.dtd
new file mode 100755 (executable)
index 0000000..23cd94e
--- /dev/null
@@ -0,0 +1,49 @@
+<!ENTITY title.label "OpenERP Configuration">\r
+<!ENTITY separate.label "Configuration Login for OpenERP!">\r
+<!ENTITY close.label "Cancel">\r
+<!ENTITY database.label "Database:">
+<!ENTITY ok.label "OK">\r
+<!ENTITY connection.label "Connect">\r
+<!ENTITY txturl.label "Server: ">\r
+<!ENTITY image.label "Image : ">\r
+<!ENTITY obj.label "Document : ">\r
+<!ENTITY username.label "Username: ">\r
+<!ENTITY password.label "Password: ">\r
+<!ENTITY setdb.label "Move &gt;">\r
+<!ENTITY getdblist.label "Change">\r
+<!ENTITY gpConnection.label "Connection Parameters">\r
+<!ENTITY listDBListBox.header "Available DBs">\r
+<!ENTITY listDocument.header "Document">\r
+<!ENTITY listDocumentListBox.header "Document Name">\r
+<!ENTITY document.label "Document Name : ">\r
+<!ENTITY documentcreate.label "Add">\r
+<!--<!ENTITY objectdelete.label "Delete Selected Object From The List"> -->\r
+<!ENTITY documentdelete.label "Delete">\r
+<!ENTITY gpArchive.label "Archived Email Attachment Options">\r
+<!ENTITY rdAlwaysAttached.label "Always Send Email Attachments to OpenERP">\r
+<!ENTITY rdPromptAttached.label "Prompt Before Sending Email Attachments">\r
+<!ENTITY rdNeverAttached.label "Never Send Email attachments to OpenERP">\r
+<!ENTITY reserve.value "Copyright © 2006-TODAY OpenERP SA All Rights Reserved.\r
+OpenERP is a trademark of the OpenERP SA Company. OpenERP Web is jointly developed by OpenERP SA and Axelor.\n\r
+Licenced under the terms of OpenERP Public License (OEPL) v1.1 ">\r
+<!ENTITY openerp.value "http://www.openerp.com/">\r
+<!ENTITY axelor.value "http://www.axelor.com">\r
+<!ENTITY tinyerp.value "http://tiny.be/">\r
+\r
+<!ENTITY openerp_s.value "OpenERP">\r
+<!ENTITY axelor_s.value "The Axelor Company">\r
+<!ENTITY tinyerp_s.value "The Tiny Company">\r
+\r
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">\r
+<!ENTITY gpAbout.label "About OpenERP Thunderbird Plugin">\r
+<!ENTITY develop.value "This Thunderbird Plugin for OpenERP has been developed by OpenERP SA &amp; Axelor">\r
+<!ENTITY information.value "For more information, please visit our website">\r
+<!ENTITY contact.label "Contact Us">\r
+<!ENTITY contact.value "info@axelor.com">\r
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">\r
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">\r
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">\r
+<!ENTITY imagemove.value "chrome://openerp_plugin/skin/Move.gif">\r
+<!ENTITY imagemoveleft.value "chrome://openerp_plugin/skin/MoveLeft.png">\r
+<!ENTITY imagemovedown.value "chrome://openerp_plugin/skin/MoveDown.png">\r
+<!ENTITY addfile.label "Load Image">\r
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config_change.dtd b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/config_change.dtd
new file mode 100644 (file)
index 0000000..a926d3a
--- /dev/null
@@ -0,0 +1,5 @@
+<!ENTITY lblurl.label "Server: ">\r
+<!ENTITY lblport.label "Port: ">\r
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">\r
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">\r
+\r
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/create.dtd b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/create.dtd
new file mode 100644 (file)
index 0000000..181d408
--- /dev/null
@@ -0,0 +1,37 @@
+<!ENTITY title.label "Create a new Contact">
+<!ENTITY name.value "Contact Name:">
+<!ENTITY street.value "Street:">
+<!ENTITY street2.value "Street2:">
+<!ENTITY zip.value "Zip:">
+<!ENTITY city.value "City:">
+<!ENTITY country.value "Country:">
+<!ENTITY state.value "State:">
+<!ENTITY office.value "Office:">
+<!ENTITY fax.value "Fax:">
+<!ENTITY mobile.value "Mobile:">
+<!ENTITY email.value "Email:">
+<!ENTITY communication.value "Communication:">
+<!ENTITY postaladdress.value "Postal Address:">
+
+
+<!ENTITY selectpartner.value "Partner:">
+<!ENTITY listEmail.header "Email">
+<!ENTITY listName.header "Name">
+<!ENTITY bsearch.label "Search">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
+<!ENTITY cbxarchive.label "Archive">
+<!ENTITY ok.label "Save">
+<!ENTITY cancel.label "Cancel">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
+
+<!ENTITY title.label "Select Partner">
+<!ENTITY listPartnerName.header "Partner Name">
+<!ENTITY bsearch.label "Search">
+<!ENTITY create.label "Create">
+<!ENTITY select.label "Select">
+<!ENTITY cancel.label "Cancel">
+<!ENTITY reload.label "Reload">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
+<!ENTITY imagereload.value "chrome://openerp_plugin/skin/Archive.png">
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/createpartner.dtd b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/createpartner.dtd
new file mode 100644 (file)
index 0000000..67b32b3
--- /dev/null
@@ -0,0 +1,7 @@
+<!ENTITY title.label "Create a new Partner">
+<!ENTITY name.value "Name:">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
+<!ENTITY ok.label "Save">
+<!ENTITY cancel.label "Cancel">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/mboximport.properties b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/mboximport.properties
new file mode 100644 (file)
index 0000000..3384542
--- /dev/null
@@ -0,0 +1,31 @@
+nomboxfile=není mbox souborem
+folderexists=Není možné importovat: složka se stejným názvem již existuje
+fileexists=Není možné importovat: soubor se stejným názvem již existuje
+nowritable=Není možné importovat: nemáte právo zápisu do složky
+exportOK=Export byl úspěšně dokončen
+isNewsgroup=Tato funkce není dostupná: export složky z IMAP účtů nebo diskuzních \nskupin je možný, pouze pokud je nastavené čtení v režimu Offline
+nofolder=Nebyla vybrána žádná cílová složka
+badfolder=Není možné importovat do této složky (typ IMAP nebo diskuzní skupina)
+exportAccount=Export všech složek
+exportFolder=Export složky
+filePickerImport=Výběr souboru k importu
+filePickerExport=Výběr cílové složky
+extensions.{3ed8cc52-86fc-4613-9026-c1ef969da4c3}.description=Umožňuje import a export souborů ve formátu mbox a eml
+virtualfolder=Toto je virtuální složka. Pro export jejich\nzpráv musíte tyto zprávy nejdříve\nzkopírovat do normální složky.
+searchdir=Vyberte složku, ve které budou vyhledány mbox soubory
+confirmimport=Chcete importovat soubor?
+endscan=Konec prohledávání složek
+internalerror=Není možné provést import, protože nastala neznámá chyba
+exportstart=Probíhá export, čekejte prosím...
+exported=Exportovalo se
+msgs=zpráv z
+nosubjectmsg=bez_predmetu
+messsubdir=zprávy
+badfolder2=Není možné importovat do této složky (IMAP nebo diskuzní skupina nebo virtuální složka)
+temp_error=Není možné importovat: nastala chyba při vytváření dočasného souboru
+importEMLstart=Pobíhá import, čekejte prosím...
+numEML=Naimportovány eml soubory:
+CSVseparator=,
+noEML=No eml file found in this directory
+backupWarning=During this operation, the program could be\nunresponsive for some minutes.\nDo you want to go on?\n  
+noWaring=Don't show again this warning
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/overlay.dtd b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/overlay.dtd
new file mode 100755 (executable)
index 0000000..9a91cf1
--- /dev/null
@@ -0,0 +1,11 @@
+<!ENTITY tinyplugin "OpenERP Configuration">
+<!ENTITY tinypluginconfig "Archieve To OpenERP">
+<!ENTITY tinyarchive "Archive to OpenERP">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
+<!ENTITY menuicon.value "chrome://openerp_plugin/skin/NEWT.png">
+<!ENTITY partnericon.value "chrome://openerp_plugin/skin/Partner.png">
+<!ENTITY imagearchive.value "chrome://openerp_plugin/skin/Archive.png">
+<!ENTITY tooltip.value "Add To Archive">
+<!ENTITY pluginconfig.value "OpenERP Configuration Settings">
+<!ENTITY pluginconfigvalue.value "Archieve To OpenERP Settings">
+
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/plugin.dtd b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/plugin.dtd
new file mode 100644 (file)
index 0000000..ed26728
--- /dev/null
@@ -0,0 +1,28 @@
+<!ENTITY title.label "Archive To OpenERP">
+<!ENTITY gptinyobj.label "Link to an Existing Document">
+<!ENTITY newobject.label "New Documents">
+<!ENTITY bsearch.label "Search">
+<!ENTITY close.label "Close">
+<!ENTITY attach.label "Archive to OpenERP">
+<!ENTITY create.label "New Contact">
+<!ENTITY archive.label "Create">
+<!ENTITY attach.label "Attach">
+<!ENTITY cbxcontact.label "Contact">
+<!ENTITY cbxinvoice.label "Invoice">
+<!ENTITY cbxproject.label "Project">
+<!ENTITY cbxpartner.label "Partner">
+<!ENTITY cbxproduct.label "Product">
+<!ENTITY cbxaccount.label "Account">
+<!ENTITY cbxsale.label "Sale">
+<!ENTITY cbxcase.label "Case">
+<!ENTITY cbxtask.label "Task">
+<!ENTITY cbxselectall.label "Select All">
+<!ENTITY object.label "Type of Document :">
+<!ENTITY partner.label "Create New Contact :">
+<!ENTITY search.label "Search :">
+<!ENTITY listSearchBox.header "Name">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imagearchive.value "chrome://openerp_plugin/skin/Archive.png">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
+<!ENTITY gptinyobjexe.label "Documents">
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/selectpartner.dtd b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/locale/en-US/selectpartner.dtd
new file mode 100644 (file)
index 0000000..e6a62c1
--- /dev/null
@@ -0,0 +1,12 @@
+<!ENTITY title.label "Select Partner">
+<!ENTITY selectpartner.value "Partner">
+<!ENTITY listPartnerName.header "Partner Name">
+<!ENTITY bsearch.label "Search">
+<!ENTITY create.label "Create">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
+<!ENTITY select.label "Select">
+<!ENTITY cancel.label "Cancel">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Account.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Account.png
new file mode 100644 (file)
index 0000000..b13f2b0
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Account.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Archive.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Archive.png
new file mode 100644 (file)
index 0000000..5aa6a95
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Archive.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Case.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Case.png
new file mode 100644 (file)
index 0000000..9b950b8
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Case.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Contact.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Contact.png
new file mode 100644 (file)
index 0000000..9bd6f9f
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Contact.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Create.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Create.png
new file mode 100644 (file)
index 0000000..1ab240c
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Create.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Error.gif b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Error.gif
new file mode 100644 (file)
index 0000000..38c3523
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Error.gif differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Invoice.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Invoice.png
new file mode 100644 (file)
index 0000000..4551107
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Invoice.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Move.gif b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Move.gif
new file mode 100644 (file)
index 0000000..401bf86
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Move.gif differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/MoveDown.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/MoveDown.png
new file mode 100644 (file)
index 0000000..3761ff1
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/MoveDown.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/MoveLeft.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/MoveLeft.png
new file mode 100644 (file)
index 0000000..031d753
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/MoveLeft.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/NEWT.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/NEWT.png
new file mode 100644 (file)
index 0000000..373464b
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/NEWT.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/NEWT1.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/NEWT1.png
new file mode 100644 (file)
index 0000000..2daac22
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/NEWT1.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Partner.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Partner.png
new file mode 100644 (file)
index 0000000..c661339
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Partner.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Product.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Product.png
new file mode 100644 (file)
index 0000000..51451e4
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Product.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Project.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Project.png
new file mode 100644 (file)
index 0000000..0f8ea2a
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Project.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Sale.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Sale.png
new file mode 100644 (file)
index 0000000..1b0b44f
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Sale.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Search.gif b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Search.gif
new file mode 100644 (file)
index 0000000..b29c3cf
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Search.gif differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Success.gif b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Success.gif
new file mode 100644 (file)
index 0000000..fb3bff7
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Success.gif differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Task.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Task.png
new file mode 100644 (file)
index 0000000..52056b1
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/Task.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/developped_by.png b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/developped_by.png
new file mode 100644 (file)
index 0000000..54dc465
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/developped_by.png differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/overlay.css b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/overlay.css
new file mode 100755 (executable)
index 0000000..1f71b8f
--- /dev/null
@@ -0,0 +1,3 @@
+menuitem#tiny-plugin {\r
+  color: red !important;\r
+}
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/perform.gif b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/perform.gif
new file mode 100644 (file)
index 0000000..16cc387
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/perform.gif differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/tinyerp-icon.ico b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/tinyerp-icon.ico
new file mode 100644 (file)
index 0000000..b1e78c0
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/chrome/openerp_plugin/skin/tinyerp-icon.ico differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/components/nsXmlRpcClient.js b/addons/thunderbird/plugin/openerp_plugin/components/nsXmlRpcClient.js
new file mode 100755 (executable)
index 0000000..40347a9
--- /dev/null
@@ -0,0 +1,1039 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla XML-RPC Client component.
+ *
+ * The Initial Developer of the Original Code is
+ * Digital Creations 2, Inc.
+ * Portions created by the Initial Developer are Copyright (C) 2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Martijn Pieters <mj@digicool.com> (original author)
+ *   Samuel Sieb <samuel@sieb.net>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ *  nsXmlRpcClient XPCOM component
+ *  Version: $Revision: 1.39 $
+ *
+ *  $Id: nsXmlRpcClient.js,v 1.39 2006/10/24 16:02:01 silver%warwickcompsoc.co.uk Exp $
+ */
+
+/*
+ * Constants
+ */
+const XMLRPCCLIENT_CONTRACTID = '@mozilla.org/xml-rpc/client;1';
+const XMLRPCCLIENT_CID =
+    Components.ID('{4d7d15c0-3747-4f7f-b6b3-792a5ea1a9aa}');
+const XMLRPCCLIENT_IID = Components.interfaces.nsIXmlRpcClient;
+
+const XMLRPCFAULT_CONTRACTID = '@mozilla.org/xml-rpc/fault;1';
+const XMLRPCFAULT_CID =
+    Components.ID('{691cb864-0a7e-448c-98ee-4a7f359cf145}');
+const XMLRPCFAULT_IID = Components.interfaces.nsIXmlRpcFault;
+
+const XMLHTTPREQUEST_CONTRACTID = '@mozilla.org/xmlextras/xmlhttprequest;1';
+
+const NSICHANNEL = Components.interfaces.nsIChannel;
+
+const DEBUG = false;
+const DEBUGPARSE = false;
+
+const DOMNode = Components.interfaces.nsIDOMNode;
+/*
+ * Class definitions
+ */
+
+/* The nsXmlRpcFault class constructor. */
+function nsXmlRpcFault() {}
+
+/* the nsXmlRpcFault class def */
+nsXmlRpcFault.prototype = {
+    faultCode: 0,
+    faultString: '',
+
+    init: function(faultCode, faultString) {
+        this.faultCode = faultCode;
+        this.faultString = faultString;
+    },
+
+    toString: function() {
+        return '<XML-RPC Fault: (' + this.faultCode + ') ' +
+            this.faultString + '>';
+    },
+
+    // nsISupports interface
+    QueryInterface: function(iid) {
+        if (!iid.equals(Components.interfaces.nsISupports) &&
+            !iid.equals(XMLRPCFAULT_IID))
+            throw Components.results.NS_ERROR_NO_INTERFACE;
+        return this;
+    }
+};
+
+/* The nsXmlRpcClient class constructor. */
+function nsXmlRpcClient() {}
+
+/* the nsXmlRpcClient class def */
+nsXmlRpcClient.prototype = {
+    _serverUrl: null,
+    _useAuth: false,
+
+    init: function(serverURL) {
+        this._serverUrl = serverURL;
+        this._encoding = "UTF-8";
+    },
+
+    setAuthentication: function(username, password){
+        if ((typeof username == "string") &&
+            (typeof password == "string")){
+          this._useAuth = true;
+          this._username = username;
+          this._password = password;
+        }
+    },
+
+    clearAuthentication: function(){
+        this._useAuth = false;
+    },
+
+    setEncoding: function(encoding){
+        this._encoding = encoding;
+    },
+
+    get serverUrl() { return this._serverUrl; },
+
+    // Internal copy of the status
+    _status: null,
+    _listener: null,
+
+    asyncCall: function(listener, context, methodName, methodArgs, count) {
+        debug('asyncCall');
+        // Check for call in progress.
+        if (this._inProgress)   
+            return;
+            //throw Components.Exception('Call in progress!');
+
+        // Check for the server URL;
+        if (!this._serverUrl)
+            throw Components.Exception('Not initialized');
+
+        this._inProgress = true;
+
+        // Clear state.
+        this._foundFault = false;
+        this._passwordTried = false;
+        this._result = null;
+        this._fault = null;
+        this._status = null;
+        this._responseStatus = null;
+        this._responseString = null;
+        this._listener = listener;
+        this._seenStart = false;
+        this._context = context;
+        
+        debug('Arguments: ' + methodArgs);
+
+        // Generate request body
+        var xmlWriter = new XMLWriter(this._encoding);
+        this._generateRequestBody(xmlWriter, methodName, methodArgs);
+
+        var requestBody = xmlWriter.data;
+
+        debug('Request: ' + requestBody);
+
+        this.xmlhttp = Components.classes[XMLHTTPREQUEST_CONTRACTID]
+            .createInstance(Components.interfaces.nsIXMLHttpRequest);
+        if (this._useAuth) {
+            this.xmlhttp.open('POST', this._serverUrl, true,
+                              this._username, this._password);
+        } else {
+            this.xmlhttp.open('POST', this._serverUrl);
+        }
+        this.xmlhttp.onload = this._onload;
+        this.xmlhttp.onerror = this._onerror;
+        this.xmlhttp.parent = this;
+        this.xmlhttp.setRequestHeader('Content-Type','text/xml');
+        this.xmlhttp.send(requestBody);
+        var chan = this.xmlhttp.channel.QueryInterface(NSICHANNEL);
+        chan.notificationCallbacks = this;
+    },
+
+    _onload: function(e) {
+        var result;
+        var parent = e.target.parent;
+        parent._inProgress = false;
+        parent._responseStatus = e.target.status;
+        parent._responseString = e.target.statusText;
+        if (!e.target.responseXML) {
+            if (e.target.status) {
+                try {
+                    parent._listener.onError(parent, parent._context,
+                        Components.results.NS_ERROR_FAILURE,
+                        'Server returned status ' + e.target.status);
+                } catch (ex) {
+                    debug('Exception in listener.onError: ' + ex);
+                }
+            } else {
+                try {
+                    parent._listener.onError(parent, parent._context,
+                                      Components.results.NS_ERROR_FAILURE,
+                                      'Unknown network error');
+                } catch (ex) {
+                    debug('Exception in listener.onError: ' + ex);
+                }
+            }
+            return;
+        }
+        try {
+            e.target.responseXML.normalize();
+            result = parent.parse(e.target.responseXML);
+        } catch (ex) {
+            try {
+                parent._listener.onError(parent, parent._context,
+                                         ex.result, ex.message);
+            } catch (ex) {
+                debug('Exception in listener.onError: ' + ex);
+            }
+            return;
+        }
+        if (parent._foundFault) {
+            parent._fault = result;
+            try {
+                parent._listener.onFault(parent, parent._context, result);
+            } catch(ex) {
+                debug('Exception in listener.onFault: ' + ex);
+            }
+        } else {
+            parent._result = result.value;
+            try { 
+                parent._listener.onResult(parent, parent._context,
+                                          result.value);
+            } catch (ex) {
+                debug('Exception in listener.onResult: ' + ex);
+            }
+        }
+    },
+
+    _onerror: function(e) {
+        var parent = e.target.parent;
+        parent._inProgress = false;
+        try {
+            parent._listener.onError(parent, parent._context,
+                                Components.results.NS_ERROR_FAILURE,
+                                'Unknown network error');
+        } catch (ex) {
+            debug('Exception in listener.onError: ' + ex);
+        }
+    },
+    
+    _foundFault: false,
+
+    _fault: null,
+    _result: null,
+    _responseStatus: null,
+    _responseString: null,
+
+    get fault() { return this._fault; },
+    get result() { return this._result; },
+    get responseStatus() { return this._responseStatus; },
+    get responseString() { return this._responseString; },
+
+    /* Convenience. Create an appropriate XPCOM object for a given type */
+    INT:      1,
+    BOOLEAN:  2,
+    STRING:   3,
+    DOUBLE:   4,
+    DATETIME: 5,
+    ARRAY:    6,
+    STRUCT:   7,
+    BASE64:   8, // Not part of nsIXmlRpcClient interface, internal use.
+    createType: function(type, uuid) {
+        const SUPPORTSID = '@mozilla.org/supports-';
+        switch(type) {
+            case this.INT:
+                uuid.value = Components.interfaces.nsISupportsPRInt32
+                return createInstance(SUPPORTSID + 'PRInt32;1',
+                    'nsISupportsPRInt32');
+
+            case this.BOOLEAN:
+                uuid.value = Components.interfaces.nsISupportsPRBool
+                return createInstance(SUPPORTSID + 'PRBool;1',
+                    'nsISupportsPRBool');
+
+            case this.STRING:
+                uuid.value = Components.interfaces.nsISupportsCString
+                return createInstance(SUPPORTSID + 'cstring;1',
+                    'nsISupportsCString');
+
+            case this.DOUBLE:
+                uuid.value = Components.interfaces.nsISupportsDouble
+                return createInstance(SUPPORTSID + 'double;1',
+                    'nsISupportsDouble');
+
+            case this.DATETIME:
+                uuid.value = Components.interfaces.nsISupportsPRTime
+                return createInstance(SUPPORTSID + 'PRTime;1',
+                    'nsISupportsPRTime');
+
+            case this.ARRAY:
+                uuid.value = Components.interfaces.nsISupportsArray
+                return createInstance(SUPPORTSID + 'array;1',
+                    'nsISupportsArray');
+
+            case this.STRUCT:
+                uuid.value = Components.interfaces.nsIDictionary
+                return createInstance('@mozilla.org/dictionary;1', 
+                    'nsIDictionary');
+
+            default: throw Components.Exception('Unsupported type');
+        }
+    },
+
+    // nsISupports interface
+    QueryInterface: function(iid) {
+        if (!iid.equals(Components.interfaces.nsISupports) &&
+            !iid.equals(XMLRPCCLIENT_IID) &&
+            !iid.equals(Components.interfaces.nsIInterfaceRequestor))
+            throw Components.results.NS_ERROR_NO_INTERFACE;
+        return this;
+    },
+
+    // nsIInterfaceRequester interface
+    getInterface: function(iid, result){
+        if (iid.equals(Components.interfaces.nsIAuthPrompt)){
+            return this;
+        }
+        Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE;
+        return null;
+    },
+
+    // nsIAuthPrompt interface
+    _passwordTried: false,
+    promptUsernameAndPassword: function(dialogTitle, text, passwordRealm,
+                                        savePassword, user, pwd){
+
+        if (this._useAuth){
+            if (this._passwordTried){
+                return false;
+            }
+            user.value = this._username;
+            pwd.value = this._password;
+            this._passwordTried = true;
+            return true;
+        }
+        return false;
+    },
+
+    /* Generate the XML-RPC request body */
+    _generateRequestBody: function(writer, methodName, methodArgs) {
+        writer.startElement('methodCall');
+
+        writer.startElement('methodName');
+        writer.write(methodName);
+        writer.endElement('methodName');
+
+        writer.startElement('params');
+        for (var i = 0; i < methodArgs.length; i++) {
+            writer.startElement('param');
+            this._generateArgumentBody(writer, methodArgs[i]);
+            writer.endElement('param');
+        }
+        writer.endElement('params');
+
+        writer.endElement('methodCall');
+    },
+
+    /* Write out a XML-RPC parameter value */
+    _generateArgumentBody: function(writer, obj) {
+        writer.startElement('value');
+        var sType = this._typeOf(obj);
+        switch (sType) {
+            case 'PRUint8':
+            case 'PRUint16':
+            case 'PRInt16':
+            case 'PRInt32':
+                obj=obj.QueryInterface(Components.interfaces['nsISupports' +
+                    sType]);
+                writer.startElement('i4');
+                writer.write(obj.toString());
+                writer.endElement('i4');
+                break;
+
+            case 'PRBool':
+                obj=obj.QueryInterface(Components.interfaces.nsISupportsPRBool);
+                writer.startElement('boolean');
+                writer.write(obj.data ? '1' : '0');
+                writer.endElement('boolean');
+                break;
+
+            case 'Char':
+            case 'CString':
+                obj=obj.QueryInterface(Components.interfaces['nsISupports' +
+                    sType]);
+                writer.startElement('string');
+                writer.write(obj.toString());
+                writer.endElement('string');
+                break;
+
+            case 'Float':
+            case 'Double':
+                obj=obj.QueryInterface(Components.interfaces['nsISupports' +
+                    sType]);
+                writer.startElement('double');
+                writer.write(obj.toString());
+                writer.endElement('double');
+                break;
+
+            case 'PRTime':
+                obj = obj.QueryInterface(
+                    Components.interfaces.nsISupportsPRTime);
+                var date = new Date(obj.data)
+                writer.startElement('dateTime.iso8601');
+                writer.write(iso8601Format(date));
+                writer.endElement('dateTime.iso8601');
+                break;
+                
+            case 'InputStream':
+                obj = obj.QueryInterface(Components.interfaces.nsIInputStream);
+                obj = toScriptableStream(obj);
+                writer.startElement('base64');
+                streamToBase64(obj, writer);
+                writer.endElement('base64');
+                break;
+            
+            case 'Array':
+                obj = obj.QueryInterface(
+                    Components.interfaces.nsISupportsArray);
+                writer.startElement('array');
+                writer.startElement('data');
+                for (var i = 0; i < obj.Count(); i++)
+                    this._generateArgumentBody(writer, obj.GetElementAt(i));
+                writer.endElement('data');
+                writer.endElement('array');
+                break;
+
+            case 'Dictionary':
+                obj = obj.QueryInterface(Components.interfaces.nsIDictionary);
+                writer.startElement('struct');
+                var keys = obj.getKeys({});
+                for (var k = 0; k < keys.length; k++) {
+                    writer.startElement('member');
+                    writer.startElement('name');
+                    writer.write(keys[k]);
+                    writer.endElement('name');
+                    this._generateArgumentBody(writer, obj.getValue(keys[k]));
+                    writer.endElement('member');
+                }
+                writer.endElement('struct');
+                break;
+
+            default:
+                throw Components.Exception('Unsupported argument', null, null,
+                    obj);
+        }
+
+        writer.endElement('value');
+    },
+
+    /* Determine type of a nsISupports primitive, array or dictionary. */
+    _typeOf: function(obj) {
+        // XPConnect alows JS to pass in anything, because we are a regular
+        // JS object to it. So we have to test rigorously.
+        if (typeof obj != 'object') return 'Unknown';
+
+        // Anything else not nsISupports is not allowed.
+        if (typeof obj.QueryInterface != 'function') return 'Unknown';
+
+        // Now we will have to eliminate by trying all possebilities.
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRUint8);
+            return 'PRUint8';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRUint16);
+            return 'PRUint16';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRInt16);
+            return 'PRInt16';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+            return 'PRInt32';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRBool);
+            return 'PRBool';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsChar);
+            return 'Char';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsCString);
+            return 'CString';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsFloat);
+            return 'Float';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsDouble);
+            return 'Double';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsPRTime);
+            return 'PRTime';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsIInputStream);
+            return 'InputStream';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsISupportsArray);
+            return 'Array';
+        } catch(e) {}
+        
+        try {
+            obj.QueryInterface(Components.interfaces.nsIDictionary);
+            return 'Dictionary';
+        } catch(e) {}
+        
+        // Not a supported type
+        return 'Unknown';
+    },
+
+    // Response parsing state
+    _valueStack: [],
+    _currValue: null,
+    _cdata: null,
+
+    parse: function(doc) {
+        var node = doc.firstChild;
+        var result;
+        if (node.nodeType == DOMNode.TEXT_NODE)
+            node = node.nextSibling;
+        if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
+            (node.nodeName != 'methodResponse')) {
+            throw Components.Exception('Expecting a methodResponse', null, null,
+                                       doc);
+        }
+        node = node.firstChild;
+        if (node.nodeType == DOMNode.TEXT_NODE)
+            node = node.nextSibling;
+        if (node.nodeType != DOMNode.ELEMENT_NODE)
+            throw Components.Exception('Expecting a params or fault', null,
+                                       null, doc);
+        if (node.nodeName == 'params') {
+            node = node.firstChild;
+            if (node.nodeType == DOMNode.TEXT_NODE)
+                node = node.nextSibling;
+            if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
+                (node.nodeName != 'param')) {
+                throw Components.Exception('Expecting a param', null, null,
+                                           doc);
+            }
+            result = this.parseValue(node.firstChild);
+        } else if (node.nodeName == 'fault') {
+            this._foundFault = true;
+            result = this.parseFault(node.firstChild);
+        } else {
+            throw Components.Exception('Expecting a params or fault', null,
+                                       null, doc);
+        }
+        debug('Parse finished');
+        return result;
+    },
+
+    parseValue: function(node) {
+        var cValue = new Value();
+        if (node && (node.nodeType == DOMNode.TEXT_NODE))
+            node = node.nextSibling;
+        if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
+            (node.nodeName != 'value')) {
+            throw Components.Exception('Expecting a value', null, null, node);
+        }
+        node = node.firstChild;
+        if (!node)
+            return cValue;
+        if (node.nodeType == DOMNode.TEXT_NODE){
+            if (!node.nextSibling) {
+                cValue.value = node.nodeValue;
+                return cValue;
+            } else {
+                node = node.nextSibling;
+            }
+        }
+        if (node.nodeType != DOMNode.ELEMENT_NODE)
+            throw Components.Exception('Expecting a value type', null, null,
+                                       node);
+        switch (node.nodeName) {
+            case 'string':
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'i4':
+            case 'int':
+                cValue.type = this.INT;
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'boolean':
+                cValue.type = this.BOOLEAN;
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'double':
+                cValue.type = this.DOUBLE;
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'dateTime.iso8601':
+                cValue.type = this.DATETIME;
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'base64':
+                cValue.type = this.BASE64;
+                cValue.value = this.parseString(node.firstChild);
+                break;
+            case 'struct':
+                cValue.type = this.STRUCT;
+                this.parseStruct(cValue, node.firstChild);
+                break;
+            case 'array':
+                cValue.type = this.ARRAY;
+                this.parseArray(cValue, node.firstChild);
+                break;
+            default:
+                throw Components.Exception('Expecting a value type', null, null,
+                                           node);
+        }
+        return cValue;
+    },
+
+    parseString: function(node) {
+        value = '';
+        while (node) {
+            if (node.nodeType != DOMNode.TEXT_NODE)
+                throw Components.Exception('Expecting a text node', null, null,
+                                           node);
+            value += node.nodeValue; 
+            node = node.nextSibling;
+        }
+        return value;
+    },
+
+    parseStruct: function(struct, node) {
+        while (node) {
+            if (node.nodeType == DOMNode.TEXT_NODE)
+                node = node.nextSibling;
+            if (!node)
+                return;
+            if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
+                (node.nodeName != 'member')) {
+                throw Components.Exception('Expecting a member', null, null,
+                                           node);
+            }
+            this.parseMember(struct, node.firstChild);
+            node = node.nextSibling;
+        }
+    },
+
+    parseMember: function(struct, node) {
+        var cValue;
+        if (node.nodeType == DOMNode.TEXT_NODE)
+            node = node.nextSibling;
+        if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
+            (node.nodeName != 'name')) {
+            throw Components.Exception('Expecting a name', null, null, node);
+        }
+        struct.name = this.parseString(node.firstChild);
+        cValue = this.parseValue(node.nextSibling);
+        struct.appendValue(cValue.value);
+    },
+
+    parseArray: function(array, node) {
+        if (node.nodeType == DOMNode.TEXT_NODE)
+            node = node.nextSibling;
+        if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
+            (node.nodeName != 'data')) {
+            throw Components.Exception('Expecting array data', null, null, node);
+        }
+        for (node = node.firstChild; node; node = node.nextSibling) {
+            if (node.nodeType == DOMNode.TEXT_NODE)
+                continue;
+            array.appendValue(this.parseValue(node).value);
+        }
+    },
+
+    parseFault: function(node) {
+        var fault = createInstance(XMLRPCFAULT_CONTRACTID, 'nsIXmlRpcFault');
+        var cValue = this.parseValue(node);
+        if ((cValue.type != this.STRUCT) ||
+            (!cValue.value.hasKey('faultCode')) ||
+            (!cValue.value.hasKey('faultString'))) {
+            throw Components.Exception('Invalid fault', null, null, node);
+        }
+        fault.init(cValue.value.getValue('faultCode').data,
+                   cValue.value.getValue('faultString').data);
+        return fault;
+    }
+};
+
+/* The XMLWriter class constructor */
+function XMLWriter(encoding) {
+    if (!encoding)
+        encoding = "UTF-8";
+    this.data = '<?xml version="1.0" encoding="' + encoding + '"?>';
+}
+
+/* The XMLWriter class def */
+XMLWriter.prototype = {
+    data: '',
+    
+    startElement: function(element) {
+        this.data += '<' + element + '>';
+    },
+
+    endElement: function(element) {
+        this.data += '</' + element + '>';
+    },
+    
+    write: function(text) {
+        for (var i = 0; i < text.length; i++) {
+            var c = text[i];
+            switch (c) {
+                case '<':
+                    this.data += '&lt;';
+                    break;
+                case '&':
+                    this.data += '&amp;';
+                    break;
+                default:
+                    this.data += c;
+            }
+        }
+    },
+
+    markup: function(text) { this.data += text }
+};
+
+/* The Value class contructor */
+function Value() { this.type = this.STRING; };
+
+/* The Value class def */
+Value.prototype = {
+    INT:      nsXmlRpcClient.prototype.INT,
+    BOOLEAN:  nsXmlRpcClient.prototype.BOOLEAN,
+    STRING:   nsXmlRpcClient.prototype.STRING,
+    DOUBLE:   nsXmlRpcClient.prototype.DOUBLE,
+    DATETIME: nsXmlRpcClient.prototype.DATETIME,
+    ARRAY:    nsXmlRpcClient.prototype.ARRAY,
+    STRUCT:   nsXmlRpcClient.prototype.STRUCT,
+    BASE64:   nsXmlRpcClient.prototype.BASE64,
+    
+    _createType: nsXmlRpcClient.prototype.createType,
+
+    name: null,
+    
+    _value: null,
+    get value() { return this._value; },
+    set value(val) {
+        // accepts [0-9]+ or x[0-9a-fA-F]+ and returns the character.
+        function entityTrans(substr, code) {
+            return String.fromCharCode("0" + code);
+        }
+        
+        switch (this.type) {
+            case this.STRING:
+                val = val.replace(/&#([0-9]+);/g, entityTrans);
+                val = val.replace(/&#(x[0-9a-fA-F]+);/g, entityTrans);
+                val = val.replace(/&lt;/g, '<');
+                val = val.replace(/&gt;/g, '>');
+                val = val.replace(/&amp;/g, '&');
+                this._value.data = val;
+                break;
+        
+            case this.BOOLEAN:
+                this._value.data = (val == 1);
+                break;
+
+            case this.DATETIME:
+                this._value.data = Date.UTC(val.slice(0, 4), 
+                    val.slice(4, 6) - 1, val.slice(6, 8), val.slice(9, 11),
+                    val.slice(12, 14), val.slice(15));
+                break;
+
+            case this.BASE64:
+                this._value.data = base64ToString(val);
+                break;
+
+            default:
+                this._value.data = val;
+        }
+    },
+
+    _type: null,
+    get type() { return this._type; },
+    set type(type) { 
+        this._type = type;
+        if (type == this.BASE64) 
+            this._value = this._createType(this.STRING, {});
+        else this._value = this._createType(type, {});
+    },
+
+    appendValue: function(val) {
+        switch (this.type) {
+            case this.ARRAY:
+                this.value.AppendElement(val);
+                break;
+
+            case this.STRUCT:
+                this.value.setValue(this.name, val);
+                break;
+        }
+    }
+};
+
+/*
+ * Objects
+ */
+
+/* nsXmlRpcClient Module (for XPCOM registration) */
+var nsXmlRpcClientModule = {
+    registerSelf: function(compMgr, fileSpec, location, type) {
+        compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
+
+        compMgr.registerFactoryLocation(XMLRPCCLIENT_CID, 
+                                        'XML-RPC Client JS component', 
+                                        XMLRPCCLIENT_CONTRACTID, 
+                                        fileSpec,
+                                        location, 
+                                        type);
+        compMgr.registerFactoryLocation(XMLRPCFAULT_CID, 
+                                        'XML-RPC Fault JS component', 
+                                        XMLRPCFAULT_CONTRACTID, 
+                                        fileSpec,
+                                        location, 
+                                        type);
+    },
+
+    getClassObject: function(compMgr, cid, iid) {
+        if (!cid.equals(XMLRPCCLIENT_CID) && !cid.equals(XMLRPCFAULT_CID))
+            throw Components.results.NS_ERROR_NO_INTERFACE;
+
+        if (!iid.equals(Components.interfaces.nsIFactory))
+            throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
+
+        if (cid.equals(XMLRPCCLIENT_CID))
+            return nsXmlRpcClientFactory
+        else return nsXmlRpcFaultFactory;
+    },
+
+    canUnload: function(compMgr) { return true; }
+};
+
+/* nsXmlRpcClient Class Factory */
+var nsXmlRpcClientFactory = {
+    createInstance: function(outer, iid) {
+        if (outer != null)
+            throw Components.results.NS_ERROR_NO_AGGREGATION;
+    
+        if (!iid.equals(XMLRPCCLIENT_IID) &&
+            !iid.equals(Components.interfaces.nsISupports))
+            throw Components.results.NS_ERROR_INVALID_ARG;
+
+        return new nsXmlRpcClient();
+    }
+}
+
+/* nsXmlRpcFault Class Factory */
+var nsXmlRpcFaultFactory = {
+    createInstance: function(outer, iid) {
+        if (outer != null)
+            throw Components.results.NS_ERROR_NO_AGGREGATION;
+
+        if (!iid.equals(XMLRPCFAULT_IID) &&
+            !iid.equals(Components.interfaces.nsISupports))
+            throw Components.results.NS_ERROR_INVALID_ARG;
+
+        return new nsXmlRpcFault();
+    }
+}
+
+/*
+ * Functions
+ */
+
+/* module initialisation */
+function NSGetModule(comMgr, fileSpec) { return nsXmlRpcClientModule; }
+
+/* Create an instance of the given ContractID, with given interface */
+function createInstance(contractId, intf) {
+    return Components.classes[contractId]
+        .createInstance(Components.interfaces[intf]);
+}
+
+/* Get a pointer to a service indicated by the ContractID, with given interface */
+function getService(contractId, intf) {
+    return Components.classes[contractId]
+        .getService(Components.interfaces[intf]);
+}
+
+/* Convert an inputstream to a scriptable inputstream */
+function toScriptableStream(input) {
+    var SIStream = Components.Constructor(
+        '@mozilla.org/scriptableinputstream;1',
+        'nsIScriptableInputStream', 'init');
+    return new SIStream(input);
+}
+
+/* format a Date object into a iso8601 datetime string, UTC time */
+function iso8601Format(date) {
+    var datetime = date.getUTCFullYear();
+    var month = String(date.getUTCMonth() + 1);
+    datetime += (month.length == 1 ?  '0' + month : month);
+    var day = date.getUTCDate();
+    datetime += (day < 10 ? '0' + day : day);
+
+    datetime += 'T';
+
+    var hour = date.getUTCHours();
+    datetime += (hour < 10 ? '0' + hour : hour) + ':';
+    var minutes = date.getUTCMinutes();
+    datetime += (minutes < 10 ? '0' + minutes : minutes) + ':';
+    var seconds = date.getUTCSeconds();
+    datetime += (seconds < 10 ? '0' + seconds : seconds);
+
+    return datetime;
+}
+
+/* Convert a stream to Base64, writing it away to a string writer */
+const BASE64CHUNK = 255; // Has to be dividable by 3!!
+function streamToBase64(stream, writer) {
+    while (stream.available()) {
+        var data = [];
+        while (data.length < BASE64CHUNK && stream.available()) {
+            var d = stream.read(1).charCodeAt(0);
+            // reading a 0 results in NaN, compensate.
+            data = data.concat(isNaN(d) ? 0 : d);
+        }
+        writer.write(toBase64(data));
+    }
+}
+
+/* Convert data (an array of integers) to a Base64 string. */
+const toBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' +
+    '0123456789+/';
+const base64Pad = '=';
+function toBase64(data) {
+    var result = '';
+    var length = data.length;
+    var i;
+    // Convert every three bytes to 4 ascii characters.
+    for (i = 0; i < (length - 2); i += 3) {
+        result += toBase64Table[data[i] >> 2];
+        result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)];
+        result += toBase64Table[((data[i+1] & 0x0f) << 2) + (data[i+2] >> 6)];
+        result += toBase64Table[data[i+2] & 0x3f];
+    }
+
+    // Convert the remaining 1 or 2 bytes, pad out to 4 characters.
+    if (length%3) {
+        i = length - (length%3);
+        result += toBase64Table[data[i] >> 2];
+        if ((length%3) == 2) {
+            result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)];
+            result += toBase64Table[(data[i+1] & 0x0f) << 2];
+            result += base64Pad;
+        } else {
+            result += toBase64Table[(data[i] & 0x03) << 4];
+            result += base64Pad + base64Pad;
+        }
+    }
+
+    return result;
+}
+
+/* Convert Base64 data to a string */
+const toBinaryTable = [
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+    -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
+    52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1,
+    -1, 0, 1, 2,  3, 4, 5, 6,  7, 8, 9,10, 11,12,13,14,
+    15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
+    -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
+    41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
+];
+function base64ToString(data) {
+    var result = '';
+    var leftbits = 0; // number of bits decoded, but yet to be appended
+    var leftdata = 0; // bits decoded, but yet to be appended
+
+    // Convert one by one.
+    for (var i = 0; i < data.length; i++) {
+        var c = toBinaryTable[data.charCodeAt(i) & 0x7f];
+        var padding = (data[i] == base64Pad);
+        // Skip illegal characters and whitespace
+        if (c == -1) continue;
+        
+        // Collect data into leftdata, update bitcount
+        leftdata = (leftdata << 6) | c;
+        leftbits += 6;
+
+        // If we have 8 or more bits, append 8 bits to the result
+        if (leftbits >= 8) {
+            leftbits -= 8;
+            // Append if not padding.
+            if (!padding)
+                result += String.fromCharCode((leftdata >> leftbits) & 0xff);
+            leftdata &= (1 << leftbits) - 1;
+        }
+    }
+
+    // If there are any bits left, the base64 string was corrupted
+    if (leftbits)
+        throw Components.Exception('Corrupted base64 string');
+
+    return result;
+}
+
+if (DEBUG) debug = function(msg) { 
+    dump(' -- XML-RPC client -- : ' + msg + '\n'); 
+};
+else debug = function() {}
+
+// vim:sw=4:sr:sta:et:sts:
diff --git a/addons/thunderbird/plugin/openerp_plugin/components/xml-rpc.xpt b/addons/thunderbird/plugin/openerp_plugin/components/xml-rpc.xpt
new file mode 100755 (executable)
index 0000000..8e59aa2
Binary files /dev/null and b/addons/thunderbird/plugin/openerp_plugin/components/xml-rpc.xpt differ
diff --git a/addons/thunderbird/plugin/openerp_plugin/defaults/preferences/tiny.js b/addons/thunderbird/plugin/openerp_plugin/defaults/preferences/tiny.js
new file mode 100755 (executable)
index 0000000..ca8332c
--- /dev/null
@@ -0,0 +1,56 @@
+
+pref("extensions.tiny.serverurl", "http://localhost");
+pref("extensions.tiny.serverport", "8069");
+pref("extensions.tiny.serverdbname", "terp");
+pref("extensions.tiny.username","admin");
+pref("extensions.tiny.password","admin");
+pref("extensions.tiny.senderemail","");
+pref("extensions.tiny.sendername","");
+pref("extensions.tiny.receiveremail","");
+pref("extensions.tiny.subject","");
+pref("extensions.tiny.receiveddate","");
+pref("extensions.tiny.partnerid","");
+pref("extensions.tiny.contactid","");
+pref("extensions.tiny.attachvalue","");
+pref("extensions.tiny.cclist","");
+pref("extensions.tiny.messagebody","");
+pref("extensions.tiny.displayName","");
+pref("extensions.tiny.attachmentdata","");
+pref("extensions.tiny.userid",3);
+pref("extensions.tiny.partnername","");
+pref("extensions.tiny.officeno","");
+pref("extensions.tiny.phoneno","");
+pref("extensions.tiny.address","");
+pref("extensions.tiny.listobject","Partner,Partner Address,Accout Invoice,Project,Product,Account,Sale Order,Project Task");
+pref("extensions.tiny.object","res.partner,res.partner.address,account.invoice,project.project,product.product,account.account,sale.order,project.task");
+pref("extensions.tiny.imagename","chrome://openerp_plugin/skin/Partner.png,chrome://openerp_plugin/skin/Contact.png,chrome://openerp_plugin/skin/Invoice.png,chrome://openerp_plugin/skin/Project.png,chrome://openerp_plugin/skin/Product.png,chrome://openerp_plugin/skin/Account.png,chrome://openerp_plugin/skin/Sale.png,chrome://openerp_plugin/skin/Case.png,chrome://openerp_plugin/skin/Task.png");
+pref("extensions.tiny.attachmentlength","");
+pref("extensions.tiny.attachment","");
+pref("extensions.tiny.db_list","false");
+pref("extensions.tiny.connect_server","false");
+pref("extensions.tiny.module_install","yes");
+pref("extensions.tiny.serverprotocol", "false");
+
+
+
+pref("mboximport.export.filenames_toascii", false);
+pref("mboximport.export.overwrite", false);
+pref("mboximport.confirm.before_mbox_import", true);
+pref("mboximport.clipboard.always_just_text", false);
+pref("mboximport.export.HTML_as_displayed", false);
+pref("mboximport.exportEML.filename_format", 0);
+pref("mboximport.delay.clean_statusbar", 5000);
+pref("mboximport.subject.max_length", 50);
+pref("mboximport.author.max_length", 50);
+pref("mboximport.recipients.max_length", 50);
+pref("extensions.{3ed8cc52-86fc-4613-9026-c1ef969da4c3}.description", "chrome://mboximport/locale/mboximport.properties");
+pref("mboximport.export.set_filetime", false);
+pref("mboximport.exportEML.use_dir", false);
+pref("mboximport.exportMBOX.use_dir", false);
+pref("mboximport.exportMSG.use_dir", false);
+pref("mboximport.export.filenames_addtime", false);
+pref("mboximport.export_all.warning1", true);
+pref("mboximport.export_all.warning2", true);
+
+pref("mboximport.exportMSG.dir", "/tmp");
+
diff --git a/addons/thunderbird/plugin/openerp_plugin/install.js b/addons/thunderbird/plugin/openerp_plugin/install.js
new file mode 100755 (executable)
index 0000000..50e4b30
--- /dev/null
@@ -0,0 +1,105 @@
+// constants
+const APP_DISPLAY_NAME = "OpenERP Thunderbird Plugins";
+const APP_NAME = "OpenERP";
+const APP_VERSION = "1.0";
+const WARNING = "WARNING: You need administrator privileges to install OpenERP Thunderbird Plugin. It will be installed in the application directory for all users.";
+const VERSION_ERROR = "This extension can only be installed in a version higher than 2.0";
+const NOT_WRITABLE_ERROR = "This extension requires write access to the application directory to install properly."
+const locales = [
+       "en-US",
+       null
+];
+
+// Gecko 1.7 doesn't support custom button labels
+var incompatible = (typeof Install.BUTTON_POS_0 == "undefined");
+if (incompatible)
+       alert(VERSION_ERROR);
+
+if (!incompatible) {
+       // Check whether all directories can be accessed
+       var dirList = [
+               getFolder("Components"),
+               getFolder(getFolder("Program", "defaults"), "pref")
+       ];
+       for (var i = 0; i < dirList.length; i++)
+               if (!File.isWritable(dirList[i]))
+                       incompatible = true;
+
+       if (incompatible)
+               alert(NOT_WRITABLE_ERROR);
+}
+
+if (!incompatible && confirm(WARNING, APP_DISPLAY_NAME)) {
+       /* Pre-Install Cleanup (for prior versions) */
+
+       // List of files to be checked
+       var checkFiles = [
+               [getFolder("Components"), "nsXmlRpcClient.js"],            // Root component
+               [getFolder("Components"), "xml-rpc.xpt"],           // Component interface
+                       ];
+
+       // Remove any existing files
+       initInstall("pre-install", "/rename", "0.0");  // open dummy-install
+       for (var i = 0 ; i < checkFiles.length ; i++) {
+               var currentDir = checkFiles[i][0];
+               var name = checkFiles[i][1];
+               var oldFile = getFolder(currentDir, name);
+
+               // Find a name to rename the file into
+               var newName = name + "-uninstalled";
+               for (var n = 1; File.exists(oldFile) && File.exists(getFolder(currentDir, newName)); n++)
+                       newName = name + n + "-uninstalled";
+
+               if (File.exists(oldFile))
+                       File.rename(oldFile, newName);
+       }
+       performInstall(); // commit renamed files
+
+       /* Main part of the installation */
+
+       var chromeType = DELAYED_CHROME;
+
+       var files = [
+               ["components/nsXmlRpcClient.js", getFolder("Components")],
+               ["components/xml-rpc.xpt", getFolder("Components")],
+               ["defaults/preferences/tiny.js", getFolder(getFolder("Program", "defaults"), "pref")],
+       ];
+
+       // initialize our install
+       initInstall(APP_NAME, APP_PACKAGE, APP_VERSION);
+
+       // Add files
+       for (var i = 0; i < files.length; i++)
+               addFile(APP_NAME, APP_VERSION, files[i][0], files[i][1], null);
+
+       try {
+               var err = registerChrome(CONTENT | chromeType, jar, "content/");
+               if (err != SUCCESS)
+                       throw "Chrome registration for content failed (error code " + err + ").";
+
+               err = registerChrome(SKIN | chromeType, jar, "skin/classic/");
+               if (err != SUCCESS)
+                       throw "Chrome registration for skin failed (error code " + err + ").";
+
+               for (i = 0; i < locales.length; i++) {
+                       if (!locales[i])
+                               continue;
+
+                       err = registerChrome(LOCALE | chromeType, jar, "locale/" + locales[i] + "/");
+                       if (err != SUCCESS)
+                               throw "Chrome registration for " + locales[i] + " locale failed (error code " + err + ").";
+               }
+
+               var err = performInstall();
+               if (err != SUCCESS && err != 999)
+                       throw "Committing installation failed (error code " + err + ").";
+
+               alert("OpenERP Thunderbird Plugin " + APP_VERSION + " is now installed.\n" +
+                                       "It will become active after you restart your browser.");
+       }
+       catch (ex) {
+               alert("Installation failed: " + ex + "\n" +
+                                       "You probably don't have the necessary permissions (log in as system administrator).");
+               cancelInstall(err);
+       }
+}
diff --git a/addons/thunderbird/plugin/openerp_plugin/install.rdf b/addons/thunderbird/plugin/openerp_plugin/install.rdf
new file mode 100755 (executable)
index 0000000..07fdd11
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>\r
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
+     xmlns:em="http://www.mozilla.org/2004/em-rdf#">\r
+  <Description about="urn:mozilla:install-manifest">\r
+    <em:id>{d57f315a-9f5d-4366-a530-a769a4a8c949}</em:id>\r
+    <em:iconURL>chrome://openerp_plugin/skin/tinyerp-icon.ico</em:iconURL>\r
+    <em:name>OpenERP Plugin for Thunderbird 2.0</em:name>\r
+    <em:version>1.0</em:version>\r
+    <em:description>OpenERP Thunderbird Integration</em:description>\r
+    <em:creator>OpenERP SA</em:creator>\r
+    <!-- optional items -->\r
+    <em:homepageURL>http://openerp.com</em:homepageURL>\r
+    <!-- Thunderbird -->\r
+    <em:targetApplication>\r
+      <Description>\r
+        <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>\r
+        <em:minVersion>2.0</em:minVersion>\r
+        <em:maxVersion>3.0.*</em:maxVersion>\r
+      </Description>\r
+    </em:targetApplication>\r
+  </Description>\r
+</RDF>\r
diff --git a/addons/thunderbird/plugin/tiny_plugin-2.0.xpi b/addons/thunderbird/plugin/tiny_plugin-2.0.xpi
deleted file mode 100644 (file)
index e39b655..0000000
Binary files a/addons/thunderbird/plugin/tiny_plugin-2.0.xpi and /dev/null differ
index f5b3247..0a6c192 100644 (file)
@@ -1,2 +1,2 @@
 "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_tinythunderbird_partner","tinythunderbird.partner","model_tinythunderbird_partner",,1,1,1,1
+
index 8b9f8fa..834ac7c 100644 (file)
@@ -9,13 +9,13 @@
       <field name="arch" type="xml">
           <data>
               <form position="attributes">
-                  <attribute name="string">Thunderbird Plug-In Installation</attribute>
+                  <attribute name="string">Thunderbird Module Installation</attribute>
               </form>
               <separator string="title" position="attributes">
                    <attribute name="string">Thunderbird</attribute>
               </separator>
               <xpath expr="//label[@string='description']" position="attributes">
-                  <attribute name="string">This module allows you to archive an e-mail on one or more objects of OpenERP. You can attach an email to a partner, a task, an analytic account or any other object. You can also create a new document like a lead, a phone call, claim and many more.</attribute>
+                  <attribute name="string">This module allows you to archive an e-mail on one or more objects of OpenERP. You can attach an email to a partner, a task, an analytic account or any other object. You can also create a new object like a lead, a phone call, claim and many more.</attribute>
               </xpath>
              <xpath expr="//button[@string='Install Modules']" position="attributes">
                <attribute name="string">Configure</attribute>