﻿//  ---------------------------------------------------------------------------
//	variables
//  ---------------------------------------------------------------------------

    var searchUrl = "search.aspx?searchOrigin=true&";
    var networks = "";
    var gifts = "";
    var manfs = "";
    var features = "";
    var iPageNo = 1;
    var iColNo = 0;
    var iOrder = 0;
    var displayTbody = "block";  //  table body element display attribute value
    


//  ---------------------------------------------------------------------------
//	error functions
//  ---------------------------------------------------------------------------

    function ErrorMessage(error, functionname) {
        alert("An exception occurred in the thefunction '" + functionname + "'. Error name: " + error.name + ". Error message: " + error.message);
    }
    
    
    
//  ---------------------------------------------------------------------------
//	sorting functions
//  ---------------------------------------------------------------------------
    
    function sortArray(a, b) {
        return(a - b);
    }

    function SortCol(iSortColNo, isAscending, isWebSpecials, searchType, iRowQty) {
        if (iSortColNo >- 1) {
            try {         
                var searchString = '';

                //  get the main search selections as we are doing the same search as pressing the search button                           
                if (isWebSpecials == false) {
                    searchString = GetSearchSelections(); 
                } else {                
                    searchString = getSearchUrl();
                    searchString += "search=web_specials";
                    searchString += "&page=" + iPageNo;
                    searchString += GetRowQuantity(iRowQty);
                }
            
                //  search type           
                if (searchType == "BEST") {
                    searchString += '&searchtype=' + searchType;
                }            

                //  add the sort column that has been clicked to the search string
                
                if(iSortColNo == '') {
                    // default 
                    iSortColNo = 1;
                }                

                searchString += '&sortkey=' + iSortColNo;
                iColNo = iSortColNo;
                                                
                if(iSortColNo != document.getElementById('sortcolumnid').value) {                    
                    isAscending = 1;  // new column, sort descending
                }
                
                searchString += '&order=' + isAscending;
                iOrder = isAscending;
                                
                
                //  final search string passed and executed
                loadInPage(searchString);
            } catch(e) {
                ErrorMessage(e, 'SortCol(iSortColNo, isAscending)');
            }
        }
    }
    


//  ---------------------------------------------------------------------------
//	number of rows/deals per page
//  ---------------------------------------------------------------------------
    
    function GetRowQuantity(field_id) {
        /*
        //  current page number
        var PageNumber = (pageNum) ? pageNum : 1;

        //  sort table rows via column headings
        var SortColumn = (sortCol) ? sortCol : "priceplan";

        //  sort by - drop down based eg: best seller, phone rating, latest etc... (not options that are available via "SortColumn"
        var SortBy = (sortBy) ? sortBy : "bestselling";
        */
        
        try {      
            if (field_id=="") {
                var rows = document.getElementById("rows");	
            } else {
                var rows = document.getElementById(field_id);	
            }

            var searchString = "";
            if (rows) {
                if (rows.options[rows.selectedIndex].value != '') {
                    searchString += '&rowqty=' + rows.options[rows.selectedIndex].value;
                }
            }
            return searchString;
        }
        catch(e) {
            ErrorMessage(e, 'GetRowQuantity()');
        }
    }



//  ---------------------------------------------------------------------------
//	search results for paging links
//  ---------------------------------------------------------------------------

    function UpdatePageNo(pageno, offercode, isWebSpecials, iColNo, iOrder, iRowQty) {
        try {         
            var returnstring = '';
            iPageNo = pageno;
            if (isWebSpecials == false) {
                returnstring = GetSearchSelections(0,pageno);           
            } else {
                returnstring = getSearchUrl();
                returnstring += "search=web_specials";
                returnstring += "&page=" + pageno;
                returnstring += GetRowQuantity();
            }
            returnstring += '&sortkey=' + iColNo;
            returnstring += '&order=' + iOrder;  
            returnstring += '&rowqty=' + iRowQty;  

            if (offercode != '') {
                returnstring += '&oc=' + offercode;
            }
            
            loadInPage(returnstring);
        } catch(e) {
            ErrorMessage(e, 'UpdatePageNo(pageno, offercode)');
        }
    }



