Sep222009

SideSearch

This is a snippet and acompanying Javascript to put an expandable search box in the left side of the page. It consists of a snippet named SideSearch, sidesearch.js, and sidesearch.css. Sidesearch.js and sidesearch.css by default are placed in /assets/js. This script requires jQuery. You'll need to add your own images or formatting to sidesearch.css.

Here's the snippet [[SideSearch]] (description: A sliding side searchbar)


<?php
//Include necessary js: mootools and the js to animate the side-search
# Register the necessary script, this allows the required js to only be included on pages that use it
$baseUrl = $modx->getConfig('base_url');
$modx->regClientStartupScript($baseUrl.'assets/js/jquery-1.3.2.min.js');
$modx->regClientStartupScript($baseUrl.'assets/js/sidesearch.js');
$modx->regClientCSS($baseUrl.'assets/js/sidesearch.css');

?>
<div id="SideSearchContainer">
<div id="SideSearch">
<div id="SideSearchButton"><img src="<?php echo $baseUrl; ?>assets/snippets/sidesearch/search.gif"></div>
<div id="search">[[AjaxSearch? &AS_landing=`8` &ajaxSearch=`0`]]</div>
</div>
</div>

This is sidesearch.js


var $j = jQuery.noConflict();


// showSideSearch()
// Slide the sideSearch onto the screen by setting margin to zero
function showSideSearch(){
    $j("#SideSearch").animate({left: "0"}, "fast");
    //Create an overlay using which the user can click elsewhere to close the search
    var objOverlay = document.getElementById('overlay2');
    objOverlay.style.height = '100%';
    objOverlay.style.display = 'block';
    visible = true;
}

// hideSideSearch()
// Slide the sideSearch off screen by setting margin negative
function hideSideSearch(){   
    $j("#SideSearch").animate({left: "-260px"}, "fast");
    //Hide the overlay
    var objOverlay = document.getElementById('overlay2');
    objOverlay.style.height = '0%';
    objOverlay.style.display = 'none';
    visible = false;
}

// toggleSideSearch()
// Toggles the visibility of the sideSearch
var visible = false;
function toggleSideSearch(){
    if(!visible){
        showSideSearch();
    } else {
        hideSideSearch();
    }
}

// Set up events
$j(document).ready(function(){
	
	// pullling this from lightbox v1 code
    // create overlay div that is used to detect clicks outside elements that load on top of the page
    var objOverlay = document.createElement('div');
    objOverlay.setAttribute('id','overlay2');
    objOverlay.style.display = 'none';
    objOverlay.style.position = 'absolute';
    objOverlay.style.top = '0';
    objOverlay.style.left = '0';
    objOverlay.style.zIndex = '91';
    objOverlay.style.width = '100%';
    var objBody = document.getElementsByTagName('body').item(0);
    objBody.insertBefore(objOverlay, objBody.firstChild);
    
    $j("#overlay2").click(function() {
        hideSideSearch();
        return false;
    });
    $j("#SideSearchButton").click(function(){
        toggleSideSearch();
    });
});

and lastly, sidesearch.css


#SideSearch {

position:fixed;
top: 40%;
float: left;
left:-260px;
background-image:url(/assets/snippets/sidesearch/searchback.gif);
text-indent: 0px;
overflow-x: hidden;
overflow-y: hidden;
height: 94px;
width: 300px;
z-index: 100;
}

#SideSearch:hover{
    width: 310px;
}

#SideSearch form {
float: left;
margin: 10px;
}

#SideSearchButton {
float: right;
}

.ajaxSearch_intro {
display: none;
}

#search {
width:210px;
padding-top:5px;
margin-right:20px;
}

#ajaxSearch_form fieldset{
border: none;
font-size: 120%;
}

#ajaxSearch_submit {
float:right;
}

input#ajaxSearch_input {
	border: 2px solid #131913;
	background: url(/assets/templates/newgreen/formgradient.png) repeat-x #FFFFFF;
	font-family: tahoma, helvetica, sans-serif;
	font-style: normal;
	font-size: 100%;
}