
if (!window.Gastronovi) {
    Gastronovi = {};
}

Gastronovi.Prefix = 'Gastronovi_';
Gastronovi.WidgetCount = 0;


Gastronovi.getBrowserLocales = function() {
    var nav = window.navigator;
    var browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'];

    var userLocales = []; // all locales
    var userLanguages = []; // just the languages as fallback

    if(!Array.isArray) {
        Array.isArray = function (vArg) {
            return Object.prototype.toString.call(vArg) === "[object Array]";
        };
    }

    // support for HTML 5.1 "navigator.languages"
    if (Array.isArray(nav.languages)) {
        for (var i = 0; i < nav.languages.length; i++) {
            if (nav.languages[i] && nav.languages[i].length) {
                userLocales.push(nav.languages[i].replace('-', '_'));
                userLanguages.push(nav.languages[i].split('-')[0]);
            }
        }
    }

    // support for other well known properties in browsers
    for (var i = 0; i < browserLanguagePropertyKeys.length; i++) {
        if (nav[browserLanguagePropertyKeys[i]] && nav[browserLanguagePropertyKeys[i]].length) {
            userLocales.push(nav[browserLanguagePropertyKeys[i]].replace('-', '_'));
            userLanguages.push(nav[browserLanguagePropertyKeys[i]].split('-')[0]);
        }
    }

    return {
        'locales': userLocales,
        'languages': userLanguages
    };
};

Gastronovi.getLanguage = function(validLanguages) {
    var browserLocales = Gastronovi.getBrowserLocales();

    // check if locales match with valid langauges
    for (var i = 0; i < browserLocales.locales.length; i++) {
        for (var j = 0; j < validLanguages.length; j++) {
            if (validLanguages[j] && browserLocales.locales[i] == validLanguages[j].value) {
                return validLanguages[j].value;
            }
        }
    }

    // if no locale has matched directly, check if there is a valid language with matching first 2 letters
    for (var i = 0; i < browserLocales.languages.length; i++) {
        for (var j = 0; j < validLanguages.length; j++) {
            if (validLanguages[j] && browserLocales.languages[i] == validLanguages[j].value.split('_')[0]) {
                return validLanguages[j].value;
            }
        }
    }

    return null;
};


