/* 	searchTabsAndFilters
	Contains: All scripts/animations for the search module.
**/

function initSearch()
{
    toggleAdvancedSearch();
    toggleDidYouMeanAndError();
	toggleTabsAndTabContent();
	checkBoxActiveStateToggle();
	checkBoxForceParentCheck();
	setupBSBTextBoxes();
	toggleServiceSearchCriteria();
	SelectRequestedTab();
}

/*
	toggleServiceSearchCriteria
	--------------------
	Radio button toggle for the search by service area
**/
function toggleServiceSearchCriteria() {

    $("notMobileBanker").setStyle("display", "none");
    $("mobileBanker").setStyle("display", "block");
    
    var acceptCheckId = $("serviceFilterRadios").getElements("input"); 
    
    acceptCheckId.addEvent("click", function() {
        if (this.id == "radioMobile") {
            $("notMobileBanker").setStyle("display", "none");
            $("mobileBanker").setStyle("display", "block");
        }
        else { 
            $("notMobileBanker").setStyle("display", "block");
            $("mobileBanker").setStyle("display", "none");
        }
    });

}

/*
	toggleAdvancedSearch
	--------------------
	Slides out/in the advanced search and error pane.
**/
function toggleAdvancedSearch() {

    var l_searchAddInfoBranch = $("searchAdditionalInfoBranch");
	var l_searchAddInfoService = $("searchAdditionalInfoService");
	var l_searchAddInfoBSB = $("searchAdditionalInfoBSB");

	//var str_toggleClosed = '<span class="closed">Advanced search e.g branch weekend trading, deposit atm</span>';
	//var str_toggleOpened = '<span class="opened">Close</span>';
	var l_toggleTxt = $("toggleTxt");

	var l_toggleTxtOpened = $("opened");
	var l_toggleTxtClosed = $("closed");

	var searchPaneTweenBranch = l_searchAddInfoBranch.get('slide');
	var searchPaneTweenService = l_searchAddInfoService.get('slide');
	var searchPaneTweenBSB = l_searchAddInfoBSB.get('slide');
	
	searchPaneTweenBranch.hide();
	searchPaneTweenService.hide();
	searchPaneTweenBSB.hide();
	
	l_searchAddInfoBranch.setStyle("display", "block");
	l_searchAddInfoService.setStyle("display", "block");
	l_searchAddInfoBSB.setStyle("display", "block");

	searchPaneTweenBranch.show();

	if(l_toggleTxt)
	{
	    l_toggleTxt.addEvent("click", function() {
	        if (!searchPaneTweenBranch.open) {
	            openSearchPane();
	        }
	        else if (searchPaneTweenBranch.open) {
	            closeSearchPane();
	        }
	    });
	}
	installTextSizeHook();
}

function openSearchPane() {
    $('DidYouMeanPaneBranchATM').get('slide').hide();
    $('DidYouMeanPaneService').get('slide').hide();
    $('BranchATMErrorPane').get('slide').hide();
    $("closed").setStyle("display", "none");
    $("opened").setStyle("display", "inline");
    $("searchAdditionalInfoBranch").get('slide').hide().slideIn();
}

function closeSearchPane() {
    $("closed").setStyle("display", "inline");
    $("opened").setStyle("display", "none");
    $("searchAdditionalInfoBranch").get('slide').slideOut();
    $$("#AdvancedSearchPane input").set('checked', false);
}

/*
    showErrorOrDidYouMeanPane
    ------------------------
    Slides in the error or did you mean pane (if it is currently hidden).
**/
function showErrorOrDidYouMeanPane(pane) {
    pane.setStyle('display', '');
    if (pane.getParent('.searchAdditionalInfo').get('slide').open) {
        pane.get('slide').activelyAdjustParentSize();
        pane.get('slide').slideIn();
    } else {
        pane.get('slide').show();
       
        var toggleButton = pane.getParent('.searchTabContent').getElement('#toggleTxt');
        if (toggleButton) {
            //$("toggleTxt").fireEvent('click');
            pane.getParent('.searchAdditionalInfo').get('slide').slideIn();
            pane.show();
            $("closed").setStyle("display", "none");
            $("opened").setStyle("display", "inline");
        } else {
            pane.getParent('.searchAdditionalInfo').get('slide').slideIn();
        }
    }
}


