var brandSelect = {
     
    brandsArr : dataGeneral.brands,
    build : function(){
        selectOutput = "<select id=\"brands\">";
        selectOutput += "<option value=\"\">filter by manufacturer</option>";
        selectOutput += "<option value=\"all\">all manufacturers</option>";
        for(i=0; i<this.brandsArr.length; i++){
            selectOutput += "<option value=\"" + this.brandsArr[i].id + "\">" + this.brandsArr[i].name + "</option>";
        }
        selectOutput += "</select>";
        
        $("#brandsWrapper").append(selectOutput);
    },
    initiateEvents : function(){
        $("#brands").change(function(event){
           downloadManager.newDownload($("#brands").val());
        });
    },
    init : function(){
        this.build();
        this.initiateEvents();
        
    }
    
}

var carousel = {
    carouselPos : 0,
    leftHandsetPos : 0,
    currentHandsetOffset : 2,
    selectedHandset : -1,
    numHandsets : 0,
    numHandsetsShowing : 5,
    itemWidth : 100,
    "setNumHandsets" : function(num){
        this.numHandsets = num;
    },
    "addHandset" : function(handsetArrNum, callbackfunction){

        var handset = downloadManager.handsetArr[handsetArrNum];
        
        $("#carousel").css("width", (carousel.numHandsets + 1)*carousel.itemWidth);
        
        $("#carouselList").append('<li><img class="off" src="' + handset.imgOffLoc + handset.img + handset.imgExt + '" alt="' + handset.name + '" /><img class="on" rel="' + handsetArrNum + '" src="' + handset.imgOnLoc + handset.img + handset.imgExt + '" alt="' + handset.name + '" /></li>');
       
        carousel.setNumHandsets(carousel.numHandsets + 1);
          
        if(typeof callbackfunction == 'function'){
            callbackfunction();
        }
    },
    "startCarousel" : function(){
        
        if(carousel.numHandsets < (carousel.numHandsetsShowing)){
            
            var numSpacesToMove = 0;
            var numSpaces = carousel.numHandsetsShowing - carousel.numHandsets;
            
            var evenNum = ((numSpaces % 2) == 0) ? true : false;
            
            if(evenNum){
                numSpacesToMove = numSpaces/2;
            }
            else{
                numSpacesToMove = (numSpaces + 1)/2;
            }
            
            carousel.move(numSpacesToMove);

        }
        else{
            carousel.selectHandset(carousel.currentHandsetOffset);
        }        
    },
    "move" : function(numSpaces, callbackfunction){
        
        var newCarouselPos = carousel.carouselPos + (numSpaces*carousel.itemWidth);
        var newSelected = carousel.currentHandsetOffset - (carousel.leftHandsetPos + numSpaces);
               
        $("#carousel").animate({ left: newCarouselPos }, 500 );

        // no handset selected (=-1) when initiating (move called from carousel.startCarousel)
        if(carousel.selectedHandset != -1){
            
            carousel.deselectHandset(carousel.selectedHandset, function(){
                carousel.selectHandset(newSelected);
            });
        
        }
        else{
            carousel.selectHandset(newSelected);
        }
        
        
        
        carousel.carouselPos = newCarouselPos;
        carousel.leftHandsetPos = carousel.carouselPos/carousel.itemWidth;
        carousel.reloadButtons();
        
        if(typeof callbackfunction == 'function'){
            callbackfunction();
        }        
    },
    "selectHandset" : function(num){

        img = $("#carouselList li:eq(" + num + ") img.on");
        
        if(img.attr("src") != undefined){
            img.fadeIn(500);
            img.data("selected", true);
            carousel.selectedHandset = num;
            downloadManager.handsetArr[num].load();
        }
    },
    "deselectHandset" : function(num, callbackfunction){

        img = $("#carouselList li:eq(" + num + ") img.on");
        
        if(img.attr("src") != undefined){

            img.fadeOut(500);
            img.data("selected", false);
            carousel.selectedHandset = -1;          
        }
        
        if(typeof callbackfunction == 'function'){
            callbackfunction();
        }
    },
    "clearHandsets" : function(){
        
        this.carouselPos = 0;
        this.leftHandsetPos = 0;
        this.selectedHandset = -1;
        this.numHandsets = 0;
        
        $("#carousel").css("left", this.carouselPos);
        
        $("#carouselList").empty();
    },
    "reloadButtons" : function(){

        if(!downloadManager.loadingInitial){
            
            //next button
            
            //if the handsets have all been loaded
            if(carousel.numHandsets == downloadManager.handsetArr.length){
                //if not the last position
                if(carousel.leftHandsetPos != (carousel.numHandsetsShowing - carousel.numHandsets - carousel.currentHandsetOffset)){
                        $("#carouselLoader").hide();
                        $("#carouselNext").show();    
                }
                else{
                        $("#carouselLoader").hide();
                        $("#carouselNext").hide();                      
                }
            }
            else{
                 
                //next button
                // if the last loaded handset is butting up against the right edge
                if(carousel.leftHandsetPos == (carousel.numHandsetsShowing - carousel.numHandsets)){

                    $("#carouselLoader").show();
                    $("#carouselNext").hide();  
                }
                else{
                    $("#carouselLoader").hide();
                    $("#carouselNext").show();  
                }
        
            }
            
            //previous button
            if(carousel.leftHandsetPos == carousel.currentHandsetOffset){
                $("#carouselPrev").hide(); 
            }
            else{
                $("#carouselPrev").show();  
            }
        
        }
        else{
            $("#carouselLoader").show();
            $("#carouselNext").hide(); 
            $("#carouselPrev").hide(); 
        }
    },
    "initiateEvents" : function(){
        $("#carouselPrev").show().click(function(event){
            if(carousel.leftHandsetPos < carousel.currentHandsetOffset){
                carousel.move(1);
            }
        });
        
        $("#carouselNext").click(function(event){

            if((carousel.numHandsets == downloadManager.handsetArr.length) || (carousel.leftHandsetPos != (carousel.numHandsetsShowing - carousel.numHandsets))){

                carousel.move(-1);
            }
            else{
                carousel.reloadButtons();
            }
        });
        
        $("#carouselList li img.on").live("click", function(event){
            
            if(!$(event.target).data("selected")){
                carousel.move(-($(event.target).attr("rel") - carousel.selectedHandset), downloadManager.loadDrip);
            }        
        });
        
        $("#carouselList li img.off").live("mouseover", function(event){
            if(!$(event.relatedTarget).hasClass("off")){
                    $(event.target).siblings().fadeIn(400);
            }
        });
       
        $("#carouselList li img.on").live("mouseout", function(event){
                if(!$(event.target).data("selected")){
                    $(event.target).fadeOut(200);
                }
        });
        
        $("#carouselList li img.off").live("mouseout", function(event){
                 if(!$(event.relatedTarget).hasClass("on")){
                $(event.target).siblings().fadeOut(200);
                 }
        });    
        
    },
    "init" : function(){      
        carousel.initiateEvents();
    }
}

