///////////////////////////////////////////////////////////////////////
//     This script was designed by Kapur Technologies Pvt Ltd        //
//     for Kapur Inc's list2shop.com                                 //
//                                                                   //
//                                                                   //
//     this program is copyrighted, you need prior written           //
//     permission to use or copy this program                        //
///////////////////////////////////////////////////////////////////////
// jsSearch starts here

function new_search(list_id, list_box_id, search_box_id){ 
    if(list_id==0){ /* list id should be 1 or 2, 
based on which list to search all or favorite, 
if it is 0 (in shopping_list page, it will be zero), 
we need to see which list is active*/
        //alert(activeList);
        list_id=activeList;
    }
    
    var names, ids;
    if (list_id==1){
        names = list1Names;
         // names = list_store_values[0]; //for all store
        values = list1Values;
    }
    else{
        names = list2Names;
        //names = list_store_values[1]; //for favorite store
        values = list2Values;
    }
    var length =  names.length;
      
    //    alert(list_id+" "+names.length+" "+values.length+" "+length);
   
    clearListBox(document.getElementById(list_box_id));
    var ss = document.getElementById(search_box_id).value.toLowerCase(); // searchString
    var ssL=ss.length;
    if(ssL>0){
        for(var i=0; i<length;i++){
            // alert(names[i]);
            var optionText = names[i].split(" ");
            optionText[optionText.length]=names[i]; // added the original full string as well to the search-strings list
            for(var j=0; j<optionText.length; j++){
                if(ss==optionText[j].substring(0,ssL).toLowerCase()){
                    var optn = document.createElement("OPTION");
                    optn.text = names[i];
                    optn.value = values[i];
                    document.getElementById(list_box_id).options.add(optn);
                    // no need to select anyting     document.getElementById(box_id).options[document.getElementById(box_id).options.length-1].selected=true;
                    break;    
                }
            }
        }
    }
    else{
        //  alert("reverting to orig"+length);
        clearListBox(document.getElementById(list_box_id));
        for(var i=0; i<length;i++){
            var optn = document.createElement("OPTION");
            optn.text = names[i];
            optn.value = values[i];
            document.getElementById(list_box_id).options.add(optn);
        }
    }
    
}


function refill_js_objects(list_id, list_box)
{
    // alert(list_id+' '+list_box);
    if(list_id==0){ /* list id should be 1 or 2, 
based on which list to search all or favorite, 
if it is 0 (in shopping_list page, it will be zero), 
we need to see which list is active*/
        //alert(activeList);
        list_id=activeList;
    }
    var names, ids;
    if (list_id==1){
        list1Names=new Array();
        list1Values=new Array();
        names = list1Names;
        values = list1Values;
    }
    else{
        list2Names=new Array();
        list2Values=new Array();
        names = list2Names;
        values = list2Values;
    }
    var length=list_box.options.length;
    //  alert("length of list_box is : "+length);
    
    for(var i=0; i<length;i++){
        names[i]=list_box.options[i].text;
        values[i]=list_box.options[i].value;
    }
    //alert(list1Names.length+" list2lenght:"+list2Names.length);
    
}


function removeItem(item_name, list_box){ // this function is called by the move() functions, to remove the item from the js list objects
    //  alert(item_name+''+list_box.id);
    if(list_box.id=='select_stores' || list_box.id=='select_all_prod'){
        //     alert('remove from list 1');
        var index =getItemIndex(list1Names,item_name); 
        //var index = getItemIndex(list_store_values[0],item_name); 
        //alert(index);
        list1Names.splice(index,1);
        //list_store_values[0].splice(index,1);
        list1Values.splice(index,1);
    }
    else{
        index =getItemIndex(list2Names,item_name); 
        //index =getItemIndex(list_store_values[1],item_name); 
        //alert(index);
        list2Names.splice(index,1);
        //list_store_values[1].splice(index,1);
        list2Values.splice(index,1);
    }
}

// priyesh 06feb - trim() moved to common_functions  

function getItemIndex(array, item_name){ 
    //alert(array.length+' '+item_name);
    for(var i=0; i<array.length;i++){
        // alert(item_name+' '+array[i]);
        if(item_name.trim() == array[i].trim()){
            return i;
        }
        //alert(i);
    }
}


