﻿// JScript File

        var pos;//Holds element positions for tooltip and sub forms
        var elem;//holds a reference to the current element
        var strLastIMDBID = "";//holds the movie id of the last movie user ranked
        var strLastFetchedIMDBID = "";//holds the last fetched movie id
        var myTimeout;//hold the settimeout instance for tooltips including U Score
        var retrydelay = 5000;//Time delay for error retrys
        var myCallString=''//Used for error and timeout retrys
        var messageTimer;//holds the timeout instance for AJAX result messages        
        var userID = 0;//holds the user ID defaults to 0
        var userName = ''
        var email = ''
        var criticID = 0;//holds the last critic id selected
        var strCriticIDs = '';//holds a comma delimited string of the IDs of the last critic matches
        var strFormat,strTitle,strMode,strYear,strGenre,strMPAARating,strSign,strRating,strCriticID,strOrderBy,strOrder,strOrderBy2,strOrder2;//Basic Search and Advanced Search variables
        var strFormatTM,strTitleTM,strModeTM,strYearTM,strGenreTM,strMPAARatingTM,strSignTM,strRatingTM,strCriticIDTM,strOrderByTM,strOrderTM,strOrderBy2TM,strOrder2TM;//Basic Search and Advanced Search variables
        var intNumUserAddedCritics = 0;//holds number of user selected critics
        var zipCode = 0
        var radius = 15
        var blnUserInterfaceBusy = false;//prevent subsaquent user initiated calls while AJAX is busy
        var blnCriticSuggestedLoaded = false;//used to determine if CriticSuggested movies still needs to be loaded
        var blnCriticMatchDetailLoaded = false;//used to determine if CriticMatchDetail still needs to be loaded
        var blnAllCriticReviewsLoaded = false; //used to determine if AllCriticReviews still needs to be loaded
        var blnNowPlayingMovieTimesLoaded = false; //used to determine if NowPlayingMovieTimes still needs to be loaded
        var blnBlockbusterMovieLinkLoaded = false; 
        var blnNetFlixMovieLinkLoaded = false; 
        var blnAdviancedSearch = false;//Toggle Basic or Advanced Search
        var strLastMovieTitle = '';//Holds the last movie title to populate the msgbox at top of screen
        var strLastMovieReleaseYear = '';//Holds the last movie releaseyear
        var cookieEnabled=(navigator.cookieEnabled)? true : false//Check to see if user has cookies enabled so can store entid for autologin
        var msg = '';//message portionof result from AJAX call
        //Retry elements for each AJAX call to determine if a single retry should be executed OnTimeOut
        var loginRetry = true;
        var createAccountRetry = true;
        var rateThisRetry = true;
        var newReleaseRetry = true;
        var nowPlayingRetry = true;
        var myMoviesRetry = true;
        var myMovieCriticsRetry = true;
        var criticSuggestedRetry = true;
        var searchResultRetry = true;
        var allCriticsRetry = true;
        var NowPlayingMovieTimesRetry = true;
        var criticMatchDetailRetry = true;
        var criticLoadRetry = true;
        var allCriticReviewsRetry = true;
        var CommentRetry = true;
        var BlockbusterMovieLinkRetry = true;//Enable Retry for next call
        var NetFlixMovieLinkRetry = true;//Enable Retry for next call            
        var addUpdateRatingRetry = true;
        var topMoviesRetry = true;
        var DTVMoviesRetry=true;
        var removeTheatherRetry = true;
        var blnDTVMoviesLoaded=false;
        var blnCODMoviesLoaded=false;//Comcast On Demand
        
        var NowPlayingMovieTimesResult = "";
        var NowPlayingMovieTimesResultMaster = "";
        var NowPlayingTitleAvgColor = "";//Holds | delimited string of now playing movie info
                    
        var blnInitialPageLoaded = false;//Was used in GetNewRelease but not used right now because getNowPlaying is called 1st instead
        var movieDescriptionWindow;//holds a reverence to the popup window when user clicks the title of a movie
        var amazonWindow;
        var movieRentalWindow;
        var instructionWindow;
        var intStartRow = 0;//used for search pagination
        var intTotalRows = 0;//holds the total rows for pagination
        var intStartRowMM = 0;//used for My Movies pagination
        var intTotalRowsMM = 0;//holds the total rows for My Movies pagination
        var blnRefreshMyMovies = true;//If user rates a new movie then refresh the My Movies list next time they visit or click
        var blnTopMoviesRefresh = true;
        var blnAllCriticsLoaded = false;
        
        //if not IE4+ nor NS6+
        if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){ 
        document.cookie="testcookie"
        cookieEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false
        }
        
        function init(){
            //Add the options to the Age select
//            var sel  = document.getElementById('Age')
//            for(var ii=10;ii<110;ii++){
//                sel.options[sel.length] = new Option(ii,ii)
//            }
            //enableQueuedCall()
            //add flash content
            //0 or 1
            var randomnumber=Math.floor(Math.random()*3)
            if(parseInt(randomnumber) == 2){
                //var fo = new SWFObject("GotPhone.swf", "GotPhone", "525", "160", 8, "#ffffff");  
                var fo = new SWFObject("GotPhone.swf", "GotPhone", "490", "150", 8, "#ffffff");  
            }else if(randomnumber == 1){
                var fo = new SWFObject("MMCMatch.swf", "MMCMatch", "490", "150", 8, "#ffffff");  
            }else{
                var fo = new SWFObject("MMC.swf", "MMC", "490", "150", 8, "#ffffff");
            }
           /* <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="525" height="160" id="MMC" align="middle">
            <param name="allowScriptAccess" value="sameDomain" />
            <param name="wmode" value="transparent" />
            <param name="movie" value="MMC.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="MMC.swf" quality="high" bgcolor="#ffffff" width="525" height="160" name="MMC" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="transparent" />
            </object> 

            <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="525" height="160" id="MMCMatch" align="middle">
            <param name="allowScriptAccess" value="sameDomain" />
            <param name="wmode" value="transparent" />
            <param name="movie" value="MMCMatch.swf" />
            <param name="quality" value="high" />
            <param name="bgcolor" value="#ffffff" />
            <embed src="MMCMatch.swf" quality="high" bgcolor="#ffffff" width="525" height="160" name="MMCMatch" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"  wmode="transparent" />
            </object>   */ 
            fo.addParam("wmode", "transparent");//Lets popups be on top of the swf
            fo.addVariable("wmode", "transparent");//Lets popups be on top of the swf
            fo.write("MMCFlash");                                                                  
            
            if (cookieEnabled){
                if(readCookie("EntID") != null){
                    userID = readCookie("EntID");
                    if(readCookie("ZipCode") != null){
                        zipCode = readCookie("ZipCode");
                        document.getElementById('mtZipCode').value = zipCode;
                    }    
                    if(readCookie("Username") != null){
                        userName = readCookie("Username");
                        if(parseInt(zipCode)>0){
                            document.getElementById('welcome').innerText = "Welcome " + userName +" (" + zipCode +")";                
                        }else{
                            document.getElementById('welcome').innerText = "Welcome " + userName;                
                        }
                    }
                    if(readCookie("Email") != null){
                        email = readCookie("Email");                
                    }                    
                    document.getElementById('LoginLink').src = "Images/LogOut.jpg";
                    document.getElementById('LoginLink').alt = "Log Out";
                    document.getElementById('LoginLink').onclick = new Function("logout()");
                    document.getElementById('rememberMe').checked = true;
                    showTimedMessage("Login Successful",10000)
                    document.getElementById('MyMovieCritics').innerHTML = "Select a movie to see your matched critic reviews."
                    fetchNowPlayingData(userID);
                }else{   
                    fetchNowPlayingData("0");                                    
                }
            }else{ 
                    fetchNowPlayingData("0"); 
            }
        }

//START REQUEST QUEING

        function enableAutoRetry()
        {
            
            Sys.Net.WebServiceProxy.retryOnFailure = 
                function(result, userContext, methodName, retryParams, onFailure)
            {
                if( result.get_timedOut() )
                {
                    if( typeof retryParams != "undefined" )
                    {
                        debug.trace("Retry: " + methodName);
                        Sys.Net.WebServiceProxy.original_invoke.apply(this, retryParams );
                    }
                    else
                    {
                        if( onFailure ) onFailure(result, userContext, methodName);
                    }
                }
                else
                {
                    if( onFailure ) onFailure(result, userContext, methodName);
                }
            }
            
            Sys.Net.WebServiceProxy.original_invoke = Sys.Net.WebServiceProxy.invoke;
            Sys.Net.WebServiceProxy.invoke = 
                function Sys$Net$WebServiceProxy$invoke(servicePath, methodName, useGet, 
                    params, onSuccess, onFailure, userContext, timeout)
            {   
                var retryParams = [ servicePath, methodName, useGet, params, 
                    onSuccess, onFailure, userContext, timeout ];
                
                // Call original invoke but with a new onFailure handler which does the auto retry
                var newOnFailure = Function.createDelegate( this, 
                    function(result, userContext, methodName) 
                    { 
                        Sys.Net.WebServiceProxy.retryOnFailure(result, userContext, 
                            methodName, retryParams, onFailure); 
                    } );
                    
                Sys.Net.WebServiceProxy.original_invoke(servicePath, methodName, useGet, 
                    params, onSuccess, newOnFailure, userContext, timeout);
            }
        }
        
        var GlobalCallQueue = {
            _callQueue : [],    // Maintains the list of webmethods to call
            _callInProgress : 0,    // Number of calls currently in progress by browser
            _maxConcurrentCall : 2, // Max number of calls to execute at a time
            _delayBetweenCalls : 50, // Delay between execution of calls 
            call : function(servicePath, methodName, useGet, 
                params, onSuccess, onFailure, userContext, timeout)
            {
                var queuedCall = new QueuedCall(servicePath, methodName, useGet, 
                    params, onSuccess, onFailure, userContext, timeout);
                    
                Array.add(GlobalCallQueue._callQueue,queuedCall);
                GlobalCallQueue.run();
            },
            run : function()
            {
                /// Execute a call from the call queue
                
                if( 0 == GlobalCallQueue._callQueue.length ) return;
                if( GlobalCallQueue._callInProgress < GlobalCallQueue._maxConcurrentCall )
                {
                    GlobalCallQueue._callInProgress ++;
                    // Get the first call queued
                    var queuedCall = GlobalCallQueue._callQueue[0];
                    Array.removeAt( GlobalCallQueue._callQueue, 0 );
                    
                    // Call the web method
                    queuedCall.execute();
                }    
                else
                {
                    // cannot run another call. Maximum concurrent 
                    // webservice method call in progress
                }            
            },
            callComplete : function()
            {
                GlobalCallQueue._callInProgress --;
                GlobalCallQueue.run();
            }
        };
        
        QueuedCall = function( servicePath, methodName, useGet, params, 
            onSuccess, onFailure, userContext, timeout )
        {
            this._servicePath = servicePath;
            this._methodName = methodName;
            this._useGet = useGet;
            this._params = params;
            
            this._onSuccess = onSuccess;
            this._onFailure = onFailure;
            this._userContext = userContext;
            this._timeout = timeout;
        }
        
        QueuedCall.prototype = 
        {
            execute : function()
            {
                Sys.Net.WebServiceProxy.original_invoke( 
                    this._servicePath, this._methodName, this._useGet, this._params,  
                    Function.createDelegate(this, this.onSuccess), // Handle call complete
                    Function.createDelegate(this, this.onFailure), // Handle call complete
                    this._userContext, this._timeout );
            },
            onSuccess : function(result, userContext, methodName)
            {
                this._onSuccess(result, userContext, methodName);
                GlobalCallQueue.callComplete();            
            },        
            onFailure : function(result, userContext, methodName)
            {
                this._onFailure(result, userContext, methodName);
                GlobalCallQueue.callComplete();            
            }        
        };

        
        function enableQueuedCall()
        {            
            Sys.Net.WebServiceProxy.original_invoke = Sys.Net.WebServiceProxy.invoke;
            Sys.Net.WebServiceProxy.invoke = 
                function Sys$Net$WebServiceProxy$invoke(servicePath, methodName, 
                    useGet, params, onSuccess, onFailure, userContext, timeout)
            {   
                GlobalCallQueue.call(servicePath, methodName, useGet, params, 
                    onSuccess, onFailure, userContext, timeout);
            }
        }

//END REQUEST QUEING

//START NEW RELEASE

        function getNewReleaseData(){
            closePopUps();//In case it is open
            if(document.getElementById('NewRelease').innerHTML == ""){
                fetchNewReleaseData(userID);
            }
        }

        function fetchNewReleaseData(pstrEntID){
            closePopUps();//In case it is open
            document.getElementById('NewReleaseLoading').style.display = "block"
            document.getElementById('NewReleaseLoading').style.visibility = "visible"
            ret = MyMovieCriticService.getNewReleaseData(pstrEntID,OnCompleteNewRelease, OnErrorNewRelease)            
        }
        
        // This is the callback function that
        // processes the Web Service return value.
        function OnCompleteNewRelease(result)
        {
            var RsltElem = document.getElementById('NewRelease')
            RsltElem.innerHTML = result;
            sorttable.makeSortable(document.getElementById('NewReleaseTable'))
            document.getElementById('NewReleaseLoading').style.visibility = "hidden"
            document.getElementById('NewReleaseLoading').style.display = "none"
            newReleaseRetry = true//Enable Retry for next call
            blnInitialPageLoaded = true
        }

        function OnErrorNewRelease(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && newReleaseRetry){            
                newReleaseRetry = false//Disable Retry for next call
                delayedFunctionCall1("fetchNewReleaseData",userID);
            }else if(statusCode == 403 && newReleaseRetry){        
                newReleaseRetry = false//Disable Retry for next call             
                delayedFunctionCall1("fetchNewReleaseData",userID);
            }else if(timedout){                   
                systemBusy();
                document.getElementById('NewReleaseLoading').style.visibility = "hidden"
                document.getElementById('NewReleaseLoading').style.display = "none"
                newReleaseRetry = true//Enable Retry for next call                
            }else{       
                systemError("NewReleaseData");
                document.getElementById('NewReleaseLoading').style.visibility = "hidden"
                document.getElementById('NewReleaseLoading').style.display = "none"
                newReleaseRetry = true//Enable Retry for next call
            }
        }

//END NEW RELEASE

//START NOW PLAYING

        function getNowPlayingData(){
            closePopUps();//In case it is open
            if(document.getElementById('NowPlaying').innerHTML == ""){
                fetchNowPlayingData(userID);
            }
        }

        function fetchNowPlayingData(pstrEntID){
            closePopUps();//In case it is open
            document.getElementById('NowPlayingLoading').style.display = "block"
            document.getElementById('NowPlayingLoading').style.visibility = "visible"
            ret = MyMovieCriticService.getNowPlayingData(pstrEntID,OnCompleteNowPlaying, OnErrorNowPlaying)            
        }
        
        // This is the callback function that
        // processes the Web Service return value.
        function OnCompleteNowPlaying(result)
        {
            var rslt_nowplayinglist = new Array();  
            rslt_count = result.split("|||");
            var RsltElem = document.getElementById('NowPlaying');
            RsltElem.innerHTML = rslt_count[0];
            NowPlayingTitleAvgColor = rslt_count[1];        
            sorttable.makeSortable(document.getElementById('NowPlayingTable'))
            document.getElementById('NowPlayingLoading').style.visibility = "hidden"
            document.getElementById('NowPlayingLoading').style.display = "none"
            nowPlayingRetry = true//Enable Retry for next call
        }

        function OnErrorNowPlaying(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && nowPlayingRetry){            
                nowPlayingRetry = false//Disable Retry for next call
                delayedFunctionCall1("fetchNowPlayingData",userID);
            }else if(statusCode == 403 && nowPlayingRetry){        
                nowPlayingRetry = false//Disable Retry for next call             
                delayedFunctionCall1("fetchNowPlayingData",userID);
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('NowPlayingLoading').style.visibility = "hidden"
                document.getElementById('NowPlayingLoading').style.display = "none"
                nowPlayingRetry = true//Enable Retry for next call                              
            }else{       
                if(nowPlayingRetry){
                    nowPlayingRetry = false//Disable Retry for next call
                    delayedFunctionCall1("fetchNowPlayingData",userID);
                }else{
                    systemError("NowPlayingData");
                    document.getElementById('NowPlayingLoading').style.visibility = "hidden"
                    document.getElementById('NowPlayingLoading').style.display = "none"
                    nowPlayingRetry = true//Enable Retry for next call                
                }
            }        
        }