//  ---------------------------------------------------------------------------
//	get the selected items from the search form
//  ---------------------------------------------------------------------------

    function GetSelectedItems(field) {
        try {
            var i = 0;
            var sType = '';
            var icount = 0;           
            for (i = 0; i < field.length; i++) {
                if (field[i].checked == true) {
                    icount = icount + 1;
                    sType = (icount == 1) ? sType + field[i].value : sType + ',' + field[i].value;
                }
            } 
            return sType;   
        } catch(e) {
            ErrorMessage(e, 'GetSelectedItems(field)');
        }
    }      

    function GetSearchSelections(field_id,iPageNo) {
        try {
            var searchString        = '';                
            var NetworkSearchList   = getControlsByName("networksearch");
            var GiftSearchList      = document.getElementsByName("SearchFreeGift");            
            var ManfSearchList      = getControlsByName("manfsearch");
            var TermSearchList      = getControlById("terms");
            var MinuteSearchList    = getControlById("mins");
            var TextSearchList      = getControlById("txts");
            var FeatureSearchList   = getControlsByName("featuresearch");
            var hidHandsetName      = getControlById("hidHandsetName");
            /*          
            var NetworkSearchList   = document.getElementsByName("networksearch");
            //  var GiftSearchList  = document.getElementsByName("giftsearch");
            var ManfSearchList      = document.getElementsByName("manfsearch");
            var TermSearchList      = document.getElementById("terms");
            var MinuteSearchList    = document.getElementById("mins");
            var TextSearchList      = document.getElementById("txts");
            var FeatureSearchList   = document.getElementsByName("featuresearch");
            var hidHandsetName      = document.getElementById("hidHandsetName");
            */
            if (NetworkSearchList != null) {
                networks = GetSelectedItems(NetworkSearchList);
            }
            
            if (GiftSearchList != null) {
                gifts = GetSelectedItems(GiftSearchList);
            }

            if (ManfSearchList != null) {
                manfs = GetSelectedItems(ManfSearchList);
            }
                
            if (FeatureSearchList != null) {
                features = GetSelectedItems(FeatureSearchList);
            }
            
            //  Get PhoneType - This was the easiest way to handle the non-dynamic features
            var flipType      = getControlById("TypeFlip");
            var sliderType    = getControlById("TypeSlider");
            var candyBarType  = getControlById("TypeCandyBar");

            if (flipType != null) {
                if (flipType.checked) {
                    features = (features == '') ? flipType.value : features + ',' + flipType.value;
                }
            }
            if (sliderType != null) {
                if (sliderType.checked) {
                    features = (features == '') ? sliderType.value : features + ',' + sliderType.value;
                }
            }
            if (candyBarType != null) {
                if(candyBarType.checked) {
                    features = (features == '') ? candyBarType.value : features + ',' + candyBarType.value;
                }
            }
    
            searchString = getSearchUrl();

            if (networks != null && networks != '') {
                searchString += 'network=' + networks + '&';
            } 
            else if (NetworkSearchList != null) {
                searchString += 'network=';
                
                //  ensure all applicable networks are passed, will stop 'illegal' networks being returned
                for (var i = 0; i < NetworkSearchList.length; i++) {
                    searchString += NetworkSearchList[i].value;
                    
                    //  don't add comma separator to the last network
                    if (i != NetworkSearchList.length -1) {
                        searchString += ',';
                    }
                }
                searchString += '&';
            }

            if (gifts != null && gifts != '') {
                searchString += 'gift=' + gifts + '&';
            }
            if (manfs != null && manfs != '') {
                searchString += 'manf=' + manfs + '&';
            }   
            if (TermSearchList != null) {
                if (TermSearchList.options[TermSearchList.selectedIndex].value != '') {
                    searchString += 'term=' + TermSearchList.options[TermSearchList.selectedIndex].value + '&';
                }
            }
            if (MinuteSearchList != null) {
                if (MinuteSearchList.options[MinuteSearchList.selectedIndex].value != '') {
                    searchString += 'minute=' + MinuteSearchList.options[MinuteSearchList.selectedIndex].value + '&';
                }
            }
            if (TextSearchList != null) {
                if (TextSearchList.options[TextSearchList.selectedIndex].value != '') {
                    searchString += 'txt=' + TextSearchList.options[TextSearchList.selectedIndex].value + '&';
                }
            }
            if (features != null) {
                if (features != '') {
                    searchString += 'feature=' + features + '&';
                }
            }
            if (hidHandsetName != null) {
                if (hidHandsetName.value != '') {
                    searchString += 'findPhoneName=' + hidHandsetName.value + '&';
                }
            }
                
            if(iPageNo==undefined || iPageNo=='') {
                searchString += "page=1";
            } else {
                searchString += "page=" + iPageNo;
            }            
            
////            searchString += "&sortkey" = sortkey;
////            searchString += "&order" = order;            
            searchString += GetRowQuantity(field_id,iPageNo);
            
            return searchString;
        } catch(e) {
            ErrorMessage(e, 'GetSearchSelections()');
        }
    }