function addNewItem(list_box, item_name, item_value ){// this function is called by the move function to add a new item to the js object
    //alert(list_box.id+' '+item_name+' '+item_value);
    if(list_box.id=='select_stores' || list_box.id=='select_all_prod'){
        list1Names[list1Names.length]=item_name;
        //list_store_values[0][list_store_values[0].length]=item_name;
        list1Values[list1Values.length]=item_value;
    }
    else{
        list2Names[list2Names.length]=item_name;
        //list_store_values[1][list_store_values[1].length]=item_name;
        list2Values[list2Values.length]=item_value;
    }
      
}

function addNewItemInList(item_name, item_value){// this function is called by addItem ajax, so that the item gets added in the list
    // alert("to add in js object: "+item_name+" "+item_value);
    list1Names.splice(0, 0, item_name);
    //list_store_values[0].splice(0, 0, item_name);
    list1Values.splice(0, 0, item_value);
}

function addNewProductInList(item_name, item_value){
    // alert("hello");
    productNames[0].splice(0, 0, item_name);
    productIds[0].splice(0, 0, item_value);
}

function addNewOption(list_box, item_name, item_value){ // this will add a new option to the top of the select box.
    //  alert("to add : "+item_name+" "+item_value+" in : "+list_box.id);
    list_box.options[list_box.options.length]=new Option(item_name, item_value);
    var length = list_box.options.length;
   
    //alert(length);
    for(var i=length; i>1; i--){
        list_box.options[i-1].text = list_box.options[i-2].text;
        list_box.options[i-1].value = list_box.options[i-2].value;
        //  alert( list_box.options[i-1].text +' '+ list_box.options[i-2].text);
    }
    list_box.options[0].text = item_name;
    list_box.options[0].value = item_value;
}


// AJAX ADD NEW ITEM (product or store )
var http=getHTTPObject();
function addItem(type,textBox) {   //this function makes Ajax call 
    // alert(type+' '+textBox.id);
    var searchTextBoxval = stringTrim(textBox.value);
    if(searchTextBoxval==''){
        showError('add_item_message', getMessage(117));
        return false;
    }
    try {
        if(addItem_validate(searchTextBoxval)==true){
            var url="add_favorite_item.do?" + type + "=" + escape(searchTextBoxval);
            http.open("GET", url, true);
            http.onreadystatechange=addItem_handleHttpResponse;
            http.send(null);
        }
    } catch (e) {
        showError('add_item_message', getMessage(112));
    }//end catch
      
} //end addItem

function addItem_handleHttpResponse() {
    if(http.readyState==4) {
        if(http.status==200) {
            addItem_handleResponseFromServer(http.responseText); 
        }
        //        else{
        //            showMessage("add_item_message", "Not able to retrieve data"); 
        //        }
    }  //end if
} //end function

