﻿ 
    /*
    ========================================================================================================
    Created By     : NManga
    JSFile Name    : TemplateFeedHandler.JS
    Comment        : Primary JS File for UI XML Feed Implementation
    Created        : 09232007 - File Creation
    Updated        : -- VERSION HISTORY --
                   : 09282007 - Added renderOfferCategory();
                   : 09292007 - Refactored JS;
                   : 09302007 - Added makeRedirectLink(); Removed dependency on uv variable from Generate
                   : 10082007 - Added checkFile(); Modified renderOfferCategories();
                   : 10112007 - Added makeNewWindow();
                   : 10142007 - Added FileName length check to checkFile(); 
                   : 10182007 - Swappeed CSS propery from 'style.visibility' to 'style.display';
                   : 03122008 - Yan Yan, reduced the page loading time.
                   : 07302009 - Yan Yan, added disclaimer.
    ========================================================================================================
    */
    
    getURLParam = function(oArg){
        var sDocumentURL = location.search;    
        if (sDocumentURL.indexOf(oArg) >= 0){
            var oPntr = sDocumentURL.indexOf(oArg) + oArg.length + 1;
            if (sDocumentURL.indexOf("&", oPntr) >= 0){
                return sDocumentURL.substring(oPntr, sDocumentURL.indexOf("&", oPntr));
            }
            else{
                return sDocumentURL.substring(oPntr, sDocumentURL.length);
            }
        }
        else{
            return null;
        }
     }
     
    /* Define Global XML Document */
    var xmlDoc;
    /* Get Page Number */
    //var sCurrentPage = getURLParam("PNUM");
    //var sCurrentPage = PageNum;
    /* Get Debug Flag */
    var bIsDebugOn = getURLParam("Debug");
    var bIsVerbose = getURLParam("Verbose");
    var sRedirectURL = "http://links.ncsreporting.com/redirect.aspx";
    var sGenericXMLError = "Empty XML from FeedHandler.\n";
    var sEmptyChildNodesError = "Empty Child Nodes.\n";
    var iMaxFeaturedOffers = 4;
    /* Used to check Destination Files */
    var oXMLHttp; 
    var ApplicationId=2000;/*09/29/2009*/   
    var CategoryId=0;
    
	/*Add the disclaimer, added by Yan Yan on 07/30/2009*/
	try	{	
		if(!document.getElementById('aprDesOfferCat') && !document.getElementById('aprDesOffer')){	
			document.getElementById('h1').innerHTML=document.getElementById('h1').innerHTML+'<div id="aprDesOfferCat" class="aprDes" style="width:500px;display:block;">* See the online application for details about terms and conditions for these offers. Every reasonable effort has been made to maintain accurate information. However all credit card information is presented without warranty. After you click on the offer you desire you will be directed to the credit card issuer\'s web site where you can review the terms and conditions for your selected offer.</div>'; 
		}else{	
			if(document.getElementById('aprDesOfferCat')){document.getElementById('aprDesOfferCat').style.display = 'block';}
			if(document.getElementById('aprDesOffer')){document.getElementById('aprDesOffer').style.display = 'block';}	
		}
	}catch (e)	{}

    /* Process the XML Feed */
    processXMLFeed();     
 
	
    function processXMLFeed(){  
        try{
            /* STEP 1::Check Payload from FeedHandler */
            checkXMLResponseFromFeedHandler();
                    
            /* Step 2:: Check User Agent - IE*/
            if (window.ActiveXObject){
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.async = "false";
                xmlDoc.onreadystatechange = verifyLoadState;
                xmlDoc.loadXML(sXML);
            } 
            /* Mozilla, Firefox, Opera, etc. */
            else{
                /* var xmlDoc = document.implementation.createDocument("ns","root",null); */
                var parser = new DOMParser();
                xmlDoc=parser.parseFromString(sXML,"text/xml");
            }

            /* STEP 3:: documentElement always represents the root node */
            var xDocument = xmlDoc.documentElement;
            if (xDocument.hasChildNodes()){
                var sPageType;
                sPageType = xDocument.getAttribute("PageType");
                CategoryId = xDocument.getAttribute("CategoryId");
                if(!CategoryId ){CategoryId =0};
                switch (sPageType){
                    case "1": /* Request is for Index Page */
                        ApplicationId=2001;
                        renderFeaturedCard(xDocument.firstChild);
                        ApplicationId=2000;
                        renderFeaturedOffers(xDocument.lastChild);
                        break
                    case "2": /* Request is for Offer Categories Page */
                        ApplicationId=2002;
                        renderOfferCategories(xDocument.firstChild);
                        break
                    case "3": /* Request is for Offer Details Page */
                        ApplicationId=2003;
                        renderOfferDetails(xDocument.firstChild);
                        break
                    default:
                        throw "Unknown Page Type specified!\n";
                }
            }               
            else{
                /* Child Nodes not found! */
                throw sEmptyChildNodesError;
                //TODO: Clean the DOC?
            }               
        }
        catch(e){
            /* Catch/Display Error */
            if (bIsDebugOn == "Y"){
                alert(e);
            }
        }
    }
    
    /* Function to check Payload from FeedHandler */
    function checkXMLResponseFromFeedHandler(){
        if(sXML){
            if (bIsVerbose == "Y"){$("footer", sXML, "HTML")}
        }
        else{
            $("footer", sGenericXMLError, "HTML")
            throw sGenericXMLError + "\n";
        }
    }
    
    /* Function to render Featured Card (If Exists) */
    function renderFeaturedCard(oFeaturedCardDOCFragment){
        /* HIDE FEATUREDCARD(FC) CONTAINER IF FC IS NOT AVAILABLE */
        if (getXMLChildNodeValue(oFeaturedCardDOCFragment, "OfferName", 0).length == 0){
            if (document.getElementById("featureCard")){
                document.getElementById("featureCard").style.display = "none";
            }
        }
        else{
            /* Check if OfferDetails Page Exists */
//            if (checkFile(getXMLChildNodeValue(oFeaturedCardDOCFragment, "FileName", 0)) == true){
//                $("FCCardArtSMLink", getXMLChildNodeValue(oFeaturedCardDOCFragment, "FileName", 0), "LINK")
//                $("FCName", getXMLChildNodeValue(oFeaturedCardDOCFragment, "FileName", 0), "LINK") 
//                $("FCMoreBtn", getXMLChildNodeValue(oFeaturedCardDOCFragment, "FileName", 0), "LINK")
//            }
//            else{
//                /* Link TOCardArtSMLink Link --> Bank Website */
//                $("FCCardArtSMLink", makeRedirectLink(oFeaturedCardDOCFragment, 0), "LINK")
//                makeNewWindow("FCCardArtSMLink");
//                /* Link FCName Link --> Bank Website */
//                $("FCName", makeRedirectLink(oFeaturedCardDOCFragment, 0), "LINK")
//                makeNewWindow("FCName");
//                /* Link FCMoreBtn Link --> Bank Website */
//                $("FCMoreBtn", makeRedirectLink(oFeaturedCardDOCFragment, 0), "LINK")
//                makeNewWindow("FCMoreBtn");
//            } 
            
           /*Modified by Yan on 03/12/2008. 
            Moved the functionality of checkFile to when end user actually clicks the links 
            in order to reduce page loading time. */           
            var strFileName =getXMLChildNodeValue(oFeaturedCardDOCFragment, "FileName", 0);
            var strRedirectLink = makeRedirectLink(oFeaturedCardDOCFragment, 0);          
            $("FCCardArtSMLink", strRedirectLink, "LINK");
            addClickEvent("FCCardArtSMLink", strFileName, strRedirectLink);    
            $("FCName", strRedirectLink, "LINK");
            addClickEvent("FCName", strFileName, strRedirectLink);    
            $("FCMoreBtn", strRedirectLink, "LINK");
            addClickEvent("FCMoreBtn", strFileName, strRedirectLink);    
              
                
                       
            $("FCCardArtSM", getXMLChildNodeValue(oFeaturedCardDOCFragment, "SmallCreative", 0), "IMG")
            $("FCCardArtSM", getXMLChildNodeValue(oFeaturedCardDOCFragment, "OfferName", 0), "ALT")
            $("FCCardArtSMBtn", makeRedirectLink(oFeaturedCardDOCFragment, 0), "LINK")
            $("FCName", getXMLChildNodeValue(oFeaturedCardDOCFragment, "OfferName", 0), "HTML") 
            $("FCDetail", getXMLChildNodeValue(oFeaturedCardDOCFragment, "OfferTextDetails", 0), "HTML") 
             
        }
    }
    
    /* Function to render Featured Offers (If Exists) */
    function renderFeaturedOffers(oFeaturedOffersDOCFragment){
        var iCurrentFeaturedOffers = oFeaturedOffersDOCFragment.childNodes.length;
        if (iCurrentFeaturedOffers == 0){
            /* HIDE TOPOFFERS(TO) CONTAINER IF TO ARE NOT AVAILABLE */
            if (document.getElementById("topOffers")){
                document.getElementById("topOffers").style.display = "none";
              }
        }
        else{
            for(var i=0; i<iMaxFeaturedOffers; i++){
                $("TOOfferName-" + (i+1), getXMLChildNodeValue(oFeaturedOffersDOCFragment, "OfferName", i), "HTML")
                
                /* Check if OfferDetails Page Exists */
//                if (checkFile(getXMLChildNodeValue(oFeaturedOffersDOCFragment, "FileName", i)) == true){
//                    $("TOCardArtSMLink-" + (i+1), getXMLChildNodeValue(oFeaturedOffersDOCFragment, "FileName", i), "LINK")
//                    $("TOOfferName-" + (i+1), getXMLChildNodeValue(oFeaturedOffersDOCFragment, "FileName", i), "LINK")
//                }
//                else{
//                    /* Link TOCardArtSMLink Link --> Bank Website */
//                    $("TOCardArtSMLink-" + (i+1), makeRedirectLink(oFeaturedOffersDOCFragment, i), "LINK")
//                    makeNewWindow("TOCardArtSMLink-" + (i+1));
//                    $("TOOfferName-" + (i+1), makeRedirectLink(oFeaturedOffersDOCFragment, i), "LINK")
//                    makeNewWindow("TOOfferName-" + (i+1));                    
//                }

                 /*Modified by Yan on 03/12/2008. 
                Moved the functionality of checkFile to when end user actually clicks the links 
                in order to save page loading time. */           
                var strFileName =getXMLChildNodeValue(oFeaturedOffersDOCFragment, "FileName", i);
                var strRedirectLink = makeRedirectLink(oFeaturedOffersDOCFragment, i);
                $("TOCardArtSMLink-" + (i+1), strRedirectLink, "LINK");
                addClickEvent("TOCardArtSMLink-" + (i+1), strFileName, strRedirectLink);            
                $("TOOfferName-" + (i+1), strRedirectLink, "LINK");
                addClickEvent("TOOfferName-" + (i+1), strFileName, strRedirectLink);    
                
                
                $("TOCardArtSM-" + (i+1), getXMLChildNodeValue(oFeaturedOffersDOCFragment, "SmallCreative", i), "IMG")
                $("TOCardArtSM-" + (i+1), getXMLChildNodeValue(oFeaturedOffersDOCFragment, "OfferName", i), "ALT")
                $("TOCardArtSMBtn-" + (i+1), makeRedirectLink(oFeaturedOffersDOCFragment, i), "LINK")
                $("TOIntroAPR-" + (i+1), getXMLChildNodeValue(oFeaturedOffersDOCFragment, "IntroAPR", i), "HTML")
                $("TORegularAPR-" + (i+1), getXMLChildNodeValue(oFeaturedOffersDOCFragment, "RegularAPR", i), "HTML")
                $("TOIntroPeriod-" + (i+1), getXMLChildNodeValue(oFeaturedOffersDOCFragment, "IntroPeriod", i), "HTML")
                $("TOAnnualFee-" + (i+1), getXMLChildNodeValue(oFeaturedOffersDOCFragment, "AnnualFee", i), "HTML")
                $("TODetail-" + (i+1), getXMLChildNodeValue(oFeaturedOffersDOCFragment, "OfferTextDetails", i), "HTML")
            }
            
            /* STEP 2: Hide Unused Featured Offers Containers */
            if (iCurrentFeaturedOffers < iMaxFeaturedOffers){
                for (var k=iCurrentFeaturedOffers; k<iMaxFeaturedOffers; k++){
                    if (document.getElementById("topOffer" + (k+1))){
                        document.getElementById("topOffer" + (k+1)).style.display = "none";
                    }
                }
            }
        }
    }
    
    /* Creates NCS Link for Click Tracking */
    function makeRedirectLink(xDocument, iNodePos){
        var lOfferID = getXMLChildNodeValue(xDocument, "OfferId", iNodePos);
        var lCreativeID = getXMLChildNodeValue(xDocument, "SmallCreativeId", iNodePos);
        /* TODO: Add check for Malformed Link */        
        var ret=sRedirectURL + "?of=" + lOfferID + "&af=" + af + "&ac=" + ac + "&cr=" + lCreativeID + "&uv=" + uv;
        ret = ret + "&aid=" + ApplicationId + "&cat=" + CategoryId + "&pos=" + (iNodePos+1);
        //getUV();//Modified by Yan 0n 03/12/2008 to avoid calling same function multiple times for performance
        return ret;
    }
    
    /* Make Links Open up in New Win() */
    function makeNewWindow(oElem){
        if (document.getElementById(oElem)){                            
            document.getElementById(oElem).target = "_blank";                            
        }
    }
    
    /* Function to paint/populate Offer Details Container */
    function renderOfferDetails(oOfferDetailDOCFragment){
        /* Hide Content Container if OfferDetails are not available */
        if (getXMLChildNodeValue(oOfferDetailDOCFragment, "OfferName", 0).length == 0){
            if (document.getElementById("content")){
                document.getElementById("content").style.display = "none";
            }
        }
        else{       
            $("OfferNameTitle", getXMLChildNodeValue(oOfferDetailDOCFragment, "OfferName", 0), "HTML") 
            $("CreativeTitle", getXMLChildNodeValue(oOfferDetailDOCFragment, "OfferName", 0), "HTML")
            $("CardArtSMlink", makeRedirectLink(oOfferDetailDOCFragment, 0), "LINK")
            $("CardArtSM", getXMLChildNodeValue(oOfferDetailDOCFragment, "SmallCreative", 0), "IMG")
            $("CardArtSM", getXMLChildNodeValue(oOfferDetailDOCFragment, "OfferName", 0), "ALT")
            $("CardArtSMBtn", makeRedirectLink(oOfferDetailDOCFragment, 0), "LINK") 
            $("OfferText", getXMLChildNodeValue(oOfferDetailDOCFragment, "OfferTextdetails", 0), "HTML")
            $("CardArtLGlink", makeRedirectLink(oOfferDetailDOCFragment, 0), "LINK")
            $("CardArtLG", getXMLChildNodeValue(oOfferDetailDOCFragment, "BigCreative", 0), "IMG")
            $("CardArtLG", getXMLChildNodeValue(oOfferDetailDOCFragment, "OfferName", 0), "ALT")
            $("CardArtLGBtn", makeRedirectLink(oOfferDetailDOCFragment, 0), "LINK")        
            $("Purchases_IntroRate", getXMLChildNodeValue(oOfferDetailDOCFragment, "PurchasesIntroRate", 0), "HTML")
            $("Purchases_IntroRate2", getXMLChildNodeValue(oOfferDetailDOCFragment, "PurchasesIntroRate", 0), "HTML")
            $("Purchases_IntroRate3", getXMLChildNodeValue(oOfferDetailDOCFragment, "PurchasesIntroRate", 0), "HTML")
            $("Purchases_IntroRate2", getXMLChildNodeValue(oOfferDetailDOCFragment, "PurchasesIntroRate", 0), "HTML")
            $("Purchases_IntroPeriod", getXMLChildNodeValue(oOfferDetailDOCFragment, "PurchasesIntroPeriod", 0), "HTML")
            $("Purchases_IntroPeriod2", getXMLChildNodeValue(oOfferDetailDOCFragment, "PurchasesIntroPeriod", 0), "HTML")
            $("Purchases_IntroPeriod3", getXMLChildNodeValue(oOfferDetailDOCFragment, "PurchasesIntroPeriod", 0), "HTML")
            $("BalanceTransfers_IntroRate", getXMLChildNodeValue(oOfferDetailDOCFragment, "BalanceTransfersIntroRate", 0), "HTML")
            $("BalanceTransfers_IntroRate2", getXMLChildNodeValue(oOfferDetailDOCFragment, "BalanceTransfersIntroRate", 0), "HTML")
            $("BalanceTransfers_IntroRate3", getXMLChildNodeValue(oOfferDetailDOCFragment, "BalanceTransfersIntroRate", 0), "HTML")
            $("BalanceTransfers_IntroPeriod", getXMLChildNodeValue(oOfferDetailDOCFragment, "BalanceTransfersIntroPeriod", 0), "HTML")
            $("BalanceTransfers_IntroPeriod2", getXMLChildNodeValue(oOfferDetailDOCFragment, "BalanceTransfersIntroPeriod", 0), "HTML")
            $("BalanceTransfers_IntroPeriod3", getXMLChildNodeValue(oOfferDetailDOCFragment, "BalanceTransfersIntroPeriod", 0), "HTML")
            $("Purchases_APR", getXMLChildNodeValue(oOfferDetailDOCFragment, "PurchasesGoToRate", 0), "HTML")
            $("BalanceTransfers_APR", getXMLChildNodeValue(oOfferDetailDOCFragment, "BalanceTransferGoToRate", 0), "HTML")
            $("CashAdvances_APR", getXMLChildNodeValue(oOfferDetailDOCFragment, "CashAdvanceGoToRate", 0), "HTML")
            $("Penality_APR", getXMLChildNodeValue(oOfferDetailDOCFragment, "PenalityGoToRate", 0), "HTML")
            $("AnnualFee", getXMLChildNodeValue(oOfferDetailDOCFragment, "AnnualFee", 0), "HTML")
            $("LateFee", getXMLChildNodeValue(oOfferDetailDOCFragment, "LateFee", 0), "HTML")
            $("CashAdvanceFee", getXMLChildNodeValue(oOfferDetailDOCFragment, "CashAdvanceFee", 0), "HTML")
            $("BalanceTransferFee", getXMLChildNodeValue(oOfferDetailDOCFragment, "BalanceTransferFee", 0), "HTML")
            $("ForeignCurrencyExchangeFee", getXMLChildNodeValue(oOfferDetailDOCFragment, "ForeignCurrencyExchangeFee", 0), "HTML")
            $("Perks", getXMLChildNodeValue(oOfferDetailDOCFragment, "Perks", 0), "HTML")
            /* Hide Perks Container if Perks Element does not have a valid value */
            if (getXMLChildNodeValue(oOfferDetailDOCFragment, "Perks", 0).length == 0){
                if (document.getElementById("PerksTitle")){
                    document.getElementById("PerksTitle").style.display = "none";
                }
            }
        }
    }   
           
    function renderOfferCategories(oOfferCategoriesDOCFragment){
        /* Function scope variables */
        var iStartOffer;
        var iEndOffer;
        var iMaxPages = 20;
        var iMaxOffers = 200;
        var iMaxOfferCategories;
        var bHideOfferCategories = false;
        /* Get Page Number */
        /* var sCurrentPage = getURLParam("PNUM") */
        /* This is now hardcoded in Generate */
        var sCurrentPage = PageNum;
        var iNumOffers = oOfferCategoriesDOCFragment.childNodes.length;
        var iThisPage = 1;
        var iNumOffersPerPage = 10;
        
        if (iNumOffers <= 10) {
            var iNumPages = 1;  
        }
        else{                
            /* Round it off to the smallest integer greater than or equal to iNumOffers */
            var iNumPages = Math.ceil(iNumOffers/iNumOffersPerPage);
        }                
        switch (sCurrentPage){
            case 1:
              iStartOffer = 0;
              iMaxOfferCategories = 10;
              if (iNumOffers >= 10){
                iEndOffer = 10;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }                          
              break
            case 2:
              iStartOffer = 10;
              iMaxOfferCategories = 20;
              if (iNumOffers >= 20){
                iEndOffer = 20;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 3:
              iStartOffer = 20;
              iMaxOfferCategories = 30;
              if (iNumOffers >= 30){
                iEndOffer = 30;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 4:
              iStartOffer = 30;
              iMaxOfferCategories = 40;
              if (iNumOffers >= 40){
                iEndOffer = 40;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 5:
              iStartOffer = 40;
              iMaxOfferCategories = 50;
              if (iNumOffers >= 50){
                iEndOffer = 50;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 6:
              iStartOffer = 50;
              iMaxOfferCategories = 60;
              if (iNumOffers >= 60){
                iEndOffer = 60;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 7:
              iStartOffer = 60;
              iMaxOfferCategories = 70;
              if (iNumOffers >= 70){
                iEndOffer = 70;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 8:
              iStartOffer = 70;
              iMaxOfferCategories = 80;
              if (iNumOffers >= 80){
                iEndOffer = 80;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 9:
              iStartOffer = 80;
              iMaxOfferCategories = 90;
              if (iNumOffers >= 90){
                iEndOffer = 90;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break  
            case 10:
              iStartOffer = 90;
              iMaxOfferCategories = 100;
              if (iNumOffers >= 100){
                iEndOffer = 100;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 11:
              iStartOffer = 100;
              iMaxOfferCategories = 110;
              if (iNumOffers >= 110){
                iEndOffer = 110;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 12:
              iStartOffer = 110;
              iMaxOfferCategories = 120;
              if (iNumOffers >= 120){
                iEndOffer = 120;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 13:
              iStartOffer = 120;
              iMaxOfferCategories = 130;
              if (iNumOffers >= 130){
                iEndOffer = 130;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 14:
              iStartOffer = 130;
              iMaxOfferCategories = 140;
              if (iNumOffers >= 140){
                iEndOffer = 140;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break
            case 15:
              iStartOffer = 140;
              iMaxOfferCategories = 150;
              if (iNumOffers >= 150){
                iEndOffer = 150;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
              break            
            default:
            /* Always default to the First Page*/
              iStartOffer = 0;
              iMaxOfferCategories = 10;
              if (iNumOffers >= 10){
                iEndOffer = 10;
              }
              else{
                iEndOffer = iNumOffers;
                bHideOfferCategories = true;
              }
        }                
        
        /* STEP 1: Populate Offer Category Containers */
        for(var i=iStartOffer; i<iEndOffer; i++){
            $("OfferName-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "OfferName", i), "HTML")            
            /* Check if OfferDetails Page Exists */
//            if (checkFile(getXMLChildNodeValue(oOfferCategoriesDOCFragment, "FileName", i)) == true){
//                /* Link Offer Name --> Offer Detail Page */
//                $("OfferName-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "FileName", i), "LINK")
//                /* Link CardArtSMlink --> Offer Detail Page */
//                $("CardArtSMlink-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "FileName", i), "LINK")
//                /* Link CardArtLGlink --> Offer Detail Page */        
//                $("CardArtLGlink-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "FileName", i), "LINK")                
//            }
//            else{
//                /* Link Offer Name --> Bank Website */
//                $("OfferName-" + (i+1), makeRedirectLink(oOfferCategoriesDOCFragment, i), "LINK")
//                makeNewWindow("OfferName-" + (i+1));
//                /* Link CardArtSMlink --> Bank Website */
//                $("CardArtSMlink-" + (i+1), makeRedirectLink(oOfferCategoriesDOCFragment, i), "LINK")
//                makeNewWindow("CardArtSMlink-" + (i+1));
//                /* Link CardArtLGlink --> Bank Website */
//                $("CardArtLGlink-" + (i+1), makeRedirectLink(oOfferCategoriesDOCFragment, i), "LINK")
//                makeNewWindow("CardArtLGlink-" + (i+1));
//            }

            /*Modified by Yan on 03/12/2008. 
            Moved the functionality of checkFile to when end user actually clicks the links 
            in order to save page loading time. */           
            var strFileName =getXMLChildNodeValue(oOfferCategoriesDOCFragment, "FileName", i);
            var strRedirectLink = makeRedirectLink(oOfferCategoriesDOCFragment, i);         
            $("OfferName-" + (i+1), strRedirectLink, "LINK");
            addClickEvent("OfferName-" + (i+1), strFileName, strRedirectLink);            
           
            $("CardArtSMlink-" + (i+1), strRedirectLink, "LINK")
            addClickEvent("CardArtSMlink-" + (i+1), strFileName, strRedirectLink);      
           
            $("CardArtLGlink-" + (i+1), strRedirectLink, "LINK")
            addClickEvent("CardArtLGlink-" + (i+1), strFileName, strRedirectLink);      
       
       
            $("CardArtSM-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "SmallCreative", i), "IMG")
            $("CardArtSM-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "OfferName", i), "ALT")
            $("CardArtSMBtn-" + (i+1), makeRedirectLink(oOfferCategoriesDOCFragment, i), "LINK")
            $("OfferText-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "OfferTextDetails", i), "HTML")            
            $("CardArtLG-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "BigCreative", i), "IMG")
            $("CardArtLG-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "OfferName", i), "ALT")
            $("CardArtLGBtn-" + (i+1), makeRedirectLink(oOfferCategoriesDOCFragment, i), "LINK")
            /* Show Rate Image only if Rating is applicable */
            if(getXMLChildNodeValue(oOfferCategoriesDOCFragment, "RateId", i) != 0){
                $("OfferRatingImg-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "RateImage", i), "IMG") 
                $("OfferRatingImg-" + (i+1), getXMLChildNodeValue(oOfferCategoriesDOCFragment, "RateId", i), "ALT") 
            }
            else{
                if (document.getElementById("OfferRatingImg-" + (i+1))){
                    document.getElementById("OfferRatingImg-" + (i+1)).style.display = "none";
                }
            }            
            $("IntroAPR-" + (i+1),  getXMLChildNodeValue(oOfferCategoriesDOCFragment, "IntroAPR", i), "HTML")
            $("IntroPeriod-" + (i+1),  getXMLChildNodeValue(oOfferCategoriesDOCFragment, "IntroPeriod", i), "HTML")                    
            $("RegularAPR-" + (i+1),  getXMLChildNodeValue(oOfferCategoriesDOCFragment, "RegularAPR", i), "HTML")
            $("AnnualFee-" + (i+1),  getXMLChildNodeValue(oOfferCategoriesDOCFragment, "AnnualFee", i), "HTML")
            $("BalanceTransfer-" + (i+1),  getXMLChildNodeValue(oOfferCategoriesDOCFragment, "BalanceTransfer", i), "HTML") 
            $("CreditNeeded-" + (i+1),  getXMLChildNodeValue(oOfferCategoriesDOCFragment, "CreditType", i), "HTML") 
            
            /*By default, the offer block is not displayed to avoid broken image and ##*/
            if(document.getElementById("offer"+(i+1))){
                document.getElementById("offer"+(i+1)).style.display="block";
            }
        }                
        if(document.getElementById("offerCatContent")){
            document.getElementById("offerCatContent").style.display="block";
        }
        if(document.getElementById("divWait")){
            document.getElementById("divWait").style.display="none";
        }
        
        /* STEP 2: Hide Unused Offer Category Containers */
//        if (bHideOfferCategories){
//            for (var k=iEndOffer; k<iMaxOfferCategories; k++){
//                if (document.getElementById("offer" + (k+1))){
//                    document.getElementById("offer" + (k+1)).style.display = "none";                    
//                }
//            }
//        }
        
        /* STEP 3: Manipulate Pagination */
        for(var j=iNumPages; j<iMaxPages; j++){
            if (document.getElementById("page-" + (j+1))){
                document.getElementById("page-" + (j+1)).style.display = "none";
            }
        }                    
    }    
    
    function verifyLoadState(){
         /* 0 Object is not initialized
            1 Loading object is loading data
            2 Loaded object has loaded data
            3 Data from object can be worked with
            4 Object completely initialized */
        if (xmlDoc.readyState != 4){
            return false;
        }
    }
    
    function $(eElem, sValue, oAttribute){
        if (document.getElementById(eElem)){
            switch (oAttribute){
                case "HTML":
                    document.getElementById(eElem).innerHTML = sValue;                            
                    break
                case "IMG":
                        document.getElementById(eElem).src = sValue;
                    break
                case "LINK":
                    document.getElementById(eElem).href = sValue;                            
                    break
                case "ALT":
                    document.getElementById(eElem).alt = sValue;                            
                    break                                            
                default:
                    /* Target HTML Element not found */
                    throw eElem + " not found.\n";
            }            
        }
        else{
            throw eElem + " not found.\n";
        }
    }
    
    /* Function to catch Invalid/Rouge XML */
    function getXMLChildNodeValue(oXML, sNode, iPosition){
        if (oXML.getElementsByTagName(sNode)[iPosition]){
            try{
                return oXML.getElementsByTagName(sNode)[iPosition].childNodes[0].nodeValue.toString();                 
            }
            catch(e){
                //alert (e);
            }   
        }
        else{
            return "";
        }
    }
    
    /* Function that checks for a file on disk */   
    function checkFile(sFileName){
        if (sFileName.length == 0){return false;}
        oXMLHttp = null;
        
        /* Mozilla, etc.*/
        if (window.XMLHttpRequest){
            oXMLHttp = new XMLHttpRequest()
        }
        /* IE */
        else if (window.ActiveXObject){
            oXMLHttp = new ActiveXObject("Microsoft.XMLHTTP")
        }

        if (oXMLHttp != null){
            oXMLHttp.onreadystatechange = verifyLoadXMLState;
            oXMLHttp.open("GET", sFileName, false);
            oXMLHttp.send(null);
            if (oXMLHttp.status == 200){
                /* Offer Detail Page Found */               
                return true;
            }
            else{
                /* Offer Detail Page 404 */
                return false;
            }
        }
    }

    function verifyLoadXMLState(){
         /* 0 Object is not initialized
            1 Loading object is loading data
            2 Loaded object has loaded data
            3 Data from object can be worked with
            4 Object completely initialized */
        if (oXMLHttp.readyState != 4){
            return false;
        }
    }
    
    /*Added by Yan Yan on 03/12/2008.
    Check if offer detail page exists when end user click the offer detail link. 
    If exists: go to offer detail page; Otherwise, go to bank page in new window.
    goOfferDetailWithReferer and addClickEvent are used not to lose refering URL info in the link tracking.
    */
    function goOfferDetail(sFileName,redirectURL){
        if (checkFile(sFileName)){
            window.open(sFileName,"_self");
        }
        else{
            window.open(redirectURL,"_blank");
        }        
    }
    function goOfferDetailWithReferer(sID, sFileName,redirectURL){
        var obj = document.getElementById(sID)
        if (obj) {            
            if (checkFile(sFileName)){            
                obj.href=sFileName;
                obj.target="_self";
                window.open(sFileName,"_self");  
                return true;   
            }
            else{return false;                
            }      
        }  
    }
    function addClickEvent(sID, sFileName,redirectURL)
    {
        var obj = document.getElementById(sID);
        if (obj) {
            obj.onclick=function () {goOfferDetailWithReferer(sID,sFileName,redirectURL)};  
        }        
    }