//END NOW PLAYING

//START TOP MOVIES
        
        function getTopMoviesData(){
            closePopUps();//In case it is open
            if(blnTopMoviesRefresh == true || document.getElementById('TopMovies').innerHTML == ""){                               
                document.getElementById('TopMoviesLoading').style.display = "block"
                document.getElementById('TopMoviesLoading').style.visibility = "visible" 
                strFormatTM = document.getElementById('FormatTM').value;
                strTitleTM = "";
                strModeTM = ""//contains
                strYearTM = ""
                strGenreTM = document.getElementById('GenreTM').value;
                strMPAARatingTM = ""
                strSignTM = "gt";
                strRatingTM = "8.9";
                strCriticIDTM = "";
                if(document.getElementById('OrderByTM').value = "Rating_Recent"){
                    strOrderByTM = "rating"
                    strOrderBy2TM = "ReleaseYear"
                }else if(document.getElementById('OrderByTM').value = "Recent_Rating"){
                    strOrderByTM = "ReleaseYear"
                    strOrderBy2TM = "rating"                
                }else{
                    strOrderByTM = "rating"
                    strOrderBy2TM = ""
                }
                strOrderTM = "desc";
                strOrder2TM = "desc";
                var iStartRow = 0;//Always start at zero because only looking for top 50
                ret = MyMovieCriticService.getAdvancedSearchResults(userID,strFormatTM,strTitleTM,strModeTM,strYearTM,strGenreTM,strMPAARatingTM,strSignTM,strRatingTM,strCriticIDTM,strOrderByTM,strOrderTM,strOrderBy2TM,strOrder2TM,iStartRow,'TopMoviesDataTable',OnCompleteTopMovies, OnErrorTopMovies)
            }
        }        
        
        function OnCompleteTopMovies(result){
            var rslt_count = new Array();  
            rslt_count = result.split("|");
            var RsltElem = document.getElementById('TopMovies');
            RsltElem.innerHTML = rslt_count[0];
            intTotalRows = rslt_count[1];
            sorttable.makeSortable(document.getElementById('TopMoviesDataTable'));
            document.getElementById('TopMoviesLoading').style.visibility = "hidden";
            document.getElementById('TopMoviesLoading').style.display = "none";         
            document.getElementById('btnFindTM').disabled = true;           
            topMoviesRetry = true//Enable Retry for next call
            blnTopMoviesRefresh = false;
            blnUserInterfaceBusy = false;//re-enable user interface            
        }

        function OnErrorTopMovies(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && topMoviesRetry){            
                searchResultRetry = false//Disable Retry for next call
                delayedFunctionCall("getSearchResultData");
            }else if(statusCode == 403 && topMoviesRetry){        
                topMoviesRetry = false//Disable Retry for next call             
                delayedFunctionCall("getSearchResultData");
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('TopMoviesLoading').style.visibility = "hidden"
                document.getElementById('TopMoviesLoading').style.display = "none"
                topMoviesRetry = true//Enable Retry for next call                
                document.getElementById('btnFindTM').disabled = false;                
            }else{       
                systemError("TopMoviesData");
                document.getElementById('SearchResultLoading').style.visibility = "hidden"
                document.getElementById('SearchResultLoading').style.display = "none"
                topMoviesRetry = true//Enable Retry for next call
                document.getElementById('btnFindTM').disabled = false;
            }
        } 

//END TOP MOVIES

//START SEARCH RESULTS

        function toggleSearchType(){
            if(blnAdviancedSearch == false){
                blnAdviancedSearch = true;
                showHideSearch(document.getElementById('message'));
            }else{
                blnAdviancedSearch = false;
                showHideSearch(document.getElementById('message'));
            }
        }

        function showHideSearch(elem) {
            if(blnAdviancedSearch == true){
                if(document.getElementById('advSearch').style.display == "none"){
                    var pos = findPos(elem);
                    var elemLogin = document.getElementById('advSearch')
                    elemLogin.style.top = pos[1] + 35 + "px";
                    elemLogin.style.left = pos[0] - 5 + "px";   
                    elemLogin.style.display=  "block"      
                    document.getElementById('search').style.display = "none"
                    document.getElementById('advSearchTitle').select();   
                    getCriticSearchOptions();    
                 }else{
                    document.getElementById('advSearch').style.display = "none"
                 }            
            }else{
                if(document.getElementById('search').style.display == "none"){
                    var pos = findPos(elem);
                    var elemLogin = document.getElementById('search')
                    elemLogin.style.top = pos[1] + 35 + "px";
                    elemLogin.style.left = pos[0] - 5 + "px";   
                    elemLogin.style.display=  "block"      
                    document.getElementById('advSearch').style.display = "none"
                    document.getElementById('searchTitle').select();   
                 }else{
                    document.getElementById('search').style.display = "none"
                 }
             }
        }
        
        function findMoviesCancel(){document.getElementById('search').style.display = "none";document.getElementById('advSearch').style.display = "none"}
        
        function getCriticSearchOptions(){
            var sel = document.getElementById('CriticSelect')
            if(sel.options.length == 1){
                populateYears();
                document.getElementById('btnAdvSearchSubmit').disabled = true;
                document.getElementById('advSearchBoxResultLoading').style.display = "block"
                document.getElementById('advSearchBoxResultLoading').style.visibility = "visible" 
                ret = MyMovieCriticService.getSearchMovieCritics(userID,OnCompleteCriticLoad, OnErrorCriticLoad)            
            }
        }
        
        function populateYears(){
            var sel = document.getElementById('Year')
            var now = new Date();
            var year = now.getYear(); 
            for(i=year;i>1919;i--){
                sel.options[sel.length] = new Option(i,i)
            }
            sel.options[sel.length] = new Option(1915,1915)
            sel.options[sel.length] = new Option(1902,1902)
            sel.options[sel.length] = new Option(1888,1888)
        }
        
        function OnCompleteCriticLoad(result){
            var sel = document.getElementById('CriticSelect')
            var cirtics = new Array();  
            critics = result.split("||");//Critic|ID||Critic|ID||Critic|ID
            //Loop through and populate the CriticOptions
            for(i=0;i<critics.length;i++){//Critics loop
                var name_id = new Array();  
                name_id = critics[i].split("|");
                sel.options[sel.length] = new Option(name_id[0],name_id[1])
            }
            document.getElementById('advSearchBoxResultLoading').style.display = "none"
            document.getElementById('advSearchBoxResultLoading').style.visibility = "hidden"            
            criticLoadRetry = true//Enable Retry for next call
            document.getElementById('btnAdvSearchSubmit').disabled = false;
        }
        
        function OnErrorCriticLoad(error){
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && searchResultRetry){            
                searchResultRetry = false//Disable Retry for next call
               delayedFunctionCall("getCriticSearchOptions");
            }else if(statusCode == 403 && searchResultRetry){        
                searchResultRetry = false//Disable Retry for next call             
                delayedFunctionCall("getCriticSearchOptions");
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('advSearchBoxResultLoading').style.visibility = "hidden"
                document.getElementById('advSearchBoxResultLoading').style.display = "none"
                searchResultRetry = true//Enable Retry for next call                
            }else{       
                systemError("SearchCriticLoad");
                document.getElementById('advSearchBoxResultLoading').style.visibility = "hidden"
                document.getElementById('advSearchBoxResultLoading').style.display = "none"
                searchResultRetry = true//Enable Retry for next call
                document.getElementById('btnAdvSearchSubmit').disabled = false;
            }         
        }        
        
        function getNewSearchResultData(){
            intStartRow = 0;
            intTotalRows = 0;
            getSearchResultData();
        }
        
        function getSearchResultData(){
            if(blnAdviancedSearch == true){    
                //var sel = document.getElementById('CriticSelect')
                //if(sel.value > 0){//Critic Selected   
                    //criticID = sel.value;                           
                    document.getElementById('SearchResultLoading').style.display = "block"
                    document.getElementById('SearchResultLoading').style.visibility = "visible"
                    document.getElementById('advSearchBoxResultLoading').style.display = "block"
                    document.getElementById('advSearchBoxResultLoading').style.visibility = "visible"  
                    strFormat = document.getElementById('Format').value;
                    strTitle = document.getElementById('advSearchTitle').value;
                    strMode = document.getElementById('Mode').value;
                    strYear = document.getElementById('Year').value;
                    strGenre = document.getElementById('Genre').value;
                    strMPAARating = document.getElementById('MPAARating').value;
                    strSign = document.getElementById('Sign').value;
                    strRating = document.getElementById('Rating').value;
                    strCriticID = document.getElementById('CriticSelect').value;
                    strOrderBy = document.getElementById('OrderBy').value;
                    strOrder = document.getElementById('Order').value;
                    strOrderBy2 = document.getElementById('OrderBy2').value;
                    strOrder2 = document.getElementById('Order2').value;
                    ret = MyMovieCriticService.getAdvancedSearchResults(userID,strFormat,strTitle,strMode,strYear,strGenre,strMPAARating,strSign,strRating,strCriticID,strOrderBy,strOrder,strOrderBy2,strOrder2,intStartRow,'SearchResultsTable',OnCompleteAdvancedSearchResult, OnErrorAdvancedSearchResult)                

            }else{
                strTitle = document.getElementById('searchTitle').value;
                if(strTitle != ''){                 
                    document.getElementById('SearchResultLoading').style.display = "block"
                    document.getElementById('SearchResultLoading').style.visibility = "visible"
                    document.getElementById('SearchBoxResultLoading').style.display = "block"
                    document.getElementById('SearchBoxResultLoading').style.visibility = "visible"                    
                    ret = MyMovieCriticService.getBasicSearchResults(userID,strTitle,intStartRow,OnCompleteBasicSearchResult,OnErrorBasicSearchResult)                
                }
            }
        }
                
        function clearSearch(){
            document.getElementById('Format').value="all";
            document.getElementById('advSearchTitle').value="";
            document.getElementById('Mode').value="contains";
            document.getElementById('Year').value="all";
            document.getElementById('Genre').value="all";
            document.getElementById('MPAARating').value="all";
            document.getElementById('Sign').value="all";
            document.getElementById('Rating').value="all";
            document.getElementById('CriticSelect').value="all";
            document.getElementById('OrderBy').value="Title";
            document.getElementById('Order').value="asc";
            document.getElementById('OrderBy2').value="";
            document.getElementById('Order2').value="";            
        }
        
        function OnCompleteAdvancedSearchResult(result)
        {
            var rslt_count = new Array();  
            rslt_count = result.split("|");
            var RsltElem = document.getElementById('SearchResult');
            RsltElem.innerHTML = rslt_count[0];
            intTotalRows = rslt_count[1];
            sorttable.makeSortable(document.getElementById('SearchResultsTable'));
            document.getElementById('SearchResultLoading').style.visibility = "hidden";
            document.getElementById('SearchResultLoading').style.display = "none";
            document.getElementById('advSearchBoxResultLoading').style.display = "none";
            document.getElementById('advSearchBoxResultLoading').style.visibility = "hidden";            
            document.getElementById('advSearch').style.display = "none";
            createPaginationLinks();//Create page links if necessary
            searchResultRetry = true//Enable Retry for next call
            var tabContainer = $find('tcMovieLists');
            var selectedIndex = tabContainer.get_activeTabIndex();
            if(selectedIndex != 3){
                tabContainer.set_activeTab(tabContainer.get_tabs()[3]);
            }
            blnUserInterfaceBusy = false;//re-enable user interface            
        }

        function OnErrorAdvancedSearchResult(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && searchResultRetry){            
                searchResultRetry = false//Disable Retry for next call
                delayedFunctionCall("getSearchResultData");
            }else if(statusCode == 403 && searchResultRetry){        
                searchResultRetry = false//Disable Retry for next call             
                delayedFunctionCall("getSearchResultData");
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('SearchResultLoading').style.visibility = "hidden"
                document.getElementById('SearchResultLoading').style.display = "none"
                document.getElementById('advSearchBoxResultLoading').style.display = "none"
                document.getElementById('advSearchBoxResultLoading').style.visibility = "hidden"
                searchResultRetry = true//Enable Retry for next call
                document.getElementById('btnAdvSearchSubmit').disabled = false;                
            }else{       
                systemError("SearchResultData");
                document.getElementById('SearchResultLoading').style.visibility = "hidden"
                document.getElementById('SearchResultLoading').style.display = "none"
                document.getElementById('advSearchBoxResultLoading').style.display = "none"
                document.getElementById('advSearchBoxResultLoading').style.visibility = "hidden"
                searchResultRetry = true//Enable Retry for next call
                document.getElementById('btnAdvSearchSubmit').disabled = false;
            }
        }        

        function OnCompleteBasicSearchResult(result)
        {
            var rslt_count = new Array();  
            rslt_count = result.split("|");
            var RsltElem = document.getElementById('SearchResult');
            RsltElem.innerHTML = rslt_count[0];
            intTotalRows = rslt_count[1];
            sorttable.makeSortable(document.getElementById('SearchResultsTable'));
            document.getElementById('SearchResultLoading').style.visibility = "hidden";
            document.getElementById('SearchResultLoading').style.display = "none";
            document.getElementById('SearchBoxResultLoading').style.display = "none";
            document.getElementById('SearchBoxResultLoading').style.visibility = "hidden";            
            document.getElementById('search').style.display = "none";
            createPaginationLinks();//Create page links if necessary
            searchResultRetry = true//Enable Retry for next call
            var tabContainer = $find('tcMovieLists');
            var selectedIndex = tabContainer.get_activeTabIndex();
            if(selectedIndex != 3){
                tabContainer.set_activeTab(tabContainer.get_tabs()[3]);
            }
            blnUserInterfaceBusy = false;//re-enable user interface            
        }

        function OnErrorBasicSearchResult(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && searchResultRetry){            
                searchResultRetry = false//Disable Retry for next call
                delayedFunctionCall("getSearchResultData");
            }else if(statusCode == 403 && searchResultRetry){        
                searchResultRetry = false//Disable Retry for next call             
                delayedFunctionCall("getSearchResultData");
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('SearchResultLoading').style.visibility = "hidden"
                document.getElementById('SearchResultLoading').style.display = "none"
                document.getElementById('SearchBoxResultLoading').style.display = "none"
                document.getElementById('SearchBoxResultLoading').style.visibility = "hidden" 
                searchResultRetry = true//Enable Retry for next call
                document.getElementById('btnAdvSearchSubmit').disabled = false;                
            }else{       
                systemError("SearchResultData");
                document.getElementById('SearchResultLoading').style.visibility = "hidden"
                document.getElementById('SearchResultLoading').style.display = "none"
                document.getElementById('SearchBoxResultLoading').style.display = "none"
                document.getElementById('SearchBoxResultLoading').style.visibility = "hidden" 
                searchResultRetry = true//Enable Retry for next call
                document.getElementById('btnAdvSearchSubmit').disabled = false;
            }
        }

//END SEARCH RESULT

