/*
Author: Kazi Masudul Alam (kma@pyxisnet.com)
*/    
// implement binary search
function  binarySearch ( key, dataList,  lo,  hi){
        if (hi <= lo) {
            return -1;
        }
        var mid = (lo + (hi - lo) / 2);
    	  
	  mid = mid.toString();
		
	  mid = parseInt(mid);

        if(Math.round(mid) >= dataList.length){
          return -1;
        }
        
        var midData = dataList[Math.round(mid)];
        
        
        var cmp = compareTo(midData,key);

        if (cmp > 0) {
            if(midData.toString().search(key.toString())==0){
                return Math.round(mid);
            }

        
            return binarySearch(key, dataList, lo, mid);
        } else if (cmp < 0) {
            if(key.toString().search(midData.toString())==0){
                return Math.round(mid);
            }

            return binarySearch(key, dataList, mid + 1, hi);
        } else {
         
            return Math.round(mid);
        }
}

// search specific region of data
function findBound (data, mid, dataList){
        
        var upper = mid;
        var lower = mid;
        for(var i = mid; i < dataList.length; i++){
        
            if(dataList[i].toString().search(data.toString())==0 ){
                upper = i;
                continue;
            }
            break;
        }
    
        if(data < dataList[mid]){
     
            for(var i = mid; i >= 0; i--){
                if(dataList[i].toString().search(data.toString())==0 ){
                    lower = i;
                    continue;
                }
                break;
      
            }
        }else if(data > dataList[mid]){
            for(var i = mid; i >= 0; i--){
                if(data.toString().search(dataList[i].toString())==0 ){
                    lower = i;
                    continue;
                }
                break;
      
            }
        }
        return [lower,upper];
    
    }
// main calling function    
function searchData(key, searchData){
               
        var pos = binarySearch(key,searchData,0,searchData.length);
        if(pos == -1){
            return "";
        }
        
        bound = findBound(key,pos, searchData);
        
        searchList = new Array(bound[1] - bound[0]+1);
        var j = 0;
        for(var i = bound[0]; i <= bound[1]; i++){
            searchList[j++] = searchData[i];
        }
        
        return searchList;
}
    
// comparing between two data  
function compareTo(first, second) {
        if (first > second) {
            return 1;
        } else if (first < second) {
            return -1;
        } else {
            return 0;
        }
}


