
if (typeof(BCNTRY) == 'undefined') {BCNTRY = {};}
if (typeof BCNTRY.homepage == 'undefined') {BCNTRY.homepage = {};}

//ye.addListener(window, 'load', resetFilters);
 
// getResults
//
// Populates the results div with products filtered by the arg_string
//  If the arg_string does not exist, it gets the CGI parameters (form values) 
 
function getParamValue(e, name) {
	for (var i=0 ; i < e.length ; i++) {
		if (e[i].name == name) { return e[i].value; }
	} 
	return;
}

function getParameters() {
	var cgi = {};
	var args = '';
	elem = document.getElementsByTagName('input');
	if($('price')) {
		args += 'price=' + $('price').value + '&';
	}
	if ($('discount')) {
		args += 'discount=' + $('discount').value + '&';
	}
	if ($('size_filter') && $('size_filter').value) {
		args += 'size_filter=' + $('size_filter').value + '&conversion_group=' + getParamValue(elem, 'conversion_group') + '&';
	}
	if($('promo_group')) {
		args += 'group=' + $('promo_group').value + '&';
	} else {
		args += 'group=' + getParamValue(elem, 'group') + '&';
	}
	if($('ruleset_id')) {
		args += 'promo=' + $('ruleset_id').value + '&';
	}
	cgi.page_name = getParamValue(elem, 'page_name') || '';
	cgi.cat     = getParamValue(elem, 'cat') || '';
	cgi.subcat  = getParamValue(elem, 'subcat') || '';
	cgi.offset  = getParamValue(elem, 'offset') || '';
	cgi.on_sale = getParamValue(elem, 'on_sale') || '';
	args += 'brand=' + $('brand_id').value + '&sortby=' + $('sortby').value + '&cat=' + cgi.cat +
		'&subcat=' + cgi.subcat + '&offset=' + cgi.offset + '&on_sale=' + cgi.on_sale + '&page_name=' + cgi.page_name;
	return args;
}

function getKeyPairs(query) {

    FORM_DATA = {};
    // The Object ("Array") where our data will be stored.
  separator = ',';
    // The token used to separate data from multi-select inputs
    keypairs = {};
  numKP = 1;
    // Local vars used to store and keep track of name/value pairs
    // as we parse them back into a usable form.
  while (query.indexOf('&') > -1) {
    keypairs[numKP] = query.substring(0,query.indexOf('&'));
    query = query.substring((query.indexOf('&')) + 1);
    numKP++;
      // Split the query string at each '&', storing the left-hand side
      // of the split in a new keypairs[] holder, and chopping the query
      // so that it gets the value of the right-hand string.
  }
  keypairs[numKP] = query;
  
    // Store what's left in the query string as the final keypairs[] data.<
  for (var i in keypairs) {
      if (keypairs[i] !== '') {
        keyName = keypairs[i].substring(0,keypairs[i].indexOf('='));
          // Left of '=' is name.
        keyValue = keypairs[i].substring((keypairs[i].indexOf('=')) + 1);
          // Right of '=' is value.
        while (keyValue.indexOf('+') > -1) {
          keyValue = keyValue.substring(0,keyValue.indexOf('+')) + ' ' + keyValue.substring(keyValue.indexOf('+') + 1);
            // Replace each '+' in data string with a space.
        }
        keyValue = unescape(keyValue);
          // Unescape non-alphanumerics
        if (FORM_DATA[keyName]) {
          FORM_DATA[keyName] = FORM_DATA[keyName] + separator + keyValue;
            // Object already exists, it is probably a multi-select input,
            // and we need to generate a separator-delimited string
            // by appending to what we already have stored.
        } else {
          FORM_DATA[keyName] = keyValue;
            // Normal case: name gets value.
        }
        return FORM_DATA;
      }
  }
}

function sendUpdateToServer ( argString, successFunction ){ 
	var sUrl = '/' + catalog + '/cat/ajax/get_rest_results.html';
	var args = argString + '&' + getParameters();

	yc.delayedAsyncRequest(
		'POST',
		sUrl, 
		{	success: successFunction,
			timeout: ajax_timeout
		}, 
		args);

}

function subProducts(tmpNumColms, numProductsToRemove, tmpNumProducts) {
	var limitProducts = numProducts - numProductsToRemove;
	var lastTotalProducts = numProducts;
	numProducts = limitProducts;
	numColms = tmpNumColms;
	tmpNumProducts -= numProductsToRemove;

	var argString = 'offsetTotal=' + lastTotalProducts;
	argString += '&totalProducts=' + limitProducts;
	argString += '&numColms=' + numColms;
	argString += '&numProducts=' + tmpNumProducts;

	var products = document.getElementById('products');
	var productArray = products.childNodes;

	for (var i=productArray.length-1;0<i;i--){
		if (productArray[i].className == 'product'){
			products.removeChild(products.childNodes[i]);
			numProductsToRemove--;
			if (numProductsToRemove <= 0){
				i=0;
			}
		}
	
	}

	$('prod_to_top').innerHTML = limitProducts;
	$('prod_to_bottom').innerHTML = limitProducts;

	sendUpdateToServer(argString, function(r) {});
}

