
var fncPriceHash=[];var fncLatestHash=[];var fncModelHash=[];var fncBestMatchNumberHash=[];var currentsort=[];var criterionsHash=[];var validProductsXML=[];var sortCheck="";var listArray=[];function fixArabicLayoutForElement()
{for(var i=0,len=arguments.length;i<len;i++)
{var e=arguments[i];if(e!==null)
{var oldStyle=e.style.border;e.style.border="solid transparent 2px";e.style.border=oldStyle;}}}
function doArabicFix()
{var container=document.getElementById('relative_container');if(container!==null)
{var images=container.getElementsByTagName('img');if(images.length>0)
{if(images[0].className=="header_image_tsr")
{fixArabicLayoutForElement(images[0]);}}}}
function changeView(isList)
{asList=isList;var idToFind=listidmapping[isList];elementChange(idToFind);}
function changeSort(newSort)
{document.fnc_sortBy=newSort;var idToFind=sortidmapping[newSort];elementChange(idToFind);}
function elementChange(idToFind)
{var element=document.getElementById(idToFind);if(element!==null)
{changeColor(element.id);wait(element);window.setTimeout(function(){writeToDiv(productArray)},50);}
else
{log.warn(idToFind+' was not found');}}
function generateAllProductObjectsFromXml(results)
{log.debug('generating all products');var products=results.getElementsByTagName("product");generateAllProductObjectsFromProductsXml(products);}
function generateAllProductObjectsFromProductsXml(productsXML)
{for(var i=0;i<productsXML.length;++i)
{var p=generateProductObjectFromXml(productsXML[i]);if(p!==null)
{productArray.push(p);writeOneProductToDiv(p);}}}
function generateProductObject(resultsXML)
{log.debug("generateProductObject");var results=resultsXML.getElementsByTagName("results").item(0);var product=results.getElementsByTagName("product")[0];var p=generateProductObjectFromXml(product);productArray.push(p);writeOneProductToDiv(p);}
function generateProductObjectFromXml(product)
{try{var productId=""+product.getAttribute("id");var criteriaMatchNumber=""+unescapeXml(getXmlValueOf(product,"cmn"));var hbxNameFnc=""+unescapeXml(getXmlValueOf(product,"hbxName"));var price=""+unescapeXml(getXmlValueOf(product,"price"));var name=""+unescapeXml(getXmlValueOf(product,"gt"));var gridImage=""+unescapeXml(getXmlValueOf(product,"gimg"));var linkText=""+unescapeXml(getXmlValueOf(product,"gtxt"));var linkUrl=""+unescapeXml(getXmlValueOf(product,"gurl"));var listViewTitle=""+unescapeXml(getXmlValueOf(product,"lt"));var listText=""+unescapeXml(getXmlValueOf(product,"ltxt"));var listImage=""+unescapeXml(getXmlValueOf(product,"limg"));var listLinkUrl=""+unescapeXml(getXmlValueOf(product,"lurl"));var listLinkText=""+unescapeXml(getXmlValueOf(product,"llnk"));var previewTitle=""+unescapeXml(getXmlValueOf(product,"pt"));var previewImage=""+unescapeXml(getXmlValueOf(product,"pimg"));var previewLinkText=""+unescapeXml(getXmlValueOf(product,"plnk"));var previewText=""+unescapeXml(getXmlValueOf(product,"ptxt"));var previewLinkUrl=""+unescapeXml(getXmlValueOf(product,"lurl"));var p=new Phone(productId,criteriaMatchNumber,hbxNameFnc,price,name,gridImage,linkText,linkUrl,listViewTitle,listText,listImage,listLinkUrl,listLinkText,previewTitle,previewImage,previewLinkText,previewText,previewLinkUrl);return p;}catch(err){log.error('error generating Product: '+err.toString());}
return null;}
function updateResults(resultsXML)
{log.debug("resultsXML : \n"+resultsXML);document.fnc_productsInXML=resultsXML;log.debug("document.fnc_productsInXML "+document.fnc_productsInXML);log.debug("productArray ->"+productArray);log.debug("productArray.length ->"+productArray.length);if((typeof(productArray)=='undefined')||productArray==null||productArray.length==0)
{setResultPageSelections();updateResultsFirstTime(resultsXML);}else
{updateResultsMatches(resultsXML);}}
function changeListSortOrder(productArray,sort){var tempProdArray=new Array();var sortArr=sort.split(",");for(var i=0;i<sortArr.length;i++){for(var j=0;j<productArray.length;j++){if(productArray[j].getId()==sortArr[i]){tempProdArray[i]=productArray[j];}}}
return tempProdArray;}
function finalizeProductView()
{if(!(isDefined('isDirectCall')&&isDirectCall))
{checkComparisonButtons();}
initLoaderAnimation();var totalNumberOfProducts=productArray.length;var numberOfProductsShowing=0;for(var p in productArray)
{if(productArray[p].getShowing())
{numberOfProductsShowing++;}}
updateProductAmountDisplay(numberOfProductsShowing);if(totalNumberOfProducts===0)
{updateProductAmountDisplay(numberOfProductsShowing);initNoProductsFoundNotification();}
if(totalNumberOfProducts>0&&numberOfProductsShowing===0)
{showAllProductsFilteredNotification();}
else
{hideAllProductsFilteredNotification();}}
function getUnescapedNodeValue(node)
{if((node==null)||(node.nodeValue==null))
{return"";}
var str=unescapeXml(node.nodeValue);return str;}
function unescapeXml(string)
{var fnReplace=function(s)
{switch(s)
{case"&gt;":return">";case"&lt;":return"<";case"&quot;":return"\"";case"&apos;":return"'";case"&amp;":return"&";}}
return string.replace(/&gt;|&lt;|&quot;|&apos;|&amp;/g,fnReplace);}
var imageX=0;var imageY=0;var popupLayerName="popup2";var popupOpen=false;function popupWindowCtrl(productArray,objId,productId){if(popupOpen){closeFncPopup();}
if(!popupOpen){var targetLayer="";if(document.getElementById){targetLayer=document.getElementById(popupLayerName);}else if(document.all){targetLayer=document.all[popupLayerName];}
mouseY=mouseY-300;if(document.getElementsByName("flush_caches").length>0)
{mouseY=mouseY-95;}
targetLayer.style.position="absolute";targetLayer.style.top=mouseY+"px";if(productArray.length>0){for(var i=0;i<productArray.length;i++){if(productArray[i].getId()==productId){if(targetLayer.className=="productPopupHider div_fnc"){generatedContent=productArray[i].toPopupHtml();targetLayer.innerHTML=generatedContent;if(isMoz){targetLayer.className="productPopupOpener_mo div_fnc";}else if(isIE){targetLayer.className="productPopupOpener_ie div_fnc";}}}}}
popupOpen=true;mouseY=0;}}
function closeFncPopup(){if(document.getElementById){document.getElementById(popupLayerName).className="productPopupHider div_fnc";popupOpen=false;}}
function setNumericProductMatch()
{var allSelectedCriteria=listArray.length;;if(document.getElementById)
{var allPageSpans=document.getElementsByTagName("span");for(var i=0;i<allPageSpans.length;i++)
{if(allPageSpans[i].className=="meter_text")
{if(allSelectedCriteria>0){var tempName=""+allPageSpans[i].id;var tempOut=tempName.split("_");var productMatch=tempOut[1];document.getElementById(allPageSpans[i].id).style.display="block";}
else{document.getElementById(allPageSpans[i].id).style.display="none";}}}}}
function setResultPageSelections()
{var cookieValue="";try
{if(document.fnc_resultCookieName)
{cookieValue=getCookieValues(document.fnc_resultCookieName);if(cookieValue!=null)
{log.debug("Cookie present document.fnc_resultCookieName->:"+document.fnc_resultCookieName);log.debug("Cookie present cookieValue->:"+cookieValue);var cookieValues=cookieValue.split(",");asList=cookieValues[0];document.fnc_sortBy=cookieValues[1];showPrice=cookieValues[2];changeView(asList);changeSort(document.fnc_sortBy);}else
{log.debug("Cookie "+document.fnc_resultCookieName+" not present");}}}
catch(err)
{log.error('error in setResultPageSelections: '+err.toString());}}
function setResultPageCookieValues(){var resultCookieValues=asList+","+document.fnc_sortBy+","+showPrice;log.debug("setResultPageCookieValues() resultCookieValues->"+resultCookieValues);createCookie(document.fnc_resultCookieName,resultCookieValues,1);}
function checkPopUpComparisonButton(productId){var trayCookieValue=getCookieValue(trayCookieName);if(trayCookieValue!=null){var trayCookieArray=trayCookieValue.split(',');for(var i=0;i<trayCookieArray.length;i++)
{if(productId==trayCookieArray[i]){buttonCtrl('comparebtn_pu'+productId,'close','true');}}}}
function changeColor(clickedObjectId){if(document.getElementById){var activeClass="bulletwhite blue left thisActive";var nonActiveClass="bulletwhite blue left";var hiddenClass="bullethide";var mainlayer=document.getElementById(clickedObjectId);if(mainlayer===null)
{log.warn('not found: '+clickedObjectId);return false;}
var lastChar=clickedObjectId.charAt(clickedObjectId.length-1);var isClickedSorting=isNaN(parseInt(lastChar));var parentlayer=mainlayer.parentNode;var sublayers=parentlayer.getElementsByTagName("a");for(var co=0;co<sublayers.length-1;co++){var currentLayer=sublayers[co];var layerId=currentLayer.id;var lastChar2=layerId.charAt(layerId.length-1);var isSubLayerSorting=isNaN(parseInt(lastChar2));if(isClickedSorting!=isSubLayerSorting){continue;}
if(layerId.length>1){if(clickedObjectId==layerId){currentLayer.className=activeClass;}else{currentLayer.className=nonActiveClass;}}}}}
function updateResultsFirstTime(results)
{if(isDefined('cookiesEnabled')&&!cookiesEnabled())
{initLoaderAnimation();initCookiesNotEnabledNotification();}
else
{parseOrderListsNoCheckForProducts(results);var productsXML=getProductsXML(results);validProductsXML=removeInvalidProducts(productsXML);validProductsXML=getProductsXML(results);generateNumberOfEmptyDivs(validProductsXML.length);log.debug('criteriaList: '+listArray);productArray=filterProductsFromXML(listArray,validProductsXML);parseOrderLists(results);updateResultsView();}}
function updateResultsMatches(results)
{parseOrderLists(results);updateResultsView(results);}
function updateResultsView(results)
{wait();var hasResults=false;if(results===null||typeof(results)==='undefined')
{results=document.fnc_productsInXML;if(results!==null)
{hasResults=true;}}
else
{hasResults=true;}
updateSortOrder();var allArray=[];for(var i=0,len=validProductsXML.length;i<len;i++)
{allArray[i]=i;}
log.debug('all items: '+allArray);var indexesShowing=[];for(key in productArray)
{var p=productArray[key];var writingSuccessful=writeOneProduct(p);if(writingSuccessful)
{if(p.showThis===true)
{var idOfProductToBeWritten=p.productId;var index=currentsort[idOfProductToBeWritten];Array.push(indexesShowing,index);}}
else
{log.warn('writing was not successful');}}
indexesShowing.sort(function(a,b){return a-b;});log.debug('these should show: '+indexesShowing);for(var i=indexesShowing.length-1;i>=0;i--)
{allArray.splice(indexesShowing[i],1);}
log.debug('hiding these: '+allArray);for(var i=0,len=allArray.length;i<len;i++)
{var divId="addDiv"+allArray[i];var setDiv=document.getElementById(divId);if(setDiv!==null)
{setDiv.style.display="none";}}
if(hasResults)
{finalizeProductView();}
unwait();}
function parseOrderLists(resultsXML)
{try
{var results=resultsXML.getElementsByTagName('results').item(0);fncPriceHash=strToHashCheckProducts(getXmlValueOf(results,'priceorder'));fncLatestHash=strToHashCheckProducts(getXmlValueOf(results,'latest'));fncModelHash=strToHashCheckProducts(getXmlValueOf(results,'model'));fncBestMatchNumberHash=strToHashSeparatedCheckProducts(getXmlValueOf(results,'matchnumber'),'=');var criterions=results.getElementsByTagName("criterion");for(var i=0,len=criterions.length;i<len;i++)
{var id=criterions[i].getAttribute("id");if(criterions[i].firstChild!==null)
{var value=criterions[i].firstChild.nodeValue;criterionsHash[id]=strToHashCheckProducts(value);}
else
{log.debug("none of the products had criterion "+id);criterionsHash[id]=[];}}
log.info("orderlists parsed");}
catch(err)
{log.error("error in parseOrderLists: "+err.toString());}}
function parseOrderListsNoCheckForProducts(resultsXML)
{try
{var results=resultsXML.getElementsByTagName('results').item(0);fncPriceHash=strToHash(getXmlValueOf(results,'priceorder'));fncLatestHash=strToHash(getXmlValueOf(results,'latest'));fncModelHash=strToHash(getXmlValueOf(results,'model'));fncBestMatchNumberHash=strToHashSeparated(getXmlValueOf(results,'matchnumber'),'=');var criterions=results.getElementsByTagName("criterion");for(var i=0,len=criterions.length;i<len;i++)
{var id=criterions[i].getAttribute("id");if(criterions[i].firstChild!==null)
{var value=criterions[i].firstChild.nodeValue;criterionsHash[id]=strToHash(value);}
else
{log.debug("none of the products had criterion "+id);criterionsHash[id]=[];}}
log.info("orderlists parsed without checking for products");}
catch(err)
{log.error("error in parseOrderLists: "+err.toString());}}
function updateSortOrder()
{currentsort=fncModelHash;if(document.fnc_sortBy)
{log.debug('sorting by '+document.fnc_sortBy);if(document.fnc_sortBy==consts.SORT_PRICE)
{currentsort=fncPriceHash;}
else if(document.fnc_sortBy==consts.SORT_MODEL)
{currentsort=fncModelHash;}
else if(document.fnc_sortBy==consts.SORT_LATEST)
{currentsort=fncLatestHash;}}}
function strToHash(str)
{var arr=str.split(',');var results=[];for(var i=0,len=arr.length;i<len;i++)
{results[arr[i]]=i;}
return results;}
function filterProductsFromXML(criteriaList,validProductsXML)
{var localProdArray=[];var keepCounter=0;for(var i=0,len=validProductsXML.length;i<len;i++)
{var prodId=validProductsXML[i].getAttribute("id");var crit=[];var keepThis=true;for(var j=0,len2=criteriaList.length;j<len2;j++)
{var critId=criteriaList[j][0];var usedHash=criterionsHash[critId];if(!usedHash)
{log.warn("didnt find hash for "+critId);}
else if(usedHash[prodId]===undefined)
{keepThis=false;break;}}
if(keepThis)
{keepCounter++;}
var p=generateProductObjectFromXml(validProductsXML[i]);p.setShowing(keepThis);Array.push(localProdArray,p);}
log.debug('kept: '+keepCounter+' out of '+validProductsXML.length);return localProdArray;}
function strToHashCheckProducts(str)
{var arr=str.split(',');var results=[];var idArr=[];for(var k=0,len=productArray.length;k<len;k++)
{idArr[productArray[k].getId()]=true;}
for(var i=0,listpos=0;i<arr.length;++i)
{if(idArr[arr[i]])
{results[arr[i]]=listpos;listpos++;}}
return results;}
function strToHashSeparated(str,separator)
{var arr=str.split(',');var results=[];for(var i=0;i<arr.length;++i)
{var tempVal=arr[i].split(separator);results[tempVal[0]]=tempVal[1];}
return results;}
function strToHashSeparatedCheckProducts(str,separator)
{var arr=str.split(',');var results=[];var i=0;var j=0;var idArr=[];for(var k=0,len=productArray.length;k<len;k++)
{idArr[productArray[k].getId()]=true;}
for(i=0;i<arr.length;++i)
{var tempVal=arr[i].split(separator);if(idArr[tempVal[0]])
{results[tempVal[0]]=tempVal[1];j++;}}
return results;}
function getProductsXML(results)
{log.debug('finding all products');var products=results.getElementsByTagName("product");log.debug('typeof products '+typeof(products));log.debug('found '+products.length+' products');return products;}
function generateNumberOfEmptyDivs(howmany)
{log.debug("generateNumberOfEmptyDivs "+howmany);var div=document.getElementById("phoneList");var buffer='';for(var i=0;i<howmany;i++)
{buffer+="<div id=\"addDiv"+i+"\" class=\"productContainer div_fnc\"></div>\n";}
div.innerHTML=buffer;}
function parseProductsFromXML(productsXML)
{var len=productsXML.length;for(var i=0;i<len;++i)
{var p=generateProductObjectFromXml(productsXML[i]);if(p!==null)
{productArray.push(p);}else
{log.warn('null product found at index '+i);}}}
function writeProducts()
{var len=productArray.length;log.debug('writing '+len+' products');for(var i=0;i<len;++i)
{var p=productArray[i];if(p!==null)
{var writingSuccess=writeOneProduct(p);if(!writingSuccess)
{log.error('failed at '+i+' '+p.toString());}}else
{log.warn('null product found at index '+i);}}}
function writeOneProduct(product)
{var val=currentsort[product.productId];if(typeof(val)=='undefined')
{log.warn('currentsort for '+product+' was undefined');return false;}
var divId="addDiv"+val;var setDiv=document.getElementById(divId);if(setDiv!==null)
{if(asList=="true"||asList==true)
{var html=product.toHtml();}else
{var html=product.toSmallerHtml();}
if(html!=null)
{setDiv.style.display="block";setDiv.innerHTML=html;}else
{productArray.length--;log.warn('html null for product '+product.name+' ['+product.productId+']');return false;}
var viewingPhones=document.getElementById("fnc.msg.viewingPhones");if(viewingPhones!==null)
{viewingPhones.innerHTML=productArray.length;return true;}
else
{log.error("writeOneProduct(): fnc.msg.viewingPhones"+' was not found');return false;}}else
{log.debug(hashToString(currentsort));log.debug(document.fnc_sortBy);log.error(divId+" was not found at writeOneProduct");}
return false;}
function writeToDiv(productArray)
{setResultPageCookieValues();log.debug("writetodiv: "+productArray.length);if(productArray.length>0)
{updateResultsView();}
else
{initList('init');}}
function getProductsByFfid(ffidVal1,ffidVal2){log.debug("getProductsByFfid");var req=newXMLHttpRequest();var handlerFunction=getReadyStateHandler(req,updateResults);req.onreadystatechange=handlerFunction;var url="/fncAjax.do/query";var queryStr=new Query();queryStr.add('ffid',ffidVal1);queryStr.add('ffid2',ffidVal2);queryStr.add('csid',csid);if(locid==null||locid=="null"||locid==""){log.debug("locid: null, 'null' or empty");}
else{log.debug("locid: "+locid);queryStr.add('locid',locid);}
req.open("GET",url+queryStr,true);req.send(null);}
function initResult()
{log.debug("initResult()");if((typeof(isDirectCall)!='undefined')&&(typeof(ffidReqVal1)!='undefined'))
{if((isDirectCall)&&(ffidReqVal1!==null)&&(ffidReqVal1!="null")&&(ffidReqVal1.length>0))
{log.debug("initResult ffidReqVal1: "+ffidReqVal1);log.debug("initResult ffidReqVal2: "+ffidReqVal2);getProductsByFfid(ffidReqVal1,ffidReqVal2);}}}
function getMouseXY(e){if(isIE)
{if(document.documentElement&&!document.documentElement.scrollTop)
tempY=event.clientY+document.body.scrollTop;else if(document.documentElement&&document.documentElement.scrollTop)
tempY=event.clientY+document.documentElement.scrollTop;else if(document.body&&document.body.scrollTop)
tempY=event.clientY+document.body.scrollTop;tempX=event.clientX+document.body.scrollLeft;}
else
{tempX=e.pageX;tempY=e.pageY;}
if(tempX<0)
{tempX=0;}
if(tempY<0)
{tempY=0;}
mouseX=tempX;mouseY=tempY;return true;}
function initLoaderAnimation()
{var loaderIndicatorLayer="";if(hideLoader)
{hideLoader=false;loaderIndicatorLayer=document.getElementById("resultLoadIndicator");loaderIndicatorLayer.style.height="50px"
loaderIndicatorLayer.style.display="block";}
if(!hideLoader)
{loaderIndicatorLayer=document.getElementById("resultLoadIndicator");loaderIndicatorLayer.style.height="0"
loaderIndicatorLayer.style.display="none";hideLoader=true;return true;}}
function initNoProductsFoundNotification()
{var notificationElement="";if(hideLoader)
{notificationElement=document.getElementById("phoneList");notificationElement.style.height="0"
notificationElement.style.display="none";notificationElement=document.getElementById("noProductsInfo");notificationElement.style.height="100px"
notificationElement.style.display="block";}}
function initCookiesNotEnabledNotification()
{var notificationElement="";if(hideLoader)
{notificationElement=document.getElementById("noCookiesInfo");notificationElement.style.height="100px"
notificationElement.style.display="block";}}
function showAllProductsFilteredNotification()
{var notificationElement="";if(hideLoader)
{notificationElement=document.getElementById("noFilteredProductsInfo");notificationElement.style.height="100px"
notificationElement.style.display="block";}}
function hideAllProductsFilteredNotification()
{var notificationElement="";if(hideLoader)
{notificationElement=document.getElementById("noFilteredProductsInfo");notificationElement.style.height="0"
notificationElement.style.display="none";}}
function updateProductAmountDisplay(count)
{log.debug("updateCount "+count);var idToFind="fnc.msg.viewingPhones";var viewingPhones=document.getElementById(idToFind);if(viewingPhones!==null)
{viewingPhones.innerHTML=count;}else
{log.error(idToFind+' was not found');}}
function removeInvalidProducts(validatedProductsXML)
{var originalLength=validatedProductsXML.length;log.debug('validating all '+validatedProductsXML.length+' products');for(var i=0;i<validatedProductsXML.length;++i)
{var p=generateProductObjectFromXml(validatedProductsXML[i]);if(p.productId!=""&&(p.linkUrl!=""&&p.linkUrl!="null"&&p.linkUrl!=null)&&(p.listLinkText!=""&&p.listLinkText!="null"&&p.listLinkText!=null)&&(p.listLinkUrl!=""&&p.listLinkUrl!="null"&&p.listLinkUrl!=null)&&(p.gridImage!=""&&p.gridImage!="null"&&p.gridImage!=null)&&(p.listImage!=""&&p.listImage!="null"&&p.listImage!=null)&&(p.name!=""&&p.name!="null"&&p.name!=null)&&(p.inBriefText!=""&&p.inBriefText!="null"&&p.inBriefText!=null)&&(p.listLinkText!=""&&p.listLinkText!="null"&&p.listLinkText!=null)&&(p.previewImage!=""&&p.previewImage!="null"&&p.previewImage!=null)&&(p.previewTitle!=""&&p.previewTitle!="null"&&p.previewTitle!=null)&&(p.previewText!=""&&p.previewText!="null"&&p.previewText!=null)&&(p.previewLinkUrl!=""&&p.previewLinkUrl!="null"&&p.previewLinkUrl!=null))
{}else
{try{delete fncPriceHash[p.productId];delete fncLatestHash[p.productId];delete fncModelHash[p.productId];delete fncBestMatchNumberHash[p.productId];var len=0;var dbgstr="";delete currentsort[p.productId];delete productArray[p.productId];}catch(err){log.error("Error when removing invalid products: "+err.toString());}
log.warn("product id  "+p.productId+" didn't pass validation.");log.debug("trying to remove invalid product from XML "+validatedProductsXML.length);var node=validatedProductsXML[i];node.parentNode.removeChild(node);log.debug("invalid product dropped from product XML "+validatedProductsXML.length);}}
return validatedProductsXML;}