// ================
// Global Variables
// ================

//Url variable for submit button
productSubmitUrl = 'http://bridor.coveo.absolunet.com/default.asp'

// select names
var ddlCategories = 'ucSearchProduit:ddlCategories'
var ddlSousCategories = 'ucSearchProduit:ddlSousCategories'
var ddlComposante = 'ucSearchProduit:ddlComposante'
var ddlCuisson = 'ucSearchProduit:ddlCuisson'
var txtMotsCles = 'ucSearchProduit:txtMotsCles'

// array variables that correspond to database tables
var arrayProdCatList = new Array()
var m03ActivitesList = new Array()
var m02CategoriesList = new Array()
var m05ComposantesList = new Array()
var m04CuissonsList = new Array()
var arrayFilteredList = new Array()
var arrayCatFilteredList = new Array()
var arraySousCatFilteredList = new Array()
var arrayComposanteFilteredList = new Array()
var arrayCuissonFilteredList = new Array()

function noenterprod(key_event) 
{
  checkCoveoSubmitProd(key_event);
  if (document.all) {
    //Probably Internet Explorer 4 and later
    return !(window.event && window.event.keyCode == 13); 
  }else{ 
	// Probably Netscape 6 and later
	return !(key_event.which && key_event.which == 13);
  }
}

function checkCoveoSubmitProd(key_event)
{
	if (document.all) {
        //Probably Internet Explorer 4 and later
        if (event && event.keyCode == 13)
			submitProductSearch(document.forms[0], document.forms[0].langValue.value);
		else
			return true;
    }
    else { 
        // Probably Netscape 6 and later
        if (key_event.which == 13)
			submitProductSearch(document.forms[0], document.forms[0].langValue.value);
		else
			return true;
    }
}


// =========
// Functions
// =========

//returns querystring parameters as an array
function getArgs() {
		var args = new Object();
		var query = location.search.substring(1);	//Get Querystring
		var pairs = query.split("&");
		for(var i = 0; i < pairs.length; i++) {
			var pos = pairs[i].indexOf('=');		//look for "name=value"
			if (pos == -1) continue;				//if not found, skip
			var argname = pairs[i].substring(0,pos);	//Extract the name
			var value = pairs[i].substring(pos+1);		//Extract the value
			args[argname] = unescape(value);			//Store as property
			//alert('value of ' + argname + ' is ' + args[argname])
		}	
		return args;
}

//simule le request de vb

function request(p){
    var qString = document.location.search;
    var oneParam;
    if (qString){
        //enlever le ?
        qString = qString.replace(/^\?/gi,"");
        var tabParams = qString.split("&");
        for (var i=0 ;i<tabParams.length;i++){
                oneParam = tabParams[i].split("=");
                if (oneParam.length = 2){
                    if (oneParam[0].toLowerCase()== p.toLowerCase())
                            return unescape(oneParam[1]);
                }
        }
    } 
    return "";
}



//Used to hold combo itemSearch object
function itemSearch(Id, Value) {
	this.itemId = Id
	this.itemName = Value
}

//Used to hold Categories-Produits object
function objProdCat (CatId, Categorie, SousCatId, SousCat, ComposanteId, Composante, CuissonId, Cuisson) {
	this.CatId = CatId
	this.Categorie = Categorie
	this.SousCatId = SousCatId
	this.SousCat = SousCat
	this.ComposanteId = ComposanteId
	this.Composante = Composante
	this.CuissonId = CuissonId
	this.Cuisson = Cuisson
}


//Combo event handler
function filterLists(currentForm) {
	CatId = parseInt(currentForm.elements[ddlCategories].value);
	SousCatId = parseInt(currentForm.elements[ddlSousCategories].value);
	ComposanteId = parseInt(currentForm.elements[ddlComposante].value);
	CuissonId = parseInt(currentForm.elements[ddlCuisson].value);
	//alert(CatId + '**' + SousCatId + '**'+ ComposanteId + '**'+ CuissonId + '**');
	fillComboLists(CatId, SousCatId, ComposanteId, CuissonId, currentForm)
}


