var form_in_sales_mode = ""; var previous_search_label = ''; var obj = {"mode":"classic-search","rectype_override":null,"__meta":{"mode":"string","rectype_override":"null"},"__size":2,"__class":"search_listbuilder_remotequery","__url":"\/global\/js\/bal\/bal_js.php","__uid":"0f442bc53962f1622b1ffa0b33fa1ec0","__output":null,"__timeout":null,"__clone":function(obj){xoad.clone(this,obj)},"__serialize":function(){return xoad.serialize(this)},"catchEvent":function(){return xoad.catchEvent(this,arguments)},"ignoreEvent":function(){return xoad.ignoreEvent(this,arguments)},"postEvent":function(){return xoad.postEvent(this,arguments)},"fetchOutput":function(){return this.__output},"setTimeout":function(miliseconds){this.__timeout=miliseconds},"getTimeout":function(){return this.__timeout},"clearTimeout":function(){this.__timeout=null},"fakeCall":function(){return xoad.call(this,"fakeCall",arguments)},"validateQueryTerms":function(){return xoad.call(this,"validateQueryTerms",arguments)},"getSearchableCount":function(){return xoad.call(this,"getSearchableCount",arguments)},"getResultsCount":function(){return xoad.call(this,"getResultsCount",arguments)},"getResultsCountFromSerializedBALInfo":function(){return xoad.call(this,"getResultsCountFromSerializedBALInfo",arguments)},"getSerializedFormInput":function(){return xoad.call(this,"getSerializedFormInput",arguments)}}; var in_use = false; var query_updated = false; var previous_result_count = -1; // Error handling for remote scripting calls obj.onValidateQueryTermsError = function(error) { // alert("Error in validateQueryTerms: " + error.message); return true; } obj.onGetSearchableCountError = function(error) { // alert("Error in getSearchableCount: " + error.message); return true; } obj.onGetResultsCountError = function(error) { // alert("Error in getResultsCount: " + error.message); return true; } // Search an Array for a given item, returns true if found Array.prototype.contains = function(element) { for (var i=0; i < this.length; i++) { if (this[i] == element) { return true; } } return false; }; // Allow us to use Array's interchangably with NodeList's Array.prototype.item = function(i) { return this[i]; } // retrieve a count of how many companies are searchable at this user // level and update the amount in the header function initSearchableCount() { var serialized_form = exportBALForm(); label = 'companies'; if (label != previous_search_label) { obj.fakeCall(serialized_form, function(serialized_form) { obj.getSearchableCount(serialized_form, function(count) { if (document.getElementById('BuildAListH1')) { var count_element = document.getElementById('BuildAListH1').getElementsByTagName('i').item(0); count_element.firstChild.nodeValue = "searching " + formatNumber(count) + " " + label; } if (document.getElementById('tresults')) { count_element = document.getElementById('tresults').getElementsByTagName('span').item(0); count_element.firstChild.nodeValue = formatNumber(count); } previous_result_count = count; }); }); previous_search_label = label; } return false; } // retrieve a count of how many companies are searchable at this user // level and update the amount in the header function updateSearchableCount() { var serialized_form = exportBALForm(); if (isPersonSearch()) { label = 'people'; } else { label = 'companies'; } if (label != previous_search_label) { obj.fakeCall(serialized_form, function(serialized_form) { obj.getSearchableCount(serialized_form, function(count) { if (document.getElementById('BuildAListH1')) { var count_element = document.getElementById('BuildAListH1').getElementsByTagName('i').item(0); count_element.firstChild.nodeValue = "searching " + formatNumber(count) + " " + label; } }); }); previous_search_label = label; } updateResultsCount(serialized_form); return false; } function isPersonSearch() { // Make sure we have people elements to look at before doing this if (document.getElementsByName('bal_people_keyword').length > 0) { var person_keyinput_text = document.getElementsByName('bal_people_keyword').item(0); var person_job_select = document.getElementsByName('bal_people_job[]').item(0); var person_job_options = document.getElementsByName('bal_people_job[]').item(0).options; var person_salary_from_text = document.getElementsByName('bal_people_salary_from').item(0); var person_salary_to_text = document.getElementsByName('bal_people_salary_to').item(0); var person_bonus_from_text = document.getElementsByName('bal_people_bonus_from').item(0); var person_bonus_to_text = document.getElementsByName('bal_people_bonus_to').item(0); var person_totalpay_from_text = document.getElementsByName('bal_people_total_pay_from').item(0); var person_totalpay_to_text = document.getElementsByName('bal_people_total_pay_to').item(0); var person_age_from_text = document.getElementsByName('bal_people_age_from').item(0); var person_age_to_text = document.getElementsByName('bal_people_age_to').item(0); var person_job_option_set = false; for (var x=0; x < person_job_options.length; x++) { if (person_job_options[x].selected && person_job_options[x].value != '') { person_job_option_set = true; } } if (person_keyinput_text.value != '' || person_job_option_set == true || person_salary_from_text.value != '' || person_salary_to_text.value != '' || person_bonus_from_text.value != '' || person_bonus_to_text.value != '' || person_totalpay_from_text.value != '' || person_totalpay_to_text.value != '' || person_age_from_text.value != '' || person_age_to_text.value != '') { return true; } } return false; } function clearErrorClass() { var err_count = 0; while(span_ele = document.getElementById('err' + err_count)) { // get parent fieldset var parent_node = span_ele.parentNode; var par_id = parent_node.getAttribute('id'); // first remove the errormsg span parent_node.removeChild(span_ele); parent_node.setAttribute('class', ''); err_count++; } } function updateResultsCount(serialized_form) { if (previous_result_count >= 0) { var count_element = document.getElementById('tresults').getElementsByTagName('span').item(0); count_element.firstChild.nodeValue = "updating..."; if (form_in_sales_mode) { updateSRP(null); } } var submit_button = document.getElementById('submit_changes'); if (submit_button) { submit_button.disabled = true; } obj.fakeCall(serialized_form, function(serialized_form) { try { obj.validateQueryTerms(serialized_form, false, function(result) { // reset nodes to remove error class & errormsg spans clearErrorClass(); if (result != true) { createErrorSpans(result); } var count_element = document.getElementById('tresults').getElementsByTagName('span').item(0); var saved_count_element_value = count_element.firstChild.nodeValue; try { obj.getResultsCount(serialized_form, function (count_value) { count_element.firstChild.nodeValue = formatNumber(count_value); previous_result_count = count_value; if (form_in_sales_mode) { updateSRP(count_value); var submit_button = document.getElementById('submit_changes'); if (submit_button) { submit_button.disabled = false; } } in_use = false; if (query_updated == true) { query_updated = false; updateSearchableCount(); } }); } catch (e) { count_element.firstChild.nodeValue = saved_count_element_value; var submit_button = document.getElementById('submit_changes'); if (submit_button) { submit_button.disabled = false; } // alert("Exception retrieving result count (name: " + e.name + ", message: " + e.message + ") count_value = " + count_value); } }); } catch (e) { // alert("Exception validating query (name: " + e.name + ", message: " + e.message); } }); return false; } function updateSRP (hit_count) { if (window.opener && window.opener.document.computeCustomSlicePrice) { var srp_element = document.getElementById('srp'); if (srp_element != null) { var span_elements = srp_element.getElementsByTagName('span'); if (span_elements.length == 1) { var srp_text_element = span_elements.item(0); if (srp_text_element != null) { if (hit_count == null) { srp_text_element.firstChild.nodeValue = ' '; } else { var price = window.opener.document.computeCustomSlicePrice(hit_count); srp_text_element.firstChild.nodeValue = "(SRP: $" + formatNumber(price) + ")"; } } } } } } function getSerializedBALCriteria () { var serialized_form = exportBALForm(); var bal_criteria = obj.getSerializedFormInput(serialized_form); return bal_criteria; } var ind_fields = new Array('industry', 'us_sic_codes', 'naics_codes', 'uk_sic_codes'); function exportBALForm() { var form = document.getElementById('bal'); if (form == null) { return null; } if (typeof(form.elements) == 'undefined') { return null; } var form_data = {}; var selected_ind_field = null; for( i=0; i < form.bal_ind_select.length; i++) { if (form.bal_ind_select[i].checked == true) { selected_ind_field = form.bal_ind_select[i].value; } } for (var iterator = 0; iterator < form.elements.length; iterator++) { var element = form.elements[iterator]; if (element.disabled) { continue; } var element_type = element.tagName.toLowerCase(); var element_name = null; var element_value = null; if ( (typeof(element.name) != 'undefined') && (element.name.length > 0)) { element_name = element.name; } else if ( (typeof(element.id) != 'undefined') && (element.id.length > 0)) { element_name = element.id; } if (ind_fields.contains(element_name.replace(/bal_/, '').replace(/\[\]$/, ''))) { if (element_name != 'bal_' + selected_ind_field && element_name != 'bal_' + selected_ind_field + '[]') { continue; } } if (element_name != null) { if (element_type == 'fieldset') { continue; } else if (element_type == 'input') { if ( (element.type == 'text') || (element.type == 'password') || (element.type == 'button') || (element.type == 'submit') || (element.type == 'hidden')) { element_value = element.value; } else if (element.type == 'checkbox') { element_value = element.checked; } else if (element.type == 'radio') { if (element.checked) { element_value = element.value; } else { try { var type = eval('typeof(form_data.' + element_name + ')'); if (type != 'undefined') { continue; } } catch (e) { continue; } } } } else if (element_type == 'select') { if (element.options.length > 0) { if (element.multiple) { element_name = element_name.replace(/\[\]$/ig, ''); element_value = []; for (var options_iterator = 0; options_iterator < element.options.length; options_iterator ++) { if (element.options[options_iterator].selected) { element_value.push(element.options[options_iterator].value); } } } else { if (element.selectedIndex >= 0) { element_value = element.options[element.selectedIndex].value; } } } } else if (element_type == 'textarea') { element_value = element.value; } else { alert('unknown type "' + element_type + '"'); } try { eval('form_data.' + element_name + ' = element_value;'); } catch (e) {} } } return form_data; }; function createErrorSpans(errors) { var err_count = 0; for (var element_id in errors) { var error_message = errors[element_id]; var field_element = document.getElementById(element_id); if (element_id != 'message2'){ field_element.setAttribute('class', 'error'); } if (field_element.getElementsByTagName('span')) { // If this span already has an error message, don't add another var spanobj = field_element.getElementsByTagName('span'); if(spanobj && spanobj.length && 'errormsg' == spanobj.item(0).getAttribute('class')) { continue; } var error_msg_element = document.createElement('span'); error_msg_element.setAttribute('id', 'err' + err_count); error_msg_element.setAttribute('class', 'errormsg'); var bold_element = document.createElement('b'); var error_label = document.createTextNode('Error: '); bold_element.appendChild(error_label); var error_msg_text = document.createTextNode(error_message); error_msg_element.appendChild(bold_element); error_msg_element.appendChild(error_msg_text); if (element_id == 'message' ) { field_element.appendChild(error_msg_element);} else if( element_id == 'message2'){ jQuery('#queryError').jqmShow(); } else { var input_elements = field_element.getElementsByTagName('input'); var input_ele_count = input_elements.length; var ref_node = input_elements.item(input_ele_count - 1); field_element.insertBefore(error_msg_element, ref_node.nextSibling); } } err_count++; } } function validateInput() { try { var serialized_form = xoad.html.exportForm('bal'); var result = obj.validateQueryTerms(serialized_form, true); if (result != true) { createErrorSpans(result); return false; // errors found } else { var count = obj.getResultsCount(serialized_form); if (count > 0) { return true; // No errors, all is well } } } catch (e) { // alert("Exception validating input terms (name: " + e.name + ", message: " + e.message); } return false; } function inspect(ele) { var str = ''; for (var i in ele) { if (ele.getAttribute(i) != null) { str += i + ": " + ele.getAttribute(i) + "\n"; } } alert(str); } function addEventHandlerToNodeList(nodelist, event, handler) { for (i = 0; i < nodelist.length; i++) { ele = nodelist.item(i); ele.changeHandler = handler; crossBrowserAddHandler(ele, event, 'changeHandler'); } } function crossBrowserAddHandler(target, event_name, handler_name) { if (target.addEventListener) { target.addEventListener(event_name, function(e){target[handler_name](e);}, false); } else if (target.attachEvent) { target.attachEvent('on' + event_name, function(e){target[handler_name](e);}); } else { var original_handler = target['on' + event_name]; if (original_handler) { target['on' + event_name] = function(e){original_handler(e); target[handler_name](e);}; } else { target['on' + event_name] = target[handler_name]; } } } /** * called on load to attach event handlers to items * */ loadOn(function() { var normal_handler = function(e) { if (in_use == true) { query_updated = true; return; } updateSearchableCount(e); in_use = true; }; var linked_set_handler = function(e) { if (e == null) { e = window.event; } if (e.currentTarget == null && e.srcElement != null) { e.currentTarget = e.srcElement; } var radio_element = e.currentTarget.parentNode.getElementsByTagName('input').item(0); radio_element.click(); radio_element.checked = true; if (in_use == true) { return; } updateSearchableCount(e); in_use = true; } var input_radios = new Array(); var input_other = new Array(); var radios_other = new Array(); var input_selects = new Array(); var tbt_radio_elements = new Array(); var tbt_radio_ids = new Array(); var tbt_input_elements = new Array(); var tbt_input_ids = new Array(); // get radio & text input from industry_tbt tmp_list = document.getElementById('industry_tbt').getElementsByTagName('input'); for (i = 0; i < tmp_list.length; i++) { var ele = tmp_list[i]; if (ele.getAttribute('type') == 'radio') { tbt_radio_elements.push(ele); tbt_radio_ids.push(ele.getAttribute('id')); } else if (ele.getAttribute('type') == 'text') { tbt_input_elements.push(ele); tbt_input_ids.push(ele.getAttribute('id')); } } // get select input from industry_tbt tmp_list = document.getElementById('industry_tbt').getElementsByTagName('select'); for (var i = 0; i < tmp_list.length; i++) { var ele = tmp_list[i]; tbt_input_elements.push(ele); tbt_input_ids.push(ele.getAttribute('id')); } var all_inputs = document.getElementById('bal').getElementsByTagName('input'); for (var i=0; i < all_inputs.length; i++) { ele = all_inputs.item(i); if (ele.getAttribute('id') != 'pre_slice_name' && ele.getAttribute('id') != 'pre_slice_desc' && ele.getAttribute('id') != 'pre_slice_price' && ele.getAttribute('id') != 'pre_slice_cap' && ele.getAttribute('id') != 'custom_slice_name' && ele.getAttribute('id') != 'slice_status') { if (ele.getAttribute('type') == 'radio') { if (tbt_radio_ids.contains(ele.getAttribute('id')) == false) { input_radios.push(ele); } else { radios_other.push(ele); } } else { if (tbt_input_ids.contains(ele.getAttribute('id')) == false) { input_other.push(ele); } } } } var all_inputs = document.getElementById('bal').getElementsByTagName('textarea'); for (var i=0; i < all_inputs.length; i++) { ele = all_inputs.item(i); if (tbt_input_ids.contains(ele.getAttribute('id')) == false) { input_other.push(ele); } } var all_selects = document.getElementById('bal').getElementsByTagName('select'); for (var i=0; i < all_selects.length; i++) { ele = all_selects.item(i); if (ele.getAttribute('id') != 'slice_list') { if (tbt_input_ids.contains(ele.getAttribute('id')) == false) { input_selects.push(ele); } } } addEventHandlerToNodeList(input_radios, 'click', normal_handler); addEventHandlerToNodeList(input_other, 'change', normal_handler); addEventHandlerToNodeList(input_selects, 'change', normal_handler); addEventHandlerToNodeList(tbt_input_elements, 'change', normal_handler); addEventHandlerToNodeList(tbt_input_elements, 'blur', normal_handler); addEventHandlerToNodeList(radios_other, 'click', normal_handler); addEventHandlerToNodeList(tbt_radio_elements, 'click', normal_handler); addEventHandlerToNodeList(tbt_input_elements, 'click', linked_set_handler); addEventHandlerToNodeList(tbt_input_elements, 'focus', linked_set_handler); var edit_field = document.getElementById('edit_mode'); if (edit_field && edit_field.value == 'true') { updateSearchableCount(); } else { initSearchableCount(); } }); function formatNumber(n) { var arr = new Array('0'), i=0; while (n>0) { arr[i] = '' + n%1000; n = Math.floor(n/1000); i++; } arr = arr.reverse(); for (var i in arr) { if (i>0) { while (arr[i].length<3) { arr[i]='0'+arr[i]; } } } return arr.join(); }