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

// Pre-load images for AJAX add/reserve buttons.
if (document.images) {
   var added = new Image();
   var added_sml = new Image();
   var adding = new Image();
   var adding_sml = new Image();   
   var reserving = new Image();
   var reserving_sml = new Image();   
   var reserved = new Image();
   var reserved_sml = new Image();      
   var removing = new Image();
   var removing_sml = new Image();
   var removed = new Image();
   var removing_sml = new Image();   
   
   added.src = "/lovefilm/images/buttons/btn_added.gif";
   added_sml.src = "/lovefilm/images/buttons/btn_added_sml.gif";
   adding.src = "/lovefilm/images/buttons/btn_adding.gif";
   adding_sml.src = "/lovefilm/images/buttons/btn_adding_sml.gif";   
   reserving.src = "/lovefilm/images/buttons/btn_reserving.gif";
   reserving_sml.src = "/lovefilm/images/buttons/btn_reserving_sml.gif";
   reserved.src = "/lovefilm/images/buttons/btn_reserved.gif";   
   reserved_sml.src = "/lovefilm/images/buttons/btn_reserved_sml.gif";   
   removing.src = "/lovefilm/images/buttons/btn_removing.gif";
   removing_sml.src = "/lovefilm/images/buttons/btn_removing_sml.gif";
   removed.src = "/lovefilm/images/buttons/btn_removed.gif";   
   removing_sml.src = "/lovefilm/images/buttons/btn_removed_sml.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,

    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].replace(/_/, "-");
                    var catalog = results[2];
                    if (results[3] <= 0) {
                        if (confirm("Are you sure you want to add this "+media+" title? ("+media+" titles are not currently in your list)\n\nWant a Game and a DVD at the same time? Its easy if you use Multiple Lists. Click on the help button in the top-right corner of our website for more info.")) {
                            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') {
					var number_of_titles = parseInt(getRef('rentalListCount').innerHTML)+1;
					getRef('rentalListCount').innerHTML = (number_of_titles)+' unique title'+((number_of_titles != 1) ? 's' : '');
				}
                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
					var number_of_titles = parseInt(getRef('rentalListCount').innerHTML)+1;
                    if (results[2]>0) {
                        discs = " "+ results[2] +" discs";
						getRef('rentalListCount').innerHTML = (number_of_titles)+' unique title'+((number_of_titles != 1) ? 's' : '');
                    } else {
						getRef('rentalListCount').innerHTML = (number_of_titles)+' unique title'+((number_of_titles != 1) ? 's' : '');
                    }
                }
    
                var ajax_add_menu = '';
                if (!AJAX.smlimg) {
                    ajax_add_menu = "<a href=\"/account/selection.html\">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;\" >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;\">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]);
                } else {
                    if (AJAX.add_option == 3) {
                        // Full detail
                        getRef('inlineC'+results[1]).innerHTML = results[4];
                        AJAX.show_content('activate'+results[1]);
                    } 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]);
                        }
                    }
                }
            }
        }
    },

    
    /****************************************
    *           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 = 'Loading...';     
        if (action == 'remove_from_rental_list') loadingText = '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];
										if($('.ajaxContent').css('display', 'none')){
											$('.ajaxContent').css('display', 'block');
										}
                    AJAX.show_content('activate'+results[1]);
                }
            }
        }
    },
    
    
    /****************************************
    *           HIDE TITLE                  *
    ****************************************/   
    hide_item: function (id,action) {
        AJAX.rand = Math.random();
        
        getRef('allbuttons'+id).innerHTML = "<div class=\"ajaxloading\" style=\"float: right\">Hiding...</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];
                $('#ajaxItemRow'+results[1]).hide();
            }
        }
    },  



    /****************************************
    *           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 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 (results[4] != 1) {
					var number_of_titles = parseInt(getRef('rentalListCount').innerHTML)-1;
					number_of_titles = (number_of_titles < 1 || number_of_titles === '') ? 0 : number_of_titles;
					getRef('rentalListCount').innerHTML = (number_of_titles)+' unique title'+((number_of_titles != 1) ? 's' : '');
                    //getRef('rentalListCount').innerHTML = (parseInt(getRef('rentalListCount').innerHTML)-1)+' unique titles';
				}

                
                if (AJAX.add_option != 5) {
                    if (!AJAX.smlimg && (AJAX.add_option != 4)) {
                        var ajax_add_menu = "<a href=\"/account/selection.html\">Rental list</a>";
                        if (media.toLowerCase() == 'dvd') ajax_add_menu +=  " | <a href=\"#\" onclick=\"AJAX.update_priority("+results[1]+",'product_id'); return false;\" >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);
                    
                    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]);
                    }
                } else {
                    getRef('bonusDisc'+results[1]).innerHTML = "<span style=\"color:red;\">The bonus disc has been removed</span>";
                }
                
            }
        }
    },
    
 
    /****************************************
    *                                       *
    *           LOADING BUTTONS             *
    *                                       *
    ****************************************/   
    load_area_update: function (id, perform, smlimg) {
        var updateStyle;
        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';
		if (AJAX.smlimg == 1) {
            // var loadingText = '<img src=\"/lovefilm/images/buttons/btn_'+perform.toLowerCase()+'ing_sml.gif\" alt=\"'+perform+'ing...\" border=\"0\" width=\"60\" height=\"17\" class=\"ajaxbutton\" />';
            updateStyle = perform.toLowerCase()+'ing';
		} else {
            var loadingText = '<img src=\"/lovefilm/images/buttons/btn_'+perform.toLowerCase()+'ing.gif\" alt=\"'+perform+'ing...\" border=\"0\" width=\"97\" height=\"18\" class=\"ajaxbutton\" />';
		}
        if (AJAX.add_option == 10) {
            loadingArea = 'inlineT';
            loadingText = '<span class=\"ajaxloading\" >'+perform+'ing...</span>';
        } else if (AJAX.add_option == 5) {
            loadingArea = 'bonusDisc';
            loadingText = '<span class=\"ajaxloading\" >'+perform+'ing...</span>';
        } else {
            AJAX.add_revert = getRef(loadingArea+id).innerHTML;
        }
        if (updateStyle) {
            getRef('buttons'+id).innerHTML = '<a onclick="return false;" title="'+updateStyle+'" class="btn_'+updateStyle+'" href="#"><span><i>'+updateStyle+'</i><b/></span></a>';
        } else {
            getRef(loadingArea+id).innerHTML = loadingText;
        }
    },

    
    load_area_done: function (result_id, perform) {
        //alert('added');
		if (AJAX.smlimg == 1) {
			// getRef('buttons'+result_id).innerHTML = "<img src=\"/lovefilm/images/buttons/btn_"+perform.toLowerCase()+"ed_sml.gif\" alt=\""+perform+"ed\" border=\"0\" width=\"60\" height=\"17\" class=\"ajaxbutton\" />";
            if (perform == 'Remov') {
                getRef('buttons'+result_id).innerHTML = '<a onclick="return false;" title="Removed" class="btn_removed" href="#" ><span><i>removed</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="'+perform+'ed (click to undo)" class="btn_'+perform.toLowerCase()+'ed" href="#" ><span><i>'+perform+'ed</i><b/></span></a>';
            }
		} else {
			getRef('buttons'+result_id).innerHTML = "<img src=\"/lovefilm/images/buttons/btn_"+perform.toLowerCase()+"ed.gif\" alt=\""+perform+"ed\" border=\"0\" width=\"97\" height=\"18\" class=\"ajaxbutton\" />";
		}
    },

    /****************************************
    *                                       *
    *     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;
        }
    },
      
    /****************************************
    *                                       *
    *     SCROLL EFFECT                     *
    *                                       *
    ****************************************/   
	/* 
	* QBF - jQuery .slideUp, .slideDown, .slideToggle does exactly this - please update to jQuery methods
	*/
    show_content: function (target, length, speedfactor) {
		
		$('#'+target).slideDown();
		
        /*
		getRef(target).style.display = 'block';
        
        var currentLength = parseInt(getRef(target).style.height);
        var containerHeight;
        var details;
        if (currentLength != length && length != 0) {           

           if(AJAX.smlimg) {
            details = new fx.Height(AJAX.id+'Details', {duration: speedfactor});
            details.toggle();
           }
         
            containerHeight = new fx.Height(target, {duration: speedfactor});
            containerHeight.hide();
            containerHeight.toggle();                   
        
        } else if (length == 0) {
            //Hide the box once the toggle is complete
            containerHeight = new fx.Height( target , { 
                duration: speedfactor, onComplete: function() {
                   containerHeight.hide();
                   getRef(target).style.display = 'none';
                }
            });
            
            containerHeight.toggle();
            
        } 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();
        /*var containerOpacity;
        containerOpacity = new fx.Height(target, {duration: speedfactor});
        containerOpacity.toggle();
        containerOpacity.hide();
        if (AJAX.Debug) getRef('currentLength').value = currentLength;*/
    },

    fade_content_in: function (target, hidden, speedfactor) {
        $('#'+target).fadeIn();
        /*var containerOpacity;
        containerOpacity = new fx.Height(target, {duration: speedfactor});
        containerOpacity.hide();
        containerOpacity.toggle();
        if (AJAX.Debug) getRef('currentLength').value = currentLength;*/
    }
}

