var bugTracker="";
var DEBUG=false;
var xsltChooseProc = {};
try{
	var oXML = loadXml("xml/product_listing.xml");
} catch(e) {
     	updateBugTracker(e,"xml/product_listing.xml");
     }
 
function getChooseProc(name) {
	try{
		if(xsltChooseProc[name] == null){
			initChooseProcs(); }
		return xsltChooseProc[name];
	 } catch(e) {
     	updateBugTracker(e,"Error Initializing Arrays");
     }
};
 
function initChooseProcs() {
	try{
    	xsltChooseProc["listing"] = initProc("xml/product_listing.xsl");
    } catch(e) {
     	updateBugTracker(e,"xml/product_listing.xsl");
    }
	try{
    	xsltChooseProc["details"] = initProc("xml/product_details.xsl");
	} catch(e) {
     	updateBugTracker(e,"xml/product_details.xsl");
    }
};
 
function initProc(hrefXslt) {
	try{
		var xsltProc  = new XSLTProcessor();
	} catch(e) {
		updateBugTracker(e,"Error Creating New Object");
    }
	try{
		xsltProc.importStylesheet(loadXml(hrefXslt));
	} catch(e) {
		updateBugTracker(e,"Error Importing XSLT Stylesheet");
    }
	return xsltProc;
};

function loadXml(hrefXml) {

	try{
		var doc = Sarissa.getDomDocument();
		doc.async = false;
		doc.load(hrefXml);
		return doc;
	} catch(e) {
		updateBugTracker(e,"Error Loading XSLT Stylesheet");
    }
};

function initData(){

  	try{
		var newXsltProc = getChooseProc("listing");
		newXsltProc.setParameter("", 'priority', 'mon_vol');//any attribute
		newXsltProc.setParameter("", 'order', 'descending');//ascending or descending
		newXsltProc.setParameter("", 'textType', 'number');//number ot text
		newXsltProc.setParameter("", 'prod_sel', 'all');//copier, printer or fax
		newXsltProc.setParameter("", 'color_sel', 'all');//color or monochrome
		newXsltProc.setParameter("", 'ppm_sel', 'all');//filterPPM
		newXsltProc.setParameter("", 'cppm_sel', 'all');//filterCPPM
		newXsltProc.setParameter("", 'vol_sel', 'all');//filterVol
		newXsltProc.setParameter("", 'mfg_sel', 'all');//filterMan
		var listFrag = newXsltProc.transformToDocument(oXML);
		document.getElementById("listProdContent").innerHTML = new XMLSerializer().serializeToString(listFrag);
		
	} catch(e) {
		updateBugTracker(e,"Error initData");
    }
 };
  
function showProductDetails(prod_name){

	try{
		var newXsltProc = getChooseProc("details");
		newXsltProc.setParameter("", 'prod_name', prod_name);
		var listFrag = newXsltProc.transformToDocument(oXML);
		document.getElementById("tbContent").innerHTML = new XMLSerializer().serializeToString(listFrag);
	
	} catch(e) {
	
		updateBugTracker(e,"Error showProductDetails ");
    }
};
   
function sortResults(){

	try{
		var priority 	= document.prodSortParams.sortBy.options[document.prodSortParams.sortBy.selectedIndex].value;
		var order 		= document.prodSortParams.sortOrder.options[document.prodSortParams.sortOrder.selectedIndex].value;
		var filterProd 	= document.prodSortParams.filterProd.options[document.prodSortParams.filterProd.selectedIndex].value;
		var filterColor = document.prodSortParams.filterColor.options[document.prodSortParams.filterColor.selectedIndex].value;
		var filterPPM 	= document.prodSortParams.filterPPM.options[document.prodSortParams.filterPPM.selectedIndex].value;
		var filterCPPM 	= document.prodSortParams.filterCPPM.options[document.prodSortParams.filterCPPM.selectedIndex].value;
		var filterVol 	= document.prodSortParams.filterVol.options[document.prodSortParams.filterVol.selectedIndex].value;
		var filterMfg 	= document.prodSortParams.filterMfg.options[document.prodSortParams.filterMfg.selectedIndex].value;
		var textType 	= getTextType(priority);
		
		var newXsltProc = getChooseProc("listing");
		newXsltProc.setParameter("", 'priority', priority);// Sort parameter
		newXsltProc.setParameter("", 'order', order);//ascending or descending
		newXsltProc.setParameter("", 'textType', textType);// text or number
		newXsltProc.setParameter("", 'prod_sel', filterProd);//copier, printer or fax
		newXsltProc.setParameter("", 'color_sel', filterColor);//color or monochrome
		newXsltProc.setParameter("", 'ppm_sel', filterPPM);//filterPPM
		newXsltProc.setParameter("", 'cppm_sel', filterCPPM);//filterCPPM
		newXsltProc.setParameter("", 'vol_sel', filterVol);//filterVol
		newXsltProc.setParameter("", 'mfg_sel', filterMfg);//filterMan
		var listFrag = newXsltProc.transformToDocument(oXML);
		document.getElementById("listProdContent").innerHTML = new XMLSerializer().serializeToString(listFrag);
	} catch(e) {
		updateBugTracker(e,"Error showProductListings ");
    }
	
};

function getTextType(key){
	key.toLowerCase(); 
	var lookupTable = new Array();
	
	lookupTable["product_name"] = "text"; 
	lookupTable["product_classification"] = "text"; 
	lookupTable["product_type"] = "text"; 
	lookupTable["manufacturer"] = "text"; 
	lookupTable["ppm"] = "number"; 
	lookupTable["ppm_color"] = "number";
	lookupTable["mon_vol"] = "number";
 
 	var typeValue = lookupTable[key];
	if (typeValue == null){ typeValue = "text"; } 
	
	return typeValue; 
};

function updateBugTracker(errObj,src){
	if(true!= DEBUG){
		return;
	}

	if(src){
		bugTracker+="Source: "+src;
	}

	if(errObj){
		for(var prop in errObj){
			bugTracker+=prop + ": " + errObj[prop];
		}
	}
	
	if(bugTracker !="")
      {
            if(document.getElementById("bugReport"))
            {
                  document.getElementById("bugReport").innerHTML=bugTracker;
				   alert(bugTracker);
            }
            else
            {
                  alert(bugTracker);
            }
      }
};

function changeSortView(linkElem, divId)
{
      var divElem = document.getElementById(divId);

      if (divElem.style.display == 'none')
      {
            document.getElementById(divId).style.display = 'block';
            linkElem.innerHTML = "[collapse]";
			//linkElem.innerHTML = "-";
      }
      else
      {
            document.getElementById(divId).style.display = 'none';
            linkElem.innerHTML = "[expand]";
			//linkElem.innerHTML = "+";
      }
};

function getQueryVariable(variable) {

	var query = window.location.search.substring(1);
	var vars = query.split("&");
	for (var i=0;i<vars.length;i++) {
		var pair = vars[i].split("=");
		if (pair[0] == variable) {
			referral = pair[0];
			initData();
			showProductDetails(pair[1]);
		}else{
			initData();
		}
	}
};