1// $Id: find_search.js 36029 2023-02-27 10:12:52Z brendon $ 2// Functions to support validation of find_search 3 4// Variables to be populated in the HTML 5// requiredFields, fieldNames, valStrings should come from requiredFields.js 6if (typeof valStrings == "undefined") { 7 var valStrings = new Array; 8} 9 10// Global variables 11var count; 12var last; 13var maxOptions = 10; 14 15// Counts number of countries selected and does validation 16function checkNumberCountries (formElement) { 17 count = 0; 18 for (var i = 0; i < formElement.options.length; i++) { 19 if (formElement.options[i].selected) { 20 count++; 21 last = i; 22 if (count > maxOptions) { 23 formElement.options[i].selected = false; 24 } 25 } 26 } 27 if (count > maxOptions) { 28 alert (valStrings["maxCountriesExceeded"]); 29 return false; 30 } 31 32 return true; 33} 34 35// Provide city list if there's only one province selected 36function changeProvince (formElement, updateSelect) { 37 if (updateSelect == true) { 38 updateSelection ('mProvinceID', 'provinceSelected'); 39 } 40 var count = 0; 41 for (var i = 0; i < formElement.options.length; i++) { 42 if (formElement.options[i].selected) { 43 count++; 44 } 45 } 46 if (count > 1) { 47 update(get(formElement), formElement, m[0]); 48 } else { 49 if (typeof m != 'undefined') { 50 relate(formElement, m, 1); 51 } 52 } 53 if (updateSelect == true) { 54 updateSelection ('mCityID', 'citySelected'); 55 } 56 formChanged (); 57 return true; 58} 59 60// Manage the mGender value when mGender selection has been disallowed 61function autosetMGender(formElement) { 62 if (typeof formElement.form.elements["mGender[]"] != 'undefined') { 63 var mGenderElement = formElement.form.elements["mGender[]"]; 64 } else { 65 var mGenderElement = formElement.form.mGender; 66 } 67 68 if (mGenderElement.value != 3) { 69 // when mGender is not set to Men & Women... 70 var gender = formElement.value; 71 var mGender = gender ^ 3; // set mGender to the inverse of gender 72 if (mGenderElement.value != gender) { 73 mGender = gender; // set mGender to match gender 74 } 75 //change the text label for mGender 76 $(mGenderElement).prev("span.gender").html(menWomen[mGender]); 77 //change the numeric value in the hidden input field 78 mGenderElement.value = mGender; 79 } 80 return true; 81} 82 83// Check that min & max are the right way round 84function checkAge (formElement) { 85 var mAgeMin = formElement.form.mAgeMin.selectedIndex; 86 var mAgeMax = formElement.form.mAgeMax.selectedIndex; 87 if (mAgeMax < mAgeMin) { 88 formElement.form.mAgeMin.options[mAgeMax].selected = true; 89 formElement.form.mAgeMax.options[mAgeMin].selected = true; 90 } 91 formChanged (); 92 return true; 93} 94 95function updateHeightText () { 96 if (typeof selectedOptions != 'undefined') { 97 var mHeightMin = $('#mHeightMin').prop('selectedIndex'); 98 var mHeightMax = $('#mHeightMax').prop('selectedIndex'); 99 if ($('#heightSelected').length != 0) { 100 var minText = $('#mHeightMin').find(':selected').text(); 101 var maxText = $('#mHeightMax').find(':selected').text(); 102 var heightText = minText + ' ' + copyItems["field_to"] + ' ' + maxText + ' ' + copyItems["field_inclusive"]; 103 updateText('height', heightText); 104 } 105 } 106} 107 108// Check that min & max are the right way round 109function checkHeight (formElement) { 110 var mHeightMin = formElement.form.mHeightMin.selectedIndex; 111 var mHeightMax = formElement.form.mHeightMax.selectedIndex; 112 if (mHeightMax < mHeightMin) { 113 formElement.form.mHeightMin.options[mHeightMax].selected = true; 114 formElement.form.mHeightMax.options[mHeightMin].selected = true; 115 var tempHeight = mHeightMin; 116 mHeightMin = mHeightMax; 117 mHeightMax = tempHeight; 118 } 119 updateHeightText (); 120 formChanged (); 121 return true; 122} 123 124// If you click anything other than All, All must be unchecked 125// unless you've just unchecked the last of the other checked items. 126function uA (formElement) { 127 var firstElement = 0; 128 var gotAnother = false; 129 var allChecked = true; 130 for (var i = formElementIndex[formElement.name]; i < formElement.form.elements.length; i++) { 131 if (formElement.form.elements[i].name == formElement.name) { 132 if (firstElement) { 133 gotAnother = (gotAnother || formElement.form.elements[i].checked); 134 allChecked = (allChecked && formElement.form.elements[i].checked); 135 } else { 136 firstElement = i; 137 formElement.form.elements[i].checked = false 138 $(formElement.form.elements[i]).closest("div.checkWrapper").removeClass("active"); 139 } 140 } else if (firstElement) { 141 break; // terminate the loop when we go on to another form element. 142 } 143 } 144 if (!gotAnother || allChecked) { 145 formElement.form.elements[firstElement].checked = true; 146 $(formElement.form.elements[firstElement]).closest("div.checkWrapper").addClass("active"); 147 if (allChecked) { 148 resetCheckboxes(formElement.form, formElement.name, false, false);
149 if (!valStrings.rwd2015) { 150 elementID = formElement.id.split("_")[0]; 151 textElement = elementID.substr(1,1).toLowerCase() + elementID.substr(2); 152 if (typeof selectedOptions != 'undefined') { 153 selectedOptions [elementID] = new Array (copyItems["field_all"]); 154 } 155 } 156 } 157 } 158 formChanged(); 159} 160 161 162// Reset a given set of checkboxes 163// default action is to clear - if reset is true will reset to ideal match preferences 164function resetCheckboxes (formObject, formElementName, reset, clear) { 165 var gotFirstElement = false; 166 for (var i = formElementIndex[formElementName]; i < formObject.elements.length; i++) { 167 if (formObject.elements[i].name == formElementName) { 168 if (gotFirstElement) { 169 if (reset && formObject.elements[i].defaultChecked) { 170 formObject.elements[i].checked = true; 171 $(formObject.elements[i]).closest("div.checkWrapper").addClass("active"); 172 } else { 173 formObject.elements[i].checked = false; 174 $(formObject.elements[i]).closest("div.checkWrapper").removeClass("active"); 175 } 176 } else { 177 if ((!reset && !clear) || (reset && formObject.elements[i].defaultChecked)) { 178 formObject.elements[i].checked = true; 179 $(formObject.elements[i]).closest("div.checkWrapper").addClass("active"); 180 } else { 181 formObject.elements[i].checked = false; 182 $(formObject.elements[i]).closest("div.checkWrapper").removeClass("active"); 183 } 184 gotFirstElement = true; 185 } 186 } else if (gotFirstElement) { 187 break; // terminate the loop when we go on to another form element. 188 } 189 } 190} 191 192 193// If you click All, we have to clear all the others, 194// but ensure that later stays checked and reset the weighting. 195// Originally checkAll - called often, so HTML is optimised by shortening 196function cA (formElement) { 197 resetCheckboxes (formElement.form, formElement.name, false, false); 198 formChanged(); 199} 200 201 202// Decide whether to submit the page when mCountryID changes in a search form 203var oldCount = 0; 204var singleCountry = ""; 205function checkMCountryID (formElement, updateSelect) { 206 if (!checkNumberCountries(formElement)) { 207 return false; 208 } 209 210 continent = (formElement.options[last].value == "00" || (formElement.options[last].value.substr(0,1) == "x" && formElement.options[last].value != "xx")); 211 if (count > 1 && singleCountry) { 212 singleCountry = ""; 213 refreshGeography(formElement); 214 } else if (count == 1 && !continent) { 215 singleCountry = formElement.options[last].value; 216 refreshGeography(formElement); 217 } else if (count == 1 && singleCountry && continent) { 218 singleCountry = ""; 219 refreshGeography(formElement); 220 } 221 if (updateSelect == true) { 222 updateSelection('mCountryID', 'locationSelected'); 223 } 224 formChanged(); 225 return true; 226} 227 228// prevent misbehaving browsers from transmitting their submit button name & value pairs (IE is guilty of doing this) 229// spec says: "only an activated submit button is successful" 230function noSubmitIE (formElement, button) { 231 if (formElement.form.elements[button]) { 232 // If we have more than one button with the same name, we need to loop 233 // for each otherwise the form will still do things we don't want it to. 234 if (typeof formElement.form.elements[button].length != 'undefined') { 235 var buttonElements = formElement.form.elements[button]; 236 for (i=0; i<buttonElements.length; i++) { 237 buttonElements[i].disabled = true; 238 } 239 } else { 240 formElement.form.elements[button].disabled = true; 241 } 242 } 243} 244 245// Submit the form to refresh details 246function refreshGeography (formElement, noAnchor) { 247 if (!noAnchor) { 248 formElement.form.action += "#geographicLocation"; 249 changedElement = document.getElementById('changed'); 250 if (changedElement != null) { 251 changedElement.value = '1'; 252 } 253 } 254 255 // prevent IE amd other misbehaving browsers from submitting <button> objects 256 noSubmitIE (formElement, 'quickSearch'); 257 noSubmitIE (formElement, 'advancedSearch'); 258 noSubmitIE (formElement, 'resetSearch'); 259 noSubmitIE (formElement, 'clearSearch'); 260 // Apply the same for saved search buttons 261 noSubmitIE (formElement, 'confirmDelete'); 262 noSubmitIE (formElement, 'confirmReplace'); 263 noSubmitIE (formElement, 'saveSearch'); 264 noSubmitIE (formElement, 'performSearch'); 265 noSubmitIE (formElement, 'editSearch'); 266 noSubmitIE (formElement, 'deleteSearch'); 267 268 if (typeof jQuery != 'undefined') { 269 270 var notifyElement = $('#notification'); 271 // update text to Refreshing geographic options 272 notifyElement.children().first().text(copyItems['find_search_refreshActivity']); 273 notifyElement.show(); 274 } else { 275 // fallback 276 document.getElementById('notification').style.display = ''; 277 } 278 formElement.form.submit(); 279} 280 281function updateGeographyText () { 282 updateSelection ('mCountryID', 'locationSelected'); 283 updateSelection ('mNationality', 'countrySelected'); 284 updateSelection ('mProvinceID', 'provinceSelected'); 285 updateSelection ('mCityID', 'citySelected');
286 updatePostCodeText (); 287} 288 289// Reset Advanced Search Fields 290function resetClearForm (formObject, gotProvinces, idealMatch) { 291 // Handle multiple checkboxes 292 selectedOptions = new Object(); 293 var checkBoxes = new Array; 294 checkBoxes = ["mStarSign[]", "mHeight[]", "mBodyType[]", "mLooks[]", "mHair[]", "mEyes[]", "mEthnicity[]", "mHomeLanguage[]", "mLanguages[]", "mReligion[]", "mEducation[]", "mOccupation[]", "mIncome[]", "mDrinking[]", "mSmoking[]", "mEating[]", "mRelationship[]", "mRelationships[]", "mHaveKids[]", "mWantKids[]"] 295 for (var i = 0; i < checkBoxes.length; i++) { 296 resetCheckboxes (formObject, checkBoxes[i], idealMatch, false); 297 if (typeof selectedOptions != "undefined") { 298 var checkBoxID = checkBoxes[i].substr(0, checkBoxes[i].length-2); 299 if (idealMatch) { 300 if (typeof defaultOptions != "undefined") { 301 selectedOptions[checkBoxID] = new Array; 302 var defOptions = defaultOptions[checkBoxID]; 303 if (typeof defOptions != 'undefined') { 304 for (var q = 0; q < defOptions.length; q++) { 305 selectedOptions[checkBoxID][q] = defOptions[q]; 306 } 307 } 308 } 309 } else { 310 selectedOptions[checkBoxID] = new Array (copyItems["field_all"]); 311 } 312 } 313 } 314 315 // Handle single checkboxes 316 if (idealMatch) { 317 if (document.getElementById('mHasPhoto') != null) { 318 document.getElementById('mHasPhoto').checked = document.getElementById('mHasPhoto').defaultChecked; 319 } 320 } else { 321 if (document.getElementById('mHasPhoto') != null) { 322 document.getElementById('mHasPhoto').checked = false; 323 } 324 } 325 326 // Handle selects 327 var selects = new Array; 328 selects = ["mAgeMin", "mAgeMax", "mNationality", "mCountryID", "mProvinceID", "mCityID", "mRangeID", "mPostCodeID", "mHeightMin", "mHeightMax"]; 329 for (var i = 0; i < selects.length; i++) { 330 if (document.getElementById(selects[i]) != null) { 331 var selectElement = document.getElementById(selects[i]); 332 if (typeof selectElement.options != 'undefined' && selectElement.options != null) { 333 var selectOption = selectElement.options[0]; 334 if (idealMatch && typeof selectOption != 'undefined' && selectOption != null) { 335 selectOption.selected = false; 336 } else { 337 selectOption.selected = true; 338 } 339 } 340 } 341 resetSelect (selects[i], idealMatch); 342 } 343 if (!idealMatch) { 344 if (document.getElementById('mAgeMax') != null) { 345 document.getElementById('mAgeMax').options[document.getElementById('mAgeMax').options.length-1].selected = true; 346 } 347 if (document.getElementById('mHeightMax') != null) { 348 document.getElementById('mHeightMax').options[document.getElementById('mHeightMax').options.length-1].selected = true; 349 } 350 if (document.getElementById('mHasPhoto') != null) { 351 document.getElementById('mHasPhoto').options[0].selected = true; 352 } 353 } 354 355 // Handle age and height sliders 356 var ageRangeSlider = $(".ageRange").children(".rangeslider").get(0); 357 if ($(ageRangeSlider).length) { 358 ageRangeSlider.noUiSlider.set([18, 100]); 359 var ageRangeLabel = $(".ageRange").children(".dynamicLabel").get(0); 360 var minAge = $('#mAgeMin option:first-child').html(); 361 var maxAge = $('#mAgeMax option:last-child').html(); 362 $(ageRangeLabel).html(minAge + " - " + maxAge); 363 } 364 365 var heightRangeSlider = $(".heightRange").children(".rangeslider").get(0); 366 if ($(heightRangeSlider).length) { 367 heightRangeSlider.noUiSlider.set([140, 210]); 368 var heightRangeLabel = $(".heightRange").children(".dynamicLabel").get(0); 369 var minHeight = $('#mHeightMin option:first-child').html(); 370 var maxHeight = $('#mHeightMax option:last-child').html(); 371 $(heightRangeLabel).html(minHeight + " - " + maxHeight); 372 } 373 374 // Handle resetting of provinces 375 if (gotProvinces) { 376 var elementID = formElementIndex["mProvinceID[]"]; 377 if (idealMatch) { 378 formObject.elements[elementID].options[0].selected = false; 379 } 380 for (var i = 1; i < formObject.elements[elementID].options.length; i++) { 381 if (idealMatch) { 382 if (arrayIndex(formObject.elements[elementID].options[i].value, selectedItems['province']) >= 0) { 383 formObject.elements[elementID].options[i].selected = true; 384 } 385 } else { 386 formObject.elements[elementID].options[i].selected = false;
387 } 388 } 389 // Handle resetting of cities 390 if (idealMatch) { 391 changeProvince(document.getElementById('mProvinceID'), true); 392 var elementID = formElementIndex["mCityID[]"]; 393 formObject.elements[elementID].options[0].selected = false; 394 for (var i = 1; i < formObject.elements[elementID].options.length; i++) { 395 if (arrayIndex(formObject.elements[elementID].options[i].value, selectedItems['city']) >= 0) { 396 formObject.elements[elementID].options[i].selected = true; 397 } 398 } 399 } else { 400 formObject.elements[elementID].options[0].selected = true; 401 // maybe move outside of condition 402 relate(formObject.elements[elementID], m, 1); 403 } 404 } else { 405 var elementID = formElementIndex["mCityID[]"]; 406 if (elementID) { 407 for (var i = 1; i < formObject.elements[elementID].options.length; i++) { 408 formObject.elements[elementID].options[i].selected = false; 409 } 410 formObject.elements[elementID].options[0].selected = true; 411 } 412 } 413 414 updateGeographyText (); 415 updateHeightText (); 416 417 // Reset the collapsable text 418 if (typeof selectedOptions != "undefined") { 419 for (testKey in selectedOptions) { 420 textElement = testKey.substr(1,1).toLowerCase() + testKey.substr(2); 421 if (idealMatch) { 422 if (typeof (selectedOptions[testKey]) == 'object') { 423 updateText(textElement, selectedOptions[testKey].join("; ")); 424 } 425 } else { 426 updateText(textElement, copyItems["field_all"]); 427 } 428 } 429 } 430 collapseAll(); 431 return false; // Prevent submission 432} 433 434function selectDefault (item) { 435 var textElementID = item + 'Selected'; 436 if ($('#' + textElementID).length != 0) { 437 if ($('#' + textElementID).html() == '') { 438 selectElementID = 'm' + item.substr(0,1).toUpperCase() + item.substr(1) + 'ID'; 439 $('#' + selectElementID).find('option:first').prop('selected', true); 440 updateSelection (selectElementID, textElementID); 441 } 442 } 443} 444 445function resetForm (formObject, gotProvinces) { 446 resetClearForm (formObject, gotProvinces, true); 447 show ('provinces'); 448 show ('cities'); 449 selectDefault ('province'); 450 selectDefault ('city'); 451 return false; 452} 453 454function clearForm (formObject, gotProvinces) { 455 resetClearForm (formObject, gotProvinces, false); 456 updateSavedStatus (false); 457 hide ('savedSearchModified'); 458 hide ('provinces'); 459 hide ('cities'); 460 return false; 461} 462 463function show (id) { 464 if (typeof jQuery != 'undefined') { 465 if ($('#' + id).length != 0) { 466 $('#' + id).show(); 467 } 468 } else { 469 var element = document.getElementById (id); 470 if (element != null) { 471 element.style.display = ''; 472 } 473 } 474} 475 476function hide (id) { 477 if (typeof jQuery != 'undefined') { 478 if ($('#' + id).length != 0) { 479 $('#' + id).hide(); 480 } 481 } else { 482 var element = document.getElementById (id); 483 if (element != null) { 484 element.style.display = 'none'; 485 } 486 } 487} 488 489// Update the display text for each characteristic type 490function updateText (elementID, displayText, noSelected) { 491 var textElementID = elementID; 492 if (typeof noSelected == 'undefined') { 493 textElementID = textElementID + 'Selected'; 494 } 495 textElement = $('#' + textElementID); 496 if (textElement.length != 0) { 497 textElement.text(displayText); 498 show(textElementID); 499 } 500} 501 502// Get the arrayIndex for a value within an array 503function arrayIndex (needle, haystack){ 504 for (var i=0; i < haystack.length; i++) { 505 if (needle == haystack[i]){ 506 return i; 507 } 508 } 509 return -1; 510} 511 512function updateCheckboxText (elementID, options) { 513 selectedText = options.join("; "); 514 divName = elementID.substr(1,1).toLowerCase() + elementID.substr(2); 515 updateText(divName, selectedText); 516} 517 518function traverse (element) { 519 var any = copyItems["field_all"]; 520 var elementInfo = element.id.split("_"); 521 522 if (typeof(selectedOptions) != 'undefined') { 523 var myOptions = selectedOptions[elementInfo[0]]; 524 if (typeof(myOptions) != 'undefined') { 525 checkbox = $(element); 526 newText = checkbox.next().html(); 527 position = checkbox.val(); 528 529 if (checkbox.is(":checked")) { 530 // Add the text into selectedArray 531 // elementInfo[1] should always be the same as checkbox.value 532 if ((position == 0) && (newText == any)) { 533 myOptions = new Array (any); 534 } else if (arrayIndex(any, myOptions) >= 0) { 535 myOptions = new Array (newText); 536 } else { 537 myOptions.splice(position,0,newText); 538 } 539 } else { 540 // Remove the text from selectedArray 541 if (position != 0) { 542 index = arrayIndex(newText, myOptions); 543 myOptions.splice(index,1); 544 } 545 } 546 547 if (myOptions.length == 0) { 548 myOptions = new Array (any); 549 } 550 551 myOptions.sort; 552 selectedOptions[elementInfo[0]] = myOptions; 553 updateCheckboxText (elementInfo[0], myOptions); 554 } 555 } 556} 557 558function showCollapsed (elementID, visible) { 559 collapsedID = elementID + 'Less'; 560 collapsed = $('#' + collapsedID); 561 if (collapsed.length != 0) { 562 if (visible) { 563 show(collapsedID); 564 } else { 565 hide(collapsedID); 566 } 567 } 568 controlID = elementID + 'Control'; 569 control = $('#' + controlID); 570 if (control.length != 0) { 571 show(controlID); 572 } 573} 574 575// Collapse the item, show the Show button, hide the Hide button 576function collapse (elementIDs) { 577 if (typeof selectedOptions != 'undefined') { 578 for (var i=0; i<arguments.length; i++) { 579 var elementID = arguments[i]; 580 divID = elementID + 'Options'; 581 check = $('#' + divID); 582 if (check.length != 0) { 583 hide(divID); 584 } 585 hide(elementID + 'More'); 586 show(elementID + 'Less'); 587 showCollapsed(elementID, true); 588 } 589 } 590 if (arguments.length>1 && arguments[0] == 'province') { 591 hide ('preferPostCodes'); 592 } else if (arguments.length>1 && arguments[0] == 'postCode') { 593 hide ('preferRegions'); 594 } 595 return false;
596} 597 598// Expand the item, show the Hide button, hide the Show button 599function expand (elementIDs) { 600 if (typeof selectedOptions != 'undefined') { 601 for (var i=0; i<arguments.length; i++) { 602 var elementID = arguments[i]; 603 divID = elementID + 'Options'; 604 check = $('#' + divID); 605 if (check.length != 0) { 606 show(divID); 607 } 608 hide(elementID + 'Less'); 609 show(elementID + 'More'); 610 showCollapsed(elementID, false); 611 } 612 } 613 if (arguments.length>1 && arguments[0] == 'province') { 614 show ('preferPostCodes'); 615 } else if (arguments.length>1 && arguments[0] == 'postCode') { 616 expand ('preferRegions'); 617 } 618 return false; 619} 620 621function expandCollapse (elementID) { 622 var divID = elementID + 'Options'; 623 var check = $('#' + divID); 624 if (check.length != 0) { 625 var displ = check.css('display'); 626 if (displ == 'none') { 627 expand(elementID); 628 } else { 629 collapse(elementID); 630 } 631 } 632 // return false; 633} 634 635function expandCollapseGeography () { 636 var check = $('#provinceOptions'); 637 if (check.length != 0) { 638 var displ = check.css('display'); 639 if (displ == 'none') { 640 expand('province', 'city'); 641 show('preferPostCodes'); 642 } else { 643 collapse('province', 'city'); 644 hide('preferPostCodes'); 645 } 646 } 647 // return false; 648} 649 650function collapseItems () { 651 var collapseArray = new Array; 652 653 // Geographic 654 collapseArray.push ('country'); 655 collapseArray.push ('location'); 656 collapseArray.push ('city'); 657 collapseArray.push ('province'); 658 collapseArray.push ('postCode'); 659 660 // Appearance 661 collapseArray.push ('height'); 662 collapseArray.push ('bodyType'); 663 collapseArray.push ('looks'); 664 collapseArray.push ('hair'); 665 collapseArray.push ('eyes'); 666 collapseArray.push ('starSign'); 667 668 // Cultural Characteristics 669 collapseArray.push ('ethnicity'); 670 collapseArray.push ('homeLanguage'); 671 collapseArray.push ('languages'); 672 collapseArray.push ('religion'); 673 674 // Education and Occupation 675 collapseArray.push ('education'); 676 collapseArray.push ('occupation'); 677 collapseArray.push ('income'); 678 679 // Lifestyle 680 collapseArray.push ('drinking'); 681 collapseArray.push ('smoking'); 682 collapseArray.push ('eating'); 683 684 // Relationships 685 collapseArray.push ('relationship'); 686 collapseArray.push ('relationships'); 687 collapseArray.push ('haveKids'); 688 collapseArray.push ('wantKids'); 689 690 return collapseArray; 691} 692 693function expandCollapseAll (action) { 694 var collapseArray = collapseItems (); 695 696 for (var i = 0; i < collapseArray.length; i++) { 697 if (action == 'expand') { 698 expand ( collapseArray[i] ); 699 } else if (action == 'collapse') { 700 collapse ( collapseArray[i] ); 701 } 702 } 703} 704 705function expandAll () { 706 expandCollapseAll ('expand'); 707 show ('preferPostCodes'); 708 show ('preferRegions'); 709 return false; 710} 711 712function collapseAll () { 713 expandCollapseAll ('collapse'); 714 hide ('preferPostCodes'); 715 hide ('preferRegions'); 716 return false; 717} 718 719function selectFirstOption (selectElement, matchItem) { 720 if (selectElement != null && selectElement != 'null') { 721 if (typeof selectElement.options[0] != "undefined") { 722 selectElement.options[0].selected = true; 723 } 724 if (selectElement.selectedIndex == 0) { 725 var text = ''; 726 if (matchItems[matchItem]) { 727 text = matchItems[matchItem].join("; "); 728 updateText(matchItem, text); 729 } else { 730 text = selectElement.options[0].innerHTML; 731 text = text.replace (/>/g, ''); 732 text = text.replace (/</g, ''); 733 updateText(matchItem, text); 734 } 735 } else { 736 var textElementID = matchItem + 'Selected'; 737 updateSelection(selectElementID, textElementID); 738 } 739 } 740} 741 742function updateTextFromMatchItems (matchItem) { 743 if ($('#locationSelected').length != 0 && typeof matchItems != "undefined") { 744 var selectElementID = 'm' + matchItem.substr(0,1).toUpperCase() + matchItem.substr(1) + 'ID'; 745 var selectElement = $('#' + selectElementID); 746 if ($('#locationSelected').text() == matchItems['location']) { 747 if (typeof matchItems[matchItem] != "undefined") { 748 var text = matchItems[matchItem].join ("; "); 749 if (matchItems[matchItem] == '') { 750 if (selectElement.length != 0) { 751 text = selectElement.find('option:first').html(); 752 text = text.replace (/>/g, ''); 753 text = text.replace (/</g, ''); 754 } 755 } 756 updateText(matchItem, text); 757 } else { 758 selectFirstOption (selectElement[0], matchItem); 759 } 760 } else { 761 selectFirstOption (selectElement[0], matchItem); 762 } 763 } 764} 765
766// Show the expand all and collapse all buttons 767function showAll () { 768 show ('toggleView'); 769 show ('resetSearchTop'); 770 show ('resetSearchBottom'); 771 show ('countrySelected'); 772 show ('locationSelected'); 773 show ('provinceSelected'); 774 show ('citySelected'); 775 show ('postCodeSelected'); 776 show ('heightSelected'); 777 updateSelection ('mCountryID', 'locationSelected'); 778 updateSelection ('mNationality', 'countrySelected'); 779 updateTextFromMatchItems ('province'); 780 updateTextFromMatchItems ('city'); 781} 782 783function updateSelection (elementID, formElementID) { 784 var element = document.getElementById(elementID); 785 var formElement = document.getElementById(formElementID); 786 if (element != null) { 787 var array = new Array; 788 var selectedCount = $("#" + elementID + " :selected").length; 789 for (var i = 0; i < element.options.length; i++) { 790 if (element.options[i].selected) { 791 var excludeRegex = /(>|>)/; 792 if (i == 0 || ((element.options.length > 1 && (!element.options[i].innerHTML.match (excludeRegex))) || (element.options.length == 1))) { 793 if (elementID == "mProvinceID") { 794 if ((i != 0) && element.options[0].selected) { 795 // More specific areas take precedence 796 element.options[0].selected = false; 797 } 798 // Cater for the UK: If the element selected does not start with "r", 799 // unselect everything following starting with "r", till the next country(non-r). 800 if ((i != 0) && element.options[i].value.substr(0,1) != "r") { 801 // Unselect all options within the sub-region 802 $(element.options[i]).nextUntil(":not(option[value^='r'])").attr("selected", false); 803 } 804 } else if (elementID == "mCityID") { 805 if ((typeof isAndroidOS !== "undefined" && isAndroidOS) || (typeof isSafariOS !== "undefined" && isSafariOS)) { 806 // Due to the native behaviour of multiple select elements on mobile browsers, requiring manual deselection of unwanted items, we treat it the same as provinces above, giving more specific areas precendence over the global area. 807 if (selectedCount > 1) { 808 if ((i != 0) && element.options[0].selected) { 809 // More specific areas take precedence 810 element.options[0].selected = false; 811 } 812 if (element.options[i].value.substr(0,1) == "r") { 813 // Unselect all options within the sub-region 814 $(element.options[i]).nextUntil("option[value^='r']").attr("selected", false); 815 } 816 } 817 } else { 818 // Desktop 819 if (i == 0) { 820 // For cities, the global area takes precedence over sub-areas, so unselect everything but 0. 821 $("#" + elementID + " option").not(':first').attr("selected", false); 822 } else { 823 if (element.options[i].value.substr(0,1) == "r") { 824 // Unselect all options within the sub-region 825 $(element.options[i]).nextUntil("option[value^='r']").attr("selected", false); 826 } 827 } 828 } 829 } 830 } 831 if (element.options[i].selected) { 832 // If still selected, populate the display string 833 var selectedText = element.options[i].innerHTML; 834 selectedText = selectedText.replace (/(>|>)/g, ''); 835 selectedText = selectedText.replace (/(<|<)/g, ''); 836 array.push (selectedText); 837 } 838 } 839 } 840 } 841 if (formElement != null) { 842 formElement.innerHTML = array.join("; "); 843 } 844} 845 846// Update the city collapsable when a different city is selected 847function changeCity (formElement, updateSelect) { 848 if (updateSelect == true) { 849 updateSelection ('mCityID', 'citySelected'); 850 } 851 formChanged(); 852 return true; 853} 854 855// Update the coutry collapsable when a different country is selected 856function changeCountry (formElement, updateSelect) { 857 858 if(!checkNumberCountries (formElement)) { 859 return false; 860 } 861 862 if (updateSelect == true) { 863 updateSelection ('mNationality', 'countrySelected'); 864 } 865 formChanged(); 866 return true; 867} 868 869function resetSelect (elementID, idealMatch) { 870 var element; 871 if (typeof jQuery == 'undefined') { 872 element = document.getElementById(elementID); 873 } else { 874 element = $('#' + elementID)[0]; 875 } 876 if (element != null || element != undefined) { 877 var defaultID = 0; 878 if (typeof element.options != 'undefined' && element.options != null) { 879 for (var i = 1; i < element.options.length; i++) { 880 if (idealMatch) { 881 element.options[i].selected = element.options[i].defaultSelected; 882 } else { 883 element.options[i].selected = false;
884 } 885 } 886 } 887 if (idealMatch && element.selectedIndex < 0) { 888 element.selectedIndex = 0; 889 } 890 } 891} 892 893function buildRequestString (formElement) { 894 var reqStr = ""; 895 896 for(i=0; i < formElement.elements.length; i++) { 897 isformObject = false; 898 899 switch (formElement.elements[i].tagName) { 900 case "INPUT": 901 902 switch (formElement.elements[i].type) { 903 case "text": 904 case "hidden": 905 reqStr += formElement.elements[i].name + "=" + encodeURIComponent(formElement.elements[i].value); 906 isformObject = true; 907 break; 908 909 case "checkbox": 910 if (formElement.elements[i].checked) { 911 reqStr += formElement.elements[i].name + "=" + formElement.elements[i].value; 912 } else { 913 reqStr += formElement.elements[i].name + "="; 914 } 915 isformObject = true; 916 break; 917 918 case "radio": 919 if (formElement.elements[i].checked) { 920 reqStr += formElement.elements[i].name + "=" + formElement.elements[i].value; 921 isformObject = true; 922 } 923 } 924 break; 925 926 case "TEXTAREA": 927 reqStr += formElement.elements[i].name + "=" + encodeURIComponent(formElement.elements[i].value); 928 isformObject = true; 929 break; 930 931 case "SELECT": 932 var sel = formElement.elements[i]; 933 if (sel.selectedIndex >= 0) { 934 if (sel.name.substr(-2,2) == '[]') { 935 // Handle multiple selects 936 var multiVal = new Array; 937 for (j=0; j<sel.options.length; j++) { 938 if (sel.options[j].selected) { 939 multiVal.push (sel.name + "=" + sel.options[j].value); 940 } 941 } 942 reqStr += multiVal.join ('&'); 943 } else { 944 // Handle single selects 945 if (sel.options[sel.selectedIndex].value) { 946 reqStr += sel.name + "=" + sel.options[sel.selectedIndex].value; 947 } else { 948 reqStr += sel.name + "=" + sel.options[sel.selectedIndex].innerHTML; 949 } 950 } 951 } 952 isformObject = true; 953 break; 954 } 955 956 if ((isformObject) && ((i+1)!= formElement.elements.length)) { 957 reqStr += "&"; 958 } 959 } 960 return reqStr; 961} 962 963// --- Saved Search Functions start here --- // 964 965function enableButton (buttonID, deleteSearchButton) { 966 if (document.getElementById(buttonID) != null) { 967 if (typeof deleteSearchButton != 'undefined') { 968 document.getElementById(buttonID).style.display = 'block'; 969 } else { 970 document.getElementById(buttonID).disabled = false; 971 } 972 } 973} 974 975function disableButton (buttonID, deleteSearchButton) { 976 if (document.getElementById(buttonID) != null) { 977 if (typeof deleteSearchButton != 'undefined') { 978 document.getElementById(buttonID).style.display = 'none'; 979 } else { 980 document.getElementById(buttonID).disabled = true; 981 } 982 } 983} 984 985// Not needed at present but could be useful at some point on an 'onkeyup' event 986function checkSaveName () { 987 var saveSearchName = $('#saveSearchName').val(); 988 if (saveSearchName.length > 0) { 989 enableButton ('saveSearchButton'); 990 } else { 991 disableButton ('saveSearchButton'); 992 } 993} 994 995function updateSavedStatus (value) { 996 if (value) { 997 value = 1; 998 } else { 999 value = 0; 1000 } 1001 var notSavedElement = document.getElementById('notSaved'); 1002 if (notSavedElement != null) { 1003 notSavedElement.value = value; 1004 } 1005} 1006 1007function formChanged () { 1008 enableButton ('saveSearchButton'); 1009 if (typeof loadedSearch != 'undefined') { 1010 show ('saveSearchModified'); 1011 } 1012 updateSavedStatus (true); 1013 return true; 1014} 1015 1016function enableButtons (element) { 1017 hide ('saveSearchModified'); 1018 if (typeof element == 'undefined' || element.selectedIndex > 0) { 1019 enableButton ('deleteSearchButton', true); 1020 } else { 1021 disableButton ('deleteSearchButton', true); 1022 } 1023 enableButton ('editSearchButton'); 1024 enableButton ('performSearchButton'); 1025 return false; 1026} 1027 1028function disableButtons () { 1029 hide ('saveSearchModified'); 1030 disableButton ('editSearchButton'); 1031 disableButton ('deleteSearchButton', true); 1032 return false; 1033} 1034 1035function checkSelectedSearch (selectElement) { 1036 var nameElement = document.getElementById('searchName'); 1037 enableButtons (selectElement); 1038 if (nameElement != null && selectElement != null) { 1039 if (selectElement.options[selectElement.selectedIndex].innerHTML == nameElement.value) { 1040 disableButton ('performSearchButton'); 1041 } else { 1042 enableButton ('performSearchButton'); 1043 } 1044 } 1045} 1046 1047function clearDiv (divID) { 1048 if (typeof jQuery != 'undefined') { 1049 theDiv = $('#' + divID); 1050 if (theDiv.length != 0) { 1051 theDiv.hide(); 1052 alertMsg = theDiv.find('p'); 1053 if (alertMsg.length != 0) { 1054 alertMsg.text(''); 1055 } 1056 } 1057 } 1058} 1059 1060function clearDivs () { 1061 clearDiv ('savedSearchSuccess'); 1062 clearDiv ('savedSearchInfo'); 1063 clearDiv ('savedSearchErr'); 1064} 1065 1066function saveForm (formID, replace) { 1067 var result = false;
1068 clearDivs(); 1069 if (!$('#saveSearchButton').prop('disabled')) { 1070 var element = $('#saveSearchName'); 1071 var saveSearchName = element.val(); 1072 if (saveSearchName.length == 0) { 1073 errorMsg (copyItems['find_headError'] + ': ' + copyItems['err_noNameEntered']); 1074 element.className = 'savedSearchErr'; 1075 element.focus (); 1076 } else { 1077 hide ('saveSearchModified'); 1078 var formValues = buildRequestString(document.getElementById(formID)); 1079 var valueArray = formValues.split("&"); 1080 var newArray = new Array; 1081 var elements = 0; 1082 // Exclude the items below from the Ajax request (NB! also ensure they are excluded in the non JS version) 1083 var exceptionRegex = /^(sub|searchType|saveSearchOption)$/; 1084 for (var i=0; i < valueArray.length; i++) { 1085 formValue = valueArray[i].split("="); 1086 if ((formValue[0] && formValue[1]) && !formValue[0].match(exceptionRegex)) { 1087 newArray[elements] = formValue[0] + "=" + formValue[1]; 1088 elements++; 1089 } 1090 } 1091 var url = baseurl + '/s/find/search.php?action=save&f=' + fValue + '&' + newArray.join("&"); 1092 if (replace) { 1093 url += '&c=1'; 1094 } 1095 result = ajaxRequest(url); 1096 element.className = 'savedSearch'; 1097 disableButton ('saveSearchButton'); 1098 } 1099 } 1100 return false; 1101} 1102 1103function getSearchListOptions (searchID) { 1104 if (typeof searchID == 'undefined') { 1105 searchID = '00'; 1106 } 1107 var url = baseurl + '/s/find/search.php?action=refresh&f=' + fValue + '&s=' + searchID; 1108 var ajaxSettings = {method:'get'}; 1109 result = ajaxRequest(url, null, ajaxSettings); 1110 return result; 1111} 1112 1113function refreshSearchList (json) { 1114 var selectElement = $('#saveSearchOption'); 1115 if (selectElement.length != 0) { 1116 var selected = selectElement.prop('selectedIndex'); 1117 selectElement[0].length = 0; // clear list 1118 for (i=1; i<=10; i++) { 1119 var sVar = eval ('json.s' + i); 1120 var vVar = eval ('json.v' + i); 1121 if (typeof sVar != 'undefined' && typeof vVar != 'undefined') { 1122 var optn = document.createElement ("OPTION"); 1123 optn.text = vVar; 1124 optn.value = sVar; 1125 selectElement.append (optn); 1126 } 1127 } 1128 selectElement.prop('selectedIndex', selected); 1129 } 1130} 1131 1132// Determine whether something has been selected in the saved search dropdown 1133function getSearchID () { 1134 var selectElement = $('#saveSearchOption'); 1135 var result = 0; 1136 if (selectElement.length != 0) { 1137 var selected = selectElement.prop('selectedIndex'); 1138 if (selected >= 0) { 1139 result = selectElement.find(':selected').val(); 1140 } 1141 } 1142 return result; // ideal match is 0 1143} 1144 1145function loadSearch (searchID) { 1146 var url = baseurl + '/s/find/search.php?action=load&f=' + fValue + '&s=' + searchID; 1147 var ajaxSettings = {method:'get'}; 1148 result = ajaxRequest(url, null, ajaxSettings); 1149} 1150 1151function getSavedSearch (formID) { 1152 clearDivs(); 1153 var searchID = getSearchID (); 1154 var gotProvinces = false; 1155 var formObject = $('#' + formID); 1156 if ($('#mProvinceID').length != 0) { 1157 gotProvinces = true; 1158 } 1159 loadSearch (searchID); 1160 return formObject[0]; 1161} 1162 1163function displayMsg (textDivID, msg, alertBanner) { 1164 var textDiv = $('#' + textDivID); 1165 var textDivAlertMsg = textDiv.find('p'); 1166 if (textDivAlertMsg.length != 0) { 1167 textDivAlertMsg.html(msg); 1168 if (typeof alertBanner != 'undefined') { 1169 textDiv.removeClass().addClass('alert ' + alertBanner); 1170 toggleSVG = "<svg><use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon_alert_"+ alertBanner +"\"></use></svg>"; 1171 textDiv.find("span.icon").html(toggleSVG); 1172 } 1173 textDiv.show(); 1174 } 1175} 1176 1177function successMsg (msg) { 1178 displayMsg ('savedSearchSuccess', msg); 1179} 1180 1181function statusMsg (msg) { 1182 displayMsg ('savedSearchInfo', msg); 1183} 1184 1185function errorMsg (msg) { 1186 displayMsg ('savedSearchErr', msg); 1187} 1188 1189function editSavedSearch (formID) { 1190 getSavedSearch (formID); 1191 return false; 1192} 1193 1194function deleteSavedSearch (formID) { 1195 clearDivs(); 1196 var searchID = getSearchID (); 1197 var answer = confirm (copyItems['confirm_savedSearchDelete']); 1198 if (answer) { 1199 var url = baseurl + '/s/find/search.php?action=delete&f=' + fValue + '&s=' + searchID; 1200 result = ajaxRequest (url); 1201 } else { 1202 enableButton ('deleteSearchButton', true); 1203 } 1204 $('#saveSearchName').val(''); 1205 return false;
1206} 1207 1208function updateSelectElement (element, value) { 1209 for (var i = 0; i < element.options.length; i++) { 1210 var optVal = element.options[i].innerHTML; 1211 if (typeof element.options[i].value != 'undefined' && element.options[i].value != '') { 1212 optVal = element.options[i].value; 1213 } 1214 if (optVal == value) { 1215 element.options[i].selected = true; 1216 } 1217 } 1218} 1219 1220function updateForm (json) { 1221 var formValues = new Object(); 1222 var searchName = json.s1; 1223 var formFields = new Array; 1224 var spaceFields = new Array; 1225 1226 formFields = ['mNationality', 'mCountryID', 'mProvinceID', 'mCityID', 'mRangeID', 'mPostCodeID', 'gender', 'mGender', 'mAgeMin', 1227 'mAgeMax', 'mHasPhoto', 'mRecency', 'mStarSign', 'mHeight', 'mHeightMin', 'mHeightMax', 'mBodyType', 1228 'mLooks', 'mHair', 'mEyes', 'mHivpStatus', 'mAidsStatus', 'mEthnicity', 'mHomeLanguage', 'mLanguages', 'mReligion', 1229 'mEducation', 'mOccupation', 'mIncome', 'mDrinking', 'mSmoking', 'mEating', 'mRelationship', 'mRelationships', 1230 'mHaveKids', 'mWantKids']; 1231 1232 spaceFields = ['mNationality', 'mCountryID', 'mProvinceID', 'mCityID', 'mHomeLanguage', 'mLanguages']; 1233 1234 if (json.s1 == null) { 1235 json.s1 = copyItems['find_search_idealMatch']; 1236 } 1237 $('#saveSearchName').val(json.s1); 1238 1239 // Nationality and Country need to be 00 not 0 1240 if (json.s2 == 0) { 1241 json.s2 = '00'; 1242 } 1243 if (json.s3 == 0) { 1244 json.s3 = '00'; 1245 } 1246 1247 for (i=0; i<formFields.length; i++) { 1248 var sVar= eval('json.s' + (i + 2)); 1249 if (sVar != '' && sVar != null) { 1250 formValues[formFields[i]] = sVar; 1251 } 1252 } 1253 1254 var countriesSelected = new Array; 1255 var ageRangeVals = new Array; 1256 var heightRangeVals = new Array; 1257 var refreshLocation = 0; 1258 for (var formKey in formValues) { 1259 var formElement = $('#' + formKey); 1260 if (formElement.length != 0) { 1261 switch (formElement.prop('tagName')) { 1262 case "SELECT": 1263 // Unselect all options 1264 formElement.children('option').each(function(index, element){ 1265 if (formKey == 'mCountryID' && element.selected == true) { 1266 countriesSelected.push (element.value); 1267 } 1268 element.selected = false; 1269 }); 1270 // Provinces and cities come through as an array 1271 if (typeof formValues[formKey] == "object") { 1272 var alphaVals = formValues[formKey]; 1273 for (var j = 0; j < alphaVals.length; j++) { 1274 updateSelectElement (formElement[0], alphaVals[j]); 1275 } 1276 // preserve these values in hidden form variables 1277 if (formKey == 'mProvinceID') { 1278 refreshLocation = 2; // 2 = call the refreshGeography function and set the useRegionList hidden variable 1279 document.frmMM.provinceID.value = formValues[formKey]; 1280 } else if (formKey == 'mCityID') { 1281 refreshLocation = 2; 1282 document.frmMM.cityID.value = formValues[formKey]; 1283 } 1284 // Reload the cities dropdown if province is changed 1285 if (formElement.prop('name') == 'mProvinceID[]') { 1286 changeProvince (formElement[0], true); 1287 } 1288 // Split space separated values into an array and update the select 1289 } else if ((arrayIndex (formKey, spaceFields) >= 0) && formValues[formKey].match(/ /)) { 1290 var alphaVals = formValues[formKey].split(' '); 1291 for (var j = 0; j < alphaVals.length; j++) { 1292 updateSelectElement (formElement[0], alphaVals[j]); 1293 } 1294 } else { 1295 // cos we inside a loop we store the 'min' and 'max' values in an array, and reference that array further down 1296 // also set the dynamic label for both range sliders 1297 ageRangeSlider = formElement.closest("div.ageRange").children(".rangeslider").get(0); 1298 if ($(ageRangeSlider).length) { 1299 ageRangeVals.push (formValues[formKey]); 1300 var ageRangeLabel = $(".ageRange").children(".dynamicLabel").get(0); 1301 $(ageRangeLabel).html(formValues["mAgeMin"] + " - " + formValues["mAgeMax"]); 1302 } 1303 heightRangeSlider = formElement.closest("div.heightRange").children(".rangeslider").get(0); 1304 if ($(heightRangeSlider).length) { 1305 heightRangeVals.push (formValues[formKey]); 1306 var heightRangeLabel = $(".heightRange").children(".dynamicLabel").get(0); 1307 $(heightRangeLabel).html($('#mHeightMin option[value=' + formValues["mHeightMin"] + ']').text() + " - " + $('#mHeightMax option[value=' + formValues["mHeightMax"] + ']').text()); 1308 } 1309 updateSelectElement (formElement[0], formValues[formKey]); 1310 } 1311 break; 1312 case "INPUT": 1313 switch (formElement.type) { 1314 case "checkbox": 1315 if (formValues[formKey] > 0) { 1316 formElement.checked = true; 1317 } else { 1318 formElement.checked = false;
1319 } 1320 break; 1321 } 1322 break; 1323 } 1324 } else { 1325 // these elements are not avaiable when switching between locations (eg. uk) 1326 // preserve these values in hidden form variables 1327 if (formKey == 'mProvinceID') { 1328 refreshLocation = 2; // 2 = call the refreshGeography function and set the useRegionList hidden variable 1329 document.frmMM.provinceID.value = formValues[formKey]; 1330 } else if (formKey == 'mCityID') { 1331 refreshLocation = 2; 1332 document.frmMM.cityID.value = formValues[formKey]; 1333 } else if (formKey == 'mRangeID' && formValues[formKey] > 0) { 1334 // specify location using a list of counties and towns instead of post code. 1335 if (document.frmMM.useRegionList.value.length > 0) { 1336 refreshLocation = 1; // 1 = only call the refreshGeography function 1337 } 1338 document.frmMM.rangeID.value = formValues[formKey]; 1339 } else if (formKey == 'mPostCodeID' && formValues[formKey] > 0) { 1340 // specify location using a list of counties and towns instead of post code. 1341 if (document.frmMM.useRegionList.value.length > 0) { 1342 refreshLocation = 1; 1343 } 1344 document.frmMM.postCodeID.value = formValues[formKey]; 1345 } else { 1346 // multiple checkboxes 1347 var numValue = formValues[formKey]; 1348 var valArray = new Array; 1349 var selectedValues = new Array; 1350 var bit = 1; 1351 while (numValue) { 1352 if (numValue & 1) { 1353 valArray.push (bit); 1354 } 1355 numValue = numValue >> 1; 1356 bit++; 1357 if (bit == 33) { break; } 1358 } 1359 if (valArray.length == 0) { 1360 valArray.push (0); 1361 } 1362 var formObject = $('#form1'); 1363 var formElementName = formKey + '[]'; 1364 resetCheckboxes (formObject[0], formElementName, false, true); 1365 checkedOptions = new Array; 1366 for (var i = 0; i < valArray.length; i++) { 1367 formElement = $('#' + formKey + '_' + valArray[i]); 1368 if (formElement.length != 0) { 1369 switch (formElement.prop('tagName')) { 1370 case "INPUT": 1371 switch (formElement.prop('type')) { 1372 case "checkbox": 1373 if (formValues[formKey] >= 0) { 1374 // set numeric checkboxes 1375 formElement.prop('checked', true); 1376 checkedOptions.push (formElement.next().html()); 1377 updateCheckboxText (formKey, checkedOptions); 1378 } else { 1379 // set alpha checkboxes 1380 var alphaVals = formValues[formKey].split(' '); 1381 for (var k = 0; k < alphaVals.length; k++) { 1382 formElement = $('#' + formKey + '_' + alphaVals[k]); 1383 if (formElement.length != 0) { 1384 formElement.prop('checked', true); 1385 checkedOptions.push (formElement.next().html()); 1386 updateCheckboxText (formKey, checkedOptions); 1387 } 1388 } 1389 } 1390 break; 1391 } 1392 break; 1393 } 1394 } 1395 } 1396 } 1397 } 1398 } 1399 1400 // set the range sliders values 1401 var ageRangeSlider = $(".ageRange").children(".rangeslider").get(0); 1402 if ($(ageRangeSlider).length) { 1403 ageRangeSlider.noUiSlider.set([parseInt(ageRangeVals[0]), parseInt(ageRangeVals[1])]); 1404 } 1405 var heightRangeSlider = $(".heightRange").children(".rangeslider").get(0); 1406 if ($(heightRangeSlider).length) { 1407 heightRangeSlider.noUiSlider.set([parseInt(heightRangeVals[0]), parseInt(heightRangeVals[1])]); 1408 } 1409 1410 updateHeightText (); 1411 updateGeographyText (); 1412 var countries = countriesSelected.join (' '); 1413 var useRegionList = ""; 1414 $('#searchID').val($('#saveSearchOption').val()); 1415 // only refresh the page when the countries do not match or when switching between counties/towns and range/postcode. 1416 // when switching between counties/towns and range/psotcode, will need to set the useRegionList variable 1417 if (countries != json.s3) { 1418 if (json.s3 == "uk" && refreshLocation > 1) { 1419 useRegionList = json.s3; 1420 } 1421 document.frmMM.useRegionList.value = useRegionList; 1422 if (typeof formElement != 'undefined') { 1423 refreshGeography (formElement[0], true); 1424 } 1425 } else { 1426 if (json.s3 == "uk" && refreshLocation > 0) { 1427 if (document.frmMM.useRegionList.value.length > 0 && refreshLocation > 1) { 1428 useRegionList = json.s3; 1429 } else { 1430 if (refreshLocation > 1) { 1431 useRegionList = json.s3; 1432 } else { 1433 useRegionList = ""; 1434 } 1435 document.frmMM.useRegionList.value = useRegionList; 1436 if (typeof formElement != 'undefined') { 1437 refreshGeography (formElement[0], true); 1438 } 1439 } 1440 } 1441 } 1442} 1443 1444// Initialise Saved Search 1445function ssInit () { 1446 var element = document.getElementById('searchName'); 1447 if (element == null) { 1448 disableButton ('saveSearchButton'); 1449 } 1450 disableButton ('deleteSearchButton', true); 1451} 1452 1453function changeGeographicSearchMethod (targetMethod, targetCountryID, templateVar, linkElement) { 1454 var useRegionList = document.frmMM.useRegionList; 1455 linkElement.href = "#"; // Don't follow the href that was included for non-JS users if we can submit the form instead. 1456 if (targetMethod == 'regions') { 1457 useRegionList.value = targetCountryID; 1458 } else { 1459 useRegionList.value = ""; 1460 } 1461 refreshGeography(useRegionList); 1462 return false;
1463} 1464 1465function updatePostCodeText () { 1466 if ($('#mRangeID').length != 0 && $('#mPostCodeID').length != 0) { 1467 var range = $('#mRangeID').prop('selectedIndex'); 1468 var postCode = $('#mPostCodeID').prop('selectedIndex'); 1469 if (typeof range == 'undefined') { 1470 range = 0; 1471 } 1472 if ($('#postCodeSelected').length != 0) { 1473 if ((typeof $('#mRangeID').find('option').length != 0 && $('#mRangeID').find('option').length != 0) && 1474 (typeof $('#mPostCodeID').find('option').length != 0 && $('#mPostCodeID').find('option').length != 0)) { 1475 var rangeText = $('#mRangeID').find(':selected').text(); 1476 var postCodeText = $('#mPostCodeID').find(':selected').text(); 1477 var selectedText = copyItems["radius_within"] + ' ' + rangeText + ' ' + copyItems["radius_of"] + ' ' + copyItems["radius_UKpostCode"] + ' ' + postCodeText; 1478 updateText('postCode', selectedText); 1479 } 1480 } 1481 } 1482} 1483 1484// Update the dynamic labelString for the field 1485function updateFieldLabel (element, action) { 1486 var container = $(element).closest('.multiCheckWrapper'); 1487 var labelString = container.children('.dynamicLabel').text(); 1488 var anyText = container.find('.any').children('label').text(); 1489 1490 if (action == "reset" 1491 || (action == "remove" && ($('#' + container.attr('id') + ' input[type=checkbox]:checked').length === 0)) 1492 || ($('#' + container.attr('id') + ' input[type=checkbox]:checked').length === $('#' + container.attr('id') + ' input[type=checkbox]').length-1)) { 1493 labelString = anyText; 1494 } else if (action == "add") { 1495 if (anyText !== "") { 1496 if (labelString.indexOf(anyText + ';') !== -1) { 1497 labelString = labelString.replace(anyText + ';', ''); 1498 } else { 1499 labelString = labelString.replace(anyText, ''); 1500 } 1501 } 1502 if (labelString != '') { 1503 labelString += '; '; 1504 } 1505 labelString += $(element).parent().find("label").text() + ';'; 1506 } else if (action == "remove") { 1507 labelText = $(element).parent().find("label").text(); 1508 if (labelString.slice(-1 * labelText.length) == labelText) { 1509 labelString = labelString.replace(labelText, '').trim(); 1510 } else { 1511 labelString = labelString.replace(labelText + ';', '').trim(); 1512 } 1513 } 1514 if (labelString.slice(-1) == ";") { 1515 labelString = labelString.slice(0, -1); 1516 } 1517 container.children('.dynamicLabel').html('<span>'+labelString+'</span>'); 1518} 1519 1520// Toggle between the edit label and svg icon on the multi-select boxes 1521function toggleDynamicLabelSVG (obj) { 1522 var toggleText = "<span>" + valStrings.field_edit + "</span>"; 1523 var toggleSVG = "<svg class=\"close\"><use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#icon_close\"></use></svg>"; 1524 1525 if (obj.parent().hasClass("open")) { 1526 obj.html(toggleSVG); 1527 } else { 1528 obj.html(toggleText); 1529 } 1530}
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.