/********************************************************************************
SEARCH RESULTS - LOADING AND SWAPPING
********************************************************************************/

var SEARCH = {

    field: null,
    keywords: null,
    rand: null,
    page: null,
    request: null,
    obj: null,

    result: function (field, keywords, page, showall, obj) {
        SEARCH.rand = Math.random();
        SEARCH.field = field;
        SEARCH.obj = obj;
        SEARCH.keywords = keywords;
        SEARCH.load_area_update();
        var url = '/widgets/ajax_search_results.html?r='+SEARCH.rand+'&search_keywords='+SEARCH.keywords+'&field='+SEARCH.field;
        if (page) url += '&page='+page;
        if (showall) url += '&show_all='+showall;
        AJAX.request_object(url, '', SEARCH.result_response, 'GET');
    },
     result_full: function (field, keywords, page, showall, obj) {
        SEARCH.rand = Math.random();
        SEARCH.field = field;
        SEARCH.obj = obj; 
        SEARCH.keywords = keywords;
        SEARCH.load_area_update();
        var url = '/widgets/ajax_search_results_full.html?r='+SEARCH.rand+'&search_keywords='+SEARCH.keywords+'&field='+SEARCH.field;
        if (page) url += '&page='+page;
        if (showall) url += '&show_all='+showall;
        AJAX.request_object(url, '', SEARCH.result_response, 'GET');
    },
    result_response: function () {
        var obj_field;
        if (SEARCH.obj) {
            obj_field = SEARCH.obj;
        } else {
            obj_field = SEARCH.field;
        }
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("~|~");
            if (results[0] == SEARCH.rand) {
                getRef('search-'+ obj_field).innerHTML = results[2];
            }
        }
    },

    /****************************************
    *           LOADING ANIMATION           *
    ****************************************/
    load_area_update: function () {
        var obj_field; 
        if (SEARCH.obj) {
            obj_field = SEARCH.obj;
        } else {
            obj_field = SEARCH.field;
        } 
        var loadingText = '<div class=\"loading\"><img src=\"/lovefilm/images/icons/ajax_load_black.gif\" border=\"0\" width=\"10\" height=\"10\" /> Searching... </div>';
        getRef('search-'+ obj_field).innerHTML = loadingText;
    }
}