//  ---------------------------------------------------------------------------
//	get results search functions
//  ---------------------------------------------------------------------------
    
    // James Radford ITR # 1006042 
    // four parameters into the Getresult function
    // necessary to calculate the new page pointer
    
    
    function Getresult(field_id,old_pageno,old_rowqty,thisvalue) {
        
        try {
            //  new searches always start on page 1 
            //iPageNo = 1;            
            
            if(old_pageno == 0) {               
                iPageNo = 1;  // default
            } else {
                // need to move the page pointer
                iPageNo = old_pageno * old_rowqty;
               
                
                // do we have a remainder or not!
                
                if(iPageNo % thisvalue > 0) {
                    // yes - sort it!
                    iPageNo = iPageNo / thisvalue;             // page we want to display
                    iPageNo = parseFloat(iPageNo).toFixed(0);  // remove decimal place
                    iPageNo = iPageNo - 1;                     // go back one page
                   
                    if(iPageNo<0) {
                        iPageNo = 1;
                    }
                } else {
                    // even numbers - easy peasy
                    iPageNo = iPageNo / thisvalue;                      
                }
            }            
            
            if(old_pageno == 1) {
                iPageNo = 1;
            }
            
            //  get the main search selections
            searchString = GetSearchSelections(field_id,iPageNo);            
           
            //  final search string passed
            loadInPage(searchString);
        } catch(e) {
            ErrorMessage(e, 'Getresult()');
        }
    }

    //  run search routines for specific networks
    function GetNetworkSearch(sNetwork) {
        try {
            //  de-select all checkboxes with the name of "networksearch"
            $(".SearchLayout input[@name=networksearch]").attr("checked", false);
            
            //  select checkboxe with the name of "networksearch" and value that matches "sNetwork"
            $(".SearchLayout input[@name=networksearch][@value=" + sNetwork + "]").attr("checked", true);
        
            //  set the search url and get the hidden phone name
            var searchString    = getSearchUrl();
            var hiddenPhoneName = $("#hidHandsetName").val();

            //  new searches always start on page 1 
            iPageNo = 1;

            //  update the network string
            if (sNetwork != "") {
                searchString += "network=" + sNetwork + "&";
            }
            
            //  update find phone name
            if (hiddenPhoneName != "") {
                searchString += "findPhoneName=" + hiddenPhoneName + "&";
            }
            
            //  update page number
            searchString += "page=" + iPageNo;
            
            //  get the row quantity
            searchString += GetRowQuantity();                           
                
            //  final search string passed            
            loadInPage(searchString);
        } catch(e) {
            ErrorMessage(e, 'GetNetworkSearch(sNetwork)');
        }
    }

    //	get phones - used in search phones (simple and detailed views)    
    function GetPhones(siteUrl, page) {
        try {
            var sSearch = "";
        
            //  manufacturers
            var aManufacturers = new Array();
            $(".SearchLayout input[@name=manfsearch]").each(function() {
                if (this.checked == true) {
                    aManufacturers.push(this.value);
                }
            });
            
            //  features
            var aFeatures = new Array();
            $(".SearchLayout input[@name=featuresearch]").each(function() {
                if (this.checked == true) {
                    aFeatures.push(this.value);
                }
            });
            
            //  camera
            var aCamera = new Array();
            
            $(".SearchLayout input[@name=camerasearch]").each(function() {
                if (this.checked == true) {
                    aCamera.push(this.value);
                }
            });
            //  sort array, smallest first
            aCamera.sort(sortArray);
            
            
            //  phone types
            var aPhoneTypes = new Array();
            $(".SearchLayout input[@name=typesearch]").each(function() {
                if (this.checked == true) {
                    aPhoneTypes.push(this.value);
                }
            });
            
            if (aManufacturers.length > 0) {
                sSearch += "&manufacturers=" + aManufacturers;
            }            
            if (aFeatures.length > 0) {
                sSearch += "&features=" + aFeatures;
            }
            if (aCamera.length > 0) {
                sSearch += "&camera=" + aCamera;
            }
            if (aPhoneTypes.length > 0) {
                sSearch += "&phonetype=" + aPhoneTypes;
            }
            
            //  document.location.href = page + ".aspx?phone=all" + sSearch;
            //  window.open(page + ".aspx?phone=" + sSearch);
            location.href = siteUrl + page + ".aspx?phone=" + sSearch;
        }
        catch(e) {
            ErrorMessage(e, 'GetPhones(page)');
        }   
    }
    


