﻿//--------------------------------------------------------------------------------------------
// Name		        : 	InterSearch.js
//
// Description   	: 	Main javascript function library to support client-side functionality.
//				        All functions and global variables prefixed with IS to avoid clashes
//				        with any other javascript modules merged into the master page.
//
// Requirements 	: 	None
//
// Author(s)     	: 	Martin O'Brian, Tom Annetts, Jon Moore
//
// Date          	: 	11.10.2006
//--------------------------------------------------------------------------------------------

// Hard-coded prefix that will be attached to all controls when the content pages are
// merged with the master page
var IS_MASTER_CONTENT_ID = 'TMT_contentPlaceHolderTM_';

function IS_getMasterPageElement(localId){
    // Append Master Page and Content Page ID.
    var masterPageId = IS_MASTER_CONTENT_ID + localId;

    // Search for element in DOM using master page id.
    var masterPageControl = IS_getPageElement(masterPageId);
    if (masterPageControl != null) return masterPageControl;

    // Element may not be ASP.NET Server control so return search on local id.
    return IS_getPageElement(localId);
}

function IS_getPageElement(id){
    // Use appropriate method for returning a page element in the browser.
    if(document.getElementById){
        return document.getElementById(id);
    }else if(document.all){
        return document.all[id];
    }else if(document.layers){
        return document.layers[id];
    }
}

function IS_searchFormInit(){
    var pageElement, operatorSet;

    // Vienna search operator dropdown list controls.
    var cboFirstViennaOperator = IS_getMasterPageElement('cboFirstViennaOperator');
    var cboSecondViennaOperator = IS_getMasterPageElement('cboSecondViennaOperator');

    // Hide second vienna classification search control.
    pageElement = IS_getMasterPageElement('secondViennaClassification');

    if(pageElement != null){
        operatorSet = (cboFirstViennaOperator.value == 'and' || cboFirstViennaOperator.value == 'or');
        MM_showHideBlocks('secondViennaClassification', '', operatorSet ? 'show' : 'hide');
    }

    // Hide third vienna classification search control.
    pageElement = IS_getMasterPageElement('thirdViennaClassification');

    if(pageElement != null){
        operatorSet = (cboSecondViennaOperator.value == 'and' || cboSecondViennaOperator.value == 'or');
        MM_showHideBlocks('thirdViennaClassification', '', operatorSet ? 'show' : 'hide');
    }
}

function IS_clearClasses(){
    var chkClass;

    // Clear checked status of any nice class selections.
	for(var ClassNo = 1; ClassNo < 46; ClassNo++){
        chkClass = IS_getMasterPageElement('chkClass' + ClassNo);
        if(chkClass != null) chkClass.checked = false;
	}
}