/*
    installTextSizeHook
    ------------------------
    When the Text Size is changed, need to resize the advanced search panel.
    This function sets up an event handler to detect when the text size is
    changed.
**/
function installTextSizeHook() {
    $$('#userControlLinks a').addEvent('click', function(event) {
        $$('.searchAdditionalInfo').each(function(searchAdditionalInfo) {
            if (searchAdditionalInfo.getParent('.searchTabContent').getStyle('display') != 'none') {
                var tween = searchAdditionalInfo.get('slide');
                if (tween.open) {
                    tween.show();
                }
            }
        });
        var details = $$('.toggler.opened').getNext('.details');
        details.setStyle('height', 'auto');
        details.setStyle('height', details.offsetHeight);
    });
}

/*
    toggleDidYouMeanAndError
    ------------------------
    Initialises the hyperlinks that slide out the did you mean/error panes.
**/
function toggleDidYouMeanAndError() {
    $$(".errorPane").each(setupDidYouMeanOrErrorHide);
}

function setupDidYouMeanOrErrorHide(pane) {
    var parentTween = pane.getParent('.searchAdditionalInfo').get('slide');
    var l_hide = pane.getElement('.cta');

    var tween = pane.get('slide');
        tween.activelyAdjustParentSize = function() {
        this.activelyAdjustParentSizeTimer = parentTween.show.periodical(Math.round(1000 / parentTween.options.fps), parentTween);
    }
    tween.addEvent('complete', function(event) {
        this.activelyAdjustParentSizeTimer = $clear(this.activelyAdjustParentSizeTimer);
        parentTween.show();
    });

    l_hide.addEvent('click', function(event) {
        tween.activelyAdjustParentSize();
        tween.slideOut();
    });
}


/*
	checkBoxActiveStateToggle
	------------------------
	Appends an active class to a checkbox if it's checked. Includes a listener
**/
function checkBoxActiveStateToggle()
{
	var MAIN_SEARCH_CHECKBOXES = $$('.chkBoxesType input'); //array
	var MAIN_SEARCH_LABELS = $$('.chkBoxesType label');
	var l_activeClass = "activeChkBox";
	var l_inactiveClass = "inactiveChkBox";


	//If a already checked, set class initially
	if(MAIN_SEARCH_CHECKBOXES[0].get("checked") == true) {
		MAIN_SEARCH_LABELS[0].set("class", l_activeClass);
	}
	if (MAIN_SEARCH_CHECKBOXES[1].get("checked") == true) {
		MAIN_SEARCH_LABELS[1].set("class", l_activeClass);
	}

	//Listener on checkboxes
	$each($$(MAIN_SEARCH_CHECKBOXES), function(el) {
		el.addEvents({
			'click': function() {
				if(el.parentNode.hasClass(l_inactiveClass)) {
					el.parentNode.set("class", l_activeClass);
				} else if (el.parentNode.hasClass(l_activeClass)) {
					el.parentNode.set("class", l_inactiveClass);					  
				}
			}
		});
	});

}

/*
	checkBoxForceParentCheck
	------------------------
	Determines if a child checkbox is checked. If so, it will tick it's appropriate parent checkbox
**/

function checkBoxForceParentCheck() {
    var l_branchParentChkBox = $$("#filterBranchParent input"); //main checkbox (branch)
    var l_branchAdvancedSearchItems = $$("#filterBranchChildren input");  //advanced search checkboxes
    var l_branchAdvancedSearch = $("filterBranchChildren");

    var l_atmParentChkBox = $$("#filterATMParent input"); //main checkbox (atm)
    var l_atmAdvancedSearchItems = $$("#filterATMChildren input"); //advanced search checkboxes
    var l_atmAdvancedSearch = $("filterATMChildren");

    disableAndEnableAdvancedChkBoxes(l_branchParentChkBox, l_branchAdvancedSearchItems, l_branchAdvancedSearch);
    disableAndEnableAdvancedChkBoxes(l_atmParentChkBox, l_atmAdvancedSearchItems, l_atmAdvancedSearch);
}

function disableAndEnableAdvancedChkBoxes(m_parentChkBox, m_childChkBoxes, m_childContainer) {
    m_parentChkBox.addEvent("click", function(event) {
        if (this.checked == true) {
            m_childChkBoxes.set("disabled", "");
            m_childContainer.removeClass("disabledChkBoxes");
        } else {
            m_childChkBoxes.set("disabled", "disabled");
            m_childChkBoxes.set("checked", "");
            m_childContainer.addClass("disabledChkBoxes");
        }
    });
}