function addProducts(tmpNumColms, numProductsToGet, tmpNumProducts) {
	var limitProducts = numProducts + numProductsToGet;
	var lastTotalProducts = numProducts;
	numProducts = limitProducts;
	numColms = tmpNumColms;
	tmpNumProducts += numProductsToGet;

	var argString = 'offsetTotal=' + lastTotalProducts;
	argString += '&totalProducts=' + limitProducts;
	argString += '&numColms=' + numColms;
	argString += '&numProducts=' + tmpNumProducts;

	$('products').innerHTML = $('products').innerHTML.replace(/<div id="?product_addon"?><\/div>/i, '<div class="product">Loading...</div>');
	sendUpdateToServer(argString, function(r) {
		$('products').innerHTML =  $('products').innerHTML.replace(/<div class="?product"?>Loading...<\/div>/i, r.responseText + '<div id="product_addon"></div>');
		$('prod_to_top').innerHTML = limitProducts;
		$('prod_to_bottom').innerHTML = limitProducts;
	});
}

function updateProducts(tmpNumColms, numProductsToRemove, tmpNumProducts) {
	var limitProducts = numProducts - numProductsToRemove;
	var lastTotalProducts = numProducts;
	numProducts = limitProducts;
	numColms = tmpNumColms;
	tmpNumProducts -= numProductsToRemove;

	var argString = 'offsetTotal=' + lastTotalProducts;
	argString += '&totalProducts=' + limitProducts;
	argString += '&numColms=' + numColms;
	argString += '&numProducts=' + tmpNumProducts;

	sendUpdateToServer(argString, function(r) {});
}

function checkNumberOfProducts() {
	//exit if showing all products and total number less than advrage nothing to do.
	if (numProducts >= totalProducts || totalProducts < advNumProducts || $('ruleset_id')) {
			return;
	}

	var products = document.getElementById('products');
	var topProductNum;
	var tmpNumProducts = 0;
	if (! products){return;}
	var productArray = products.childNodes;

	for (var i=0;i<productArray.length;i++){
		if (productArray[i].className == 'product'){
			topProductNum = i;
			tmpNumProducts++;
		}
	
	}
	var tmpNumColms = Math.floor( products.offsetWidth / productArray[topProductNum].offsetWidth );

	if (numColms != tmpNumColms) {
		var extaraProductsOnPage =  Math.round( ( ( tmpNumProducts / tmpNumColms ) % 1 ) * tmpNumColms);
		if (extaraProductsOnPage === 0 || extaraProductsOnPage == tmpNumColms) {
			updateProducts(tmpNumColms, extaraProductsOnPage, tmpNumProducts);
		}
		else if (tmpNumProducts - extaraProductsOnPage <  advNumProducts){
			addProducts(tmpNumColms, (tmpNumColms - extaraProductsOnPage), tmpNumProducts);
		}
		else if (tmpNumProducts + (tmpNumColms - extaraProductsOnPage) > advNumProducts) {
			subProducts(tmpNumColms, (extaraProductsOnPage), tmpNumProducts);
		}
		else {
			// do nothing in all other cases.
		}
	}
}

function Select_Value_Set(SelectObject, Value) {
	for(index = 0; index < SelectObject.length; index++) {
		if(SelectObject[index].value == Value) {
			SelectObject.selectedIndex = index;
		}
	}
}

function getResults(arg_string) {

	// Show that something is happening, for those with slower connections
	//$('results').innerHTML = 'Loading... <img src="/tmp/animgoat.gif"/>';
	$('results').innerHTML = 'Loading...';
	var args = arg_string || getParameters();
	var sUrl = '/' + catalog + '/cat/ajax/get_results.html?' + args;
	
	
	// Break out the key pairs from the arguments
	keypairs = getKeyPairs(args);
	
	// Set the form controls to the values from the arguments
	var svb = new Select_Value_Set($('brand_id'),keypairs.brand);
	var svs = new Select_Value_Set($('sortby'),keypairs.sortby);
	if($('price')) {
		var svp = new Select_Value_Set($('price'),keypairs.price);
	}
	if ($('discount')) {
		var svd = new Select_Value_Set($('discount'),keypairs.discount);
	}

 	// Populate the div with the results from an ajax call
	document.body.style.cursor = 'progress';
	yc.asyncRequest('GET', sUrl, {
		timeout: ajax_timeout,
		success: function(r) {
			$('results').innerHTML = r.responseText;
			document.body.style.cursor = 'default';
			if(!$('ruleset_id')) {
				numProducts = parseInt(r.responseText.match(/var numProducts = (\d+);/)[1], 10);
				totalProducts = parseInt(r.responseText.match(/var totalProducts = (\d+);/)[1], 10);
				advNumProducts = parseInt(r.responseText.match(/var advNumProducts = (\d+);/)[1], 10);
				numPreviousProducts = parseInt(r.responseText.match(/var numPreviousProducts = (\d+);/)[1], 10);
				numColms = parseInt(r.responseText.match(/var numColms = (\d+);/)[1], 10);
				//checkNumberOfProducts();
			}
			set_nav_onclicks();
		},
		failure: function(r) { 
			document.body.style.cursor = 'default';
			$('results').innerHTML = '<div class="error_message">There was an error filtering the products.  Please reload the page and try again.</div>';
		}
	});
	return false;
}