function IS_validateSearchParameters(sender, e){
    var errMsgTextSearch = '', errMsgViennaSearch = '', errMsgFilingDate = '';

    // Label controls used to display error messages.
    var lblTextError = IS_getMasterPageElement('lblTextError');
    var lblViennaError = IS_getMasterPageElement('lblViennaError');
    var lblDateError = IS_getMasterPageElement('lblDateError');

    // Styling containers used for displaying error messages.
    var divTextError = IS_getMasterPageElement('divTextError');
    var divViennaError = IS_getMasterPageElement('divViennaError');
    var divDateError = IS_getMasterPageElement('divDateError');

    // Search option dropdown list control.
    var cboSearchOption = IS_getMasterPageElement('cboSearchOption');

    // Search term text controls.
    var txtFirstSearchTerm = IS_getMasterPageElement('txtText');
    var txtSecondSearchTerm = IS_getMasterPageElement('txtText2');
    var txtThirdSearchTerm = IS_getMasterPageElement('txtText3');

    // Vienna code dropdown list controls.
    var cboFirstViennaCategory = IS_getMasterPageElement('cboFirstViennaCategory');
    var cboFirstViennaDivision = IS_getMasterPageElement('cboFirstViennaDivision');
    var cboFirstViennaSection = IS_getMasterPageElement('cboFirstViennaSection');

    var cboSecondViennaCategory = IS_getMasterPageElement('cboSecondViennaCategory');
    var cboSecondViennaDivision = IS_getMasterPageElement('cboSecondViennaDivision');
    var cboSecondViennaSection = IS_getMasterPageElement('cboSecondViennaSection');

    var cboThirdViennaCategory = IS_getMasterPageElement('cboThirdViennaCategory');
    var cboThirdViennaDivision = IS_getMasterPageElement('cboThirdViennaDivision');
    var cboThirdViennaSection = IS_getMasterPageElement('cboThirdViennaSection');

    // Filing dates.
    var FilingDateFrom = new Date(IS_getMasterPageElement('cboYearFrom').value,
        IS_getMasterPageElement('cboMonthFrom').value - 1, IS_getMasterPageElement('cboDayFrom').value);
    var FilingDateTo = new Date(IS_getMasterPageElement('cboYearTo').value,
        IS_getMasterPageElement('cboMonthTo').value - 1, IS_getMasterPageElement('cboDayTo').value);

    // Text search validation [search options word, word or image, word and image].
    if('1345'.indexOf(cboSearchOption.value) != -1){
        if(txtFirstSearchTerm.value == '' && txtSecondSearchTerm.value == '' && txtThirdSearchTerm.value == ''){
	        errMsgTextSearch = 'Enter the text to search.';
        }
    }

    // Vienna code validation [search options image, word or image, word and image].
    if('2345'.indexOf(cboSearchOption.value) != -1){
        if(cboFirstViennaCategory.value == '' && cboFirstViennaDivision.value == '' && cboFirstViennaSection.value == '' &&
            cboSecondViennaCategory.value == '' && cboSecondViennaDivision.value == '' && cboSecondViennaSection.value == '' &&
            cboThirdViennaCategory.value == '' && cboThirdViennaDivision.value == '' && cboThirdViennaSection.value == ''){
            errMsgViennaSearch = 'Enter the image class to search.';
        }
    }

    /* Reserved Mark searches are either word or image or both. Therefore
       an error is only applicable for this search option if the text and
       image error messages have been set above. */
    if(cboSearchOption.value == 5){
        if(errMsgTextSearch.length == 0 || errMsgViennaSearch.length == 0){
            errMsgTextSearch = '';
            errMsgViennaSearch = '';
        }
    }

    // Filing date validation.
	if(FilingDateFrom.getMonth() != IS_getMasterPageElement('cboMonthFrom').value - 1){
	    errMsgFilingDate = 'From date is not valid.';
	}else if(FilingDateTo.getMonth() != IS_getMasterPageElement('cboMonthTo').value - 1){
        errMsgFilingDate = 'To date is not valid.';
    }else if(FilingDateTo < FilingDateFrom){
        errMsgFilingDate = 'The second search date cannot preceed the first.'
    }

	// Set text of error message label controls.
	IS_setText(lblTextError, errMsgTextSearch);
    IS_setText(lblViennaError, errMsgViennaSearch);
	IS_setText(lblDateError, errMsgFilingDate);

	// Set visibility of styling containers, depending on error message after validation.
	divTextError.style.visibility = (errMsgTextSearch.length != 0 ? 'visible' : 'hidden');
	divViennaError.style.visibility = (errMsgViennaSearch.length != 0 ? 'visible' : 'hidden');
	divDateError.style.visibility = (errMsgFilingDate.length != 0 ? 'visible' : 'hidden');

    // Set IsValid flag of event argument object.
    e.IsValid = (errMsgTextSearch.length == 0 && errMsgViennaSearch == 0 && errMsgFilingDate == 0);
}

function IS_setText(ctl, text){
    if (ctl.innerHTML != 'undefined'){
        ctl.innerHTML = text;
    }else if(ctl.innerText != 'undefined'){
        ctl.innerText = text;
    }else if(ctl.textContent != 'undefined'){
        ctl.textContent = text;
    }
}

function IS_getText(ctl){
    if (ctl.innerHTML != 'undefined'){
        return ctl.innerHTML;
    }else if(ctl.innerText != 'undefined'){
        return ctl.innerText;
    }else if(ctl.textContent != 'undefined'){
        return ctl.textContent;
    }
}

function IS_showhideImageSection(ctl, section){
    pageElement = IS_getMasterPageElement(section);

    if(pageElement != null){
        MM_showHideBlocks(section, '', (ctl.value == 'and' || ctl.value == 'or') ? 'show' : 'hide');
    }
}
