//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: '<img src="/baseapp/images/loading_indicator.gif">',
                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);
