﻿// Catalogue Search js
// now using db search    
    var oSearch = {
        PageSize:6,
        PageCount:1,
        CurrentPage:0,
        NumberResults:0,
        QueryText:'',
        BackBtn:'portal/images/back_arrow.png',
        NextBtn:'portal/images/next_arrow.png'
    } 
    
    var thumbDate = new Date();
    thumbDate.setFullYear(2007,11,1);
    var AjaxResults;
	var UniqueHits;
	var resultsMsg = "";
    var SearchWasClicked = false;
    
    function WriteSearchResultsTable() {
        
        if(oSearch.CurrentPage < 1)
        {
            oSearch.CurrentPage = 1;
        }
        if(oSearch.CurrentPage > oSearch.PageCount)
        {
            oSearch.CurrentPage = oSearch.PageCount;
        }        
        
        var imgFilename = '/webimages/page0000001_1.jpg';
        var imgH = 200;
        var imgW = 141;
        var NumCols = 3;
        var ColCtr  = 0;
        
        // start and end position in IssueArray for this page        
        var endIdx = oSearch.CurrentPage * oSearch.PageSize;
        var startIdx = endIdx - oSearch.PageSize;
        if(endIdx > UniqueHits.length)
        {
            endIdx = UniqueHits.length
        }
        
        var SearchHeader = "";
        if (isArchive)
        {
            SearchHeader = "<h2>Archived Brochures</h2>";
        }
        else
        {
            SearchHeader = "<h2>Current Brochures</h2>";
        }        
        
        SearchHeader += "<b>" + resultsMsg;
         
        if (oSearch.NumberResults > 0) {SearchHeader += "<br>Displaying page "+oSearch.CurrentPage+" of " + oSearch.PageCount + "</b>"};
        if (resultsMsg.indexOf('Please click') == -1) {SearchHeader += "<br>Please click on a brochure cover"};
        SearchHeader += "<br><a href=\"#\" onclick=\"return clearSearch();\">View the entire brochure range</a>";
        
        var strOut = "<table align=\"center\" width=\"760\" cellpadding=\"0\" cellspacing=\"1\"><tr><td colspan=\"3\">" +
                    "<img src=\"images/placeholder.gif\" width=\"760\" height=\"5\" alt=\"\" border=\"0\" /></td></tr>" +
                    "<tr><td align=\"left\" valign=\"top\">" + SearchHeader + "<br><br></td><td colspan=\"2\" align=\"right\" valign=\"top\">" + WritePagingControls() + "</td></tr>";
                
        if (oSearch.NumberResults > 0)
        {
            var borderClass = '';

            var cName = ""; 
            var cVstart = ""; 
            var cVend = ""; 
            var cPdate = ""; 
            var cPacid = ""; 
            var cPath = "";

            for (i = startIdx; i < endIdx; i++) {
            
                if (ColCtr == 0) {strOut += '<tr>'};
                
                if (ColCtr != NumCols-1 && i != UniqueHits.length-1) {
                    borderClass = ' class="rightborder"';
                } else {
                    borderClass = '';
                }
                
                var imgFilename = '/webimages/page0000001_1.jpg';
                
                for (j = 0; j < IssueArray.length; j++)
                {
                    if (UniqueHits[i].id == IssueArray[j].split("|")[0])
                    {
                        cName = IssueArray[j].split("|")[1]; 
                        cVstart = IssueArray[j].split("|")[2]; 
                        cVend = IssueArray[j].split("|")[3]; 
                        cPdate = IssueArray[j].split("|")[4]; 
                        cPacid = IssueArray[j].split("|")[0]; 
                        cPath = IssueArray[j].split("|")[5];
                        break;
                    }
                }

                if (cPdate.length > 0) {
                    var pdate = new Date();
                    pdate.setFullYear(cPdate.split('-')[2],cPdate.split('-')[1]-1,cPdate.split('-')[0]);
                    
                    if (pdate>thumbDate){imgFilename = '/webimages/page0000001_0.jpg'};
                    
                }
                strOut += '<td width="33%" align=center' + borderClass + '>';
                
                var CatLink = "catalogues." + BrandLinkName + ".com.au";
                if (BrandName == "FCM")
                {
                    CatLink = "catalogues.au.fcm.travel";
                }                
                
                if (SearchWasClicked)
                {
                    strOut += '<b><br><a href="#" onclick="return WriteCataloguesHitsTable('+cPacid+')">' + cName + '</a></b><br><br>';
                    strOut += '<a href="#" onclick="return WriteCataloguesHitsTable('+cPacid+')"><img border=0 width="' + imgW + '" src="'+ cPath + imgFilename + '" alt="' + cName + '" title="' + cName + '"></a><br><br>';            
                }
                else
                {
                    strOut += '<b><br><a href="http://'+CatLink+'/default.aspx?xml=flightcentre.xml&brand=' + BrandName + '&iid=' + cPacid + '" target="_blank">' + cName + '</a></b><br><br>';
                    strOut += '<a href="http://'+CatLink+'/default.aspx?xml=flightcentre.xml&brand=' + BrandName + '&iid=' + cPacid + '" target="_blank"><img border=0 width="' + imgW + '" src="'+ cPath + imgFilename + '" alt="' + cName + '" title="' + cName + '"></a><br><br>';
                }
                
                strOut += 'Valid '+ cVstart + ' - ' + cVend + '<br><br>';
                strOut += '</td>';
                
                ColCtr ++;
                if (ColCtr == NumCols && i != UniqueHits.length-1){
                    strOut += '</tr>' + 
                        '<tr><td colspan="3"><img src="images/placeholder.gif" width="760" height="5" alt="" border="0" /></td></tr>' + 
                        '<tr><td colspan="3" bgcolor="#E3E3E3"><img src="images/placeholder.gif" width="760" height="1" alt="" border="0" /></td></tr>' + 
                        '<tr><td colspan="3"><img src="images/placeholder.gif" width="760" height="5" alt="" border="0" /></td></tr>';

                    ColCtr = 0;
                }
            }
            
            if (strOut.length > 0){

                if (strOut.substr(strOut.length-5,5) != '</tr>') {strOut += '</tr>'};
                strOut += '</table>';
            }
        }   
        return strOut;         
    };

    function WritePagingControls() {

        var outStr = '<div id="pagingcontrols">';
        if (oSearch.NumberResults > 0)
        {        
            var numStr = '';
            var bStrt = '';
            var bEnd = '';
            var classname = '';
            var sep = '';
            var backStr = '<td align="center" valign="middle"><img src="' + oSearch.BackBtn + '"  onclick="oSearch.CurrentPage--;return ReloadSearchResultsTable();" onmouseover="btnOver(this)" onmouseout="btnOut(this)">&nbsp;</td>';
            var nextStr = '<td align="center" valign="middle">&nbsp;<img src="' + oSearch.NextBtn + '" onclick="oSearch.CurrentPage++;return ReloadSearchResultsTable();" onmouseover="btnOver(this)" onmouseout="btnOut(this)">&nbsp;&nbsp;</td>';
            var CatCount = UniqueHits.length;
            
            oSearch.PageCount = parseInt(CatCount / oSearch.PageSize);
            if ((CatCount % oSearch.PageSize) > 0)
            {
                oSearch.PageCount ++;
            }        
            
            if (oSearch.PageCount > 1) {

                for (i=1; i<= oSearch.PageCount; i++){
                    //link the numbers
                    bStrt = i==oSearch.CurrentPage?'<b>':'';
                    bEnd = i==oSearch.CurrentPage?'</b>':'';
                    classname = i==oSearch.CurrentPage?'pagingnumcurrent':'pagingnum';
                    sep = i == oSearch.PageCount?'&nbsp;':'&nbsp;|&nbsp;';
                    
                    numStr += '<td align="center" valign="middle"><a href="#" onclick="oSearch.CurrentPage='+i+'; return ReloadSearchResultsTable();" onmouseover="numOver(this)" onmouseout="numOut(this)" class="' + classname + '">' + bStrt + i + bEnd + '</a>' + sep + '</td>';
                
                }
                outStr += '<table cellpadding="0" cellspacing="0" border="0"><tr>' + backStr + numStr + nextStr + '</tr></table>';
            }
        }
        outStr += '</div>';
        return outStr;
    } 
    
    function WriteCataloguesHitsTable(catid) {
        
        var SearchHeader = "<h2>Search hits for this brochure</h2>";
        var strOut = "<span id=\"searchhits\"><table align=\"center\" width=\"760\" cellpadding=\"0\" cellspacing=\"1\">" +
            "<tr><td colspan=\"3\"><img src=\"images/placeholder.gif\" width=\"760\" height=\"5\" alt=\"\" border=\"0\" /></td></tr>" +
            "<tr><td colspan=\"3\" align=\"left\" valign=\"top\"><a href=\"#\" onclick=\"return ReloadSearchResultsTable()\">Back to search results</a><br><br></td></tr>" +        
            "<tr><td colspan=\"3\" align=\"left\" valign=\"top\">"+ SearchHeader + "<br><br></td></tr>" +
            "<tr><td width=\"33%\" align=\"center\" class=\"rightborder\" valign=\"top\">" //<table cellpadding=\"0\" cellspacing=\"1\">"
            
        var cName, cVstart, cVend, cPdate, cPacid, cPath;
        var imgFilename = '/webimages/page0000001_1.jpg';
        var imgH = 200;
        var imgW = 141;
        
	    for (var i =0;i<IssueArray.length;i++)	
        {
            if (IssueArray[i].split("|")[0] == catid)
            {
                cName = IssueArray[i].split("|")[1]; 
                cVstart = IssueArray[i].split("|")[2]; 
                cVend = IssueArray[i].split("|")[3]; 
                cPdate = IssueArray[i].split("|")[4]; 
                cPacid = IssueArray[i].split("|")[0]; 
                cPath = IssueArray[i].split("|")[5];	                
                break;
            }
        }
        if (cPdate.length > 0) {
            var pdate = new Date();
            pdate.setFullYear(cPdate.split('-')[2],cPdate.split('-')[1]-1,cPdate.split('-')[0]);
            
            if (pdate>thumbDate){imgFilename = '/webimages/page0000001_0.jpg'};
            
        }
        
        var CatLink = "catalogues." + BrandLinkName + ".com.au";
        if (BrandName == "FCM")
        {
            CatLink = "catalogues.au.fcm.travel";
        }          
                
        strOut += "<b>" + cName + "</b><br><br>";
        strOut += '<a href="http://'+CatLink+'/default.aspx?xml=flightcentre.xml&brand=' + BrandName + '&iid=' + cPacid + '" target="_blank">'
        strOut += '<img border=0 width="' + imgW + '" src="'+ cPath + imgFilename + '"></a><br><br>';   
        strOut += 'Valid '+ cVstart + ' - ' + cVend + '<br><br>';         
        strOut += "</td>";
        
        var hitsmsg = "";
        var hitctr = 0;
        
        for(i = 0; i<AjaxResults.length;i++)	
        {
            if (AjaxResults[i].id == catid)
            {
                hitctr ++;
                hitsmsg += '<a href="http://'+CatLink+'/default.aspx?xml=flightcentre.xml&brand=' + BrandName + '&iid=' + cPacid + '&startpage=' + AjaxResults[i].page + '&crd=' + AjaxResults[i].coords + '" target="_blank">'
                hitsmsg += fixPageNumber(AjaxResults[i].page) + ": " + AjaxResults[i].txt + "</a><br><br>";
            }        
        }
        hitsmsg = "<b>" + getobj('keywords').value + "</b> has been found " + hitctr + " times in this brochure. Click on a link below to find where your keywords have been written.<br>&nbsp;<br>" + hitsmsg;
        strOut += "<td colspan=\"2\" align=\"left\" valign=\"top\">" + hitsmsg + "</td></tr>";
        strOut += "</table></span>" 
        
        
        getobj('searchthumbs').innerHTML = strOut;
        return false;
    }

    function fixPageNumber(page) {
        //return 'Page ' + LTrim(page.replace('page',''));
        return 'Page ' + page;
    }
    
    function LTrim(str)
    {
	    // create a string that holds all possible white space values..
	    var whitespace = new String(" \t\n\r0");

	    // create a String object from our value
	    var s = new String(str);
    	
	    if (whitespace.indexOf(s.charAt(0)) != -1) {
		    var j=0, i = s.length;
    		
		    while (j < i && whitespace.indexOf(s.charAt(j)) != -1) { j++; }
    			
		    s = s.substring(j, i);
		    }
    	
	    return s;
    }
    
    function doSearchIndex(searchterm,dteStart,dteEnd)	{
    	SearchWasClicked = true;
    	
    	getobj('searchthumbs').innerHTML = "Searching...";
	    var scope 
	    if (typeof dteStart == 'undefined' ||typeof dteEnd == 'undefined')
		    scope='current';
	    else
		    scope='archive';
    	
	    var term=getobj('keywords').value;
	    if (term=='')	{
		    location.href = location.href;  // change this to reload from existing array
		    return;
	    }	

	    // send results to server, then process results
	    var http = new RVhttprequest;
	    
	    // logevent('pluginless_search_term',0,term);
    	
    	/*
	    var query_xml='<search_xml>'
		    query_xml+='<search before="20" after="20">'+term+'</search>'
		    query_xml+='<formatbefore><![CDATA[<b>]]></formatbefore>'
		    query_xml+='<formatafter><![CDATA[</b>]]></formatafter>'
		    query_xml+='<multiword>contains</multiword>'
		    query_xml+='<scope>'
		    
	    for (var i=0;i<IssueArray.length;i++)	
	    {
		    query_xml+='<issue xml="flightcentre.xml" iid="' + IssueArray[i].split("|")[0] +'"/>'
	    }

	    query_xml+='</scope>'
	    query_xml+='</search_xml>'

	    var search_url = '/global/search/search.aspx';
	    showresults(http.dopost(search_url,'query_xml=' + query_xml,'',true),term,scope);
		*/ 
		var issuescope = '';
		var scopecomma = ",";
	    for (var i=0;i<IssueArray.length;i++)	
	    {
	        scopecomma = ",";
	        if(i==0){scopecomma = ""};
	        
		    issuescope += scopecomma + IssueArray[i].split("|")[0]
	    }
		poststr ='PublicationID=519&IssueToSearch='+issuescope+'&pagesize=500&SearchTerm='+term+'&OrderBy=[IssueDate] Desc, [PageName]';
		var search_url = '/global/search/searchContent.aspx';
		showresults(http.dopost(search_url,poststr,'', true), term, scope);
	    
    	 
    };
    function ReloadSearchResultsTable()
    {
        getobj('searchthumbs').innerHTML = WriteSearchResultsTable();
        return false;
    }

    function showresults(res,searchterm,scope)	{

	    oSearch.NumberResults = getAttrib(res.responseXML.getElementsByTagName('xml')[0],'resultcount');
        if (oSearch.NumberResults > 0)	
        {
            ConvertHitsToArray(res.responseXML.getElementsByTagName('page'),'');
           
            resultsMsg = oSearch.NumberResults + " results in " + UniqueHits.length + " brochures.";
            
            oSearch.CurrentPage = 1;
            
            getobj('searchthumbs').innerHTML = WriteSearchResultsTable();
       
        } else {
            resultsMsg = "0 results.";
            getobj('searchthumbs').innerHTML = WriteSearchResultsTable();
        }

    };


    // takes <hits> node, coverts to Array, then sorts by sortby. currently sortby is only date

    function ConvertHitsToArray(node)
    {
	    function searchresult()  // search result constructor - private object
	    {
		    this.page=0;
		    this.txt='';
		    this.coords='';
		    this.dispname='';
		    this.id=0;
	    };
	    AjaxResults = new Array()
	    UniqueHits = new Array()
	    var currid = "";
	    
	    var lengthforiteration=node.length;
	    
		for (var i=0;i<lengthforiteration;i++)		
	    {	
            var lengthofnode=node[i].getElementsByTagName("hit");
            for(var j=0;j<lengthofnode.length;j++)
            {
                var x = new searchresult();
                x.coords=getAttrib(lengthofnode[j], 'coords')+ ',00FF00zz';
                x.txt = getText(node[i].getElementsByTagName("hit")[j]);
                x.dispname=getAttrib(node[i],'displayname');
                x.page = Number(getAttrib(node[i], 'pagename').replace(/page/, ""));
                x.id=getAttrib(node[i],'issueid');
                AjaxResults.push(x);
            }

		    AjaxResults.push(x)
		    
		    if (currid.indexOf(x.id) == -1)
		    {
			    UniqueHits.push(x)
		        currid += '|' + x.id;
		    }
	    }
    };

    function GetUniqueHits()  // after page load, create UniqueHits with all issues
    {
	    function searchresult()  // search result constructor - private object
	    {
		    this.page=0;
		    this.txt='';
		    this.coords='';
		    this.dispname='';
		    this.id=0;
	    };    
	    UniqueHits = new Array()

	    
		for (var i =0;i<IssueArray.length;i++)	
	    {	
	        var x = new searchresult()
            x.dispname = IssueArray[i].split("|")[1]; 
            x.id = IssueArray[i].split("|")[0]; 
	        UniqueHits.push(x);
	    }
    };

    function getAttrib(XML,attrib)
	    {
    	
	    for (var i=0;i<XML.attributes.length;i++)
	    {
		    if (XML.attributes[i].nodeName.toLowerCase() == attrib.toLowerCase())
			    return XML.attributes[i].nodeValue ;
	    }
	    return "XML ERROR";
    };

    function getText(node) {
        if (node.firstChild!=null)
        {
	        if (typeof node.firstChild.nodeValue != 'undefined')
                return node.firstChild.nodeValue;
            if (typeof node.textContent != 'undefined')
                       return  node.textContent;
            if (typeof node.text != 'undefined')
                    return  node.text;
       }
        return '';

    };  
    
    //document.onkeydown = function(e) {enterSearch(e)}
    document.onkeypress = function(e) {enterSearch(e)}
    //onkeydown="return enterSearch(this);"
    function enterSearch(e)
    {  
        var evt = (e) ? e : window.event; 
        var val = evt.keyCode;
        if (val == 13) 
        {
            doSearchIndex();
             return false;
        }
        else
        {
            return true;
        }
        // returns true to onkeydown event to continue
               
    }
 
         
    function clearSearch()
    {
        getobj('keywords').value = '';
        resultsMsg = originalResultsMsg;
        GetUniqueHits();
        oSearch.NumberResults = UniqueHits.length;
        ReloadSearchResultsTable();        
        return false;
}