1jQuery(function(){ 2 3 /* 4 if(!jQuery.isFunction(jQuery.fn.on)){ 5 var jquery_version_error_message = 'The contact form requires jQuery 1.7.2 to work properly.<br />jQuery '+jQuery().jquery+' is loaded.'; 6 jQuery('.cfg-contactform').prepend('<p style="color:#FF0000">'+jquery_version_error_message+'</p>'); 7 } 8 */ 9 10 jQuery('#cfg-contactform-30 .cfg-uploadfilename').val(''); // FF may keep the file name in the cfg-uploadfilename input after submitting and refreshing the page 11 12 jQuery('#cfg-contactform-30 .cfg-captcha-refresh').click(function(){ 13 14 jQuery('#cfg-contactform-30 .cfg-captcha-img').attr('src','cfg-contactform-30/inc/captcha.php?r='+Math.random()); 15 }); 16 17 jQuery('#cfg-contactform-30 .cfg-submit').click(function(){ 18 19 var formcontainer = jQuery(this).closest('.cfg-contactform'); 20 var loading = formcontainer.find('.cfg-loading'); 21 22 loading.show(); 23 24 var submit_btn = jQuery(this); 25 submit_btn.hide(); 26 27 formcontainer.find('.cfg-errormessage').hide().remove(); 28 29 var form_value_array = Array(); 30 var radio_value = Array(); 31 var checkbox_value = Array(); 32 var selectmultiple_value = Array(); 33 var deleteuploadedfile_value = Array(); 34 35 formcontainer.find('.cfg-form-value').each(function() 36 { 37 var elementlabel = jQuery(this).closest('.cfg-element-container').find('.cfg-label-value'); 38 var elementlabel_id = elementlabel.closest('label').attr('id'); 39 var elementlabel_value = elementlabel.html(); 40 41 42 43 // catch uploads 44 if(jQuery(this).hasClass('cfg-uploadfilename')) 45 { 46 var key = jQuery(this).prop('name'); 47 var value = jQuery.trim(jQuery(this).val()); 48 49 var deletefile = jQuery(this).closest('.cfg-element-content').find('.cfg-uploaddeletefile').val(); 50 51 form_value_array.push({'element_id': key, 'element_value': value, 'elementlabel_id':elementlabel_id, 'elementlabel_value':elementlabel_value, 'element_type':'upload', 'filename':value, 'element_type':'upload', 'deletefile':deletefile}); 52 } 53 54 55 // catch input text values, textarea values, select values 56 if(jQuery(this).is('.cfg-type-text, .cfg-type-textarea, .cfg-type-select')) 57 { 58 var key = jQuery(this).prop('id'); 59 var value = jQuery(this).val(); 60 form_value_array.push({'element_id': key, 'element_value': value, 'elementlabel_id':elementlabel_id, 'elementlabel_value':elementlabel_value}); 61 } 62 63 64 // catch radiobutton values 65 if(jQuery(this).is(':radio')) 66 { 67 var key = jQuery(this).prop('name'); 68 var value = jQuery(this).val(); 69 70 var check_index_radio_form_value = form_value_array.length+1; 71 72 if(jQuery(this).is(':checked')){ 73 form_value_array.push({'element_id': key, 'element_value': value, 'elementlabel_id':elementlabel_id, 'elementlabel_value':elementlabel_value}); 74 radio_value[key] = value; 75 } 76 77 if( jQuery(this).is( jQuery(this).closest('.cfg-element-container').find('input[name='+key+']:last')) ) 78 { 79 if(!radio_value[key]){ 80 form_value_array.push({'element_id': key, 'element_value': '', 'elementlabel_id':elementlabel_id, 'elementlabel_value':elementlabel_value}); 81 } 82 } 83 } 84 85 86 // catch checkbox values 87 if(jQuery(this).is(':checkbox')) 88 { 89 var key = jQuery(this).prop('name'); 90 var value = jQuery(this).val(); 91 92 if(jQuery(this).is(':checked')) 93 { 94 95 form_value_array.push({'element_id': key, 'element_value': value, 'elementlabel_id':elementlabel_id, 'elementlabel_value':elementlabel_value}); 96 97 checkbox_value[key] = value; 98 99 } 100 101 if( jQuery(this).is(jQuery(this).closest('.cfg-element-container').find('input[name='+key+']:last'))) 102 { 103 // we are at the last checkbox, and the checkbox[name] array value is still empty => insert fieldname: '' in the notification 104 if(!checkbox_value[key]) 105 { 106 form_value_array.push({'element_id': key, 'element_value': '', 'elementlabel_id':elementlabel_id, 'elementlabel_value':elementlabel_value}); 107 } 108 } 109 } 110 111 // catch multiple select values 112 if(jQuery(this).hasClass('cfg-type-selectmultiple')) 113 { 114 var key = jQuery(this).prop('name'); // must be placed here, not in each() or php will return Undefined index: element_id 115 116 jQuery(this).find('option').each(function() 117 { 118 var value = jQuery(this).val(); 119 120 if(jQuery(this).is(':selected')) 121 { 122 form_value_array.push({'element_id': key, 'element_value': value, 'elementlabel_id':elementlabel_id, 'elementlabel_value':elementlabel_value}); 123 selectmultiple_value[key] = value; 124 } 125 126 if( jQuery(this).is( jQuery(this).closest('.cfg-type-selectmultiple').find('option:last')) ) 127 { 128 // we are at the last option, and the selectmultiple[name] array value is still empty => insert fieldname: '' in the notification 129 if(!selectmultiple_value[key]) 130 { 131 form_value_array.push({'element_id': key, 'element_value': '', 'elementlabel_id':elementlabel_id, 'elementlabel_value':elementlabel_value}); 132 } 133 } 134 135 }); 136 137 } 138 139 // catch time values 140 if(jQuery(this).hasClass('cfg-type-time')) 141 { 142 //var key = jQuery(this).find('.cfg-time-hour').prop('name'); 143 var key = jQuery(this).closest('.cfg-element-container').find('.cfg-time-hour').prop('name'); 144 var ampm = jQuery(this).closest('.cfg-element-container').find('.cfg-time-ampm').val(); 145 if(ampm == undefined) ampm = ''; // no quote on undefined 146 var value = jQuery(this).closest('.cfg-element-container').find('.cfg-time-hour').val()+':'+jQuery(this).closest('.cfg-element-container').find('.cfg-time-minute').val()+' '+ampm; 147 148 form_value_array.push({'element_id': key, 'element_value': value, 'elementlabel_id':elementlabel_id, 'elementlabel_value':elementlabel_value}); 149 } 150 151 }); 152 153 154 // catch list of uploaded files to delete
155 formcontainer.find('.cfg-deleteuploadedfile').each(function(){ 156 deleteuploadedfile_value.push(jQuery(this).val()); 157 }); 158 159 160 var captcha_img; 161 var captcha_input; 162 163 if(formcontainer.find('.cfg-captcha-img').length) 164 { 165 captcha_img = 1; 166 captcha_input = formcontainer.find('.cfg-captcha-input').val(); 167 } 168 169 170 // console.log(deleteuploadedfile_value); 171 // console.log(form_value_array); 172 173 174 jQuery.post('cfg-contactform-30/inc/form-validation.php', 175 { 176 'captcha_img':captcha_img, 177 'captcha_input':captcha_input, 178 'form_value_array':form_value_array, 179 'deleteuploadedfile':deleteuploadedfile_value 180 }, 181 function(data) 182 { 183 184 data = jQuery.trim(data); 185 186 // console.log(data); 187 188 response = jQuery.parseJSON(data); 189 190 if(response['status'] == 'ok') 191 { 192 193 if(response['redirect_url']) 194 { 195 // we do not hide the loading animation because the redirection can take some time (prevents wondering what is happening) 196 window.location.href = response['redirect_url']; 197 } else 198 { 199 loading.hide(); 200 201 validation_message = '<div class="cfg-validationmessage">'+response['message']+'</div>'; 202 203 formcontainer.find('.cfg-element-container').each(function() 204 { 205 if(!jQuery(this).find('.cfg-title').html()) 206 { 207 jQuery(this).slideUp('fast'); 208 } 209 }); 210 211 jQuery('html, body').animate({scrollTop:formcontainer.offset().top}, 'fast'); 212 213 formcontainer.find('.cfg-contactform-content').append(validation_message); 214 } 215 216 } else 217 { 218 loading.hide(); 219 220 submit_btn.show(); 221 222 for(var i=0; i<response['message'].length; i++) 223 { 224 // name* : catch all the elements containing the element_id string (can be paragraphs above inputs) 225 // first removed: error messages is positionned above the first name* found 226 // IE does not like (name[]:first), we use .first() instead ( .filter(':first') is ok too) 227 var optioncontainer = jQuery('[name*='+response['message'][i]['element_id']+']').first().closest('.cfg-element-content'); 228 229 jQuery('<div class="cfg-errormessage">'+response['message'][i]['errormessage']+'</div>').prependTo(optioncontainer).fadeIn(); 230 } 231 232 // scrolls to the first error message 233 jQuery('html, body').animate({scrollTop: jQuery('#'+response['message'][0]['elementlabel_id']).offset().top},'fast'); 234 235 } 236 } /* end function data */ 237 ); /* end jQuery.post */ 238 }); /* end click submit */ 239 240 241 // DELETE UPLOADED FILE 242 jQuery('body').on('click', '#cfg-contactform-30 .cfg-deleteupload', function() 243 { 244 var filename = jQuery(this).closest('.cfg-uploadsuccess-container').find('.cfg-deleteupload-filename').val(); 245 246 // to add the filename to the list of files to delete 247 // // the .cfg-deleteuploadedfile input can also be added in case of chain upload (handlers.js) 248 jQuery(this).closest('.cfg-element-content').append('<input value="'+filename+'" type="hidden" class="cfg-deleteuploadedfile" />'); 249 250 // reset the upload input that contains the filename value 251 jQuery(this).closest('.cfg-element-content').find('.cfg-uploadfilename').val(''); 252 253 // must come last, jQuery(this) is used to access closest elements 254 jQuery(this).closest('.cfg-uploadsuccess-container').remove(); 255 256 }); 257 258 259}); 260
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.