function addItem_handleResponseFromServer(data) { 
    var result_array = new Array();
//    alert("addItem_handleResponseFromServer(), DATA returned from AJAX call= " + data);
    //result_array= data.split(",");
    result_array=breakAndDeEscape(data, "\\" , ",")
    if(((stringTrim(result_array[0]))== "NewProductAdded") || ((stringTrim(result_array[0]))== "NewStoreAdded")) {
        //alert('new item, 1');
        var  item_name=(stringTrim(result_array[1]));
        var item_value=(stringTrim(result_array[2]));
    }
    else if((stringTrim(result_array[0]))== "duplicateProduct")    {
        showMessage("add_item_message", getMessage(114));
    }
    else if((stringTrim(result_array[0]))== "duplicateStore")    {
        showMessage("add_item_message", getMessage(130));
    }
    else if((stringTrim(result_array[0]))== "UnRegisteredNotAllowedToAdd")   {
        showDivError("add_item_message", getMessage(115));
    }
    else if((stringTrim(result_array[0]))== "sessionTimeOut")   {
        js_action();
        //        document.getElementById('sessionStatus').value="sessionTimeOut";
        //alert(getMessage(118));        
        location.href="logout.do";
        //showDivError("add_item_message", getMessage(118));
    }  
    // now addition on the basis of first if condition of this function.
    if((stringTrim(result_array[0]))== "NewProductAdded") 
    { 
        //populateNewItemInOriginalLists(1,'select_all_prod', newItemName,newItemValue );
        //alert(window.location);
        if((window.location+"").indexOf("shopping_list.do")==-1){// favorite_products.do
            addNewItemInList(item_name, item_value);
            addNewOption(document.getElementById("select_all_prod"), item_name, item_value);
            
            document.getElementById('searchProductText').value='';
            new_search(1,'select_all_prod','searchProductText');
        }else{ //shopping_list.do
            //  alert("shopping_list.do");
            addNewProductInList(item_name, item_value);
            addNewOption(document.getElementById("select_products"), item_name, item_value);
            populate2('select_products',productNames[0],productIds[0])
            document.getElementById("select_units").options[0].selected = true;
            //alert("adding the product to productIdNameMap, product: "+item_name+", product_id:"+item_value);
            productIdNameMap[item_name.trim()]=item_value;
            //alert("productIdNameMap[item_name.trim()] is : "+productIdNameMap[item_name.trim()]);
            //populate2('select_products',productNames[this.value],productIds[this.value];
        }
        showMessage("add_item_message", getMessage(116)); 
    }
    if((stringTrim(result_array[0]))== "NewStoreAdded") 
    {  if((window.location+"").indexOf("shopping_list.do")==-1){// favorite_stores.do
            addNewItemInList(item_name, item_value);
            addNewOption(document.getElementById("select_stores"), item_name, item_value);
            document.getElementById('searchStoreText').value='';
            new_search(1,'select_stores','searchStoreText');
        }else{ //shopping_list.do
            // alert("shopping_list.do");
            addNewItemInList(item_name, item_value);
            addNewOption(document.getElementById("select_stores"), item_name, item_value);
            showBlueArrowStore('blue_arrow_atAll_link_of_store');
            activeList=1;
            document.getElementById('search_text_stores').value='';
            new_search(1,'select_stores','search_text_stores');
            //alert("adding the store to storeIdNameMap, store: "+item_name+", store_id:"+item_value);
            storeIdNameMap[item_name.trim()]=item_value;
            //alert("storeIdNameMap[item_name.trim()] is : "+storeIdNameMap[item_name.trim()]);
        }
        //alert("@119: "+result_array[1]+" nm:"+newItemName+" val:"+newItemValue);
        //populateNewItemInOriginalLists(3, 'select_stores',newItemName,newItemValue );
        showMessage("add_item_message", getMessage(113)); 
    }
    
}









// to remove the below functions - //priyesh today is  20jan







var originalLists = new Array();

function populateOriginalLists(list_type_id,box_id){
    //list type id =1-product_all_text,2-product_all_value,3-store_all_text,4,5,6,7-product_fav_text,..,12
    var length=document.getElementById(box_id).options.length;
    var originalListBox1Text = new Array();
    var originalListBox1Values = new Array();
    for(var i=0; i<length;i++){
        originalListBox1Text[i]=document.getElementById(box_id).options[i].text;
        originalListBox1Values[i]=document.getElementById(box_id).options[i].value;
    }
    originalLists[list_type_id]=originalListBox1Text;
    originalLists[list_type_id+1]=originalListBox1Values;
}
function search(list_type_id,box_id,text_id){
    var length=0; //=originalLists[list_type_id].length;
    if (box_id == 'favorite_prod'){  //handles new products which are moved in list but not saved by user
        //alert('box_id= '+box_id); 
        populateOriginalLists(7,'favorite_prod'); 
        length=originalLists[list_type_id].length;
    }
    else if (box_id == 'ListBox2'){  //handles new stores which are moved in list but not saved by user
        //alert('box_id= '+box_id); 
        populateOriginalLists(9,'ListBox2');   
        length=originalLists[list_type_id].length;
    }
    else if(box_id == 'select_products'){        //to search product from 'All' category product
        //alert('hello '+document.getElementById('select_units').value);       
        var category_id=document.getElementById('select_units').value; // search from the list of the products which belong to the selected category and not from the all list.
        if (category_id==null || category_id==''){
            category_id=0;
        }
        var originalListBox1Text = new Array();
        var originalListBox1Values = new Array();
        length=productNames[category_id].length;
        for(var i=0; i<length;i++){
            originalListBox1Text[i]=productNames[category_id][i];
            originalListBox1Values[i]=productIds[category_id][i];
        }
        originalLists[list_type_id]=originalListBox1Text;
        originalLists[list_type_id+1]=originalListBox1Values;
    }
    else{
        length=originalLists[list_type_id].length;
    }
    //alert("search(),length= "+length);
    clearListBox(document.getElementById(box_id));
    var ss = document.getElementById(text_id).value.toLowerCase(); // searchString
    var ssL=ss.length;
    // alert(list_type_id+" : "+box_id+" : "+text_id);
    if(ssL>0){
        for(var i=0; i<length;i++){
            var optionText = originalLists[list_type_id][i].split(" ");
            optionText[optionText.length]=originalLists[list_type_id][i]; // added the original full string as well to the search-strings list
            for(var j=0; j<optionText.length; j++){
                if(ss==optionText[j].substring(0,ssL).toLowerCase()){
                    var optn = document.createElement("OPTION");
                    optn.text = originalLists[list_type_id][i];
                    optn.value = originalLists[list_type_id+1][i];
                    document.getElementById(box_id).options.add(optn);
                    // no need to select anyting     document.getElementById(box_id).options[document.getElementById(box_id).options.length-1].selected=true;
                    break;    
                }
            }
        }
        // alert("search(), originalLists[originalLists[list_type_id].length-1] = "+
        //    originalLists[originalLists[list_type_id].length-1]+ " |||||originalLists[originalLists[list_type_id].length] = "+
        //    originalLists[originalLists[list_type_id].length]);
        /*    commented so that only matching items are displayed for(var i=0; i<length;i++){
            var optionText = originalLists[list_type_id][i].split(" ");
            var addIt=true;
            for(var j=0; j<optionText.length; j++){
                if(ss==optionText[j].substring(0,ssL).toLowerCase()){
                    addIt=false;
                }
            }
            if(addIt){
                var optn = document.createElement("OPTION");
                optn.text = originalLists[list_type_id][i];
                optn.value = originalLists[list_type_id+1][i];
                document.getElementById(box_id).options.add(optn);
            }
        }*/
    }
    else{
        // alert("reverting to orig");
        clearListBox(document.getElementById(box_id));
        for(var i=0; i<length;i++){
            var optn = document.createElement("OPTION");
            optn.text = originalLists[list_type_id][i];
            optn.value = originalLists[list_type_id+1][i];
            document.getElementById(box_id).options.add(optn);
        }
    }
}

