var searchFor = '';
var legalCharacters='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var NmValidChars = "0123456789";
var ValidSymbols = '- _&';

function clearText(thefield){
	if (thefield.defaultValue==thefield.value)
	thefield.value = "";
}

function isNumber( val ){
	for ( var i = 0; i < val.length; i++ )
	{
    	  var c = val.charAt( i );
          if (NmValidChars.indexOf(c) == -1)
          {
  	     return false;
          }
        }
  	return true;
}

function isValidString( val ){
   var validflag=false ;	
   var c = '';
   for ( var i = 0; i < val.length; i++ )
   {
    	  c = val.charAt( i );
          validflag=false ;	
   	  for (var Count = 0; Count < legalCharacters.length; Count++) {
		if (legalCharacters.charAt(Count) == c) {
			validflag=true;
		}
	  }
	  if (!validflag) {
	       break;
	  }     
   }       
   return validflag;
}

function isValidChar( val ){
      for (var Count = 0; Count < legalCharacters.length; Count++) {
	   if (legalCharacters.charAt(Count) == val) {
	 	return true;
	   }
      }
   return false;
}

function isValidSymbol( val ){

      for (var Count = 0; Count < ValidSymbols.length; Count++) {
	   if (ValidSymbols.charAt(Count) == val) {
	 	return true;
	   }
      }
   return false;
}

function isAlphaOrNumeric ( val ){
   if ( isValidChar ( val ) )
   {
      return true;
   }
   if ( isNumber ( val ) )
   {
      return true;
   }
   return false;
}

// use this function to remove the hyphen's from the index cat no string 
// this enables better Endeca searches
function prepIndexHyphen( inSearchString, separator ){
	
	var separator_ = '' ;
	
	if (separator) {
		separator_ = '-' ;
	}
				
	var isNotACatNum = true;

	// Check if it is 7 characters, if it is check that chars 1-3 & 5-7 are numeric and char 4 is a space or a hyphen  	
  	if ( ( inSearchString.length == 7 ) && ( inSearchString.substr( 3, 1) == ' ' || inSearchString.substr(3, 1) == '-')
                && ( isNumber( inSearchString.substr(0 ,3) ) ) && ( isNumber( inSearchString.substr(4 ,3) ) ) ) {
    	isNotACatNum = false;
    	inSearchString = inSearchString.substr(0 ,3) + separator_ + inSearchString.substr( 4, 3);    	
  	} else if ( ( inSearchString.length == 6 ) && ( isNumber( inSearchString ) ) ){
  		// Check if it is 6 characters in length and if they are numeric
    	isNotACatNum = false;    	    	
    	inSearchString = inSearchString.substr(0 ,3) + separator_ + inSearchString.substr( 3, 3);    	
  	}

  	return inSearchString;
}

function stripLeadingSpaces( fieldValue ){
	
	for ( var i = 0; i < fieldValue.length; i++ ){
  		var c = fieldValue.substring( i, i + 1 );
	    if ( c != ' ' ){
    	  	fieldValue = fieldValue.substring( i );
     		return fieldValue;
       	     }
  	}
  	return '';
  	
} 

function stripAmpersands( input ){

    var newstr = '';
    
    for ( var i = 0; i < input.length; ++i ) {
                ch = input.charAt( i );
                if ( ch != "&"){
                        newstr = newstr+( ch );
                } else {
                        newstr = newstr+( " " );
                }
    }
    
    		
    return newstr;
}


function toSearch( URLstr) {		
		location.href = (URLstr );	    			
}


function checkForm() {		
	
	
	var searchString = document.ProductSearchForm.searchtext.value;
	
  	var actionClass = "/s.do";
  	
	var ntk ='generic_search';
	
	var searchEmpty = false ;
			
	searchString = stripLeadingSpaces(searchString);	
	searchString = stripAmpersands(searchString);	


	if (searchString == ""  ||searchString == null ||searchString =='enter keyword or order number' || searchString =='keyword, model, cat no' || searchString == 'Search by keyword / item no.' || searchString =='Search or enter catalogue number'){
		alert ('You must enter a Search Description, please try again!');
		document.ProductSearchForm.searchtext.value = '';
		document.ProductSearchForm.searchtext.focus();    				
		searchEmpty = true ;
		
    	}
    	
    	else if (!isClean(searchString)) {
    		alert("Your search contains illegal characters");
    		searchEmpty = true;
    		searchString = null;
    		
    	} 
   	
    	else if (isCatalogueNumber(searchString)) {
        	searchString = sanitiseCatalogueNumber(searchString);
        		
        }
    		
        	               		
  	if (!searchEmpty) {
		var URL = 'http://'+domain+context+actionClass+'?Ntx=mode+matchallpartial&Nu=this_product&Np=1&Nty=1';	
		
		var selectZone = null;
		if (document.ProductSearchForm.selectzone != null) {
		  selectZone = document.ProductSearchForm.selectzone.value;
		  
		
		}
	    
		
		if (selectZone != null && selectZone !='all departments'){
		     selObj= document.ProductSearchForm.selectzone;	
			 var deptVal = selObj.options[selObj.selectedIndex].text;
			 var newDeptVal = deptVal.replace(/^\W+/, '');
		     URL = URL+'&N=' + selectZone+'&deptVal='+newDeptVal;
		   		
		}
	         
		location.href = (URL +'&Ntk='+ ntk + '&Ntt='+ searchString);	    			
 	}
}