Gastronovi.Fieldsets = {
    'testing_general': {
        title: 'Trial',
        footer: 'Full functionality, no payment data or cancellation required - test access ends automatically after 14 days.<br/>I agree to a personal and competent consultation or an individual offer, also for information purposes.',
        button: 'More',
        fields: {
            'gn_mod_campaign': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_volume': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_monthly': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_yearly': {
                type: 'hidden'
            },
            'gn_mod_campaign_volume': {
                type: 'hidden'
            },
            'gn_mod_campaign_monthly': {
                type: 'hidden'
            },
            'gn_mod_campaign_yearly': {
                type: 'hidden'
            },
            'gn_mod_discount': {
                type: 'hidden'
            },
            'gn_demo_template_id': {
                type: 'hidden'
            },
            'gn_sync_mailchimp': {
                type: 'hidden'
            },
            'gn_company_type': {
                label: 'Type of business',
                type: 'hidden',
                //element: 'select',
                //required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: 'restaurant', text: 'Restaurant' }			,{ value: 'hotel', text: 'Hotel' }			,{ value: 'bar', text: 'Bar' }			,{ value: 'cafe', text: 'Cafe' }			,{ value: 'catering', text: 'Catering' }			,{ value: 'disco', text: 'Disco' }			,{ value: 'ice', text: 'Ice cream parlours' }			,{ value: 'canteen', text: 'Canteen' }			,{ value: 'snack', text: 'Snack' }			,{ value: 'foodtruck', text: 'Foodtruck' }			,{ value: 'camping', text: 'Camping' }			,{ value: 'franchise', text: 'Franchise' }			,{ value: 'other', text: 'Other' }			,{ value: 'pool', text: 'Swimming pool' }	                ]
            },
            'name': {
                label: 'company name',
                required: true
            },
            'zip': {
                label: 'POSTCODE',
                required: true,
                wrap: 'location',
                flex: 0.3
            },
            'city': {
                label: 'town',
                required: true,
                wrap: 'location',
                flex: 0.7
            },
            'country_id': {
                label: 'country',
                element: 'select',
                required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: '58', text: 'Germany', code: 'DE' }			,{ value: '13', text: 'Austria', code: 'AT' }			,{ value: '44', text: 'Switzerland', code: 'CH' }			,{ value: '76', text: 'France', code: 'FR' }			,{ value: '110', text: 'Italy', code: 'IT' }			,{ value: '69', text: 'Spain', code: 'ES' }			,{ value: '233', text: 'United Kingdom', code: 'GB' }			,{ value: '129', text: 'Liechtenstein', code: 'LI' }			,{ value: '134', text: 'Luxembourg', code: 'LU' }			,{ value: '21', text: 'Belgium', code: 'BE' }			,{ value: '166', text: 'Netherlands', code: 'NL' }			,{ value: null, text: '-------------', code: '' }			,{ value: '3', text: 'Afghanistan', code: 'AF' }			,{ value: '16', text: 'Åland Islands', code: 'AX' }			,{ value: '6', text: 'Albania', code: 'AL' }			,{ value: '63', text: 'Algeria', code: 'DZ' }			,{ value: '12', text: 'American Samoa', code: 'AS' }			,{ value: '1', text: 'Andorra', code: 'AD' }			,{ value: '9', text: 'Angola', code: 'AO' }			,{ value: '5', text: 'Anguilla', code: 'AI' }			,{ value: '10', text: 'Antarctica', code: 'AQ' }			,{ value: '4', text: 'Antigua and Barbuda', code: 'AG' }			,{ value: '11', text: 'Argentina', code: 'AR' }			,{ value: '7', text: 'Armenia', code: 'AM' }			,{ value: '15', text: 'Aruba', code: 'AW' }			,{ value: '14', text: 'Australia', code: 'AU' }			,{ value: '17', text: 'Azerbaijan', code: 'AZ' }			,{ value: '33', text: 'Bahamas', code: 'BS' }			,{ value: '24', text: 'Bahrain', code: 'BH' }			,{ value: '20', text: 'Bangladesh', code: 'BD' }			,{ value: '19', text: 'Barbados', code: 'BB' }			,{ value: '37', text: 'Belarus', code: 'BY' }			,{ value: '38', text: 'Belize', code: 'BZ' }			,{ value: '26', text: 'Benin', code: 'BJ' }			,{ value: '28', text: 'Bermuda', code: 'BM' }			,{ value: '34', text: 'Bhutan', code: 'BT' }			,{ value: '30', text: 'Bolivia', code: 'BO' }			,{ value: '31', text: 'Bonaire, Sint Eustatius and Saba', code: 'BQ' }			,{ value: '18', text: 'Bosnia and Herzegovina', code: 'BA' }			,{ value: '36', text: 'Botswana', code: 'BW' }			,{ value: '35', text: 'Bouvet Island', code: 'BV' }			,{ value: '32', text: 'Brazil', code: 'BR' }			,{ value: '106', text: 'British Indian Ocean Territory', code: 'IO' }			,{ value: '29', text: 'Brunei Darussalam', code: 'BN' }			,{ value: '23', text: 'Bulgaria', code: 'BG' }			,{ value: '22', text: 'Burkina Faso', code: 'BF' }			,{ value: '25', text: 'Burundi', code: 'BI' }			,{ value: '117', text: 'Cambodia', code: 'KH' }			,{ value: '48', text: 'Cameroon', code: 'CM' }			,{ value: '39', text: 'Canada', code: 'CA' }			,{ value: '53', text: 'Cape Verde', code: 'CV' }			,{ value: '124', text: 'Cayman Islands', code: 'KY' }			,{ value: '41', text: 'Central African Republic', code: 'CF' }			,{ value: '216', text: 'Chad', code: 'TD' }			,{ value: '47', text: 'Chile', code: 'CL' }			,{ value: '49', text: 'China', code: 'CN' }			,{ value: '55', text: 'Christmas Island', code: 'CX' }			,{ value: '40', text: 'Cocos (Keeling) Islands', code: 'CC' }			,{ value: '50', text: 'Colombia', code: 'CO' }			,{ value: '119', text: 'Comoros', code: 'KM' }			,{ value: '43', text: 'Congo', code: 'CG' }			,{ value: '46', text: 'Cook Islands', code: 'CK' }			,{ value: '51', text: 'Costa Rica', code: 'CR' }			,{ value: '45', text: 'Côte d\'Ivoire', code: 'CI' }			,{ value: '98', text: 'Croatia', code: 'HR' }			,{ value: '52', text: 'Cuba', code: 'CU' }			,{ value: '54', text: 'Curaçao', code: 'CW' }			,{ value: '56', text: 'Cyprus', code: 'CY' }			,{ value: '57', text: 'Czech Republic', code: 'CZ' }			,{ value: '42', text: 'Democratic Republic of the Congo', code: 'CD' }			,{ value: '60', text: 'Denmark', code: 'DK' }			,{ value: '59', text: 'Djibouti', code: 'DJ' }			,{ value: '61', text: 'Dominica', code: 'DM' }			,{ value: '62', text: 'Dominican Republic', code: 'DO' }			,{ value: '225', text: 'East Timor', code: 'TP' }			,{ value: '64', text: 'Ecuador', code: 'EC' }			,{ value: '66', text: 'Egypt', code: 'EG' }			,{ value: '211', text: 'El Salvador', code: 'SV' }			,{ value: '88', text: 'Equatorial Guinea', code: 'GQ' }			,{ value: '68', text: 'Eritrea', code: 'ER' }			,{ value: '65', text: 'Estonia', code: 'EE' }			,{ value: '70', text: 'Ethiopia', code: 'ET' }			,{ value: '73', text: 'Falkland Islands', code: 'FK' }			,{ value: '75', text: 'Faroe Islands', code: 'FO' }			,{ value: '72', text: 'Fiji', code: 'FJ' }			,{ value: '71', text: 'Finland', code: 'FI' }			,{ value: '80', text: 'French Guiana', code: 'GF' }			,{ value: '176', text: 'French Polynesia', code: 'PF' }			,{ value: '217', text: 'French Southern Territories', code: 'TF' }			,{ value: '77', text: 'Gabon', code: 'GA' }			,{ value: '85', text: 'Gambia', code: 'GM' }			,{ value: '79', text: 'Georgia', code: 'GE' }			,{ value: '81', text: 'Ghana', code: 'GH' }			,{ value: '82', text: 'Gibraltar', code: 'GI' }			,{ value: '89', text: 'Greece', code: 'GR' }			,{ value: '84', text: 'Greenland', code: 'GL' }			,{ value: '78', text: 'Grenada', code: 'GD' }			,{ value: '87', text: 'Guadeloupe', code: 'GP' }			,{ value: '92', text: 'Guam', code: 'GU' }			,{ value: '91', text: 'Guatemala', code: 'GT' }			,{ value: '83', text: 'Guernsey', code: 'GG' }			,{ value: '86', text: 'Guinea', code: 'GN' }			,{ value: '93', text: 'Guinea Bissau', code: 'GW' }			,{ value: '94', text: 'Guyana', code: 'GY' }			,{ value: '99', text: 'Haiti', code: 'HT' }			,{ value: '96', text: 'Heard Island and McDonald Islands', code: 'HM' }			,{ value: '238', text: 'Holy See (Vatican City State)', code: 'VA' }			,{ value: '97', text: 'Honduras', code: 'HN' }			,{ value: '95', text: 'Hong Kong', code: 'HK' }			,{ value: '100', text: 'Hungary', code: 'HU' }			,{ value: '109', text: 'Iceland', code: 'IS' }			,{ value: '105', text: 'India', code: 'IN' }			,{ value: '101', text: 'Indonesia', code: 'ID' }			,{ value: '108', text: 'Iran', code: 'IR' }			,{ value: '107', text: 'Iraq', code: 'IQ' }			,{ value: '102', text: 'Ireland', code: 'IE' }			,{ value: '104', text: 'Isle of Man', code: 'IM' }			,{ value: '103', text: 'Israel', code: 'IL' }			,{ value: '112', text: 'Jamaica', code: 'JM' }			,{ value: '114', text: 'Japan', code: 'JP' }			,{ value: '111', text: 'Jersey', code: 'JE' }			,{ value: '113', text: 'Jordan', code: 'JO' }			,{ value: '125', text: 'Kazakhstan', code: 'KZ' }			,{ value: '115', text: 'Kenya', code: 'KE' }			,{ value: '118', text: 'Kiribati', code: 'KI' }			,{ value: '255', text: 'Kosovo', code: 'XK' }			,{ value: '123', text: 'Kuwait', code: 'KW' }			,{ value: '116', text: 'Kyrgyzstan', code: 'KG' }			,{ value: '126', text: 'Laos', code: 'LA' }			,{ value: '135', text: 'Latvia', code: 'LV' }			,{ value: '127', text: 'Lebanon', code: 'LB' }			,{ value: '132', text: 'Lesotho', code: 'LS' }			,{ value: '131', text: 'Liberia', code: 'LR' }			,{ value: '136', text: 'Libya', code: 'LY' }			,{ value: '133', text: 'Lithuania', code: 'LT' }			,{ value: '148', text: 'Macau', code: 'MO' }			,{ value: '144', text: 'Macedonia, the former Yugoslav Republic of', code: 'MK' }			,{ value: '142', text: 'Madagascar', code: 'MG' }			,{ value: '156', text: 'Malawi', code: 'MW' }			,{ value: '158', text: 'Malaysia', code: 'MY' }			,{ value: '155', text: 'Maldives', code: 'MV' }			,{ value: '145', text: 'Mali', code: 'ML' }			,{ value: '153', text: 'Malta', code: 'MT' }			,{ value: '143', text: 'Marshall Islands', code: 'MH' }			,{ value: '150', text: 'Martinique', code: 'MQ' }			,{ value: '151', text: 'Mauritania', code: 'MR' }			,{ value: '154', text: 'Mauritius', code: 'MU' }			,{ value: '248', text: 'Mayotte', code: 'YT' }			,{ value: '157', text: 'Mexico', code: 'MX' }			,{ value: '74', text: 'Micronesia', code: 'FM' }			,{ value: '139', text: 'Moldova', code: 'MD' }			,{ value: '138', text: 'Monaco', code: 'MC' }			,{ value: '147', text: 'Mongolia', code: 'MN' }			,{ value: '140', text: 'Montenegro', code: 'ME' }			,{ value: '152', text: 'Montserrat', code: 'MS' }			,{ value: '137', text: 'Morocco', code: 'MA' }			,{ value: '159', text: 'Mozambique', code: 'MZ' }			,{ value: '146', text: 'Myanmar', code: 'MM' }			,{ value: '160', text: 'Namibia', code: 'NA' }			,{ value: '169', text: 'Nauru', code: 'NR' }			,{ value: '168', text: 'Nepal', code: 'NP' }			,{ value: '8', text: 'Netherlands Antilles', code: 'AN' }			,{ value: '170', text: 'Neutral Zone', code: 'NT' }			,{ value: '161', text: 'New Caledonia', code: 'NC' }			,{ value: '172', text: 'New Zealand', code: 'NZ' }			,{ value: '165', text: 'Nicaragua', code: 'NI' }			,{ value: '162', text: 'Niger', code: 'NE' }			,{ value: '164', text: 'Nigeria', code: 'NG' }			,{ value: '171', text: 'Niue', code: 'NU' }			,{ value: '254', text: 'Nordirland', code: '' }			,{ value: '163', text: 'Norfolk Island', code: 'NF' }			,{ value: '149', text: 'Northern Mariana Islands', code: 'MP' }			,{ value: '121', text: 'North Korea', code: 'KP' }			,{ value: '167', text: 'Norway', code: 'NO' }			,{ value: '173', text: 'Oman', code: 'OM' }			,{ value: '179', text: 'Pakistan', code: 'PK' }			,{ value: '186', text: 'Palau', code: 'PW' }			,{ value: '174', text: 'Panama', code: 'PA' }			,{ value: '177', text: 'Papua New Guinea', code: 'PG' }			,{ value: '187', text: 'Paraguay', code: 'PY' }			,{ value: '175', text: 'Peru', code: 'PE' }			,{ value: '178', text: 'Philippines', code: 'PH' }			,{ value: '182', text: 'Pitcairn Islands', code: 'PN' }			,{ value: '180', text: 'Poland', code: 'PL' }			,{ value: '185', text: 'Portugal', code: 'PT' }			,{ value: '183', text: 'Puerto Rico', code: 'PR' }			,{ value: '188', text: 'Qatar', code: 'QA' }			,{ value: '189', text: 'Réunion', code: 'RE' }			,{ value: '190', text: 'Romania', code: 'RO' }			,{ value: '192', text: 'Russian Federation', code: 'RU' }			,{ value: '193', text: 'Rwanda', code: 'RW' }			,{ value: '27', text: 'Saint Barthélémy', code: 'BL' }			,{ value: '200', text: 'Saint Helena, Ascension and Tristan da Cunha', code: 'SH' }			,{ value: '120', text: 'Saint Kitts and Nevis', code: 'KN' }			,{ value: '128', text: 'Saint Lucia', code: 'LC' }			,{ value: '141', text: 'Saint Martin (French part)', code: 'MF' }			,{ value: '181', text: 'Saint Pierre and Miquelon', code: 'PM' }			,{ value: '239', text: 'Saint Vincent and the Grenadines', code: 'VC' }			,{ value: '246', text: 'Samoa', code: 'WS' }			,{ value: '205', text: 'San Marino', code: 'SM' }			,{ value: '210', text: 'São Tomé and Príncipe', code: 'ST' }			,{ value: '194', text: 'Saudi Arabia', code: 'SA' }			,{ value: '206', text: 'Senegal', code: 'SN' }			,{ value: '191', text: 'Serbia', code: 'RS' }			,{ value: '196', text: 'Seychelles', code: 'SC' }			,{ value: '204', text: 'Sierra Leone', code: 'SL' }			,{ value: '199', text: 'Singapore', code: 'SG' }			,{ value: '212', text: 'Sint Maarten (Dutch part)', code: 'SX' }			,{ value: '203', text: 'Slovakia', code: 'SK' }			,{ value: '201', text: 'Slovenia', code: 'SI' }			,{ value: '195', text: 'Solomon Islands', code: 'SB' }			,{ value: '207', text: 'Somalia', code: 'SO' }			,{ value: '250', text: 'South Africa', code: 'ZA' }			,{ value: '90', text: 'South Georgia and the South Sandwich Islands', code: 'GS' }			,{ value: '122', text: 'South Korea', code: 'KR' }			,{ value: '209', text: 'South Sudan', code: 'SS' }			,{ value: '130', text: 'Sri Lanka', code: 'LK' }			,{ value: '184', text: 'State of Palestine', code: 'PS' }			,{ value: '197', text: 'Sudan', code: 'SD' }			,{ value: '208', text: 'Suriname', code: 'SR' }			,{ value: '202', text: 'Svalbard and Jan Mayen Islands', code: 'SJ' }			,{ value: '214', text: 'Swaziland', code: 'SZ' }			,{ value: '198', text: 'Sweden', code: 'SE' }			,{ value: '213', text: 'Syria', code: 'SY' }			,{ value: '229', text: 'Taiwan', code: 'TW' }			,{ value: '220', text: 'Tajikistan', code: 'TJ' }			,{ value: '230', text: 'Tanzania', code: 'TZ' }			,{ value: '219', text: 'Thailand', code: 'TH' }			,{ value: '256', text: 'Timor-Leste', code: 'TL' }			,{ value: '218', text: 'Togo', code: 'TG' }			,{ value: '221', text: 'Tokelau', code: 'TK' }			,{ value: '224', text: 'Tonga', code: 'TO' }			,{ value: '227', text: 'Trinidad and Tobago', code: 'TT' }			,{ value: '223', text: 'Tunisia', code: 'TN' }			,{ value: '226', text: 'Turkey', code: 'TR' }			,{ value: '222', text: 'Turkmenistan', code: 'TM' }			,{ value: '215', text: 'Turks and Caicos Islands', code: 'TC' }			,{ value: '228', text: 'Tuvalu', code: 'TV' }			,{ value: '232', text: 'Uganda', code: 'UG' }			,{ value: '231', text: 'Ukraine', code: 'UA' }			,{ value: '2', text: 'United Arab Emirates', code: 'AE' }			,{ value: '235', text: 'United States', code: 'US' }			,{ value: '236', text: 'Uruguay', code: 'UY' }			,{ value: '234', text: 'USA Minor Outlying Islands', code: 'UM' }			,{ value: '237', text: 'Uzbekistan', code: 'UZ' }			,{ value: '244', text: 'Vanuatu', code: 'VU' }			,{ value: '240', text: 'Venezuela', code: 'VE' }			,{ value: '243', text: 'Vietnam', code: 'VN' }			,{ value: '241', text: 'Virgin Islands (British)', code: 'VG' }			,{ value: '242', text: 'Virgin Islands (USA)', code: 'VI' }			,{ value: '245', text: 'Wallis and Futuna', code: 'WF' }			,{ value: '67', text: 'Western Sahara', code: 'EH' }			,{ value: '247', text: 'Yemen', code: 'YE' }			,{ value: '249', text: 'Yugoslavia', code: 'YU' }			,{ value: '252', text: 'Zaire', code: 'ZR' }			,{ value: '251', text: 'Zambia', code: 'ZM' }			,{ value: '253', text: 'Zimbabwe', code: 'ZW' }	                ],
                wrap: 'location'
            },
            'email_from': {
                label: 'email',
                type: 'email',
                required: true,
                wrap: 'contact'
            },
            'phone': {
                label: 'Phone',
                type: 'tel',
                required: true,
                wrap: 'contact'
            },
            'contact_name': {
                label: 'Contact for',
                required: true
            },
            'privacy': {
                label: 'I have read and accepted the <a href="PRIVACY_URL" target="_blank">Privacy policy</a>.',
                type: 'checkbox',
                required: true
            }
        }
    },
    'contact_general': {
        title: 'Consulting',
        footer: 'I would like a personal and competent consultation or an individual offer, also for information purposes.',
        success: 'Thank you very much for your inquiry!<br /> <br /> We will get back to you as soon as possible.',
        button: 'Request advice',
        fields: {
            'gn_mod_campaign': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_volume': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_monthly': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_yearly': {
                type: 'hidden'
            },
            'gn_mod_campaign_volume': {
                type: 'hidden'
            },
            'gn_mod_campaign_monthly': {
                type: 'hidden'
            },
            'gn_mod_campaign_yearly': {
                type: 'hidden'
            },
            'gn_mod_discount': {
                type: 'hidden'
            },
            'gn_demo_template_id': {
                type: 'hidden'
            },
            'gn_sync_mailchimp': {
                type: 'hidden'
            },
            'contact_name': {
                label: 'Contact for',
                required: true
            },
            'email_from': {
                label: 'email',
                type: 'email',
                required: true,
                wrap: 'contact'
            },
            'phone': {
                label: 'Phone',
                type: 'tel',
                required: true,
                wrap: 'contact'
            },
            'gn_company_type': {
                label: 'Type of business',
                type: 'hidden',
                //element: 'select',
                //required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: 'restaurant', text: 'Restaurant' }			,{ value: 'hotel', text: 'Hotel' }			,{ value: 'bar', text: 'Bar' }			,{ value: 'cafe', text: 'Cafe' }			,{ value: 'catering', text: 'Catering' }			,{ value: 'disco', text: 'Disco' }			,{ value: 'ice', text: 'Ice cream parlours' }			,{ value: 'canteen', text: 'Canteen' }			,{ value: 'snack', text: 'Snack' }			,{ value: 'foodtruck', text: 'Foodtruck' }			,{ value: 'camping', text: 'Camping' }			,{ value: 'franchise', text: 'Franchise' }			,{ value: 'other', text: 'Other' }			,{ value: 'pool', text: 'Swimming pool' }	                ]
            },
            'name': {
                label: 'company name',
                required: true
            },
            'zip': {
                label: 'POSTCODE',
                required: true,
                wrap: 'location',
                flex: 0.3
            },
            'city': {
                label: 'town',
                required: true,
                wrap: 'location',
                flex: 0.7
            },
            'country_id': {
                label: 'country',
                element: 'select',
                required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: '58', text: 'Germany', code: 'DE' }			,{ value: '13', text: 'Austria', code: 'AT' }			,{ value: '44', text: 'Switzerland', code: 'CH' }			,{ value: '76', text: 'France', code: 'FR' }			,{ value: '110', text: 'Italy', code: 'IT' }			,{ value: '69', text: 'Spain', code: 'ES' }			,{ value: '233', text: 'United Kingdom', code: 'GB' }			,{ value: '129', text: 'Liechtenstein', code: 'LI' }			,{ value: '134', text: 'Luxembourg', code: 'LU' }			,{ value: '21', text: 'Belgium', code: 'BE' }			,{ value: '166', text: 'Netherlands', code: 'NL' }			,{ value: null, text: '-------------', code: '' }			,{ value: '3', text: 'Afghanistan', code: 'AF' }			,{ value: '16', text: 'Åland Islands', code: 'AX' }			,{ value: '6', text: 'Albania', code: 'AL' }			,{ value: '63', text: 'Algeria', code: 'DZ' }			,{ value: '12', text: 'American Samoa', code: 'AS' }			,{ value: '1', text: 'Andorra', code: 'AD' }			,{ value: '9', text: 'Angola', code: 'AO' }			,{ value: '5', text: 'Anguilla', code: 'AI' }			,{ value: '10', text: 'Antarctica', code: 'AQ' }			,{ value: '4', text: 'Antigua and Barbuda', code: 'AG' }			,{ value: '11', text: 'Argentina', code: 'AR' }			,{ value: '7', text: 'Armenia', code: 'AM' }			,{ value: '15', text: 'Aruba', code: 'AW' }			,{ value: '14', text: 'Australia', code: 'AU' }			,{ value: '17', text: 'Azerbaijan', code: 'AZ' }			,{ value: '33', text: 'Bahamas', code: 'BS' }			,{ value: '24', text: 'Bahrain', code: 'BH' }			,{ value: '20', text: 'Bangladesh', code: 'BD' }			,{ value: '19', text: 'Barbados', code: 'BB' }			,{ value: '37', text: 'Belarus', code: 'BY' }			,{ value: '38', text: 'Belize', code: 'BZ' }			,{ value: '26', text: 'Benin', code: 'BJ' }			,{ value: '28', text: 'Bermuda', code: 'BM' }			,{ value: '34', text: 'Bhutan', code: 'BT' }			,{ value: '30', text: 'Bolivia', code: 'BO' }			,{ value: '31', text: 'Bonaire, Sint Eustatius and Saba', code: 'BQ' }			,{ value: '18', text: 'Bosnia and Herzegovina', code: 'BA' }			,{ value: '36', text: 'Botswana', code: 'BW' }			,{ value: '35', text: 'Bouvet Island', code: 'BV' }			,{ value: '32', text: 'Brazil', code: 'BR' }			,{ value: '106', text: 'British Indian Ocean Territory', code: 'IO' }			,{ value: '29', text: 'Brunei Darussalam', code: 'BN' }			,{ value: '23', text: 'Bulgaria', code: 'BG' }			,{ value: '22', text: 'Burkina Faso', code: 'BF' }			,{ value: '25', text: 'Burundi', code: 'BI' }			,{ value: '117', text: 'Cambodia', code: 'KH' }			,{ value: '48', text: 'Cameroon', code: 'CM' }			,{ value: '39', text: 'Canada', code: 'CA' }			,{ value: '53', text: 'Cape Verde', code: 'CV' }			,{ value: '124', text: 'Cayman Islands', code: 'KY' }			,{ value: '41', text: 'Central African Republic', code: 'CF' }			,{ value: '216', text: 'Chad', code: 'TD' }			,{ value: '47', text: 'Chile', code: 'CL' }			,{ value: '49', text: 'China', code: 'CN' }			,{ value: '55', text: 'Christmas Island', code: 'CX' }			,{ value: '40', text: 'Cocos (Keeling) Islands', code: 'CC' }			,{ value: '50', text: 'Colombia', code: 'CO' }			,{ value: '119', text: 'Comoros', code: 'KM' }			,{ value: '43', text: 'Congo', code: 'CG' }			,{ value: '46', text: 'Cook Islands', code: 'CK' }			,{ value: '51', text: 'Costa Rica', code: 'CR' }			,{ value: '45', text: 'Côte d\'Ivoire', code: 'CI' }			,{ value: '98', text: 'Croatia', code: 'HR' }			,{ value: '52', text: 'Cuba', code: 'CU' }			,{ value: '54', text: 'Curaçao', code: 'CW' }			,{ value: '56', text: 'Cyprus', code: 'CY' }			,{ value: '57', text: 'Czech Republic', code: 'CZ' }			,{ value: '42', text: 'Democratic Republic of the Congo', code: 'CD' }			,{ value: '60', text: 'Denmark', code: 'DK' }			,{ value: '59', text: 'Djibouti', code: 'DJ' }			,{ value: '61', text: 'Dominica', code: 'DM' }			,{ value: '62', text: 'Dominican Republic', code: 'DO' }			,{ value: '225', text: 'East Timor', code: 'TP' }			,{ value: '64', text: 'Ecuador', code: 'EC' }			,{ value: '66', text: 'Egypt', code: 'EG' }			,{ value: '211', text: 'El Salvador', code: 'SV' }			,{ value: '88', text: 'Equatorial Guinea', code: 'GQ' }			,{ value: '68', text: 'Eritrea', code: 'ER' }			,{ value: '65', text: 'Estonia', code: 'EE' }			,{ value: '70', text: 'Ethiopia', code: 'ET' }			,{ value: '73', text: 'Falkland Islands', code: 'FK' }			,{ value: '75', text: 'Faroe Islands', code: 'FO' }			,{ value: '72', text: 'Fiji', code: 'FJ' }			,{ value: '71', text: 'Finland', code: 'FI' }			,{ value: '80', text: 'French Guiana', code: 'GF' }			,{ value: '176', text: 'French Polynesia', code: 'PF' }			,{ value: '217', text: 'French Southern Territories', code: 'TF' }			,{ value: '77', text: 'Gabon', code: 'GA' }			,{ value: '85', text: 'Gambia', code: 'GM' }			,{ value: '79', text: 'Georgia', code: 'GE' }			,{ value: '81', text: 'Ghana', code: 'GH' }			,{ value: '82', text: 'Gibraltar', code: 'GI' }			,{ value: '89', text: 'Greece', code: 'GR' }			,{ value: '84', text: 'Greenland', code: 'GL' }			,{ value: '78', text: 'Grenada', code: 'GD' }			,{ value: '87', text: 'Guadeloupe', code: 'GP' }			,{ value: '92', text: 'Guam', code: 'GU' }			,{ value: '91', text: 'Guatemala', code: 'GT' }			,{ value: '83', text: 'Guernsey', code: 'GG' }			,{ value: '86', text: 'Guinea', code: 'GN' }			,{ value: '93', text: 'Guinea Bissau', code: 'GW' }			,{ value: '94', text: 'Guyana', code: 'GY' }			,{ value: '99', text: 'Haiti', code: 'HT' }			,{ value: '96', text: 'Heard Island and McDonald Islands', code: 'HM' }			,{ value: '238', text: 'Holy See (Vatican City State)', code: 'VA' }			,{ value: '97', text: 'Honduras', code: 'HN' }			,{ value: '95', text: 'Hong Kong', code: 'HK' }			,{ value: '100', text: 'Hungary', code: 'HU' }			,{ value: '109', text: 'Iceland', code: 'IS' }			,{ value: '105', text: 'India', code: 'IN' }			,{ value: '101', text: 'Indonesia', code: 'ID' }			,{ value: '108', text: 'Iran', code: 'IR' }			,{ value: '107', text: 'Iraq', code: 'IQ' }			,{ value: '102', text: 'Ireland', code: 'IE' }			,{ value: '104', text: 'Isle of Man', code: 'IM' }			,{ value: '103', text: 'Israel', code: 'IL' }			,{ value: '112', text: 'Jamaica', code: 'JM' }			,{ value: '114', text: 'Japan', code: 'JP' }			,{ value: '111', text: 'Jersey', code: 'JE' }			,{ value: '113', text: 'Jordan', code: 'JO' }			,{ value: '125', text: 'Kazakhstan', code: 'KZ' }			,{ value: '115', text: 'Kenya', code: 'KE' }			,{ value: '118', text: 'Kiribati', code: 'KI' }			,{ value: '255', text: 'Kosovo', code: 'XK' }			,{ value: '123', text: 'Kuwait', code: 'KW' }			,{ value: '116', text: 'Kyrgyzstan', code: 'KG' }			,{ value: '126', text: 'Laos', code: 'LA' }			,{ value: '135', text: 'Latvia', code: 'LV' }			,{ value: '127', text: 'Lebanon', code: 'LB' }			,{ value: '132', text: 'Lesotho', code: 'LS' }			,{ value: '131', text: 'Liberia', code: 'LR' }			,{ value: '136', text: 'Libya', code: 'LY' }			,{ value: '133', text: 'Lithuania', code: 'LT' }			,{ value: '148', text: 'Macau', code: 'MO' }			,{ value: '144', text: 'Macedonia, the former Yugoslav Republic of', code: 'MK' }			,{ value: '142', text: 'Madagascar', code: 'MG' }			,{ value: '156', text: 'Malawi', code: 'MW' }			,{ value: '158', text: 'Malaysia', code: 'MY' }			,{ value: '155', text: 'Maldives', code: 'MV' }			,{ value: '145', text: 'Mali', code: 'ML' }			,{ value: '153', text: 'Malta', code: 'MT' }			,{ value: '143', text: 'Marshall Islands', code: 'MH' }			,{ value: '150', text: 'Martinique', code: 'MQ' }			,{ value: '151', text: 'Mauritania', code: 'MR' }			,{ value: '154', text: 'Mauritius', code: 'MU' }			,{ value: '248', text: 'Mayotte', code: 'YT' }			,{ value: '157', text: 'Mexico', code: 'MX' }			,{ value: '74', text: 'Micronesia', code: 'FM' }			,{ value: '139', text: 'Moldova', code: 'MD' }			,{ value: '138', text: 'Monaco', code: 'MC' }			,{ value: '147', text: 'Mongolia', code: 'MN' }			,{ value: '140', text: 'Montenegro', code: 'ME' }			,{ value: '152', text: 'Montserrat', code: 'MS' }			,{ value: '137', text: 'Morocco', code: 'MA' }			,{ value: '159', text: 'Mozambique', code: 'MZ' }			,{ value: '146', text: 'Myanmar', code: 'MM' }			,{ value: '160', text: 'Namibia', code: 'NA' }			,{ value: '169', text: 'Nauru', code: 'NR' }			,{ value: '168', text: 'Nepal', code: 'NP' }			,{ value: '8', text: 'Netherlands Antilles', code: 'AN' }			,{ value: '170', text: 'Neutral Zone', code: 'NT' }			,{ value: '161', text: 'New Caledonia', code: 'NC' }			,{ value: '172', text: 'New Zealand', code: 'NZ' }			,{ value: '165', text: 'Nicaragua', code: 'NI' }			,{ value: '162', text: 'Niger', code: 'NE' }			,{ value: '164', text: 'Nigeria', code: 'NG' }			,{ value: '171', text: 'Niue', code: 'NU' }			,{ value: '254', text: 'Nordirland', code: '' }			,{ value: '163', text: 'Norfolk Island', code: 'NF' }			,{ value: '149', text: 'Northern Mariana Islands', code: 'MP' }			,{ value: '121', text: 'North Korea', code: 'KP' }			,{ value: '167', text: 'Norway', code: 'NO' }			,{ value: '173', text: 'Oman', code: 'OM' }			,{ value: '179', text: 'Pakistan', code: 'PK' }			,{ value: '186', text: 'Palau', code: 'PW' }			,{ value: '174', text: 'Panama', code: 'PA' }			,{ value: '177', text: 'Papua New Guinea', code: 'PG' }			,{ value: '187', text: 'Paraguay', code: 'PY' }			,{ value: '175', text: 'Peru', code: 'PE' }			,{ value: '178', text: 'Philippines', code: 'PH' }			,{ value: '182', text: 'Pitcairn Islands', code: 'PN' }			,{ value: '180', text: 'Poland', code: 'PL' }			,{ value: '185', text: 'Portugal', code: 'PT' }			,{ value: '183', text: 'Puerto Rico', code: 'PR' }			,{ value: '188', text: 'Qatar', code: 'QA' }			,{ value: '189', text: 'Réunion', code: 'RE' }			,{ value: '190', text: 'Romania', code: 'RO' }			,{ value: '192', text: 'Russian Federation', code: 'RU' }			,{ value: '193', text: 'Rwanda', code: 'RW' }			,{ value: '27', text: 'Saint Barthélémy', code: 'BL' }			,{ value: '200', text: 'Saint Helena, Ascension and Tristan da Cunha', code: 'SH' }			,{ value: '120', text: 'Saint Kitts and Nevis', code: 'KN' }			,{ value: '128', text: 'Saint Lucia', code: 'LC' }			,{ value: '141', text: 'Saint Martin (French part)', code: 'MF' }			,{ value: '181', text: 'Saint Pierre and Miquelon', code: 'PM' }			,{ value: '239', text: 'Saint Vincent and the Grenadines', code: 'VC' }			,{ value: '246', text: 'Samoa', code: 'WS' }			,{ value: '205', text: 'San Marino', code: 'SM' }			,{ value: '210', text: 'São Tomé and Príncipe', code: 'ST' }			,{ value: '194', text: 'Saudi Arabia', code: 'SA' }			,{ value: '206', text: 'Senegal', code: 'SN' }			,{ value: '191', text: 'Serbia', code: 'RS' }			,{ value: '196', text: 'Seychelles', code: 'SC' }			,{ value: '204', text: 'Sierra Leone', code: 'SL' }			,{ value: '199', text: 'Singapore', code: 'SG' }			,{ value: '212', text: 'Sint Maarten (Dutch part)', code: 'SX' }			,{ value: '203', text: 'Slovakia', code: 'SK' }			,{ value: '201', text: 'Slovenia', code: 'SI' }			,{ value: '195', text: 'Solomon Islands', code: 'SB' }			,{ value: '207', text: 'Somalia', code: 'SO' }			,{ value: '250', text: 'South Africa', code: 'ZA' }			,{ value: '90', text: 'South Georgia and the South Sandwich Islands', code: 'GS' }			,{ value: '122', text: 'South Korea', code: 'KR' }			,{ value: '209', text: 'South Sudan', code: 'SS' }			,{ value: '130', text: 'Sri Lanka', code: 'LK' }			,{ value: '184', text: 'State of Palestine', code: 'PS' }			,{ value: '197', text: 'Sudan', code: 'SD' }			,{ value: '208', text: 'Suriname', code: 'SR' }			,{ value: '202', text: 'Svalbard and Jan Mayen Islands', code: 'SJ' }			,{ value: '214', text: 'Swaziland', code: 'SZ' }			,{ value: '198', text: 'Sweden', code: 'SE' }			,{ value: '213', text: 'Syria', code: 'SY' }			,{ value: '229', text: 'Taiwan', code: 'TW' }			,{ value: '220', text: 'Tajikistan', code: 'TJ' }			,{ value: '230', text: 'Tanzania', code: 'TZ' }			,{ value: '219', text: 'Thailand', code: 'TH' }			,{ value: '256', text: 'Timor-Leste', code: 'TL' }			,{ value: '218', text: 'Togo', code: 'TG' }			,{ value: '221', text: 'Tokelau', code: 'TK' }			,{ value: '224', text: 'Tonga', code: 'TO' }			,{ value: '227', text: 'Trinidad and Tobago', code: 'TT' }			,{ value: '223', text: 'Tunisia', code: 'TN' }			,{ value: '226', text: 'Turkey', code: 'TR' }			,{ value: '222', text: 'Turkmenistan', code: 'TM' }			,{ value: '215', text: 'Turks and Caicos Islands', code: 'TC' }			,{ value: '228', text: 'Tuvalu', code: 'TV' }			,{ value: '232', text: 'Uganda', code: 'UG' }			,{ value: '231', text: 'Ukraine', code: 'UA' }			,{ value: '2', text: 'United Arab Emirates', code: 'AE' }			,{ value: '235', text: 'United States', code: 'US' }			,{ value: '236', text: 'Uruguay', code: 'UY' }			,{ value: '234', text: 'USA Minor Outlying Islands', code: 'UM' }			,{ value: '237', text: 'Uzbekistan', code: 'UZ' }			,{ value: '244', text: 'Vanuatu', code: 'VU' }			,{ value: '240', text: 'Venezuela', code: 'VE' }			,{ value: '243', text: 'Vietnam', code: 'VN' }			,{ value: '241', text: 'Virgin Islands (British)', code: 'VG' }			,{ value: '242', text: 'Virgin Islands (USA)', code: 'VI' }			,{ value: '245', text: 'Wallis and Futuna', code: 'WF' }			,{ value: '67', text: 'Western Sahara', code: 'EH' }			,{ value: '247', text: 'Yemen', code: 'YE' }			,{ value: '249', text: 'Yugoslavia', code: 'YU' }			,{ value: '252', text: 'Zaire', code: 'ZR' }			,{ value: '251', text: 'Zambia', code: 'ZM' }			,{ value: '253', text: 'Zimbabwe', code: 'ZW' }	                ],
                wrap: 'location'
            },
            'description': {
                label: 'message',
                element: 'textarea',
                required: true
            },
            'privacy': {
                label: 'I have read and accepted the <a href="PRIVACY_URL" target="_blank">Privacy policy</a>.',
                type: 'checkbox',
                required: true
            }
        }
    },
    'testing_modules': {
        introduction: 'Which modules are you interested in?',
        success: 'Your request has been received. Please confirm your e-mail address now.<br /> <br /> Please check your e-mail inbox now. To confirm your e-mail address, simply click on the link that you received in the confirmation e-mail from gastronovi.<br /> <br /> By the way: If you did not receive the confirmation e-mail, please check your spam folder or check if the e-mail address was entered correctly.',
        success_alternate: 'Your request has been received and your details will be checked. You will then receive an e-mail on how to proceed. Please note that the check may take some time.',
        button: 'Request a trial account',
        fields: {
            'gn_create_demo': {
                type: 'hidden',
                value: true
            },
            'gn_demo_language': {
                label: 'Language',
                element: 'select',
                required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: 'en_US', text: 'English US' }			,{ value: 'fr_CH', text: 'French (CH) / Français (CH)' }			,{ value: 'fr_FR', text: 'French / Français' }			,{ value: 'de_CH', text: 'German (CH) / Deutsch (CH)' }			,{ value: 'de_DE', text: 'German / Deutsch' }			,{ value: 'it_IT', text: 'Italian / Italiano' }	                ],
                value: Gastronovi.getLanguage([			,{ value: 'en_US', text: 'English US' }			,{ value: 'fr_CH', text: 'French (CH) / Français (CH)' }			,{ value: 'fr_FR', text: 'French / Français' }			,{ value: 'de_CH', text: 'German (CH) / Deutsch (CH)' }			,{ value: 'de_DE', text: 'German / Deutsch' }			,{ value: 'it_IT', text: 'Italian / Italiano' }	])
            },
            'gn_mod_pos': {
                label: 'cash register system',
                type: 'checkbox',
                wrap: 'modules1',
                onChange: function() {
                    if (!this.checked) {
                        document.getElementById(this.id.replace('gn_mod_pos', 'gn_mod_loyalty')).checked = false;
                        document.getElementById(this.id.replace('gn_mod_pos', 'gn_mod_cashbook')).checked = false;
                        document.getElementById(this.id.replace('gn_mod_pos', 'gn_mod_order')).checked = false;
                    }
                }
            },
            'gn_mod_loyalty': {
                label: 'customer loyalty',
                type: 'checkbox',
                wrap: 'modules1',
                onChange: function() {
                    if (this.checked) {
                        document.getElementById(this.id.replace('gn_mod_loyalty', 'gn_mod_pos')).checked = true;
                    }
                }
            },
            'gn_mod_cashbook': {
                label: 'cash book',
                type: 'checkbox',
                wrap: 'modules2',
                onChange: function() {
                    if (this.checked) {
                        document.getElementById(this.id.replace('gn_mod_cashbook', 'gn_mod_pos')).checked = true;
                    }
                }
            },
            'gn_mod_order': {
                label: 'ordering system',
                type: 'checkbox',
                wrap: 'modules2',
                onChange: function() {
                    if (this.checked) {
                        document.getElementById(this.id.replace('gn_mod_order', 'gn_mod_pos')).checked = true;
                    }
                }
            },
            'gn_mod_purchase': {
                label: 'purchasing system',
                type: 'checkbox',
                wrap: 'modules3'
            },
            'gn_mod_calculation': {
                label: 'calculation',
                type: 'checkbox',
                wrap: 'modules3'
            },
            'gn_mod_reservation': {
                label: 'table reservation',
                type: 'checkbox',
                wrap: 'modules4'
            },
            'gn_mod_menu': {
                label: 'menus',
                type: 'checkbox',
                wrap: 'modules4'
            },
            'gn_mod_homepage': {
                label: 'website',
                type: 'checkbox',
                wrap: 'modules5',
                onChange: function() {
                    if (!this.checked) {
                        document.getElementById(this.id.replace('gn_mod_homepage', 'gn_mod_newsletter')).checked = false;
                    }
                }
            },
            'gn_mod_newsletter': {
                label: 'Newsletter',
                type: 'checkbox',
                wrap: 'modules5',
                onChange: function() {
                    if (this.checked) {
                        document.getElementById(this.id.replace('gn_mod_newsletter', 'gn_mod_homepage')).checked = true;
                    }
                }
            },
            'gn_mod_presentation': {
                label: 'digital signage',
                type: 'checkbox',
                wrap: 'modules6'
            },
            'gn_mod_stock': {
                label: 'merchandise management',
                type: 'checkbox',
                wrap: 'modules6',
                onChange: function() {
                    if (this.checked) {
                        document.getElementById(this.id.replace('gn_mod_stock', 'gn_mod_calculation')).checked = true;
                        document.getElementById(this.id.replace('gn_mod_stock', 'gn_mod_purchase')).checked = true;
                        document.getElementById(this.id.replace('gn_mod_stock', 'gn_mod_calculation')).setAttribute('disabled', '');
                        document.getElementById(this.id.replace('gn_mod_stock', 'gn_mod_purchase')).setAttribute('disabled', '');
                    } else {
                        document.getElementById(this.id.replace('gn_mod_stock', 'gn_mod_calculation')).removeAttribute('disabled');
                        document.getElementById(this.id.replace('gn_mod_stock', 'gn_mod_purchase')).removeAttribute('disabled');
                    }
                }
            },
            'gn_mod_timetracking': {
                label: 'time recording',
                type: 'checkbox',
                wrap: 'modules7'
            }
        }
    },
    'testingcampaign_general': {
        title: 'Trial',
        footer: 'Full functionality, no payment data or cancellation required - test access ends automatically after 14 days.<br/>I agree to a personal and competent consultation or an individual offer, also for information purposes.',
        success: 'Your request has been received. Please confirm your e-mail address now.<br /> <br /> Please check your e-mail inbox now. To confirm your e-mail address, simply click on the link that you received in the confirmation e-mail from gastronovi.<br /> <br /> By the way: If you did not receive the confirmation e-mail, please check your spam folder or check if the e-mail address was entered correctly.',
        success_alternate: 'Your request has been received and your details will be checked. You will then receive an e-mail on how to proceed. Please note that the check may take some time.',
        button: 'Request a trial account',
        fields: {
            'gn_mod_campaign': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_volume': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_monthly': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_yearly': {
                type: 'hidden'
            },
            'gn_mod_campaign_volume': {
                type: 'hidden'
            },
            'gn_mod_campaign_monthly': {
                type: 'hidden'
            },
            'gn_mod_campaign_yearly': {
                type: 'hidden'
            },
            'gn_mod_discount': {
                type: 'hidden'
            },
            'gn_demo_template_id': {
                type: 'hidden'
            },
            'gn_sync_mailchimp': {
                type: 'hidden'
            },
            'gn_create_demo': {
                type: 'hidden',
                value: true
            },
            'gn_company_type': {
                label: 'Type of business',
                type: 'hidden',
                //element: 'select',
                //required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: 'restaurant', text: 'Restaurant' }			,{ value: 'hotel', text: 'Hotel' }			,{ value: 'bar', text: 'Bar' }			,{ value: 'cafe', text: 'Cafe' }			,{ value: 'catering', text: 'Catering' }			,{ value: 'disco', text: 'Disco' }			,{ value: 'ice', text: 'Ice cream parlours' }			,{ value: 'canteen', text: 'Canteen' }			,{ value: 'snack', text: 'Snack' }			,{ value: 'foodtruck', text: 'Foodtruck' }			,{ value: 'camping', text: 'Camping' }			,{ value: 'franchise', text: 'Franchise' }			,{ value: 'other', text: 'Other' }			,{ value: 'pool', text: 'Swimming pool' }	                ]
            },
            'name': {
                label: 'company name',
                required: true
            },
            'zip': {
                label: 'POSTCODE',
                required: true,
                wrap: 'location',
                flex: 0.3
            },
            'city': {
                label: 'town',
                required: true,
                wrap: 'location',
                flex: 0.7
            },
            'country_id': {
                label: 'country',
                element: 'select',
                required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: '58', text: 'Germany', code: 'DE' }			,{ value: '13', text: 'Austria', code: 'AT' }			,{ value: '44', text: 'Switzerland', code: 'CH' }			,{ value: '76', text: 'France', code: 'FR' }			,{ value: '110', text: 'Italy', code: 'IT' }			,{ value: '69', text: 'Spain', code: 'ES' }			,{ value: '233', text: 'United Kingdom', code: 'GB' }			,{ value: '129', text: 'Liechtenstein', code: 'LI' }			,{ value: '134', text: 'Luxembourg', code: 'LU' }			,{ value: '21', text: 'Belgium', code: 'BE' }			,{ value: '166', text: 'Netherlands', code: 'NL' }			,{ value: null, text: '-------------', code: '' }			,{ value: '3', text: 'Afghanistan', code: 'AF' }			,{ value: '16', text: 'Åland Islands', code: 'AX' }			,{ value: '6', text: 'Albania', code: 'AL' }			,{ value: '63', text: 'Algeria', code: 'DZ' }			,{ value: '12', text: 'American Samoa', code: 'AS' }			,{ value: '1', text: 'Andorra', code: 'AD' }			,{ value: '9', text: 'Angola', code: 'AO' }			,{ value: '5', text: 'Anguilla', code: 'AI' }			,{ value: '10', text: 'Antarctica', code: 'AQ' }			,{ value: '4', text: 'Antigua and Barbuda', code: 'AG' }			,{ value: '11', text: 'Argentina', code: 'AR' }			,{ value: '7', text: 'Armenia', code: 'AM' }			,{ value: '15', text: 'Aruba', code: 'AW' }			,{ value: '14', text: 'Australia', code: 'AU' }			,{ value: '17', text: 'Azerbaijan', code: 'AZ' }			,{ value: '33', text: 'Bahamas', code: 'BS' }			,{ value: '24', text: 'Bahrain', code: 'BH' }			,{ value: '20', text: 'Bangladesh', code: 'BD' }			,{ value: '19', text: 'Barbados', code: 'BB' }			,{ value: '37', text: 'Belarus', code: 'BY' }			,{ value: '38', text: 'Belize', code: 'BZ' }			,{ value: '26', text: 'Benin', code: 'BJ' }			,{ value: '28', text: 'Bermuda', code: 'BM' }			,{ value: '34', text: 'Bhutan', code: 'BT' }			,{ value: '30', text: 'Bolivia', code: 'BO' }			,{ value: '31', text: 'Bonaire, Sint Eustatius and Saba', code: 'BQ' }			,{ value: '18', text: 'Bosnia and Herzegovina', code: 'BA' }			,{ value: '36', text: 'Botswana', code: 'BW' }			,{ value: '35', text: 'Bouvet Island', code: 'BV' }			,{ value: '32', text: 'Brazil', code: 'BR' }			,{ value: '106', text: 'British Indian Ocean Territory', code: 'IO' }			,{ value: '29', text: 'Brunei Darussalam', code: 'BN' }			,{ value: '23', text: 'Bulgaria', code: 'BG' }			,{ value: '22', text: 'Burkina Faso', code: 'BF' }			,{ value: '25', text: 'Burundi', code: 'BI' }			,{ value: '117', text: 'Cambodia', code: 'KH' }			,{ value: '48', text: 'Cameroon', code: 'CM' }			,{ value: '39', text: 'Canada', code: 'CA' }			,{ value: '53', text: 'Cape Verde', code: 'CV' }			,{ value: '124', text: 'Cayman Islands', code: 'KY' }			,{ value: '41', text: 'Central African Republic', code: 'CF' }			,{ value: '216', text: 'Chad', code: 'TD' }			,{ value: '47', text: 'Chile', code: 'CL' }			,{ value: '49', text: 'China', code: 'CN' }			,{ value: '55', text: 'Christmas Island', code: 'CX' }			,{ value: '40', text: 'Cocos (Keeling) Islands', code: 'CC' }			,{ value: '50', text: 'Colombia', code: 'CO' }			,{ value: '119', text: 'Comoros', code: 'KM' }			,{ value: '43', text: 'Congo', code: 'CG' }			,{ value: '46', text: 'Cook Islands', code: 'CK' }			,{ value: '51', text: 'Costa Rica', code: 'CR' }			,{ value: '45', text: 'Côte d\'Ivoire', code: 'CI' }			,{ value: '98', text: 'Croatia', code: 'HR' }			,{ value: '52', text: 'Cuba', code: 'CU' }			,{ value: '54', text: 'Curaçao', code: 'CW' }			,{ value: '56', text: 'Cyprus', code: 'CY' }			,{ value: '57', text: 'Czech Republic', code: 'CZ' }			,{ value: '42', text: 'Democratic Republic of the Congo', code: 'CD' }			,{ value: '60', text: 'Denmark', code: 'DK' }			,{ value: '59', text: 'Djibouti', code: 'DJ' }			,{ value: '61', text: 'Dominica', code: 'DM' }			,{ value: '62', text: 'Dominican Republic', code: 'DO' }			,{ value: '225', text: 'East Timor', code: 'TP' }			,{ value: '64', text: 'Ecuador', code: 'EC' }			,{ value: '66', text: 'Egypt', code: 'EG' }			,{ value: '211', text: 'El Salvador', code: 'SV' }			,{ value: '88', text: 'Equatorial Guinea', code: 'GQ' }			,{ value: '68', text: 'Eritrea', code: 'ER' }			,{ value: '65', text: 'Estonia', code: 'EE' }			,{ value: '70', text: 'Ethiopia', code: 'ET' }			,{ value: '73', text: 'Falkland Islands', code: 'FK' }			,{ value: '75', text: 'Faroe Islands', code: 'FO' }			,{ value: '72', text: 'Fiji', code: 'FJ' }			,{ value: '71', text: 'Finland', code: 'FI' }			,{ value: '80', text: 'French Guiana', code: 'GF' }			,{ value: '176', text: 'French Polynesia', code: 'PF' }			,{ value: '217', text: 'French Southern Territories', code: 'TF' }			,{ value: '77', text: 'Gabon', code: 'GA' }			,{ value: '85', text: 'Gambia', code: 'GM' }			,{ value: '79', text: 'Georgia', code: 'GE' }			,{ value: '81', text: 'Ghana', code: 'GH' }			,{ value: '82', text: 'Gibraltar', code: 'GI' }			,{ value: '89', text: 'Greece', code: 'GR' }			,{ value: '84', text: 'Greenland', code: 'GL' }			,{ value: '78', text: 'Grenada', code: 'GD' }			,{ value: '87', text: 'Guadeloupe', code: 'GP' }			,{ value: '92', text: 'Guam', code: 'GU' }			,{ value: '91', text: 'Guatemala', code: 'GT' }			,{ value: '83', text: 'Guernsey', code: 'GG' }			,{ value: '86', text: 'Guinea', code: 'GN' }			,{ value: '93', text: 'Guinea Bissau', code: 'GW' }			,{ value: '94', text: 'Guyana', code: 'GY' }			,{ value: '99', text: 'Haiti', code: 'HT' }			,{ value: '96', text: 'Heard Island and McDonald Islands', code: 'HM' }			,{ value: '238', text: 'Holy See (Vatican City State)', code: 'VA' }			,{ value: '97', text: 'Honduras', code: 'HN' }			,{ value: '95', text: 'Hong Kong', code: 'HK' }			,{ value: '100', text: 'Hungary', code: 'HU' }			,{ value: '109', text: 'Iceland', code: 'IS' }			,{ value: '105', text: 'India', code: 'IN' }			,{ value: '101', text: 'Indonesia', code: 'ID' }			,{ value: '108', text: 'Iran', code: 'IR' }			,{ value: '107', text: 'Iraq', code: 'IQ' }			,{ value: '102', text: 'Ireland', code: 'IE' }			,{ value: '104', text: 'Isle of Man', code: 'IM' }			,{ value: '103', text: 'Israel', code: 'IL' }			,{ value: '112', text: 'Jamaica', code: 'JM' }			,{ value: '114', text: 'Japan', code: 'JP' }			,{ value: '111', text: 'Jersey', code: 'JE' }			,{ value: '113', text: 'Jordan', code: 'JO' }			,{ value: '125', text: 'Kazakhstan', code: 'KZ' }			,{ value: '115', text: 'Kenya', code: 'KE' }			,{ value: '118', text: 'Kiribati', code: 'KI' }			,{ value: '255', text: 'Kosovo', code: 'XK' }			,{ value: '123', text: 'Kuwait', code: 'KW' }			,{ value: '116', text: 'Kyrgyzstan', code: 'KG' }			,{ value: '126', text: 'Laos', code: 'LA' }			,{ value: '135', text: 'Latvia', code: 'LV' }			,{ value: '127', text: 'Lebanon', code: 'LB' }			,{ value: '132', text: 'Lesotho', code: 'LS' }			,{ value: '131', text: 'Liberia', code: 'LR' }			,{ value: '136', text: 'Libya', code: 'LY' }			,{ value: '133', text: 'Lithuania', code: 'LT' }			,{ value: '148', text: 'Macau', code: 'MO' }			,{ value: '144', text: 'Macedonia, the former Yugoslav Republic of', code: 'MK' }			,{ value: '142', text: 'Madagascar', code: 'MG' }			,{ value: '156', text: 'Malawi', code: 'MW' }			,{ value: '158', text: 'Malaysia', code: 'MY' }			,{ value: '155', text: 'Maldives', code: 'MV' }			,{ value: '145', text: 'Mali', code: 'ML' }			,{ value: '153', text: 'Malta', code: 'MT' }			,{ value: '143', text: 'Marshall Islands', code: 'MH' }			,{ value: '150', text: 'Martinique', code: 'MQ' }			,{ value: '151', text: 'Mauritania', code: 'MR' }			,{ value: '154', text: 'Mauritius', code: 'MU' }			,{ value: '248', text: 'Mayotte', code: 'YT' }			,{ value: '157', text: 'Mexico', code: 'MX' }			,{ value: '74', text: 'Micronesia', code: 'FM' }			,{ value: '139', text: 'Moldova', code: 'MD' }			,{ value: '138', text: 'Monaco', code: 'MC' }			,{ value: '147', text: 'Mongolia', code: 'MN' }			,{ value: '140', text: 'Montenegro', code: 'ME' }			,{ value: '152', text: 'Montserrat', code: 'MS' }			,{ value: '137', text: 'Morocco', code: 'MA' }			,{ value: '159', text: 'Mozambique', code: 'MZ' }			,{ value: '146', text: 'Myanmar', code: 'MM' }			,{ value: '160', text: 'Namibia', code: 'NA' }			,{ value: '169', text: 'Nauru', code: 'NR' }			,{ value: '168', text: 'Nepal', code: 'NP' }			,{ value: '8', text: 'Netherlands Antilles', code: 'AN' }			,{ value: '170', text: 'Neutral Zone', code: 'NT' }			,{ value: '161', text: 'New Caledonia', code: 'NC' }			,{ value: '172', text: 'New Zealand', code: 'NZ' }			,{ value: '165', text: 'Nicaragua', code: 'NI' }			,{ value: '162', text: 'Niger', code: 'NE' }			,{ value: '164', text: 'Nigeria', code: 'NG' }			,{ value: '171', text: 'Niue', code: 'NU' }			,{ value: '254', text: 'Nordirland', code: '' }			,{ value: '163', text: 'Norfolk Island', code: 'NF' }			,{ value: '149', text: 'Northern Mariana Islands', code: 'MP' }			,{ value: '121', text: 'North Korea', code: 'KP' }			,{ value: '167', text: 'Norway', code: 'NO' }			,{ value: '173', text: 'Oman', code: 'OM' }			,{ value: '179', text: 'Pakistan', code: 'PK' }			,{ value: '186', text: 'Palau', code: 'PW' }			,{ value: '174', text: 'Panama', code: 'PA' }			,{ value: '177', text: 'Papua New Guinea', code: 'PG' }			,{ value: '187', text: 'Paraguay', code: 'PY' }			,{ value: '175', text: 'Peru', code: 'PE' }			,{ value: '178', text: 'Philippines', code: 'PH' }			,{ value: '182', text: 'Pitcairn Islands', code: 'PN' }			,{ value: '180', text: 'Poland', code: 'PL' }			,{ value: '185', text: 'Portugal', code: 'PT' }			,{ value: '183', text: 'Puerto Rico', code: 'PR' }			,{ value: '188', text: 'Qatar', code: 'QA' }			,{ value: '189', text: 'Réunion', code: 'RE' }			,{ value: '190', text: 'Romania', code: 'RO' }			,{ value: '192', text: 'Russian Federation', code: 'RU' }			,{ value: '193', text: 'Rwanda', code: 'RW' }			,{ value: '27', text: 'Saint Barthélémy', code: 'BL' }			,{ value: '200', text: 'Saint Helena, Ascension and Tristan da Cunha', code: 'SH' }			,{ value: '120', text: 'Saint Kitts and Nevis', code: 'KN' }			,{ value: '128', text: 'Saint Lucia', code: 'LC' }			,{ value: '141', text: 'Saint Martin (French part)', code: 'MF' }			,{ value: '181', text: 'Saint Pierre and Miquelon', code: 'PM' }			,{ value: '239', text: 'Saint Vincent and the Grenadines', code: 'VC' }			,{ value: '246', text: 'Samoa', code: 'WS' }			,{ value: '205', text: 'San Marino', code: 'SM' }			,{ value: '210', text: 'São Tomé and Príncipe', code: 'ST' }			,{ value: '194', text: 'Saudi Arabia', code: 'SA' }			,{ value: '206', text: 'Senegal', code: 'SN' }			,{ value: '191', text: 'Serbia', code: 'RS' }			,{ value: '196', text: 'Seychelles', code: 'SC' }			,{ value: '204', text: 'Sierra Leone', code: 'SL' }			,{ value: '199', text: 'Singapore', code: 'SG' }			,{ value: '212', text: 'Sint Maarten (Dutch part)', code: 'SX' }			,{ value: '203', text: 'Slovakia', code: 'SK' }			,{ value: '201', text: 'Slovenia', code: 'SI' }			,{ value: '195', text: 'Solomon Islands', code: 'SB' }			,{ value: '207', text: 'Somalia', code: 'SO' }			,{ value: '250', text: 'South Africa', code: 'ZA' }			,{ value: '90', text: 'South Georgia and the South Sandwich Islands', code: 'GS' }			,{ value: '122', text: 'South Korea', code: 'KR' }			,{ value: '209', text: 'South Sudan', code: 'SS' }			,{ value: '130', text: 'Sri Lanka', code: 'LK' }			,{ value: '184', text: 'State of Palestine', code: 'PS' }			,{ value: '197', text: 'Sudan', code: 'SD' }			,{ value: '208', text: 'Suriname', code: 'SR' }			,{ value: '202', text: 'Svalbard and Jan Mayen Islands', code: 'SJ' }			,{ value: '214', text: 'Swaziland', code: 'SZ' }			,{ value: '198', text: 'Sweden', code: 'SE' }			,{ value: '213', text: 'Syria', code: 'SY' }			,{ value: '229', text: 'Taiwan', code: 'TW' }			,{ value: '220', text: 'Tajikistan', code: 'TJ' }			,{ value: '230', text: 'Tanzania', code: 'TZ' }			,{ value: '219', text: 'Thailand', code: 'TH' }			,{ value: '256', text: 'Timor-Leste', code: 'TL' }			,{ value: '218', text: 'Togo', code: 'TG' }			,{ value: '221', text: 'Tokelau', code: 'TK' }			,{ value: '224', text: 'Tonga', code: 'TO' }			,{ value: '227', text: 'Trinidad and Tobago', code: 'TT' }			,{ value: '223', text: 'Tunisia', code: 'TN' }			,{ value: '226', text: 'Turkey', code: 'TR' }			,{ value: '222', text: 'Turkmenistan', code: 'TM' }			,{ value: '215', text: 'Turks and Caicos Islands', code: 'TC' }			,{ value: '228', text: 'Tuvalu', code: 'TV' }			,{ value: '232', text: 'Uganda', code: 'UG' }			,{ value: '231', text: 'Ukraine', code: 'UA' }			,{ value: '2', text: 'United Arab Emirates', code: 'AE' }			,{ value: '235', text: 'United States', code: 'US' }			,{ value: '236', text: 'Uruguay', code: 'UY' }			,{ value: '234', text: 'USA Minor Outlying Islands', code: 'UM' }			,{ value: '237', text: 'Uzbekistan', code: 'UZ' }			,{ value: '244', text: 'Vanuatu', code: 'VU' }			,{ value: '240', text: 'Venezuela', code: 'VE' }			,{ value: '243', text: 'Vietnam', code: 'VN' }			,{ value: '241', text: 'Virgin Islands (British)', code: 'VG' }			,{ value: '242', text: 'Virgin Islands (USA)', code: 'VI' }			,{ value: '245', text: 'Wallis and Futuna', code: 'WF' }			,{ value: '67', text: 'Western Sahara', code: 'EH' }			,{ value: '247', text: 'Yemen', code: 'YE' }			,{ value: '249', text: 'Yugoslavia', code: 'YU' }			,{ value: '252', text: 'Zaire', code: 'ZR' }			,{ value: '251', text: 'Zambia', code: 'ZM' }			,{ value: '253', text: 'Zimbabwe', code: 'ZW' }	                ],
                wrap: 'location'
            },
            'email_from': {
                label: 'email',
                type: 'email',
                required: true,
                wrap: 'contact'
            },
            'phone': {
                label: 'Phone',
                type: 'tel',
                required: true,
                wrap: 'contact'
            },
            'contact_name': {
                label: 'Contact for',
                required: true
            },
            'gn_demo_language': {
                label: 'Language',
                element: 'select',
                required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: 'en_US', text: 'English US' }			,{ value: 'fr_CH', text: 'French (CH) / Français (CH)' }			,{ value: 'fr_FR', text: 'French / Français' }			,{ value: 'de_CH', text: 'German (CH) / Deutsch (CH)' }			,{ value: 'de_DE', text: 'German / Deutsch' }			,{ value: 'it_IT', text: 'Italian / Italiano' }	                ],
                value: Gastronovi.getLanguage([			,{ value: 'en_US', text: 'English US' }			,{ value: 'fr_CH', text: 'French (CH) / Français (CH)' }			,{ value: 'fr_FR', text: 'French / Français' }			,{ value: 'de_CH', text: 'German (CH) / Deutsch (CH)' }			,{ value: 'de_DE', text: 'German / Deutsch' }			,{ value: 'it_IT', text: 'Italian / Italiano' }	])
            },
            'privacy': {
                label: 'I have read and accepted the <a href="PRIVACY_URL" target="_blank">Privacy policy</a>.',
                type: 'checkbox',
                required: true
            }
        }
    },
    'newsletter_general': {
        title: 'Newsletter',
        footer: 'Receive the latest information by newsletter.',
        success: 'Your data has been successfully transmitted.',
        button: 'Submit',
        fields: {
            'gn_mod_campaign': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_volume': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_monthly': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_yearly': {
                type: 'hidden'
            },
            'gn_mod_campaign_volume': {
                type: 'hidden'
            },
            'gn_mod_campaign_monthly': {
                type: 'hidden'
            },
            'gn_mod_campaign_yearly': {
                type: 'hidden'
            },
            'gn_mod_discount': {
                type: 'hidden'
            },
            'gn_demo_template_id': {
                type: 'hidden'
            },
            'gn_sync_mailchimp': {
                type: 'hidden',
                value: true
            },
            'contact_name': {
                label: 'Contact for',
                required: true
            },
            'email_from': {
                label: 'email',
                type: 'email',
                required: true,
                wrap: 'contact'
            },
            'phone': {
                label: 'Phone',
                type: 'tel',
                required: true,
                wrap: 'contact'
            },
            'gn_company_type': {
                label: 'Type of business',
                type: 'hidden',
                //element: 'select',
                //required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: 'restaurant', text: 'Restaurant' }			,{ value: 'hotel', text: 'Hotel' }			,{ value: 'bar', text: 'Bar' }			,{ value: 'cafe', text: 'Cafe' }			,{ value: 'catering', text: 'Catering' }			,{ value: 'disco', text: 'Disco' }			,{ value: 'ice', text: 'Ice cream parlours' }			,{ value: 'canteen', text: 'Canteen' }			,{ value: 'snack', text: 'Snack' }			,{ value: 'foodtruck', text: 'Foodtruck' }			,{ value: 'camping', text: 'Camping' }			,{ value: 'franchise', text: 'Franchise' }			,{ value: 'other', text: 'Other' }			,{ value: 'pool', text: 'Swimming pool' }	                ]
            },
            'name': {
                label: 'company name',
                required: true
            },
            'zip': {
                label: 'POSTCODE',
                required: true,
                wrap: 'location',
                flex: 0.3
            },
            'city': {
                label: 'town',
                required: true,
                wrap: 'location',
                flex: 0.7
            },
            'country_id': {
                label: 'country',
                element: 'select',
                required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: '58', text: 'Germany', code: 'DE' }			,{ value: '13', text: 'Austria', code: 'AT' }			,{ value: '44', text: 'Switzerland', code: 'CH' }			,{ value: '76', text: 'France', code: 'FR' }			,{ value: '110', text: 'Italy', code: 'IT' }			,{ value: '69', text: 'Spain', code: 'ES' }			,{ value: '233', text: 'United Kingdom', code: 'GB' }			,{ value: '129', text: 'Liechtenstein', code: 'LI' }			,{ value: '134', text: 'Luxembourg', code: 'LU' }			,{ value: '21', text: 'Belgium', code: 'BE' }			,{ value: '166', text: 'Netherlands', code: 'NL' }			,{ value: null, text: '-------------', code: '' }			,{ value: '3', text: 'Afghanistan', code: 'AF' }			,{ value: '16', text: 'Åland Islands', code: 'AX' }			,{ value: '6', text: 'Albania', code: 'AL' }			,{ value: '63', text: 'Algeria', code: 'DZ' }			,{ value: '12', text: 'American Samoa', code: 'AS' }			,{ value: '1', text: 'Andorra', code: 'AD' }			,{ value: '9', text: 'Angola', code: 'AO' }			,{ value: '5', text: 'Anguilla', code: 'AI' }			,{ value: '10', text: 'Antarctica', code: 'AQ' }			,{ value: '4', text: 'Antigua and Barbuda', code: 'AG' }			,{ value: '11', text: 'Argentina', code: 'AR' }			,{ value: '7', text: 'Armenia', code: 'AM' }			,{ value: '15', text: 'Aruba', code: 'AW' }			,{ value: '14', text: 'Australia', code: 'AU' }			,{ value: '17', text: 'Azerbaijan', code: 'AZ' }			,{ value: '33', text: 'Bahamas', code: 'BS' }			,{ value: '24', text: 'Bahrain', code: 'BH' }			,{ value: '20', text: 'Bangladesh', code: 'BD' }			,{ value: '19', text: 'Barbados', code: 'BB' }			,{ value: '37', text: 'Belarus', code: 'BY' }			,{ value: '38', text: 'Belize', code: 'BZ' }			,{ value: '26', text: 'Benin', code: 'BJ' }			,{ value: '28', text: 'Bermuda', code: 'BM' }			,{ value: '34', text: 'Bhutan', code: 'BT' }			,{ value: '30', text: 'Bolivia', code: 'BO' }			,{ value: '31', text: 'Bonaire, Sint Eustatius and Saba', code: 'BQ' }			,{ value: '18', text: 'Bosnia and Herzegovina', code: 'BA' }			,{ value: '36', text: 'Botswana', code: 'BW' }			,{ value: '35', text: 'Bouvet Island', code: 'BV' }			,{ value: '32', text: 'Brazil', code: 'BR' }			,{ value: '106', text: 'British Indian Ocean Territory', code: 'IO' }			,{ value: '29', text: 'Brunei Darussalam', code: 'BN' }			,{ value: '23', text: 'Bulgaria', code: 'BG' }			,{ value: '22', text: 'Burkina Faso', code: 'BF' }			,{ value: '25', text: 'Burundi', code: 'BI' }			,{ value: '117', text: 'Cambodia', code: 'KH' }			,{ value: '48', text: 'Cameroon', code: 'CM' }			,{ value: '39', text: 'Canada', code: 'CA' }			,{ value: '53', text: 'Cape Verde', code: 'CV' }			,{ value: '124', text: 'Cayman Islands', code: 'KY' }			,{ value: '41', text: 'Central African Republic', code: 'CF' }			,{ value: '216', text: 'Chad', code: 'TD' }			,{ value: '47', text: 'Chile', code: 'CL' }			,{ value: '49', text: 'China', code: 'CN' }			,{ value: '55', text: 'Christmas Island', code: 'CX' }			,{ value: '40', text: 'Cocos (Keeling) Islands', code: 'CC' }			,{ value: '50', text: 'Colombia', code: 'CO' }			,{ value: '119', text: 'Comoros', code: 'KM' }			,{ value: '43', text: 'Congo', code: 'CG' }			,{ value: '46', text: 'Cook Islands', code: 'CK' }			,{ value: '51', text: 'Costa Rica', code: 'CR' }			,{ value: '45', text: 'Côte d\'Ivoire', code: 'CI' }			,{ value: '98', text: 'Croatia', code: 'HR' }			,{ value: '52', text: 'Cuba', code: 'CU' }			,{ value: '54', text: 'Curaçao', code: 'CW' }			,{ value: '56', text: 'Cyprus', code: 'CY' }			,{ value: '57', text: 'Czech Republic', code: 'CZ' }			,{ value: '42', text: 'Democratic Republic of the Congo', code: 'CD' }			,{ value: '60', text: 'Denmark', code: 'DK' }			,{ value: '59', text: 'Djibouti', code: 'DJ' }			,{ value: '61', text: 'Dominica', code: 'DM' }			,{ value: '62', text: 'Dominican Republic', code: 'DO' }			,{ value: '225', text: 'East Timor', code: 'TP' }			,{ value: '64', text: 'Ecuador', code: 'EC' }			,{ value: '66', text: 'Egypt', code: 'EG' }			,{ value: '211', text: 'El Salvador', code: 'SV' }			,{ value: '88', text: 'Equatorial Guinea', code: 'GQ' }			,{ value: '68', text: 'Eritrea', code: 'ER' }			,{ value: '65', text: 'Estonia', code: 'EE' }			,{ value: '70', text: 'Ethiopia', code: 'ET' }			,{ value: '73', text: 'Falkland Islands', code: 'FK' }			,{ value: '75', text: 'Faroe Islands', code: 'FO' }			,{ value: '72', text: 'Fiji', code: 'FJ' }			,{ value: '71', text: 'Finland', code: 'FI' }			,{ value: '80', text: 'French Guiana', code: 'GF' }			,{ value: '176', text: 'French Polynesia', code: 'PF' }			,{ value: '217', text: 'French Southern Territories', code: 'TF' }			,{ value: '77', text: 'Gabon', code: 'GA' }			,{ value: '85', text: 'Gambia', code: 'GM' }			,{ value: '79', text: 'Georgia', code: 'GE' }			,{ value: '81', text: 'Ghana', code: 'GH' }			,{ value: '82', text: 'Gibraltar', code: 'GI' }			,{ value: '89', text: 'Greece', code: 'GR' }			,{ value: '84', text: 'Greenland', code: 'GL' }			,{ value: '78', text: 'Grenada', code: 'GD' }			,{ value: '87', text: 'Guadeloupe', code: 'GP' }			,{ value: '92', text: 'Guam', code: 'GU' }			,{ value: '91', text: 'Guatemala', code: 'GT' }			,{ value: '83', text: 'Guernsey', code: 'GG' }			,{ value: '86', text: 'Guinea', code: 'GN' }			,{ value: '93', text: 'Guinea Bissau', code: 'GW' }			,{ value: '94', text: 'Guyana', code: 'GY' }			,{ value: '99', text: 'Haiti', code: 'HT' }			,{ value: '96', text: 'Heard Island and McDonald Islands', code: 'HM' }			,{ value: '238', text: 'Holy See (Vatican City State)', code: 'VA' }			,{ value: '97', text: 'Honduras', code: 'HN' }			,{ value: '95', text: 'Hong Kong', code: 'HK' }			,{ value: '100', text: 'Hungary', code: 'HU' }			,{ value: '109', text: 'Iceland', code: 'IS' }			,{ value: '105', text: 'India', code: 'IN' }			,{ value: '101', text: 'Indonesia', code: 'ID' }			,{ value: '108', text: 'Iran', code: 'IR' }			,{ value: '107', text: 'Iraq', code: 'IQ' }			,{ value: '102', text: 'Ireland', code: 'IE' }			,{ value: '104', text: 'Isle of Man', code: 'IM' }			,{ value: '103', text: 'Israel', code: 'IL' }			,{ value: '112', text: 'Jamaica', code: 'JM' }			,{ value: '114', text: 'Japan', code: 'JP' }			,{ value: '111', text: 'Jersey', code: 'JE' }			,{ value: '113', text: 'Jordan', code: 'JO' }			,{ value: '125', text: 'Kazakhstan', code: 'KZ' }			,{ value: '115', text: 'Kenya', code: 'KE' }			,{ value: '118', text: 'Kiribati', code: 'KI' }			,{ value: '255', text: 'Kosovo', code: 'XK' }			,{ value: '123', text: 'Kuwait', code: 'KW' }			,{ value: '116', text: 'Kyrgyzstan', code: 'KG' }			,{ value: '126', text: 'Laos', code: 'LA' }			,{ value: '135', text: 'Latvia', code: 'LV' }			,{ value: '127', text: 'Lebanon', code: 'LB' }			,{ value: '132', text: 'Lesotho', code: 'LS' }			,{ value: '131', text: 'Liberia', code: 'LR' }			,{ value: '136', text: 'Libya', code: 'LY' }			,{ value: '133', text: 'Lithuania', code: 'LT' }			,{ value: '148', text: 'Macau', code: 'MO' }			,{ value: '144', text: 'Macedonia, the former Yugoslav Republic of', code: 'MK' }			,{ value: '142', text: 'Madagascar', code: 'MG' }			,{ value: '156', text: 'Malawi', code: 'MW' }			,{ value: '158', text: 'Malaysia', code: 'MY' }			,{ value: '155', text: 'Maldives', code: 'MV' }			,{ value: '145', text: 'Mali', code: 'ML' }			,{ value: '153', text: 'Malta', code: 'MT' }			,{ value: '143', text: 'Marshall Islands', code: 'MH' }			,{ value: '150', text: 'Martinique', code: 'MQ' }			,{ value: '151', text: 'Mauritania', code: 'MR' }			,{ value: '154', text: 'Mauritius', code: 'MU' }			,{ value: '248', text: 'Mayotte', code: 'YT' }			,{ value: '157', text: 'Mexico', code: 'MX' }			,{ value: '74', text: 'Micronesia', code: 'FM' }			,{ value: '139', text: 'Moldova', code: 'MD' }			,{ value: '138', text: 'Monaco', code: 'MC' }			,{ value: '147', text: 'Mongolia', code: 'MN' }			,{ value: '140', text: 'Montenegro', code: 'ME' }			,{ value: '152', text: 'Montserrat', code: 'MS' }			,{ value: '137', text: 'Morocco', code: 'MA' }			,{ value: '159', text: 'Mozambique', code: 'MZ' }			,{ value: '146', text: 'Myanmar', code: 'MM' }			,{ value: '160', text: 'Namibia', code: 'NA' }			,{ value: '169', text: 'Nauru', code: 'NR' }			,{ value: '168', text: 'Nepal', code: 'NP' }			,{ value: '8', text: 'Netherlands Antilles', code: 'AN' }			,{ value: '170', text: 'Neutral Zone', code: 'NT' }			,{ value: '161', text: 'New Caledonia', code: 'NC' }			,{ value: '172', text: 'New Zealand', code: 'NZ' }			,{ value: '165', text: 'Nicaragua', code: 'NI' }			,{ value: '162', text: 'Niger', code: 'NE' }			,{ value: '164', text: 'Nigeria', code: 'NG' }			,{ value: '171', text: 'Niue', code: 'NU' }			,{ value: '254', text: 'Nordirland', code: '' }			,{ value: '163', text: 'Norfolk Island', code: 'NF' }			,{ value: '149', text: 'Northern Mariana Islands', code: 'MP' }			,{ value: '121', text: 'North Korea', code: 'KP' }			,{ value: '167', text: 'Norway', code: 'NO' }			,{ value: '173', text: 'Oman', code: 'OM' }			,{ value: '179', text: 'Pakistan', code: 'PK' }			,{ value: '186', text: 'Palau', code: 'PW' }			,{ value: '174', text: 'Panama', code: 'PA' }			,{ value: '177', text: 'Papua New Guinea', code: 'PG' }			,{ value: '187', text: 'Paraguay', code: 'PY' }			,{ value: '175', text: 'Peru', code: 'PE' }			,{ value: '178', text: 'Philippines', code: 'PH' }			,{ value: '182', text: 'Pitcairn Islands', code: 'PN' }			,{ value: '180', text: 'Poland', code: 'PL' }			,{ value: '185', text: 'Portugal', code: 'PT' }			,{ value: '183', text: 'Puerto Rico', code: 'PR' }			,{ value: '188', text: 'Qatar', code: 'QA' }			,{ value: '189', text: 'Réunion', code: 'RE' }			,{ value: '190', text: 'Romania', code: 'RO' }			,{ value: '192', text: 'Russian Federation', code: 'RU' }			,{ value: '193', text: 'Rwanda', code: 'RW' }			,{ value: '27', text: 'Saint Barthélémy', code: 'BL' }			,{ value: '200', text: 'Saint Helena, Ascension and Tristan da Cunha', code: 'SH' }			,{ value: '120', text: 'Saint Kitts and Nevis', code: 'KN' }			,{ value: '128', text: 'Saint Lucia', code: 'LC' }			,{ value: '141', text: 'Saint Martin (French part)', code: 'MF' }			,{ value: '181', text: 'Saint Pierre and Miquelon', code: 'PM' }			,{ value: '239', text: 'Saint Vincent and the Grenadines', code: 'VC' }			,{ value: '246', text: 'Samoa', code: 'WS' }			,{ value: '205', text: 'San Marino', code: 'SM' }			,{ value: '210', text: 'São Tomé and Príncipe', code: 'ST' }			,{ value: '194', text: 'Saudi Arabia', code: 'SA' }			,{ value: '206', text: 'Senegal', code: 'SN' }			,{ value: '191', text: 'Serbia', code: 'RS' }			,{ value: '196', text: 'Seychelles', code: 'SC' }			,{ value: '204', text: 'Sierra Leone', code: 'SL' }			,{ value: '199', text: 'Singapore', code: 'SG' }			,{ value: '212', text: 'Sint Maarten (Dutch part)', code: 'SX' }			,{ value: '203', text: 'Slovakia', code: 'SK' }			,{ value: '201', text: 'Slovenia', code: 'SI' }			,{ value: '195', text: 'Solomon Islands', code: 'SB' }			,{ value: '207', text: 'Somalia', code: 'SO' }			,{ value: '250', text: 'South Africa', code: 'ZA' }			,{ value: '90', text: 'South Georgia and the South Sandwich Islands', code: 'GS' }			,{ value: '122', text: 'South Korea', code: 'KR' }			,{ value: '209', text: 'South Sudan', code: 'SS' }			,{ value: '130', text: 'Sri Lanka', code: 'LK' }			,{ value: '184', text: 'State of Palestine', code: 'PS' }			,{ value: '197', text: 'Sudan', code: 'SD' }			,{ value: '208', text: 'Suriname', code: 'SR' }			,{ value: '202', text: 'Svalbard and Jan Mayen Islands', code: 'SJ' }			,{ value: '214', text: 'Swaziland', code: 'SZ' }			,{ value: '198', text: 'Sweden', code: 'SE' }			,{ value: '213', text: 'Syria', code: 'SY' }			,{ value: '229', text: 'Taiwan', code: 'TW' }			,{ value: '220', text: 'Tajikistan', code: 'TJ' }			,{ value: '230', text: 'Tanzania', code: 'TZ' }			,{ value: '219', text: 'Thailand', code: 'TH' }			,{ value: '256', text: 'Timor-Leste', code: 'TL' }			,{ value: '218', text: 'Togo', code: 'TG' }			,{ value: '221', text: 'Tokelau', code: 'TK' }			,{ value: '224', text: 'Tonga', code: 'TO' }			,{ value: '227', text: 'Trinidad and Tobago', code: 'TT' }			,{ value: '223', text: 'Tunisia', code: 'TN' }			,{ value: '226', text: 'Turkey', code: 'TR' }			,{ value: '222', text: 'Turkmenistan', code: 'TM' }			,{ value: '215', text: 'Turks and Caicos Islands', code: 'TC' }			,{ value: '228', text: 'Tuvalu', code: 'TV' }			,{ value: '232', text: 'Uganda', code: 'UG' }			,{ value: '231', text: 'Ukraine', code: 'UA' }			,{ value: '2', text: 'United Arab Emirates', code: 'AE' }			,{ value: '235', text: 'United States', code: 'US' }			,{ value: '236', text: 'Uruguay', code: 'UY' }			,{ value: '234', text: 'USA Minor Outlying Islands', code: 'UM' }			,{ value: '237', text: 'Uzbekistan', code: 'UZ' }			,{ value: '244', text: 'Vanuatu', code: 'VU' }			,{ value: '240', text: 'Venezuela', code: 'VE' }			,{ value: '243', text: 'Vietnam', code: 'VN' }			,{ value: '241', text: 'Virgin Islands (British)', code: 'VG' }			,{ value: '242', text: 'Virgin Islands (USA)', code: 'VI' }			,{ value: '245', text: 'Wallis and Futuna', code: 'WF' }			,{ value: '67', text: 'Western Sahara', code: 'EH' }			,{ value: '247', text: 'Yemen', code: 'YE' }			,{ value: '249', text: 'Yugoslavia', code: 'YU' }			,{ value: '252', text: 'Zaire', code: 'ZR' }			,{ value: '251', text: 'Zambia', code: 'ZM' }			,{ value: '253', text: 'Zimbabwe', code: 'ZW' }	                ],
                wrap: 'location'
            },
            'privacy': {
                label: 'I have read and accepted the <a href="PRIVACY_URL" target="_blank">Privacy policy</a>.',
                type: 'checkbox',
                required: true
            }
        }
    },
    'booking_general': {
        title: 'Order now',
        introduction: 'Book the great module now!',
        footer: 'By clicking on this button, you are transmitting your details to gastronovi GmbH so that it can contact you by e-mail and telephone for information and advertising purposes.',
        button: 'More',
        fields: {
            'gn_mod_campaign': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_volume': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_monthly': {
                type: 'hidden'
            },
            'gn_mod_campaign_product_yearly': {
                type: 'hidden'
            },
            'gn_mod_campaign_volume': {
                type: 'hidden'
            },
            'gn_mod_campaign_monthly': {
                type: 'hidden'
            },
            'gn_mod_campaign_yearly': {
                type: 'hidden'
            },
            'gn_mod_discount': {
                type: 'hidden'
            },
            'gn_demo_template_id': {
                type: 'hidden'
            },
            'gn_sync_mailchimp': {
                type: 'hidden'
            },
            'name': {
                label: 'company name',
                required: true,
                wrap: 'company'
            },
            'gn_company_type': {
                label: 'Type of business',
                element: 'select',
                required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: 'restaurant', text: 'Restaurant' }			,{ value: 'hotel', text: 'Hotel' }			,{ value: 'bar', text: 'Bar' }			,{ value: 'cafe', text: 'Cafe' }			,{ value: 'catering', text: 'Catering' }			,{ value: 'disco', text: 'Disco' }			,{ value: 'ice', text: 'Ice cream parlours' }			,{ value: 'canteen', text: 'Canteen' }			,{ value: 'snack', text: 'Snack' }			,{ value: 'foodtruck', text: 'Foodtruck' }			,{ value: 'camping', text: 'Camping' }			,{ value: 'franchise', text: 'Franchise' }			,{ value: 'other', text: 'Other' }			,{ value: 'pool', text: 'Swimming pool' }	                ],
                wrap: 'company'
            },
            'street': {
                label: 'Street and house number',
                required: true
            },
            'zip': {
                label: 'POSTCODE',
                required: true,
                wrap: 'location',
                flex: 0.3
            },
            'city': {
                label: 'town',
                required: true,
                wrap: 'location',
                flex: 0.7
            },
            'country_id': {
                label: 'country',
                element: 'select',
                required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: '58', text: 'Germany', code: 'DE' }			,{ value: '13', text: 'Austria', code: 'AT' }			,{ value: '44', text: 'Switzerland', code: 'CH' }			,{ value: '76', text: 'France', code: 'FR' }			,{ value: '110', text: 'Italy', code: 'IT' }			,{ value: '69', text: 'Spain', code: 'ES' }			,{ value: '233', text: 'United Kingdom', code: 'GB' }			,{ value: '129', text: 'Liechtenstein', code: 'LI' }			,{ value: '134', text: 'Luxembourg', code: 'LU' }			,{ value: '21', text: 'Belgium', code: 'BE' }			,{ value: '166', text: 'Netherlands', code: 'NL' }			,{ value: null, text: '-------------', code: '' }			,{ value: '3', text: 'Afghanistan', code: 'AF' }			,{ value: '16', text: 'Åland Islands', code: 'AX' }			,{ value: '6', text: 'Albania', code: 'AL' }			,{ value: '63', text: 'Algeria', code: 'DZ' }			,{ value: '12', text: 'American Samoa', code: 'AS' }			,{ value: '1', text: 'Andorra', code: 'AD' }			,{ value: '9', text: 'Angola', code: 'AO' }			,{ value: '5', text: 'Anguilla', code: 'AI' }			,{ value: '10', text: 'Antarctica', code: 'AQ' }			,{ value: '4', text: 'Antigua and Barbuda', code: 'AG' }			,{ value: '11', text: 'Argentina', code: 'AR' }			,{ value: '7', text: 'Armenia', code: 'AM' }			,{ value: '15', text: 'Aruba', code: 'AW' }			,{ value: '14', text: 'Australia', code: 'AU' }			,{ value: '17', text: 'Azerbaijan', code: 'AZ' }			,{ value: '33', text: 'Bahamas', code: 'BS' }			,{ value: '24', text: 'Bahrain', code: 'BH' }			,{ value: '20', text: 'Bangladesh', code: 'BD' }			,{ value: '19', text: 'Barbados', code: 'BB' }			,{ value: '37', text: 'Belarus', code: 'BY' }			,{ value: '38', text: 'Belize', code: 'BZ' }			,{ value: '26', text: 'Benin', code: 'BJ' }			,{ value: '28', text: 'Bermuda', code: 'BM' }			,{ value: '34', text: 'Bhutan', code: 'BT' }			,{ value: '30', text: 'Bolivia', code: 'BO' }			,{ value: '31', text: 'Bonaire, Sint Eustatius and Saba', code: 'BQ' }			,{ value: '18', text: 'Bosnia and Herzegovina', code: 'BA' }			,{ value: '36', text: 'Botswana', code: 'BW' }			,{ value: '35', text: 'Bouvet Island', code: 'BV' }			,{ value: '32', text: 'Brazil', code: 'BR' }			,{ value: '106', text: 'British Indian Ocean Territory', code: 'IO' }			,{ value: '29', text: 'Brunei Darussalam', code: 'BN' }			,{ value: '23', text: 'Bulgaria', code: 'BG' }			,{ value: '22', text: 'Burkina Faso', code: 'BF' }			,{ value: '25', text: 'Burundi', code: 'BI' }			,{ value: '117', text: 'Cambodia', code: 'KH' }			,{ value: '48', text: 'Cameroon', code: 'CM' }			,{ value: '39', text: 'Canada', code: 'CA' }			,{ value: '53', text: 'Cape Verde', code: 'CV' }			,{ value: '124', text: 'Cayman Islands', code: 'KY' }			,{ value: '41', text: 'Central African Republic', code: 'CF' }			,{ value: '216', text: 'Chad', code: 'TD' }			,{ value: '47', text: 'Chile', code: 'CL' }			,{ value: '49', text: 'China', code: 'CN' }			,{ value: '55', text: 'Christmas Island', code: 'CX' }			,{ value: '40', text: 'Cocos (Keeling) Islands', code: 'CC' }			,{ value: '50', text: 'Colombia', code: 'CO' }			,{ value: '119', text: 'Comoros', code: 'KM' }			,{ value: '43', text: 'Congo', code: 'CG' }			,{ value: '46', text: 'Cook Islands', code: 'CK' }			,{ value: '51', text: 'Costa Rica', code: 'CR' }			,{ value: '45', text: 'Côte d\'Ivoire', code: 'CI' }			,{ value: '98', text: 'Croatia', code: 'HR' }			,{ value: '52', text: 'Cuba', code: 'CU' }			,{ value: '54', text: 'Curaçao', code: 'CW' }			,{ value: '56', text: 'Cyprus', code: 'CY' }			,{ value: '57', text: 'Czech Republic', code: 'CZ' }			,{ value: '42', text: 'Democratic Republic of the Congo', code: 'CD' }			,{ value: '60', text: 'Denmark', code: 'DK' }			,{ value: '59', text: 'Djibouti', code: 'DJ' }			,{ value: '61', text: 'Dominica', code: 'DM' }			,{ value: '62', text: 'Dominican Republic', code: 'DO' }			,{ value: '225', text: 'East Timor', code: 'TP' }			,{ value: '64', text: 'Ecuador', code: 'EC' }			,{ value: '66', text: 'Egypt', code: 'EG' }			,{ value: '211', text: 'El Salvador', code: 'SV' }			,{ value: '88', text: 'Equatorial Guinea', code: 'GQ' }			,{ value: '68', text: 'Eritrea', code: 'ER' }			,{ value: '65', text: 'Estonia', code: 'EE' }			,{ value: '70', text: 'Ethiopia', code: 'ET' }			,{ value: '73', text: 'Falkland Islands', code: 'FK' }			,{ value: '75', text: 'Faroe Islands', code: 'FO' }			,{ value: '72', text: 'Fiji', code: 'FJ' }			,{ value: '71', text: 'Finland', code: 'FI' }			,{ value: '80', text: 'French Guiana', code: 'GF' }			,{ value: '176', text: 'French Polynesia', code: 'PF' }			,{ value: '217', text: 'French Southern Territories', code: 'TF' }			,{ value: '77', text: 'Gabon', code: 'GA' }			,{ value: '85', text: 'Gambia', code: 'GM' }			,{ value: '79', text: 'Georgia', code: 'GE' }			,{ value: '81', text: 'Ghana', code: 'GH' }			,{ value: '82', text: 'Gibraltar', code: 'GI' }			,{ value: '89', text: 'Greece', code: 'GR' }			,{ value: '84', text: 'Greenland', code: 'GL' }			,{ value: '78', text: 'Grenada', code: 'GD' }			,{ value: '87', text: 'Guadeloupe', code: 'GP' }			,{ value: '92', text: 'Guam', code: 'GU' }			,{ value: '91', text: 'Guatemala', code: 'GT' }			,{ value: '83', text: 'Guernsey', code: 'GG' }			,{ value: '86', text: 'Guinea', code: 'GN' }			,{ value: '93', text: 'Guinea Bissau', code: 'GW' }			,{ value: '94', text: 'Guyana', code: 'GY' }			,{ value: '99', text: 'Haiti', code: 'HT' }			,{ value: '96', text: 'Heard Island and McDonald Islands', code: 'HM' }			,{ value: '238', text: 'Holy See (Vatican City State)', code: 'VA' }			,{ value: '97', text: 'Honduras', code: 'HN' }			,{ value: '95', text: 'Hong Kong', code: 'HK' }			,{ value: '100', text: 'Hungary', code: 'HU' }			,{ value: '109', text: 'Iceland', code: 'IS' }			,{ value: '105', text: 'India', code: 'IN' }			,{ value: '101', text: 'Indonesia', code: 'ID' }			,{ value: '108', text: 'Iran', code: 'IR' }			,{ value: '107', text: 'Iraq', code: 'IQ' }			,{ value: '102', text: 'Ireland', code: 'IE' }			,{ value: '104', text: 'Isle of Man', code: 'IM' }			,{ value: '103', text: 'Israel', code: 'IL' }			,{ value: '112', text: 'Jamaica', code: 'JM' }			,{ value: '114', text: 'Japan', code: 'JP' }			,{ value: '111', text: 'Jersey', code: 'JE' }			,{ value: '113', text: 'Jordan', code: 'JO' }			,{ value: '125', text: 'Kazakhstan', code: 'KZ' }			,{ value: '115', text: 'Kenya', code: 'KE' }			,{ value: '118', text: 'Kiribati', code: 'KI' }			,{ value: '255', text: 'Kosovo', code: 'XK' }			,{ value: '123', text: 'Kuwait', code: 'KW' }			,{ value: '116', text: 'Kyrgyzstan', code: 'KG' }			,{ value: '126', text: 'Laos', code: 'LA' }			,{ value: '135', text: 'Latvia', code: 'LV' }			,{ value: '127', text: 'Lebanon', code: 'LB' }			,{ value: '132', text: 'Lesotho', code: 'LS' }			,{ value: '131', text: 'Liberia', code: 'LR' }			,{ value: '136', text: 'Libya', code: 'LY' }			,{ value: '133', text: 'Lithuania', code: 'LT' }			,{ value: '148', text: 'Macau', code: 'MO' }			,{ value: '144', text: 'Macedonia, the former Yugoslav Republic of', code: 'MK' }			,{ value: '142', text: 'Madagascar', code: 'MG' }			,{ value: '156', text: 'Malawi', code: 'MW' }			,{ value: '158', text: 'Malaysia', code: 'MY' }			,{ value: '155', text: 'Maldives', code: 'MV' }			,{ value: '145', text: 'Mali', code: 'ML' }			,{ value: '153', text: 'Malta', code: 'MT' }			,{ value: '143', text: 'Marshall Islands', code: 'MH' }			,{ value: '150', text: 'Martinique', code: 'MQ' }			,{ value: '151', text: 'Mauritania', code: 'MR' }			,{ value: '154', text: 'Mauritius', code: 'MU' }			,{ value: '248', text: 'Mayotte', code: 'YT' }			,{ value: '157', text: 'Mexico', code: 'MX' }			,{ value: '74', text: 'Micronesia', code: 'FM' }			,{ value: '139', text: 'Moldova', code: 'MD' }			,{ value: '138', text: 'Monaco', code: 'MC' }			,{ value: '147', text: 'Mongolia', code: 'MN' }			,{ value: '140', text: 'Montenegro', code: 'ME' }			,{ value: '152', text: 'Montserrat', code: 'MS' }			,{ value: '137', text: 'Morocco', code: 'MA' }			,{ value: '159', text: 'Mozambique', code: 'MZ' }			,{ value: '146', text: 'Myanmar', code: 'MM' }			,{ value: '160', text: 'Namibia', code: 'NA' }			,{ value: '169', text: 'Nauru', code: 'NR' }			,{ value: '168', text: 'Nepal', code: 'NP' }			,{ value: '8', text: 'Netherlands Antilles', code: 'AN' }			,{ value: '170', text: 'Neutral Zone', code: 'NT' }			,{ value: '161', text: 'New Caledonia', code: 'NC' }			,{ value: '172', text: 'New Zealand', code: 'NZ' }			,{ value: '165', text: 'Nicaragua', code: 'NI' }			,{ value: '162', text: 'Niger', code: 'NE' }			,{ value: '164', text: 'Nigeria', code: 'NG' }			,{ value: '171', text: 'Niue', code: 'NU' }			,{ value: '254', text: 'Nordirland', code: '' }			,{ value: '163', text: 'Norfolk Island', code: 'NF' }			,{ value: '149', text: 'Northern Mariana Islands', code: 'MP' }			,{ value: '121', text: 'North Korea', code: 'KP' }			,{ value: '167', text: 'Norway', code: 'NO' }			,{ value: '173', text: 'Oman', code: 'OM' }			,{ value: '179', text: 'Pakistan', code: 'PK' }			,{ value: '186', text: 'Palau', code: 'PW' }			,{ value: '174', text: 'Panama', code: 'PA' }			,{ value: '177', text: 'Papua New Guinea', code: 'PG' }			,{ value: '187', text: 'Paraguay', code: 'PY' }			,{ value: '175', text: 'Peru', code: 'PE' }			,{ value: '178', text: 'Philippines', code: 'PH' }			,{ value: '182', text: 'Pitcairn Islands', code: 'PN' }			,{ value: '180', text: 'Poland', code: 'PL' }			,{ value: '185', text: 'Portugal', code: 'PT' }			,{ value: '183', text: 'Puerto Rico', code: 'PR' }			,{ value: '188', text: 'Qatar', code: 'QA' }			,{ value: '189', text: 'Réunion', code: 'RE' }			,{ value: '190', text: 'Romania', code: 'RO' }			,{ value: '192', text: 'Russian Federation', code: 'RU' }			,{ value: '193', text: 'Rwanda', code: 'RW' }			,{ value: '27', text: 'Saint Barthélémy', code: 'BL' }			,{ value: '200', text: 'Saint Helena, Ascension and Tristan da Cunha', code: 'SH' }			,{ value: '120', text: 'Saint Kitts and Nevis', code: 'KN' }			,{ value: '128', text: 'Saint Lucia', code: 'LC' }			,{ value: '141', text: 'Saint Martin (French part)', code: 'MF' }			,{ value: '181', text: 'Saint Pierre and Miquelon', code: 'PM' }			,{ value: '239', text: 'Saint Vincent and the Grenadines', code: 'VC' }			,{ value: '246', text: 'Samoa', code: 'WS' }			,{ value: '205', text: 'San Marino', code: 'SM' }			,{ value: '210', text: 'São Tomé and Príncipe', code: 'ST' }			,{ value: '194', text: 'Saudi Arabia', code: 'SA' }			,{ value: '206', text: 'Senegal', code: 'SN' }			,{ value: '191', text: 'Serbia', code: 'RS' }			,{ value: '196', text: 'Seychelles', code: 'SC' }			,{ value: '204', text: 'Sierra Leone', code: 'SL' }			,{ value: '199', text: 'Singapore', code: 'SG' }			,{ value: '212', text: 'Sint Maarten (Dutch part)', code: 'SX' }			,{ value: '203', text: 'Slovakia', code: 'SK' }			,{ value: '201', text: 'Slovenia', code: 'SI' }			,{ value: '195', text: 'Solomon Islands', code: 'SB' }			,{ value: '207', text: 'Somalia', code: 'SO' }			,{ value: '250', text: 'South Africa', code: 'ZA' }			,{ value: '90', text: 'South Georgia and the South Sandwich Islands', code: 'GS' }			,{ value: '122', text: 'South Korea', code: 'KR' }			,{ value: '209', text: 'South Sudan', code: 'SS' }			,{ value: '130', text: 'Sri Lanka', code: 'LK' }			,{ value: '184', text: 'State of Palestine', code: 'PS' }			,{ value: '197', text: 'Sudan', code: 'SD' }			,{ value: '208', text: 'Suriname', code: 'SR' }			,{ value: '202', text: 'Svalbard and Jan Mayen Islands', code: 'SJ' }			,{ value: '214', text: 'Swaziland', code: 'SZ' }			,{ value: '198', text: 'Sweden', code: 'SE' }			,{ value: '213', text: 'Syria', code: 'SY' }			,{ value: '229', text: 'Taiwan', code: 'TW' }			,{ value: '220', text: 'Tajikistan', code: 'TJ' }			,{ value: '230', text: 'Tanzania', code: 'TZ' }			,{ value: '219', text: 'Thailand', code: 'TH' }			,{ value: '256', text: 'Timor-Leste', code: 'TL' }			,{ value: '218', text: 'Togo', code: 'TG' }			,{ value: '221', text: 'Tokelau', code: 'TK' }			,{ value: '224', text: 'Tonga', code: 'TO' }			,{ value: '227', text: 'Trinidad and Tobago', code: 'TT' }			,{ value: '223', text: 'Tunisia', code: 'TN' }			,{ value: '226', text: 'Turkey', code: 'TR' }			,{ value: '222', text: 'Turkmenistan', code: 'TM' }			,{ value: '215', text: 'Turks and Caicos Islands', code: 'TC' }			,{ value: '228', text: 'Tuvalu', code: 'TV' }			,{ value: '232', text: 'Uganda', code: 'UG' }			,{ value: '231', text: 'Ukraine', code: 'UA' }			,{ value: '2', text: 'United Arab Emirates', code: 'AE' }			,{ value: '235', text: 'United States', code: 'US' }			,{ value: '236', text: 'Uruguay', code: 'UY' }			,{ value: '234', text: 'USA Minor Outlying Islands', code: 'UM' }			,{ value: '237', text: 'Uzbekistan', code: 'UZ' }			,{ value: '244', text: 'Vanuatu', code: 'VU' }			,{ value: '240', text: 'Venezuela', code: 'VE' }			,{ value: '243', text: 'Vietnam', code: 'VN' }			,{ value: '241', text: 'Virgin Islands (British)', code: 'VG' }			,{ value: '242', text: 'Virgin Islands (USA)', code: 'VI' }			,{ value: '245', text: 'Wallis and Futuna', code: 'WF' }			,{ value: '67', text: 'Western Sahara', code: 'EH' }			,{ value: '247', text: 'Yemen', code: 'YE' }			,{ value: '249', text: 'Yugoslavia', code: 'YU' }			,{ value: '252', text: 'Zaire', code: 'ZR' }			,{ value: '251', text: 'Zambia', code: 'ZM' }			,{ value: '253', text: 'Zimbabwe', code: 'ZW' }	                ],
                wrap: 'location'
            },
            'phone': {
                label: 'Phone',
                type: 'tel',
                required: true,
                wrap: 'contact',
                flex: 2
            },
            'email_from': {
                label: 'email',
                type: 'email',
                wrap: 'contact',
                required: true,
                onChange: function() {
                    var checkField = document.getElementById(this.id.replace('email_from', 'email_from_check'));

                    if (checkField && checkField.value && checkField.value != this.value) {
                        checkField.setCustomValidity('The confirmation of the e-mail address must match the entered e-mail address.');
                    } else if (checkField) {
                        checkField.setCustomValidity('');
                    }
                }
            },
            'email_from_check': {
                label: 'Repeat e-mail',
                type: 'email',
                wrap: 'contact',
                required: true,
                onChange: function() {
                    var emailField = document.getElementById(this.id.replace('email_from_check', 'email_from'));

                    if (emailField && this.value && emailField.value != this.value) {
                        this.setCustomValidity('The confirmation of the e-mail address must match the entered e-mail address.');
                    } else if (emailField) {
                        this.setCustomValidity('');
                    }
                }
            },
            'privacy': {
                label: 'I have read and accepted the <a href="PRIVACY_URL" target="_blank">Privacy policy</a>.',
                type: 'checkbox',
                required: true
            }
        }
    },
    'booking_contact': {
        introduction: 'How can we reach you?',
        button: 'More',
        fields: {
            'show_summary': {
                type: 'hidden',
                value: true
            },
            'contact_name': {
                label: 'Contact for',
                required: true
            },
            'gn_partner_internal_reference': {
                label: 'Internal reference',
                required: true
            }
        }
    },
    'booking_overview': {
        introduction: 'Check your details and complete the order.',
        success: 'Thank you very much.<br /> <br /> After a few minutes you will receive your order confirmation and access data.',
        success_alternate: 'Thank you very much.<br /> <br /> Your details will be checked and you will then receive your order confirmation and your access data. Please note that the check may take some time.',
        button: 'Order now',
        fields: {
            'is_booking': {
                type: 'hidden',
                value: true
            },
            'terms': {
                label: 'I have read and accepted the <a href="TERMS_URL" target="_blank">Terms of Use</a>.',
                type: 'checkbox',
                required: true
            }
        }
    },
    'issue_general': {
        title: 'support request',
        /* footer: 'Create a request for assistance or problem description.', */
        success: 'Your support request has been successfully received. We will get back to you as soon as possible by e-mail.',
        button: 'despatch',
        fields: {
            'is_issue': {
                type: 'hidden',
                value: true
            },
            'project_id': {
                type: 'hidden'
            },
            'gn_division_id': {
                type: 'hidden'
            },
            'gn_department': {
                type: 'hidden'
            },
            'gender': {
                label: 'salutation',
                required: true,
                wrap: 'contact',
                element: 'select',
                options: [
                    { value: '', text: '' },
                    { value: 'mister', text: 'master' },
                    { value: 'miss', text: 'woman' }
                ],
            },
            'contact': {
                label: 'name',
                required: true,
                wrap: 'contact'
            },
            'ref': {
                label: 'customer number',
                required: true,
                wrap: 'ref'
            },
            'name': {
                label: 'company name',
                required: true,
                wrap: 'ref'
            },
            'email_from': {
                label: 'email',
                type: 'email',
                wrap: 'email',
                required: true,
                onChange: function() {
                    var checkField = document.getElementById(this.id.replace('email_from', 'email_from_check'));

                    if (checkField && checkField.value && checkField.value != this.value) {
                        checkField.setCustomValidity('The confirmation of the e-mail address must match the entered e-mail address.');
                    } else if (checkField) {
                        checkField.setCustomValidity('');
                    }
                }
            },
            'email_from_check': {
                label: 'Repeat e-mail',
                type: 'email',
                wrap: 'email',
                required: true,
                onChange: function() {
                    var emailField = document.getElementById(this.id.replace('email_from_check', 'email_from'));

                    if (emailField && this.value && emailField.value != this.value) {
                        this.setCustomValidity('The confirmation of the e-mail address must match the entered e-mail address.');
                    } else if (emailField) {
                        this.setCustomValidity('');
                    }
                }
            },
            'ticket_type_id': {
                label: 'grading',
                element: 'input',
                type: 'radio',
                required: true,
                options: [
                    													                ],
                wrap: 'classification'
            },
            'gn_mod': {
                label: 'module',
                element: 'select',
                required: true,
                options: [
                    { value: '', text: '' },
                    { value: 'gn_mod_pos', text: 'cash register system' },
                    { value: 'gn_mod_cashbook', text: 'cash book' },
                    { value: 'gn_mod_loyalty', text: 'customer loyalty' },
                    { value: 'gn_mod_order', text: 'ordering system' },
                    { value: 'gn_mod_reservation', text: 'table reservation' },
                    { value: 'gn_mod_speisekarten', text: 'menus' },
                    { value: 'gn_mod_timetracking', text: 'time recording' },
                    { value: 'gn_mod_marketing', text: 'Newsletter' }, // newsletter
                    { value: 'gn_mod_marketing', text: 'website' }, // homepage
                    { value: 'gn_mod_marketing', text: 'digital signage' }, // presentation
                    { value: 'gn_mod_purchase', text: 'purchasing system' },
                    { value: 'gn_mod_calculation', text: 'calculation' },
                    { value: 'gn_mod_stock', text: 'merchandise management' },
                    { value: 'gn_mod_statistik', text: 'cockpit' },
                    { value: 'gn_mod_franchise', text: 'multi-site business' },
                    { value: 'gn_type_integration', text: 'interfaces' },
                    { value: 'misc', text: 'Other' }
                ],
                wrap: 'classification'
            },
            'subject': {
                label: 'subject',
                type: 'hidden'
            },
            'description': {
                label: 'message',
                element: 'textarea',
                required: true
            },
            'privacy': {
                label: 'I have read and accepted the <a href="PRIVACY_URL" target="_blank">Privacy policy</a>.',
                type: 'checkbox',
                required: true
            }
        }
    },
    'internal_general': {
        title: 'Create case',
        /* footer: 'Create a case for internal transfer.', */
        success: 'The case was created.',
        button: 'Send',
        fields: {
            'is_issue': {
                type: 'hidden',
                value: true
            },
            'project_id': {
                type: 'hidden'
            },
            'header_issue': {
                element: 'div',
                html: 'Concerns'
            },
            'subject': {
                label: 'subject',
                required: true
            },
            'description': {
                label: 'message',
                element: 'textarea'
            },
            'header_contact': {
                element: 'div',
                html: 'Customer / Contact'
            },
            'name': {
                label: 'company name',
                required: true,
                wrap: 'ref'
            },
            'ref': {
                label: 'customer number',
                wrap: 'ref'
            },
            'contact': {
                label: 'name',
                required: true,
                wrap: 'contact'
            },
            'country_id': {
                label: 'country',
                element: 'select',
                required: true,
                options: [
                    { value: '', text: 'Not specified' }
                    			,{ value: '58', text: 'Germany', code: 'DE' }			,{ value: '13', text: 'Austria', code: 'AT' }			,{ value: '44', text: 'Switzerland', code: 'CH' }			,{ value: '76', text: 'France', code: 'FR' }			,{ value: '110', text: 'Italy', code: 'IT' }			,{ value: '69', text: 'Spain', code: 'ES' }			,{ value: '233', text: 'United Kingdom', code: 'GB' }			,{ value: '129', text: 'Liechtenstein', code: 'LI' }			,{ value: '134', text: 'Luxembourg', code: 'LU' }			,{ value: '21', text: 'Belgium', code: 'BE' }			,{ value: '166', text: 'Netherlands', code: 'NL' }			,{ value: null, text: '-------------', code: '' }			,{ value: '3', text: 'Afghanistan', code: 'AF' }			,{ value: '16', text: 'Åland Islands', code: 'AX' }			,{ value: '6', text: 'Albania', code: 'AL' }			,{ value: '63', text: 'Algeria', code: 'DZ' }			,{ value: '12', text: 'American Samoa', code: 'AS' }			,{ value: '1', text: 'Andorra', code: 'AD' }			,{ value: '9', text: 'Angola', code: 'AO' }			,{ value: '5', text: 'Anguilla', code: 'AI' }			,{ value: '10', text: 'Antarctica', code: 'AQ' }			,{ value: '4', text: 'Antigua and Barbuda', code: 'AG' }			,{ value: '11', text: 'Argentina', code: 'AR' }			,{ value: '7', text: 'Armenia', code: 'AM' }			,{ value: '15', text: 'Aruba', code: 'AW' }			,{ value: '14', text: 'Australia', code: 'AU' }			,{ value: '17', text: 'Azerbaijan', code: 'AZ' }			,{ value: '33', text: 'Bahamas', code: 'BS' }			,{ value: '24', text: 'Bahrain', code: 'BH' }			,{ value: '20', text: 'Bangladesh', code: 'BD' }			,{ value: '19', text: 'Barbados', code: 'BB' }			,{ value: '37', text: 'Belarus', code: 'BY' }			,{ value: '38', text: 'Belize', code: 'BZ' }			,{ value: '26', text: 'Benin', code: 'BJ' }			,{ value: '28', text: 'Bermuda', code: 'BM' }			,{ value: '34', text: 'Bhutan', code: 'BT' }			,{ value: '30', text: 'Bolivia', code: 'BO' }			,{ value: '31', text: 'Bonaire, Sint Eustatius and Saba', code: 'BQ' }			,{ value: '18', text: 'Bosnia and Herzegovina', code: 'BA' }			,{ value: '36', text: 'Botswana', code: 'BW' }			,{ value: '35', text: 'Bouvet Island', code: 'BV' }			,{ value: '32', text: 'Brazil', code: 'BR' }			,{ value: '106', text: 'British Indian Ocean Territory', code: 'IO' }			,{ value: '29', text: 'Brunei Darussalam', code: 'BN' }			,{ value: '23', text: 'Bulgaria', code: 'BG' }			,{ value: '22', text: 'Burkina Faso', code: 'BF' }			,{ value: '25', text: 'Burundi', code: 'BI' }			,{ value: '117', text: 'Cambodia', code: 'KH' }			,{ value: '48', text: 'Cameroon', code: 'CM' }			,{ value: '39', text: 'Canada', code: 'CA' }			,{ value: '53', text: 'Cape Verde', code: 'CV' }			,{ value: '124', text: 'Cayman Islands', code: 'KY' }			,{ value: '41', text: 'Central African Republic', code: 'CF' }			,{ value: '216', text: 'Chad', code: 'TD' }			,{ value: '47', text: 'Chile', code: 'CL' }			,{ value: '49', text: 'China', code: 'CN' }			,{ value: '55', text: 'Christmas Island', code: 'CX' }			,{ value: '40', text: 'Cocos (Keeling) Islands', code: 'CC' }			,{ value: '50', text: 'Colombia', code: 'CO' }			,{ value: '119', text: 'Comoros', code: 'KM' }			,{ value: '43', text: 'Congo', code: 'CG' }			,{ value: '46', text: 'Cook Islands', code: 'CK' }			,{ value: '51', text: 'Costa Rica', code: 'CR' }			,{ value: '45', text: 'Côte d\'Ivoire', code: 'CI' }			,{ value: '98', text: 'Croatia', code: 'HR' }			,{ value: '52', text: 'Cuba', code: 'CU' }			,{ value: '54', text: 'Curaçao', code: 'CW' }			,{ value: '56', text: 'Cyprus', code: 'CY' }			,{ value: '57', text: 'Czech Republic', code: 'CZ' }			,{ value: '42', text: 'Democratic Republic of the Congo', code: 'CD' }			,{ value: '60', text: 'Denmark', code: 'DK' }			,{ value: '59', text: 'Djibouti', code: 'DJ' }			,{ value: '61', text: 'Dominica', code: 'DM' }			,{ value: '62', text: 'Dominican Republic', code: 'DO' }			,{ value: '225', text: 'East Timor', code: 'TP' }			,{ value: '64', text: 'Ecuador', code: 'EC' }			,{ value: '66', text: 'Egypt', code: 'EG' }			,{ value: '211', text: 'El Salvador', code: 'SV' }			,{ value: '88', text: 'Equatorial Guinea', code: 'GQ' }			,{ value: '68', text: 'Eritrea', code: 'ER' }			,{ value: '65', text: 'Estonia', code: 'EE' }			,{ value: '70', text: 'Ethiopia', code: 'ET' }			,{ value: '73', text: 'Falkland Islands', code: 'FK' }			,{ value: '75', text: 'Faroe Islands', code: 'FO' }			,{ value: '72', text: 'Fiji', code: 'FJ' }			,{ value: '71', text: 'Finland', code: 'FI' }			,{ value: '80', text: 'French Guiana', code: 'GF' }			,{ value: '176', text: 'French Polynesia', code: 'PF' }			,{ value: '217', text: 'French Southern Territories', code: 'TF' }			,{ value: '77', text: 'Gabon', code: 'GA' }			,{ value: '85', text: 'Gambia', code: 'GM' }			,{ value: '79', text: 'Georgia', code: 'GE' }			,{ value: '81', text: 'Ghana', code: 'GH' }			,{ value: '82', text: 'Gibraltar', code: 'GI' }			,{ value: '89', text: 'Greece', code: 'GR' }			,{ value: '84', text: 'Greenland', code: 'GL' }			,{ value: '78', text: 'Grenada', code: 'GD' }			,{ value: '87', text: 'Guadeloupe', code: 'GP' }			,{ value: '92', text: 'Guam', code: 'GU' }			,{ value: '91', text: 'Guatemala', code: 'GT' }			,{ value: '83', text: 'Guernsey', code: 'GG' }			,{ value: '86', text: 'Guinea', code: 'GN' }			,{ value: '93', text: 'Guinea Bissau', code: 'GW' }			,{ value: '94', text: 'Guyana', code: 'GY' }			,{ value: '99', text: 'Haiti', code: 'HT' }			,{ value: '96', text: 'Heard Island and McDonald Islands', code: 'HM' }			,{ value: '238', text: 'Holy See (Vatican City State)', code: 'VA' }			,{ value: '97', text: 'Honduras', code: 'HN' }			,{ value: '95', text: 'Hong Kong', code: 'HK' }			,{ value: '100', text: 'Hungary', code: 'HU' }			,{ value: '109', text: 'Iceland', code: 'IS' }			,{ value: '105', text: 'India', code: 'IN' }			,{ value: '101', text: 'Indonesia', code: 'ID' }			,{ value: '108', text: 'Iran', code: 'IR' }			,{ value: '107', text: 'Iraq', code: 'IQ' }			,{ value: '102', text: 'Ireland', code: 'IE' }			,{ value: '104', text: 'Isle of Man', code: 'IM' }			,{ value: '103', text: 'Israel', code: 'IL' }			,{ value: '112', text: 'Jamaica', code: 'JM' }			,{ value: '114', text: 'Japan', code: 'JP' }			,{ value: '111', text: 'Jersey', code: 'JE' }			,{ value: '113', text: 'Jordan', code: 'JO' }			,{ value: '125', text: 'Kazakhstan', code: 'KZ' }			,{ value: '115', text: 'Kenya', code: 'KE' }			,{ value: '118', text: 'Kiribati', code: 'KI' }			,{ value: '255', text: 'Kosovo', code: 'XK' }			,{ value: '123', text: 'Kuwait', code: 'KW' }			,{ value: '116', text: 'Kyrgyzstan', code: 'KG' }			,{ value: '126', text: 'Laos', code: 'LA' }			,{ value: '135', text: 'Latvia', code: 'LV' }			,{ value: '127', text: 'Lebanon', code: 'LB' }			,{ value: '132', text: 'Lesotho', code: 'LS' }			,{ value: '131', text: 'Liberia', code: 'LR' }			,{ value: '136', text: 'Libya', code: 'LY' }			,{ value: '133', text: 'Lithuania', code: 'LT' }			,{ value: '148', text: 'Macau', code: 'MO' }			,{ value: '144', text: 'Macedonia, the former Yugoslav Republic of', code: 'MK' }			,{ value: '142', text: 'Madagascar', code: 'MG' }			,{ value: '156', text: 'Malawi', code: 'MW' }			,{ value: '158', text: 'Malaysia', code: 'MY' }			,{ value: '155', text: 'Maldives', code: 'MV' }			,{ value: '145', text: 'Mali', code: 'ML' }			,{ value: '153', text: 'Malta', code: 'MT' }			,{ value: '143', text: 'Marshall Islands', code: 'MH' }			,{ value: '150', text: 'Martinique', code: 'MQ' }			,{ value: '151', text: 'Mauritania', code: 'MR' }			,{ value: '154', text: 'Mauritius', code: 'MU' }			,{ value: '248', text: 'Mayotte', code: 'YT' }			,{ value: '157', text: 'Mexico', code: 'MX' }			,{ value: '74', text: 'Micronesia', code: 'FM' }			,{ value: '139', text: 'Moldova', code: 'MD' }			,{ value: '138', text: 'Monaco', code: 'MC' }			,{ value: '147', text: 'Mongolia', code: 'MN' }			,{ value: '140', text: 'Montenegro', code: 'ME' }			,{ value: '152', text: 'Montserrat', code: 'MS' }			,{ value: '137', text: 'Morocco', code: 'MA' }			,{ value: '159', text: 'Mozambique', code: 'MZ' }			,{ value: '146', text: 'Myanmar', code: 'MM' }			,{ value: '160', text: 'Namibia', code: 'NA' }			,{ value: '169', text: 'Nauru', code: 'NR' }			,{ value: '168', text: 'Nepal', code: 'NP' }			,{ value: '8', text: 'Netherlands Antilles', code: 'AN' }			,{ value: '170', text: 'Neutral Zone', code: 'NT' }			,{ value: '161', text: 'New Caledonia', code: 'NC' }			,{ value: '172', text: 'New Zealand', code: 'NZ' }			,{ value: '165', text: 'Nicaragua', code: 'NI' }			,{ value: '162', text: 'Niger', code: 'NE' }			,{ value: '164', text: 'Nigeria', code: 'NG' }			,{ value: '171', text: 'Niue', code: 'NU' }			,{ value: '254', text: 'Nordirland', code: '' }			,{ value: '163', text: 'Norfolk Island', code: 'NF' }			,{ value: '149', text: 'Northern Mariana Islands', code: 'MP' }			,{ value: '121', text: 'North Korea', code: 'KP' }			,{ value: '167', text: 'Norway', code: 'NO' }			,{ value: '173', text: 'Oman', code: 'OM' }			,{ value: '179', text: 'Pakistan', code: 'PK' }			,{ value: '186', text: 'Palau', code: 'PW' }			,{ value: '174', text: 'Panama', code: 'PA' }			,{ value: '177', text: 'Papua New Guinea', code: 'PG' }			,{ value: '187', text: 'Paraguay', code: 'PY' }			,{ value: '175', text: 'Peru', code: 'PE' }			,{ value: '178', text: 'Philippines', code: 'PH' }			,{ value: '182', text: 'Pitcairn Islands', code: 'PN' }			,{ value: '180', text: 'Poland', code: 'PL' }			,{ value: '185', text: 'Portugal', code: 'PT' }			,{ value: '183', text: 'Puerto Rico', code: 'PR' }			,{ value: '188', text: 'Qatar', code: 'QA' }			,{ value: '189', text: 'Réunion', code: 'RE' }			,{ value: '190', text: 'Romania', code: 'RO' }			,{ value: '192', text: 'Russian Federation', code: 'RU' }			,{ value: '193', text: 'Rwanda', code: 'RW' }			,{ value: '27', text: 'Saint Barthélémy', code: 'BL' }			,{ value: '200', text: 'Saint Helena, Ascension and Tristan da Cunha', code: 'SH' }			,{ value: '120', text: 'Saint Kitts and Nevis', code: 'KN' }			,{ value: '128', text: 'Saint Lucia', code: 'LC' }			,{ value: '141', text: 'Saint Martin (French part)', code: 'MF' }			,{ value: '181', text: 'Saint Pierre and Miquelon', code: 'PM' }			,{ value: '239', text: 'Saint Vincent and the Grenadines', code: 'VC' }			,{ value: '246', text: 'Samoa', code: 'WS' }			,{ value: '205', text: 'San Marino', code: 'SM' }			,{ value: '210', text: 'São Tomé and Príncipe', code: 'ST' }			,{ value: '194', text: 'Saudi Arabia', code: 'SA' }			,{ value: '206', text: 'Senegal', code: 'SN' }			,{ value: '191', text: 'Serbia', code: 'RS' }			,{ value: '196', text: 'Seychelles', code: 'SC' }			,{ value: '204', text: 'Sierra Leone', code: 'SL' }			,{ value: '199', text: 'Singapore', code: 'SG' }			,{ value: '212', text: 'Sint Maarten (Dutch part)', code: 'SX' }			,{ value: '203', text: 'Slovakia', code: 'SK' }			,{ value: '201', text: 'Slovenia', code: 'SI' }			,{ value: '195', text: 'Solomon Islands', code: 'SB' }			,{ value: '207', text: 'Somalia', code: 'SO' }			,{ value: '250', text: 'South Africa', code: 'ZA' }			,{ value: '90', text: 'South Georgia and the South Sandwich Islands', code: 'GS' }			,{ value: '122', text: 'South Korea', code: 'KR' }			,{ value: '209', text: 'South Sudan', code: 'SS' }			,{ value: '130', text: 'Sri Lanka', code: 'LK' }			,{ value: '184', text: 'State of Palestine', code: 'PS' }			,{ value: '197', text: 'Sudan', code: 'SD' }			,{ value: '208', text: 'Suriname', code: 'SR' }			,{ value: '202', text: 'Svalbard and Jan Mayen Islands', code: 'SJ' }			,{ value: '214', text: 'Swaziland', code: 'SZ' }			,{ value: '198', text: 'Sweden', code: 'SE' }			,{ value: '213', text: 'Syria', code: 'SY' }			,{ value: '229', text: 'Taiwan', code: 'TW' }			,{ value: '220', text: 'Tajikistan', code: 'TJ' }			,{ value: '230', text: 'Tanzania', code: 'TZ' }			,{ value: '219', text: 'Thailand', code: 'TH' }			,{ value: '256', text: 'Timor-Leste', code: 'TL' }			,{ value: '218', text: 'Togo', code: 'TG' }			,{ value: '221', text: 'Tokelau', code: 'TK' }			,{ value: '224', text: 'Tonga', code: 'TO' }			,{ value: '227', text: 'Trinidad and Tobago', code: 'TT' }			,{ value: '223', text: 'Tunisia', code: 'TN' }			,{ value: '226', text: 'Turkey', code: 'TR' }			,{ value: '222', text: 'Turkmenistan', code: 'TM' }			,{ value: '215', text: 'Turks and Caicos Islands', code: 'TC' }			,{ value: '228', text: 'Tuvalu', code: 'TV' }			,{ value: '232', text: 'Uganda', code: 'UG' }			,{ value: '231', text: 'Ukraine', code: 'UA' }			,{ value: '2', text: 'United Arab Emirates', code: 'AE' }			,{ value: '235', text: 'United States', code: 'US' }			,{ value: '236', text: 'Uruguay', code: 'UY' }			,{ value: '234', text: 'USA Minor Outlying Islands', code: 'UM' }			,{ value: '237', text: 'Uzbekistan', code: 'UZ' }			,{ value: '244', text: 'Vanuatu', code: 'VU' }			,{ value: '240', text: 'Venezuela', code: 'VE' }			,{ value: '243', text: 'Vietnam', code: 'VN' }			,{ value: '241', text: 'Virgin Islands (British)', code: 'VG' }			,{ value: '242', text: 'Virgin Islands (USA)', code: 'VI' }			,{ value: '245', text: 'Wallis and Futuna', code: 'WF' }			,{ value: '67', text: 'Western Sahara', code: 'EH' }			,{ value: '247', text: 'Yemen', code: 'YE' }			,{ value: '249', text: 'Yugoslavia', code: 'YU' }			,{ value: '252', text: 'Zaire', code: 'ZR' }			,{ value: '251', text: 'Zambia', code: 'ZM' }			,{ value: '253', text: 'Zimbabwe', code: 'ZW' }	                ],
                wrap: 'contact'
            },
            'phone': {
                label: 'Phone',
                required: true,
                type: 'tel',
                wrap: 'email',
                onChange: function() {
                    var emailField = document.getElementById(this.id.replace('phone', 'email_from'));
                    var emailLabel = document.getElementById(this.id.replace('_field_', '_label_').replace('phone', 'email_from'));

                    if (this.value) {
                        emailField.removeAttribute('required');
                        if (emailLabel.textContent && emailLabel.textContent.indexOf(' *') !== false) {
                            emailLabel.textContent = emailLabel.textContent.replace(' *', '');
                        }
                    } else {
                        emailField.setAttribute('required', '');
                        if (emailLabel.textContent && emailLabel.textContent.indexOf(' *') == -1) {
                            emailLabel.textContent = emailLabel.textContent + ' *';
                        }
                    }
                }
            },
            'email_from': {
                label: 'email',
                required: true,
                type: 'email',
                wrap: 'email',
                onChange: function() {
                    var phoneField = document.getElementById(this.id.replace('email_from', 'phone'));
                    var phoneLabel = document.getElementById(this.id.replace('_field_', '_label_').replace('email_from', 'phone'));

                    if (this.value) {
                        phoneField.removeAttribute('required');
                        if (phoneLabel.textContent && phoneLabel.textContent.indexOf(' *') !== false) {
                            phoneLabel.textContent = phoneLabel.textContent.replace(' *', '');
                        }
                    } else {
                        phoneField.setAttribute('required', '');
                        if (phoneLabel.textContent && phoneLabel.textContent.indexOf(' *') == -1) {
                            phoneLabel.textContent = phoneLabel.textContent + ' *';
                        }
                    }
                }
            },
            'header_responsible': {
                element: 'div',
                html: 'Forwarding to'
            },
            'team_id': {
                label: 'Jurisdiction',
                element: 'input',
                type: 'radio',
                required: true,
                options: [
                    			,{ value: '3079', text: '1. Level Support', code: '3079' }																			                ],
                wrap: 'classification'
            },
            'gn_department': {
                label: 'range',
                element: 'input',
                type: 'radio',
                options: [
                    			,{ value: 'application', text: 'Application' }			,{ value: 'technical', text: 'Technic' }									,{ value: 'sales', text: 'Sales' }			,{ value: 'accounting', text: 'Accounting' }			,{ value: 'logistic', text: 'Logistic' }										                ],
                wrap: 'classification'
            },
            'header_creator': {
                element: 'div',
                html: 'Created by'
            },
            'creator_name': {
                label: 'Name of the creator',
                wrap: 'creator',
                required: true
            },
            'creator_email': {
                label: 'E-mail of the creator',
                type: 'email',
                wrap: 'creator',
                required: true
            }
        }
    },
    'affiliate_general': {
        title: 'Recommendation',
        /* footer: 'Generate a referral link.', */
        success: 'Customer number successfully found.',
        button: 'Search',
        fields: {
            'is_affiliate': {
                type: 'hidden',
                value: true
            },
            'ref': {
                label: 'customer number',
                wrap: 'ref',
                required: true
            },
            'terms': {
                label: 'I have read and accepted the <a href="TERMS_URL" target="_blank">Terms of Use</a>.',
                type: 'checkbox',
                required: true
            }
        }
    }
};