//START MY MOVIES
        
        function getNewMyMoviesData(){
            closePopUps();//In case it is open
            intStartRowMM = 0;
            intTotalRowsMM = 0;
            getMyMoviesData();
        }
        
        function getMyMoviesData(){
            closePopUps();//In case it is open
            if(myMoviesRetry == true && userID > 0){                 
                document.getElementById('MyMoviesLoading').style.display = "block"
                document.getElementById('MyMoviesLoading').style.visibility = "visible"                   
                ret = MyMovieCriticService.getMyMoviesResults(userID,intStartRowMM,OnCompleteMyMovies, OnErrorMyMovies)                
            }   
        }        
        
        function OnCompleteMyMovies(result)
        {
            var rslt_count = new Array();  
            rslt_count = result.split("|");
            var RsltElem = document.getElementById('MyMovies');
            RsltElem.innerHTML = rslt_count[0];
            intTotalRowsMM = rslt_count[1];
            sorttable.makeSortable(document.getElementById('MyMoviesTable'));
            document.getElementById('MyMoviesLoading').style.visibility = "hidden";
            document.getElementById('MyMoviesLoading').style.display = "none";           
            createPaginationLinksMM();//Create page links if necessary
            myMoviesRetry = true//Enable Retry for next call
            blnUserInterfaceBusy = false;//re-enable user interface    
            blnRefreshMyMovies = false;        
        }

        function OnErrorMyMovies(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && myMoviesRetry){  
                blnRefreshMyMovies = true;            
                myMoviesRetry = false//Disable Retry for next call
                delayedFunctionCall("getMyMoviesData");
            }else if(statusCode == 403 && myMoviesRetry){  
                blnRefreshMyMovies = true;        
                myMoviesRetry = false//Disable Retry for next call             
                delayedFunctionCall("getMyMoviesData");
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('MyMoviesLoading').style.visibility = "hidden"
                document.getElementById('MyMoviesLoading').style.display = "none"          
                myMoviesRetry = true//Enable Retry for next call       
                blnRefreshMyMovies = true;                
            }else{       
                systemError("MyMoviesData");
                document.getElementById('MyMoviesLoading').style.visibility = "hidden"
                document.getElementById('MyMoviesLoading').style.display = "none"          
                myMoviesRetry = true//Enable Retry for next call       
                blnRefreshMyMovies = true;
            }
        } 
//END MY MOVIES

//START MYMOVIECRITICS

        function fetchMyMovieCriticsData(pThis,pstrIMDBID,pstrMovieTitle){
            closePopUps();//In case it is open
            //if(pThis.checked == true && blnUserInterfaceBusy == false){
            if(blnUserInterfaceBusy == false){
                strLastMovieTitle = pstrMovieTitle;
                strLastFetchedIMDBID = pstrIMDBID
                //Highligt the movie in Now Playing
                highlightActiveMovieTitle()
                //var RsltElem = document.getElementById('NowPlayingMovieTimes')
                //RsltElem.innerHTML = NowPlayingMovieTimesResult;                
                
                if(userID == 0){
                    document.getElementById('AllCriticReviews').innerHTML = ""
                    var tabCritics = $find('tcCritics');
                    tabCritics.set_activeTab(tabCritics.get_tabs()[1]);
                    document.getElementById('AllCriticReviewsLoading').style.display = "block"
                    document.getElementById('AllCriticReviewsLoading').style.visibility = "visible"
                    blnUserInterfaceBusy = true;//disable user interface 
                    blnAllCriticReviewsLoaded = false;
                    getAllCriticReviews(userID,pstrIMDBID);
                }else{
                    blnUserInterfaceBusy = true;//disable user interface 
                    var tabCritics = $find('tcCritics');
                    var selectedIndex = tabCritics.get_activeTabIndex();   
                    if(selectedIndex > 2){
                        tabCritics.set_activeTab(tabCritics.get_tabs()[0]);
                    }                 
                    getMyMovieCriticsData(userID,pstrIMDBID)                    
                }
            }
        }

        function getMyMovieCriticsData(pstrEntID,pstrIMDBID){
            closePopUps();//In case it is open
            document.getElementById('MyMovieCriticsLoading').style.display = "block"
            document.getElementById('MyMovieCriticsLoading').style.visibility = "visible"
            document.getElementById('CriticSuggestedLoading').style.visibility = "visible"
            document.getElementById('CriticSuggestedLoading').style.display = "block" 
            document.getElementById('AllCriticReviewsLoading').style.display = "block"
            document.getElementById('AllCriticReviewsLoading').style.visibility = "visible"
            ret = MyMovieCriticService.getMyMovieCriticsData(pstrEntID,pstrIMDBID,OnCompleteMyMovieCritics, OnErrorMyMovieCritics,pstrEntID,pstrIMDBID)
        }
        
        // This is the callback function that
        // processes the Web Service return value.
        function OnCompleteMyMovieCritics(result)
        {
            var Msg_CriticIDs = new Array();  
            Msg_CriticIDs = result.split("|")
            strCriticIDs = Msg_CriticIDs[1];
            var RsltElem = document.getElementById('MyMovieCritics')
            RsltElem.innerHTML = Msg_CriticIDs[0];
            document.getElementById('MyMovieCriticsLoading').style.visibility = "hidden"
            document.getElementById('MyMovieCriticsLoading').style.display = "none"           
            myMovieCriticsRetry = true//Enable Retry for next call
            blnCriticSuggestedLoaded = false;
            blnCriticMatchDetailLoaded = false;        
            blnAllCriticReviewsLoaded = false;  
            //Get reference to TabContainer and get the active tab index
            //var tabBehavior = $get('SuggestedFlix').control;//Can be used to get events and other stuff
            var tabCritics = $find('tcCritics');
            var selectedIndex = tabCritics.get_activeTabIndex();//$find('tcCritics').get_activeTabIndex();
            if(selectedIndex == 1 || userID == 0){  
                if(selectedIndex !=1){
                    tabCritics.set_activeTab(tabCritics.get_tabs()[1]);
                }
                document.getElementById('AllCriticReviewsLoading').style.display = "none"
                document.getElementById('AllCriticReviewsLoading').style.visibility = "hidden"                           
                getAllCriticReviews();
            }else if(selectedIndex == 2){
                document.getElementById('CriticSuggestedLoading').style.visibility = "hidden"
                document.getElementById('CriticSuggestedLoading').style.display = "none"            
                getCriticSuggested();
                //getCriticMatchDetail();
            //}else if(selectedIndex == 3){
                //getAllCriticReviews();                
            }else{
                document.getElementById('CriticSuggestedLoading').style.visibility = "hidden"
                document.getElementById('CriticSuggestedLoading').style.display = "none" 
                tabCritics.set_activeTab(tabCritics.get_tabs()[0]);
                //blnUserInterfaceBusy = false;//re-enable user interface
            }
            blnUserInterfaceBusy = false;//re-enable user interface
            document.getElementById('movieTitle').innerHTML = "<strong>" + strLastMovieTitle + "</strong>";
            //Get reference to Accordian Extender
//            var accHost = $find('Critics_AccordionExtender');
//            accHost.set_SelectedIndex(0);            
        }

        function OnErrorMyMovieCritics(error,pEntID,pIMDBID) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && myMovieCriticsRetry){            
                searchResultRetry = false//Disable Retry for next call
                delayedFunctionCall2("getMyMovieCriticsData",pEntID,pIMDBID);
            }else if(statusCode == 403 && myMovieCriticsRetry){        
                searchResultRetry = false//Disable Retry for next call             
                delayedFunctionCall2("getMyMovieCriticsData",pEntID,pIMDBID);
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('MyMovieCriticsLoading').style.visibility = "hidden"
                document.getElementById('MyMovieCriticsLoading').style.display = "none"
                document.getElementById('CriticSuggestedLoading').style.visibility = "hidden"
                document.getElementById('CriticSuggestedLoading').style.display = "none"                
                document.getElementById('AllCriticReviewsLoading').style.display = "none"
                document.getElementById('AllCriticReviewsLoading').style.visibility = "hidden"
                myMovieCriticsRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;                
            }else{       
                systemError("MyMovieCriticsData");
                document.getElementById('MyMovieCriticsLoading').style.visibility = "hidden"
                document.getElementById('MyMovieCriticsLoading').style.display = "none"
                document.getElementById('CriticSuggestedLoading').style.visibility = "hidden"
                document.getElementById('CriticSuggestedLoading').style.display = "none"            
                document.getElementById('AllCriticReviewsLoading').style.display = "none"
                document.getElementById('AllCriticReviewsLoading').style.visibility = "hidden"            
                myMovieCriticsRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;
            }
        }

//END MYMOVIECRITICS

//START ALL CRITICS

        function getAllCritics(){
            closePopUps();//In case it is open
            if(blnAllCriticsLoaded == false & userID > 0){
                fetchAllCritics(userID);
            }
        }

        function fetchAllCritics(pstrEntID){
            closePopUps();//In case it is open
            document.getElementById('AllCriticsLoading').style.display = "block"
            document.getElementById('AllCriticsLoading').style.visibility = "visible"
            ret = MyMovieCriticService.getAllCritics(pstrEntID,OnCompleteAllCritics, OnErrorAllCritics)            
        }
        
        // This is the callback function that
        // processes the Web Service return value.
        function OnCompleteAllCritics(result)
        {
            var Msg_ttuseradded = new Array();  
            Msg_ttuseradded = result.split("|")
            msg = Msg_ttuseradded[0];
            intNumUserAddedCritics = Msg_ttuseradded[1];      
            var RsltElem = document.getElementById('AllCritics')
            RsltElem.innerHTML = msg;
            sorttable.makeSortable(document.getElementById('AllCriticsResultTable'));
            document.getElementById('AllCriticsLoading').style.visibility = "hidden"
            document.getElementById('AllCriticsLoading').style.display = "none"
            allCriticsRetry = true//Enable Retry for next call
            blnAllCriticsLoaded = true;
        }

        function OnErrorAllCritics(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && allCriticsRetry){            
                allCriticsRetry = false//Disable Retry for next call
                delayedFunctionCall1("fetchAllCritics",userID);
            }else if(statusCode == 403 && allCriticsRetry){        
                allCriticsRetry = false//Disable Retry for next call             
                delayedFunctionCall1("fetchAllCritics",userID);
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('AllCriticsLoading').style.visibility = "hidden"
                document.getElementById('AllCriticsLoading').style.display = "none"
                allCriticsRetry = true//Enable Retry for next call                             
            }else{       
                systemError("AllCritics");
                document.getElementById('AllCriticsLoading').style.visibility = "hidden"
                document.getElementById('AllCriticsLoading').style.display = "none"
                allCriticsRetry = true//Enable Retry for next call
            }        
        }        
//END  ALL CRITICS 

//START RATE THESE

        function getRateThisData(){
            closePopUps();//In case it is open
            if(document.getElementById('RateThis').innerHTML == ""){
                fetchRateThisData(userID);
            }
        }

        function fetchRateThisData(pstrEntID){
            closePopUps();//In case it is open
            document.getElementById('RateThisLoading').style.display = "block"
            document.getElementById('RateThisLoading').style.visibility = "visible"
            ret= MyMovieCriticService.getRateThis(pstrEntID,OnCompleteRateThis, OnErrorRateThis)            
        }
        
        // This is the callback function that
        // processes the Web Service return value.
        function OnCompleteRateThis(result)
        {
            //if (ret.readyState == 4 && ret.status == 200 ){
                var RsltElem = document.getElementById('RateThis')
                 RsltElem.innerHTML = result;
             //}   
                sorttable.makeSortable(document.getElementById('RateThisTable'))
                document.getElementById('RateThisLoading').style.visibility = "hidden"
                document.getElementById('RateThisLoading').style.display = "none"
                rateThisRetry = true//Enable Retry for next call
            
        }

        function OnErrorRateThis(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && rateThisRetry){            
                rateThisRetry = false//Disable Retry for next call
                delayedFunctionCall1("fetchRateThisData",userID);
            }else if(statusCode == 403 && rateThisRetry){        
                rateThisRetry = false//Disable Retry for next call             
                delayedFunctionCall1("fetchRateThisData",userID);
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('RateThisLoading').style.visibility = "hidden"
                document.getElementById('RateThisLoading').style.display = "none"
                rateThisRetry = true//Enable Retry for next call                            
            }else{       
                systemError("getRateThis");
                document.getElementById('RateThisLoading').style.visibility = "hidden"
                document.getElementById('RateThisLoading').style.display = "none"
                rateThisRetry = true//Enable Retry for next call
            }        
        }

//END RATE THESE

//START CRITIC SUGGESTED

        function getCriticSuggested()
        {       
            closePopUps();//In case it is open
            if(blnCriticSuggestedLoaded == false && strCriticIDs.length > 0){
                getCriticSuggestedData(userID);
            }else{
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }

        function getCriticSuggestedData(pstrEntID){
            closePopUps();//In case it is open
            document.getElementById('CriticSuggestedLoading').style.display = "block"
            document.getElementById('CriticSuggestedLoading').style.visibility = "visible"
            ret= MyMovieCriticService.getAllCriticSuggestedDataV2(pstrEntID,strCriticIDs,OnCompleteCriticSuggested, OnErrorCriticSuggested)            
        }
        
        // This is the callback function that
        // processes the Web Service return value.
        function OnCompleteCriticSuggested(result)
        {
            var RsltElem = document.getElementById('CriticSuggested')
            RsltElem.innerHTML = result;
            document.getElementById('CriticSuggestedLoading').style.visibility = "hidden"
            document.getElementById('CriticSuggestedLoading').style.display = "none"
            criticSuggestedRetry = true//Enable Retry for next call
            blnCriticSuggestedLoaded = true;
            blnUserInterfaceBusy = false;//re-enable user interface
        }

        function OnErrorCriticSuggested(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && criticSuggestedRetry){            
                criticSuggestedRetry = false//Disable Retry for next call
                delayedFunctionCall1("getCriticSuggestedData",userID);
            }else if(statusCode == 403 && criticSuggestedRetry){        
                criticSuggestedRetry = false//Disable Retry for next call             
                delayedFunctionCall1("getCriticSuggestedData",userID);
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('CriticSuggestedLoading').style.visibility = "hidden"
                document.getElementById('CriticSuggestedLoading').style.display = "none"
                criticSuggestedRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface                            
            }else{       
                systemError("getCriticSuggested");
                document.getElementById('CriticSuggestedLoading').style.visibility = "hidden"
                document.getElementById('CriticSuggestedLoading').style.display = "none"
                criticSuggestedRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }         
        }

//END CRITIC SUGGESTED

