/********************************************************************************
AJAX FUNCTIONALITY CLASS
********************************************************************************/

// Pre-load images for AJAX add/reserve buttons.
if (document.images) {
   var images_host = '/lovefilm';

   if (LOVEFiLM.country != 'gb') {
       images_host = '/lovefilm-'+LOVEFiLM.country;
   }

   var added = new Image();
   var adding = new Image();
   var reserving = new Image();
   var reserved = new Image();
   var removing = new Image();
   var removed = new Image();
   added.src = images_host+"/images/buttons/btn_added.gif";
   adding.src = images_host+"/images/buttons/btn_adding.gif";
   reserving.src = images_host+"/images/buttons/btn_reserving.gif";
   reserved.src = images_host+"/images/buttons/btn_reserved.gif";
   removing.src = images_host+"/images/buttons/btn_removing.gif";
   removed.src = images_host+"/images/buttons/btn_removed.gif";
}

var AJAX = {
    
    // Show Debug on AJAX => (0,1)
    Debug: 0,
    
    add_option: null,
    add_logging: null,
    add_command: null,
    add_revert: null,
    id: null,
    perform: null,
    rand: null,
    request: null,
    request_in_action: null,
    request_timer: 0,
    response: null,
    timeout: 30,
    xmlhttp: null,
    count: 0,
    queueID: null,
    user_token_id: null,

    data_product_type: null,
    data_genre_names: null,
    data_product_name: null,
    data_product_media: null,
    data_track_event: null,
    data_discs: null,
    
    refreshtype: null,
	
	smlimg: 0,  // if smlimg = 1 then it'll use the _sml images
    
    //Define styles
    titlebar_colour: "#e3e7df",
    result_border_style: "none",
    
    /****************************************
    *                                       *
    *     HTTP Object                       *
    *                                       *
    ****************************************/
    getHTTPObject: function () {            
        
        // MOZILLA / SAFARI
        if (window.XMLHttpRequest) {
            AJAX.xmlhttp = new XMLHttpRequest();
        }
        // IE
        else if (window.ActiveXObject) {
            AJAX.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } return AJAX.xmlhttp;
        
    },
    
    
    /****************************************
    *                                       *
    *     REQUEST DATA                      *
    *                                       *
    ****************************************/
    request_object: function (url, target, func, type) {
        
        if (typeof(type) == "undefined") {
            type = 'GET';
        }
        
        AJAX.request = AJAX.getHTTPObject();
        
        if (AJAX.request) {
            AJAX.request.onreadystatechange = function() {
              if (AJAX.request && AJAX.request.readyState == 4) {
                try {
                    var status = AJAX.request.status;
                }
                catch(e) {
                    //setTimeout(function() { AJAX.request_object(url, func); }, 1000);
                } 
                
                if (AJAX.request && typeof(status) == "number") {
                    switch (status) {
                        case 200 : 
                            // If there is a fucntion defined, run once status is fulfilled
                            if (typeof(func) != "undefined") {
                                //alert('Function: '+func+'\n URL: '+url);
                                func(AJAX.request);
                            } 
                            if (target != "") {
                                var obj = document.getElementById(target);
                                obj.innerHTML = AJAX.request.responseText;
                                AJAX.end_request();
                            } else {
                                AJAX.end_request();
                                return;
                            }
                            
                        break;
                        
                        case 404 : 
                            AJAX.response = "File not found: " + url;
                            AJAX.end_request();
                        break;
                        
                        case 0 : break;
                        
                        default : AJAX.response = "There was a problem sourcing the request<br>The error code returned was : " + AJAX.request.status;
                    }
                }
            }
             AJAX.request_in_action = true;
             
             /* AJAX.request_timer = window.setTimeout(
                function() {
                    if (AJAX.request_in_action) {
                       AJAX.request.abort();
                       AJAX.request_object(url, target, func, type);
                    }
                },
                AJAX.timeout * 1000
            ); */
            
            }
        
            AJAX.request.open(type, url, true);
            AJAX.request.send(null);
            if (AJAX.count > 5) {
                AJAX.end_request();
            } else {
                AJAX.count++;
            }
        }
    },
    
    end_request: function() {
        AJAX.request_in_action = false;
        window.clearTimeout(AJAX.request_timer);
    },
    
    
    
    
    /****************************************
    *                                       *
    *          LOGGING RATINGS              *
    *                                       *
    ****************************************/
    
    log_rating: function () {
        AJAX.rand = Math.random();
        url = '/account/ajax_log_rating.html?r='+AJAX.rand;
        AJAX.request_object(url, '', AJAX.log_rating_response, 'GET');
    },
    
    log_rating_response: function () {
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("|");
            if (results[0] == AJAX.rand) {
                if (AJAX.Debug)getRef('xmlid').value = results[1];
            }
        }
    },
    
    
    /*********************************************************************************
    *                                                                                *
    *     LISTINGS: ADD, REMOVE, UPDATE                                              *
    *    -------------------------------                                             *
    *                                                                                *
    *       ajaxMode = (                                                             *
    *           1 => 'quick',           2 => 'slim detail',  3 => 'full detail',     *
    *           10 => 'prioritise',     4 => 'only button'   5 => 'bonus disc',      *
    *       )                                                                        *
    *                                                                                *
    *       perform = mandatory_options('Load', 'Add', 'Reserve', 'Remove')          *
    *                                                                                *
    *********************************************************************************/
    check_in_rent_list: function (action, id, ajaxMode, perform, media, logging, smlimg, feature_id) {
        AJAX.rand = Math.random();
        AJAX.id = id;
		AJAX.smlimg = smlimg;
		AJAX.feature_id = feature_id;
       
        if ((media == 'DVD') || !media || (media == "")) {
            AJAX.add_title(action, id, ajaxMode, perform, logging, smlimg, feature_id);
        } else {
            AJAX.add_command = action;
            AJAX.add_option = ajaxMode;
            AJAX.perform = perform;
            AJAX.add_logging = logging;
            
            AJAX.load_area_update(id, perform, smlimg);
            url = '/account/ajax_checkInRentList.html?r='+AJAX.rand+'&product_id='+id;
            AJAX.request_object(url, '', AJAX.check_in_rent_list_response, 'GET');    
        }
    },
    
    check_in_rent_list_response: function () {
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("|");
            if (AJAX.add_option != 10) {
                if (results[0] == AJAX.rand) {
                    var media = results[1];
                    var catalog = results[2];
                    var formatMessage;
                    if (media.indexOf('blu') != -1) {
                        formatMessage = LOVEFiLM.i18n.i18n("/global/javascript_messaging/add_format_bluray_message");
                    } else {
                        if (media == 'hd_dvd') {
                            formatMessage = LOVEFiLM.i18n.i18n("/global/javascript_messaging/add_format_hddvd_message");
                        } else {
	    					var mediaMessage = LOVEFiLM.i18n.i18n("/global/javascript_messaging/add_format_media_message");
                            formatMessage = mediaMessage.replace(/<media>/g, media);
                        }
                    }
                    if (results[3] <= 0) {
                        if (confirm(formatMessage)) {
                            AJAX.add_title(AJAX.add_command, AJAX.id, AJAX.add_option, AJAX.perform, AJAX.add_logging, AJAX.smlimg, AJAX.feature_id);
                        } else {
                            getRef('buttons'+AJAX.id).innerHTML = AJAX.add_revert;
                        }
                    } else {
                        AJAX.add_title(AJAX.add_command, AJAX.id, AJAX.add_option, AJAX.perform, AJAX.add_logging, AJAX.smlimg, AJAX.feature_id);
                    }
                }
            } else {
                AJAX.add_title(AJAX.add_command, AJAX.id, AJAX.add_option, AJAX.perform, AJAX.add_logging, AJAX.smlimg, AJAX.feature_id);
            }
        }
    },
    
    set_queue_id: function (id) {
        AJAX.queueID = id;
    },
    
    
    /****************************************
    *           ADD TITLE                   *
    ****************************************/   
    add_title: function (action, id, ajaxMode, perform, logging, smlimg, feature_id) {
        AJAX.rand = Math.random();
        AJAX.add_command = action;
        AJAX.add_option = ajaxMode;
		if (smlimg) AJAX.smlimg = smlimg;
        AJAX.load_area_update(id, perform, smlimg);
        var add_url;
        var parent;
		if (feature_id){
			parent = id;
			id = feature_id;
		}
        if (AJAX.smlimg) {      
           add_url = '/account/ajax_add_title_sml.html?r='+AJAX.rand+'&'+action+'='+id+'&ajax_add_option='+AJAX.add_option;
        } else {
           add_url = '/account/ajax_add_title.html?r='+AJAX.rand+'&'+action+'='+id+'&ajax_add_option='+AJAX.add_option;
        }
        if (feature_id){
			add_url += '&product_id='+parent;
		}
        // Add unique token to each add
        add_url += '&user_token_id='+AJAX.user_token_id;

        if (AJAX.queueID) add_url += '&queue_id='+AJAX.queueID;
        if (logging) add_url += '&logging=1';
              
        if (ajaxMode != '4') {
            AJAX.request_object(add_url, '', AJAX.add_title_response, 'GET');
        } else {
            AJAX.request_object(add_url, '', AJAX.add_title_response_button, 'GET');
        }
    },

    add_title_response_button: function () {
        perform = AJAX.perform;
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("|");
            if (results[0] == AJAX.rand) {
                if (AJAX.Debug) getRef('xmlid').value = results[1];
                if (results[2]>=0 && perform != 'Reserv') {
                    AJAX.update_unique_title_messaging('add');
				}
                if (AJAX.add_option != 10) AJAX.load_area_done(results[1], perform);   
            }
        } 
    },
    
    add_title_response: function () {
        perform = AJAX.perform;
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("|");
            
            if (results[0] == AJAX.rand) {
                var media = results[3];
                var queName = '';
                if (AJAX.queueID)
                    queName = (results[5].length > 2) ? ' to: '+results[5] : '';
                var discs = "";
                if (AJAX.Debug) getRef('xmlid').value = results[1];
                if (results[2]>=0 && perform != 'Reserv') { // dont do this is is a reserved title
                    if (results[2]>0) {
                        discs = " "+ results[2] +" discs";
                    } 
                    AJAX.update_unique_title_messaging('add');
                }
                
                var ajax_add_menu = '';
                if (!AJAX.smlimg) {
                    ajax_add_menu = "<a href=\"/account/selection.html\">"+LOVEFiLM.i18n.i18n("/global/javascript_messaging/rental_list")+"</a> ";
                    if(AJAX.smlimg) {
                    } else {
                        if (media.toLowerCase() == 'dvd') ajax_add_menu +=  "| <a href=\"#\" onclick=\"AJAX.update_priority("+results[1]+",'product_id'); return false;\" >"+LOVEFiLM.i18n.i18n("/global/javascript_messaging/similar_titles")+"...</a>";
                    }
                }
                if (AJAX.add_option != 3 && AJAX.add_option != 10)
                    ajax_add_menu +=  " | <a href=\"#\" onclick=\"AJAX.add_title('"+AJAX.add_command+"',"+results[1]+",10, 'Load'); return false;\">"+LOVEFiLM.i18n.i18n("/global/javascript_messaging/prioritise_delivery")+"</a>";
                if ((AJAX.add_option != 10) && (AJAX.add_option != 1))
                    getRef('inlineT'+results[1]).innerHTML = "<div style=\"float:right; font-weight:normal; font-size:x-small;\">"+ajax_add_menu+"</div>"+perform+"ed"+ discs+queName;
                else 
                    getRef('inlineT'+results[1]).innerHTML = ajax_add_menu;
                
                if (AJAX.add_option != 10) {
                    AJAX.load_area_done(results[1], perform);
                    getRef('ajaxItemRow'+results[1]).style.border = AJAX.result_border_style;
                }
                if (AJAX.add_option == 2) {
                    AJAX.show_content('activate'+results[1],25,400);
                } else {
                    if (AJAX.add_option == 3) {
                        // Full detail
                        getRef('inlineC'+results[1]).innerHTML = results[4];
                        AJAX.show_content('activate'+results[1],120,400);
                    } else {
                        if (AJAX.add_option == 10) {
                            getRef('inlineC'+results[1]).innerHTML = results[4];
                            getRef('inlineB'+results[1]).style.background = AJAX.titlebar_colour;
                            AJAX.show_content('activate'+results[1],120,400);
                        }
                    }
                }
            }
        }
    },
    
    
    /****************************************
    *           UPDATE TITLE                *
    ****************************************/   
    update_priority: function (id, action, priority, parent_id) {
    
        if (!parent_id) parent_id = false;
        AJAX.rand = Math.random();
        var priority;
        var multi;
        
        var url = '/account/ajax_update_title.html?r='+AJAX.rand+'&'+action+'='+id;
        if (AJAX.queueID) url += '&queue_id='+AJAX.queueID;
        
        if (action == 'update_priority') {
            if (!priority) priority = false;
            eval("multi = document.f_"+id+".m_"+id+".value;");
            url += "&priority="+priority+"&series_order="+multi;
        }
        if (parent_id) {
            url += "&parent_id="+parent_id;
            id = parent_id;
        }       
        if (AJAX.Debug) getRef('xmlname').value = url;
        
        var loadingText = LOVEFiLM.i18n.i18n("/lovefilm/visitor/login/loading");
        if (action == 'remove_from_rental_list') loadingText = LOVEFiLM.i18n.i18n("/global/buttons/btn_removing");
        
        getRef('inlineT'+id).innerHTML = "<span class=\"ajaxloading\">"+loadingText+"</span>";
        
        AJAX.request_object(url, '', AJAX.update_priority_response, 'GET');
    },
    
    update_priority_response: function () {
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("|");
            if (results[0] == AJAX.rand) {              
                if (AJAX.Debug) {
                    getRef('xmlid').value = results[1];
                    getRef('xmlpriority').value = results[2];
                }               
                //getRef('rowThumbImg'+results[1]).style.display = "none";
                getRef('inlineT'+results[1]).innerHTML = results[3];
                getRef('inlineB'+results[1]).style.background = AJAX.titlebar_colour;
                if (results[4] == 'Y') {
                    getRef('inlineC'+results[1]).innerHTML = results[5];
                    AJAX.show_content('activate'+results[1],164,400);
                }
            }
        }
    },
    
    
    /****************************************
    *           HIDE TITLE                  *
    ****************************************/   
    hide_item: function (id,action) {
        AJAX.rand = Math.random();
        
        getRef('allbuttons'+id).innerHTML = "<div class=\"ajaxloading\" style=\"float: right\">"+LOVEFiLM.i18n.i18n("/global/ratings/ajax_hide")+"</div>";
        
        url = '/account/ajax_hide_item.html?r='+AJAX.rand+'&'+action+'='+id+'&user_token_id='+AJAX.user_token_id;
        
        AJAX.request_object(url, '', AJAX.hide_item_response, 'GET');
    },
    hide_item_response: function () {
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("|");
            if (results[0] == AJAX.rand) {
                if (AJAX.Debug)getRef('xmlid').value = results[1];
                AJAX.show_content('ajaxItemRow'+results[1],0,400);
            }
        }
    },  
    
    
    
    /****************************************
    *           REMOVE TITLE                *
    ****************************************/
    
    remove_title: function (action,id,ajaxMode,perform,media, logging, smlimg) {
        AJAX.id = id;
        AJAX.rand = Math.random();
        AJAX.add_option = ajaxMode;
        AJAX.load_area_update(id, perform, smlimg);
        if (smlimg) AJAX.smlimg = smlimg;
        url = '/account/ajax_remove_item.html?r='+AJAX.rand+'&'+action+'='+id+'&user_token_id='+AJAX.user_token_id;
        if (AJAX.queueID) url += '&queue_id='+AJAX.queueID;
        AJAX.request_object(url, '', AJAX.remove_title_response, 'GET');
    },
    
    remove_title_response: function () {
        //perform = AJAX.perform;
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("|");
            if (results[0] == AJAX.rand) {
                
                var media = results[2];
                var isReservedTitle = results[4];  //nw
                var queName = '';
                if (AJAX.queueID)
                    queName = (results[3].length > 2) ? ' from <a href=\"/account/selection.html\">'+results[3]+'</a>' : '';
                if (AJAX.Debug) getRef('xmlid').value = results[1];
				if (isReservedTitle != 1) {
					AJAX.update_unique_title_messaging('remove');
				}
                
                if (AJAX.add_option != 5) {
                    if (!AJAX.smlimg && (AJAX.add_option != 4)) {
                        var ajax_add_menu = "<a href=\"/account/selection.html\">"+LOVEFiLM.i18n.i18n("/global/javascript_messaging/rental_list")+"</a>";
                        if (media.toLowerCase() == 'dvd') ajax_add_menu +=  " | <a href=\"#\" onclick=\"AJAX.update_priority("+results[1]+",'product_id'); return false;\" >"+LOVEFiLM.i18n.i18n("/global/javascript_messaging/similar_titles")+"...</a>";
                        if (AJAX.add_option != 1) getRef('inlineT'+results[1]).innerHTML = "<div style=\"float:right; font-weight:normal; font-size:x-small;\">"+ajax_add_menu+"</div>"+AJAX.perform+"ed"+queName+"!";
                        else getRef('inlineT'+results[1]).innerHTML = " <span>" +ajax_add_menu+ "</span>";
                    }
                    
					AJAX.load_area_done(results[1], AJAX.perform, isReservedTitle);
                    
                    if ( (AJAX.add_option != 1) && (AJAX.add_option != 4) ) {
                        getRef('inlineB'+results[1]).style.background = AJAX.titlebar_colour;
                        getRef('inlineC'+results[1]).style.display = "none"; // there should be no data in this DIV
                        AJAX.show_content('activate'+results[1],25,400);
                    }
                } else {
                    getRef('bonusDisc'+results[1]).innerHTML = "<span style=\"color:red;\">"+LOVEFiLM.i18n.i18n('/global/javascript_messaging/bonus_disc_removed')+"</span>";
                }
                
            }
        }
    },
    
   
    /****************************************
    *                                       *
    *           TRACKING UPDATES            *
    *                                       *
    ****************************************/
    save_current_tracking_details: function (id, perform) {
        AJAX.data_product_type  = $('#buttons'+id+' a').attr('data-product_type');
        AJAX.data_genre_names   = $('#buttons'+id+' a').attr('data-genre_names');
        AJAX.data_product_name  = $('#buttons'+id+' a').attr('data-product_name');
        AJAX.data_product_media = $('#buttons'+id+' a').attr('data-product_name');
        AJAX.data_track_event   = $('#buttons'+id+' a').attr('data-track_event');
        AJAX.data_discs         = $('#buttons'+id+' a').attr('data-discs');
    },
    update_tracking_details: function (id, perform) {
        if (AJAX.data_product_type  != undefined) $('#buttons'+id+' a').attr('data-product_type',  AJAX.data_product_type);
        if (AJAX.data_genre_names   != undefined) $('#buttons'+id+' a').attr('data-genre_names',   AJAX.data_genre_names);
        if (AJAX.data_product_name  != undefined) $('#buttons'+id+' a').attr('data-product_name',  AJAX.data_product_name);
        if (AJAX.data_product_media != undefined) $('#buttons'+id+' a').attr('data-product_media', AJAX.data_product_media);
        if (AJAX.data_discs         != undefined) $('#buttons'+id+' a').attr('data-discs',         AJAX.data_discs);
        if (perform == 'add' || perform == 'Add') {
            $('#buttons'+id+' a').attr('data-track_event', '52:Queue Removal');
        } else {
            $('#buttons'+id+' a').attr('data-track_event', '51:Queue Addition');
        }
        $('#buttons'+id+' a').tracking_apply_click_event(); // Requires doProductDetail.js
    },

 
    /****************************************
    *                                       *
    *           LOADING BUTTONS             *
    *                                       *
    ****************************************/   
    load_area_update: function (id, perform, smlimg) {
        var updateStyle;
        AJAX.save_current_tracking_details(id, perform);
        if (perform == 'reserve') perform = 'Reserv';
        if (perform == 'add') perform = 'Add';
        if (perform == 'remove') perform = 'Remov';
        AJAX.perform = perform;
		if (smlimg) AJAX.smlimg = smlimg;
		
        var loadingArea = 'buttons';

        var newActionName = "";
        if (perform == 'Reserv') {
          newActionName = LOVEFiLM.i18n.i18n("/global/buttons/btn_reserving");
        } else if (perform == 'Remov') {
          newActionName = LOVEFiLM.i18n.i18n("/global/buttons/btn_removing");
        } else {
          newActionName = LOVEFiLM.i18n.i18n("/global/buttons/btn_adding");
        }


		if (AJAX.smlimg == 1) {
			updateStyle = perform.toLowerCase();
		} else {
			var loadingText =  '<a onclick="return false;" title="'+newActionName+'" class="btn_'+perform.toLowerCase()+'" href="#" ><span><i>'+newActionName+'</i></span></a>';
		}
        if (AJAX.add_option == 10) {
            loadingArea = 'inlineT';
            loadingText = '<span class=\"ajaxloading\" >'+newActionName+'...</span>';
        } else if (AJAX.add_option == 5) {
            loadingArea = 'bonusDisc';
            loadingText = '<span class=\"ajaxloading\" >'+newActionName+'...</span>';
        } else {
            AJAX.add_revert = getRef(loadingArea+id).innerHTML;
        }
        if (updateStyle) {
            getRef('buttons'+id).innerHTML = '<a onclick="return false;" title="'+newActionName+'" class="btn_'+updateStyle+'" href="#"><span><i>'+newActionName+'</i><b/></span></a>';
        } else {
            getRef(loadingArea+id).innerHTML = loadingText;
        }
    },
    
    