Gastronovi.detectDevice = function() {
    // script settings
    var options = {
        osVersion: true,
        minorBrowserVersion: true
    };

    // browser data
    var browserData = {
        browsers: {
            chrome: uaMatch(/Chrome\/([0-9\.]*)/),
            firefox: uaMatch(/Firefox\/([0-9\.]*)/),
            safari: uaMatch(/Version\/([0-9\.]*).*Safari/),
            opera: uaMatch(/Opera\/.*Version\/([0-9\.]*)/, /Opera\/([0-9\.]*)/),
            msie: uaMatch(/MSIE ([0-9\.]*)/, /Trident.*rv:([0-9\.]*)/)
        },
        engines: {
            webkit: uaContains('AppleWebKit'),
            trident: uaMatch(/(MSIE|Trident)/),
            gecko: uaContains('Gecko'),
            presto: uaContains('Presto')
        },
        platforms: {
            win: uaMatch(/Windows NT ([0-9\.]*)/),
            mac: uaMatch(/Mac OS X ([0-9_\.]*)/),
            linux: uaContains('X11', 'Linux')
        }
    };

    // perform detection
    var ua = navigator.userAgent;
    var detectData = {
        platform: detectItem(browserData.platforms),
        browser: detectItem(browserData.browsers),
        engine: detectItem(browserData.engines)
    };

    // private functions
    function uaMatch(regExp, altReg) {
        return function() {
            var result = regExp.exec(ua) || altReg && altReg.exec(ua);
            return result && result[1];
        };
    }
    function uaContains(word) {
        var args = Array.prototype.slice.apply(arguments);
        return function() {
            for(var i = 0; i < args.length; i++) {
                if(ua.indexOf(args[i]) < 0) {
                    return;
                }
            }
            return true;
        };
    }
    function detectItem(items) {
        var detectedItem = null, itemName, detectValue;
        for(itemName in items) {
            if(items.hasOwnProperty(itemName)) {
                detectValue = items[itemName]();
                if(detectValue) {
                    return {
                        name: itemName,
                        value: detectValue
                    };
                }
            }
        }
    }

    // add classes to root element
    (function() {
        // helper functions
        var addClass = function(cls) {
            var html = document.documentElement;
            html.className += (html.className ? ' ' : '') + cls;
        };
        var getVersion = function(ver) {
            return typeof ver === 'string' ? ver.replace(/\./g, '_') : 'unknown';
        };

        // add classes
        if(detectData.platform) {
            addClass(detectData.platform.name);
            if(options.osVersion) {
                addClass(detectData.platform.name + '-' + getVersion(detectData.platform.value));
            }
        }
        if(detectData.engine) {
            addClass(detectData.engine.name);
        }
        if(detectData.browser) {
            addClass(detectData.browser.name);
            addClass(detectData.browser.name + '-' + parseInt(detectData.browser.value, 10));
            if(options.minorBrowserVersion) {
                addClass(detectData.browser.name + '-' + getVersion(detectData.browser.value));
            }
        }
    }());

    // export detection information
    return detectData;
};


