initial commit
[namibia] / public / js / app / brochure-workspace / register.js
1 ;(function(){
2
3         window._w.register = {
4
5                 itemId     : null,
6                 itemData   : null,
7                 formMeta   : null,
8                 ti         : null,
9                 counter    : 0,
10                 ownerCount : 0,
11                 owners     : {},
12
13                 onTemplateReady : function( template, event, eventData )
14                 {
15                         _w.register.ti = _t[template];
16                         _w.register.limited = ('limitedregister' == template)
17                                 ? true
18                                 : false;
19
20                         App.DataStore.setData('companytypes', [
21                            {"value":"Limited", "label":"Limited"},
22                            {"value":"PTY Limited", "label":"PTY Limited"},
23                            {"value":"Closed Corporation", "label":"Closed Corporation"},
24                            {"value":"Sole Proprietor", "label":"Sole Proprietor"}
25                            ]);
26                         App.DataStore.setData('dealertypes', [
27                            {"value":"Dealer", "label":"Dealer"},
28                            {"value":"Wholesale / Trader", "label":"Wholesale / Trader"},
29                            {"value":"Trade Center", "label":"Trade Center"}
30                            ]);
31                         App.DataStore.setData('clienttypes', [
32                   {"value":"Buyer", "label":"Buyer"},
33                   {"value":"Buyer & Seller", "label":"Buyer & Seller"}
34                   ]);
35                         App.DataStore.setData('companyturnover', [
36                   {"value":"Turnover > R500,000", "label":"Turnover > R500,000"},
37                   {"value":"Turnover > R2,000,000", "label":"Turnover > R2,000,000"},
38                   {"value":"Turnover > R3,000,000", "label":"Turnover > R3,000,000"}
39                   ]);
40                         App.DataStore.loadSelectListData('permissions', true, 'User', 'Permissions.SelectList');
41                         App.DataStore.loadSelectListData('countries', true, 'Location', 'Country.SelectList');
42                         App.DataStore.loadSelectListData('groups', true, 'Company', 'Group.SelectList');
43                         App.DataStore.loadSelectListData('foundmethods', true, 'Company', 'FoundMethod.SelectList');
44
45
46
47                         _w.register.setRegisterViewFormMeta();
48                         _w.register.ti.hydrate(_w.register.formMeta);
49                         App.API.getTask(
50                                 'register', 'User', 'Registration.RegisterFull', null,
51                                 {}, function() {}, _w.taskContractError
52                         );
53
54                 },
55
56                 onTemplatePublished : function( template, event, eventData )
57                 {
58                         _w.register.ti = _t[template];
59                         _w.register.setRegisterViewFormMeta();
60                         _w.register.ti.hydrate(_w.register.formMeta);
61                         _w.register._setupValidation();
62                         $('#btnAddOwner').click(_w.register.addOwner);
63                 },
64
65                 setRegisterViewFormMeta : function( data )
66                 {
67                         if (!data)
68                         {
69                                 data = {};
70                         }
71                         _w.register.formMeta = {
72                                 // User details
73                                 'firstName' : {
74                                         type  : 'input',
75                                         id    : 'firstName',
76                                         title : 'Name',
77                                         value : '',
78                                         maxlength : 100
79                                 },
80                                 'familyName' : {
81                                         type  : 'input',
82                                         id    : 'familyName',
83                                         title : 'Surname',
84                                         value : '',
85                                         maxlength : 100
86                                 },
87                                 'permissions' : {
88                                         type        : 'select',
89                                         id          : 'permissions',
90                                         title       : 'User type',
91                                         value       : '',
92                                         dataStoreId : 'permissions'
93                                 },
94                                 'email' : {
95                                         type  : 'input',
96                                         id    : 'email',
97                                         title : 'Email address',
98                                         value : '',
99                                         maxlength : 255
100                                 },
101                                 'confirmEmail' : {
102                                         type  : 'input',
103                                         id    : 'confirmEmail',
104                                         title : 'Confirm email address',
105                                         value : '',
106                                         maxlength : 255
107                                 },
108                                 'pin' : {
109                                         type  : 'input',
110                                         id    : 'pin',
111                                         title : '4 Digit pin',
112                                         value : '',
113                                         maxlength : 5
114                                 },
115                                 'confirmPin' : {
116                                         type  : 'input',
117                                         id    : 'confirmPin',
118                                         title : 'Confirm 4 digit pin',
119                                         value : '',
120                                         maxlength : 5
121                                 },
122                                 'idNumber' : {
123                                         type  : 'input',
124                                         id    : 'idNumber',
125                                         title : 'ID Number',
126                                         value : '',
127                                         maxlength : 13,
128                                         onChange  : function() {
129                                                 var dig = $(this).val().substring(0, 6);
130                                                 $('#dateOfBirth').val(
131                                                                 '19' + dig.substring(0, 2) +
132                                                                 '-' + dig.substring(2, 4) +
133                                                                 '-' + dig.substring(4, 6)
134                                                                 );
135                                         }
136                                 },
137                                 'dateOfBirth' : {
138                                         type  : 'date',
139                                         id    : 'dateOfBirth',
140                                         title : 'Date of birth',
141                                         style : 'datepicker',
142                                         value : ''
143                                 },
144                                 'mobile' : {
145                                         type  : 'mobile',
146                                         id    : 'mobile',
147                                         title : 'Mobile number',
148                                         value : '',
149                                         maxlength : 20
150                                 },
151
152                                 // Dealership contact
153                                 'contactFirstName' : {
154                                         type  : 'input',
155                                         id    : 'contactFirstName',
156                                         title : 'Name',
157                                         value : '',
158                                         maxlength : 50
159                                 },
160                                 'contactFamilyName' : {
161                                         type  : 'input',
162                                         id    : 'contactFamilyName',
163                                         title : 'Surname',
164                                         value : '',
165                                         maxlength : 50
166                                 },
167                                 'contactOffice' : {
168                                         type  : 'input',
169                                         id    : 'contactOffice',
170                                         title : 'Landline',
171                                         value : '',
172                                         maxlength : 20
173                                 },
174                                 'contactMobile' : {
175                                         type  : 'mobile',
176                                         id    : 'contactMobile',
177                                         title : 'Mobile number',
178                                         value : '',
179                                         maxlength : 20
180                                 },
181                                 'contactEmail' : {
182                                         type  : 'input',
183                                         id    : 'contactEmail',
184                                         title : 'Email',
185                                         value : '',
186                                         maxlength : 255
187                                 },
188
189                                 // Dealership details
190                                 'dealerType' : {
191                                         type  : 'select',
192                                         id    : 'dealerType',
193                                         title : 'Registration type',
194                                         value : '',
195                                         dataStoreId : 'dealertypes'
196                                 },
197                                 'clientType' : {
198                                         type  : 'select',
199                                         id    : 'clientType',
200                                         title : 'Register as',
201                                         value : '',
202                                         dataStoreId : 'clienttypes'
203                                 },
204                                 'group' : {
205                                         type  : 'select',
206                                         id    : 'group',
207                                         title : 'Group Member',
208                                         value : '',
209                                         dataStoreId : 'groups',
210                                         onChange    : function () {
211                                                 if (!App.DataStore.getItem('BuildSelect:group', false))
212                                                 {
213                                                         var groupId = $('#group').val();
214                                                         App.DataStore.loadSelectListData(
215                                                                         'groupdivisions', false, 'Company', 'GroupDivision.SelectList',
216                                                                         null, {Filter: {group: groupId}}
217                                                                         );
218                                                 }
219                                         }
220                                 },
221                                 'groupDivision' : {
222                                         type  : 'select',
223                                         id    : 'groupDivision',
224                                         title : 'Group Division',
225                                         value : '',
226                                         dataStoreId : 'groupdivisions'
227                                 },
228                                 'companyType' : {
229                                         type  : 'select',
230                                         id    : 'companyType',
231                                         title : 'Company type',
232                                         value : '',
233                                         dataStoreId : 'companytypes',
234                                         onChange    : function() {
235                                                 if (!App.DataStore.getItem('BuildSelect:companyType', false))
236                                                 {
237                                                         if ('Sole Proprietor' == $(this).val())
238                                                         {
239                                                                 $('#' + _w.register.ti.tid + '_docCopyOfDirectorId').hide();
240                                                                 $('#' + _w.register.ti.tid + '_docCompanyRegistration').hide();
241                                                                 $('#' + _w.register.ti.tid + '_docStockCertificate').show();
242                                                                 $('#' + _w.register.ti.tid + '_docCopyOfId').show();
243                                                                 $('#' + _w.register.ti.tid + '_docAddressProof').show();
244                                                         }
245                                                         else
246                                                         {
247                                                                 $('#' + _w.register.ti.tid + '_docStockCertificate').hide();
248                                                                 $('#' + _w.register.ti.tid + '_docCopyOfId').hide();
249                                                                 $('#' + _w.register.ti.tid + '_docAddressProof').show();
250                                                                 $('#' + _w.register.ti.tid + '_docCopyOfDirectorId').show();
251                                                                 $('#' + _w.register.ti.tid + '_docCompanyRegistration').show();
252                                                         }
253                                                 }
254                                         }
255                                 },
256                                 'businessName' : {
257                                         type  : 'input',
258                                         id    : 'businessName',
259                                         title : 'Registered business name',
260                                         value : '',
261                                         maxlength : 100
262                                 },
263                                 'name' : {
264                                         type  : 'input',
265                                         id    : 'name',
266                                         title : 'Trading name',
267                                         value : '',
268                                         maxlength : 100
269                                 },
270                                 'companyRegistrationNumber' : {
271                                         type  : 'input',
272                                         id    : 'companyRegistrationNumber',
273                                         title : 'Company Reg no',
274                                         value : '',
275                                         mask  : '9999/999999/99',
276                                         maxlength : 14
277                                 },
278                                 'vatNumber' : {
279                                         type  : 'input',
280                                         id    : 'vatNumber',
281                                         title : 'Vat no',
282                                         value : '',
283                                         maxlength : 20
284                                 },
285                                 'turmiNumber' : {
286                                         type  : 'input',
287                                         id    : 'turmiNumber',
288                                         title : 'TransUnion membership no',
289                                         value : '',
290                                         maxlength : 50
291                                 },
292                                 'dealerStockNumber' : {
293                                         type  : 'input',
294                                         id    : 'dealerStockNumber',
295                                         title : 'Dealer stock no',
296                                         value : '',
297                                         maxlength : 50
298                                 },
299                                 'turnover' : {
300                                         type  : 'select',
301                                         id    : 'turnover',
302                                         title : 'Turnover',
303                                         value : '',
304                                         dataStoreId : 'companyturnover'
305                                 },
306                                 'foundMethod' : {
307                                         type  : 'select',
308                                         id    : 'foundMethod',
309                                         title : 'Where did you find us?',
310                                         value : '',
311                                         dataStoreId : 'foundmethods',
312                                         onChange    : function () {
313                                                 if (!App.DataStore.getItem('BuildSelect:foundMethod', false))
314                                                 {
315                                                         var foundId = $('#foundMethod').val();
316                                                         App.DataStore.loadSelectListData(
317                                                                         'foundmethoddetails', false, 'Company', 'FoundMethodDetail.SelectList',
318                                                                         null, {Filter: {foundMethod: foundId}}
319                                                                         );
320                                                 }
321                                         }
322                                 },
323                                 'foundMethodDetail' : {
324                                         type  : 'select',
325                                         id    : 'foundMethodDetail',
326                                         title : 'Details',
327                                         value : '',
328                                         dataStoreId : 'foundmethoddetails'
329                                 },
330
331
332                                 // Adresses and billing contact
333                                 'country' : {
334                                         type        : 'select',
335                                         id          : 'country',
336                                         title       : 'Country',
337                                         dataStoreId : 'countries',
338                                         value       : '',
339                                         onChange    : function () {
340                                                 if (!App.DataStore.getItem('BuildSelect:country', false))
341                                                 {
342                                                         App.DataStore.loadSelectListData(
343                                                                         'regions', false, 'Location', 'Region.SelectList', null,
344                                                                         {"Filter": {
345                                                                                 "country" : $(this).val()
346                                                                                 }}
347                                                                         );
348                                                         App.DataStore.setData('cities', []);
349                                                         if ($('#sameAsBusinessAddress').prop('checked'))
350                                                         {
351                                                                 $('#billingCountry').selectpicker('val', $('#country').val());
352                                                         }
353                                                 }
354                                         }
355                                 },
356                                 'region' : {
357                                         type        : 'select',
358                                         id          : 'region',
359                                         title       : 'Region',
360                                         dataStoreId : 'regions',
361                                         value       : '',
362                                         onChange    : function () {
363                                                 if (!App.DataStore.getItem('BuildSelect:region', false))
364                                                 {
365                                                         App.DataStore.loadSelectListData(
366                                                                         'cities', false, 'Location', 'Town.SelectList', null,
367                                                                         {"Filter": {
368                                                                                 "region" : $(this).val()
369                                                                                 }}
370                                                                         );
371                                                         if ($('#sameAsBusinessAddress').prop('checked'))
372                                                         {
373                                                                 $('#billingRegion').selectpicker('val', $('#region').val());
374                                                         }
375                                                 }
376                                         }
377                                 },
378                                 'city' : {
379                                         type        : 'select',
380                                         id          : 'city',
381                                         title       : 'Town',
382                                         dataStoreId : 'cities',
383                                         value       : ''
384                                 },
385                                 'street' : {
386                                         type  : 'input',
387                                         id    : 'street',
388                                         title : 'Street',
389                                         value : '',
390                                         maxlength : 75
391                                 },
392                                 'postalCode' : {
393                                         type  : 'input',
394                                         id    : 'postalCode',
395                                         title : 'Code',
396                                         value : '',
397                                         maxlength : 10
398                                 },
399                                 'sameAsBusinessAddress' : {
400                                         type  : 'checkbox',
401                                         id    : 'sameAsBusinessAddress',
402                                         title : 'Same as business address',
403                                         value : '',
404                                         onChange : function() {
405                                                 if ($(this).prop('checked'))
406                                                 {
407                                                         App.DataStore.setItem('BuildSelect:migrateCountry', true);
408                                                         $('#billingCountry').selectpicker('val', $('#country').val());
409                                                         App.DataStore.removeItem('BuildSelect:migrateCountry');
410                                                         App.DataStore.setItem('BuildSelect:migrateRegion', true);
411                                                         App.DataStore.loadSelectListData(
412                                                                         'billregions', false, 'Location', 'Region.SelectList', null,
413                                                                         {"Filter": {
414                                                                                 "country" : $('#country').val()
415                                                                         }}, {}, function() {
416                                                                                 $('#billingRegion').selectpicker('val', $('#region').val());
417                                                                                 App.DataStore.removeItem('BuildSelect:migrateRegion');
418                                                                         }
419                                                         );
420                                                         App.DataStore.setItem('BuildSelect:migrateTown', true);
421                                                         App.DataStore.loadSelectListData(
422                                                                         'billcities', false, 'Location', 'Town.SelectList', null,
423                                                                         {"Filter": {
424                                                                                 "region" : $('#region').val()
425                                                                         }}, {}, function() {
426                                                                                 $('#billingCity').selectpicker('val', $('#city').val());
427                                                                         }
428                                                         );
429                                                         $('#billingStreet').val($('#street').val());
430                                                         $('#billingPostalCode').val($('#postalCode').val());
431                                                 }
432                                                 else
433                                                 {
434                                                         $('#billingCountry').selectpicker('val', '');
435                                                         App.DataStore.setData('billregions', []);
436                                                         App.DataStore.setData('billcities', []);
437                                                         $('#billingStreet').val('');
438                                                         $('#billingPostalCode').val('');
439                                                 }
440                                         }
441                                 },
442                                 'billingCountry' : {
443                                         type        : 'select',
444                                         id          : 'billingCountry',
445                                         title       : 'Country',
446                                         dataStoreId : 'countries',
447                                         value       : '',
448                                         onChange    : function () {
449                                                 if (!App.DataStore.getItem('BuildSelect:billingCountry', false)
450                                                                 && !App.DataStore.getItem('BuildSelect:migrateCountry', false))
451                                                 {
452                                                         App.DataStore.loadSelectListData(
453                                                                         'billregions', false, 'Location', 'Region.SelectList', null,
454                                                                         {"Filter": {
455                                                                                 "country" : $(this).val()
456                                                                                 }}
457                                                                         );
458                                                         App.DataStore.setData('billcities', []);
459                                                 }
460                                         }
461                                 },
462                                 'billingRegion' : {
463                                         type        : 'select',
464                                         id          : 'billingRegion',
465                                         title       : 'Region',
466                                         dataStoreId : 'billregions',
467                                         value       : '',
468                                         onChange    : function () {
469                                                 if (!App.DataStore.getItem('BuildSelect:billingRegion', false)
470                                                                 && !App.DataStore.getItem('BuildSelect:migrateRegion', false))
471                                                 {
472                                                         App.DataStore.loadSelectListData(
473                                                                         'billcities', false, 'Location', 'Town.SelectList', null,
474                                                                         {"Filter": {
475                                                                                 "region" : $(this).val()
476                                                                                 }}
477                                                                         );
478                                                 }
479                                         }
480                                 },
481                                 'billingCity' : {
482                                         type        : 'select',
483                                         id          : 'billingCity',
484                                         title       : 'Town',
485                                         dataStoreId : 'billcities',
486                                         value       : ''
487                                 },
488                                 'billingStreet' : {
489                                         type  : 'input',
490                                         id    : 'billingStreet',
491                                         title : 'Street',
492                                         value : '',
493                                         maxlength : 75
494                                 },
495                                 'billingPostalCode' : {
496                                         type  : 'input',
497                                         id    : 'billingPostalCode',
498                                         title : 'Code',
499                                         value : '',
500                                         maxlength : 10
501                                 },
502
503                                 'sameAsDealerContact' : {
504                                         type  : 'checkbox',
505                                         id    : 'sameAsDealerContact',
506                                         title : 'Same as dealership contact',
507                                         value : '',
508                                         onChange : function() {
509                                                 if ($(this).prop('checked'))
510                                                 {
511                                                         $('#billingFirstName').val($('#contactFirstName').val());
512                                                         $('#billingFamilyName').val($('#contactFamilyName').val());
513                                                         $('#billingOffice').val($('#contactOffice').val());
514                                                         $('#billingMobile').val($('#contactMobile').val());
515                                                         $('#billingEmail').val($('#contactEmail').val());
516                                                 }
517                                                 else
518                                                 {
519                                                         $('#billingFirstName').val('');
520                                                         $('#billingFamilyName').val('');
521                                                         $('#billingOffice').val('');
522                                                         $('#billingMobile').val('');
523                                                         $('#billingEmail').val('');
524                                                 }
525                                         }
526                                 },
527                                 'billingFirstName' : {
528                                         type  : 'input',
529                                         id    : 'billingFirstName',
530                                         title : 'Name',
531                                         value : '',
532                                         maxlength : 50
533                                 },
534                                 'billingFamilyName' : {
535                                         type  : 'input',
536                                         id    : 'billingFamilyName',
537                                         title : 'Surname',
538                                         value : '',
539                                         maxlength : 50
540                                 },
541                                 'billingOffice' : {
542                                         type  : 'input',
543                                         id    : 'billingOffice',
544                                         title : 'Landline',
545                                         value : '',
546                                         maxlength : 20
547                                 },
548                                 'billingMobile' : {
549                                         type  : 'mobile',
550                                         id    : 'billingMobile',
551                                         title : 'Mobile number',
552                                         value : '',
553                                         maxlength : 20
554                                 },
555                                 'billingEmail' : {
556                                         type  : 'input',
557                                         id    : 'billingEmail',
558                                         title : 'Email',
559                                         value : '',
560                                         maxlength : 255
561                                 },
562
563                                 // Owners
564                                 'ownerFirstName' : {
565                                         type  : 'input',
566                                         id    : 'ownerFirstName',
567                                         title : 'Name',
568                                         value : '',
569                                         maxlength : 100
570                                 },
571                                 'ownerFamilyName' : {
572                                         type  : 'input',
573                                         id    : 'ownerFamilyName',
574                                         title : 'Surname',
575                                         value : '',
576                                         maxlength : 100
577                                 },
578                                 'ownerIdNumber' : {
579                                         type  : 'input',
580                                         id    : 'ownerIdNumber',
581                                         title : 'ID Number',
582                                         value : '',
583                                         maxlength : 13
584                                 },
585                                 'owners' : {
586                                         type  : 'collector',
587                                         id    : 'owners',
588                                         value : []
589                                 },
590
591                                 // Documents
592                                 'docStockCertificate' : {
593                                         type  : 'document',
594                                         id    : 'docStockCertificate',
595                                         title : 'Dealer stock certificate',
596                                         value : null
597                                 },
598                                 'docAddressProof' : {
599                                         type  : 'document',
600                                         id    : 'docAddressProof',
601                                         title : 'Proof of business address',
602                                         value : null
603                                 },
604                                 'docCopyOfId' : {
605                                         type  : 'document',
606                                         id    : 'docCopyOfId',
607                                         title : 'Copy of ID document',
608                                         value : null
609                                 },
610                                 'docCopyOfDirectorId' : {
611                                         type  : 'document',
612                                         id    : 'docCopyOfDirectorId',
613                                         title : 'Copy of directors ID document',
614                                         value : null
615                                 },
616                                 'docCompanyRegistration' : {
617                                         type  : 'document',
618                                         id    : 'docCompanyRegistration',
619                                         title : 'Company registration document',
620                                         value : null
621                                 },
622
623                                 'subscribeNewsletter' : {
624                                         type  : 'checkbox',
625                                         id    : 'subscribeNewsletter',
626                                         title : 'Sign me up for the monthly newsletter abd Bid4Cars updates.',
627                                         value : false
628                                 },
629                                 'acceptTermsAndConditions' : {
630                                         type  : 'checkbox',
631                                         id    : 'acceptTermsAndConditions',
632                                         title : 'I agree to the Terms & Conditions, Website Terms & Conditions and Privacy Policy of Bid4Cars.',
633                                         value : false,
634                                         onChange : function() {
635                                                 $('#btnUpdate').prop('disabled', !$(this).prop('checked'));
636                                         }
637                                 }
638                         };
639                 },
640
641                 addOwner : function()
642                 {
643                         var name    = $('#ownerFirstName').val();
644                         var surname = $('#ownerFamilyName').val();
645                         var idnum   = $('#ownerIdNumber').val();
646                         if ('' == name || '' == surname || !$('#ownerIdNumber').valid())
647                         {
648                                 alert('Please provide Name, Surname and ID number.');
649                                 return;
650                         }
651                         _w.register.owners['colItem' + _w.register.counter] = {
652                                         firstName  : name,
653                                         familyName : surname,
654                                         idNumber   : idnum
655                         };
656                         var html = '<div class="accordion-group" id="colItem' + _w.register.counter + '">';
657                         html += '<div class="accordion-heading">';
658                         html += '<a class="accordion-toggle" data-toggle="collapse" data-parent="#owners" href="#collapse' + _w.register.counter + '">';
659                         html += name + ' ' + surname;
660                         html += '</a>';
661                         html += '</div>';
662                         html += '<div id="collapse' + _w.register.counter + '" class="accordion-body collapse in">';
663                         html += '<div class="accordion-inner">';
664                         html += name + ' ' + surname + ' (' + idnum + ')';
665                         html += '<br/><button type="button" class="btn pull-right" onClick="_w.register.removeOwner(' + _w.register.counter + ');">Remove</button>';
666                         html += '</div>';
667                         html += '</div>';
668                         html += '</div>';
669                         $('#owners').append(html);
670                         $('#collapse' + _w.register.counter).collapse('toggle');
671                         _w.register.counter++;
672                         _w.register.ownerCount++;
673
674                         $('#ownerFirstName').val('');
675                         $('#ownerFamilyName').val('');
676                         $('#ownerIdNumber').val('');
677                 },
678
679                 removeOwner : function( id )
680                 {
681                         delete _w.register.owners['colItem' + id];
682                         $('#colItem' + id).remove();
683                         _w.register.ownerCount--;
684                 },
685
686                 _setupValidation : function ()
687                 {
688                         $('#frmRegister').validate({
689                                 rules: {
690                                         firstName: {required: true},
691                                         familyName: {required: true},
692                                         permissions: {required: true},
693                                         email: {required: true, email: true, remote: {
694                                         url: "/workspace/check-unique-email",
695                                         type: "post"
696                                       }},
697                                         confirmEmail: {required: true, email: true, equalTo: "#email"},
698                                         pin: {required: true, digits: true},
699                                         confirmPin: {required: true, digits: true, equalTo: "#pin"},
700                                         idNumber: {required: true, minlength: 13, maxlength: 13, digits: true},
701                                         dateOfBirth: {required: true, dateISO: true},
702                                         mobile: {required: true, mobile: true},
703
704                                         contactFirstName: {required: true},
705                                         contactFamilyName: {required: true},
706                                         contactOffice: {required: true, digits: true},
707                                         contactMobile: {required: true, mobile: true},
708                                         contactEmail: {required: true, email: true},
709
710                                         dealerType: {required: true},
711                                         clientType: {required: true},
712                                         companyType: {required: true},
713                                         businessName: {required: true},
714                                         name: {required: true, remote: {
715                                         url: "/workspace/check-unique-company",
716                                         type: "post"
717                                       }},
718                                         companyRegistrationNumber: {companyReg: true},
719                                         vatNumber: {digits: true},
720
721                                         country: {required: true},
722                                         region: {required: true},
723                                         city: {required: true},
724                                         street: {required: true},
725                                         postalCode: {required: true, digits: true},
726                                         billingCountry: {required: true},
727                                         billingRegion: {required: true},
728                                         billingCity: {required: true},
729                                         billingStreet: {required: true},
730                                         billingPostalCode: {required: true, digits: true},
731                                         billingFirstName: {required: true},
732                                         billingFamilyName: {required: true},
733                                         billingOffice: {required: true, digits: true},
734                                         billingMobile: {required: true, mobile: true},
735                                         billingEmail: {required: true, email: true},
736
737                                         ownerIdNumber: {minlength: 13, maxlength: 13, digits: true}
738                                 },
739                                 messages: {
740                                         email: { email: "Must be a valid email address.", remote: "Email address already in use."},
741                                         confirmEmail: { equalTo: "Values are not the same." },
742                                         confirmPin: { equalTo: "Values are not the same." },
743                                         contactEmail: { email: "Must be a valid email address." },
744                                         billingEmail: { email: "Must be a valid email address." },
745                                         country : "This field is required.",
746                                         region : "This field is required.",
747                                         city : "This field is required.",
748                                         billingCountry : "This field is required.",
749                                         billingRegion : "This field is required.",
750                                         billingCity : "This field is required.",
751                                         permissions : "This field is required.",
752                                         companyType : "This field is required.",
753                                         dealerType : "This field is required.",
754                                         clientType : "This field is required."
755                                 },
756                                 submitHandler: function( form ) {
757                                         if (0 == _w.register.ownerCount) {
758                                                 $('#ownerFirstName').addClass('error');
759                                                 $('#ownerFamilyName').addClass('error');
760                                                 $('#ownerIdNumber').addClass('error');
761                                             alert('At least 1 owner / director required.');
762                                             return false;
763                                     } else {
764                                                 $('#ownerFirstName').removeClass('error');
765                                                 $('#ownerFamilyName').removeClass('error');
766                                                 $('#ownerIdNumber').removeClass('error');
767                                     }
768                                         $('#btnUpdate').prop('disabled', true);
769                                         var data = _w.register._prepRegisterUpdateData();
770                                         App.API.execTask(
771                                                         'register', data, {},
772                                                         _w.register._onRegisterUpdated, _w.taskExecError
773                                                 );
774                                 }
775                         });
776                         $('#frmRegister').valid();
777                         $('label.error').remove();
778                         $('.valid').removeClass('valid');
779                 },
780
781                 _prepRegisterUpdateData : function()
782                 {
783                         var data = _w.register.ti.harvest();
784                         var postData = {
785                                         Company:{},
786                                         Profile:{},
787                                         Contact:{},
788                                         BillingContact:{}
789                                         };
790                         var profileFields = [
791                  "firstName","familyName","permissions","email","confirmEmail",
792                  "pin","confirmPin","idNumber","dateOfBirth","mobile", "subscribeNewsletter"
793                  ];
794                         var companyFields = [
795                  "dealerType","clientType","group","groupDivision","companyType",
796                  "businessName","name","companyRegistrationNumber","vatNumber","turmiNumber",
797                  "dealerStockNumber","turnover","foundMethod","foundMethodDetail",
798                  "country","region","city","street","postalCode",
799                  "billingCountry","billingRegion","billingCity","billingStreet","billingPostalCode",
800                  "docStockCertificate","docAddressProof","docCopyOfId",
801                  "docCopyOfDirectorId","docCompanyRegistration"
802                  ];
803                         var contactFields = {
804                  "contactFirstName"  : "firstName",
805                  "contactFamilyName" : "familyName",
806                  "contactOffice"     : "office",
807                  "contactMobile"     : "mobile",
808                  "contactEmail"      : "email"
809                         };
810                         var billingContactFields = {
811                  "billingFirstName"  : "firstName",
812                  "billingFamilyName" : "familyName",
813                  "billingOffice"     : "office",
814                  "billingMobile"     : "mobile",
815                  "billingEmail"      : "email"
816                         };
817                         for (var field in data)
818                         {
819                                 if (-1 != companyFields.indexOf(field))
820                                 {
821                                         postData.Company[field] = '' != data[field] ? data[field] : null;
822                                 }
823                                 else if (-1 != profileFields.indexOf(field))
824                                 {
825                                         postData.Profile[field] = '' != data[field] ? data[field] : null;
826                                 }
827                                 else if (contactFields[field])
828                                 {
829                                         postData.Contact[contactFields[field]] = '' != data[field] ? data[field] : null;
830                                 }
831                                 else if (billingContactFields[field])
832                                 {
833                                         postData.BillingContact[billingContactFields[field]] = '' != data[field] ? data[field] : null;
834                                 }
835                         }
836                         postData.Profile.password = postData.Profile.pin;
837                         postData.Company.owners = _w.register.owners;
838                         return postData;
839                 },
840
841                 _onRegisterUpdated : function( response )
842                 {
843                         window.location.hash = '/registered';
844                 }
845
846         };
847
848 })();