/*
	toggleTabsAndTabContents
	------------------------
	Toggles the search navigation tabs and tabs content.
**/					
function toggleTabsAndTabContent()
{
	var TAB_LINKS = $$('#searchNavigation li a'); //array
	var l_activeClass = "active";
	
	//Listener on each tab
	$each($$(TAB_LINKS), function(el) {
	    el.addEvents({
	        'click': function() {
	            TAB_LINKS.removeClass(l_activeClass);
	            el.addClass(l_activeClass);
	            toggleActiveTabContentVisibility(/^(.*)Tab$/.exec(el.parentNode.id)[1]);
	            ResetFields();
	        }
	    });
	});
}

function toggleActiveTabContentVisibility(tabContentId)
{
	var TAB_CONTENT = $$(".searchTabContent"); //array
	TAB_CONTENT.setStyle("display", "none");
	$(tabContentId).setStyle("display", "block");
	if ($(tabContentId).retrieve('initTab')) {
	    $(tabContentId).retrieve('initTab')();
	}
}

function SelectRequestedTab() {
    var product, bsb, branch, atm, postcode, suburb;    
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        switch (pair[0]) {
            case 'product':
                product = pair[1];
                break;
            //Added by Swathi Rayannagari for deep linking enhancement on Sep5th,2011    
            case 'bsb':
                bsb = pair[1];
                break;
                
             //Branch Search
             case 'branch':
             if(pair[1] == '1') {
                branch = true;}
                break;          
                            
             //ATM Search
             case 'atm':
             if(pair[1] == '1') {
                atm = true;}
                break;  
                
             case 'location':  
                    postcode = pair[1];           
                    break;
                        
//            case 'Suburb':                        
//                    suburb = pair[1];                        
//                    break;             
           
   
        }
    }
     if (bsb) {
            $$('#searchTypeBranchTab a').removeClass('active');
            $$('#searchTypeServiceTab a').removeClass('active');
            $$('#searchTypeBSBTab a').addClass('active');

            $('searchTypeBranch').setStyle('display', 'none');
            $('searchTypeService').setStyle('display','none');
            $('searchTypeBSB').setStyle('display', 'block');            
          
            $$('.txtBSB1')[0].value = '06' + bsb.charAt(0);
            $$('.txtBSB2')[0].value = bsb.substr(1);            
            
            if((!isNaN($$('.txtBSB1')[0].value)) && (!isNaN($$('.txtBSB2')[0].value)) && (bsb.length == '4')) {
             mapSearch.LocateBSB(); }
             
             else {
                window.location = 'Default.aspx';
             }
              
        }   
        
        if ((branch) || (atm)) {
            $$('#searchTypeBranchTab a').addClass('active');
            $$('#searchTypeServiceTab a').removeClass('active');
            $$('#searchTypeBSBTab a').removeClass('active');

            $('searchTypeBranch').setStyle('display', 'block');
            $('searchTypeService').setStyle('display','none');
            $('searchTypeBSB').setStyle('display', 'none');       
            
            
            mapSearch.LocateBranchsATMs();
            
        }  
             
        
        
    if (product) {
        $$('#searchTypeBranchTab a').removeClass('active');
        $$('#searchTypeServiceTab a').addClass('active');
        $$('#searchTypeBSBTab a').removeClass('active');

        $('searchTypeBranch').setStyle('display', 'none')
        $('searchTypeService').setStyle('display','block')
        $('searchTypeBSB').setStyle('display', 'none')

        switch (product) {
            case '1':
                $('radioBusiness').checked = 'checked';
                $("notMobileBanker").setStyle("display", "block");
                $("mobileBanker").setStyle("display", "none");
                break;
            case '2':
                $('radioFinPlan').checked = 'checked';
                $("notMobileBanker").setStyle("display", "block");
                $("mobileBanker").setStyle("display", "none");
                break;
            case '3':
                $('radioFX').checked = 'checked';
                $("notMobileBanker").setStyle("display", "block");
                $("mobileBanker").setStyle("display", "none");
                break;
            case '4':
                $('radioAgri').checked = 'checked';
                $("notMobileBanker").setStyle("display", "block");
                $("mobileBanker").setStyle("display", "none");
                break;
            case '5':
                $('radioMobile').checked = 'checked';
                $("notMobileBanker").setStyle("display", "none");
                $("mobileBanker").setStyle("display", "block");
                break;
        }
        mapSearch.LocateServices();
    }   
        
            
            
              
}
/*
    setupBSBTextBoxes
    --------------------
	Sets up event handlers for the BSB text boxes - forces the first text box to begin with 06,
	and only allows digits to be entered, and moves the cursor between the two boxes as required.
**/
function setupBSBTextBoxes() {
    var txtBSB1 = $$('.txtBSB1')[0];
    var txtBSB2 = $$('.txtBSB2')[0];

    $('searchTypeBSB').store('initTab', function() {
        txtBSB1.focus();
        setCaretTo(txtBSB1, 2);
    });

    txtBSB1.addEvent('keydown', function(event) {
        // because IE doesn't send keypress for backspace/delete
        if (event.key == 'backspace') {
            if (getSelectionStart(this) != 3) {
                event.stop();
            }
        } else if (event.key == 'delete') {
            if (getSelectionStart(this) != 2) {
                event.stop();
            }
        }
        if (event.code == 190) event.stop();
        if (event.code == 222) event.stop();
    });
    txtBSB1.addEvent('keypress', function(event) {
        event = new Event(event);
        if ((event.key < '0' || event.key > '9') && event.key != 'left' && event.key != 'right' && event.key != 'backspace' && event.key != 'delete' && event.key != 'tab') {
            event.stop();
        } else if (event.key >= 0 && event.key <= 9) {
            this.set('value', '06' + event.key);
            event.stop();
            txtBSB2.focus();
            setCaretTo(txtBSB2, 0);
            txtBSB2.select();
        } else if (event.key == 'backspace') {
            if (getSelectionStart(this) != 3) {
                event.stop();
            }
        } else if (event.key == 'delete') {
            if (getSelectionStart(this) != 2) {
                event.stop();
            }
        }
    });
    txtBSB1.addEvent('keyup', function(event) {
        
        if (event.key == 'right' && getSelectionStart(this) == 3) {
            txtBSB2.focus();
        } else if (event.key == 'backspace') {
            if (getSelectionStart(this) == 3 || getSelectionStart(this) == null) {
                this.set('value', '06');
            }
        } else if (event.key == 'delete') {
            if (getSelectionStart(this) == 3) {
                txtBSB2.set('value', txtBSB2.get('value').substring(1));
            } else if (getSelectionStart(this) == 2) {
                txtBSB1.set('value', '06' + txtBSB2.get('value').substring(0, 1));
                txtBSB2.set('value', txtBSB2.get('value').substring(1));
                setCaretTo(txtBSB1, 2);
            }
            
        }
    });
    txtBSB2.addEvent('keypress', function(event) {
        event = new Event(event);
        if ((event.key < '0' || event.key > '9') && event.key != 'left' && event.key != 'right' && event.key != 'backspace' && event.key != 'delete' && event.key != 'tab') {
            event.stop();
        }
    });
    txtBSB2.addEvent('keyup', function(event) {
        if (event.key == 'left') {
            if (getSelectionStart(this) == 0) {
                txtBSB1.focus();
                setCaretTo(txtBSB1, 3);
            }
        } else if (event.key == 'backspace') {
            if (this.get('value') == '' || getSelectionStart(this) == 0) {
                txtBSB1.focus();
                setCaretTo(txtBSB1, 3);
            }
        }
    });
    txtBSB2.addEvent('click', function(event) {
        txtBSB2.focus();
        txtBSB2.select();
    });
}

function getSelectionStart(o) {
    if (o.createTextRange) {
        var r = document.selection.createRange().duplicate();
        r.moveEnd('character', o.value.length);
        if (r.text == '') return o.value.length;
        return o.value.lastIndexOf(r.text);
    } else return o.selectionStart;
}

function setCaretTo(obj, pos) {
    if (obj.createTextRange) {
        /* Create a TextRange, set the internal pointer to
        a specified position and show the cursor at this
        position
        */
        var range = obj.createTextRange();
        range.move("character", pos);
        range.select();
    } else if (obj.selectionStart) {
        /* Gecko is a little bit shorter on that. Simply
        focus the element and set the selection to a
        specified position
        */
        obj.focus();
        obj.setSelectionRange(pos, pos);
    }
} 