Gastronovi.scrollToTargetAdjusted = function(element, headerOffset, preventAnimation) {
    if (!headerOffset) headerOffset = 0;
    const bodyRect = document.body.getBoundingClientRect().top;
    const elementRect = element.getBoundingClientRect().top;
    const elementPosition = elementRect - bodyRect;
    const offsetPosition = elementPosition - headerOffset;

    var scrollConfig = {
        top: offsetPosition,
        behavior: "smooth"
    };

    if (preventAnimation) {
        delete(scrollConfig['behavior']);
    }

    window.scrollTo(scrollConfig);
};


Gastronovi.scrollToWidget = function(mode, offset, occurance) {

    var forms = document.getElementsByClassName(Gastronovi.Prefix+'form_'+mode);

    if (!occurance) occurance = 0;

    if (forms && forms[occurance]) {
        var form = forms[occurance];
        var target = form;

        if (form.parentElement.parentElement && form.parentElement.parentElement.classList.contains('Gastronovi_tabwrapper')) {
            target = form.parentElement.parentElement;

            if (form.style.display == 'none') {
                var formId = form.getAttribute('id');
                var formIdObj = formId.split('_');
                var formCount = formIdObj[1];

                var siblingForms = target.getElementsByClassName('Gastronovi_form');

                for (var i = 0; i < siblingForms.length; i++) {
                    var siblingId = siblingForms[i].getAttribute('id');
                    var siblingIdObj = siblingId.split('_');
                    var siblingCount = siblingIdObj[1];

                    if (siblingCount == formCount) {
                        document.getElementById(Gastronovi.Prefix + (siblingCount) + '_' + 'tabbutton').classList.add(Gastronovi.Prefix+'tabbutton_active');
                        siblingForms[i].style.display = 'block';
                        Gastronovi.checkFormSize(siblingForms[i]);
                    } else {
                        document.getElementById(Gastronovi.Prefix + (siblingCount) + '_' + 'tabbutton').classList.remove(Gastronovi.Prefix+'tabbutton_active');
                        siblingForms[i].style.display = 'none';
                    }
                }
            }
        }

        if (typeof offset != 'number') {
            if (typeof form.scrollOffset == 'number') {
                offset = form.scrollOffset;
            }
        }

        Gastronovi.scrollToTargetAdjusted(target, offset);

        return false; // "false" prevents default of the onclick method
    }
};