var downloadManager = {
    
    "loading" : false,
    "loadingInitial" : false,
    "loadingDrip" : false,
    "allHandsetsArr" : dataHandsets.handsets,
    "handsetArr" : dataHandsets.handsets,
    "handsetArrPos" : 0,
    "handsetArrStartPos" : 0,
    "initialHandsetLoadNum" : (carousel.numHandsetsShowing + (carousel.numHandsetsShowing - (carousel.currentHandsetOffset + 1))), //enough so that if the user clicks on the last phone showing, some more will scroll into view
    "dripHandsetLoadNum" : 2,
    "numHandsetsToLoad" : 0,
    "newDownload" : function(brand){
        if(brand != null && brand != ""){
            
            this.clear();
            this.loadingInitial = true;
            carousel.reloadButtons();
            
            if(brand == "all"){
                this.handsetArr = this.allHandsetsArr;
            }
            else{
                this.handsetArr = eval(brand + ".handsetObjects");
            }
    
            if(this.handsetArr.length >= this.initialHandsetLoadNum){
                this.numHandsetsToLoad = this.initialHandsetLoadNum;
                this.load();
            }
            else{
                this.numHandsetsToLoad = this.handsetArr.length;
                this.load();
            }
        
        }
    },
    "load" : function(){
        
            num = downloadManager.numHandsetsToLoad;
            
            if(downloadManager.handsetArrPos != downloadManager.handsetArr.length){
        
                //if the first
                if(!downloadManager.loading){
                    downloadManager.loading = true;  
                }
                
                //if the last
                if(((downloadManager.handsetArrPos) - downloadManager.handsetArrStartPos) == num){
 
                    downloadManager.finishLoad();
                 
                    return false;
                }
                
                var handset = downloadManager.handsetArr[downloadManager.handsetArrPos];
                
                if(!handset.imgOffLoaded){
                    
                    handset.loadImages(function(){
                        carousel.addHandset(downloadManager.handsetArrPos, function(){
                            downloadManager.moveNext(downloadManager.load);
                        });
                        
                    });     
                }
                else{
                    carousel.addHandset(downloadManager.handsetArrPos, function(){
                            downloadManager.moveNext(downloadManager.load);
                    }); 
                }
            
            }
            else{
                      
                downloadManager.finishLoad();
               
                return false;
        
            }
            return false;
    },
    "finishLoad" : function(){
        
        if(this.loadingInitial){
            carousel.startCarousel();
        } 
        
        this.loading = false;
        this.loadingInitial = false;
        this.loadingDrip = false;
        this.handsetArrStartPos = this.handsetArrPos;
        this.numHandsetsToLoad = 0;
        
        carousel.reloadButtons();
    },
    "moveNext" : function(callbackfunction){
        
        this.handsetArrPos += 1;
        
        if(typeof callbackfunction == 'function'){
            callbackfunction();
        }
    },
    "clear" : function(){
        
        carousel.clearHandsets();
        
        this.loading = false;
        this.loadingInitial = false;
        this.loadingDrip = false;
        this.handsetArrPos = 0;
        this.handsetArrStartPos = 0;
    },
    "loadDrip" : function(){
        downloadManager.numHandsetsToLoad = downloadManager.dripHandsetLoadNum;
        downloadManager.loadingDrip = true;
        downloadManager.load();        
    },
    "initiateEvents" : function(){
        $("#carouselNext").mouseup(function(event){
            downloadManager.loadDrip();
        });        
    },
    "init" : function(){
        this.newDownload("all");
        carousel.selectHandset(carousel.currentHandsetOffset);
        
        this.initiateEvents();
    }
}