//START GET CRITIC MATCH DETAIL
        
        function getCriticMatchDetail(){ 
            closePopUps();//In case it is open
            if(blnCriticMatchDetailLoaded == false && strCriticIDs.length > 0){
                document.getElementById('CriticMatchDetailLoading').style.display = "block"
                document.getElementById('CriticMatchDetailLoading').style.visibility = "visible"
                ret = MyMovieCriticService.getCriticMatchDetailV2(userID,strCriticIDs,OnCompleteCriticMatchDetail, OnErrorCriticMatchDetail)            
            }else{
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }
        
        // This is the callback function that
        // processes the Web Service return value.
        function OnCompleteCriticMatchDetail(result)
        {
            var RsltElem = document.getElementById('CriticMatchDetail')
            RsltElem.innerHTML = result;
            sorttable.makeSortable(document.getElementById('CriticMatchDetailTable'));
            document.getElementById('CriticMatchDetailLoading').style.visibility = "hidden"
            document.getElementById('CriticMatchDetailLoading').style.display = "none"
            criticMatchDetailRetry = true//Enable Retry for next call
            //strLastCriticMatchDetailCriticIDs = strCriticIDs
            blnCriticMatchDetailLoaded = true;   
            blnUserInterfaceBusy = false;//re-enable user interface         
        }

        function OnErrorCriticMatchDetail(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && criticMatchDetailRetry){            
                criticMatchDetailRetry = false//Disable Retry for next call
                delayedFunctionCall("getCriticMatchDetail");
            }else if(statusCode == 403 && criticMatchDetailRetry){        
                criticMatchDetailRetry = false//Disable Retry for next call             
                delayedFunctionCall("getCriticMatchDetail");
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('CriticMatchDetailLoading').style.visibility = "hidden"
                document.getElementById('CriticMatchDetailLoading').style.display = "none"
                criticMatchDetailRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface                           
            }else{       
                systemError("getCriticMatchDetail");
                document.getElementById('CriticMatchDetailLoading').style.visibility = "hidden"
                document.getElementById('CriticMatchDetailLoading').style.display = "none"
                criticMatchDetailRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }
        
//END GET CRITIC MATCH DETAIL

//START GET ALL CRITIC REVIEWS

        function getAllCriticReviews(pstrEntID,pstrIMDBID){ 
            closePopUps();//In case it is open
            if(blnAllCriticReviewsLoaded == false && pstrIMDBID > 0){
                blnUserInterfaceBusy = true;
                document.getElementById('AllCriticReviewsLoading').style.display = "block"
                document.getElementById('AllCriticReviewsLoading').style.visibility = "visible"
                ret = MyMovieCriticService.getAllCriticReviews(userID,pstrIMDBID,OnCompleteAllCriticReviews, OnErrorAllCriticReviews)            
            }else{
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }
        
        function getAllCriticReviews(){ 
            closePopUps();//In case it is open
            if(blnAllCriticReviewsLoaded == false && strLastFetchedIMDBID.length > 0){
                document.getElementById('AllCriticReviewsLoading').style.display = "block"
                document.getElementById('AllCriticReviewsLoading').style.visibility = "visible"
                ret = MyMovieCriticService.getAllCriticReviews(userID,strLastFetchedIMDBID,OnCompleteAllCriticReviews, OnErrorAllCriticReviews)            
            }else{
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }
        
        // This is the callback function that
        // processes the Web Service return value.
        function OnCompleteAllCriticReviews(result)
        {
            var Msg_tt = new Array(); 
            var intTotalReviews; 
            var msg;
            Msg_tt = result.split("|")
            msg = Msg_tt[0];
            intTotalReviews = Msg_tt[1];         
            var RsltElem = document.getElementById('AllCriticReviews')
            RsltElem.innerHTML = msg;
            if(intTotalReviews > 0){
                sorttable.makeSortable(document.getElementById('AllCriticReviewTable'));            
            }
            document.getElementById('AllCriticReviewsLoading').style.visibility = "hidden"
            document.getElementById('AllCriticReviewsLoading').style.display = "none"
            document.getElementById('movieTitle').innerHTML = "<strong>" + strLastMovieTitle + "</strong>";
            allCriticReviewsRetry = true//Enable Retry for next call
            blnAllCriticReviewsLoaded = true;   
            blnUserInterfaceBusy = false;//re-enable user interface         
        }

        function OnErrorAllCriticReviews(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && allCriticReviewsRetry){            
                allCriticReviewsRetry = false//Disable Retry for next call
                delayedFunctionCall("getAllCriticReviews");
            }else if(statusCode == 403 && allCriticReviewsRetry){        
                allCriticReviewsRetry = false//Disable Retry for next call             
                delayedFunctionCall("getAllCriticReviews");
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('AllCriticReviewsLoading').style.visibility = "hidden"
                document.getElementById('AllCriticReviewsLoading').style.display = "none"
                allCriticReviewsRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface                          
            }else{       
                systemError("getAllCriticReviews");
                document.getElementById('AllCriticReviewsLoading').style.visibility = "hidden"
                document.getElementById('AllCriticReviewsLoading').style.display = "none"
                allCriticReviewsRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }        
        }
        
//END GET ALL CRITIC REVIEWS

//START LOGIN

        function showHideLogin(elem) {
            closePopUps();//In case it is open
            if(document.getElementById('login').style.display == "none"){
                var pos = findPos(elem);
                var elemLogin = document.getElementById('login')
                elemLogin.style.top = pos[1] + 50 + "px";
                elemLogin.style.left = pos[0] + "px";   
                elemLogin.style.display=  "block"           
                document.getElementById('EmailAddress').focus();     
             }else{
                document.getElementById('login').style.display = "none"
             }
            
        }
        
        function LoginSubmit(){
            if(blnUserInterfaceBusy == false){
                blnUserInterfaceBusy = true;
                document.getElementById('login_error_msg').innerHTML = ""
                document.getElementById('loginLoading').style.display = "block"
                document.getElementById('loginLoading').style.visibility = "visible"                
                ret= MyMovieCriticService.Login(document.getElementById('EmailAddress').value,document.getElementById('loginPassword').value,OnCompleteLogin, OnErrorLogin) 
            }
        }

        function LoginRetrySubmit(){
            ret= MyMovieCriticService.Login(document.getElementById('EmailAddress').value,document.getElementById('loginPassword').value,OnCompleteLogin, OnErrorLogin) 
        }
        
        function LoginCancel(){document.getElementById('login').style.display = "none"}
        
        function OnCompleteLogin(arg) {
            var id_zip_msg = new Array();  
            id_zip_msg = arg.split("|")
            userName = id_zip_msg[0];
            userID = id_zip_msg[1];
            zipCode = id_zip_msg[2];
            msg = id_zip_msg[3];
            //If successful you are already logged in so close the window
            if(msg == "LoginSuccessful"){
                document.getElementById('login').style.display = "none"
                showTimedMessage("Login Successful",10000)
                document.getElementById('LoginLink').src = "Images/LogOut.jpg"
                document.getElementById('LoginLink').alt = "Log Out"
                document.getElementById('LoginLink').onclick = new Function("logout()")   
                if(parseInt(zipCode)>0){
                    document.getElementById('welcome').innerText = "Welcome " + userName +" (" + zipCode +")";                
                }else{
                    document.getElementById('welcome').innerText = "Welcome " + userName;                
                }

                if(document.getElementById('EmailAddress')){
                    email = document.getElementById('EmailAddress').value
                }                
                if(document.getElementById('rememberMe').checked){
                    createCookie("EntID",userID,365);
                    createCookie("Email",email,365);
                    createCookie("Username",userName,365);
                    createCookie("ZipCode",zipCode,365);
                }else{
                    eraseCookie("EntID");
                    eraseCookie("Email");                                    
                    eraseCookie("Username");
                    eraseCookie("ZipCode");
                }                 
                getNowPlayingData(userID);
            }else if(msg == "NoAccount"){
                document.getElementById('login_error_msg').innerHTML = "Your email address or password was incorrect.";
                document.getElementById('login_error_msg').style.display = "block"
                document.getElementById('login_error_msg').style.visibility = "visible"                
            }else{
                document.getElementById('login_error_msg').innerHTML = msg;
                document.getElementById('login_error_msg').style.display = "block"
                document.getElementById('login_error_msg').style.visibility = "visible"
            }   
            document.getElementById('loginLoading').style.display = "none"
            document.getElementById('loginLoading').style.visibility = "hidden"            
            blnUserInterfaceBusy = false; 
            loginRetry = true;
        }        
        
        function OnErrorLogin(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && loginRetry){            
                loginRetry = false//Disable Retry for next call
                delayedFunctionCall("LoginRetrySubmit");
            }else if(statusCode == 403 && loginRetry){        
                loginRetry = false//Disable Retry for next call             
                delayedFunctionCall("LoginRetrySubmit");
            }else if(timedout){                   
                systemBusy();  
                //document.getElementById('loginLoading').style.visibility = "hidden"
                //document.getElementById('loginLoading').style.display = "none"
                allCriticReviewsRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface                          
            }else{ 
                showTimedMessage(message,10000)      
                systemError("Login");
                //document.getElementById('loginLoading').style.visibility = "hidden"
                //document.getElementById('loginLoading').style.display = "none"
                loginRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }      
            document.getElementById('loginLoading').style.display = "none"
            document.getElementById('loginLoading').style.visibility = "hidden"            
            //showTimedMessage(arg,10000)   
        }

        function logout(){
            userID = 0
            document.getElementById('LoginLink').src = "Images/Login.jpg"
            document.getElementById('LoginLink').alt = "Login"
            document.getElementById('LoginLink').onclick = new Function("showHideLogin(this)")            
            getNowPlayingData(userID);
            eraseCookie("EntID");
            eraseCookie("ZipCode");
            //document.getElementById('NowPlayingMovieTimes').innerHTML = 'Zip Code: <input type="text" id="mtZipCode" size="5" maxlength="5" /> <input type="button" value="Submit" onclick="fetchMovieTimes()" /></div>'
        }

//END LOGIN

//START CREATE ACCOUNT

        function CreateAccount(){
            closePopUps();//In case it is open
            if(document.getElementById('profile').style.display == "none"){
                var elem  = document.getElementById('login')
                var pos = findPos(elem);
                var elemProfile = document.getElementById('profile')
                elemProfile.style.top = pos[1] + "px";
                elemProfile.style.left = pos[0] + "px";   
                elemProfile.style.display=  "block" 
            //document.getElementById('profile').style.display = (document.getElementById('profile').style.display == "none") ? "block" : "none"
            document.getElementById('login').style.display = "none"
            getSecurityImage()
            }else{
                document.getElementById('profile').style.display = "none"
            }
        }
        
        function getSecurityImage(){
            ret= MyMovieCriticService.getSecurityImageLink(OnCompleteGetSecurityImage, OnErrorGetSecurityImage) 
        }
        
        function OnCompleteGetSecurityImage(arg) {
            var imgPath = location.href
            var strPathParts = imgPath.split("/")
            var idx;
            imgPath=''
            for(idx = 0;idx < strPathParts.length-1;idx++){//minus 2 because we don't want the file name
                imgPath += strPathParts[idx] + '/'
            }
            imgPath += arg
            document.getElementById('SecurityImage').src = imgPath
        }
        
        function OnErrorGetSecurityImage(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            //alert(stackTrace + " | " + message + " | " + statusCode + " | " + exceptionType + " | " + timedout)
            getSecurityImage()
            alert("There was an error loading the security image.  Please try again.")
        }
        
        function CreateAccountSubmit(){
            //document.getElementById('CreateAccountLoading').style.display = "block"
            //document.getElementById('CreateAccountLoading').style.visibility = "visible"
            //document.getElementById('profile_error_msg').innerHTML = ""
            if(blnUserInterfaceBusy == false){
                blnUserInterfaceBusy=true;
                document.getElementById('profileLoading').style.display = "block"
                document.getElementById('profileLoading').style.visibility = "visible"            
                ret= MyMovieCriticService.CreateAccount(document.getElementById('createUserName').value,document.getElementById('createEmailAddress').value,document.getElementById('createPassword').value,document.getElementById('createZipCode').value,document.getElementById('SecurityCode').value,document.getElementById('SecurityImage').src,OnCompleteCreateAccount, OnErrorCreateAccount) 
            }
            //document.getElementById('profile').style.display = "none"
        }
        function CreateAccountRetrySubmit(){
            ret= MyMovieCriticService.CreateAccount(document.getElementById('createUserName').value,document.getElementById('createEmailAddress').value,document.getElementById('createPassword').value,document.getElementById('createZipCode').value,document.getElementById('SecurityCode').value,document.getElementById('SecurityImage').src,OnCompleteCreateAccount, OnErrorCreateAccount) 
        }        
        function CreateAccountCancel(){
            document.getElementById('SecurityImage').src = "Images/Loading.gif"
            document.getElementById('SecurityCode').value = ""
            document.getElementById('profile').style.display = "none"
        }
        
        function OnCompleteCreateAccount(arg) {
            var id_zip_msg = new Array();  
            id_zip_msg = arg.split("|")
            userName = id_zip_msg[0];
            userID = id_zip_msg[1];
            zipCode = id_zip_msg[2];
            msg = id_zip_msg[3];
            //If successful you are already logged in so close the window
            if(msg == "AccountCreated"){
                document.getElementById('login').style.display = "none"
                msg = "Your account has been created and you are now logged in."
                showTimedMessage(msg,5000)
                document.getElementById('LoginLink').src = "Images/LogOut.jpg"
                document.getElementById('LoginLink').alt = "Log Out"          
                document.getElementById('LoginLink').onclick = new Function("logout()")         
                document.getElementById('profile').style.display = "none"
                if(document.getElementById('createEmailAddress')){
                    email = document.getElementById('createEmailAddress').value
                }              
                if(document.getElementById('rememberMe2').checked){
                    createCookie("EntID",userID,365);
                    createCookie("Email",email,365);
                    createCookie("Username",userName,365);                    
                    createCookie("ZipCode",zipCode,365);
                }else{
                    eraseCookie("EntID");
                    eraseCookie("Email");
                    eraseCookie("Username");
                    eraseCookie("ZipCode");                    
                }
                getNowPlayingData(userID);                
            }else{
                if(msg == "BadEmail"){
                    document.getElementById('profile_error_msg').innerHTML = "Invalid Email Format";
                }else if(msg == "BadUsername"){
                    document.getElementById('profile_error_msg').innerHTML = "Username must be 5-15 charters letters and numbers";
                }else if(msg == "BadPassword"){
                    document.getElementById('profile_error_msg').innerHTML = "Password must be 8-16 charters letters and numbers";
                }else if(msg == "UserNameExists"){
                    document.getElementById('profile_error_msg').innerHTML = "This username is already taken. Please try agian.";
                }else if(msg == "AccountExists"){
                    document.getElementById('profile_error_msg').innerHTML = "An Account already exsits for this email address.";  
                }else if(msg == "InvalidSecurityCode"){
                    document.getElementById('SecurityImage').src = "Images/Loading.gif"
                    document.getElementById('SecurityCode').value = ""
                    getSecurityImage()
                    document.getElementById('profile_error_msg').innerHTML = "Invalid security code. Please try again.";                                                  
                }else{
                    document.getElementById('profile_error_msg').innerHTML = msg;
                }
                document.getElementById('profile_error_msg').style.display = "block"
                document.getElementById('profile_error_msg').style.visibility = "visible"
            }   
            document.getElementById('profileLoading').style.display = "none";
            document.getElementById('profileLoading').style.visibility = "hidden";             
            blnUserInterfaceBusy = false; 
            createAccountRetry = true;                     
        }
        
        function OnErrorCreateAccount(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && createAccountRetry){            
                createAccountRetry = false//Disable Retry for next call
                delayedFunctionCall("CreateAccountRetrySubmit");
            }else if(statusCode == 403 && createAccountRetry){        
                createAccountRetry = false//Disable Retry for next call             
                delayedFunctionCall("CreateAccountRetrySubmit");
            }else if(timedout){                   
                systemBusy();  
                //document.getElementById('CreateAccountLoading').style.visibility = "hidden"
                //document.getElementById('CreateAccountLoading').style.display = "none"
                createAccountRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface                          
            }else{ 
                showTimedMessage(message,10000)      
                systemError("CreateAccount");
                //document.getElementById('CreateAccountLoading').style.visibility = "hidden"
                //document.getElementById('CreateAccountLoading').style.display = "none"
                createAccountRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }     
            document.getElementById('SecurityImage').src = "Images/Loading.gif"
            document.getElementById('SecurityCode').value = "" 
            document.getElementById('profileLoading').style.display = "none"
            document.getElementById('profileLoading').style.visibility = "hidden"             
            //showTimedMessage(arg,10000)        
        }
        
//END CREATE ACCOUNT        