function getFilter(thisFilter) {
	var sUrl = '/' + catalog + '/cat/ajax/get_filter.html';
	var args = getParameters();

	document.body.style.cursor = 'progress';
	ajax(sUrl, args, function(r) {
		$('product_filter').innerHTML = r.responseText;
		getResults();
	});
	var sft = new ScFilterType(thisFilter);
	return false;
}

function resetFilters() {
	elem = document.getElementsByTagName('input');
	var brand_page = getParamValue(elem, 'brand_page');
	if (brand_page != 1) {
		elem = $('brand');
		elem.selectedIndex = 0;
	}
	elem = $('price');
	elem.selectedIndex = 0;

	if ($('discount')) {
		elem = $('discount');
		elem.selectedIndex = 0;
	}

	elem = $('sortby');
	elem.selectedIndex = 0;
}

function setViewPreference(elem, type) {
	var spans = $('view_as').getElementsByTagName('span');
	if (elem.className == 'selected') {
		return false;
	}

	for (var i=0 ; i < spans.length ; i++) {
		if (spans[i].className == 'selected') {
			spans[i].className = 'unselected';
		}
		else {
			spans[i].className = 'selected';
		}
	}
	$('results').className = type;

	var date = new Date();
	date.setTime(date.getTime() + (30*24*60*60*1000));
	document.cookie = 'prod_view=' + type + ';expires=' + date.toGMTString() + ';path=/';

	return false;
}



/**
 * Sets the default values for category link farm on the homepages
 */
BCNTRY.homepage.initCats = function() {
  BCNTRY.homepage.stretchable = false;
  BCNTRY.homepage.categorycontainer = $('homepagecategories');
  BCNTRY.homepage.category_blocks = yd.getElementsByClassName('category_block', 'div');
  BCNTRY.homepage.thecategories = yd.getElementsByClassName('category', 'div');
  if(BCNTRY.homepage.category_blocks.length > 0 && BCNTRY.homepage.thecategories.length > 0)
  {
    BCNTRY.homepage.stretchable=true;
    BCNTRY.homepage.catwidth=BCNTRY.homepage.thecategories[0].offsetWidth;
  }
};

/**
 * Resizes the Homepage Categories;
 * Called on DOM ready and when screen is resized.
 * Searches for an Element called 'category_collection' which contains the homepage link farm
 */
BCNTRY.homepage.resizeCats = function() {
  var blockwidth = 0;
  var items_per = 0;
  var containerwidth = BCNTRY.homepage.categorycontainer.offsetWidth;
  var no_stretch = false;

  /*Logic to resize blocks to percentages based on how many will fit in a row*/
  items_per = Math.floor(containerwidth / BCNTRY.homepage.catwidth);
  switch(items_per)
  {
    case 1:
      blockwidth = 100;
      break;
    case 2:
      blockwidth = 50;
      break;
    case 3:
      blockwidth = 33;
      break;
    case 4:
      blockwidth = 25;
      break;
    case 5:
      blockwidth = 20;
      break;
    case 6:
      blockwidth = 16;
      break;
    default:
      blockwidth = BCNTRY.homepage.catwidth;
      no_stretch = true;
  }

  /*IE can't handle all of the widths adding up to 100%, so decrement the last block of the row by 1%*/
  for(var i=0;i<BCNTRY.homepage.category_blocks.length;i++)
  {
    if(no_stretch)
    {
       BCNTRY.homepage.category_blocks[i].style.width = blockwidth+"px";
    }
    else
    {
      BCNTRY.homepage.category_blocks[i].style.width = ((i+1) % items_per === 0 ? blockwidth-1 : blockwidth)+"%";
    }
  }
};


/*assigning linkfarm events to the YUI handler at DOM ready and on resize*/
YAHOO.util.Event.onDOMReady(function() {
  if($('homepagecategories'))
  {
    BCNTRY.homepage.initCats();
    if(BCNTRY.homepage.stretchable)
    {
      BCNTRY.homepage.resizeCats();

      ye.addListener(window,"resize", function () {
        BCNTRY.homepage.resizeCats();
      });
    }
  }
});

