/* Common Javascript functions for use throughout Interspire Shopping Cart */ // Fetch the value of a cookie function get_cookie(name) { name = name += "="; var cookie_start = document.cookie.indexOf(name); if(cookie_start > -1) { cookie_start = cookie_start+name.length; cookie_end = document.cookie.indexOf(';', cookie_start); if(cookie_end == -1) { cookie_end = document.cookie.length; } return unescape(document.cookie.substring(cookie_start, cookie_end)); } } // Set a cookie function set_cookie(name, value, expires) { if(!expires) { expires = "; expires=Wed, 1 Jan 2020 00:00:00 GMT;" } else { expire = new Date(); expire.setTime(expire.getTime()+(expires*1000)); expires = "; expires="+expire.toGMTString(); } document.cookie = name+"="+escape(value)+expires; } /* Javascript functions for the products page */ var num_products_to_compare = 0; var product_option_value = ""; var CurrentProdTab = ""; function showProductImage(filename, product_id, currentImage) { var l = (screen.availWidth/2)-350; var t = (screen.availHeight/2)-300; var variationAdd = ''; if(ShowVariationThumb) { variationAdd = '&variation_id='+$('body').attr('currentVariation'); CurrentProdThumbImage = null; } UrlAddOn = ''; if(currentImage) { UrlAddOn = "¤t_image="+currentImage; } else if(CurrentProdThumbImage) { UrlAddOn = "¤t_image="+CurrentProdThumbImage; } var imgPopup = window.open(filename + "?product_id="+product_id+variationAdd+UrlAddOn, "imagePop", "toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1,width=700,height=600,top="+t+",left="+l); imgPopup.focus(); } function CheckProductConfigurableFields(form) { var requiredFields = $('.FieldRequired'); var valid = true; requiredFields.each(function() { var namePart = this.name.replace(/^.*\[/, ''); var fieldId = namePart.replace(/\].*$/, ''); if(this.type=='checkbox' ) { if(!this.checked) { valid = false; alert(lang.EnterRequiredField); this.focus(); this.select(); return false; } } else if(this.value == '') { if(this.type != 'file' || (this.type == 'file' && document.getElementById('CurrentProductFile_'+fieldId).value == '')) { valid = false; alert(lang.EnterRequiredField); this.focus(); this.select(); return false; } } }); var fileFields = $(form).find('input[type=file]'); fileFields.each(function() { if(this.value != '') { var namePart = this.name.replace(/^.*\[/, ''); var fieldId = namePart.replace(/\].*$/, ''); var fileTypes = document.getElementById('ProductFileType_'+fieldId).value; fileTypes = ','+fileTypes.replace(' ', '').toLowerCase()+',' var ext = this.value.replace(/^.*\./, '').toLowerCase(); if(fileTypes.indexOf(','+ext+',') == -1) { alert(lang.InvalidFileTypeJS); this.focus(); this.select(); valid = false; } } }); return valid; } function check_add_to_cart(form, required) { var valid = true; var qtyInputs = $(form).find('input.qtyInput'); qtyInputs.each(function() { if(isNaN($(this).val()) || $(this).val() <= 0) { alert(lang.InvalidQuantity); this.focus(); this.select(); valid = false; return false; } }); if(valid == false) { return false; } if(!CheckProductConfigurableFields(form)) { return false; } if(required && !$(form).find('.CartVariationId').val()) { alert(lang.OptionMessage); var select = $(form).find('select').get(0); if(select) { select.focus(); } var radio = $(form).find('input[type=radio]').get(0); if(radio) { radio.focus(); } return false; } if (!CheckEventDate()) { return false; } return true; } function compareProducts(compare_path) { var pids = ""; if($('form').find('input[name=compare_product_ids][checked]').size() >= 2) { var cpids = document.getElementsByName('compare_product_ids'); for(i = 0; i < cpids.length; i++) { if(cpids[i].checked) pids = pids + cpids[i].value + "/"; } pids = pids.replace(/\/$/, ""); document.location.href = compare_path + pids; return false; } else { alert(lang.CompareSelectMessage); return false; } } function product_comparison_box_changed(state) { // Increment num_products_to_compare - needs to be > 0 to submit the product comparison form if(state) num_products_to_compare++; else if (num_products_to_compare != 0) num_products_to_compare--; } function remove_product_from_comparison(id) { if(num_compare_items > 2) { for(i = 1; i < 11; i++) { document.getElementById("compare_"+i+"_"+id).style.display = "none"; } num_compare_items--; } else { alert(lang.CompareTwoProducts); } } function show_product_review_form() { document.getElementById("rating_box").style.display = ""; if(typeof(HideProductTabs) != 'undefined' && HideProductTabs == 0) { CurrentProdTab = 'ProductReviews_Tab'; } else { document.location.href = "#write_review"; } } function jump_to_product_reviews() { if(typeof(HideProductTabs) != 'undefined' && HideProductTabs == 0) { CurrentProdTab = 'ProductReviews_Tab'; } else { document.location.href = "#reviews"; } } function g(id) { return document.getElementById(id); } function check_product_review_form() { var revrating = g("revrating"); var revtitle = g("revtitle"); var revtext = g("revtext"); var revfromname = g("revfromname"); var captcha = g("captcha"); if(revrating.selectedIndex == 0) { alert(lang.ReviewNoRating); revrating.focus(); return false; } if(revtitle.value == "") { alert(lang.ReviewNoTitle); revtitle.focus(); return false; } if(revtext.value == "") { alert(lang.ReviewNoText); revtext.focus(); return false; } if(captcha.value == "" && HideReviewCaptcha != "none") { alert(lang.ReviewNoCaptcha); captcha.focus(); return false; } return true; } function check_small_search_form() { var search_query = g("search_query"); if(search_query.value == "") { alert(lang.EmptySmallSearch); search_query.focus(); return false; } return true; } function setCurrency(currencyId) { var gotoURL = location.href; if (location.search !== '') { if (gotoURL.search(/[&|\?]setCurrencyId=[0-9]+/) > -1) gotoURL = gotoURL.replace(/([&|\?]setCurrencyId=)[0-9]+/, '$1' + currencyId); else gotoURL = gotoURL + '&setCurrencyId=' + currencyId; } else gotoURL = gotoURL + '?setCurrencyId=' + currencyId; location.href = gotoURL; } // Dummy sel_panel function for when design mode isn't enabled function sel_panel(id) {} function inline_add_to_cart(filename, product_id, quantity, returnTo) { if(typeof(quantity) == 'undefined') { var quantity = '1'; } var html = '
'; if(typeof(returnTo) != 'undefined' && returnTo == true) { var returnLocation = window.location; html += ''; } html += ''; html += ''; html += ''; html += '<\/form>'; $('body').append(html); $('#inlineCartAdd').submit(); } function ShowPopupHelp(content, url, decodeHtmlEntities) { var popupWindow = open('', 'view','height=450,width=550'); if(decodeHtmlEntities) { content = HtmlEntityDecode(content); } if (window.focus) { popupWindow.focus(); } var doc = popupWindow.document; doc.write(content); doc.close(); return false; } function HtmlEntityDecode(str) { try { var tarea=document.createElement('textarea'); tarea.innerHTML = str; return tarea.value; tarea.parentNode.removeChild(tarea); } catch(e) { //for IE add to the page document.getElementById("htmlconverter").innerHTML = ''; var content = document.getElementById("innerConverter").value; document.getElementById("htmlconverter").innerHTML = ""; return content; } } function setProductThumbHeight() { var ImageBoxDiv = $('.Content .ProductList .ProductImage'); var ImageListDiv = $('.Content .ProductList:not(.List) li'); var CurrentListHeight = ImageListDiv.height(); var ProductImageMargin = ImageBoxDiv.css('margin-left')*2; /* ImageBoxDiv.height(ThumbImageHeight); ImageBoxDiv.width(ThumbImageWidth); ImageBoxDiv.css('line-height', ThumbImageHeight+'px'); */ var ImageBoxHeight = ThumbImageHeight; if (parseInt(ImageBoxDiv.css("padding-top"), 10)) { ImageBoxHeight += parseInt(ImageBoxDiv.css("padding-top"), 10) * 2; //Total Padding Width } if(parseInt(ImageBoxDiv.css("margin-top"), 10)) { ImageBoxHeight += parseInt(ImageBoxDiv.css("margin-top"), 10) * 2; //Total Margin Width } if (parseInt(ImageBoxDiv.css("borderTopWidth"), 10)) { ImageBoxHeight += parseInt(ImageBoxDiv.css("borderTopWidth"), 10) * 2; //Total Border Width } ImageBoxDiv.height(ImageBoxHeight); ImageBoxDiv.width(ThumbImageWidth); ImageBoxDiv.css('line-height', ImageBoxHeight+'px'); //calculate the new list container width based on the difference between the thumb image and default thumb size var ImageListWidth = ImageListDiv.width() + (ThumbImageWidth-120); ImageListDiv.width(ImageListWidth); // var ImageListHeight = ImageListDiv.height() + (ImageBoxDiv.height() - 120); // ImageListDiv.height(ImageListHeight); $('.Content .ProductList.List .ProductDetails').css('margin-left',ThumbImageWidth+2+'px'); $('.Content .ProductList.List li').height(Math.max(CurrentListHeight, ThumbImageHeight)); } // Dummy JS object to hold language strings. var lang = { }; // IE 6 doesn't support the :hover selector on elements other than links, so // we use jQuery to work some magic to get our hover styles applied. if(document.all) { var isIE7 = /*@cc_on@if(@_jscript_version>=5.7)!@end@*/false; if(isIE7 == false) { $(document).ready(function() { $('.ProductList li').hover(function() { $(this).addClass('Over'); }, function() { $(this).removeClass('Over'); }); $('.ComparisonTable tr').hover(function() { $(this).addClass('Over'); }, function() { $(this).removeClass('Over'); }); }); } $('.ProductList li:last-child').addClass('LastChild'); } function ShowLoadingIndicator() { if (typeof(disableLoadingIndicator) != 'undefined' && disableLoadingIndicator) { return; } var windowWidth = $(window).width(); var scrollTop; if(self.pageYOffset) { scrollTop = self.pageYOffset; } else if(document.documentElement && document.documentElement.scrollTop) { scrollTop = document.documentElement.scrollTop; } else if(document.body) { scrollTop = document.body.scrollTop; } $('#AjaxLoading').css('position', 'absolute'); $('#AjaxLoading').css('top', scrollTop+'px'); $('#AjaxLoading').css('left', parseInt((windowWidth-150)/2)+"px"); $('#AjaxLoading').show(); } function HideLoadingIndicator() { $('#AjaxLoading').hide(); } var loadedImages = {}; // Ensure that all product lists are the same height function setProductListHeights(imgName) { // hack job putting this here but it needs to be reused by search ajax pager if (typeof(DesignMode) != 'undefined') { return; } if (imgName != 'undefined') { if (typeof loadedImages[imgName] != 'undefined') { return; } loadedImages[imgName] = true; } setProductThumbHeight(); /** * Sets the height of the elements passed in to match that of the one that * has the greatest height. * * @param ele The element(s) to adjust the height for. * @return void */ function setHeight(ele) { var ele = $(ele), maxHeight = 0; ele // reset the height just in case it was set by the stylesheet so // we can detect it .css('height', 'auto') // get the one with the greatest height .each(function() { if ($(this).height() > maxHeight) { maxHeight = $(this).height(); } }) // and set them all to the greatest height .css('height', maxHeight); } setHeight('.Content .ProductList:not(.List) li .ProductDetails'); if (typeof imgName != 'undefined') { setHeight('.Content .ProductList:not(.List) li .ProductPriceRating:has(img[src$='+imgName+'])'); } setHeight('.Content .ProductList:not(.List) li'); } /** * Adds a script tag to the DOM that forces a hit to tracksearchclick. Should be called by a mousedown event as calling it by a click event can sometimes be cancelled by the browser navigating away from the page. */ function isc_TrackSearchClick (searchId) { if (!searchId) { return; } $('#SearchTracker').remove(); var trackurl = 'search.php?action=tracksearchclick&searchid=' + encodeURIComponent(searchId) + '&random=' + Math.random(); var script = document.createElement('script'); script.type = "text/javascript"; script.src = trackurl; script.id = "SearchTracker"; window.document.body.appendChild(script); } $(document).ready(function() { if($('.Rating img').length > 0) { $('.Rating img').each(function() { if($(this).height() == 0) { $(this).load(function() { var imgName = $(this).attr('src').split('/'); var imgKey = imgName.length-1; setProductListHeights(imgName[imgKey]); }); } else { setProductListHeights(); return false; } }); } else { setProductListHeights(); } $('.InitialFocus').focus(); $('table.Stylize tr:first-child').addClass('First'); $('table.Stylize tr:last-child').addClass('Last'); $('table.Stylize tr td:odd').addClass('Odd'); $('table.Stylize tr td:even').addClass('Even'); $('table.Stylize tr:even').addClass('Odd'); $('table.Stylize tr:even').addClass('Even'); $('.TabContainer .TabNav li').click(function() { $(this).parent('.TabNav').find('li').removeClass('Active'); $(this).parents('.TabContainer').find('.TabContent').hide(); $(this).addClass('Active'); $(this).parents('.TabContainer').find('#TabContent'+this.id).show(); $(this).find('a').blur(); return false; }); $('html').ajaxStart(function() { ShowLoadingIndicator(); }); $('html').ajaxComplete(function() { HideLoadingIndicator(); }); }); var config = {};