//Build filtered arrays used to fill combos
function fillComboLists(_catId, _sousCatId, _composanteId, _cuissonId, currentForm) {
	var currentCatIndex = 0
	var currentSousCatIndex = 0
	var currentComposanteIndex = 0
	var currentCuissonIndex = 0
	var criteriaCnt = 0
	var criteria = ''
	var currentItem

	// initialize to 0 if empty
	if (_catId == undefined) { _catId = 0 }
	if (_sousCatId == undefined) { _sousCatId = 0 }
	if (_composanteId == undefined) { _composanteId = 0 }
	if (_cuissonId == undefined) { _cuissonId = 0 }

	// build criteria
	if (parseInt(_catId) > 0) {
		criteriaCnt = 1
		criteria = 'parseInt(arrayProdCatList[cnt].CatId) == _catId'
	}
	if (parseInt(_sousCatId) > 0) {
		criteriaCnt += 1
		if (criteria.length > 0) criteria += ' && '
		criteria += 'parseInt(arrayProdCatList[cnt].SousCatId) == _sousCatId'
	}
	if (parseInt(_composanteId) > 0) {
		criteriaCnt += 1
		if (criteria.length > 0) criteria += ' && '
		criteria += 'parseInt(arrayProdCatList[cnt].ComposanteId) == _composanteId'
	}
	if (parseInt(_cuissonId) > 0) {
		criteriaCnt += 1
		if (criteria.length > 0) criteria += ' && '
		criteria += 'parseInt(arrayProdCatList[cnt].CuissonId) == _cuissonId'
	}
	
	// If any parameters were specified, filter ProdCat list
	arrayFilteredList = new Array()
	if ( criteriaCnt > 0 ) {
		var newIndex = 0	
		var match = false
		for (var i = 0; i < arrayProdCatList.length; i++) {
			// if criteria evaluates to true, keep the record
			eval('match = ' + criteria.replace(/cnt/g, i )) 
			if ( match == true ) {
				arrayFilteredList[newIndex] = arrayProdCatList[i]
				newIndex++
			}
		}

		arrayCatFilteredList = new Array()
		arraySousCatFilteredList = new Array()
		arrayComposanteFilteredList = new Array()
		arrayCuissonFilteredList = new Array()
		
		for (var i = 0; i < arrayFilteredList.length; i++) {
			// if item doesn't exist, continue
			if (!arrayFilteredList[i]) continue;
			
			// extract Categorie values and create arrayCatFilteredList
			currentItem = null
			currentItem = new itemSearch(arrayFilteredList[i].CatId, arrayFilteredList[i].Categorie)
			if (!itemPresent(arrayCatFilteredList, currentItem.itemId)) {
				arrayCatFilteredList[currentCatIndex++] = currentItem
			}
			
			// extract SousCategorie values create arraySousCatFilteredList
			currentItem = null
			currentItem = new itemSearch(arrayFilteredList[i].SousCatId, arrayFilteredList[i].SousCat)
			if (!itemPresent(arraySousCatFilteredList, currentItem.itemId)) {
				arraySousCatFilteredList[currentSousCatIndex++] = currentItem
			}

			// extract Composante values create arrayComposanteFilteredList
			currentItem = null
			currentItem = new itemSearch(arrayFilteredList[i].ComposanteId, arrayFilteredList[i].Composante)
			if (!itemPresent(arrayComposanteFilteredList, currentItem.itemId)) {
				arrayComposanteFilteredList[currentComposanteIndex++] = currentItem
			}

			// extract Cuisson values create arrayCuissonFilteredList
			currentItem = null
			currentItem = new itemSearch(arrayFilteredList[i].CuissonId, arrayFilteredList[i].Cuisson)
			if (!itemPresent(arrayCuissonFilteredList, currentItem.itemId)) {
				arrayCuissonFilteredList[currentCuissonIndex++] = currentItem
			}
		}	
	}
	
	// Fill Categorie Combo
	if ( (_catId > 0 && criteriaCnt <= 1) || criteriaCnt == 0 )
		// use original Categorie list
		buildCombo(currentForm.elements[ddlCategories], itemCategorie, m03ActivitesList, _catId)
	else
		// use filtered list
		buildCombo(currentForm.elements[ddlCategories], itemCategorie, arrayCatFilteredList, _catId)

	// Fill SousCategorie Combo
	if ( (_sousCatId > 0 && criteriaCnt <= 1) || criteriaCnt == 0 )
		// use original Categorie list
		buildCombo(currentForm.elements[ddlSousCategories], itemSousCat, m02CategoriesList, _sousCatId)
	else
		// use filtered list
		buildCombo(currentForm.elements[ddlSousCategories], itemSousCat, arraySousCatFilteredList, _sousCatId)

	// Fill Composante Combo
	if ( (_composanteId > 0 && criteriaCnt <= 1) || criteriaCnt == 0 )
		// use original Categorie list
		buildCombo(currentForm.elements[ddlComposante], itemComposante, m05ComposantesList, _composanteId)
	else
		// use filtered list
		buildCombo(currentForm.elements[ddlComposante], itemComposante, arrayComposanteFilteredList, _composanteId)

	// Fill Cuisson Combo
	if ( (_cuissonId > 0 && criteriaCnt <= 1) || criteriaCnt == 0 )
		// use original Categorie list
		buildCombo(currentForm.elements[ddlCuisson], itemCuisson, m04CuissonsList, _cuissonId)
	else
		// use filtered list
		buildCombo(currentForm.elements[ddlCuisson], itemCuisson, arrayCuissonFilteredList, _cuissonId)
	
}

