function addAllToLocalStorage(){ // Search Criteria addSearchToLocalStorage('OPS_SEARCH_YEAR', $('#year:visible option:selected').val()); addSearchToLocalStorage('OPS_SEARCH_MAKE', $('#search_manu:visible option:selected').val()); addSearchToLocalStorage('OPS_SEARCH_MODEL', $('#search_model:visible option:selected').val()); addSearchToLocalStorage('OPS_SEARCH_PART', $('#itemtype:visible option:selected').val()); addSearchToLocalStorage('OPS_SEARCH_IC', $('#search_ic:visible option:selected').val()); addSearchToLocalStorage('SORT_RESULTS', $('#sort:visible option:selected').val()); addSearchToLocalStorage('free_text', $('#free-text').text().trim()); addSearchToLocalStorage('OPS_SEARCH_WITH_IMAGES', $('#with_images').prop('checked')); // OVS Search criteria var selectedVehicleType = "vehicleType:" + $('.active_ovs_tab').prop('id'); addSearchToLocalStorage('OPS_SEARCH_VEHICLE_TYPE', selectedVehicleType); addSearchToLocalStorage('OPS_SEARCH_FUEL_TYPE', $('#search_fueltype option:selected').val()); // Check if we have a current page, so that for example going to the details page doesn't reset the value if($('.currentPage').length > 0) addSearchToLocalStorage('RESULTS_PAGE', $($('.currentPage')[0]).text()); } function buildHash(){ var big_hash = ''; $('#year, #search_manu, #search_model, #itemtype').each(function(index, element){ var combo = $(element); var combo_id = combo.attr('id'); var combo_val = combo.find('option:selected').val(); if(combo_val != 'viewall') { var new_hash = combo_id + '=' + encodeURIComponent(combo_val); big_hash += '&' + new_hash; } }); var freetext = $('#free-text').text().trim(); if(freetext != "" && freetext != 'Enter Part Details (e.g. Ford Focus 2008 Petrol Engine)') big_hash += '&free-text=' + encodeURIComponent(freetext); return big_hash; } function buildAndSetHash(){ window.location.hash = buildHash(); } function addSearchToLocalStorage(name, val){ if(val == undefined || val == 'undefined'){ return; } if ('localStorage' in window && window['localStorage'] !== null) { localStorage.setItem(name, val); } } function restorePageStateFromHash(e) { var is_hashchange = e != undefined && e.originalEvent != undefined && e.originalEvent.type == "hashchange"; var is_load = e != undefined && e.originalEvent != undefined && e.originalEvent.type == "load" && window.location.hash.length > 1; if( (new RegExp('[\\?&]?z=\\w+').test(window.location.href) || new RegExp('/carparts/[^/]+/[^/]+/[^/]+/\\w+').test(window.location.href)) && window.location.hash == ''){ if(is_hashchange) { window.location.replace(window.location.href); } return; } if(is_hashchange || is_load){ $('#year, #search_manu, #search_model, #itemtype').prop("disabled", true).val("viewall"); $('#free-text').removeClass('free-text-suggest').html(''); $('.search-tag').hide(); } if(window.location.hash.length > 1){ var hash = window.location.hash.substr(1); var hash_values = hash.split('&'); var i = 0; for (i = 0; i < hash_values.length; i++) { var name_val = hash_values[i].split('='); if (name_val.length != 2) continue; var name = name_val[0]; var id = '#' + name; var val_orig = name_val[1]; var val = decodeURIComponent(val_orig); if(val == undefined || val == 'undefined') continue; if(name == 'free-text'){ $('#free-text').html(val); }else if ($(id).find('option:selected').val() != val) { if(id == '#year' && $('#year:visible option[value="'+val+'"]').length == 0) { var year = val.split(':')[1]; $('#year:visible option:selected').after(''); } $(id).val(val); showSearchTag(name); } } } if(is_hashchange || is_load) { addAllToLocalStorage(); $('#free-text-search-btn').trigger('click'); } } /** * Show a search tag under the free text search input showing the users selections. * @param combo_name the name of the combo used to extract the data from to show in the tag. */ function showSearchTag(combo_name) { var combo_val = $('#' + combo_name).val(); var combo_html = $('#' + combo_name + ' option:selected').data('tag')+""; if (combo_val == 'viewall') { $('.' + combo_name + '-tag').hide(); return; } if (combo_name == 'search_ic') { combo_val = {ic: combo_val, ic_desc: $('#search_ic option:selected').html()} combo_html = $('#search_ic option:selected').html(); } if(combo_html.toUpperCase != undefined) combo_html = combo_html.toUpperCase(); $('.' + combo_name + '-tag').data('val', combo_val); $('.' + combo_name + '-tag .tag-name').html(combo_html); $('.' + combo_name + '-tag').show(); } /** * Function to close a
with the id of "alert". */ function closeAlerts(){ if($(".alert").alert != undefined) { $(".alert").alert('close'); } } /** * Redraw the UI is called essentially when the components in the Search Criteria are modified. * NB: this isn't always the case however */ function redrawUI(){ // automatically set a timeout to close any alerts in 10 seconds. setTimeout(closeAlerts, 10000); $('select').prop('disabled', true);abortAllAjax(); var comboYear = document.getElementById('year').value; var comboMake = document.getElementById('search_manu').value; var comboModel = document.getElementById('search_model').value; var comboItemType = document.getElementById('itemtype').value; if($('.year-tag:visible').length == 1){ comboYear = $('.year-tag').data('val'); } if($('.search_manu-tag:visible').length == 1){ comboMake = $('.search_manu-tag').data('val'); } if($('.search_make-tag:visible').length == 1){ comboModel = $('.search_make-tag').data('val'); } if($('.itemtype-tag:visible').length == 1){ comboItemType = $('.itemtype-tag').data('val'); } var sortElement = document.getElementById('sort'); var sort = (sortElement == null) ? '' : sortElement.value; // find the currentPage class within this page var currentPageElements = $('.currentPage').length; var page = (currentPageElements > 1) ? $('.currentPage')[0].innerHTML : '1'; var with_images = $('#with_images').prop('checked') ? 'true' : 'false'; var viewType = ($('.selected-view').length == 1) ? $('.selected-view').prop('id') : 'grid_view'; var free_text = ''; $('#free-text .search-token-matches').each( function(index, ele){ free_text += $(ele).text() + ' '; }) page = 1; var icNum = $('#icNumFromQS').length > 0 ? $('#icNumFromQS').val() : '';var icver = $('#icverFromQS').length > 0 ? $('#icverFromQS').val() : '';var itemTypeId = $('#itemTypeIdFromQS').length > 0 ? $('#itemTypeIdFromQS').val() : '';var modelId = $('#modelIdFromQS').length > 0 ? $('#modelIdFromQS').val() : '';var startYear = $('#startYearFromQS').length > 0 ? $('#startYearFromQS').val() : '';var endYear = $('#endYearFromQS').length > 0 ? $('#endYearFromQS').val() : ''; var ajax = new ajaxObj( 'https://www.carparts-uk.com/ops/inc/backGroundActivity.php?'+ 'opsId='+'global' +'&'+generateLocalStorageQueryStringJS() +'&activityType='+encodeURIComponent('redrawall') +'&icNum='+icNum+'&icver='+icver+'&itemTypeId='+itemTypeId+'&modelId='+modelId+'&startYear='+startYear+'&endYear='+endYear +'&year='+encodeURIComponent(comboYear) +'&make='+encodeURIComponent(comboMake) +'&model='+encodeURIComponent(comboModel) +'&itemtype='+encodeURIComponent(comboItemType) +'&sort='+encodeURIComponent(sort) +'&page='+encodeURIComponent(page) +'&comboName='+encodeURIComponent('') +'&with_images='+encodeURIComponent(with_images) +'&view_type='+encodeURIComponent(viewType) +'&free_text='+encodeURIComponent(free_text), ['partSearch_year_container','partSearch_make_container','partSearch_model_container','partSearch_itemtype_container','partSearch_icoptions_container','vehicleSearchResults'], 'null', 'initDisplayResults(); checkStatus(); ', true ); cacheAjaxObj(ajax);return true;} /** * Given some vehicle data from HPI perform a match * @param hpiData */ function matchHpi(hpiData){ var ajax = $.ajax({ dataType: "json", type: 'POST', url: '/ops/inc/SService.php?opsId=global', data: JSON.stringify(hpiData), contentType: 'application/json', processData: false, success: function(jsonData, textStatus, jqXHR){ doFreeTextSearch(jsonData); // perform a free text search }, error: function(jqXHR, textStatus, errorThrown){ $('#reglookup').unbind(); $('#reglookup').find('input[name=regNumber]').prop('disabled', true); $('#vehicleDetailsFromReg').html('

Sorry, unable to find vehicle details at this time.

'); }, complete: function(jqXHR, textStatus){ $('#regNumber, #regNumberSearch #submit').prop('disabled', false); } }); } /** * Perform a free text search from HPI data * The data comes from the RegLookupService. * @param jsonData decoded vehicle information */ function doFreeTextSearch(jsonData){ // Check if we have any information to display if((jsonData.summary != undefined) && (jsonData.summary != '')){ // We have summary info $('#vehicleDetailsFromReg').html('

' + jsonData.summary + '

'); $('#vehicleDetailsFromReg').slideDown(500); }else if(jsonData.faultstring != undefined){ // We have a defined fault string $('#vehicleDetailsFromReg').html('

' + jsonData.faultstring + '

'); $('#vehicleDetailsFromReg').slideDown(500); return; } else{ // We have nothing $('#vehicleDetailsFromReg').hide(); } // Remove search tags $('#search-tags').remove(); // Rest all the combos // Part Search reset all combos $('#year, #search_manu, #search_model, #itemtype, #search_ic').unbind('change'); $('#year option:selected, #search_manu option:selected, #search_model option:selected, #itemtype option:selected, #search_ic option:selected').removeAttr('selected'); // Do the free text search var year = (jsonData.year != undefined) ? jsonData.year : ''; var manuname = (jsonData.make != undefined && jsonData.make.manuname != undefined) ? jsonData.make.manuname : ''; var modelname = (jsonData.model != undefined && jsonData.model.modelname != undefined) ? jsonData.model.modelname : ''; // Can we use the manu, model or do we have to use the summary info. // Our test case was RegNo: 555 EXG which had NO manu and model data but the summary info did contain the data. var display = ""; if (manuname == '' && modelname == '') { display = jsonData.freeText; } else { display = year + ' ' + manuname + ' ' + modelname; } // Strip out any characters which could cause a problem for the search. display = stripChars(display); $('#free-text').html('' + display.substring(0, 80) + ' '); $('#free-text-search-btn').trigger('click'); } /** * We had a successful call with HPI and have some data * Attempt to use the data in the search criteria. * @param jsonData the raw data retrieved from HPI */ function populateSearchCriteria(jsonData){ // attempt to pull out the year/make/model providing there defined and not "viewall" var year = (jsonData.year != undefined) ? jsonData.year : 'viewall'; var manuname = (jsonData.make != undefined && jsonData.make.manuname != undefined) ? jsonData.make.manuname : 'viewall'; var modelname = (jsonData.model != undefined && jsonData.model.modelname != undefined) ? jsonData.model.modelname : 'viewall'; // set the .searchCriteria data to be what we've matched. $('.searchCriteria').data('year', year); $('.searchCriteria').data('manuname', manuname); $('.searchCriteria').data('modelname', modelname); if((jsonData.summary != undefined) && (jsonData.summary != '') ){ // We have summary info $('#vehicleDetailsFromReg').html('

' + jsonData.summary + '

'); $('#vehicleDetailsFromReg').slideDown(500); }else if(jsonData.faultstring != undefined){ // We have a defined fault string $('#vehicleDetailsFromReg').html('

' + 'Error doing RegLookup' + '

'); $('#vehicleDetailsFromReg').slideDown(500); return; }else{ // We have nothing $('#vehicleDetailsFromReg').hide(); } if(year != 'viewall' || manuname != 'viewall' || modelname != 'viewall'){ $('#year, #search_manu, #search_model, #itemtype, #search_ic').unbind('change'); $('#year option:selected, #search_manu option:selected, #search_model option:selected, #itemtype option:selected, #search_ic option:selected').removeAttr('selected'); $('#year option[value="viewall"], #search_manu option[value="viewall"], #search_model option[value="viewall"], #itemtype option[value="viewall"], #search_ic option[value="viewall"]').attr('selected', 'selected'); var comboYear = document.getElementById('year').value; var comboMake = document.getElementById('search_manu').value; var comboModel = document.getElementById('search_model').value; var comboItemType = document.getElementById('itemtype').value; if($('.year-tag:visible').length == 1){ comboYear = $('.year-tag').data('val'); } if($('.search_manu-tag:visible').length == 1){ comboMake = $('.search_manu-tag').data('val'); } if($('.search_make-tag:visible').length == 1){ comboModel = $('.search_make-tag').data('val'); } if($('.itemtype-tag:visible').length == 1){ comboItemType = $('.itemtype-tag').data('val'); } var sortElement = document.getElementById('sort'); var sort = (sortElement == null) ? '' : sortElement.value; // find the currentPage class within this page var currentPageElements = $('.currentPage').length; var page = (currentPageElements > 1) ? $('.currentPage')[0].innerHTML : '1'; var with_images = $('#with_images').prop('checked') ? 'true' : 'false'; var viewType = ($('.selected-view').length == 1) ? $('.selected-view').prop('id') : 'grid_view'; var free_text = ''; $('#free-text .search-token-matches').each( function(index, ele){ free_text += $(ele).text() + ' '; }) page = 1; var icNum = $('#icNumFromQS').length > 0 ? $('#icNumFromQS').val() : '';var icver = $('#icverFromQS').length > 0 ? $('#icverFromQS').val() : '';var itemTypeId = $('#itemTypeIdFromQS').length > 0 ? $('#itemTypeIdFromQS').val() : '';var modelId = $('#modelIdFromQS').length > 0 ? $('#modelIdFromQS').val() : '';var startYear = $('#startYearFromQS').length > 0 ? $('#startYearFromQS').val() : '';var endYear = $('#endYearFromQS').length > 0 ? $('#endYearFromQS').val() : ''; var ajax = new ajaxObj( 'https://www.carparts-uk.com/ops/inc/backGroundActivity.php?'+ 'opsId='+'global' +'&'+generateLocalStorageQueryStringJS() +'&activityType='+encodeURIComponent('yearSelect') +'&icNum='+icNum+'&icver='+icver+'&itemTypeId='+itemTypeId+'&modelId='+modelId+'&startYear='+startYear+'&endYear='+endYear +'&year='+encodeURIComponent(comboYear) +'&make='+encodeURIComponent(comboMake) +'&model='+encodeURIComponent(comboModel) +'&itemtype='+encodeURIComponent(comboItemType) +'&sort='+encodeURIComponent(sort) +'&page='+encodeURIComponent(page) +'&comboName='+encodeURIComponent('year') +'&with_images='+encodeURIComponent(with_images) +'&view_type='+encodeURIComponent(viewType) +'&free_text='+encodeURIComponent(free_text), ['year'], 'null', '$(\'#year option:selected\').removeAttr(\'selected\');$(\'#year option[value=\"year:\' + $(\'.searchCriteria\').data(\'year\') + \'\"]\').attr(\'selected\', \'selected\');if (\'localStorage\' in window && window[\'localStorage\'] !== null) {localStorage.setItem(\'OPS_SEARCH_YEAR\', year)};showSearchTag(\"year\"); checkStatus();', false ); cacheAjaxObj(ajax);page = 1; var icNum = $('#icNumFromQS').length > 0 ? $('#icNumFromQS').val() : '';var icver = $('#icverFromQS').length > 0 ? $('#icverFromQS').val() : '';var itemTypeId = $('#itemTypeIdFromQS').length > 0 ? $('#itemTypeIdFromQS').val() : '';var modelId = $('#modelIdFromQS').length > 0 ? $('#modelIdFromQS').val() : '';var startYear = $('#startYearFromQS').length > 0 ? $('#startYearFromQS').val() : '';var endYear = $('#endYearFromQS').length > 0 ? $('#endYearFromQS').val() : ''; var ajax = new ajaxObj( 'https://www.carparts-uk.com/ops/inc/backGroundActivity.php?'+ 'opsId='+'global' +'&'+generateLocalStorageQueryStringJS() +'&activityType='+encodeURIComponent('makeSelect') +'&icNum='+icNum+'&icver='+icver+'&itemTypeId='+itemTypeId+'&modelId='+modelId+'&startYear='+startYear+'&endYear='+endYear +'&year='+encodeURIComponent(comboYear) +'&make='+encodeURIComponent(comboMake) +'&model='+encodeURIComponent(comboModel) +'&itemtype='+encodeURIComponent(comboItemType) +'&sort='+encodeURIComponent(sort) +'&page='+encodeURIComponent(page) +'&comboName='+encodeURIComponent('search_manu') +'&with_images='+encodeURIComponent(with_images) +'&view_type='+encodeURIComponent(viewType) +'&free_text='+encodeURIComponent(free_text), ['search_manu'], 'null', '$(\'#search_manu option:selected\').removeAttr(\'selected\');$(\'#search_manu option[value=\"manu:\' + $(\'.searchCriteria\').data(\'manuname\') + \'\"]\').attr(\'selected\', \'selected\');if (\'localStorage\' in window && window[\'localStorage\'] !== null) {localStorage.setItem(\'OPS_SEARCH_MAKE\', manuname)};showSearchTag(\"search_manu\"); checkStatus();', false ); cacheAjaxObj(ajax);page = 1; var icNum = $('#icNumFromQS').length > 0 ? $('#icNumFromQS').val() : '';var icver = $('#icverFromQS').length > 0 ? $('#icverFromQS').val() : '';var itemTypeId = $('#itemTypeIdFromQS').length > 0 ? $('#itemTypeIdFromQS').val() : '';var modelId = $('#modelIdFromQS').length > 0 ? $('#modelIdFromQS').val() : '';var startYear = $('#startYearFromQS').length > 0 ? $('#startYearFromQS').val() : '';var endYear = $('#endYearFromQS').length > 0 ? $('#endYearFromQS').val() : ''; var ajax = new ajaxObj( 'https://www.carparts-uk.com/ops/inc/backGroundActivity.php?'+ 'opsId='+'global' +'&'+generateLocalStorageQueryStringJS() +'&activityType='+encodeURIComponent('modelSelect') +'&icNum='+icNum+'&icver='+icver+'&itemTypeId='+itemTypeId+'&modelId='+modelId+'&startYear='+startYear+'&endYear='+endYear +'&year='+encodeURIComponent(comboYear) +'&make='+encodeURIComponent(comboMake) +'&model='+encodeURIComponent(comboModel) +'&itemtype='+encodeURIComponent(comboItemType) +'&sort='+encodeURIComponent(sort) +'&page='+encodeURIComponent(page) +'&comboName='+encodeURIComponent('search_model') +'&with_images='+encodeURIComponent(with_images) +'&view_type='+encodeURIComponent(viewType) +'&free_text='+encodeURIComponent(free_text), ['search_model'], 'null', '$(\'#search_model option:selected\').removeAttr(\'selected\');$(\'#search_model option[value=\"modelName:\' + $(\'.searchCriteria\').data(\'modelname\') + \'\"]\').attr(\'selected\', \'selected\');if (\'localStorage\' in window && window[\'localStorage\'] !== null) {localStorage.setItem(\'OPS_SEARCH_MODEL\', modelname)};showSearchTag(\"search_model\"); checkStatus();', false ); cacheAjaxObj(ajax); } // Work our what should be added into the free text box from the year, manu and model. var displayYear = year == 'viewall' ? '' : year; var displayManu = manuname == 'viewall' ? '' : manuname; var displayModel = modelname == 'viewall' ? '' : modelname; // Can we use the manu, model or do we have to use the summary info. // Our test case was RegNo: 555 EXG which had NO manu and model data but the summary info did contain the data. var display = ""; if (displayManu == '' && displayModel == '') { display = jsonData.summary; } else { display = displayYear + ' ' + displayManu + ' ' + displayModel; } // Strip out any characters which could cause a problem for the search. display = stripChars(display); // populate the free text search for the given year, manu and model. $('#free-text').html(display); // reload the data.; reload(); } /** * Strip characters from the given string * @param textToStrip the string to strip characters from * @return a string with bad characters replaced. */ function stripChars(textToStrip) { return textToStrip.replace(/[^a-zA-Z0-9 ]/g, ""); } /** * Check status */ function checkStatus(){ if($('.err-gen').length > 0){ var err_msg = $('.err-gen').text(); $('.err-gen').remove(); $('#alert').html(''); } } /** * function to reload the ticker. * This enables us to either use the default "Latest N Parts" or based on the passed in "z" attempt to * find Interchange - Model/Part/Year - Model/Part records. * * @param z the hex encoded pinnetinventoeyId. * @return {boolean} */ function reloadTicker(z){ // Check if the ticker iframe is on the page if($('.ticker_iframe iframe').length != 1){ return true; } // get the existing URL from the iframe. // i.e. "http://autopartstrader.co.uk/ops/plugins/ticker/tick.php?opsId=global&urgid=ap01:chrl:di01:us01:us02&showNavigation=false&url=http%3A%2F%2Fautopartstrader.co.uk%2F&z=959e4177" var src = $('.ticker_iframe iframe').prop("src"); // find the "%2F&z=959e4177" (part identifier) portion of the Url and remove it. var re = /z=(\w+)/; var newUrl = src.replace(re, ""); if(z != undefined && z.length > 0) { // Now add on the z to the URL as this is for a specific part newUrl += '&z=' + z; // We only want to show the iframe containing IC matches of there are any to show. var ajax = $.ajax({ dataType: "json", type: 'GET', url: '/ops/inc/PartsService.php?opsId=global&z='+z+'&action=numic', contentType: 'application/json', processData: false, success: function(jsonData, textStatus, jqXHR){ if(jsonData.iccount > 0) { $('.ticker_iframe').html(''); $('.ticker_iframe').show(); }else{ // We don't display anything as there is no IC $('.ticker_iframe').hide(); } }, error: function(jqXHR, textStatus, errorThrown){ // We don't display anything as there is no IC $('.ticker_iframe').hide(); } }); }else{ // Non specific part $('.ticker_iframe').html(''); $('.ticker_iframe').show(); } } function addPartToCart(event, ele){ event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); $(ele).hide(); $(ele).after('
Loading
'); $(ele).find('form.jcart').submit(); } /** * Show the email part enquiry form * * @param event the event that got fired. * @param z the specific part if there was one. */ function showPartEnquiry(event, z) { // modify the event handler event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); // locate the "#email-dialog-" with or without a specific part identifier. $("#email-dialog-"+z).modal("show"); var google_recaptcha = $('.g-recaptcha'); $("#email-dialog-"+z+" .form-recaptcha").html(''); google_recaptcha.appendTo("#email-dialog-"+z+" .form-recaptcha"); $('.g-recaptcha').removeClass('hidden'); } /** * If the hide button was pressed by the user then hide the * email dialog specific to the given z. * @param event the event being processed. * @param z the part identifier used for each individual case of the part request dialog. */ function hideEmailDialog(event, z) { event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); $('.g-recaptcha').addClass('hidden'); $("#email-dialog-"+z).modal("hide"); } /** * Sets a cookie * @param cookieName the name of the cookie used to retrieve it's value. * @param cookieValue the value assigned to the cookie * @param numDaysTillExpire the number of days till this cookie will expire. */ function setCookie(cookieName, cookieValue, numDaysTillExpire) { var d = new Date(); d.setTime(d.getTime() + (numDaysTillExpire * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cookieName + "=" + cookieValue + "; " + expires; } /** * Given the cookieName return all the associated values for it. * @param cookieName * @returns {*} */ function getCookie(cookieName) { var name = cookieName + "="; var ca = document.cookie.split(';'); for(var i=0; i 0) window.location.hash = ''; // Year trigger will essentially reset the UI so in the case where a part detail is visible on the screen // when this is called the screen will return to the non part specific view $('#year').trigger('change'); // Reset the ticker to display the latest parts reloadTicker(''); } function addLocalStorageQSToForm(ele){ $(ele).unbind('click'); var i = localStorage.getItem('PHPSESSID').split("").reverse().join(""); $(ele).parents('form').append(''); } function loadCart(){ var url = '/ops/jcart/jcart-relay.php?'+ generateLocalStorageQueryStringJS() + "&opsId=global"; var ajax = $.ajax({ type: 'POST', url: url, success: function(data, textStatus, jqXHR){ $('#jcart').html(data); $('.cart-count').html($('#jcart .cart-item').length); }, error: function(jqXHR, textStatus, errorThrown){ if(errorThrown == 'Bad Session ID'){ eval(jqXHR.responseText); } }, }); } function doNothing(e) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); return false; }