//Shop product search page related js. (function(scope, $) { //product search function. function searchShopProduct() { // if not found 'shop-search-result-container' Dom then redirect to shop search page. // Otherwise it may be otherpage e.g shop category view page, and allow search on that page too if Dom exist. if(!document.getElementById('shop-search-result-container')) { window.location = '/shop/product/search'; } //shop product search process main url. var sUrl = "/shop/product/search-process"; //queries string url. var qUrl = ""; //get main request url to get it's params. var mainRequestUrl = window.location.href; var mainUrl = $.url(mainRequestUrl); //set products sortorder param. if(document.getElementById('order')) { var order = document.getElementById('order').value; if(order) { //sUrl = generateQuerieString(sUrl, 'order', order); qUrl = generateQuerieString(qUrl, 'order', order); } } else if (mainUrl.param('order')) { //if passed from url then used it for auto sort initial based on it. qUrl = generateQuerieString(qUrl, 'order', mainUrl.param('order')); } //set products productview param. if(document.getElementById('productView')) { var productView = document.getElementById('productView').value; if(productView) { //sUrl = generateQuerieString(sUrl, 'productView', productView); qUrl = generateQuerieString(qUrl, 'productView', productView); } } else if (mainUrl.param('productView')) { //if passed from url then used it for auto productView initial based on it. qUrl = generateQuerieString(qUrl, 'productView', mainUrl.param('productView')); } //set products pagenumber param. if(document.getElementById('page')) { var page = document.getElementById('page').value; if(page) { //sUrl = generateQuerieString(sUrl, 'page', page); qUrl = generateQuerieString(qUrl, 'page', page); } } else if (mainUrl.param('page')) { //if passed from url then used it for auto page number load initial based on it. qUrl = generateQuerieString(qUrl, 'page', mainUrl.param('page')); } //set products pagenumber param. if(document.getElementById('perPage')) { var perPage = document.getElementById('perPage').value; if(perPage) { qUrl = generateQuerieString(qUrl, 'perPage', perPage); } } else if (mainUrl.param('perPage')) { //if passed from url then used it for auto page number load initial based on it. qUrl = generateQuerieString(qUrl, 'perPage', mainUrl.param('perPage')); } //requst callback. var callback = { success: function(o) { document.getElementById('shop-search-result-container').innerHTML = o; //execute template js related with infinite scroll if exist. if(document.getElementById('infinitescrollScript')) { eval(document.getElementById('infinitescrollScript').innerHTML); } //Make some action ajax based as it will not ajax based in some case like when having category view page,etc. //In the case of used category specific or custom templates instead of search default template. //Make product view action ajax based if not as before. if(document.getElementById('productViewGridId')) { document.getElementById('productViewGridId').onclick = function() { document.getElementById('productView').value = 'grid'; searchShopProduct(); } } //Make product view action ajax based if not as before. if(document.getElementById('productViewListId')) { document.getElementById('productViewListId').onclick = function() { document.getElementById('productView').value = 'list'; searchShopProduct(); } } //Make product sort order action ajax based if not as before. if(document.getElementById('order')) { document.getElementById('order').onchange = function() { searchShopProduct(); } } //Make product perPage action ajax based if not as before. if(document.getElementById('perPage')) { document.getElementById('perPage').onchange = function() { searchShopProduct(); } } //Replace rating stars if exist if($('span.stars').length > 0 && $.fn.stars) { $('span.stars').stars(); } }, error: function(o) { // alert("AJAX doesn't work"); // IGNORE FAILURE } } //combine query sting url with form get params to update same in url with pushstate. var formData = $('#catSearchForm').serialize(); if(formData) { if(qUrl) { qUrl = qUrl + '&' + formData; } else { qUrl = '?' + formData; } } sUrl = sUrl + qUrl; window.location.href = sUrl; //update url as per the request using pushstates. //history.pushState(null, null, qUrl); //show loader and do search process request. //TODO: will improve this later based on template if needed. /*$('#shop-search-result-container').block({ message: '', css: { border: 'none', backgroundColor: 'none' } });*/ //$.ajax(sUrl,callback) //YAHOO.util.Connect.asyncRequest('GET', sUrl, callback, formData); //return false; } //Generate querie string function. function generateQuerieString(uri, key, value) { var re = new RegExp("([?|&])" + key + "=.*?(&|$)", "i"); separator = uri.indexOf('?') !== -1 ? "&" : "?"; if (uri.match(re)) { uri = uri.replace(re, '$1' + key + "=" + value + '$2'); } else { uri = uri + separator + key + "=" + value; } return uri; } //get query string value based on passed params. // Not used right now as used jQuery url parser purl right now. function getQueryParameter ( parameterName ) { var queryString = window.top.location.search.substring(1); var parameterName = parameterName + "="; if ( queryString.length > 0 ) { begin = queryString.indexOf ( parameterName ); if ( begin != -1 ) { begin += parameterName.length; end = queryString.indexOf ( "&" , begin ); if ( end == -1 ) { end = queryString.length } return unescape ( queryString.substring ( begin, end ) ); } } return "null"; } scope.searchShopProduct = searchShopProduct; scope.generateQuerieString = generateQuerieString; scope.getQueryParameter = getQueryParameter; })(window, jQuery);