function clearListBox(lb){
    for (var i=lb.options.length-1; i>=0; i--){
        lb.options[i] = null;
    }
    lb.selectedIndex = -1;
}

// to remove this function, during consolidation, this function was being used by addItem()
function populateNewItemInOriginalLists(list_type_id, list_type,newText,newValue ){ 
  
    var length1=originalLists[list_type_id].length;
    var length2=originalLists[list_type_id+1].length;
    //alert("length= "+length1+" , length2= "+ length2);
    originalLists[list_type_id][length1]=newText;
    originalLists[list_type_id+1][length2]=newValue;
   
    //    insertNewOption(list_type_id,list_type,newText,newValue);
    //    search(list_type_id,list_type,newText);
    var length=originalLists[list_type_id].length;
    var ss = newText;
    var ssL=ss.length; 
    for(var i=0; i<length;i++){
        var optionText = originalLists[list_type_id][i].split(" ");
        for(var j=0; j<optionText.length; j++){
            if(ss==optionText[j].substring(0,ssL).toLowerCase()){
                var optn = document.createElement("OPTION");
                optn.text = originalLists[list_type_id][i];
                optn.value = originalLists[list_type_id+1][i];
                document.getElementById(list_type).options.add(optn);
                document.getElementById(list_type).options[document.getElementById(list_type).options.length-1].selected=true;
                break;    
            }
        }
    }
    // alert("search(), originalLists[originalLists[list_type_id].length-1] = "+
    //    originalLists[originalLists[list_type_id].length-1]+ " |||||originalLists[originalLists[list_type_id].length] = "+
    //    originalLists[originalLists[list_type_id].length]);
    for(var i=0; i<length;i++){
        optionText = originalLists[list_type_id][i].split(" ");
        var addIt=true;
        for( j=0; j<optionText.length; j++){
            if(ss==optionText[j].substring(0,ssL).toLowerCase()){
                addIt=false;
            }
        }
        if(addIt){
            optn = document.createElement("OPTION");
            optn.text = originalLists[list_type_id][i];
            optn.value = originalLists[list_type_id+1][i];
            document.getElementById(list_type).options.add(optn);
        }
    }
}
function addItem_validate(addItem)
{
    //    errNum = validateUnit(addItem);
    errNum = validateString(addItem,0,50);
    if(errNum != 1001)
    {
        if(errNum == 1013)
        {
            errMsg = getMessage(errNum)+ " in new Item added" ;   
        }
        else if(errNum == 1008)
        {
            errMsg = "New Item" + getMessage(errNum) ;   
        }
        else
        {
            errMsg =getMessage(errNum);
        }
        showError("add_item_message" , errMsg);
        return false;
    }
    return true;
}