Gastronovi.createGotoButton = function(text, href, config) {
    if (!config) {
        config = {};
    }

    var timeout = config.timeout === undefined ? 1000 : config.timeout;
    var position = config.position ? config.position : 'bottom-right';

    var buttonWrapper = document.getElementById(Gastronovi.Prefix+'gotobuttons_'+position);
    if (!buttonWrapper) {
        buttonWrapper = document.createElement('div');
        buttonWrapper.setAttribute('id', Gastronovi.Prefix + 'gotobuttons_'+position);
        buttonWrapper.setAttribute('class', Gastronovi.Prefix + 'gotobuttons');

        if (position.indexOf('top') !== -1) {
            buttonWrapper.style.top = 0;
        } else if (position.indexOf('bottom') !== -1) {
            buttonWrapper.style.bottom = 0;
        }

        if (position.indexOf('left') !== -1) {
            buttonWrapper.style.left = 0;
            buttonWrapper.style['text-align'] = 'left';
        } else if (position.indexOf('right') !== -1) {
            buttonWrapper.style.right = 0;
            buttonWrapper.style['text-align'] = 'right';
        } else {
            buttonWrapper.style.left = 0;
            buttonWrapper.style.width = '100%';
            buttonWrapper.style['margin-left'] = 'auto';
            buttonWrapper.style['margin-right'] = 'auto';
            buttonWrapper.style['text-align'] = 'center';
        }

        document.body.appendChild(buttonWrapper);
    }

    // ADD CSS FILES

    var head = document.getElementsByTagName('head')[0];

    if (config.template) {
        var templateLinkHref = 'https://sales.gastronovi.com/css/widget_'+config.template+'.css';
        var existingTemplateLink = document.querySelectorAll('link[href="'+templateLinkHref+'"]');

        if (!existingTemplateLink.length) {
            var templateLink = document.createElement('link');
            templateLink.id = Gastronovi.Prefix + config.template +'_css';
            templateLink.rel = 'stylesheet';
            templateLink.type = 'text/css';
            templateLink.href = templateLinkHref;
            templateLink.media = 'all';
            head.insertAdjacentElement('afterbegin', templateLink);
        }
    }

    var linkHref = 'https://sales.gastronovi.com/css/widget.css';
    var existingLink = document.querySelectorAll('link[href="'+linkHref+'"]');

    if (!existingLink.length) {
        var link = document.createElement('link');
        link.id = Gastronovi.Prefix + 'css';
        link.rel = 'stylesheet';
        link.type = 'text/css';
        link.href = linkHref;
        link.media = 'all';
        head.insertAdjacentElement('afterbegin', link);
    }

    var button = document.createElement('a');
    button.setAttribute('class', Gastronovi.Prefix + 'gotobutton');
    button.href = href;
    button.innerHTML = '<span>'+text+'</span>';

    if (timeout > 0) {
        button.style.transform = 'scale(0)';
    }

    if (config.style) {
        for (var attr in config.style) {
            button.style[attr] = config.style[attr];
        }
    }

    buttonWrapper.appendChild(button);

    if (timeout > 0) {
        setTimeout(function() {
            button.style.transform = 'scale(1)';
        }, timeout);
    }

    if (Gastronovi.scrollTriggerFns) {
        for (var i = 0; i < Gastronovi.scrollTriggerFns.length; i++) {
            if (typeof Gastronovi.scrollTriggerFns[i] == 'function') {
                Gastronovi.scrollTriggerFns[i]();
            }
        }
    }
};