//  ---------------------------------------------------------------------------
//	search urls
//  ---------------------------------------------------------------------------
    
    function loadInPage(url) {
        location.href = url;
    }
    
    function getSearchUrl() {
        return baseUrl + searchUrl;
    }



//  ---------------------------------------------------------------------------
//	free gifts dropdown
//  ---------------------------------------------------------------------------

    var oGiftsList      = null;
    var oGiftsSelected  = null;
    
    function showFreeGifts() {
        //  set position
        if (oGiftsList == null) {
            var x = 0;
            var y = 0;
            var oContainer  = getControlById("Container");
            oGiftsList      = getControlById("FreeGifts_List");
            oGiftsSelected  = getControlById("FreeGifts_Span");

            //  internet explorer
            //if ($.browser.msie) {
                x = parseInt(getPageOffsetLeft(oGiftsSelected) - getPageOffsetLeft(oContainer));
                y = parseInt(getPageOffsetTop(oGiftsSelected) - getPageOffsetTop(oContainer)) + oGiftsSelected.offsetHeight;
            //  other
            /*} else {
                x = parseInt(getPageOffsetLeft(oGiftsSelected));
                y = parseInt(getPageOffsetTop(oGiftsSelected)) + oGiftsSelected.offsetHeight;
            }*/
            oGiftsList.style.left   = (x - 5) + "px";   //  cater for css padding
            oGiftsList.style.top    = (y + 3) + "px";   //  cater for css padding
        }
        //  oGiftsSelected.parentNode.className = "FreeGifts_SelectedHover";
        oGiftsSelected.parentNode.className = "Hover";
        oGiftsList.style.display = "block";
    }
    
    function hideFreeGifts() {
        oGiftsList.style.display = "none";    
        oGiftsSelected.parentNode.className = "";
    }
    
    function updateSelectedGifts() {
        //  store the number of selected gifts
        var giftsCount = 0;
        
        $("input[@name='SearchFreeGift']").each(function(){
            if (this.checked) {
                giftsCount += 1;
            }
        });
        
        //  friendly display text for selected gifts area
        if (giftsCount == 0) {
            giftsCount = "No";
        } else if ($("input[@name='SearchFreeGift']").length == giftsCount) {
            giftsCount = "All";
        }

        oGiftsSelected.innerHTML = giftsCount + " " + ((giftsCount == 1) ? "gift" : "gifts") + " selected";
    }



//  ---------------------------------------------------------------------------
//	advanced search toggle
//  ---------------------------------------------------------------------------

    function toggleAdvancedSearchOptions() {
        //  if browser is not internet explorer, change the display property from "block" to "table-row-group"
        if (!$.browser.msie) {
            displayTbody = "table-row-group";
        }
    
        //  show advanced search row
        if ($("#SearchAdvanced").css("display") != "none") {
            $("#SearchAdvanced").hide();
        } else {
            $("#SearchAdvanced").css("display", displayTbody);
        }
                    
        //  toggle table cell corner classes
        $("#SearchCornerBL").toggleClass("CornerBL");
        $("#SearchCornerBR").toggleClass("CornerBR");
    }
