
/*
* eBP Java Script Utility Functions
*/
var metaArray = document.getElementsByTagName("meta"); // build array of meta tags
/*
*   Return the Metadata value for a gien metadata tag 
*   <META NAME="WSS.pageTitle" CONTENT="WSS PAGE TITLE">
*   Returns WSS PAGE TILE for the tag WSS.PageTitle
*/
function getMetaTagValue(strTagName) {
    var strMetaTagValue = "" ;
    for(var i=0; metaArray[i]; i++) {
        if(metaArray[i].getAttribute("name") == strTagName) {
            strMetaTagValue = metaArray[i].getAttribute("content");
            break;
        }
    }
    return strMetaTagValue ;
}

/* Search related javascript utility functions 
 used to set hidden values for search results pagination and submit
 */
 function paginationTop(pageno,qt,endPageListing){
    document.frmPaginationTop.reqPageNum.value = pageno;
    document.frmPaginationTop.qt.value = qt;
    document.frmPaginationTop.reqEndPageListing.value = endPageListing;
    document.frmPaginationTop.submit();
    return true;
}
function paginationBottom(pageno,qt,endPageListing){
    document.frmpaginationBottom.reqPageNum.value = pageno;
    document.frmpaginationBottom.qt.value = qt;
    document.frmpaginationBottom.reqEndPageListing.value = endPageListing;
    document.frmpaginationBottom.submit();
    return true;
}


/* Search related javascript utility functions 
 used to set hidden values for search results pagination and submit 1
 */
 function paginationNext(){
     pagePagination(parseInt(document.query.reqPageNum.value) + 1);
}
function paginationPrevious(){
    pagePagination(parseInt(document.query.reqPageNum.value) - 1);
}

function pagePagination(pageno){
    document.query.reqPageNum.value = pageno;
    document.query.submit();
    return true;
}

function queryWithFacet(facetID) {
	document.query.searchFacet.value = facetID;
	document.query.reqPageNum.value = 1;
	document.query.submit();
	return true;
}

function query_viewAllResults(){
    document.query.qt.value = '';
    document.query.queryResultSortOrder.value = '1';
    document.query.reqPageNum.value = 1;

    var i=0;
    var e = document.getElementsByTagName("input");
    for(i=0;i<e.length;i++){
        if (e[i].name.indexOf("qp_Emd")>-1){
    	    if (!(e[i].name=="qp_EmdSchemaType" || e[i].name=="qp_EmdContentType" )){
		e[i].value="";
	    }
	}

    }

    e = document.getElementsByTagName("select");
    for(i=0;i<e.length;i++){
		if (e[i].name.indexOf("qp_Emd")>-1){
			//Resetting the options first
			var opts=e[i].options;
			for(j=0;j<opts.length;j++){
				opts[j].selected=false;
			}	
    		e[i].value="ALL";
		}
    }
	document.getElementById('submitBtn').click();
    //document.query.submit();
    return true;
}