Gastronovi.checkFormSize = function(form) {
    var wideClass = Gastronovi.Prefix+'form_wide';

    if (form.offsetWidth > 600) {
        form.classList.add(wideClass);
    } else {
        form.classList.remove(wideClass);
    }
};


Gastronovi.showWidgets = function(parentElementId, modes, config) {
    if (!parentElementId) return;

    var parentEl = document.getElementById(parentElementId);
    if (!parentEl) return;

    var startCount = Gastronovi.WidgetCount;
    var prefix = Gastronovi.Prefix + startCount + '_';

    var wrapper = document.createElement('div');
    wrapper.setAttribute('id', prefix+'tabwrapper');
    wrapper.setAttribute('class', Gastronovi.Prefix+'tabwrapper');
    parentEl.appendChild(wrapper);

    var tabheader = document.createElement('div');
    tabheader.setAttribute('id', prefix+'tabheader');
    tabheader.setAttribute('class', Gastronovi.Prefix+'tabheader');
    wrapper.appendChild(tabheader);

    var tabcontent = document.createElement('div');
    tabcontent.setAttribute('id', prefix+'tabcontent');
    tabcontent.setAttribute('class', Gastronovi.Prefix+'tabcontent');
    wrapper.appendChild(tabcontent);

    for (var i = 0; i < modes.length; i++) {
        var localCount = Gastronovi.WidgetCount;

        Gastronovi.showWidget(prefix+'tabcontent', modes[i], config);

        var tabbutton = document.createElement('div');
        tabbutton.setAttribute('id', Gastronovi.Prefix + localCount + '_'+'tabbutton');
        tabbutton.setAttribute('class', Gastronovi.Prefix+'tabbutton');

        var buttonTitle = null;

        for (var fieldsetName in Gastronovi.Fieldsets) {
            if (fieldsetName.indexOf(modes[i]+'_') === 0) { // get all fieldsets which belong to the given mode

                var fieldsetTitle = Gastronovi.Fieldsets[fieldsetName].title;
                if (config.fieldsets && config.fieldsets[fieldsetName] && config.fieldsets[fieldsetName].title !== undefined) fieldsetTitle = config.fieldsets[fieldsetName].title;

                if (fieldsetTitle) {
                    buttonTitle = fieldsetTitle;
                }
            }
        }

        var tabbuttonSpan = document.createElement('span');
        tabbuttonSpan.appendChild(document.createTextNode(buttonTitle));
        tabbutton.appendChild(tabbuttonSpan);

        tabheader.appendChild(tabbutton);

        if (i > 0) {
            document.getElementById(Gastronovi.Prefix + (localCount) + '_'+'form').style.display = 'none';
        } else {
            tabbutton.classList.add(Gastronovi.Prefix+'tabbutton_active');
        }

        var addListener = function(mode) {
            tabbutton.addEventListener('click', function() {
                var count = startCount;

                for (var j = 0; j < modes.length; j++) {
                    if (modes[j] == mode) {
                        document.getElementById(Gastronovi.Prefix + (count) + '_' + 'tabbutton').classList.add(Gastronovi.Prefix+'tabbutton_active');
                        document.getElementById(Gastronovi.Prefix + (count) + '_' + 'form').style.display = 'block';
                        Gastronovi.checkFormSize(document.getElementById(Gastronovi.Prefix + (count) + '_' + 'form'));
                    } else {
                        document.getElementById(Gastronovi.Prefix + (count) + '_' + 'tabbutton').classList.remove(Gastronovi.Prefix+'tabbutton_active');
                        document.getElementById(Gastronovi.Prefix + (count) + '_' + 'form').style.display = 'none';
                    }
                    count++;
                }
            });
        };

        addListener(modes[i]);
    }
};