/********************************************************************************
REVIEW - LOADING AND SWAPPING
********************************************************************************/
    
var REVIEW = {
        
    // Show Debug on AJAX => (0,1)
    Debug: 0,
    
    mood: null,
    id: null,
    rand: null,    request: null,   

    show_mood: function (mood, id) {
        REVIEW.rand = Math.random();
        REVIEW.mood = mood;               
        REVIEW.load_area_update(); 
                      
        var add_url = '/widgets/ajax_review.html?r='+REVIEW.rand+'&product_id='+id+'&mood='+REVIEW.mood;
            
        AJAX.request_object(add_url, '', REVIEW.show_mood_response, 'GET');
    },  
            
    show_mood_response: function () {
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("~|~");
            
            if (results[0] == REVIEW.rand) {
                if (REVIEW.Debug) getRef('xmlid').value = results[1];
                getRef('rev-'+ REVIEW.mood).innerHTML = results[2];
            }
        }  
    },
     
    /****************************************
    *           LOADING ANIMATION           *
    ****************************************/   
    load_area_update: function () {
        var loadingText = '<div class=\"loading\"><img src=\"/lovefilm/images/icons/ajax_load_black.gif\" border=\"0\" width=\"10\" height=\"10\" /> Loading Reviews... </div>';
        getRef('rev-'+ REVIEW.mood).innerHTML = loadingText;
    }
}

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