var orangeMapsUtil = {
    "loadXHTML" : function(){
        
        var leadRegionXHTML = '<h3>1. check if your phone is compatible</h3>';
        leadRegionXHTML += '<p>If your phone is shown on the right, you\'re good to go.</p>';
        leadRegionXHTML += '<div id="brandsWrapper"></div>';
        
        var mainRegionXHTML = '<h3 id="phoneName"></h3>';
        mainRegionXHTML += '<div class="col1" id="handsetDisplay">&nbsp;';
        mainRegionXHTML += '</div>';
        mainRegionXHTML += '<div class="col2">';
        mainRegionXHTML += '<p id="intro">Downloading sat nav on your phone with Orange Maps is easy - it may even already be on your phone. Just follow these steps to get it up and running.</p>';
        mainRegionXHTML += '<div id="osSections"></div>';
        mainRegionXHTML += '</div>';
                       
        $("#leadRegionCopy").html(leadRegionXHTML); 
        $("#mainRegionInner").html(mainRegionXHTML);
        
        $("#downloadHtml").attr("id", "download");
        $("#carouselLoader").show();        
    },
    "trackSendBtnClick" : function(){
        if(typeof dcsMultiTrack == 'function') { 
            eval("dcsMultiTrack ('DCS.dcsuri','/orangemaps/get_it/download/send_sms','WT.ti','Orange Maps - Get it: Send SMS','WT.cg_n','orange maps','WT.cg_s','get it','WT.cg_t','send sms','DCSext.handset_model','" + downloadManager.handsetArr[carousel.selectedHandset].name + "')");
        }
    },
    "trackInstructionsClick" : function(section){
        if(typeof dcsMultiTrack == 'function') { 
            eval("dcsMultiTrack ('DCS.dcsuri','/orangemaps/get_it/" + section + "','WT.ti','Orange Maps - Get it: " + section + "','WT.cg_n','orange maps','WT.cg_s','get it','WT.cg_t','" + section + "','DCSext.handset_model','" + downloadManager.handsetArr[carousel.selectedHandset].name + "')");
        }
    },
    "smsAjaxCall" : function(){
        
        $("#sendBtn").hide();
        $("#smsSendLoader").show();
        
        orangeMapsUtil.trackSendBtnClick();
        
        //post to the php file handling the webservice. the split and join remove spaces
        $.post("../php/webservice.php", { msisdn: $("#sms").val().split(' ').join('') },
        function(data){
            
            var result = "";
            
            $("#smsSendLoader").hide();
            $("#sendBtn").show();
            
            switch(data){
                case "1":
                  result = "Thank you. You should receive your text message and link very soon.";
                  break;    
                case "0":
                  result = "Oops - that number doesn't look quite right. Please check it and try again.";
                  break;
                case "-1":
                  result = "Sorry - we didn't get your number just then. Please enter it again.";
                  break;
                default:
                  result = "Sorry - we didn't get your number just then. Please enter it again.";
            }
            
            $("#smsResult").html("<p>" + result + "</p>");
                
        });
    }
}

$(document).ready(function (){
    
    if( $("#download").length > 0){
        
        carousel.init();
        downloadManager.init();
        brandSelect.init();
    
    }
});