// helper function: populate combo
function buildCombo(currentCombo, firstItem, itemArray, selectedValue) {
	var item 
	var selectedIndex = 0
	
	// initialize combo values
	currentCombo.options.length = 0
	
	// add first (default) item
	item = new Option(firstItem, 0)
	currentCombo.options[0] = item

	// add each item
	for (var i = 1; i <= itemArray.length; i++) {
		// check if current index has a value
		if (itemArray[i-1]) {
			// add combo item
			currentCombo.options[i] = new Option(itemArray[i-1].itemName, itemArray[i-1].itemId)

			// check if selectedValue
			if (parseInt(itemArray[i-1].itemId) == parseInt(selectedValue))	
				selectedIndex = i
		}
	}
	
	// update selectedIndex
	currentCombo.selectedIndex = selectedIndex
}


// helper function: check for Id
function itemPresent(array, id) {
	var bln = false
	
	if (parseInt(id) == 0) return true
	
	for (var i = 0; i < array.length; i++) {
		if (parseInt(array[i].itemId) == parseInt(id)) {
			bln = true 
			break
		}
	}
	// return result
	return bln
}

// ==============
// Product Search
// ==============
// Submit product search request to Coveo 
// section = "produit"
// currentForm = pointer to current document.form object
function submitProductSearch(currentForm, currentLang) {
	var query; 
	var catId = parseInt(currentForm.elements[ddlCategories].value);
	var sousCatId = parseInt(currentForm.elements[ddlSousCategories].value);
	var composanteId = parseInt(currentForm.elements[ddlComposante].value);
	var cuissonId = parseInt(currentForm.elements[ddlCuisson].value);
	var motsCles = currentForm.txtMotsCles.value;
	motsCles = trim(motsCles);
	
	// build new querystring
	query = '?lang=' + currentLang.toUpperCase();
	query += '&catId=' + catId.toString();
	query += '&scatId=' + sousCatId.toString();
	query += '&compoId=' + composanteId.toString();
	query += '&cuisId=' + cuissonId.toString();
	query += '&motsCles=' + escape(motsCles);
	
	// add search query
	var temp = escape(motsCles.toString());
	if (temp == "") 
		temp = "@uri";
		
	query += '&q=' + temp;
	query += '%20@section=produit';
	if (catId > 0) query += '%20@catId=' + catId.toString();
	if (sousCatId > 0) query += '%20@scatId=' + sousCatId.toString();
	if (composanteId > 0) query += '%20@compoId=' + composanteId.toString();
	if (cuissonId > 0) query += '%20@cuisId=' + cuissonId.toString();
	if (currentLang.toLowerCase() == 'fr-ca') 
		query += '%20@syslanguage=french';
	else
		query += '%20@syslanguage=english';
	
	window.location = productSubmitUrl + query;
	return false;
}