// start load_area_done: function (result_id, perform) 
    load_area_done: function (result_id, perform, isReserved) {
        var newAction     = "return false;";
        var newActionName = "";
        var newActionPerformed = ""; 
        if (perform == 'Add' || perform == 'Reserv') {
            newAction = "AJAX.remove_title('remove_from_rental_list',"+result_id+",4,'remove','DVD',0,0); return false;";
            newActionName = LOVEFiLM.i18n.i18n("/global/buttons/btn_remove");
            newActionPerformed = LOVEFiLM.i18n.i18n("/global/buttons/btn_added");
        } else if (perform == 'Remov') {
            newAction = "AJAX.check_in_rent_list('add_to_rental_list',"+result_id+",4,'add','DVD',0,0,0); return false;";
            if (isReserved >= 1) {
                newActionName = LOVEFiLM.i18n.i18n("/global/buttons/btn_reserve");
            } else {
                newActionName = LOVEFiLM.i18n.i18n("/global/buttons/btn_add")
            }
            newActionPerformed = LOVEFiLM.i18n.i18n("/global/buttons/btn_removed");
        }

    updateStyle = perform.toLowerCase(); //nw -end
        if (AJAX.smlimg == 1) {
            if (perform == 'Remov') {
                getRef('buttons'+result_id).innerHTML = '<a onclick="return false;" title="'+LOVEFiLM.i18n.i18n("/global/buttons/btn_removed")+'" class="btn_remove" href="#" ><span><i>'+LOVEFiLM.i18n.i18n("/global/buttons/btn_removed")+'</i><b/></span></a>';
            } else if (perform == 'Reserv') {
                var removeOnClick = "AJAX.remove_title('remove_from_rental_list',"+result_id+",4,'remove','DVD',0,1); return false;";
                getRef('buttons'+result_id).innerHTML = '<a onclick="'+removeOnClick+'" title="'+LOVEFiLM.i18n.i18n("/global/buttons/btn_reserved_alt")+'" class="btn_'+perform.toLowerCase()+'ed" href="#" ><span><i>'+LOVEFiLM.i18n.i18n("/global/buttons/btn_reserved")+'</i><b/></span></a>';
            } else {
                var removeOnClick = "AJAX.remove_title('remove_from_rental_list',"+result_id+",4,'remove','DVD',0,1); return false;";
                getRef('buttons'+result_id).innerHTML = '<a onclick="'+removeOnClick+'" title="'+LOVEFiLM.i18n.i18n("/global/buttons/btn_added_alt")+'" class="btn_'+perform.toLowerCase()+'ed" href="#" ><span><i>'+LOVEFiLM.i18n.i18n("/global/buttons/btn_added")+'</i><b/></span></a>';
            }
        } else {
            if (perform == 'Remov') getRef('buttons'+result_id).innerHTML = '<a onclick="return false;" title="'+LOVEFiLM.i18n.i18n("/global/buttons/btn_removed")+'" class="btn_remove" href="#" ><span><i>'+LOVEFiLM.i18n.i18n("/global/buttons/btn_removed")+'</i><b/></span></a>';
            getRef('buttons'+result_id).innerHTML = '<a onclick="'+newAction+'" title="'+newActionPerformed+'" class="btn_'+updateStyle+'" href="#" ><span>'+newActionName+'</span></a>';
        }
        AJAX.update_tracking_details(result_id, perform);
    },


    /****************************************
    *                                       *
    *     GENRE REFRESHING                  *
    *                                       *
    ****************************************/
    
    refresh_node: function (id, titleNumbr, refreshtype, options) {
        AJAX.rand = Math.random();
        AJAX.id = id;
        AJAX.refreshtype = refreshtype;
        url = '/widgets/ajax_refresh_'+refreshtype+'.html?r='+AJAX.rand+'&node_id='+id+'&titles_to_show='+titleNumbr;
        if (options) {
            var o = eval("(" + options + ")");
            url += '&float='+o.floatPosition+'&type='+o.type+'&rows='+o.rows;
        }
        AJAX.request_object(url, '', AJAX.refresh_node_response, 'GET');
    },
    
    refresh_node_response: function () {
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("|");
            //if (results[0] == AJAX.rand) {
                if (AJAX.Debug) {
                    getRef('xmlid').value = results[1];
                    getRef('xmlpriority').value = results[2];
                }
                if (AJAX.refreshtype == 'node') {
                    getRef('section'+AJAX.id).innerHTML = results;
                } else {
                    getRef('section'+AJAX.refreshtype.toUpperCase()).innerHTML = results;
                }
                AJAX.fade_content_in('section'+AJAX.id,1,400);
            //}
        }
    },
    
    refresh_genre: function (id, titleNumbr) {
        AJAX.rand = Math.random();
        AJAX.id = id;
        url = '/widgets/centre_browse_by_genre.html?r='+AJAX.rand+'&node_id='+id+'&titles_to_show='+titleNumbr;
        AJAX.request_object(url, '', AJAX.refresh_genre_response, 'GET');
    },
    refresh_genre_response: function () {
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("|");
            getRef('sectionGENRE').innerHTML = results;
        }
    },

    /* UPDATE MESSAGING */
    update_unique_title_messaging: function (action, discs) {
        var number_of_titles = 0;
        if (discs == undefined) discs = 1;
        if (action == 'add') {
            number_of_titles= parseInt($('#rentalListCount').html())+discs;
        } else if (action == 'remove') {
            number_of_titles= parseInt($('#rentalListCount').html())-discs;
        } else {
            number_of_titles= parseInt($('#rentalListCount').html());
        }
        var new_unique_title_message = '';
        if (number_of_titles != 1) {
            new_unique_title_message = number_of_titles+" "+ LOVEFiLM.i18n.i18n("/global/javascript_messaging/unique_titles");
        } else {
            new_unique_title_message = number_of_titles+" "+ LOVEFiLM.i18n.i18n("/global/javascript_messaging/unique_title");
        }
        $('#rentalListCount').html(new_unique_title_message);
    },



    
    /****************************************
    *                                       *
    *     SCROLL EFFECT                     *
    *                                       *
    ****************************************/   
    show_content: function (target, length, speedfactor) {
        getRef(target).style.display = 'block';
        
        var currentLength = parseInt(getRef(target).style.height);
        var containerHeight;
        var details;
        if (currentLength != length && length != 0) {
            
            if(AJAX.smlimg) {
                $('#'+AJAX.id+'Details').slideToggle(speedfactor);
            }
            
            $('#'+target).hide();
            $('#'+target).slideDown(speedfactor);
        
        } else if (length == 0) {
            //Hide the box once the toggle is complete
            $('#'+target).slideUp(speedfactor);
            
        } else {
            length = currentLength;
        }
        
        if (AJAX.Debug) getRef('currentLength').value = currentLength;
    },
		hide_content: function (target) {
		$('#'+target).slideUp();
		},
    
    /****************************************
    *                                       *
    *     FADE EFFECT                       *
    *                                       *
    ****************************************/
    fade_content_out: function (target, hidden, speedfactor) {
        $('#'+target).fadeOut();
    },

    fade_content_in: function (target, hidden, speedfactor) {
        $('#'+target).fadeIn();
    }
};

