1function oxInitForm(selector, onsend = false){ 2 var res = {}; 3 res.form = hjq(selector).first(); 4 res.button = res.form.find('input.send'); 5 res.result = res.form.find('div.result');; 6 res.blocks = []; 7 8 res.form.find('input.req, select.req').each(function(index, item){ 9 var jitem = hjq(item); 10 var parent = jitem.closest('.block'); 11 if (parent.hasClass('act')) 12 jitem.attr('required', true); 13 }); 14 15 res.form.find('.block').each(function(index, item){ 16 var block = hjq(item); 17 block.oxShow = function(){ 18 block.addClass('act'); 19 block.find('input.req, select.req').each(function(index, item){ 20 var jitem = hjq(item); 21 var parent = jitem.closest('.block'); 22 if (parent.is(block) || parent.css('display') != 'none') 23 jitem.attr('required', true); 24 }); 25 block.slideDown(400, function(){ 26 $html = hjq('html'); 27 var bt = block.offset().top; 28 var bb = bt + block.height(); 29 var ht = $html.scrollTop(); 30 var hb = ht + hjq(window).height(); 31 var n = -1; 32 if (bt < ht) 33 n = bt; 34 else if (bb > hb){ 35 n = ht + (bb - hb); 36 if (n > bt) 37 n = bt; 38 } 39 if (n >= 0){ 40 $html.animate({ 41 scrollTop: n 42 }, 400); 43 } 44 }); 45 }; 46 block.oxHide = function(desact = false){ 47 if (desact) 48 block.removeClass('act'); 49 block.slideUp(); 50 block.find('input.req, select.req').attr('required', false); 51 }; 52 block.oxIsShow = function(){ 53 return block.css('display') != 'none'; 54 }; 55 block.setState = function(vis, deact){ 56 if (vis == this.oxIsShow()) 57 return; 58 if (vis) 59 this.oxShow() 60 else 61 this.oxHide(deact); 62 }; 63 res.blocks[item.id] = block; 64 }); 65 66 res.form.find('.radio_buttons input[type="radio"]').change(function(){ 67 var input = hjq(this); 68 input.closest('.radio_buttons').find('label').removeClass('active'); 69 input.closest('label').addClass('active'); 70 }); 71 72 res.form.find('.radio_buttons input[type="radio"]').each(function(index, item){ 73 if (this.checked) 74 hjq(this).closest('label').addClass('active'); 75 }); 76 77 res.form.find('div.slider_cont.one, div.slider_cont.simple_one').each(function(index, item){ 78 var div = hjq(item); 79 var sinput = div.find('input.slider_input'); 80 var hinput = div.find('input.res'); 81 var cval = 0; 82 83 function getSVal(){ 84 var val = sinput.val().replace(/[^0-9]/gim, ''); 85 if (val < div.data('min')) 86 cval = div.data('min'); 87 else if (val > div.data('max')) 88 cval = div.data('max'); 89 else 90 cval = val; 91 } 92 93 function setSVal(){ 94 hinput.val(cval); 95 if (sinput.length) 96 sinput.val(cval.toString().replace(/(d)(?=(d{3})+(?!d))/g, '$1 ')); 97 } 98 99 if (sinput.length) 100 getSVal(); 101 else 102 cval = hinput.val(); 103 setSVal(); 104 var sc = div.find('div.slider'); 105 sc.slider({ 106 animate: 'fast', 107 min: div.data('min'), 108 max: div.data('max'), 109 value: cval, 110 range: 'min', 111 step: parseInt(div.data('step')), 112 slide: function(event, ui){ 113 cval = ui.value; 114 setSVal(); 115 } 116 }); 117 118 if (sinput.length){ 119 var time = false; 120 sinput.keyup(function(){ 121 clearTimeout(time); 122 time = setTimeout(function(){ 123 getSVal(); 124 setSVal(); 125 sc.slider('value', cval); 126 }, 2000); 127 }); 128 } 129 }); 130 131 res.form.find('div.slider_cont.two').each(function(index, item){ 132 var div = hjq(item); 133 var sinputs = div.find('input.slider_input'); 134 var hinputs = div.find('input.res'); 135 var cvals = [0, 0]; 136 137 function getSVals(index = -1){ 138 start = index < 0 ? 0 : index; 139 end = index < 0 ? sinputs.length : index + 1; 140 for (i = start; i < end; i++){ 141 var val = sinputs[i].value.replace(/[^0-9]/gim, ''); 142 if (val < div.data('min')) 143 cvals[i] = div.data('min'); 144 else if (val > div.data('max')) 145 cvals[i] = div.data('max'); 146 else 147 cvals[i] = val; 148 } 149 if (index >= 0){ 150 if (index == 0){ 151 if (cvals[0] > cvals[1]) 152 cvals[0] = cvals[1]; 153 } 154 else{ 155 if (cvals[1] < cvals[0]) 156 cvals[1] = cvals[0]; 157 } 158 } 159 } 160 161 function setSVals(){ 162 for (i = 0; i < sinputs.length; i++){ 163 sinputs[i].value = cvals[i].toString().replace(/(d)(?=(d{3})+(?!d))/g, '$1 '); 164 hinputs[i].value = cvals[i]; 165 } 166 } 167
168 getSVals(); 169 setSVals(); 170 var sc = div.find('div.slider'); 171 sc.slider({ 172 animate: 'fast', 173 min: div.data('min'), 174 max: div.data('max'), 175 values: cvals, 176 range: true, 177 step: parseInt(div.data('step')), 178 slide: function(event, ui){ 179 cvals = ui.values; 180 setSVals(); 181 } 182 }); 183 184 var times = [false, false]; 185 sinputs.keyup(function(){ 186 var index = sinputs.index(this); 187 clearTimeout(times[index]); 188 times[index] = setTimeout(function(){ 189 getSVals(index); 190 setSVals(); 191 sc.slider('values', cvals); 192 }, 2000); 193 }); 194 }); 195 196 hjq.mask.definitions['h']='[4|9]'; 197 res.form.find('input.phone').mask('+7(h99) 999-99-99'); 198 res.form.find('input.passport_series').mask('99-99'); 199 res.form.find('input.passport_number').mask('999999'); 200 res.form.find('input.passport_sn').mask('9999 999999'); 201 res.form.find('input.passport_depcode').mask('999-999'); 202 203 res.form.find('.notice').mouseover(function(e){ 204 if (e.target == this) 205 hjq(this).find('.notice_text').fadeIn(); 206 }); 207 208 res.form.find('.notice').mouseout(function(){ 209 hjq(this).find('.notice_text').fadeOut(); 210 }); 211 212 res.form.find('input.kladr').each(function(index, item){ 213 var input = hjq(item); 214 var selected = false; 215 input.kladr({ 216 type: hjq.kladr.type.city, 217 withParents: true, 218 labelFormat: function(obj, query){ 219 var label = ''; 220 221 var name = obj.name.toLowerCase(); 222 query = query.name.toLowerCase(); 223 224 var start = name.indexOf(query); 225 start = start > 0 ? start : 0; 226 227 if (obj.typeShort) 228 label += obj.typeShort + '. '; 229 230 if (query.length < obj.name.length) { 231 label += obj.name.substr(0, start); 232 label += '<strong>' + obj.name.substr(start, query.length) + '</strong>'; 233 label += obj.name.substr(start + query.length, obj.name.length - query.length - start); 234 } 235 else 236 label += '<strong>' + obj.name + '</strong>'; 237 238 if (obj.parents){ 239 for (var k = obj.parents.length - 1; k > -1; k--){ 240 var parent = obj.parents[k]; 241 if (parent.name) { 242 if (label) label += '<small>, </small>'; 243 label += '<small>' + parent.name + ' ' + parent.typeShort + '.</small>'; 244 } 245 } 246 } 247 248 return label; 249 }, 250 select: function(obj){ 251 var city = obj.typeShort + '. ' + obj.name; 252 var region = city; 253 var text = city; 254 obj.parents.forEach(function(item, index){ 255 if (item.contentType == 'region'){ 256 region = item.name + ' ' + item.typeShort + '.'; 257 text += ', ' + region; 258 } 259 }); 260 input.val(text); 261 res.form.find('input[name="city"]').val(city); 262 res.form.find('input[name="region"]').val(region); 263 selected = true; 264 } 265 }); 266 input.blur(function(){ 267 if (!selected) 268 input.val(''); 269 }); 270 }); 271 272 res.form.find('.kladr_v2').each(function(index, item){ 273 var cont = hjq(item); 274 var city_selected = false; 275 var icity = cont.find('.kl_city'); 276 icity.val(''); 277 var rregions = cont.find('input.region'); 278 var rcities = cont.find('input.city'); 279 280 function setVal(inputs, code, name){ 281 inputs.each(function(index, item){ 282 var $item = hjq(item); 283 $item.val($item.hasClass('code') ? code : name); 284 }); 285 } 286 287 var istreet = cont.find('.kl_street'); 288 if (istreet.length){ 289 istreet.val(''); 290 istreet.prop('disabled', true); 291 var rstreets = cont.find('input.street'); 292 var street_selected = false; 293 294 istreet.kladr({ 295 type: hjq.kladr.type.street, 296 parentType: hjq.kladr.type.city, 297 verify: true, 298 check: function(obj){ 299 if (!obj){ 300 street_selected = false; 301 istreet.val(''); 302 } 303 }, 304 select: function(obj){ 305 var text = obj.typeShort + '. ' + obj.name; 306 istreet.val(text); 307 setVal(rstreets, obj.id, text); 308 street_selected = true; 309 } 310 }); 311 312 istreet.blur(function(){ 313 if (!street_selected) 314 istreet.val(''); 315 }); 316 } 317 318 icity.kladr({ 319 type: hjq.kladr.type.city, 320 withParents: true, 321 verify: true, 322 check: function(obj){ 323 if (!obj){ 324 city_selected = false; 325 icity.val(''); 326 if (istreet.length){ 327 street_selected = false; 328 istreet.val(''); 329 istreet.prop('disabled', true); 330 } 331 } 332 },
333 labelFormat: function(obj, query){ 334 var label = ''; 335 336 var name = obj.name.toLowerCase(); 337 query = query.name.toLowerCase(); 338 339 var start = name.indexOf(query); 340 start = start > 0 ? start : 0; 341 342 if (obj.typeShort) 343 label += obj.typeShort + '. '; 344 345 if (query.length < obj.name.length) { 346 label += obj.name.substr(0, start); 347 label += '<strong>' + obj.name.substr(start, query.length) + '</strong>'; 348 label += obj.name.substr(start + query.length, obj.name.length - query.length - start); 349 } 350 else 351 label += '<strong>' + obj.name + '</strong>'; 352 353 if (obj.parents){ 354 for (var k = obj.parents.length - 1; k > -1; k--){ 355 var parent = obj.parents[k]; 356 if (parent.name) { 357 if (label) label += '<small>, </small>'; 358 label += '<small>' + parent.name + ' ' + parent.typeShort + '.</small>'; 359 } 360 } 361 } 362 363 return label; 364 }, 365 select: function(obj){ 366 var city = {name: obj.typeShort + '. ' + obj.name, code: obj.id}; 367 var region = city; 368 var text = city.name; 369 obj.parents.forEach(function(item, index){ 370 if (item.contentType == 'region'){ 371 region = {name: item.name + ' ' + item.typeShort + '.', code: item.id}; 372 text += ', ' + region.name; 373 } 374 }); 375 icity.val(text); 376 setVal(rcities, city.code, city.name); 377 setVal(rregions, region.code, region.name); 378 city_selected = true; 379 if (istreet.length){ 380 istreet.kladr('parentId', city.code); 381 istreet.prop('disabled', false); 382 } 383 } 384 }); 385 386 icity.blur(function(){ 387 if (!city_selected) 388 icity.val(''); 389 }); 390 }); 391 392 res.sended = false; 393 res.sendForm = function (debug = false){ 394 if (res.sended && !debug) 395 return; 396 397 function isFunction(functionToCheck){ 398 return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]'; 399 } 400 401 res.sended = true; 402 res.result.text(''); 403 var send_data = { 404 source: window.location.href 405 }; 406 res.form.find('input.res, select.res').each(function(index, item){ 407 if ((item.type != 'radio' && item.type != 'checkbox') || item.checked){ 408 var jitem = hjq(item); 409 var parent = jitem.closest('.block'); 410 if (parent.length == 0 || (parent.closest('.ox_form').is(res.form) && parent.hasClass('act'))){ 411 var val = item.value; 412 if (jitem.hasClass('x30')) 413 val = val * 30; 414 send_data[item.name] = val; 415 } 416 } 417 }); 418 if (!debug){ 419 if (isFunction(window.before_ox_form_send)) 420 window.before_ox_form_send(send_data); 421 hjq.ajax({ 422 method: 'POST', 423 url: '//ox.dev.ndkl.ru/api/records.send', 424 data: send_data, 425 dataType: 'json', 426 success: function(data){ 427 res.sended = data.status == 'ok'; 428 res.result.text(res.sended ? 'ÐаÑвка ÑÑпеÑно оÑпÑавлена' : (data.message ? data.message : 'ÐÑоизоÑла оÑибка')); 429 if (onsend !== false) 430 onsend(data); 431 if (isFunction(window.after_ox_form_send)) 432 window.after_ox_form_send(send_data, res.sended ? 'success' : 'error'); 433 }, 434 error: function(){ 435 res.result.text('ÐÑоизоÑла оÑибка'); 436 res.sended = false; 437 if (onsend !== false) 438 onsend(false); 439 if (isFunction(window.after_ox_form_send)) 440 window.after_ox_form_send(send_data, 'error'); 441 } 442 }); 443 } 444 else 445 console.log(send_data); 446 } 447 448 return res; 449} 450 451 452 453 454 455
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.