﻿

function CliPspStatus(propositionInstance)
{
    ///<summary>Retrieves the overall status of the PSP</summary>
    ///<returns>A string to display the status</returns>
    ///<param name="propositionInstance">An instance of ComPropositionInstance</param>
    
    try
    {
        propositionInstance.PspStatusDetection.Refresh();
        var drive = CliPspDriveLetter(propositionInstance);
        var text = "";
        	
        if(drive == null || drive == "" || drive == " ")			
        {			
	        text = 'PSP Not Connected';			
        }		
        else			
        {			
	        var Space = (CliPspFreeSpace(propositionInstance)/1024) + "";
	        if(Space.indexOf(".") > 0) Space = Space.substring(0,Space.indexOf(".")+2);
	        text ='PSP connected to drive: ' + drive + ':   ' + Space + ' MB free';	
        }
	    return text;
	}
	catch(e)
	{
	    CliDisplayError(e);
	    return "Error detecting PSP status";
	}
}

function CliPspFirmwareVersion(propositionInstance)
{
    ///<summary>Retrieves the firmware version of the Connected PSP</summary>
    ///<returns>A string identifying the version</returns>
    ///<param name="propositionInstance">An instance of ComPropositionInstance</param>
    
    return propositionInstance.PspStatusDetection.FirmwareVersion;
}

function CliPspIsMemoryStickPro(propositionInstance)
{
    ///<summary>Checks if the memory stick on the connected PSP is a memorystick pro</summary>
    ///<returns>a bool, true if the memory stick is a "pro" edition</returns>
    ///<param name="propositionInstance">An instance of ComPropositionInstance</param>
    
    return propositionInstance.PspStatusDetection.IsMemoryStickPro;
}

function CliPspFreeSpace(propositionInstance)
{
    ///<summary>Retrieves the free space on the memory stick of the Connected PSP</summary>
    ///<returns>The space in KB of the memory stick</returns>
    ///<param name="propositionInstance">An instance of ComPropositionInstance</param>
    return propositionInstance.PspStatusDetection.FreeSpace;
}

function CliPspDriveLetter(propositionInstance)
{
    ///<summary>Retrieves the windows mapped drive letter of the Connected PSP</summary>
    ///<returns>The drive letter of the PSP, or a 1 character blank string if no PSP is connected</returns>
    ///<param name="propositionInstance">An instance of ComPropositionInstance</param>
    return propositionInstance.PspStatusDetection.PspDrive;
}

function CliPspStatusRefresh(propositionInstance)
{
    ///<summary>Refreshes the cached status of the Psp</summary>
    ///<param name="propositionInstance">An instance of ComPropositionInstance</param>
    propositionInstance.PspStatusDetection.Refresh();
}

function CliPspCompareFirmwareVersions(versionRequired, versionDetected)
{
    var versionsDetected = versionDetected.split('.');
    
    var versionsRequired = versionRequired.split(".");
    
    for(var i=0;i<versionsRequired.length;i++)
    {
        if((versionsRequired[i]*1) < (versionsDetected[i]*1))
        {
            return true;
        }
        if((versionsRequired[i]*1) > (versionsDetected[i]*1))
        {
            return false;
        }
    }
    return true;
}

 function CliValidatePsp(spaceRequired, versionRequired, errorDisplayFunction)
	{
	    //<summary>Tests the Psp for pre-requisites to binding content 
	    ///and displays the appropriate error if they are not met</summary>
	    
	    if(!errorDisplayFunction)
	    {
	        errorDisplayFunction = function(error, show)
	                {
                        if(show)
                        {
                            var url = CliBuilOnlineUrl("/page/libraryError.do?error=" + error);
                            ajaxAnywhere.getAJAX(url, "content")
                        }
	                }
	    }
	    
	    try
	    {
	        var getEl = document.getElementById;
	        CliPspStatusRefresh(_propInstance);
    	    
	        var bNotConnected = false, bSpaceError = false, bMemoryStickError = false, bFirmwareError = false;
    	    
	        var drive = CliPspDriveLetter(_propInstance);
    	    
	        if(drive == null || drive == "" || drive == " ")
	            bNotConnected = true;
	        else if(!CliPspIsMemoryStickPro(_propInstance))
	            bMemoryStickError = true;
	        else if ((CliPspFreeSpace(_propInstance)/1024) < spaceRequired)
	            bSpaceError = true;
	        else if(!CliPspCompareFirmwareVersions(versionRequired, CliPspFirmwareVersion(_propInstance)))   
	            bFirmwareError = true; 
    	    
	        errorDisplayFunction("notconnected", bNotConnected);
            errorDisplayFunction("space", bSpaceError);
            errorDisplayFunction("memstickpro", bMemoryStickError);
	        errorDisplayFunction("firmware", bFirmwareError);
    	    
	        return !(bNotConnected || bSpaceError || bMemoryStickError || bFirmwareError);
	    }
	    catch(e)
	    {
	        CliDisplayError(e);
	        return false;
	    }
	}
	