Gastronovi.showWidget = function(parentElementId, mode, config) {
    if (!parentElementId) return;

    var parentEl = document.getElementById(parentElementId);
    if (!parentEl) return;

    var prefix = Gastronovi.Prefix + Gastronovi.WidgetCount + '_';
    Gastronovi.WidgetCount++;

    if (!config) config = {};

    var scrollOffset = typeof config.scrollOffset == 'number' ? config.scrollOffset : 50;
    var privacyUrl = config.privacyUrl ? config.privacyUrl : 'https://www.gastronovi.com/datenschutz';
    var termsUrl = config.termsUrl ? config.termsUrl : 'https://www.gastronovi.com/agb';

    // ADD CSS FILES

    var head = document.getElementsByTagName('head')[0];

    if (config.template) {
        var templateLinkHref = 'https://sales.gastronovi.com/css/widget_'+config.template+'.css';
        var existingTemplateLink = document.querySelectorAll('link[href="'+templateLinkHref+'"]');

        if (!existingTemplateLink.length) {
            var templateLink = document.createElement('link');
            templateLink.id = Gastronovi.Prefix + config.template +'_css';
            templateLink.rel = 'stylesheet';
            templateLink.type = 'text/css';
            templateLink.href = templateLinkHref;
            templateLink.media = 'all';
            head.insertAdjacentElement('afterbegin', templateLink);
        }
    }

    var linkHref = 'https://sales.gastronovi.com/css/widget.css';
    var existingLink = document.querySelectorAll('link[href="'+linkHref+'"]');

    if (!existingLink.length) {
        var link = document.createElement('link');
        link.id = Gastronovi.Prefix + 'css';
        link.rel = 'stylesheet';
        link.type = 'text/css';
        link.href = linkHref;
        link.media = 'all';
        head.insertAdjacentElement('afterbegin', link);
    }


    // ADD FORM TO DOM

    var form = document.createElement('form');
    form.scrollOffset = scrollOffset;
    form.setAttribute('id', prefix+'form');
    form.setAttribute('class', Gastronovi.Prefix+'form '+Gastronovi.Prefix+'form_'+mode);
    parentEl.appendChild(form);

    var introductionElement = document.createElement('div');
    introductionElement.setAttribute('id', prefix+'introduction');
    introductionElement.setAttribute('class', Gastronovi.Prefix+'introduction');
    introductionElement.style.display = 'none';
    form.appendChild(introductionElement);

    var successElement = document.createElement('div');
    successElement.setAttribute('id', prefix+'success');
    successElement.setAttribute('class', Gastronovi.Prefix+'success');
    successElement.style.display = 'none';
    form.appendChild(successElement);

    var errorElement = document.createElement('div');
    errorElement.setAttribute('id', prefix+'error');
    errorElement.setAttribute('class', Gastronovi.Prefix+'error');
    errorElement.style.display = 'none';
    form.appendChild(errorElement);

    // check for old browsers
    var device = Gastronovi.detectDevice();
    if (device.browser && device.browser.name == 'msie' && parseInt(device.browser.value, 10) < 10) {
        errorElement.innerHTML = 'Your browser is not supported. Please use a more recent browser to access the form, or contact us directly or by <a href="mailto:sales@gastronovi.com">E-Mail</a>.';
        errorElement.style.display = 'block';
        return;
    }

    // define form fields
    if (!mode) mode = 'contact';

    var defaultValues = config.values ? config.values : {};

    var elements = {};
    for (var fieldsetName in Gastronovi.Fieldsets) {
        if (fieldsetName.indexOf(mode+'_') === 0) { // get all fieldsets which belong to the given mode
            elements[fieldsetName] = Gastronovi.Fieldsets[fieldsetName];
        }
    }

    var currentFieldset = 0;
    var fieldsetElements = [];
    var formElements = {
        'hidden': []
    };

    var hiddenFields = ['id', 'medium_id', 'source_id', 'campaign_id', 'user_id', 'gn_recommended_from', 'gn_analytics_tracking', 'form_mode']; // main hidden fields which are always in the form

    for (var hiddenFieldKey = 0; hiddenFieldKey < hiddenFields.length; hiddenFieldKey++) {
        var hiddenField = document.createElement('input');
        hiddenField.setAttribute('id', prefix+'field_' + hiddenFields[hiddenFieldKey]);
        hiddenField.setAttribute('class', Gastronovi.Prefix+'field');
        hiddenField.setAttribute('name', hiddenFields[hiddenFieldKey]);
        hiddenField.setAttribute('type', 'hidden');

        if (hiddenFields[hiddenFieldKey] == 'form_mode') {
            hiddenField.setAttribute('value', mode);
        }

        form.appendChild(hiddenField);
        formElements['hidden'].push(hiddenField);
    }

    var antispamField = document.createElement('input');
    antispamField.setAttribute('id', prefix+'field_url');
    antispamField.setAttribute('class', Gastronovi.Prefix+'field_antispam');
    antispamField.setAttribute('name', 'url'); // take "url" as a common field used by spam bots
    antispamField.setAttribute('type', 'text');
    form.appendChild(antispamField);
    formElements['hidden'].push(antispamField);


    var fieldsetCount = 0;

    var onChangeFunctions = [];

    for (var fieldsetName in elements) {
        var fieldset = document.createElement('fieldset');
        fieldset.setAttribute('id', prefix+'fieldset_'+fieldsetName);
        fieldset.setAttribute('class', Gastronovi.Prefix+'fieldset');
        fieldset.setAttribute('ref', fieldsetName);

        if (fieldsetCount > 0) {
            fieldset.style.display = 'none';
        }
        fieldsetCount++;

        formElements[fieldsetName] = [];

        var fieldsetWraps = {};

        if (elements[fieldsetName].fields) {
            for (var fieldName in elements[fieldsetName].fields) {
                var fieldType = elements[fieldsetName].fields[fieldName].element ? elements[fieldsetName].fields[fieldName].element : 'input';

                var field = document.createElement(fieldType);
                field.setAttribute('id', prefix + 'field_' + fieldName);
                field.setAttribute('class', Gastronovi.Prefix + 'field');
                field.setAttribute('name', fieldName);

                if (elements[fieldsetName].fields[fieldName].html) {
                    field.innerHTML = elements[fieldsetName].fields[fieldName].html;
                }

                if (elements[fieldsetName].fields[fieldName].type) {
                    field.setAttribute('type', elements[fieldsetName].fields[fieldName].type);
                } else if (fieldType == 'input') {
                    field.setAttribute('type', 'text');
                }

                if (elements[fieldsetName].fields[fieldName].required) {
                    field.setAttribute('required', '');

                    if (fieldsetCount > 1) { // set not shown fields to disabled if they are required, so form validation is not triggered
                        field.setAttribute('disabled', '');
                        field.setAttribute('disabledonhidden', '');
                    }
                }

                var fieldWrap = document.createElement('div');
                fieldWrap.setAttribute('id', prefix + 'fieldwrap_' + fieldName);
                fieldWrap.setAttribute('class', Gastronovi.Prefix + 'fieldwrap');

                if (elements[fieldsetName].fields[fieldName].flex) {
                    fieldWrap.style.flex = elements[fieldsetName].fields[fieldName].flex;
                }

                var fieldWrapInner = document.createElement('div');
                fieldWrapInner.setAttribute('id', prefix + 'fieldwrapinner_' + fieldName);
                fieldWrapInner.setAttribute('class', Gastronovi.Prefix + 'fieldwrapinner');
                fieldWrap.appendChild(fieldWrapInner);

                var label = null;

                var labelText = elements[fieldsetName].fields[fieldName].label;
                if (config.labels && config.labels[fieldName] != undefined) labelText = config.labels[fieldName];
                if (labelText) {
                    label = document.createElement('label');
                    label.setAttribute('id', prefix + 'label_' + fieldName);
                    label.setAttribute('class', Gastronovi.Prefix + 'label');
                    label.setAttribute('for', prefix + 'field_' + fieldName);
                    
                    label.innerHTML = labelText.replace('PRIVACY_URL', privacyUrl).replace('TERMS_URL', termsUrl) + (elements[fieldsetName].fields[fieldName].required ? ' *' : '');

                    fieldWrapInner.appendChild(label);
                }

                var descriptionText = elements[fieldsetName].fields[fieldName].description;
                if (config.descriptions && config.descriptions[fieldName] != undefined) descriptionText = config.descriptions[fieldName];
                if (descriptionText) {
                    description = document.createElement('span');
                    description.setAttribute('id', prefix + 'description_' + fieldName);
                    description.setAttribute('class', Gastronovi.Prefix + 'description');
                    description.setAttribute('for', prefix + 'field_' + fieldName);
                    description.innerHTML = descriptionText.replace('PRIVACY_URL', privacyUrl).replace('TERMS_URL', termsUrl);

                    fieldWrapInner.appendChild(description);
                }

                if (elements[fieldsetName].fields[fieldName].options && elements[fieldsetName].fields[fieldName].type != 'radio' && elements[fieldsetName].fields[fieldName].type != 'checkbox') {
                    for (var optionKey in elements[fieldsetName].fields[fieldName].options) {
                        var option = elements[fieldsetName].fields[fieldName].options[optionKey];
                        var optionElement = document.createElement('option');
                        optionElement.setAttribute('value', option.value);
                        optionElement.appendChild(document.createTextNode(option.text));

                        if (option.value === null) {
                            optionElement.setAttribute('disabled', '');
                        }

                        field.appendChild(optionElement);
                    }
                }

                if (elements[fieldsetName].fields[fieldName].onChange) {
                    field.addEventListener('change', elements[fieldsetName].fields[fieldName].onChange);

                    var addChangeFunction = function() {
                        var changeField = field;
                        var changeFieldName = fieldName;
                        var changeFieldsetName = fieldsetName;

                        onChangeFunctions.push(function() {
                            elements[changeFieldsetName].fields[changeFieldName].onChange.call(changeField);
                        });
                    };
                    addChangeFunction();
                }

                if (config.markNotEmpty) {
                    var notEmptyCheckFn = function() {
                        var filledClass = Gastronovi.Prefix+'notempty';

                        var notEmpty = this.value ? true : false;

                        if (!notEmpty && this.options) { // on select boxes  mark as not empty if text is shown
                            for (var i = 0; i < this.options.length; i++) {
                                if (this.options[i] && this.options[i].value == this.value && this.options[i].text) {
                                    notEmpty = true;
                                    break;
                                }
                            }
                        }

                        if (notEmpty) {
                            this.classList.add(filledClass);
                        } else {
                            this.classList.remove(filledClass);
                        }
                    };

                    field.addEventListener('change', notEmptyCheckFn);

                    var addChangeFunction = function() {
                        var changeField = field;

                        onChangeFunctions.push(function() {
                            notEmptyCheckFn.call(changeField);
                        });
                    };
                    addChangeFunction();
                }

                if (elements[fieldsetName].fields[fieldName].value) {
                    var valueParam = 'value';
                    if (field.type == 'checkbox' || field.type == 'radio') {
                        valueParam = 'checked';
                    }
                    field[valueParam] = elements[fieldsetName].fields[fieldName].value;
                }

                var target = fieldset;

                if (elements[fieldsetName].fields[fieldName].wrap) {
                    if (!fieldsetWraps[elements[fieldsetName].fields[fieldName].wrap]) {
                        fieldsetWraps[elements[fieldsetName].fields[fieldName].wrap] = document.createElement('div');
                        fieldsetWraps[elements[fieldsetName].fields[fieldName].wrap].setAttribute('id', prefix+'fieldsetwrap_'+fieldsetName+'_'+elements[fieldsetName].fields[fieldName].wrap);
                        fieldsetWraps[elements[fieldsetName].fields[fieldName].wrap].setAttribute('class', Gastronovi.Prefix+'fieldsetwrap');
                        fieldsetWraps[elements[fieldsetName].fields[fieldName].wrap].setAttribute('ref', fieldsetName+'_'+elements[fieldsetName].fields[fieldName].wrap);

                        fieldset.appendChild(fieldsetWraps[elements[fieldsetName].fields[fieldName].wrap]);
                    }

                    target = fieldsetWraps[elements[fieldsetName].fields[fieldName].wrap];
                }

                var fields = [field];

                if (elements[fieldsetName].fields[fieldName].options && (elements[fieldsetName].fields[fieldName].type == 'radio' || elements[fieldsetName].fields[fieldName].type == 'checkbox')) {
                    fieldWrap.setAttribute('hasoptions', true);

                    fields = [];

                    for (var optionKey in elements[fieldsetName].fields[fieldName].options) {
                        var optionFieldWrap = document.createElement('div');
                        optionFieldWrap.setAttribute('id', prefix + 'optionwrap_' + fieldName + '_' + elements[fieldsetName].fields[fieldName].options[optionKey].value);
                        optionFieldWrap.setAttribute('class', Gastronovi.Prefix + 'optionwrap');
                        optionFieldWrap.setAttribute('isoptionwrap', true);

                        var optionField = field.cloneNode();
                        optionField.setAttribute('value', elements[fieldsetName].fields[fieldName].options[optionKey].value);
                        optionField.setAttribute('id', optionField.getAttribute('id')+'_'+elements[fieldsetName].fields[fieldName].options[optionKey].value);
                        optionField.setAttribute('isoption', true);
                        optionField.checked = false;

                        if (field.checked && field.checked == elements[fieldsetName].fields[fieldName].options[optionKey].value) {
                            optionField.checked = true;
                        }

                        optionFieldWrap.append(optionField);

                        var optionLabel = document.createElement('label');
                        optionLabel.setAttribute('id', prefix + 'label_' + fieldName + '_' + elements[fieldsetName].fields[fieldName].options[optionKey].value);
                        optionLabel.setAttribute('class', Gastronovi.Prefix + 'label');
                        optionLabel.setAttribute('for', optionField.getAttribute('id'));
                        optionLabel.appendChild(document.createTextNode(elements[fieldsetName].fields[fieldName].options[optionKey].text));

                        optionFieldWrap.append(optionLabel);

                        fields.push(optionFieldWrap);
                    }
                }

                for (var i = 0; i < fields.length; i++) {
                    var field = fields[i];

                    if (field.getAttribute('isoptionwrap')) {
                        formElements[fieldsetName].push(field.children[0]);
                    } else {
                        formElements[fieldsetName].push(field);
                    }

                    if (elements[fieldsetName].fields[fieldName].type == 'hidden') {
                        target.appendChild(field);
                    } else {
                        if (label && (field.type == 'checkbox' || field.type == 'radio') && !elements[fieldsetName].fields[fieldName].options) {
                            fieldWrapInner.insertBefore(field, label);
                        } else if(label && config.labelPosition == 'after') {
                            fieldWrapInner.insertBefore(field, label);
                        } else {
                            fieldWrapInner.appendChild(field);
                        }
                        target.appendChild(fieldWrap);
                    }
                }
            }
        }

        form.appendChild(fieldset);
        fieldsetElements.push(fieldset);
    }

    if (Gastronovi.Error) {
        var fieldsetConfig = elements[fieldsetElements[currentFieldset].getAttribute('ref')];
        fieldsetElements[currentFieldset].style.display = 'none';

        var errorText = fieldsetConfig.error ? fieldsetConfig.error : Gastronovi.Error;
        if (config.fieldsets && config.fieldsets[fieldsetElements[currentFieldset].getAttribute('ref')] && config.fieldsets[fieldsetElements[currentFieldset].getAttribute('ref')].error) {
            errorText = config.fieldsets[fieldsetElements[currentFieldset].getAttribute('ref')].error;
        }

        errorElement.innerHTML = errorText;
        errorElement.style.display = 'block';
        return;
    }

    var footerElement = document.createElement('div');
    footerElement.setAttribute('id', prefix+'footer');
    footerElement.setAttribute('class', Gastronovi.Prefix+'footer');
    footerElement.style.display = 'none';
    form.appendChild(footerElement);


    var button = document.createElement('button');
    button.setAttribute('id', prefix+'button_submit');
    button.setAttribute('class', Gastronovi.Prefix+'button');
    button.setAttribute('type', 'submit');
    button.appendChild(document.createTextNode('despatch'));

    var backButton = document.createElement('button');
    backButton.setAttribute('id', prefix+'button_back');
    backButton.setAttribute('class', Gastronovi.Prefix+'backbutton');
    backButton.setAttribute('type', 'button');
    backButton.appendChild(document.createTextNode('Back'));

    backButton.addEventListener('click', function(event) {
        currentFieldset--;

        updateText('success', undefined);
        updateText('error', '');

        for (var fieldsetElementKey = 0; fieldsetElementKey < fieldsetElements.length; fieldsetElementKey++) {
            if (currentFieldset == fieldsetElementKey) {
                fieldsetElements[fieldsetElementKey].style.display = 'block';

                var disabledElements = fieldsetElements[fieldsetElementKey].querySelectorAll("[disabledonhidden]");
                if (disabledElements.length) {
                    for (var disabledElementsIndex = 0; disabledElementsIndex < disabledElements.length; disabledElementsIndex++) {
                        disabledElements[disabledElementsIndex].removeAttribute('disabled');
                    }
                }

            } else {
                fieldsetElements[fieldsetElementKey].style.display = 'none';

                var disabledElements = fieldsetElements[fieldsetElementKey].querySelectorAll("[disabledonhidden]");
                if (disabledElements.length) {
                    for (var disabledElementsIndex = 0; disabledElementsIndex < disabledElements.length; disabledElementsIndex++) {
                        disabledElements[disabledElementsIndex].setAttribute('disabled', '');
                    }
                }
            }
        }

        if (currentFieldset == 0) {
            if (document.getElementById(prefix+'button_back')) document.getElementById(prefix+'button_back').style.display = 'none';
        } else {
            if (document.getElementById(prefix+'button_back')) document.getElementById(prefix+'button_back').style.display = 'initial';
        }

        if (currentFieldset >= fieldsetElements.length) {
            document.getElementById(prefix+'button_submit').style.display = 'none';
        } else {
            document.getElementById(prefix+'button_submit').style.display = 'initial';
        }

        updateText('introduction');
        updateText('footer');
        updateText('button');
    });

    form.addEventListener('submit', function(event) {
        event.preventDefault();

        // get tracker data and set to fields
        if (Gastronovi.Tracker) {
            var trackerData = Gastronovi.Tracker.get();

            document.getElementById(prefix+'field_gn_analytics_tracking').setAttribute('value', JSON.stringify(trackerData));

            // set tracker data to fields
            if (trackerData && trackerData.gnSId && (!config.ignoreTracker || !config.ignoreTracker['user_id'])) document.getElementById(prefix+'field_user_id').setAttribute('value', trackerData.gnSId);
            if (trackerData && trackerData.gnRId && (!config.ignoreTracker || !config.ignoreTracker['gn_recommended_from'])) document.getElementById(prefix+'field_gn_recommended_from').setAttribute('value', trackerData.gnRId);
            if (trackerData && trackerData.gnMId && (!config.ignoreTracker || !config.ignoreTracker['medium_id'])) document.getElementById(prefix+'field_medium_id').setAttribute('value', trackerData.gnMId);
            if (trackerData && trackerData.gnPId && (!config.ignoreTracker || !config.ignoreTracker['source_id'])) document.getElementById(prefix+'field_source_id').setAttribute('value', trackerData.gnPId);
            if (trackerData && trackerData.gnCId && (!config.ignoreTracker || !config.ignoreTracker['campaign_id'])) document.getElementById(prefix+'field_campaign_id').setAttribute('value', trackerData.gnCId);
        }

        var values = {};

        for (var formElementFieldsetName in formElements) {
            var formElementFieldset = formElements[formElementFieldsetName];

            for (var i = 0; i <  formElementFieldset.length; i++) {
                if (formElementFieldsetName != 'hidden' && formElementFieldsetName != fieldsetElements[currentFieldset].getAttribute('ref')) {
                    continue;
                }

                var formElement = formElementFieldset[i];

                if (formElement.disabled) {
                    continue;
                }

                if (formElement.name == 'privacy' && formElement.checked) {
                    values['privacy_consent'] = '';
                    if (formElement.labels && formElement.labels[0] && formElement.labels[0].innerHTML) values['privacy_consent'] += formElement.labels[0].innerHTML;
                    if (footerElement && footerElement.innerHTML) values['privacy_consent'] += (values['privacy_consent'].length > 0 ? ' ' : '') + footerElement.innerHTML;
                }

                var valueParam = 'value';
                if (formElement.type == 'checkbox' || formElement.type == 'radio') {
                    valueParam = 'checked';
                }

                if (formElement.getAttribute('isoption') && formElement.type == 'checkbox') {
                    if (!values[formElement.name]) {
                        values[formElement.name] = [];
                    }

                    if (formElement[valueParam] && formElement[valueParam] != 'null') {
                        values[formElement.name].push(formElement['value']);
                    }
                } else if (formElement.getAttribute('isoption') && formElement.type == 'radio') {
                    if (formElement[valueParam] && formElement[valueParam] != 'null') {
                        values[formElement.name] = formElement['value'];
                    }
                } else {
                    values[formElement.name] = formElement[valueParam] != 'null' ? formElement[valueParam] : null;
                }
            }
        }

        if (values['id']) {
            values['_action'] = 'update';
        } else {
            values['_action'] = 'add';
        }

        var params = {};
        params['Lead'] = JSON.stringify([values]);

        if (config.staging) {
            params['staging'] = true;
        }

        if (typeof config.beforeSubmit == 'function') {
            var beforeSubmitResponse = config.beforeSubmit(mode, currentFieldset, params, event);
            if (beforeSubmitResponse === false) {
                return;
            }
        }

        backButton.setAttribute('disabled', '');
        button.setAttribute('disabled', '');

        Gastronovi.send(params, function(response) {
            if (typeof config.callback == 'function') {
                config.callback(mode, currentFieldset, params, response, event);
            }

            backButton.removeAttribute('disabled');
            button.removeAttribute('disabled');

            if (response && response.result && response.result.added && response.result.added.Lead && response.result.added.Lead[0] && response.result.added.Lead[0].id) {
                document.getElementById(prefix+'field_id').value = response.result.added.Lead[0].id;
            } else if (response && response.result && response.result.updated && response.result.updated.Lead && response.result.updated.Lead[0] && response.result.updated.Lead[0].id) {
                document.getElementById(prefix+'field_id').value = response.result.updated.Lead[0].id;
            } else if (response && response.result && response.result.added && response.result.added.Issue && response.result.added.Issue[0] && response.result.added.Issue[0].id) {
                document.getElementById(prefix+'field_id').value = response.result.added.Issue[0].id;
            } else if (response && response.result && response.result.updated && response.result.updated.Issue && response.result.updated.Issue[0] && response.result.updated.Issue[0].id) {
                document.getElementById(prefix+'field_id').value = response.result.updated.Issue[0].id;
            }

            var message = '';
            if (response.messages && response.messages.length) {
                for (var messageKey = 0; messageKey < response.messages.length; messageKey++) {
                    if (response.messages[messageKey].text) {
                        message += response.messages[messageKey].text;
                    }
                }
            }

            if (response.success) {
                updateText('success', message.length ? message : undefined, response.SuccessMessage && response.SuccessMessage.alternate ? true : false);
                updateText('error', '');

                currentFieldset++;

                for (var fieldsetElementKey = 0; fieldsetElementKey < fieldsetElements.length; fieldsetElementKey++) {
                    if (currentFieldset == fieldsetElementKey) {
                        fieldsetElements[fieldsetElementKey].style.display = 'block';

                        var disabledElements = fieldsetElements[fieldsetElementKey].querySelectorAll("[disabledonhidden]");
                        if (disabledElements.length) {
                            for (var disabledElementsIndex = 0; disabledElementsIndex < disabledElements.length; disabledElementsIndex++) {
                                disabledElements[disabledElementsIndex].removeAttribute('disabled');
                            }
                        }

                    } else {
                        fieldsetElements[fieldsetElementKey].style.display = 'none';
                    }
                }

                if (currentFieldset == 0) {
                    if (document.getElementById(prefix+'button_back')) document.getElementById(prefix+'button_back').style.display = 'none';
                } else {
                    if (document.getElementById(prefix+'button_back')) document.getElementById(prefix+'button_back').style.display = 'initial';
                }

                if (currentFieldset >= fieldsetElements.length) {
                    if (document.getElementById(prefix+'button_back')) document.getElementById(prefix+'button_back').style.display = 'none';
                    if (document.getElementById(prefix+'button_submit')) document.getElementById(prefix+'button_submit').style.display = 'none';
                } else {
                    if (document.getElementById(prefix+'button_submit')) document.getElementById(prefix+'button_submit').style.display = 'initial';
                }

                updateText('introduction');
                updateText('footer');
                updateText('button');

            } else {
                updateText('success', '');
                updateText('error', message);
            }

            Gastronovi.scrollToTargetAdjusted(form, scrollOffset);
        });
    });

    if (config.showBackButton) {
        backButton.style.display = 'none';
        form.appendChild(backButton);
    }

    form.appendChild(button);

    for (var formElementFieldsetName in formElements) {
        var formElementFieldset = formElements[formElementFieldsetName];

        for (var i = 0; i < formElementFieldset.length; i++) {
            var formElement = formElementFieldset[i];
            if (defaultValues[formElement.name]) {
                var valueParam = 'value';
                if (formElement.type == 'checkbox' || formElement.type == 'radio') {
                    valueParam = 'checked';
                }

                if (formElement.getAttribute('isoption')) {
                    if (defaultValues[formElement.name] == formElement.value) {
                        formElement[valueParam] = true;
                    }
                } else {
                    formElement[valueParam] = defaultValues[formElement.name];
                }
            }

            formElement.addEventListener('invalid', function(e) {
                // on invalid set time of invalidation
                this.invalidAt = (new Date()).getTime();
            });

            formElement.addEventListener('focus', function(e) {
                // after invalid the first invalid field is focussed
                var now = (new Date()).getTime();

                if (this.invalidAt && this.invalidAt > now-(100)) {
                    // if the field has been marked as invalid less than 100 ms before this focus is one by invalid event, so scroll to input with given offset (the native function only scrolls with no offset)
                    Gastronovi.scrollToTargetAdjusted(this, scrollOffset, true);
                };
            });
        }

        for (var j = formElementFieldset.length-1; j >= 0; j--) {
            var formElement = formElementFieldset[j];

        }
    }

    for (var i = 0; i < onChangeFunctions.length; i++) {
        onChangeFunctions[i]();
    }

    window.addEventListener('resize', function() {
        Gastronovi.checkFormSize(form);
    });

    Gastronovi.checkFormSize(form);

    var updateText = function(type, text, useAlternate) {
        var element;
        if (type == 'introduction') {
            element = introductionElement;
        } else if (type == 'footer') {
            element = footerElement;
        } else if (type == 'success') {
            element = successElement;
        } else if (type == 'error') {
            element = errorElement;
        } else if (type == 'button') {
            element = button;
        } else {
            return;
        }

        var fieldsetConfig = fieldsetElements[currentFieldset] ? elements[fieldsetElements[currentFieldset].getAttribute('ref')] : null;

        var fieldsetText = fieldsetConfig && fieldsetConfig[type] ? fieldsetConfig[type] : null;
        if (fieldsetElements[currentFieldset] && config.fieldsets && config.fieldsets[fieldsetElements[currentFieldset].getAttribute('ref')] && config.fieldsets[fieldsetElements[currentFieldset].getAttribute('ref')][type] != undefined) {
            fieldsetText = config.fieldsets[fieldsetElements[currentFieldset].getAttribute('ref')][type];
        }

        if (useAlternate) {
            var alternateType = type + '_alternate';
            var alternateFieldsetText = fieldsetConfig && fieldsetConfig[alternateType] ? fieldsetConfig[alternateType] : null;
            if (fieldsetElements[currentFieldset] && config.fieldsets && config.fieldsets[fieldsetElements[currentFieldset].getAttribute('ref')] && config.fieldsets[fieldsetElements[currentFieldset].getAttribute('ref')][alternateType] != undefined) {
                alternateFieldsetText = config.fieldsets[fieldsetElements[currentFieldset].getAttribute('ref')][alternateType];
            }

            if (alternateFieldsetText) {
                fieldsetText = alternateFieldsetText;
            }
        }

        if (text === undefined && fieldsetText) {
            text = fieldsetText;
        }

        if (type == 'button') {
            if (text && text.length) {
                element.innerText = text;
            } else {
                element.innerText = 'despatch';
            }
        } else {
            if (text && text.length) {
                element.innerHTML = text.replace('PRIVACY_URL', privacyUrl).replace('TERMS_URL', termsUrl);
                element.style.display = 'block';
            } else {
                element.style.display = 'none';
            }
        }
    };

    updateText('introduction');
    updateText('footer');
    updateText('success', '');
    updateText('button');

    if (config.scrollTriggers) {
        var applyScrollTriggers = function() {
            for (var trigger in config.scrollTriggers) {
                var triggerTarget = config.scrollTriggers[trigger];
                if (triggerTarget == mode) {
                    var triggerElements = document.querySelectorAll('a[href*="' + trigger + '"]');

                    for (var i = 0; i < triggerElements.length; i++) {
                        triggerElements[i].setAttribute('onclick', "return Gastronovi.scrollToWidget('" + mode + "')");
                    }
                }
            }
        };

        applyScrollTriggers();

        if (!Gastronovi.scrollTriggerFns) {
            Gastronovi.scrollTriggerFns = [];
        }

        Gastronovi.scrollTriggerFns.push(applyScrollTriggers);
    }
};