function searchCalled() {

n = (document.layers)?true:false;
document.onkeydown = keyP;
if (n) document.captureEvents(Event.KEYDOWN);

}   

function keyP(e) {
	nKey=(e && e.which != null)?e.which:window.event.keyCode;
	if (nKey==13) checkForm();
}

 function isIndexCatNumber(inSearchText) {

    if (inSearchText.length == 6 && isNumber(inSearchText) ) {
      return true;
    }

    // otherwise check if it is a 999-999 format
   if ( inSearchText.length == 7
        && isNumber( inSearchText.substr(0,1) ) && isNumber( inSearchText.substr(1,1) ) && isNumber( inSearchText.substr(2,1) )
        && isNumber( inSearchText.substr(4,1) ) && isNumber( inSearchText.substr(5,1) ) && isNumber( inSearchText.substr(6,1) )
      )  
   {
      return true;
   } 

    return false;
 }

function isPartialCatNumber(inSearchText) {
    if (inSearchText.length < 6) {
      return true;
    } 
    return false;
 }

function isEntertainmentCatNumber(inSearchText) {
	var re = new RegExp("^ *[\\d]{2} *[\\d]{3}[\\d]{0,2} *$");	
   if ((inSearchText.match(re))?true:false) {
      return true;
    } 
    return false;
}	

// Match Catalogue Number based on the following:
//	 - Optional space at the start
//	 - Exactly two alpha-numeric characters
//	 - Followed by any amount of spaces
//	 - Exactly three numeric characters
//	 - Followed by 0, 1 or 2 alpha-numerics
//	 - Optional space at the end
//
function isCatalogueNumber(inSearchText) {
  var re = new RegExp("^ *[a-zA-Z\\d]{2} *[\\d]{3}[a-zA-Z\\d]{0,2} *$");
  return (inSearchText.match(re))?true:false;
}

// PRE-CONDITIONS: 
//	- inSearchText has been passed through isCatalogueNumber and found to be true
function sanitiseCatalogueNumber(inSearchText) {
  inSearchText = inSearchText.replace(/\s/g, ""); // Remove Spaces
  return inSearchText.substr(0,5);             // Only return the first 5 characters (isCatalogueNumber ensures there are minimum of 5)
}

 
 function isClean(inSearchText) {

 	for (i=0; i<inSearchText.length; i++) {
 		
 		if ( ( !isNumber(inSearchText.charAt(i)) ) && ( !isValidChar(inSearchText.charAt(i)) ) && ( !isValidSymbol(inSearchText.charAt(i)) )  )
 		return false;
 	}
 	
 	return true;
 }//isClean
 

function checkForMultipleIndexCatNos(inSearchText, separator) {
			
	newSearchString = '' ;
	searchArray = new Array() ;
    
	if (inSearchText.indexOf(' ') > 0) {		
		searchArray = inSearchText.split(' ') ;

		for (i = 0; i < searchArray.length; i ++) {
			if (isIndexCatNumber(searchArray[i])) {		
				newSearchString += prepIndexHyphen(searchArray[i], separator) + ' ' ;								
			} else {
				newSearchString += searchArray[i] + ' ' ;					
			}			
		}		
	} else {
		newSearchString = inSearchText ;		
	}	
	return newSearchString ;	
		
}//checkForMultipleIndexCatNos


function formatNtt(inNtt) {	
	
	var outNtt = prepIndexHyphen(inNtt, true) ;		
	
	if (outNtt.length == inNtt.length) {
		outNtt = checkForMultipleIndexCatNos(inNtt, true) ;
	}	
	
	return outNtt ;
}//formatNtt
		
	