function cleanCharacters(str) {
var text = str;
text = text.replace(/ /g, "+");
var pattern = new RegExp(/[^a-zA-Z_0-9_+_\/_-]/g);
var result = text.replace(pattern, "");
return result;
}
function cleanSearchKeywordsCharacters(str) {
var text = str;
text = text.replace(/ /g, "+");
var pattern = new RegExp(/[^a-zA-Z_0-9_+_\/_-_&_#_;_']/g);
var result = text.replace(pattern, "");
return result;
}


function validateSearchText(searchTextField, alertMsg) {
    if(searchTextField!=null) {
        if(searchTextField.value.length<=0) {
            return false;
        } else {
            return true;
        }
    }
}

function sanitizeSearchString(){


// our string that we are going to operate on";
var inputstr = document.query.qt.value;
// an empty string to hold the result
var workingStr="";
// our Regular Expression
var regex=/\<.*?\>/g;
// Remove HTML tags in valid format first
workingStr=inputstr.replace(regex,"");
var strLen = workingStr.length;
//alert (strLen);
var outputStr = "";
// Now remove all non-alphanumeric character
    var jj = 0;
    for(var x=0; x < strLen; x++) {
        var c = workingStr.charAt(x);
            //alert(c);
            if (((c >= 'A') && (c <= 'Z'))  ||    ((c >= 'a') && (c <= 'z'))  ||  ((c >= '0') && (c <= '9'))  ||  (c == ',') ||  (c == '\"')  ||  (c == ' ')) {
                    outputStr = outputStr+c;
            //        alert(c);
                    jj++;
                }
    }
//alert(outputStr);
// document.query.qt.value = outputStr;
// reset the page to 1 
document.query.reqPageNum.value = 1;
document.query.submit();
return true;
}

function sanitizeHeaderSearchString() {

//if(!validateSearchText(document.headerSearch.qt, alertMsg)) {
  //  return false;
//}

// our string that we are going to operate on";
var inputstr = document.headerSearch.qt.value;
// an empty string to hold the result
var workingStr="";
// our Regular Expression
var regex=/\<.*?\>/g;
// Remove HTML tags in valid format first
workingStr=inputstr.replace(regex,"");
var strLen = workingStr.length;
//alert (strLen);
var outputStr = "";
// Now remove all non-alphanumeric character
    var jj = 0;
    for(var x=0; x < strLen; x++) {
        var c = workingStr.charAt(x);
            //alert(c);
          if (((c >= 'A') && (c <= 'Z'))  ||    ((c >= 'a') && (c <= 'z'))  ||  ((c >= '0') && (c <= '9'))  ||  (c == ',') ||  (c == '\"')  ||  (c == ' ')) {
                    outputStr = outputStr+c;
                    //alert(c);
                    jj++;
                }
    }
//alert(outputStr);
// document.headerSearch.qt.value = outputStr;
document.headerSearch.submit();
return true;
}

/*
*************************************************************
*   Utility UTF8 BASE64 encode and decode functions: START  * 
*************************************************************
*/

var Base64 = {

    // private property
    _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

    // public method for encoding
    encode : function (input) {
        var output = "";
        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
        var i = 0;

        input = Base64._utf8_encode(input);

        while (i < input.length) {

            chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);

            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;

            if (isNaN(chr2)) {
                enc3 = enc4 = 64;
            } else if (isNaN(chr3)) {
                enc4 = 64;
            }

            output = output +
            this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
            this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

        }

        return output;
    },

    // public method for decoding
    decode : function (input) {
        var output = "";
        var chr1, chr2, chr3;
        var enc1, enc2, enc3, enc4;
        var i = 0;

        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

        while (i < input.length) {

            enc1 = this._keyStr.indexOf(input.charAt(i++));
            enc2 = this._keyStr.indexOf(input.charAt(i++));
            enc3 = this._keyStr.indexOf(input.charAt(i++));
            enc4 = this._keyStr.indexOf(input.charAt(i++));

            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;

            output = output + String.fromCharCode(chr1);

            if (enc3 != 64) {
                output = output + String.fromCharCode(chr2);
            }
            if (enc4 != 64) {
                output = output + String.fromCharCode(chr3);
            }

        }

        output = Base64._utf8_decode(output);

        return output;

    },

    // private method for UTF-8 encoding
    _utf8_encode : function (string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    },

    // private method for UTF-8 decoding
    _utf8_decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }

}

/*
*************************************************************
*   Utility UTF8 BASE64 encode and decode functions: END    * 
*************************************************************
*/

/* This function changes param searchQueryField.value to param newValue
   and suggestionTypeField.value to param suggestionType; it then calls submit function of param form.
 	
   form -> HTML Form
   field -> HTML Form Field
   value -> New value for param field
*/
function selectQuerySuggestion(htmlForm, searchQueryField, newValue, suggestionTypeField, suggestionType){
var searchFieldValue = newValue;
var ampersand = "&039;";
if(searchFieldValue.indexOf(ampersand)!=-1){
	//searchFieldValue = searchFieldValue.replace("&039;","\'");
	searchFieldValue = replaceAll(searchFieldValue,"&039;","\'");
	searchQueryField.value = searchFieldValue
}else{
	searchQueryField.value=newValue;
}
	suggestionTypeField.value=suggestionType;
	if(htmlForm.reqPageNum){htmlForm.reqPageNum.value = 1;}
	htmlForm.submit();
	return true;
}

var querySelectClientValidation=function(){	
	var $form=$("form[name='query']");
	$form.find("select[name^='qp_']").bind('change',function(){
		var qs="";
		var inputs=$form.find("input[name^='qp_'][type='hidden']").size();
		$form.find("input[type='text']").each(function(){
			if($(this).val().length!=0){
				qs+=$(this).val() + " | ";
			};
		}).end().find("input[name^='qp_'][type='hidden']").each(function(i){
			qs+= this.name.substring(3)+":"+$(this).val();
			qs+= (i<(inputs-1)) ? " | " : " ";
		}).end().find("select[name^='qp_']").each(function(){
			var name=this.name.substring(3);
			if($(this).find("option:selected").length) qs+="| ";
			$(this).find("option:selected:not(:contains('ALL'))").each(function(){
				qs+=name+":'"+$(this).val()+"' ";
			});
		});
		//if(window.console) console.log(qs);
		if(qs.length>$form.find('#maxQueryLength').val()){
			alert($form.find('#exceedFiltersPreText').val());
		};
	});
};	

function replaceAll(Source,stringToFind,stringToReplace){
  var temp = Source;
    var index = temp.indexOf(stringToFind);
        while(index != -1){
            temp = temp.replace(stringToFind,stringToReplace);
            index = temp.indexOf(stringToFind);
        }
        return temp;
}