Gastronovi.send = function(params, callback) {
    var xhr = new XMLHttpRequest();
    if (!("withCredentials" in xhr)) {
        // CORS not supported.
        xhr = null;
    }
    if (!xhr) return;

    xhr.open('POST', 'https://sales.gastronovi.com/leads/widget?format=json', true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

    xhr.onreadystatechange = function() { // Call a function when the state changes.
        if (xhr.readyState == 4 && xhr.status == 200) {
            callback(JSON.parse(xhr.responseText));
        }
    };

    var data = {};

    if (params) {
        for (var key in params) {
            data[key] = params[key];
        }
    }

    xhr.send(Gastronovi.urlEncodeData(data));
};


Gastronovi.urlEncodeData = function(data) {
    var params = new URLSearchParams();
    for (var key in data) {
        params.append(key, data[key]);
    }
    return params.toString();
};


Gastronovi.Tracker = {

    // All url paramater the we are searching for
    // All variables for the Trackingprocess
    urlParameter: ['gnMId', 'gnPId', 'gnCId', 'gnSId', 'gnRId'],
    analyticsParameter: ['language', 'screenResolution', 'clientId'],
    forceParams: {},

    getcurrentDate: function () {
        var day = date.getDate();
        var month = date.getMonth();
        var year = date.getFullYear();
        month = (month > 9)	?	0+''+ month : month;
        return day + '.' + month + '.' + year;
    },

    // Get url Paramter by name
    /**
     * Holt sich die paramater aus der Url
     * @param	Array parameter
     * @param	Array url	ganze url
     * @return Array			Gibt den Wert des parameters zurück
     */
    getParameterByName: function (parameter, url) {
        if (!url) url = window.location.href;
        parameter = parameter.replace(/[\[\]]/g, "\\$&");
        var regex = new RegExp("[?&]" + parameter + "(=([^&#]*)|&|#|$)");
        var results = regex.exec(url);
        if (!results) return null;
        if (!results[2]) return '';
        return decodeURIComponent(results[2].replace(/\+/g, " "));
    },

    // Erstellt ein URL Objekt mit all seinen Parametern und den zugehörigen Werten
    getUrlObj: function() {
        var urlObj = {};
        for (var i = 0; i < Gastronovi.Tracker.urlParameter.length; i++) {
            var key = Gastronovi.Tracker.urlParameter[i];
            if (Gastronovi.Tracker.getParameterByName(key) !== null) {
                urlObj[key] = Gastronovi.Tracker.getParameterByName(key);
            } else if (Gastronovi.Tracker.forceParams[key] !== null && Gastronovi.Tracker.forceParams[key] !== undefined) {
                urlObj[key] = Gastronovi.Tracker.forceParams[key];
            }
        }
        return urlObj;
    },

    // Get all important variables from the analytics obj ga
    getAnalyticsObj: function() {
        var analyticsObj = {};

        if (window.ga) {
            var gaObj = ga.getAll().shift();

            for (var i = 0; i < Gastronovi.Tracker.analyticsParameter.length; i++) {
                var key = Gastronovi.Tracker.analyticsParameter[i];
                if (gaObj && gaObj.model && gaObj.model.data && gaObj.model.data.ea) {
                    analyticsObj[key] = gaObj.model.data.ea[':'+key];
                }
            }
        }

        return analyticsObj;
    },

    create: function(recentVisit) {
        // localStorage.setItem(new Date().getTime(), Tracker);
        // Create ga Object
        // Try to get user id
        // Check if Storage is useable, last visit 1h ago, or first time
        if (typeof(Storage) !== "undefined") {

            var tracker = localStorage.getItem('tracker');
            if (tracker) tracker = JSON.parse(tracker);

            if (!tracker) tracker = {
                trackings: []
            };

            var urlObj = Gastronovi.Tracker.getUrlObj();
            var analyticsObj = Gastronovi.Tracker.getAnalyticsObj();

            for (var param in urlObj) {
                tracker[param] = urlObj[param];
            }

            for (var param in analyticsObj) {
                tracker[param] = analyticsObj[param];
            }

            if (window.navigator && window.navigator.userAgent) tracker.useragent = window.navigator.userAgent;

            var currentTracking = {
                'time': parseInt((new Date()).getTime()/1000),
                'url': window.location.href,
                'params': urlObj,
                'analytics': analyticsObj
            };

            tracker.trackings.push(currentTracking);

            localStorage.setItem('tracker', JSON.stringify(tracker));
        }
    },

    get: function() {
        if (typeof(Storage) !== "undefined") {
            var tracker = localStorage.getItem('tracker');
            if (tracker) tracker = JSON.parse(tracker);

            return tracker;
        } else {
            return false;
        }
    }
};

if (/comp|inter|loaded/.test(document.readyState)) {
    setTimeout(function() {
        Gastronovi.Tracker.create();
    }, 1000);
} else {
    if (document.addEventListener) {
        document.addEventListener('DOMContentLoaded', function() {
            setTimeout(function() {
                Gastronovi.Tracker.create();
            }, 1000);
        }, false);
    }
}



// POLYFILLS

// Source: https://github.com/ethanius/URLSearchParams/blob/master/urlsearchparams.js
(function () {
    'use strict';

    if ("URLSearchParams" in window) { return; }

    function URLSearchParams(params) {
        this._keys = {};

        if (params) {
            var pairs = params.toString().split("&");
            for (var x = 0; x < pairs.length; x++) {
                var tmp = pairs[x].split("=");
                this.append(decodeURIComponent(tmp[0]), decodeURIComponent(tmp.slice(1).join("=")));
            }
        }
    };

    URLSearchParams.prototype = {
        append: function(key, value) {
            if (this.has(key)) {
                this._keys[key].push(value);
            } else {
                this._keys[key] = [value];
            }
        },

        'delete': function(key) {
            if (this.has(key)) {
                delete this._keys[key];
            }
        },

        get: function(key) {
            if (this.has(key) && this._keys[key].length) {
                return this._keys[key][0];
            }
            return null;
        },

        getAll: function(key) {
            if (this.has(key)) {
                return this._keys[key];
            }
            return [];
        },

        has: function(key) {
            return key in this._keys;
        },

        set: function(key, value) {
            this._keys[key] = [value];
        },

        toString: function() {
            var tmp = [];
            for (var key in this._keys) {
                for (var i = 0; i < this._keys[key].length; i++) {
                    tmp.push(encodeURIComponent(key) + "=" + encodeURIComponent(this._keys[key][i]));
                }
            }
            return tmp.join("&");
        }
    };

    window.URLSearchParams = URLSearchParams;
})();