/********************************************************************************
RENTAL QUEUE MANIPULATION
********************************************************************************/

var QUEUE = {

    id: null,
    rowId: null,
    rand: null, 
    request: null,
    allocating: false,
    productID: null,
    sections: new Array(),
    
    settingDefault: false,

    set_queue_id: function () {
        QUEUE.rand = Math.random();
        var add_url = '/widgets/ajax_set_default_queue.html?r='+QUEUE.rand;
        if(!QUEUE.settingDefault) {
            QUEUE.settingDefault = true;
            AJAX.request_object(add_url, '', QUEUE.set_queue_id_response, 'GET');
        }
    },
    set_queue_id_response: function() {
        if(AJAX.request.readyState == 4) {
            QUEUE.settingDefault = false;
            results = AJAX.request.responseText.split("~|~");
            if (results[0] == QUEUE.rand) {
                AJAX.queueID = results[2];
            }
        }
        
    },
    setDefault: function (id, move) {
        if (!move) move = 0;
        QUEUE.rand = Math.random();
        QUEUE.id = id;
        QUEUE.productID = (!move) ? '' : move;
        var add_url = '/widgets/ajax_set_default_queue.html?r='+QUEUE.rand+'&id='+id;
        if (move) add_url += '&product_id='+move;
        if(!QUEUE.settingDefault) {
            QUEUE.settingDefault = true;
            AJAX.request_object(add_url, '', QUEUE.isDefault, 'GET');
        }    
    },
    isDefault: function() {
        if(AJAX.request.readyState == 4) {
            QUEUE.settingDefault = false;
            results = AJAX.request.responseText.split("~|~");
            if (results[0] == QUEUE.rand) { 
                AJAX.queueID = results[2];

                if (document.getElementById('ActiveQueue'))
                    var select = document.getElementById('ActiveQueue');

                var ln = 'listName'+((QUEUE.productID) ? '-'+QUEUE.productID : '');
                var dd = 'listDropdown'+((QUEUE.productID) ? '-'+QUEUE.productID : '');
                if (document.getElementById(ln)) {
                    var e = document.getElementById(ln);
                    e.innerHTML = results[1]+ ' <small style="font-weight:normal;">(<a href="#" onclick="javascript:QUEUE.change_list(); return false;">'+LOVEFiLM.i18n.i18n("/global/javascript_messaging/change")+'</a>)</small>';
                    document.getElementById(dd).style.display = 'none';
                    e.style.display = 'inline';
                } 

            }
        }  
    },
   
    change_list: function () {
        var e = 'listName'+((QUEUE.productID) ? '-'+QUEUE.productID : '');
        var f = 'listDropdown'+((QUEUE.productID) ? '-'+QUEUE.productID : '');
        var dd = document.getElementById(f);
        var ln = document.getElementById(e);
        dd.style.display='inline';
        ln.style.display='none';
    }
};



