ipip / index.html
Srinivasulu kethanaboina
Update index.html
0655866 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chatbot with Morph and Fade Animations</title>
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap" rel="stylesheet">
<style>
body {
font-family: 'Poppins', sans-serif;
margin: 0;
padding: 0;
background-color: #ffffff00;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.hover-button {
position: fixed;
bottom: 20px;
right: 20px;
width: auto;
height: 60px;
border-radius: 30px;
background-color: #de2127;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
transition: transform 0.3s ease, opacity 0.3s ease;
z-index: 999;
padding: 0 20px;
box-sizing: border-box;
overflow: hidden;
}
.hover-button:hover {
transform: scale(1.05);
}
.hover-button img {
width: 30px;
height: 30px;
margin-right: 10px;
filter: invert(0.0) sepia(0.2) saturate(4) hue-rotate(300deg) brightness(0.8);
}
.hover-button span {
color: white;
font-size: 1em;
font-weight: bold;
}
.chatbot-popup {
position: fixed;
bottom: 20px;
right: 20px;
background: linear-gradient(135deg, #f0f4ff 0%, #ffd1d1 100%);
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
width: 450px;
max-height: 90vh;
height: 719px;
z-index: 10000;
display: flex;
flex-direction: column;
overflow: hidden;
opacity: 0;
transform: scale(0.7);
transition: transform 0.3s ease, opacity 0.3s ease;
visibility: hidden; /* Hidden by default */
}
.chatbot-popup.visible {
opacity: 1;
transform: scale(1);
visibility: visible;
}
.chat-header {
background-color: #CF2E2E;
color: #fff;
padding: 10px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
display: flex;
justify-content: space-between;
align-items: center;
}
.chat-header span {
font-weight: bold;
}
#close-btn {
background-color: transparent;
border: none;
color: #fff;
font-size: 24px;
cursor: pointer;
line-height: 1;
}
.chat-content {
flex: 1;
display: none; /* Initially hidden */
flex-direction: column;
overflow-y: auto;
padding: 20px;
max-height: calc(80vh - 60px);
}
.user-message, .bot-message {
padding: 10px 15px;
margin: 10px 0;
border-radius: 10px;
max-width: 80%;
word-wrap: break-word;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.user-message {
background-color: #E5E5EA;
align-self: flex-end;
display: flex;
align-items: center;
}
.bot-message {
background-color: #F1F0F0;
align-self: flex-start;
display: flex;
align-items: flex-start;
flex-direction: column;
max-width: 100%;
padding: 10px 15px;
margin: 10px 0;
border-radius: 10px;
box-shadow: 0 1px 3px rgba(0, 0, 0 ,0.1);
}
.message-content {
margin-left: 10px;
}
.user-message::before, .bot-message::before {
content: '';
width: 30px;
height: 30px;
background-size: cover;
border-radius: 50%;
}
.user-message::before {
background-image: url('https://github.com/SRINIVASULU-2003/srinu/blob/main/static/user.jpeg?raw=true');
}
.bot-message::before {
background-image: url('https://github.com/SRINIVASULU-2003/srinu/blob/main/static/bot.jpeg?raw=true');
}
.button-container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
margin-top: 10px;
width: 100%;
}
.button-container button {
background-color: #ef6a61;
color: #fff;
border: none;
border-radius: 5px;
padding: 10px 15px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.3s ease;
text-align: center;
min-height: 44px;
}
.button-container button.large-button {
grid-column: span 2;
}
.button-container button:hover {
background-color: #f63838;
}
.gradio-container {
display: none;
margin-top: 10px;
height: calc(100% - 60px); /* Adjusted to fit within the chatbot */
position: relative; /* Added for positioning the back button */
}
.form-container {
padding: 20px 30px 30px 30px;
height: auto;
opacity: 1;
transition: opacity 0.3s ease;
overflow-y: auto;
max-height: calc(100vh - 150px);
flex: 1;
display: none; /* Initially hidden */
}
.form-container.visible {
display: block; /* Show when active */
}
.form-container h2 {
text-align: left;
margin-bottom: 5px;
font-size: 1.4em;
color: #333;
}
.form-container p {
text-align: left;
margin-bottom: 10px;
color: #666;
font-size: 0.9em;
}
.form {
width: 100%;
}
.form-control {
width: 100%;
margin-bottom: 10px;
}
.form-control label {
display: block;
margin-bottom: 5px;
font-size: 0.9em;
color: #333;
}
.form-control input, .form-control select {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 8px;
box-sizing: border-box;
font-size: 1em;
background-color: #f9f9f9;
}
.form-control input:focus, .form-control select:focus {
outline: none;
border-color: #4a90e2;
background-color: #fff;
}
.required {
color: red;
}
.begin-button {
width: 100%;
padding: 10px;
background: #de2127;
border: none;
color: white;
font-size: 1em;
border-radius: 30px;
cursor: pointer;
transition: background-color 0.3s;
}
.begin-button:hover {
background-color: #a81a1d;
}
.close-button {
background-color: transparent;
border: none;
color: #fff;
font-size: 24px;
cursor: pointer;
line-height: 1;
}
.g-recaptcha {
display: flex;
justify-content: center;
margin-bottom: 10px;
transform: scale(0.8);
}
.g-recaptcha > div {
width: auto !important;
}
#back-to-chatbot-btn {
position: absolute;
top: 10px;
right: 10px;
background-color: #de2127;
color: white;
border: none;
padding: 5px 10px;
border-radius: 5px;
cursor: pointer;
font-size: 14px;
z-index: 1000;
}
#back-to-chatbot-btn:hover {
background-color: #a81a1d;
}
</style>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<!-- Hover Button -->
<div class="hover-button" id="chatbot-button">
<img src="https://www.svgrepo.com/show/209115/chat.svg" alt="Chat Icon">
<span>How can I help you?</span>
</div>
<!-- Chatbot Popup -->
<div class="chatbot-popup" id="chatbot-popup">
<!-- Chat Header -->
<div class="chat-header">
<span>FernAI</span>
<button id="close-btn" class="close-button">×</button>
</div>
<!-- Form Container -->
<div id="form-container" class="form-container">
<h2>To guide you better, we need some basic information</h2>
<form id="form" class="form">
<div class="form-control">
<label for="username">Name <span class="required">*</span></label>
<input type="text" placeholder="First and Last Name" id="username" required />
</div>
<div class="form-control">
<label for="companyname">Company Name <span class="required">*</span></label>
<input type="text" placeholder="Company name" id="companyname" required />
</div>
<div class="form-control">
<label for="email">Email <span class="required">*</span></label>
<input type="email" placeholder="[email protected]" id="email" required />
</div>
<div class="form-control">
<label for="country">Country <span class="required">*</span></label>
<select id="country" required>
<option value="">Select a country</option>
<option value="AF">Afghanistan (+93)</option>
<option value="AL">Albania (+355)</option>
<option value="DZ">Algeria (+213)</option>
<option value="AS">American Samoa (+1-684)</option>
<option value="AD">Andorra (+376)</option>
<option value="AO">Angola (+244)</option>
<option value="AI">Anguilla (+1-264)</option>
<option value="AG">Antigua and Barbuda (+1-268)</option>
<option value="AR">Argentina (+54)</option>
<option value="AM">Armenia (+374)</option>
<option value="AW">Aruba (+297)</option>
<option value="AU">Australia (+61)</option>
<option value="AT">Austria (+43)</option>
<option value="AZ">Azerbaijan (+994)</option>
<option value="BS">Bahamas (+1-242)</option>
<option value="BH">Bahrain (+973)</option>
<option value="BD">Bangladesh (+880)</option>
<option value="BB">Barbados (+1-246)</option>
<option value="BY">Belarus (+375)</option>
<option value="BE">Belgium (+32)</option>
<option value="BZ">Belize (+501)</option>
<option value="BJ">Benin (+229)</option>
<option value="BM">Bermuda (+1-441)</option>
<option value="BT">Bhutan (+975)</option>
<option value="BO">Bolivia (+591)</option>
<option value="BA">Bosnia and Herzegovina (+387)</option>
<option value="BW">Botswana (+267)</option>
<option value="BR">Brazil (+55)</option>
<option value="IO">British Indian Ocean Territory (+246)</option>
<option value="VG">British Virgin Islands (+1-284)</option>
<option value="BN">Brunei (+673)</option>
<option value="BG">Bulgaria (+359)</option>
<option value="BF">Burkina Faso (+226)</option>
<option value="BI">Burundi (+257)</option>
<option value="KH">Cambodia (+855)</option>
<option value="CM">Cameroon (+237)</option>
<option value="CA">Canada (+1)</option>
<option value="CV">Cape Verde (+238)</option>
<option value="KY">Cayman Islands (+1-345)</option>
<option value="CF">Central African Republic (+236)</option>
<option value="TD">Chad (+235)</option>
<option value="CL">Chile (+56)</option>
<option value="CN">China (+86)</option>
<option value="CX">Christmas Island (+61)</option>
<option value="CC">Cocos Islands (+61)</option>
<option value="CO">Colombia (+57)</option>
<option value="KM">Comoros (+269)</option>
<option value="CK">Cook Islands (+682)</option>
<option value="CR">Costa Rica (+506)</option>
<option value="HR">Croatia (+385)</option>
<option value="CU">Cuba (+53)</option>
<option value="CW">Curacao (+599)</option>
<option value="CY">Cyprus (+357)</option>
<option value="CZ">Czech Republic (+420)</option>
<option value="CD">Democratic Republic of the Congo (+243)</option>
<option value="DK">Denmark (+45)</option>
<option value="DJ">Djibouti (+253)</option>
<option value="DM">Dominica (+1-767)</option>
<option value="DO">Dominican Republic (+1-809)</option>
<option value="TL">East Timor (+670)</option>
<option value="EC">Ecuador (+593)</option>
<option value="EG">Egypt (+20)</option>
<option value="SV">El Salvador (+503)</option>
<option value="GQ">Equatorial Guinea (+240)</option>
<option value="ER">Eritrea (+291)</option>
<option value="EE">Estonia (+372)</option>
<option value="ET">Ethiopia (+251)</option>
<option value="FK">Falkland Islands (+500)</option>
<option value="FO">Faroe Islands (+298)</option>
<option value="FJ">Fiji (+679)</option>
<option value="FI">Finland (+358)</option>
<option value="FR">France (+33)</option>
<option value="PF">French Polynesia (+689)</option>
<option value="GA">Gabon (+241)</option>
<option value="GM">Gambia (+220)</option>
<option value="GE">Georgia (+995)</option>
<option value="DE">Germany (+49)</option>
<option value="GH">Ghana (+233)</option>
<option value="GI">Gibraltar (+350)</option>
<option value="GR">Greece (+30)</option>
<option value="GL">Greenland (+299)</option>
<option value="GD">Grenada (+1-473)</option>
<option value="GU">Guam (+1-671)</option>
<option value="GT">Guatemala (+502)</option>
<option value="GN">Guinea (+224)</option>
<option value="GW">Guinea-Bissau (+245)</option>
<option value="GY">Guyana (+592)</option>
<option value="HT">Haiti (+509)</option>
<option value="HN">Honduras (+504)</option>
<option value="HK">Hong Kong (+852)</option>
<option value="HU">Hungary (+36)</option>
<option value="IS">Iceland (+354)</option>
<option value="IN">India (+91)</option>
<option value="ID">Indonesia (+62)</option>
<option value="IR">Iran (+98)</option>
<option value="IQ">Iraq (+964)</option>
<option value="IE">Ireland (+353)</option>
<option value="IM">Isle of Man (+44-1624)</option>
<option value="IL">Israel (+972)</option>
<option value="IT">Italy (+39)</option>
<option value="CI">Ivory Coast (+225)</option>
<option value="JM">Jamaica (+1-876)</option>
<option value="JP">Japan (+81)</option>
<option value="JE">Jersey (+44-1534)</option>
<option value="JO">Jordan (+962)</option>
<option value="KZ">Kazakhstan (+7)</option>
<option value="KE">Kenya (+254)</option>
<option value="KI">Kiribati (+686)</option>
<option value="XK">Kosovo (+383)</option>
<option value="KW">Kuwait (+965)</option>
<option value="KG">Kyrgyzstan (+996)</option>
<option value="LA">Laos (+856)</option>
<option value="LV">Latvia (+371)</option>
<option value="LB">Lebanon (+961)</option>
<option value="LS">Lesotho (+266)</option>
<option value="LR">Liberia (+231)</option>
<option value="LY">Libya (+218)</option>
<option value="LI">Liechtenstein (+423)</option>
<option value="LT">Lithuania (+370)</option>
<option value="LU">Luxembourg (+352)</option>
<option value="MO">Macau (+853)</option>
<option value="MK">Macedonia (+389)</option>
<option value="MG">Madagascar (+261)</option>
<option value="MW">Malawi (+265)</option>
<option value="MY">Malaysia (+60)</option>
<option value="MV">Maldives (+960)</option>
<option value="ML">Mali (+223)</option>
<option value="MT">Malta (+356)</option>
<option value="MH">Marshall Islands (+692)</option>
<option value="MR">Mauritania (+222)</option>
<option value="MU">Mauritius (+230)</option>
<option value="YT">Mayotte (+262)</option>
<option value="MX">Mexico (+52)</option>
<option value="FM">Micronesia (+691)</option>
<option value="MD">Moldova (+373)</option>
<option value="MC">Monaco (+377)</option>
<option value="MN">Mongolia (+976)</option>
<option value="ME">Montenegro (+382)</option>
<option value="MS">Montserrat (+1-664)</option>
<option value="MA">Morocco (+212)</option>
<option value="MZ">Mozambique (+258)</option>
<option value="MM">Myanmar (+95)</option>
<option value="NA">Namibia (+264)</option>
<option value="NR">Nauru (+674)</option>
<option value="NP">Nepal (+977)</option>
<option value="NL">Netherlands (+31)</option>
<option value="NC">New Caledonia (+687)</option>
<option value="NZ">New Zealand (+64)</option>
<option value="NI">Nicaragua (+505)</option>
<option value="NE">Niger (+227)</option>
<option value="NG">Nigeria (+234)</option>
<option value="NU">Niue (+683)</option>
<option value="KP">North Korea (+850)</option>
<option value="MP">Northern Mariana Islands (+1-670)</option>
<option value="NO">Norway (+47)</option>
<option value="OM">Oman (+968)</option>
<option value="PK">Pakistan (+92)</option>
<option value="PW">Palau (+680)</option>
<option value="PS">Palestine (+970)</option>
<option value="PA">Panama (+507)</option>
<option value="PG">Papua New Guinea (+675)</option>
<option value="PY">Paraguay (+595)</option>
<option value="PE">Peru (+51)</option>
<option value="PH">Philippines (+63)</option>
<option value="PN">Pitcairn (+64)</option>
<option value="PL">Poland (+48)</option>
<option value="PT">Portugal (+351)</option>
<option value="PR">Puerto Rico (+1-787)</option>
<option value="QA">Qatar (+974)</option>
<option value="CG">Republic of the Congo (+242)</option>
<option value="RE">Reunion (+262)</option>
<option value="RO">Romania (+40)</option>
<option value="RU">Russia (+7)</option>
<option value="RW">Rwanda (+250)</option>
<option value="BL">Saint Barthelemy (+590)</option>
<option value="SH">Saint Helena (+290)</option>
<option value="KN">Saint Kitts and Nevis (+1-869)</option>
<option value="LC">Saint Lucia (+1-758)</option>
<option value="MF">Saint Martin (+590)</option>
<option value="PM">Saint Pierre and Miquelon (+508)</option>
<option value="VC">Saint Vincent and the Grenadines (+1-784)</option>
<option value="WS">Samoa (+685)</option>
<option value="SM">San Marino (+378)</option>
<option value="ST">Sao Tome and Principe (+239)</option>
<option value="SA">Saudi Arabia (+966)</option>
<option value="SN">Senegal (+221)</option>
<option value="RS">Serbia (+381)</option>
<option value="SC">Seychelles (+248)</option>
<option value="SL">Sierra Leone (+232)</option>
<option value="SG">Singapore (+65)</option>
<option value="SX">Sint Maarten (+1-721)</option>
<option value="SK">Slovakia (+421)</option>
<option value="SI">Slovenia (+386)</option>
<option value="SB">Solomon Islands (+677)</option>
<option value="SO">Somalia (+252)</option>
<option value="ZA">South Africa (+27)</option>
<option value="KR">South Korea (+82)</option>
<option value="SS">South Sudan (+211)</option>
<option value="ES">Spain (+34)</option>
<option value="LK">Sri Lanka (+94)</option>
<option value="SD">Sudan (+249)</option>
<option value="SR">Suriname (+597)</option>
<option value="SJ">Svalbard and Jan Mayen (+47)</option>
<option value="SZ">Swaziland (+268)</option>
<option value="SE">Sweden (+46)</option>
<option value="CH">Switzerland (+41)</option>
<option value="SY">Syria (+963)</option>
<option value="TW">Taiwan (+886)</option>
<option value="TJ">Tajikistan (+992)</option>
<option value="TZ">Tanzania (+255)</option>
<option value="TH">Thailand (+66)</option>
<option value="TG">Togo (+228)</option>
<option value="TK">Tokelau (+690)</option>
<option value="TO">Tonga (+676)</option>
<option value="TT">Trinidad and Tobago (+1-868)</option>
<option value="TN">Tunisia (+216)</option>
<option value="TR">Turkey (+90)</option>
<option value="TM">Turkmenistan (+993)</option>
<option value="TC">Turks and Caicos Islands (+1-649)</option>
<option value="TV">Tuvalu (+688)</option>
<option value="VI">U.S. Virgin Islands (+1-340)</option>
<option value="UG">Uganda (+256)</option>
<option value="UA">Ukraine (+380)</option>
<option value="AE">United Arab Emirates (+971)</option>
<option value="GB">United Kingdom (+44)</option>
<option value="US">United States (+1)</option>
<option value="UY">Uruguay (+598)</option>
<option value="UZ">Uzbekistan (+998)</option>
<option value="VU">Vanuatu (+678)</option>
<option value="VA">Vatican (+39-06)</option>
<option value="VE">Venezuela (+58)</option>
<option value="VN">Vietnam (+84)</option>
<option value="WF">Wallis and Futuna (+681)</option>
<option value="EH">Western Sahara (+212)</option>
<option value="YE">Yemen (+967)</option>
<option value="ZM">Zambia (+260)</option>
<option value="ZW">Zimbabwe (+263)</option>
</select>
</div>
<div class="form-control">
<label for="phone">Phone</label>
<input type="tel" placeholder="Phone" id="phone" />
</div>
<div class="g-recaptcha" data-sitekey="6LfAXQIqAAAAANA8I1vdofDPvxatWH8H3Als1XfM"></div>
<button type="submit" class="begin-button">Let's Begin</button>
</form>
</div>
<!-- Chat Content -->
<div id="chat-box" class="chat-content">
<div id="chat-body" class="chat-body"></div>
</div>
<!-- Gradio Container -->
<div class="gradio-container" id="gradio-iframe">
<iframe id="gradio-frame" src="" style="width:100%; height:100%; border:none;"></iframe>
<button id="back-to-chatbot-btn">Back to Chatbot</button>
</div>
</div>
<script>
const countrySelect = document.getElementById('country');
const phoneInput = document.getElementById('phone');
const countryCodes = {
'AF': '+93',
'AL': '+355',
'DZ': '+213',
'AS': '+1-684',
'AD': '+376',
'AO': '+244',
'AI': '+1-264',
'AG': '+1-268',
'AR': '+54',
'AM': '+374',
'AW': '+297',
'AU': '+61',
'AT': '+43',
'AZ': '+994',
'BS': '+1-242',
'BH': '+973',
'BD': '+880',
'BB': '+1-246',
'BY': '+375',
'BE': '+32',
'BZ': '+501',
'BJ': '+229',
'BM': '+1-441',
'BT': '+975',
'BO': '+591',
'BA': '+387',
'BW': '+267',
'BR': '+55',
'IO': '+246',
'VG': '+1-284',
'BN': '+673',
'BG': '+359',
'BF': '+226',
'BI': '+257',
'KH': '+855',
'CM': '+237',
'CA': '+1',
'CV': '+238',
'KY': '+1-345',
'CF': '+236',
'TD': '+235',
'CL': '+56',
'CN': '+86',
'CX': '+61',
'CC': '+61',
'CO': '+57',
'KM': '+269',
'CK': '+682',
'CR': '+506',
'HR': '+385',
'CU': '+53',
'CW': '+599',
'CY': '+357',
'CZ': '+420',
'CD': '+243',
'DK': '+45',
'DJ': '+253',
'DM': '+1-767',
'DO': '+1-809',
'TL': '+670',
'EC': '+593',
'EG': '+20',
'SV': '+503',
'GQ': '+240',
'ER': '+291',
'EE': '+372',
'ET': '+251',
'FK': '+500',
'FO': '+298',
'FJ': '+679',
'FI': '+358',
'FR': '+33',
'PF': '+689',
'GA': '+241',
'GM': '+220',
'GE': '+995',
'DE': '+49',
'GH': '+233',
'GI': '+350',
'GR': '+30',
'GL': '+299',
'GD': '+1-473',
'GU': '+1-671',
'GT': '+502',
'GN': '+224',
'GW': '+245',
'GY': '+592',
'HT': '+509',
'HN': '+504',
'HK': '+852',
'HU': '+36',
'IS': '+354',
'IN': '+91',
'ID': '+62',
'IR': '+98',
'IQ': '+964',
'IE': '+353',
'IM': '+44-1624',
'IL': '+972',
'IT': '+39',
'CI': '+225',
'JM': '+1-876',
'JP': '+81',
'JE': '+44-1534',
'JO': '+962',
'KZ': '+7',
'KE': '+254',
'KI': '+686',
'XK': '+383',
'KW': '+965',
'KG': '+996',
'LA': '+856',
'LV': '+371',
'LB': '+961',
'LS': '+266',
'LR': '+231',
'LY': '+218',
'LI': '+423',
'LT': '+370',
'LU': '+352',
'MO': '+853',
'MK': '+389',
'MG': '+261',
'MW': '+265',
'MY': '+60',
'MV': '+960',
'ML': '+223',
'MT': '+356',
'MH': '+692',
'MR': '+222',
'MU': '+230',
'YT': '+262',
'MX': '+52',
'FM': '+691',
'MD': '+373',
'MC': '+377',
'MN': '+976',
'ME': '+382',
'MS': '+1-664',
'MA': '+212',
'MZ': '+258',
'MM': '+95',
'NA': '+264',
'NR': '+674',
'NP': '+977',
'NL': '+31',
'NC': '+687',
'NZ': '+64',
'NI': '+505',
'NE': '+227',
'NG': '+234',
'NU': '+683',
'KP': '+850',
'MP': '+1-670',
'NO': '+47',
'OM': '+968',
'PK': '+92',
'PW': '+680',
'PS': '+970',
'PA': '+507',
'PG': '+675',
'PY': '+595',
'PE': '+51',
'PH': '+63',
'PN': '+64',
'PL': '+48',
'PT': '+351',
'PR': '+1-787',
'QA': '+974',
'CG': '+242',
'RE': '+262',
'RO': '+40',
'RU': '+7',
'RW': '+250',
'BL': '+590',
'SH': '+290',
'KN': '+1-869',
'LC': '+1-758',
'MF': '+590',
'PM': '+508',
'VC': '+1-784',
'WS': '+685',
'SM': '+378',
'ST': '+239',
'SA': '+966',
'SN': '+221',
'RS': '+381',
'SC': '+248',
'SL': '+232',
'SG': '+65',
'SX': '+1-721',
'SK': '+421',
'SI': '+386',
'SB': '+677',
'SO': '+252',
'ZA': '+27',
'KR': '+82',
'SS': '+211',
'ES': '+34',
'LK': '+94',
'SD': '+249',
'SR': '+597',
'SJ': '+47',
'SZ': '+268',
'SE': '+46',
'CH': '+41',
'SY': '+963',
'TW': '+886',
'TJ': '+992',
'TZ': '+255',
'TH': '+66',
'TG': '+228',
'TK': '+690',
'TO': '+676',
'TT': '+1-868',
'TN': '+216',
'TR': '+90',
'TM': '+993',
'TC': '+1-649',
'TV': '+688',
'VI': '+1-340',
'UG': '+256',
'UA': '+380',
'AE': '+971',
'GB': '+44',
'US': '+1',
'UY': '+598',
'UZ': '+998',
'VU': '+678',
'VA': '+39-06',
'VE': '+58',
'VN': '+84',
'WF': '+681',
'EH': '+212',
'YE': '+967',
'ZM': '+260',
'ZW': '+263'
};
countrySelect.addEventListener('change', function() {
const selectedCountry = this.value;
if (selectedCountry in countryCodes) {
phoneInput.value = countryCodes[selectedCountry] + ' ';
} else {
phoneInput.value = '';
}
});
// Get DOM Elements
const chatbotButton = document.getElementById('chatbot-button');
const chatbotPopup = document.getElementById('chatbot-popup');
const formContainer = document.getElementById('form-container');
const chatBox = document.getElementById('chat-box');
const chatBody = document.getElementById('chat-body');
const gradioIframe = document.getElementById('gradio-iframe');
const gradioFrame = document.getElementById('gradio-frame');
const closeButton = document.getElementById('close-btn');
const form = document.getElementById('form');
const backToChatbotBtn = document.getElementById('back-to-chatbot-btn');
// Check if the form was already submitted in the current session
const formSubmitted = sessionStorage.getItem('formSubmitted') === 'true';
let globalUniqueID; // Declare a global variable
const userForm = document.getElementById('form');
userForm.addEventListener('submit', async (event) => {
event.preventDefault(); // Prevent default form submission
// Gather form data
const name = document.getElementById('username').value;
const company = document.getElementById('companyname').value;
const email = document.getElementById('email').value;
const countryCode = document.getElementById('country').value;
const phone = document.getElementById('phone').value;
// Prepare data to send to the server
const formData = {
name,
company,
email,
countryCode,
phone
};
try {
// Send data to the new server URL
const response = await fetch('https://srinuksv-fastapiyes.hf.space/webhook', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(formData)
});
if (!response.ok) {
throw new Error('Network response was not ok');
}
const result = await response.json();
// Store the unique ID in the global variable
globalUniqueID = result.id;
console.log('Unique ID:', globalUniqueID);
} catch (error) {
console.error('Error:', error);
}
});
// Function to Open Chatbot
function openChatbot() {
chatbotPopup.classList.add('visible'); // Add the visible class to show the popup
chatbotButton.style.opacity = '0'; // Fade out the hover button
setTimeout(() => {
chatbotButton.style.display = 'none'; // Hide the hover button after fade out
}, 300);
if (formSubmitted) {
formContainer.style.display = 'none';
chatBox.style.display = 'flex';
initializeChat(); // Start chat if the form was already submitted
} else {
formContainer.style.display = 'block'; // Show form when opening
chatBox.style.display = 'none';
}
}
// Function to Close Chatbot
function closeChatbot() {
chatbotPopup.classList.remove('visible'); // Remove the visible class to hide the popup
setTimeout(() => {
chatbotButton.style.display = 'flex'; // Display the hover button before fading in
setTimeout(() => {
chatbotButton.style.opacity = '1'; // Fade in the hover button
}, 50);
}, 300);
}
// Handle Form Submission
form.addEventListener('submit', function(event) {
event.preventDefault(); // Prevent default form submission
let isValid = true;
const formControls = document.querySelectorAll('.form-control');
formControls.forEach(function(control) {
const input = control.querySelector('input, select');
if (input.hasAttribute('required') && !input.value.trim()) {
input.style.borderColor = 'red';
isValid = false;
} else {
input.style.borderColor = '#ddd';
}
});
const recaptchaResponse = grecaptcha.getResponse();
if (recaptchaResponse.length === 0) {
alert('Please complete the reCAPTCHA.');
isValid = false;
}
if (isValid) {
formContainer.style.display = 'none';
chatBox.style.display = 'flex';
sessionStorage.setItem('formSubmitted', 'true');
initializeChat(); // Initialize the chat after form submission
}
});
// Function to handle user input and display chat responses
function handleUserInput(input) {
// Display user message
const userMessage = document.createElement('div');
userMessage.className = 'user-message';
userMessage.textContent = input;
chatBody.appendChild(userMessage);
// Create bot response
const botMessage = document.createElement('div');
botMessage.className = 'bot-message';
// Define bot responses based on user input
switch (input) {
case 'Know more about RedFerns Tech':
botMessage.innerHTML = `
RedFerns Tech is a leading technology solutions provider specializing in Salesforce consultancy, Zoho services, ServiceNow implementation and Data Science solutions.
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
</div>
`;
break;
case 'Our services':
botMessage.innerHTML = `
We offer a range of services tailored to your needs. Please choose one:
<div class="button-container">
<button onclick="handleUserInput('Salesforce')">Salesforce</button>
<button onclick="handleUserInput('Zoho')">Zoho</button>
<button onclick="handleUserInput('Machine Learning')">Machine Learning</button>
<button onclick="handleUserInput('Data Science')">Data Science</button>
<button onclick="handleUserInput('Menu')">Menu</button>
</div>
`;
break;
case 'Salesforce':
botMessage.innerHTML = `
We offer a range of services tailored to your needs. Please choose one:
<div class="button-container">
<button onclick="handleUserInput('Lightning Service')">Lightning Service</button>
<button onclick="handleUserInput('Admin Support')">Admin Support</button>
<button onclick="handleUserInput('App Development')">App Development</button>
<button onclick="handleUserInput('Sites and Communities')">Sites and Communities</button>
<button onclick="handleUserInput('Menu')">Menu</button>
</div>
`;
break;
case 'Our products':
botMessage.innerHTML = `
We offer a range of services tailored to your needs. Please choose one:
<div class="button-container">
<button onclick="handleUserInput('currency conversion app')">Currency Conversion App</button>
<button onclick="handleUserInput('mass approvals app')">Mass Approvals App</button>
<button onclick="handleUserInput('thumbnail viewer app')">Thumbnail Viewer App</button>
<button onclick="handleUserInput('product filter app')">Product Filter App</button>
<button onclick="handleUserInput('Menu')">Menu</button>
</div>
`;
break;
case 'Menu':
botMessage.innerHTML = `
<p>Hi! Welcome to RedFerns Tech! I'm FernAI, here to help you explore our innovative solutions and services. Please select from below:</p>
<div class="button-container">
<button onclick="handleUserInput('Know more about RedFerns Tech')">Know more about RedFerns Tech</button>
<button onclick="handleUserInput('Our services')">Our services</button>
<button onclick="handleUserInput('Our products')">Our products</button>
<button onclick="handleUserInput('career opportunities')">Career Opportunities</button>
<button onclick="handleUserInput('chat with expert')">Chat With Expert</button>
<button onclick="handleUserInput('Appointment Booking')">Appointment Booking</button>
`;
break;
case 'Appointment Booking':
window.open('https://calendly.com/contactus-redfernstech', '_blank');
botMessage.innerHTML = `
<p>Book an Appointment or Go back to Menu:</p>
<div class="button-container"w>
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'Zoho':
window.open('https://redfernstech.com/services-list/zoho-crm/', '_blank');
botMessage.innerHTML = `
<p>View Zoho Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'Machine Learning':
window.open('https://redfernstech.com/services-list/machine-learning/', '_blank');
botMessage.innerHTML = `
<p>View Machine Learning Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'Data Science':
window.open('https://redfernstech.com/services-list/data-science/', '_blank');
botMessage.innerHTML = `
<p>View Data Science Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'Lightning Service':
window.open('https://redfernstech.com/services-list/salesforce-lightning-services/', '_blank');
botMessage.innerHTML = `
<p>View Lightning Service Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'App Development':
window.open('https://redfernstech.com/services-list/salesforce-app-development/', '_blank');
botMessage.innerHTML = `
<p>View App Development Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'Sites and Communities':
window.open('https://redfernstech.com/services-list/salesforce-sites-communities/', '_blank');
botMessage.innerHTML = `
<p>View Sites and Communities Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'Admin Support':
window.open('https://redfernstech.com/services-list/salesforce-admin-and-support/', '_blank');
botMessage.innerHTML = `
<p>View Admin Support Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'career opportunities':
window.open('https://redfernstech.com/careers/', '_blank');
botMessage.innerHTML = `
<p>View Careers Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'product filter app':
window.open('https://appexchange.salesforce.com/appxListingDetail?listingId=a0N4V00000K23xNUAR', '_blank');
botMessage.innerHTML = `
<p>View Product Filter App Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'thumbnail viewer app':
window.open('https://appexchange.salesforce.com/appxListingDetail?listingId=a0N4V00000K8u1dUAB', '_blank');
botMessage.innerHTML = `
<p>View Thumbnail Viewer App Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'mass approvals app':
window.open('https://appexchange.salesforce.com/appxListingDetail?listingId=a0N4V00000K24EdUAJ', '_blank');
botMessage.innerHTML = `
<p>View Mass Approvals App Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'currency conversion app':
window.open('https://appexchange.salesforce.com/appxListingDetail?listingId=a0N4V00000Is77CUAR', '_blank');
botMessage.innerHTML = `
<p>View Currency Conversion App Page or Go back to Menu:</p>
<div class="button-container">
<button onclick="handleUserInput('Menu')">Menu</button>
`;
break;
case 'chat with expert':
// Show the iframe with the Gradio chatbot URL
gradioIframe.style.display = 'flex';
chatBox.style.display = 'none';
formContainer.style.display = 'none';
botMessage.textContent = 'Loading Salesforce chatbot...'; // Optional: Notify the user
gradioFrame.src = `https://srinuksv-fastapiyes.hf.space/ch/${globalUniqueID}`; // Replace with your Gradio chatbot URL
break;
default:
botMessage.textContent = 'Sorry, I didn’t understand that. Can you please choose another option?';
break;
}
chatBody.appendChild(botMessage);
chatBody.scrollTop = chatBody.scrollHeight;
}
// Show form container
function showForm() {
formContainer.style.display = 'flex';
chatBox.style.display = 'none';
gradioIframe.style.display = 'none'; // Hide Gradio iframe if visible
}
// Show chat box
function showChat() {
formContainer.style.display = 'none';
chatBox.style.display = 'flex';
gradioIframe.style.display = 'none'; // Hide Gradio iframe if visible
initializeChat();
}
// Show Gradio iframe
function openGradioChat() {
const chatbots = ["Lily", "Clara"];
const selectedChatbot = chatbots[Math.floor(Math.random() * chatbots.length)];
// Hide form and chat box, display Gradio iframe
formContainer.style.display = 'none';
chatBox.style.display = 'none';
gradioIframe.style.display = 'flex';
// Set the iframe source based on the selected chatbot
if (selectedChatbot === "Clara") {
gradioIframe.src = `https://srinuksv-fastapiyes.hf.space/ch/${globalUniqueID}`;
} else {
gradioIframe.src = `https://srinuksv-fastapiyes.hf.space/ch/${globalUniqueID}`;
}
}
function submitAppointment() {
const phoneNumber = document.getElementById('phoneNumber').value;
const appointmentDate = document.getElementById('appointmentDate').value;
const appointmentTime = document.getElementById('appointmentTime').value;
// Split the date into year, month, and day
const dateParts = appointmentDate.split('-'); // Assuming the format is YYYY-MM-DD
const year = dateParts[0];
const month = dateParts[1]; // Google Forms uses 1-indexed months
const day = dateParts[2];
// Split the time into hour and minute
const timeParts = appointmentTime.split(':'); // Assuming the format is HH:MM
const hour = timeParts[0];
const minute = timeParts[1];
if (phoneNumber && appointmentDate && appointmentTime) {
// Google Form submission URL and entry IDs
const googleFormURL = 'https://docs.google.com/forms/u/0/d/e/1FAIpQLSdLLMPObehQAPIJe26ALLP-uGiR_rTbFomaQ6jrYSDKDpC53Q/formResponse';
const formData = new FormData();
formData.append('entry.399768569', phoneNumber); // Phone number
formData.append('entry.524576831_hour', hour); // Appointment hour
formData.append('entry.524576831_minute', minute); // Appointment minute
formData.append('entry.277009627_year', year); // Appointment year
formData.append('entry.277009627_month', month); // Appointment month
formData.append('entry.277009627_day', day); // Appointment day
// Send data to Google Form
fetch(googleFormURL, {
method: 'POST',
body: formData,
mode: 'no-cors' // To avoid CORS issues
}).then(() => {
const botMessage = document.createElement('div');
botMessage.className = 'message bot-message';
botMessage.innerHTML = `
Appointment booked for ${appointmentDate} at ${appointmentTime}. We will contact you at ${phoneNumber}.
<br><br>What would you like to do next?
<button onclick="handleUserInput('Menu')">Return to Menu</button>
`;
chatBody.appendChild(botMessage);
}).catch(() => {
const botMessage = document.createElement('div');
botMessage.className = 'message bot-message';
botMessage.innerHTML = `
There was an error booking your appointment. Please try again.
<br><br>What would you like to do next?
<button onclick="handleUserInput('Menu')">Return to Menu</button>
`;
chatBody.appendChild(botMessage);
});
} else {
const botMessage = document.createElement('div');
botMessage.className = 'message bot-message';
botMessage.innerHTML = `
Please fill in all the details.
<br><br>What would you like to do next?
<button onclick="handleUserInput('Menu')">Return to Menu</button>
`;
chatBody.appendChild(botMessage);
}
chatBody.scrollTop = chatBody.scrollHeight;
}
// Hide Gradio iframe and show chat box
function goBackToChat() {
formContainer.style.display = 'none';
chatBox.style.display = 'flex';
gradioIframe.style.display = 'none';
initializeChat();
}
// Initialize chat
function initializeChat() {
chatBody.innerHTML = '';
const welcomeMessage = document.createElement('div');
welcomeMessage.className = 'message bot-message';
welcomeMessage.innerHTML = `
<p>Hi! Welcome to RedFerns Tech! I'm FernAI, here to help you explore our innovative solutions and services. Please select from below:</p>
<div class="button-container">
<button onclick="handleUserInput('Know more about RedFerns Tech')">Know more about RedFerns Tech</button>
<button onclick="handleUserInput('Our services')">Our services</button>
<button onclick="handleUserInput('Our products')">Our products</button>
<button onclick="handleUserInput('career opportunities')">Career Opportunities</button>
<button onclick="handleUserInput('chat with expert')">Chat With Expert</button>
<button onclick="handleUserInput('Appointment Booking')">Appointment Booking</button>
`;
chatBody.appendChild(welcomeMessage);
chatBody.scrollTop = chatBody.scrollHeight;
}
// Event Listeners
chatbotButton.addEventListener('click', openChatbot);
closeButton.addEventListener('click', closeChatbot);
backToChatbotBtn.addEventListener('click', goBackToChat);
// Automatically open the chatbot if the form was submitted in the current session
if (formSubmitted) {
openChatbot();
}
</script>
</body>
</html>