//START EDIT PROFILE

        function showHideEditProfile(elem) {
            closePopUps();//In case it is open
            if(document.getElementById('editProfile').style.display == "none"){
                if(userID > 0){
                    var pos = findPos(elem);
                    var elemEditProfile = document.getElementById('editProfile')
                    elemEditProfile.style.top = pos[1] + 50 + "px";
                    elemEditProfile.style.left = pos[0] + "px";   
                    elemEditProfile.style.display=  "block"    
                    document.getElementById('editProfileuserName').innerHTML = userName;
                    document.getElementById('editProfileEmail').innerHTML = email;
                    if(zipCode > 0){
                        document.getElementById('editProfileZipCode').value = zipCode                    
                    }
                    document.getElementById('editProfileZipCode').select();   
                }else{
                    alert("You must be logged in to use this feature.")
                }
             }else{
                document.getElementById('editProfile').style.display = "none";
             }
        }

        function editProfileCancel(){
            document.getElementById('editProfile').style.display = "none";
        }
        
        function EditProfileSubmit(){
            if(blnUserInterfaceBusy == false){
                blnUserInterfaceBusy = true;            
                document.getElementById('editProfileLoading').style.display = "block";
                document.getElementById('editProfileLoading').style.visibility = "visible";             
                ret= MyMovieCriticService.EditProfile(userID,email,document.getElementById('editProfileZipCode').value,OnCompleteEditProfile, OnErrorEditProfile) 
            }            
        }
        
        function EditProfileRetrySubmit(){
            ret= MyMovieCriticService.EditProfile(userID,email,document.getElementById('editProfileZipCode').value,OnCompleteEditProfile, OnErrorEditProfile) 
        }        
        
        function OnCompleteEditProfile(arg){
            var oldZipCode = zipCode;
            var id_zip_msg = new Array();  
            id_zip_msg = arg.split("|")
            iserID = id_zip_msg[0];
            email = id_zip_msg[1];
            zipCode = id_zip_msg[2];
            msg = id_zip_msg[3];
            //If successful you are already logged in so close the window
            if(msg == "SuccessEditProfile"){
                document.getElementById('editProfile').style.display = "none"
                msg = "Your account has been edited."
                showTimedMessage(msg,5000)        
                document.getElementById('editProfile').style.display = "none"
                if(document.getElementById('editProfileZipCode')){
                    zipCode = document.getElementById('editProfileZipCode').value
                }              
                if(parseInt(zipCode)>0){
                    document.getElementById('welcome').innerText = "Welcome " + userName +" (" + zipCode +")";                
                }else{
                    document.getElementById('welcome').innerText = "Welcome " + userName;                
                }                
                if(readCookie("ZipCode") != null){                   
                    createCookie("ZipCode",zipCode,365);
                }else{
                    eraseCookie("ZipCode");                 
                }
                document.getElementById('editProfile').style.display = "none";
                if(oldZipCode != zipCode){
                    blnNowPlayingMovieTimesLoaded = false;
                    var tabCritics = $find('tcCritics');
                    var selectedIndex = tabCritics.get_activeTabIndex();
                    if(selectedIndex == 4){
                        getNowPlayingMovieTimes();
                    }
                }
            }else{
                if(msg == "BadEmail"){
                    document.getElementById('edit_profile_error_msg').innerHTML = "Invalid Email Format";
                }else if(msg == "BadUserID"){
                    document.getElementById('edit_profile_error_msg').innerHTML = "Incorrect User ID";                                    
                }else{
                    document.getElementById('edit_profile_error_msg').innerHTML = msg;
                }
                document.getElementById('edit_profile_error_msg').style.display = "block"
                document.getElementById('edit_profile_error_msg').style.visibility = "visible"
            }   
            document.getElementById('editProfileLoading').style.display = "none";
            document.getElementById('editProfileLoading').style.visibility = "hidden";            
            blnUserInterfaceBusy = false; 
            editPrifileRetry = true;            
        }
        
        function OnErrorEditProfile(error){
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && editPrifileRetry){            
                editPrifileRetry = false//Disable Retry for next call
                delayedFunctionCall("EditProfileRetrySubmit");
            }else if(statusCode == 403 && editPrifileRetry){        
                editPrifileRetry = false//Disable Retry for next call             
                delayedFunctionCall("EditProfileRetrySubmit");
            }else if(timedout){                   
                systemBusy();  
                //document.getElementById('CreateAccountLoading').style.visibility = "hidden"
                //document.getElementById('CreateAccountLoading').style.display = "none"
                editPrifileRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface                          
            }else{ 
                showTimedMessage(message,10000)      
                systemError("EditProfile");
                //document.getElementById('CreateAccountLoading').style.visibility = "hidden"
                //document.getElementById('CreateAccountLoading').style.display = "none"
                editPrifileRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }      
            document.getElementById('editProfileLoading').style.display = "none";
            document.getElementById('editProfileLoading').style.visibility = "hidden";            
            //showTimedMessage(arg,10000) 
        }
//END EDIT PROFILE

//START FORGOT PASSWORD
        
        function forgotPassword(){
            closePopUps();//In case it is open
            if(document.getElementById('forgotPassword').style.display == "none"){
                var elem  = document.getElementById('login')
                var pos = findPos(elem);
                var elemForgotPassword = document.getElementById('forgotPassword')
                elemForgotPassword.style.top = pos[1] + "px";
                elemForgotPassword.style.left = pos[0] + "px";  
                elem.style.display = "none" 
                elemForgotPassword.style.display=  "block"
            }else{
                document.getElementById('forgotPassword').style.display = "none"
            }            
        }
        
        function forgotPasswordSubmit(){    
            document.getElementById('forgotPassword_error_msg').innerHTML = ""
            if(document.getElementById('forgotPasswordEmailAddress').value == ''){
                var msg = "You must enter an email address<br>for us to send you your password.";
                document.getElementById('forgotPassword_error_msg').innerHTML = msg;
                document.getElementById('forgotPassword').childNodes[0].style.display = "block"
            }else{
                document.getElementById('forgotPasswordLoading').style.display = "block";
                document.getElementById('forgotPasswordLoading').style.visibility = "visible";            
                ret= MyMovieCriticService.ForgotPassword(document.getElementById('forgotPasswordEmailAddress').value,OnCompleteForgotPassword, OnErrorForgotPassword) 
            }
        }
        
        function OnCompleteForgotPassword(msg) {
                if(msg == "Successful"){
                    document.getElementById('forgotPasswordLoading').style.display = "none";
                    document.getElementById('forgotPasswordLoading').style.visibility = "hidden";                
                    alert('Your password has been email to you. If you have a junk email filter make sure admin@mymoviecritic.com is on your safe senders list.')
                    document.getElementById('forgotPassword').style.display = "none"
                }else if(msg == "NoAccount"){
                    document.getElementById('forgotPasswordLoading').style.display = "none";
                    document.getElementById('forgotPasswordLoading').style.visibility = "hidden";                
                    document.getElementById('forgotPassword_error_msg').innerHTML = "No account exists for this email address.";
                }else if(msg == "InvalidEmail"){
                    document.getElementById('forgotPasswordLoading').style.display = "none";
                    document.getElementById('forgotPasswordLoading').style.visibility = "hidden";                
                    document.getElementById('forgotPassword_error_msg').innerHTML = "Invalid Email Format";                                                
                }else{
                    document.getElementById('forgotPasswordLoading').style.display = "none";
                    document.getElementById('forgotPasswordLoading').style.visibility = "hidden";                
                    document.getElementById('forgotPassword_error_msg').innerHTML = msg;
                }
        }
        
        function OnErrorForgotPassword(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            //alert(stackTrace + " | " + message + " | " + statusCode + " | " + exceptionType + " | " + timedout)
            document.getElementById('forgotPasswordLoading').style.display = "none";
            document.getElementById('forgotPasswordLoading').style.visibility = "hidden";            
            alert("There was an error send your password.  Please try again.")
        }
        
        function forgotPasswordCancel(){
            document.getElementById('forgotPassword_error_msg').innerHTML = ""
            document.getElementById('forgotPassword').style.display = "none"
        }
        
//END FORGOT PASSWORD

