var PintSearchBox =
{
    init : function() {
        PintSearchBox.registerHandlers();
    },
    registerHandlers : function() {

       document.getElementById('searchKeywords').onfocus = function () {

          if (this.value == 'Enter Keywords') this.value = '';

       };

       document.getElementById('searchKeywords').onblur = function () {

          if (this.value == '') this.value = 'Enter Keywords';

       };
    }
};

var PintSearch = 
{
        perPage : 10,

        pages : [],

	createXHR : function () {

		try { return new XMLHttpRequest (); } catch ( e ) {}
		try { return new ActiveXObject("Msxml2.XMLHTTP.6.0");	} catch ( e ) {}
		try { return new ActiveXObject("Msxml2.XMLHTTP.3.0");	} catch ( e ) {}
		try { return new ActiveXObject("Msxml2.XMLHTTP");	} catch ( e ) {}
		try { return new ActiveXObject("Microsoft.XMLHTTP");	} catch ( e ) {}

		return null;

	},

    disableSearch : function() {
        YAHOO.util.Event.removeListener('searchForm', 'submit');
        var searchText = document.getElementById('searchKeywords');
        var okBtn = document.getElementById('searchbtn');
        searchText.disabled = true;
        searchText.readOnly = true;
        searchText.className = "disabledTextField";
 
        okBtn.disabled = true;
        okBtn.src = themeRootDirectory + "/images/ok_disabled.gif";
    },

    enableSearch : function() {
        YAHOO.util.Event.addListener('searchForm', 'submit', function(e) { PintSearch.paging = false; PintSearch.pages = []; PintSearch.init(e, '0', false); });

        var searchText = document.getElementById('searchKeywords');
        var okBtn = document.getElementById('searchbtn');
        searchText.disabled = false;
        searchText.readOnly = false;
        searchText.className = "";

        okBtn.disabled = false;
        okBtn.src = themeRootDirectory + "/images/btn_ok.gif";
    },

    hideSearchForm : function() {
        var anim = new YAHOO.util.Anim('topSearchForm', {opacity: {to: 0}}, 0.05, YAHOO.util.Easing.easeOutStrong);
        anim.animate();
        anim.onComplete.subscribe( function(){ 
            YAHOO.util.Dom.setStyle('topSearchForm', 'display', 'none');
            var input = document.getElementById('searchKeywords');
            input.parentNode.removeChild(input);
            PintSearch.showSearchActivity();
        });
    },

    showSearchActivity : function() {
        YAHOO.util.Dom.setStyle('topSearchProcessing', 'display', 'block'); 
        YAHOO.util.Dom.setStyle('topSearchProcessing', 'opacity', '0');
        YAHOO.util.Dom.setStyle('topSearchProcessing', 'visibility', 'visible');
        var anim = new YAHOO.util.Anim('topSearchProcessing', {opacity: {to: 1}}, 0.05, YAHOO.util.Easing.easeInStrong);
        anim.animate();
    },

    hideSearchActivity : function() {
        var anim = new YAHOO.util.Anim('topSearchProcessing', {opacity: {to: 0}}, 0.05, YAHOO.util.Easing.easeInStrong);
        var anim2 = new YAHOO.util.Anim('topSearchForm', {opacity: {to: 1}}, 0.05, YAHOO.util.Easing.easeOutStrong);
        anim.onComplete.subscribe(function() {
            YAHOO.util.Dom.setStyle('topSearchForm', 'display', '');
            var form = document.getElementById('topSearchForm');
            
            if(document.getElementById('searchKeywords') === null) {
                var keywords = document.createElement('input');
                keywords.type = "text";
                keywords.name = "keyword";
                keywords.value = PintSearch.keyword || "Enter Keywords";
                keywords.id = "searchKeywords";

                YAHOO.util.Dom.insertBefore(keywords, "searchbtn");

                PintSearchBox.registerHandlers();
            }
            anim2.animate();
        });
        anim.animate();
        setTimeout('PintSearch.hideSearchActivity()', 1000);
    },

	handleResponse : function ( xhr, e, self ) {
	    if ( xhr.readyState == 4 && xhr.status == 200 ) {
	    PintSearch.status = "rendering";
            PintSearch.results = xhr.responseText || PintSearch.pages[PintSearch.page];
            
            if(document.getElementById('search') === null) {
                if(PintSearch.noResults(PintSearch.results)) {
                    PintSearch.displayNoResults();
                    return;
                }

                PintSearch.first = true;
                PintSearch.panel = new YAHOO.widget.Panel("search", { 
                    width:"720px",  
                    height: "500px",
                    fixedcenter: true, 
                    modal : true, 
                    close:false,  
                    visible:false,
                    effect: { effect:YAHOO.widget.ContainerEffect.FADE, duration: 0.25 }
                }); 

                var traditionalLink = PINT.safeSearchPath + (PINT.safeSearchPath.indexOf('?')!= -1 ? '&' : '?' ) + "keyword=" + PintSearch.keyword;
                PintSearch.panel.beforeHideEvent.subscribe(function(){PintSearch.hideSearch(PintSearch.panel);});
                PintSearch.panel.setHeader('<h2 id="searchResultsHeader">Search Results</h2><div style="clear:both;"></div>');
                PintSearch.panel.setBody('<div id="searchBody"></div>');
                PintSearch.panel.setFooter('<a id="searchTraditionalLink" href="' + traditionalLink + '">Switch to Traditional View</a><div id="searchClose"><a href="#" id="closePanelLink" title="Close Window">Close</a><span id="containerClose" class="container-close">&nbsp;</span></div>');
                YAHOO.util.Event.addListener('closePanelLink', 'click', function() { PintSearch.panel.hide(); });
                YAHOO.util.Event.addListener('containerClose', 'click', function() { PintSearch.panel.hide(); });
                PintSearch.panel.render("searchPanel");
            } else {
                PintSearch.first = false;
                var el = document.getElementById('searchResults');

                if(el !== null) {
                    el.parentNode.removeChild(el);
                }

                el = document.getElementById('searchTraditionalLink');

                if(el !== null) {
                    el.href = PINT.safeSearchPath + "&keyword=" + PintSearch.keyword + "&start_row=" + PintSearch.startRow;
                }
            }
            
            PintSearch.displaySearch(e,PintSearch.panel);
	    }
	},

    hidePanel : function() {
        PintSearch.panel.hide();
    },

    hideOtherPanels : function() {
        if(PintClientLogin !== null && document.getElementById('clientLogin') !== null) {
            PintClientLogin.hidePanel();
        }
        if(PintSiteMap !== null && document.getElementById('sitemap') !== null) {
            PintSiteMap.hidePanel();
        }
    },

    init: function(e, startRow, paging)
    {
        PintSearch.hideOtherPanels();

        // don't do hi-fi search if on the actual search page
        if (PINT.cid == 69) {
            return true;
        }
        
        if (!paging) {
            PintSearch.keyword = document.getElementById('topSearchForm').childNodes[0].value;
        }
        
        PintSearch.hideNoResults();
        PintSearch.startRow = startRow || 0;
        PintSearch.page = PintSearch.startRow / PintSearch.perPage;
	
        if (PintSearch.keyword === "" || PintSearch.keyword === "Enter Keywords"){
            YAHOO.util.Event.preventDefault(e);
            return;
        }
    
        if(PintSearch.pages[PintSearch.page] !== undefined) {
            YAHOO.util.Event.preventDefault ( e );
            PintSearch.paging = true;
            PintSearch.handleResponse({readyState:4, status:200});
        } else {
            PintSearch.paging = false;
            var xhr = PintSearch.createXHR ();
            
            if ( xhr ) {
                YAHOO.util.Event.preventDefault ( e );
                var self = PintSearch;
                PintSearch.status = "loading";
                PintSearch.hideSearchForm();
                xhr.open ( "POST", PINT.searchPath, true );
                xhr.onreadystatechange = function () { self.handleResponse ( xhr, e, self ); };             
                xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                xhr.send ("keyword=" + PintSearch.keyword + "&start_row=" + PintSearch.startRow);
            }
            else {
                return true;	// if no XHR Object, follow the link
            }
        }
    },

    cleanUp : function() {
        PintSearch.pages = null;
    },

    noResults : function(results) {
        var div = document.createElement('div');
        div.innerHTML = results;
        div.style.display = "none";

        document.getElementById('footer').appendChild(div);        

        var rows = YAHOO.util.Dom.getElementsByClassName("searchResultsRow", "tr", "searchResults");

        div.parentNode.removeChild(div);

        return rows.length === 0;
    },

    displaySearch: function(e,panel)
    {
        var self = PintSearch;
        var href = "";

        var getAnimation = function(index)
        {
            return function(){animations[index+1].animate();};
        };

        var anim = null;		

        if(PintSearch.first) {
            PintSearch.panel.show();
            anim = new YAHOO.util.Anim("search_mask", {opacity: {from: 0, to:0.9}}, 0.5);
        }

        var animations = [];

        var paging = document.getElementById('pagination');
            
        if(paging !== null) {
            paging.parentNode.removeChild(paging);
        }

        document.getElementById("searchBody").innerHTML = PintSearch.results;
        PintSearch.pages[PintSearch.page] = PintSearch.results;
         
        PintSearch.initPaging();
        PintSearch.initSuggestions();

        var rows = YAHOO.util.Dom.getElementsByClassName("searchResultsRow", "tr", "searchResults");

        for(var i=0; i<rows.length; i++) {
            rows[i].onmouseover = function(e){return PintSearch.highlight(e, this);};
            rows[i].onmouseout = function(e){return PintSearch.unhighlight(e, this);};
            animations.push(new YAHOO.util.Anim(rows[i], {opacity: {from: 0, to:1}}, 0.1));
        }

        for (i=0;i<animations.length-1;i++) {
            animations[i].onComplete.subscribe(getAnimation(i));
        }

        if(PintSearch.first) {
            anim.onComplete.subscribe(function(){
                YAHOO.util.Dom.setStyle("search_c", 'opacity', 0.7);
                if(animations.length > 0) {
                    animations[0].animate();
                }
                self.status = "static";
            });
            self.hideSearchActivity();
            anim.animate();
        } else {
            if(!PintSearch.paging) {
                PintSearch.hideSearchActivity();
            }
                
            if(animations.length > 0) {
                animations[0].animate();
            }
        }
	},
    
    displayNoResults : function() {
        var panel = new YAHOO.widget.Panel("noResults", { 
            width:"260px",  
            height:PintSearch.results.match(/<br\/?[^>]*>/g) === null ? "38px" : "48px",
            close:true,  
            visible:true,
            underlay:"shadow",
            effect: { effect:YAHOO.widget.ContainerEffect.FADE, duration: 0.2 }
        }); 

        panel.beforeHideEvent.subscribe(function(){PintSearch.hideSearch(panel);});
        panel.setHeader('');
        panel.setBody('<div id="searchNoResults"></div>');
        panel.setFooter('');
        
        var div = document.createElement('div');
        div.id = "searchNoResultsPanel";

        YAHOO.util.Dom.insertAfter(div, 'topSearchProcessing');

        panel.render("searchNoResultsPanel");
        
        document.getElementById('searchNoResults').innerHTML = PintSearch.results;
        PintSearch.initSuggestions();

        panel.show();

        PintSearch.hideSearchActivity();
    },
    
    initPaging : function() {
        var self = PintSearch;
        var paging = document.getElementById('pagination');
        
        if(paging !== null) {
            var searchHead = document.getElementById('searchResultsHeader');
            YAHOO.util.Dom.insertAfter(paging, searchHead);
            
            var pageLinks = YAHOO.util.Dom.getElementsByClassName("paginationLink", "a", paging);
                              
            for(var k=0; k<pageLinks.length; k++) {
                href = pageLinks[k].href;
                pageLinks[k].href = pageLinks[k].title = href.replace(/.*start_row=([0-9]+)/, "$1");
                YAHOO.util.Event.addListener(pageLinks[k], 'click', function(e) {
                    if(self.status != "loading") {
                        self.init(e, this.title, true);
                    } else {
                        YAHOO.util.Event.preventDefault(e);
                    }
                });
            }
        }
    },

    initSuggestions : function() {
        var self = PintSearch;
        var suggestions = document.getElementById('searchSuggestions');

        if(suggestions !== null) {
            href = suggestions.href;
            PintSearch.keyword = href.replace(/.*keyword=(.*)/, "$1");
            YAHOO.util.Event.addListener(suggestions, 'click', function(e) {
                self.pages = [];
                document.getElementById('topSearchForm').childNodes[0].value = self.keyword;
                self.init(e, '0', false);
            });
        }
    },

    hideNoResults : function() {
        var el = document.getElementById('searchNoResultsPanel');
        
        if(el !== null) {
            el.parentNode.removeChild(el);
        }
    },

    hideSearch: function(panel)
    {
        var self = PintSearch;
	var anim = new YAHOO.util.Anim("search_mask", {opacity: {from: 0.65, to:0}}, 0.25);
        anim.onComplete.subscribe(function() {
            PintSearch.cleanUp();
            
            var node = document.getElementById('search_mask');
            if(node !== null && node !== undefined) {
                node.parentNode.removeChild(node);
            }

            node = document.getElementById('searchPanel');
            if(node !== null && node !== undefined) {
                node.removeChild(node.childNodes[0]);
            }
        });
       anim.animate();
    },
 
	highlight: function(e, target)
	{
		e = e || window.event;
		
		var oldtarget = e.relatedTarget || e.fromElement;
		var parentNode = oldtarget;
		while(parentNode !== null)
		{
			if (parentNode == target) {
			    return false;
            }
		        if(parentNode === undefined) { break; }
			parentNode = parentNode.parentNode;
		}

        var rowNumber = YAHOO.util.Dom.getElementsByClassName("searchResultsNumber", "td", target)[0];
        var rowContent  = YAHOO.util.Dom.getElementsByClassName("searchResultsContent", "td", target)[0];
		var anim = new YAHOO.util.ColorAnim(rowNumber, {backgroundColor: {from: '#164D61', to: '#133841'}}, 0.15 );
        var anim2 = new YAHOO.util.ColorAnim(rowContent, {backgroundColor: {from: '#164D61', to: '#133841'}}, 0.15 );
		anim.animate(); 
        anim2.animate();
		//var anim = new YAHOO.util.ColorAnim(target, {backgroundColor: {from: '#164D61', to: '#133841'}}, 0.15 );
		//anim.animate(); 
	},

	unhighlight: function(e, target)
	{
		e =  e || window.event;
		var newitem = e.relatedTarget || e.toElement;
		
		var parentNode = newitem;
		while(parentNode !== null)
		{
			if (parentNode == target) {
			    return false;
            }
				
		        if(parentNode === undefined) { break; }
			    parentNode = parentNode.parentNode;
		}
		
        var rowNumber = YAHOO.util.Dom.getElementsByClassName("searchResultsNumber", "td", target)[0];
        var rowContent  = YAHOO.util.Dom.getElementsByClassName("searchResultsContent", "td", target)[0];
		var anim = new YAHOO.util.ColorAnim(rowNumber, {backgroundColor: {to: '#164D61', from: '#133841'}}, 0.15 );
        var anim2 = new YAHOO.util.ColorAnim(rowContent, {backgroundColor: {to: '#164D61', from: '#133841'}}, 0.15 );
		//var anim = new YAHOO.util.ColorAnim(target, {backgroundColor: {to: '#164D61', from: '#133841'}}, 0.15 );
		anim.onComplete.subscribe(function(){rowNumber.style.backgroundColor = "transparent";});
                anim2.onComplete.subscribe(function(){rowContent.style.backgroundColor = "transparent";});
		anim.animate(); 
                anim2.animate();
	}
};

PintSearchBox.init();

// Don't show the HI-FI search for the mac
if (!PINT.util.browser.bMac && (PINT.util.browser.bIe7 || PINT.util.browser.bFirefox || PINT.util.browser.bSafari))
{ 
    PintSearch.enableSearch(); 
}