var QUEUE = {

    id: null,
    rowId: null,
    rand: null, 
    request: null,
    allocating: false,
    productID: null,
    sections: new Array(),
    
    allocate: function (allocOrder) {
        //var groups = document.getElementsByClassName('section');
        //var allocOrder = '';
        QUEUE.rand = Math.random();
       /* groups.each(function(section) {
            var sectionID = section.id;
            allocOrder += Sortable.sequence(section).length+',';
        }); */
        alert(allocOrder);
        var add_url = '/widgets/ajax_save_allocations.html?r='+QUEUE.rand+'&sequence='+allocOrder;
        if(!QUEUE.allocating) {
            QUEUE.allocating = true;
            AJAX.request_object(add_url, '', QUEUE.allocated, 'GET');
        }    
    },
    allocated: function() {
        if(AJAX.request.readyState == 4) {
            QUEUE.allocating = false;
            alert(QUEUE.rowID+' saved')
        }  
    },
    
    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;">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';
    },
 
    save: function (el, id) {
        var rowId = el.parentNode.parentNode.rowIndex;
        var x=document.getElementById('queues').rows[rowId].cells;
        var queueName = x[1].firstChild.value;
        QUEUE.rand = Math.random();
        QUEUE.id = id;
        QUEUE.rowId = rowId;
        var add_url = '/widgets/ajax_save_queue.html?r='+QUEUE.rand+'&queue_name='+encodeURIComponent(queueName)+'&queue_id='+id;
        AJAX.request_object(add_url, '', QUEUE.save_row, 'GET');
    },
    
    save_row: function () {
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("~|~");
            if (results[0] == QUEUE.rand) {
                var cell = document.getElementById('queues').rows[QUEUE.rowId].cells;
                cell[1].innerHTML = results[2];
                cell[4].innerHTML = results[3];
            }
        }
    },
    
    add: function () {
        var queueName = document.getElementById('new_queue_name').value;
        //document.getElementById('new_queue_name').value = '';
        var tableRows = document.getElementById('queues').tBodies[0].rows;
        var rowId = (tableRows.length);
        var dupeName = 0;
        for (var i = 1; i < rowId; i++) {  // start rows at 1 to ignore header row
            var currentRow = tableRows[i].cells[1].innerHTML;
            var rowStart = currentRow.indexOf("\">")+2;
            var rowEnd   = currentRow.indexOf("</a>");
            var currentQueueName = currentRow.substring(rowStart, rowEnd);
            if (currentQueueName.toLowerCase() == queueName.toLowerCase()) {
                alert('Sorry, you cannot have duplicate list names');
                dupeName = 1;
                break;
            } else {
                dupeName = 0;
                continue;
            }
        }
        if (queueName != 'New queue name' && dupeName === 0) {
            QUEUE.rand = Math.random();
            QUEUE.rowId = rowId;
            if (QUEUE.rowId <= 10) {
                $.ajax({
                     type: "GET",
                     url: "/widgets/ajax_add_queue.html",
                     data: 'r='+QUEUE.rand+'&queue_name='+encodeURIComponent(queueName)+'&rowId='+QUEUE.rowId,
                     success: function(response){
                         results = response.split("~|~");
                         //QUEUE.add_row
                         var clonedRow = $('#queues tr:last').clone(); //this will grab the last table row.
                         var newID = 'group'+results[0];
                         var oldID = $('div', clonedRow).attr('id');
                         var tempRow = clonedRow.html();
                         tempRow.replace(/oldID/g, newID);
                         clonedRow.html(tempRow);
                         //$("div", clonedRow).attr('id', newID );
                         alert( tempRow );
                         $("#queues").append(clonedRow); //add the row back to the table
                     }
                });
                //var add_url = '/widgets/ajax_add_queue.html?r='+QUEUE.rand+'&queue_name='+encodeURIComponent(queueName)+'&rowId='+QUEUE.rowId;
                //AJAX.request_object(add_url, '', QUEUE.add_row, 'GET');
            } else {
                alert ('You cannot have more than 10 lists');
            }
        }
    },

    add_row: function () {
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("~|~");
            if (results[0] == QUEUE.rand) {
                
                var table = document.getElementById('queues').tBodies;
                alert('add a row');
                var queueName = 'group'+ results[1];
                QUEUE.sections.push(queueName);
                var row = document.createElement("tr");
                for (var index=0; index<5; index++) {
                    var cell = document.createElement("td");
                    if (index == 2) cell.setAttribute("class", 'center');
      
                    cell.innerHTML= results[index+2];

                    row.appendChild(cell);
                }
                table[0].appendChild(row);
                //initialseGroups();
            }
        }
    },
    
    edit: function (el, qid) {
        var rowId = (typeof(el) == 'object') ? el.parentNode.parentNode.rowIndex : el;
        var x=document.getElementById('queues').rows[rowId].cells
        var td = x[1].childNodes;
        var queueName;
        for  (var e = 0; e < td.length; e++) 
            if (td[e].nodeName == 'A') queueName = td[e].innerHTML;
        
        var hid = document.createElement("INPUT");
        hid.setAttribute("type","hidden");
        hid.setAttribute("value", qid);
        hid.setAttribute("name", "id");
        x[0].appendChild(hid);
        var input1 = document.createElement("INPUT");
        input1.setAttribute("type","text");
        input1.setAttribute("value", decodeURIComponent(queueName));
        input1.setAttribute("name", "rename_queue");
        input1.setAttribute("maxLength", 20);
        x[1].innerHTML = '';    
        x[1].appendChild(input1);
        document.getElementById('queues').rows[rowId].style.backgroundColor = "#fefefe";

        x[4].innerHTML = '<a href="#" onClick="QUEUE.save(this, '+qid+'); return false;" class="button"/>Save</a> <a href="#" onClick="QUEUE.delete_me(this, '+qid+'); return false;" class="button delete" />Delete</a>'; 
    },

    delete_me: function (obj, id) {
        QUEUE.id = id;
		if (QUEUE.id > 0) {
        var rowId = obj.parentNode.parentNode.rowIndex;
/*        var table = obj.parentNode.parentNode.parentNode.rows;
        var td = table[rowId].cells[2].childNodes;*/

        
        QUEUE.rand = Math.random();
        QUEUE.rowId = rowId;
        $.ajax({
           type: "GET",
           url: "/widgets/ajax_delete_queue_check.html",
           data: 'r='+QUEUE.rand+'&queue_id='+id,
           success: function(response){
               var results = response.split("~|~");
               var error = (results[2].length > 3) ? 1 : 0;
               if (!error) {
                  var answer = confirm("Are you sure you want to delete this list?");
                  if (answer) {
                      $.ajax({
                         type: "GET",
                         url: "/widgets/ajax_delete_queue.html",
                         data: 'r='+QUEUE.rand+'&queue_id='+id,
                         success: function(response){
                             results = response.split("~|~");
                             
                             if (results[0] == QUEUE.rand) {
                             var error = (results[2].length > 3) ? 1 : 0;
                                 if (!error) {
                                     var item = 'group'+id;
                                     $('#'+item).parents('tr').eq(0).remove();
                                     //
                                     // Need to remove the object for allocations
                                     //
                                     delete $.queueObj.item;
                                     
                                     alert( $.queueObj.length );

                                     
                                     /*var obj = document.getElementById('queues');
                                     var x=obj.rows[QUEUE.rowId].cells;
                                     x[1].innerHTML = '<div class=\"loading\" style=\"text-align:left; \"><em>Deleting...</em></div>';
                                     for (var i=0; i < QUEUE.sections.length; i++) {
                                         if(document.getElementById(QUEUE.sections[i]))
                                            Sortable.destroy(QUEUE.sections[i]);
                                     }
                                     obj.deleteRow(QUEUE.rowId);
                                     var toRemove = 'group'+id;
                                     Array.prototype.removeItems = function(itemsToRemove) {

                                         if (!/Array/.test(itemsToRemove.constructor)) {
                                             itemsToRemove = [ itemsToRemove ];
                                         }

                                         var j;
                                         for (var i = 0; i < itemsToRemove.length; i++) {
                                             j = 0;
                                             while (j < this.length) {
                                                 if (this[j] == itemsToRemove[i]) {
                                                     this.splice(j, 1);
                                                 } else {
                                                     j++;
                                                 }
                                             }
                                         }
                                     }
                                     QUEUE.sections.removeItems(toRemove);*/
                                     //initialseGroups();
                                 } else {
                                     alert(results[2]);
                                 }
                             }



                         }
                       });
//                      
//                      var add_url = ;
//                      alert('DELETE!!');
//                      //AJAX.request_object(add_url, '', QUEUE.delete_row, 'GET');
                  }
               } else {
                   alert(results[2]);
               }
           }
         });
        
        //var add_url = '/widgets/ajax_delete_queue_check.html?;
        //AJAX.request_object(add_url, '', , 'GET'); 
		} else {
			alert('You cannot delete your default list');
		} 
    },

  /* delete_me_safe: function () {
        if(AJAX.request.readyState == 4) {
            var results = AJAX.request.responseText.split("~|~");
            var id = QUEUE.id;
				alert(results[2].length);
                var error = (results[2].length > 3) ? 1 : 0;
                if (!error) {
                   var answer = confirm("Are you sure you want to delete this list?");
                   if (answer) {
                       var add_url = '/widgets/ajax_delete_queue.html?r='+QUEUE.rand+'&queue_id='+id;
                       alert(id);
                       AJAX.request_object(add_url, '', QUEUE.delete_row, 'GET');
                   }
                } else {
                    alert(results[2]);
                }
        }
    },*/

    delete_row: function () {
        if(AJAX.request.readyState == 4) {
            results = AJAX.request.responseText.split("~|~");
            var id = QUEUE.id;
            if (results[0] == QUEUE.rand) {
            var error = (results[2].length > 3) ? 1 : 0;
                if (!error) {
                    var obj = document.getElementById('queues');
                    var x=obj.rows[QUEUE.rowId].cells;
                    x[1].innerHTML = '<div class=\"loading\" style=\"text-align:left; \"><em>Deleting...</em></div>';
                    for (var i=0; i < QUEUE.sections.length; i++) {
                        if(document.getElementById(QUEUE.sections[i]))
                           Sortable.destroy(QUEUE.sections[i]);
                    }
                    obj.deleteRow(QUEUE.rowId);
                    var toRemove = 'group'+id;
                    Array.prototype.removeItems = function(itemsToRemove) {

                        if (!/Array/.test(itemsToRemove.constructor)) {
                            itemsToRemove = [ itemsToRemove ];
                        }
                    
                        var j;
                        for (var i = 0; i < itemsToRemove.length; i++) {
                            j = 0;
                            while (j < this.length) {
                                if (this[j] == itemsToRemove[i]) {
                                    this.splice(j, 1);
                                } else {
                                    j++;
                                }
                            }
                        }
                    }
                    QUEUE.sections.removeItems(toRemove);
                    //initialseGroups();
                } else {
                    alert(results[2]);
                }
            }
        }
    }
    
}