//START USER RANKINGS

        function showRank(pElmntID,pMovieID)
        {
            killTimer();
            hideRentOrBuy();

            var iRank;
            var rankText;
            var divRank = document.getElementById('rankDiv');
            
            strLastIMDBID = pMovieID;
            
            //Get the position of the element calling this
            elem = document.getElementById(pElmntID);
            pos = findPos(elem);            
            
            //Set the current rank
            if(parseFloat(document.getElementById(pElmntID).innerText)){
                iRank = parseFloat(document.getElementById(pElmntID).innerText);
            }else{
                iRank = 0
            }
            
            rankText = '<div onmouseover="keepShowingRank();" style="background-color:#f5f5f5;z-index:1000;border:1px solid gray;">'
            rankText += '<a id="x" onmouseover="keepShowingRank();" href="" onclick="setRank(x);hideRank();return false;" class="menua" style="background-color:FF6666;">X</a>';
            var ii;
            for(ii=0;ii<=10;ii++){
                if(ii==iRank){
                   rankText += '<a id="' + ii + '" onmouseover="keepShowingRank();" href="" onclick="setRank(' + ii + '.0);hideRank();return false;" class="menua" style="background-color:yellow;">' + ii + '</a>';
                }else{
                   rankText += '<a id="' + ii + '" onmouseover="keepShowingRank()" href="" onclick="setRank(' + ii + '.0);hideRank();return false;" class="menua">' + ii + '</a>';
                }
                if(ii<10){
                    //add the .5
                    if(eval(ii + .5)==iRank){
                        rankText += '<a id="' + ii + '.5" onmouseover="keepShowingRank();" href="" onclick="setRank(' + ii + '.5);hideRank();return false;" class="menua" style="background-color:yellow;">+</a>';
                    }else{
                        rankText += '<a id="' + ii + '.5" onmouseover="keepShowingRank()" href="" onclick="setRank(' + ii + '.5);hideRank();return false;" class="menua">+</a>';
                    }
                }
            }
            rankText += '</div>'
            divRank.innerHTML = rankText;
            divRank.style.position = 'absolute'
            divRank.style.top = pos[1]  + 'px'
            divRank.style.left = pos[0] - 130 + "px"//+ 25 + 'px'
            //Adjust for edges
            if((pos[0] - 130) < 0){
                divRank.style.left = 1
            }else if(windowWidth() > 0 && (pos[0] + 300) > windowWidth()){
                divRank.style.left = windowWidth() - 300
            }
            
            divRank.style.visibility = "visible";            
        }
                
        function keepShowingRank(){
            killTimer();
            var divRank = document.getElementById('rankDiv');
            divRank.style.visibility = "visible";
        }
        
        function hideRank(){
            killTimer();
            var divRank = document.getElementById('rankDiv');
            divRank.style.visibility = "hidden";
        }
        
        function requestHideRank(){
            killTimer();
            myTimeout = setTimeout("hideRank()",400);
        }
        
        function setRank(pRank){
            if(elem){
                if(userID != 0){
                    if(pRank == x){
                        elem.innerHTML = "<span class='unrated'>[0]</span>"
                        ret= MyMovieCriticService.addUpdateDeleteRating(userID,strLastIMDBID,'x',OnCompleteAddUpdateDeleteRating, OnErrorAddUpdateDeleteRating,pRank)
                    }else{
                        elem.innerHTML = pRank.toFixed(1);
                        ret= MyMovieCriticService.addUpdateDeleteRating(userID,strLastIMDBID,pRank.toFixed(1),OnCompleteAddUpdateDeleteRating, OnErrorAddUpdateDeleteRating,pRank)
                    }
                }else{
                    alert('You must click the login button and create an account before you can rate movies.')
                }
            }
        }   

        function OnCompleteAddUpdateDeleteRating(result)
        {
            var id_IMDBID_Rating_Msg = new Array();  
            id_IMDBID_Rating_Msg = result.split("|")
            msg = id_IMDBID_Rating_Msg[3];
//            if(msg == 'InvalidEntID'){
//                alert('You must click the login button and create an account before you can rate movies.')
//            }else{
                showTimedMessage(msg,5000)
            //}
            //document.getElementById('AddRatingLoading').style.visibility = "hidden"
            //document.getElementById('AddRatingLoading').style.display = "none"
            createAccountRetry=true;
            blnUserInterfaceBusy = false;
            
        }

        function OnErrorAddUpdateDeleteRating(error,pRank) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && addUpdateRatingRetry){            
                addUpdateRatingRetry = false;//Disable Retry for next call
                delayedFunctionCall1("setRank",pRank);
            }else if(statusCode == 403 && addUpdateRatingRetry){        
                addUpdateRatingRetry = false;//Disable Retry for next call             
                delayedFunctionCall1("setRank",pRank);
            }else if(timedout){                   
                systemBusy();  
                //document.getElementById('AddRatingLoading').style.visibility = "hidden"
                //document.getElementById('AddRatingLoading').style.display = "none"
                addUpdateRatingRetry = true;//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface                          
            }else{ 
                showTimedMessage(message,10000);      
                systemError("addUpdateRating");
                //document.getElementById('AddRatingLoading').style.visibility = "hidden"
                //document.getElementById('AddRatingLoading').style.display = "none"
                addUpdateRatingRetry = true;//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }

//END USER RANKINGS

//START RENTORBUY

        function showRentOrBuy(pElmntID,pMovieID,pstrTitle,pstrMovieYear,pShowRent,pShowBuy)
        {
            killTimer();
            hideRank();
            var divRentOrBuy = document.getElementById('RentOrBuy');
            divRentOrBuy.style.visibility = "visible";//Images need the div visible before they are set to visiblie or they won't show
            if(pShowRent == 'True'){
                document.getElementById('ROBBlockbuster').display = 'block';
                document.getElementById('ROBBlockbuster').style.visibility = "visible";
                document.getElementById('ROBNetFlix').display = 'block';
                document.getElementById('ROBNetFlix').style.visibility = "visible";
                document.getElementById('ROBBlockbusterI').display = 'block';
                document.getElementById('ROBBlockbusterI').style.visibility = "visible";
                document.getElementById('ROBNetFlixI').display = 'block';
                document.getElementById('ROBNetFlixI').style.visibility = "visible";                                
            }else{
                document.getElementById('ROBBlockbuster').display = 'none';
                document.getElementById('ROBNetFlix').display = 'none';
                document.getElementById('ROBBlockbuster').style.visibility = "hidden";
                document.getElementById('ROBNetFlix').style.visibility = "hidden";
                document.getElementById('ROBBlockbusterI').display = 'none';
                document.getElementById('ROBNetFlixI').display = 'none';
                document.getElementById('ROBBlockbusterI').style.visibility = "hidden";
                document.getElementById('ROBNetFlixI').style.visibility = "hidden";                
            }

            if(pShowBuy == 'True'){
                document.getElementById('ROBBuy').display = 'block';
                document.getElementById('ROBBuy').style.visibility = "visible";
                document.getElementById('ROBBuyI').display = 'block';
                document.getElementById('ROBBuyI').style.visibility = "visible";                
            }else{
                document.getElementById('ROBBuy').display = 'none';
                document.getElementById('ROBBuy').style.visibility = "hidden";
                document.getElementById('ROBBuyI').display = 'none';
                document.getElementById('ROBBuyI').style.visibility = "hidden";                
            }
            
            strLastIMDBID = pMovieID;
            strLastMovieTitle = pstrTitle;
            strLastMovieReleaseYear = pstrMovieYear;
            
            //Get the position of the element calling this
            elem = document.getElementById(pElmntID);
            pos = findPos(elem);            
            
            divRentOrBuy.style.position = 'absolute'
            divRentOrBuy.style.top = pos[1] - divRentOrBuy.offsetHeight + 'px'
            divRentOrBuy.style.left = pos[0] - 50 + "px"//+ 25 + 'px'
            
            //Adjust for edges
            if((pos[0] - 50) < 0){
                divRentOrBuy.style.left = 1
            }else if(windowWidth() > 0 && (pos[0] + 100) > windowWidth()){
                divRentOrBuy.style.left = windowWidth() - 100
            }
                        
            divRentOrBuy.style.visibility = "visible";            
        }
                
        function keepShowingRentOrBuy(){
            killTimer();
            var divRentOrBuy = document.getElementById('RentOrBuy');
            divRentOrBuy.display = 'block';
            divRentOrBuy.style.visibility = "visible";
            //Have to specifically keep showing images
            document.getElementById('ROBBlockbusterI').display = 'block';
            document.getElementById('ROBBlockbusterI').style.visibility = "visible";
            document.getElementById('ROBNetFlixI').display = 'block';
            document.getElementById('ROBNetFlixI').style.visibility = "visible"; 
            document.getElementById('ROBBuyI').display = 'block';
            document.getElementById('ROBBuyI').style.visibility = "visible";                            
        }
        
        function hideRentOrBuy(){
            killTimer();
            var divRentOrBuy = document.getElementById('RentOrBuy');
            divRentOrBuy.style.visibility = "hidden";
            //Have to specifically hide images
            document.getElementById('ROBBlockbusterI').display = 'none';
            document.getElementById('ROBNetFlixI').display = 'none';
            document.getElementById('ROBBlockbusterI').style.visibility = "hidden";
            document.getElementById('ROBNetFlixI').style.visibility = "hidden";       
            document.getElementById('ROBBuyI').display = 'none';
            document.getElementById('ROBBuyI').style.visibility = "hidden";                      
        }

        function requestHideRentOrBuy(){
            killTimer();
            myTimeout = setTimeout("hideRentOrBuy()",400);
        }

//END RENTORBUY

// START ADD/DELETE SELECTED CRITIC

        function addSelectedEntitiy(pElement,pUserID,pEntID){
            if(pUserID == 0){
                alert('You must be logged in to use this feature.')
            }else{
                if(pElement.checked){
                    if(intNumUserAddedCritics < 5){
                        //Add to database
                        //alert(pUserID + "," + pEntID)
                        ret = MyMovieCriticService.addSelectedEntity(pUserID,pEntID,OnCompleteAddSelectedEntitiy, OnErrorAddSelectedEntitiy) 
                    }else{
                        alert("You have reached the maximum number of user selected critics (5).  You must remove a user selected critic before adding a new one.")
                        pElement.checked = false;
                        return false;
                    }
                }else{
                    deleteSelectedEntitiy(pElement,pUserID,pEntID);
                }
            }
        }

        //Start ADD        
        function OnCompleteAddSelectedEntitiy(result)
        {
            var id_blid_Msg_tt = new Array();  
            id_blid_Msg_tt = result.split("|")
            msg = id_blid_Msg_tt[2];
            if(id_blid_Msg_tt[3] != 'U'){//U stands for unknown
                intNumUserAddedCritics = id_blid_Msg_tt[3];
            }
            showTimedMessage(msg,5000)
        }

        function OnErrorAddSelectedEntitiy(arg) {
            alert("Error encountered when calling addSelectedEntitiy.");
        }
        //END ADD
        
        //START DELETE
        function deleteSelectedEntitiy(pElement,pUserID,pEntID){
            if(pUserID == 0){
                alert('You must be logged in to use this feature.')
            }else{
                if(!pElement.checked){
                    //Delete from database
                    ret = MyMovieCriticService.deleteSelectedEntity(pUserID,pEntID,OnCompleteDeleteSelectedEntitiy, OnErrorDeleteSelectedEntitiy) 
                }
            }
        }        
        
        function OnCompleteDeleteSelectedEntitiy(result)
        {
            var id_blid_Msg_tt = new Array();  
            id_blid_Msg_tt = result.split("|")
            msg = id_blid_Msg_tt[2];
            if(id_blid_Msg_tt[3] != 'U'){//U stands for unknown
                intNumUserAddedCritics = id_blid_Msg_tt[3];
            }
            showTimedMessage(msg,5000)
        }

        function OnErrorDeleteSelectedEntitiy(arg) {
            alert("Error encountered when calling addSelectedEntitiy.");
        }
        //END DELETE
//END ADD/DELETE SELECTED CRITIC  

//START SEARCH PAGINATION
    function fetchSearchPage(pintStartRow){
        intStartRow = pintStartRow;
        getSearchResultData();       
    }

    function createPaginationLinks(){
        //Ex1:(0/50)=0 + 1 = 1  Ex2:(50/50)=1 + 1 = 2
        var startPage,ttPages,strPageLinks,startPageLink,ttLinkPages;
        if(intTotalRows != ''){
            ttPages = parseInt(intTotalRows)
            if(!isNaN(ttPages)){
                ttPages = Math.ceil(ttPages/50)
                startPage = parseInt(intStartRow / 50) + 1
                //Build and set the pagination links
                //Make sure the bar is shown
                document.getElementById('SearchPaginationBar').display = "block"
                 document.getElementById('SearchPaginationBar').style.visibility = "visible"
                //Add the start row number
                if((intStartRow + 50) > intTotalRows){
                    document.getElementById('curRecords').innerHTML = intStartRow + "+" + (intTotalRows - intStartRow);
                }else{
                    document.getElementById('curRecords').innerHTML = intStartRow + "+50";
                }
                //Add the total rows
                document.getElementById('ttRecords').innerHTML = intTotalRows;
                //If there is more than one page
                if(eval(intTotalRows/50) >= 1){
                    //Loop through and create the page links
                    //Do 3 links prior to current and 3 links after current page if possible
                    if(ttPages < 9){
                        startPageLink = 0
                        ttLinkPages = ttPages
                    }else if(startPage >= 4 && (startPage + 4) <= ttPages){
                        startPageLink = startPage - 5
                        ttLinkPages = 9
                    }else if(startPage < 4){
                        startPageLink = 0
                        ttLinkPages = 9
                    }else if(startPage + 4 > ttPages){
                        startPageLink = ttPages - 9
                        ttLinkPages = 9
                    }
                    
                    
                    strPageLinks=""
                    if(ttPages > 9 && intStartRow > 0){//If necessary add first previous links
                        strPageLinks += "&nbsp;&nbsp;<a class='paginationlink' href='void(0);' onclick='fetchSearchPage(0);return false'><<|<a>&nbsp;&nbsp;";
                        strPageLinks += "&nbsp;&nbsp;<a class='paginationlink' href='void(0);' onclick='fetchSearchPage(" + (intStartRow - 50) + ");return false'><<<a>&nbsp;&nbsp;";
                    }                     
                    for(ii = 0 ; ii < ttLinkPages ; ii++){
                   
                        if((startPageLink + ii + 1) == startPage){
                            strPageLinks += "[" + (startPageLink + ii +     1) + "]";
                        }else{
                            strPageLinks += "&nbsp;&nbsp;<a class='paginationlink' href='void(0);' onclick='fetchSearchPage(" + eval((startPageLink + ii) * 50) + ");return false'>" + (startPageLink + ii + 1) + "<a>&nbsp;&nbsp;";
                        }
                    }
                    if(ttPages > 9 && intStartRow < (intTotalRows - 50)){//If necessary add next last links
                        strPageLinks += "&nbsp;&nbsp;<a class='paginationlink' href='void(0);' onclick='fetchSearchPage(" + (intStartRow + 50) + ");return false'>>><a>&nbsp;&nbsp;";
                        strPageLinks += "&nbsp;&nbsp;<a class='paginationlink' href='void(0);' onclick='fetchSearchPage(" + (intTotalRows - (intTotalRows % 50)) + ");return false'>|>><a>&nbsp;&nbsp;";
                    }                      
                    
                    document.getElementById('pageLinks').innerHTML = strPageLinks;
                    
                }else{
                    document.getElementById('pageLinks').innerHTML = "&nbsp;"
                }
            }else{
                document.getElementById('SearchPaginationBar').display = "none"
                 document.getElementById('SearchPaginationBar').style.visibility = "hidden"
            }
        }
    }
//END SEARCH PAGINATION

//START MY MOVIES PAGINATION
    function fetchMyMoviesPage(pintStartRowMM){
        intStartRowMM = pintStartRowMM;
        blnRefreshMyMovies = true;
        getMyMoviesData();       
    }

    function createPaginationLinksMM(){
        //Ex1:(0/50)=0 + 1 = 1  Ex2:(50/50)=1 + 1 = 2
        var startPage,ttPages,strPageLinks,startPageLink,ttLinkPages;
        if(intTotalRowsMM != ''){
            ttPages = parseInt(intTotalRowsMM)
            if(!isNaN(ttPages)){
                ttPages = Math.ceil(ttPages/50)
                startPage = parseInt(intStartRowMM / 50) + 1
                //Build and set the pagination links
                //Make sure the bar is shown
                document.getElementById('MyMoviesPaginationBar').display = "block"
                 document.getElementById('MyMoviesPaginationBar').style.visibility = "visible"
                //Add the start row number
                if((intStartRowMM + 50) > intTotalRowsMM){
                    document.getElementById('curRecordsMM').innerHTML = intStartRowMM + "+" + (intTotalRowsMM - intStartRowMM);
                }else{
                    document.getElementById('curRecordsMM').innerHTML = intStartRowMM + "+50";
                }
                //Add the total rows
                document.getElementById('ttRecordsMM').innerHTML = intTotalRowsMM;
                //If there is more than one page
                if(eval(intTotalRowsMM/50) >= 1){
                    //Loop through and create the page links
                    //Do 3 links prior to current and 3 links after current page if possible
                    if(ttPages < 9){
                        startPageLink = 0
                        ttLinkPages = ttPages
                    }else if(startPage >= 4 && (startPage + 4) <= ttPages){
                        startPageLink = startPage - 5
                        ttLinkPages = 9
                    }else if(startPage < 4){
                        startPageLink = 0
                        ttLinkPages = 9
                    }else if(startPage + 4 > ttPages){
                        startPageLink = ttPages - 9
                        ttLinkPages = 9
                    }
                    
                    strPageLinks=""
                    if(ttPages > 9 && intStartRowMM > 0){//If necessary add first previous links
                        strPageLinks += "&nbsp;&nbsp;<a class='paginationlink' href='void(0);' onclick='fetchMyMoviesPage(0);return false'><<|<a>&nbsp;&nbsp;";
                        strPageLinks += "&nbsp;&nbsp;<a class='paginationlink' href='void(0);' onclick='fetchMyMoviesPage(" + (intStartRowMM - 50) + ");return false'><<<a>&nbsp;&nbsp;";
                    }                     
                    for(ii = 0 ; ii < ttLinkPages ; ii++){
                   
                        if((startPageLink + ii + 1) == startPage){
                            strPageLinks += "[" + (startPageLink + ii +     1) + "]";
                        }else{
                            strPageLinks += "&nbsp;&nbsp;<a class='paginationlink' href='void(0);' onclick='fetchMyMoviesPage(" + eval((startPageLink + ii) * 50) + ");return false'>" + (startPageLink + ii + 1) + "<a>&nbsp;&nbsp;";
                        }
                    }
                    if(ttPages > 9 && intStartRowMM < (intTotalRowsMM - 50)){//If necessary add next last links
                        strPageLinks += "&nbsp;&nbsp;<a class='paginationlink' href='void(0);' onclick='fetchMyMoviesPage(" + (intStartRowMM + 50) + ");return false'>>><a>&nbsp;&nbsp;";
                        strPageLinks += "&nbsp;&nbsp;<a class='paginationlink' href='void(0);' onclick='fetchMyMoviesPage(" + (intTotalRowsMM - (intTotalRowsMM % 50)) + ");return false'>|>><a>&nbsp;&nbsp;";
                    }                      
                    
                    document.getElementById('pageLinksMM').innerHTML = strPageLinks;
                    
                }else{
                    document.getElementById('pageLinksMM').innerHTML = "&nbsp;"
                }
            }else{
                document.getElementById('MyMoviesPaginationBar').display = "none"
                 document.getElementById('MyMoviesPaginationBar').style.visibility = "hidden"
            }
        }
    }
//END MY MOVIES PAGINATION

//START MOVIE RENTAL

        function rentAtBlockbuster(pstrTitle,pstrReleaseYear){
            //strLastIMDBID = pMovieID;
            strLastMovieTitle = pstrTitle;
            strLastMovieReleaseYear = pstrReleaseYear;     
            loadMovieRental('Blockbuster')   
        }

        function rentAtNetFlix(pstrTitle,pstrReleaseYear){
            //strLastIMDBID = pMovieID;
            strLastMovieTitle = pstrTitle;
            strLastMovieReleaseYear = pstrReleaseYear;     
            loadMovieRental('NetFlix')   
        }
        
        function loadMovieRental(pVendor){
            movieRentalWindow = window.open("MovieRentals.htm","MovieRentals","menu=0,location=1,status=0,resizable=1,scrollbars=1,width=800,height=600")
            if(pVendor == "Blockbuster"){
                getBlockbusterMovieLink()
            }else if(pVendor == "NetFlix"){
                getNetFlixMovieLink()
            }
        }
        
        function getBlockbusterMovieLink(){ 
        
            if(blnBlockbusterMovieLinkLoaded == false){
//                document.getElementById('BlockbusterMovieLinkLoading').style.display = "block"
//                document.getElementById('BlockbusterMovieLinkLoading').style.visibility = "visible"
                //ret = MyMovieCriticService.getBlockbusterMovieLink(userID,strLastMovieTitle,strLastMovieReleaseYear, OnCompleteBlockbusterMovieLink, OnTimeOutBlockbusterMovieLink, OnErrorBlockbusterMovieLink)            
                ret = MyMovieCriticService.getBlockbusterMovieLink(strLastMovieTitle,strLastMovieReleaseYear, OnCompleteBlockbusterMovieLink, OnTimeOutBlockbusterMovieLink, OnErrorBlockbusterMovieLink)            
            }else{
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }
        
        function OnCompleteBlockbusterMovieLink(result)
        {
            hideRentOrBuy()
            if(result != ""){
              movieRentalWindow.location.href = result
            }else{
              movieRentalWindow.location.href = "http://www.blockbuster.com/browse"              
            }            
//            document.getElementById('BlockbusterMovieLinkLoading').style.visibility = "hidden"
//            document.getElementById('BlockbusterMovieLinkLoading').style.display = "none"
            BlockbusterMovieLinkRetry = true//Enable Retry for next call  
            blnUserInterfaceBusy = false;//re-enable user interface         
        }
        
        function OnTimeOutBlockbusterMovieLink(arg) {
            if(BlockbusterMovieLinkRetry){//Retry once
                //ret= MyMovieCriticService.getAllBlockbusterMovieLinkData(userID,strLastMovieTitle,strLastMovieReleaseYear,OnCompleteBlockbusterMovieLink, OnTimeOutBlockbusterMovieLink, OnErrorBlockbusterMovieLink)
                ret= MyMovieCriticService.getAllBlockbusterMovieLinkData(strLastMovieTitle,strLastMovieReleaseYear,OnCompleteBlockbusterMovieLink, OnTimeOutBlockbusterMovieLink, OnErrorBlockbusterMovieLink)
                BlockbusterMovieLinkRetry = false//Disable Retry for next call
            }else{
                hideRentOrBuy()
                alert("TimeOut encountered when calling getBlockbusterMovieLink.");
//                document.getElementById('BlockbusterMovieLinkLoading').style.visibility = "hidden"
//                document.getElementById('BlockbusterMovieLinkLoading').style.display = "none"
                BlockbusterMovieLinkRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }

        function OnErrorBlockbusterMovieLink(arg) {
            hideRentOrBuy()
            alert("Error encountered when calling getBlockbusterMovieLink.");
//            document.getElementById('BlockbusterMovieLinkLoading').style.visibility = "hidden"
//            document.getElementById('BlockbusterMovieLinkLoading').style.display = "none"
            BlockbusterMovieLinkRetry = true//Enable Retry for next call
            blnUserInterfaceBusy = false;//re-enable user interface
        }
        
        function getNetFlixMovieLink(){ 
            if(blnUserInterfaceBusy == false){
//                document.getElementById('NetFlixMovieLinkLoading').style.display = "block"
//                document.getElementById('NetFlixMovieLinkLoading').style.visibility = "visible"
                //ret = MyMovieCriticService.getNetFlixMovieLink(userID,strLastMovieTitle,strLastMovieReleaseYear,OnCompleteNetFlixMovieLink, OnTimeOutNetFlixMovieLink, OnErrorNetFlixMovieLink)            
                ret = MyMovieCriticService.getNetFlixMovieLink(strLastMovieTitle,strLastMovieReleaseYear,OnCompleteNetFlixMovieLink, OnTimeOutNetFlixMovieLink, OnErrorNetFlixMovieLink)
            }
        }
        
        function OnCompleteNetFlixMovieLink(result)
        {
            hideRentOrBuy()
            if(result != ""){
              movieRentalWindow.location.href = result
            }else{
              movieRentalWindow.location.href = "http://www.netflix.com/BrowseSelection?lnkctr=nmhbs"
            }
//            document.getElementById('NetFlixMovieLinkLoading').style.visibility = "hidden"
//            document.getElementById('NetFlixMovieLinkLoading').style.display = "none"
            NetFlixMovieLinkRetry = true//Enable Retry for next call
            blnUserInterfaceBusy = false;//re-enable user interface         
        }
        
        function OnTimeOutNetFlixMovieLink(arg) {
            if(NetFlixMovieLinkRetry){//Retry once
                //ret= MyMovieCriticService.getNetFlixMovieLink(userID,strLastMovieTitle,strLastMovieReleaseYear,OnCompleteNetFlixMovieLink, OnTimeOutNetFlixMovieLink, OnErrorNetFlixMovieLink)
                ret= MyMovieCriticService.getNetFlixMovieLink(strLastMovieTitle,strLastMovieReleaseYear,OnCompleteNetFlixMovieLink, OnTimeOutNetFlixMovieLink, OnErrorNetFlixMovieLink)
                NetFlixMovieLinkRetry = false//Disable Retry for next call
            }else{
                hideRentOrBuy()
                alert("TimeOut encountered when calling getNetFlixMovieLink.");
//                document.getElementById('NetFlixMovieLinkLoading').style.visibility = "hidden"
//                document.getElementById('NetFlixMovieLinkLoading').style.display = "none"
                NetFlixMovieLinkRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }

        function OnErrorNetFlixMovieLink(arg) {
            hideRentOrBuy()
            alert("Error encountered when calling getNetFlixMovieLink.");
//            document.getElementById('NetFlixMovieLinkLoading').style.visibility = "hidden"
//            document.getElementById('NetFlixMovieLinkLoading').style.display = "none"
            NetFlixMovieLinkRetry = true//Enable Retry for next call
            blnUserInterfaceBusy = false;//re-enable user interface
        }        
//END MOVIE RENTAL

//START COMMENT CODE
        //START COMMENT ARRAY CODE
		function objComment(pIMDBID,pComment){
			this.IMDBID = pIMDBID
			this.Comment = pComment
		}
		
		//Comment array holds viewed or added comments per session to limit Ajax Calls
		var arCmt = new Array();

		function arCmtAddOrUpdate(pObjC)// Returns IDX
		{
			var idx = arCmtContainsIDX(pObjC.IMDBID)
			if(idx > -1)
			{
			    arCmt[idx] = pObjC;
				return idx
			}else{				
				arCmt.unshift(pObjC);//Add to front of arCmt
				return 1;//Since added 1st item return 1
			}
		}

		function arCmtContainsIDX(pIMDBID)
		{
			for(idx=0;idx < arCmt.length;idx++)
			{
				var pObjC = arCmt[idx];
				if(pObjC.IMDBID == pIMDBID)
				{
					return idx;
				}
			}
			return -1;//Not found
		}
		//END COMMENT ARRAY CODE
		
		//Count characters in comment box
		function validateComment(){
		    var comment;
		    var cmntlen;
		    comment = document.getElementById('CommentText').innerHTML;
		    cmntlen = comment.length;
		    if(cmntlen > 255){
		        document.getElementById('CommentText').innerHTML = comment.substring(0,254);
		    }
		    document.getElementById('textCounter').innerHTML = cmntlen + " of 255 characters";
		}
		
		function showComment(pUserID,pElmtID,pIMDBID,pCommentLength){
		    var divComment =  document.getElementById('comment')
		    var idx = arCmtContainsIDX(pIMDBID)
		    strLastIMDBID = pIMDBID;
		    if(idx > -1){
		        var objC = arCmt[idx];
		        document.getElementById('CommentText').innerHTML = objC.Comment
		    }else{
		        if(pCommentLength > 0){
		            getComment(pUserID,pIMDBID)
		        }else{
		            if(pUserID == userID){
		                //alert(document.getElementById('CommentText').disabled)
		                //document.getElementById('CommentText').readOnly = "";
		                //document.getElementById('CommentText').focus()		                
		                document.getElementById('CancelCloseLink').innerHTML = "Cancel"
		            }
		        }
		    }    
	        strLastIMDBID = pIMDBID;
            
            //Get the position of the element calling this
            elem = document.getElementById(pElmtID);
            pos = findPos(elem);
            divComment.style.position = 'absolute'
            divComment.style.top = pos[1] - divComment.offsetHeight + 'px'
            divComment.style.left = pos[0] - 100 + "px"//+ 25 + 'px'
            divComment.display = "block";
            divComment.style.visibility = "visible"; 
		}
		
        function keepShowingComment(){
            var divComment = document.getElementById('comment');
            divComment.style.visibility = "visible";                            
        }
        
        function hideComment(){
            killTimer();
            var divComment = document.getElementById('comment');
            divComment.style.visibility = "hidden";
            document.getElementById('CommentSaveLink').display = 'block';
            document.getElementById('CommentSaveLink').style.visibility = "visible";
            //document.getElementById('comment').display = 'none';
            //document.getElementById('comment').style.visibility = "hidden";        
            document.getElementById('CommentText').innerHTML = "";     
            document.getElementById('CommentText').style.backgroundcolor = "white"
        }
        
        function getComment(pUserID,pIMDBID){ 
            if(blnUserInterfaceBusy == false){
                document.getElementById('CommentLoading').style.display = "block"
                document.getElementById('CommentLoading').style.visibility = "visible"           
                ret = MyMovieCriticService.getComment(pUserID,pIMDBID,OnCompleteComment, OnTimeOutComment, OnErrorComment)
            }
        }

        function getReadOnlyComment(pUserID,pIMDBID){ 
            if(blnUserInterfaceBusy == false){
                document.getElementById('CommentLoading').style.display = "block"
                document.getElementById('CommentLoading').style.visibility = "visible"  
                document.getElementById('CommentSaveLink').display = 'none';
                document.getElementById('CommentSaveLink').style.visibility = "hidden";    
                document.getElementById('CommentText').style.backgroundcolor = "#9BD1FA"                     
                ret = MyMovieCriticService.getComment(pUserID,pIMDBID,OnCompleteComment, OnTimeOutComment, OnErrorComment)
            }
        }
        
        function OnCompleteComment(result)
        {
            if(result != ""){
                var Comment_ReadOnly = new Array();  
                Comment_ReadOnly = result.split("|");
                document.getElementById('CommentText').innerHTML = Comment_ReadOnly[0];
                //document.getElementById('CommentText').disabled = Comment_ReadOnly[1];         
            }
            document.getElementById('CommentLoading').style.visibility = "hidden"
            document.getElementById('CommentLoading').style.display = "none"
            CommentRetry = true//Enable Retry for next call
            blnUserInterfaceBusy = false;//re-enable user interface         
        }
        
        function OnTimeOutComment(arg) {
            if(CommentRetry){//Retry once
                //ret= MyMovieCriticService.getComment(userID,strLastMovieTitle,strLastMovieReleaseYear,OnCompleteComment, OnTimeOutComment, OnErrorComment)
                ret= MyMovieCriticService.getComment(strLastMovieTitle,strLastMovieReleaseYear,OnCompleteComment, OnTimeOutComment, OnErrorComment)
                CommentRetry = false//Disable Retry for next call
            }else{
                alert("TimeOut encountered when calling getComment.");
                document.getElementById('CommentLoading').style.visibility = "hidden"
                document.getElementById('CommentLoading').style.display = "none"
                CommentRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }

        function OnErrorComment(arg) {
            alert("Error encountered when calling getComment.");
            document.getElementById('CommentLoading').style.visibility = "hidden"
            document.getElementById('CommentLoading').style.display = "none"
            CommentRetry = true//Enable Retry for next call
            blnUserInterfaceBusy = false;//re-enable user interface
        } 

        function saveComment(){
            if(userID != 0){
                var objC = new objComment(strLastIMDBID,document.getElementById('CommentText').innerHTML);
                arCmtAddOrUpdate(objC);
                ret = MyMovieCriticService.addUpdateDeleteComment(userID,strLastIMDBID,document.getElementById('CommentText').innerHTML,OnCompleteCommentSave, OnTimeOutCommentSave, OnErrorCommentSave)
                hideComment()
            }else{
                alert('You must click the login button and create an account before you can save movie comments.')
                hideComment()
            }        
        }

        function OnCompleteCommentSave(result)
        {
            document.getElementById('CommentLoading').style.visibility = "hidden"
            document.getElementById('CommentLoading').style.display = "none"
            CommentRetry = true//Enable Retry for next call
            blnUserInterfaceBusy = false;//re-enable user interface         
        }
        
        function OnTimeOutCommentSave(arg) {
            if(CommentRetry){//Retry once
                //ret= MyMovieCriticService.getComment(userID,strLastMovieTitle,strLastMovieReleaseYear,OnCompleteComment, OnTimeOutComment, OnErrorComment)
                ret = MyMovieCriticService.addUpdateDeleteComment(userID,strLastIMDBID,document.getElementById('CommentText').innerHTML,OnCompleteCommentSave, OnTimeOutCommentSave, OnErrorCommentSave)
                CommentRetry = false//Disable Retry for next call
            }else{
                alert("TimeOut encountered when calling getComment.");
                document.getElementById('CommentLoading').style.visibility = "hidden"
                document.getElementById('CommentLoading').style.display = "none"
                CommentRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }

        function OnErrorCommentSave(arg) {
            alert("Error encountered when calling getComment.");
            document.getElementById('CommentLoading').style.visibility = "hidden"
            document.getElementById('CommentLoading').style.display = "none"
            CommentRetry = true//Enable Retry for next call
            blnUserInterfaceBusy = false;//re-enable user interface
        }
            
//END COMMENT CODE

//START MOVIETIMES
        function fetchMovieTimes(){
            var zip = document.getElementById('mtZipCode').value
            if(zip.length == 5 && IsNumeric(zip)){
                zipCode = zip
                getNowPlayingMovieTimes()
            }
        }

        function getNowPlayingMovieTimes(){ 
             //alert(document.getElementById('NowPlayingMovieTimes').innerHTML.length)
            if(blnNowPlayingMovieTimesLoaded == false && zipCode > 0){
            //if(zipCode > 0){
                document.getElementById('NowPlayingMovieTimesLoading').style.display = "block"
                document.getElementById('NowPlayingMovieTimesLoading').style.visibility = "visible"
                blnUserInterfaceBusy = true;
                ret = MyMovieCriticService.getNowPlayingMovieTimes(userID,zipCode,radius,OnCompleteNowPlayingMovieTimes, OnTimeOutNowPlayingMovieTimes, OnErrorNowPlayingMovieTimes)            
            }else{
                if(document.getElementById('zipForm')){
                    document.getElementById('zipForm').style.visibility = "visible"
                }
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }
        
        // This is the callback function that
        // processes the Web Service return value.
        function OnCompleteNowPlayingMovieTimes(result)
        {
            
            NowPlayingMovieTimesResult = result;        
            var RsltElem = document.getElementById('NowPlayingMovieTimes')
            addAverageRatings()//Add the Average rating to the NowPlaying Movie Times
            NowPlayingMovieTimesResultMaster = NowPlayingMovieTimesResult;
            //highlightActiveMovieTitle();
            //RsltElem.innerHTML = NowPlayingMovieTimesResult;
            highlightActiveMovieTitle();//IMPORTANT: MOVIE INFO ADDED TO ELEMENT IN THIS EVENT
            //sorttable.makeSortable(document.getElementById('AllCriticReviewTable'));            
            document.getElementById('NowPlayingMovieTimesLoading').style.visibility = "hidden"
            document.getElementById('NowPlayingMovieTimesLoading').style.display = "none"
            NowPlayingMovieTimesRetry = true//Enable Retry for next call
            blnNowPlayingMovieTimesLoaded = true;   
            blnUserInterfaceBusy = false;//re-enable user interface         
        }
        
        function OnTimeOutNowPlayingMovieTimes(arg) {
            if(NowPlayingMovieTimesRetry){//Retry once
                ret= MyMovieCriticService.getNowPlayingMovieTimes(userID,zipCode,radius,OnCompleteNowPlayingMovieTimes, OnTimeOutNowPlayingMovieTimes, OnErrorNowPlayingMovieTimes)
                NowPlayingMovieTimesRetry = false//Disable Retry for next call
            }else{
                alert("TimeOut encountered when calling getNowPlayingMovieTimes.");
                document.getElementById('NowPlayingMovieTimesLoading').style.visibility = "hidden"
                document.getElementById('NowPlayingMovieTimesLoading').style.display = "none"
                NowPlayingMovieTimesRetry = true//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }

        function OnErrorNowPlayingMovieTimes(arg) {
            alert("Error encountered when calling getNowPlayingMovieTimes.");
            document.getElementById('NowPlayingMovieTimesLoading').style.visibility = "hidden"
            document.getElementById('NowPlayingMovieTimesLoading').style.display = "none"
            NowPlayingMovieTimesRetry = true//Enable Retry for next call
            blnUserInterfaceBusy = false;//re-enable user interface
        }
        
        function addAverageRatings(){
            if(window.RegExp) {
                if(NowPlayingTitleAvgColor != ""){
                    var movies = NowPlayingTitleAvgColor.split("||")
                    var title,avg,color,strPattern;
                    var movie;
                    var movieLine,strMovieLinePattern;
                    var pattern;
                    var ii;

                    //Loop through each movie from Now Playing
                    for(ii=0;ii < movies.length-1;ii++){
                        movie = movies[ii].split("|")
                        title = movie[0];
                        avg = movie[1];
                        color = movie[2];
                        //strPattern = "<b>" + title + "<b>[\s\w\d\S\W\D]{1,50}\]"
                        strPattern = "<b>" + title + "<\\/b>[\\s\\w\\d\\S\\W\\D]{1,50}\\]"
                        //pattern = /strPattern/i;
                        //alert(pattern)
                        //movieLine = NowPlayingMovieTimesResult.match()    
                        //alert(strPattern)
                        var reg = new RegExp(strPattern,"i")
                        //alert(reg.toString())         
                        movieLine = reg.exec(NowPlayingMovieTimesResult)//NowPlayingMovieTimesResult.match()                        
                        //movieLine = NowPlayingMovieTimesResult.match(strPattern)   
                        if(movieLine != null){ 
                            strMovieLinePattern = movieLine.toString()
                            strMovieLinePattern = strMovieLinePattern.replace("\\","\\")
                            strMovieLinePattern = strMovieLinePattern.replace("\(","\\(")
                            strMovieLinePattern = strMovieLinePattern.replace("\)","\\)")
                            strMovieLinePattern = strMovieLinePattern.replace("\[","\\[")
                            strMovieLinePattern = strMovieLinePattern.replace("\]","\\]")
                            //alert(strMovieLinePattern)
                            NowPlayingMovieTimesResult = NowPlayingMovieTimesResult.replace(new RegExp( strMovieLinePattern, "gi" ),movieLine + " Avg: <span style = 'color:" + color + "'>" + avg + "</span>")
                        }
                    }
                }
            }
        }
        
        function highlightActiveMovieTitle(){
            if(window.RegExp) {
                if(strLastMovieTitle != "" && NowPlayingMovieTimesResultMaster != ""){
                    NowPlayingMovieTimesResult = NowPlayingMovieTimesResultMaster//Start over and highlight new selected movie
                    var title,color,strPattern;
                    var movie;
                    var movieLine,strMovieLinePattern;
                    title = strLastMovieTitle;
                    color = "green";
                    strPattern = "<b>" + title + "<\\/b>"
                    var reg = new RegExp(strPattern,"i")
                    movieLine = reg.exec(NowPlayingMovieTimesResult)
                    //NowPlayingMovieTimesResult = NowPlayingMovieTimesResult.replace(new RegExp( strPattern, "gi" ),"<span style = 'color:" + color + "'><b>" + title + "</b></span>")
                    NowPlayingMovieTimesResult = NowPlayingMovieTimesResult.replace(new RegExp( strPattern, "gi" ),"<span style = 'text-decoration:underline'><b>" + title + "</b></span>")
                    var RsltElem = document.getElementById('NowPlayingMovieTimes')
                    //Get the scroll position of the container
                    var oTop = RsltElem.offsetTop;                    
                    var sTop = RsltElem.scrollTop;                    
                    //Get all of the Theater IDs that are expanded
                    var idx = 0;
                    var idxTheaterArray = 0;
                    var theaterIDs = new Array();
                    while(document.getElementById("TIDM" + idx) && idx < 30){
                        if(document.getElementById("TIDM" + idx).style.display == "block"){
                            theaterIDs[idxTheaterArray] = idx;
                            idxTheaterArray+=1
                        }
                        idx+=1
                    }
                    if(idx > 29){
                        alert('bad loop')
                    }
                    //add the data to the element
                    RsltElem.innerHTML = NowPlayingMovieTimesResult;
                    //reExpand the theater times that were showing 
                    for(idx = 0;idx <  theaterIDs.length;idx++){
                        document.getElementById("TIDM" + theaterIDs[idx]).style.display = "block"
                        document.getElementById("TID" + theaterIDs[idx]).innerHTML = 'Hide Times';
                    }
                    //redo the scroll position
                    //RsltElem.offsetTop = oTop;                    
                    RsltElem.scrollTop = sTop; 
                
                }else{
                    document.getElementById('NowPlayingMovieTimes').innerHTML = NowPlayingMovieTimesResult;
                }
            }else{
                document.getElementById('NowPlayingMovieTimes').innerHTML = NowPlayingMovieTimesResult;
            }
        }        
        
        function showAllTheaters(){
            document.getElementById('NowPlayingMovieTimesLoading').style.display = "block"
            document.getElementById('NowPlayingMovieTimesLoading').style.visibility = "visible"
            blnUserInterfaceBusy = true;        
            ret = MyMovieCriticService.deleteTheaterList(userID,zipCode,OnCompleteShowAllTheaters, OnErrorShowAllTheaters)
        }

        function OnCompleteShowAllTheaters(result)
        {
            blnNowPlayingMovieTimesLoaded = false
            getNowPlayingMovieTimes()
        }
        
        function OnErrorShowAllTheaters(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            

            showTimedMessage(message,10000);      
            systemError("ShowAllTheaters");
            document.getElementById('NowPlayingMovieTimesLoading').style.visibility = "hidden"
            document.getElementById('NowPlayingMovieTimesLoading').style.display = "none"
            removeTheatherRetry=true;
            blnUserInterfaceBusy = false; 
        }        
         
        function removeTheater(pstrZipCode,pstrName,pstrTheaterID){
            document.getElementById('NowPlayingMovieTimesLoading').style.display = "block"
            document.getElementById('NowPlayingMovieTimesLoading').style.visibility = "visible"
            blnUserInterfaceBusy = true;        
            ret = MyMovieCriticService.removeTheater(userID,pstrZipCode,pstrName,OnCompleteRemoveTheater, OnErrorRemoveTheater,pstrTheaterID)
        }
        
        function OnCompleteRemoveTheater(result,strTheaterID)
        {
            //Remove the theater from the text
            var table = document.getElementById("NowPlayingMovieTimes");
            var row = document.getElementById(strTheaterID);
            var row2 = document.getElementById(strTheaterID + "Address");
            var row3 = document.getElementById(strTheaterID + "Data");
            var tbody = table.getElementsByTagName("tbody")[0];//Have to reference tbody even if not present
            tbody.removeChild(row); 
            tbody.removeChild(row2);
            tbody.removeChild(row3);
            
            document.getElementById('ShowAllTheaters').style.display = "block"
            document.getElementById('ShowAllTheaters').style.visibility = "visible"
            
            document.getElementById('NowPlayingMovieTimesLoading').style.visibility = "hidden"
            document.getElementById('NowPlayingMovieTimesLoading').style.display = "none"
            removeTheatherRetry=true;
            blnUserInterfaceBusy = false; 
        }      

        function OnErrorRemoveTheater(error,strTheaterID) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            

            showTimedMessage(message,10000);      
            systemError("RemoveTheater");
            document.getElementById('NowPlayingMovieTimesLoading').style.visibility = "hidden"
            document.getElementById('NowPlayingMovieTimesLoading').style.display = "none"
            removeTheatherRetry=true;
            blnUserInterfaceBusy = false; 
        }         
//END MOVIETIMES

//START DTVMovies
        function getDTVMovies(){
            if(blnDTVMoviesLoaded == false){
                document.getElementById('DTVMoviesLoading').style.display = "block"
                document.getElementById('DTVMoviesLoading').style.visibility = "visible"
                ret = MyMovieCriticService.getDTVMovies(userID,OnCompleteDTVMovies, OnErrorDTVMovies)  
            }
        }
        
        function OnCompleteDTVMovies(result)
        {
            document.getElementById('DTVMovies').innerHTML = result
            document.getElementById('DTVMoviesLoading').style.visibility = "hidden"
            document.getElementById('DTVMoviesLoading').style.display = "none"
            sorttable.makeSortable(document.getElementById('DTVMoviesTable'))
            blnDTVMoviesLoaded=true;
            DTVMoviesRetry=true;
            blnUserInterfaceBusy = false; 
        }

        function OnErrorDTVMovies(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && addUpdateRatingRetry){            
                addUpdateRatingRetry = false;//Disable Retry for next call
                delayedFunctionCall("getDTVMovies");
            }else if(statusCode == 403 && addUpdateRatingRetry){        
                addUpdateRatingRetry = false;//Disable Retry for next call             
                delayedFunctionCall("getDTVMovies");
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('DTVMoviesLoading').style.visibility = "hidden"
                document.getElementById('DTVMoviesLoading').style.display = "none"
                DTVMoviesRetry = true;//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface                          
            }else{ 
                showTimedMessage(message,10000);      
                systemError("getDTVMovies");
                document.getElementById('DTVMoviesLoading').style.visibility = "hidden"
                document.getElementById('DTVMoviesLoading').style.display = "none"
                DTVMoviesRetry = true;//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }        
//END DTVMovies


//START CODMovies
        function getCODMovies(){
            if(blnCODMoviesLoaded == false){
                document.getElementById('CODMoviesLoading').style.display = "block"
                document.getElementById('CODMoviesLoading').style.visibility = "visible"
                ret = MyMovieCriticService.getCODMovies(userID,OnCompleteCODMovies, OnErrorCODMovies)  
            }
        }
        
        function OnCompleteCODMovies(result)
        {
            document.getElementById('CODMovies').innerHTML = result
            document.getElementById('CODMoviesLoading').style.visibility = "hidden"
            document.getElementById('CODMoviesLoading').style.display = "none"
            sorttable.makeSortable(document.getElementById('CODMoviesTable'))
            blnCODMoviesLoaded=true;
            CODMoviesRetry=true;
            blnUserInterfaceBusy = false; 
        }

        function OnErrorCODMovies(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();            
            if(timedout && addUpdateRatingRetry){            
                addUpdateRatingRetry = false;//Disable Retry for next call
                delayedFunctionCall("getCODMovies");
            }else if(statusCode == 403 && addUpdateRatingRetry){        
                addUpdateRatingRetry = false;//Disable Retry for next call             
                delayedFunctionCall("getCODMovies");
            }else if(timedout){                   
                systemBusy();  
                document.getElementById('CODMoviesLoading').style.visibility = "hidden"
                document.getElementById('CODMoviesLoading').style.display = "none"
                CODMoviesRetry = true;//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface                          
            }else{ 
                showTimedMessage(message,10000);      
                systemError("getCODMovies");
                document.getElementById('CODMoviesLoading').style.visibility = "hidden"
                document.getElementById('CODMoviesLoading').style.display = "none"
                CODMoviesRetry = true;//Enable Retry for next call
                blnUserInterfaceBusy = false;//re-enable user interface
            }
        }        
//END CODMovies

//START COMMON CODE

        //Find the position of the element on the screen
        //by looping through the position relative to each parent object
        function findPos(obj) {
	        var curleft = curtop = 0;
	        if(obj){
	            if (obj.offsetParent) {
		            curleft = obj.offsetLeft
		            curtop = obj.offsetTop
		            while (obj = obj.offsetParent) {
			            curleft += obj.offsetLeft
			            curtop += obj.offsetTop - obj.scrollTop//-scrollTop adjusts for any scrolling
		            }
	            }
	        }
	        return [curleft,curtop];
        }

        function windowWidth(){
            
            var winW = 0;
            //var winH = 0;
            //IE
            if(document.body.offsetWidth){
                winW = document.body.offsetWidth
                //winW = document.body.offsetWidth-20;
                //winH = document.body.offsetHeight-20;
            }else if(window.innerWidth){
                winW = window.innerWidth
                //winW = window.innerWidth-16;
                //winH = window.innerHeight-16;
           }        
           return winW 
        }

        function tooltipTimer6(myFunction,elmnt1,elmnt2,elmnt3,elmnt4,elmnt5,elmnt6,time)
        {
            killTimer();
            myStr = myFunction + "('" + elmnt1 + "','" + elmnt2 + "','" + elmnt3 + "','" + elmnt4 + "','" + elmnt5 + "','" + elmnt6 + "')";
            myTimeout = setTimeout("eval(myStr)",time);
        }

        function tooltipTimer5(myFunction,elmnt1,elmnt2,elmnt3,elmnt4,elmnt5,time)
        {
            killTimer();
            myStr = myFunction + "('" + elmnt1 + "','" + elmnt2 + "','" + elmnt3 + "','" + elmnt4 + "','" + elmnt5 + "')";
            myTimeout = setTimeout("eval(myStr)",time);
        }

        function tooltipTimer4(myFunction,elmnt1,elmnt2,elmnt3,elmnt4,time)
        {
            killTimer();
            myStr = myFunction + "('" + elmnt1 + "','" + elmnt2 + "','" + elmnt3 + "','" + elmnt4 + "'" + ")";
            myTimeout = setTimeout("eval(myStr)",time);
        }

        function tooltipTimer3(myFunction,elmnt1,elmnt2,elmnt3,time)
        {
            killTimer();
            myStr = myFunction + "('" + elmnt1 + "','" + elmnt2 + "','" + elmnt3 + "'" + ")";
            myTimeout = setTimeout("eval(myStr)",time);
        }

        function tooltipTimer2(myFunction,elmnt1,elmnt2,time)
        {
            killTimer();
            myStr = myFunction + "('" +  elmnt1  + "','" +  elmnt2  + "'" + ")";
            myTimeout = setTimeout("eval(myStr)",time);
        }
        
        function tooltipTimer(myFunction,elmnt,time)
        {
            killTimer();
            myStr = myFunction + "('" +  elmnt  + "'" + ")";
            myTimeout = setTimeout("eval(myStr)",time);
        }

        function killTimer()
        {
            window.clearTimeout(myTimeout);
        }

        function showToolTip(pElmntID,pText){
            //Get the position of the element calling this
            elem = document.getElementById(pElmntID);
            pos = findPos(elem);
            var toolTip = document.getElementById('toolTip');
            toolTip.innerHTML = pText;
            toolTip.style.position = 'absolute';
            toolTip.style.top = pos[1]  - 25 + 'px';
            toolTip.style.left = pos[0] + "px";//+ 25 + 'px'
            toolTip.display = "block";
            toolTip.style.visibility = "visible";
        }
        
        function keepShowingToolTip(){
            var divRank = document.getElementById('toolTip');
            divRank.style.visibility = "visible";
        }

        function hideToolTip(){
            document.getElementById('toolTip').style.visibility = "hidden";
            document.getElementById('toolTip').display = "none";
        }

        function showTimedMessage(pstrMessage,pintTimeInMS){
            window.clearTimeout(messageTimer)
            document.getElementById('message').innerHTML = pstrMessage;
            messageTimer = setTimeout("clearMessage()",pintTimeInMS);
        }

        function clearMessage(){
            document.getElementById('message').innerHTML = "";
            //window.clearTimeout(messageTimer)
        }

        function createCookie(name,value,days) {
            var expires = ""
	        if (days) {
		        var date = new Date();
		        date.setTime(date.getTime()+(days*24*60*60*1000));
		        expires = "; expires="+date.toGMTString();
	        }
	        document.cookie = name+"="+value+expires+"; path=/";
        }

        function readCookie(name) {
	        var nameEQ = name + "=";
	        var ca = document.cookie.split(';');
	        for(var i=0;i < ca.length;i++) {
		        var c = ca[i];
		        while (c.charAt(0)==' ') c = c.substring(1,c.length);
		        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	        }
	        return null;
        }

        function eraseCookie(name) {
	        createCookie(name,"",-1);
        }

        function openMovieWindow(pstrMovieID){        
            movieDescriptionWindow = window.open('http://www.imdb.com/title/' + pstrMovieID + '/',"MovieDescription","menu=0,location=1,status=0,resizable=1,scrollbars=1,width=800,height=600")
        }

        function showUnderline(pFieldID){
            document.getElementById(pFieldID).className = "movieTitleU"
        }

        function hideUnderline(pFieldID){
            document.getElementById(pFieldID).className = "movieTitle"
        }

        function openInstructionWindow(){
            instructionWindow = window.open ("Instructions.aspx", "Instructions","menu=0,location=1,status=0,resizable=1,scrollbars=1,width=800,height=800");
//            var frameWidth = 0;
//            var frameHeight = 0;
//            if(document.body.clientWidth){
//                frameWidth = document.body.clientWidth;
//                frameHeight = document.body.clientHeight;
//                frameWidth = (frameWidth - instructionWindow.width) + (frameWidth / 2)
//                frameHeight = (frameHeight - instructionWindow.height) + (frameHeight / 2)
//                if(frameWidth < 0){
//                    frameWidth = 0;
//                }
//                if(frameHeight < 0){
//                    frameHeight = 0;
//                }                
//            }
//            instructionWindow.moveTo(frameWidth,frameWidth);        
        }
        
        function IsNumeric(sText){
           var ValidChars = "0123456789.";
           var IsNumber=true;
           var Char;

           for (i = 0; i < sText.length && IsNumber == true; i++) 
              { 
              Char = sText.charAt(i); 
              if (ValidChars.indexOf(Char) == -1) 
                 {
                 IsNumber = false;
                 }
              }
           return IsNumber;
        }

        
        //Used when called directly
        function buyAtAmazon2(pTitle){
            var title = escape(pTitle)//Put the title in url-encoded format
            var re = new RegExp("\%20", "gi");
            title.replace(re,"+")//Use Plus sign for spaces            
            //var title = pUrlEncodedTitle;
            //amazonWindow = window.open('http://www.amazon.com/s/ref=nb_ss_gw/002-9702859-9682461?url=search-alias%3Ddvd&field-keywords=' + title, 'Amazon','menu=0,location=1,status=0,resizable=1,scrollbars=1,width=800,height=800')
            amazonWindow = window.open('http://www.amazon.com/gp/search?ie=UTF8&&tag=mymo00-20&index=dvd&linkCode=ur2&camp=1789&creative=9325&keywords=' + title, 'Amazon','menu=0,location=1,status=0,resizable=1,scrollbars=1,width=800,height=800')
        }
        
        //Used when called from the RentOrBuy menu
        function buyAtAmazon(){
            var title = escape(strLastMovieTitle)//Put the title in url-encoded format
            var re = new RegExp("\%20", "gi");
            title.replace(re,"+")//Use Plus sign for spaces            
            //var title = pUrlEncodedTitle;
            //amazonWindow = window.open('http://www.amazon.com/s/ref=nb_ss_gw/002-9702859-9682461?url=search-alias%3Ddvd&field-keywords=' + title, 'Amazon','menu=0,location=1,status=0,resizable=1,scrollbars=1,width=800,height=800')
            amazonWindow = window.open('http://www.amazon.com/gp/search?ie=UTF8&&tag=mymo00-20&index=dvd&linkCode=ur2&camp=1789&creative=9325&keywords=' + title, 'Amazon','menu=0,location=1,status=0,resizable=1,scrollbars=1,width=800,height=800')
                                       //http://www.amazon.com/gp/search?ie=UTF8&keywords=Harry%20potter&tag=mymo00-20&index=dvd&linkCode=ur2&camp=1789&creative=9325">
                                       //http://www.amazon.com/gp/search?ie=UTF8&keywords=almost%20famous&tag=mymo00-20&index=dvd&linkCode=ur2&camp=1789&creative=9325
        }        
        
        function systemBusy(){
            alert("The system is busy please wait a few seconds and try again.")
        }
        
        function systemError(x){
            alert('Error encountered when calling ' + x + '. Please try again.');
        }
        
        function delayedFunctionCall(myFunction)
        { 
            myCallString =  myFunction + "()";
            var toTimeout = setTimeout("eval(myCallString)",retrydelay);
        }

        function delayedFunctionCall1(myFunction,elmnt)
        { 
            myCallString =  myFunction + "('" +  elmnt  + "')";
            var toTimeout = setTimeout("eval(myCallString)",retrydelay);
        }

        function delayedFunctionCall2(myFunction,elmnt1,elmnt2)
        { 
            myCallString =  myFunction + "('" +  elmnt1  + "','" +  elmnt2  + "'" + ")";
            var toTimeout = setTimeout("eval(myCallString)",retrydelay);
        }
        
        function enableTopMoviesFind(){
            document.getElementById('btnFindTM').disabled = false;
            blnTopMoviesRefresh=true;
        }
        
        //Used by other (nonsearch) tabs
        function closePopUps(){
            document.getElementById('search').style.display = "none";
            document.getElementById('advSearch').style.display = "none";
            document.getElementById('login').style.display = "none";
            document.getElementById('profile').style.display = "none";
            document.getElementById('RentOrBuy').display = "none";
            document.getElementById('editProfile').style.display = "none";
            document.getElementById('forgotPassword').style.display = "none";
            document.getElementById('comment').style.display = "none";
        }
        
//END COMMON CODE