﻿dojo.require("dojox.off");
dojo.require("dojox.off.files");

function getTileUrlAndCacheLocally(column,row,level,handler) {            
    var imgFormat = this.get_imageFormat();
    if(imgFormat == 'png8' || imgFormat == 'png24' || imgFormat == 'png32') // normalize format
        imgFormat = 'png';
    var func = this.get_tileUrlGeneratorFunction();
    var serverUrl = this.get_serverUrl();    
    var url = null;    
    if(isSameOrigin(serverUrl)) {
        url = func(level, column, row, serverUrl, imgFormat);        
    }
    else {
        url =   getServerProxyUrl(level, column, row, imgFormat, serverUrl);         
    }
    try {                
        dojox.off.files.cache(url);
        dojox.off.sync.synchronize();            
        handler(url);
    }
    catch(e){handler(url);}    
}

function captureFilesForOfflineAccess(filesToCapture)
{      
    dojox.off.files.slurp();
    dojo.forEach(filesToCapture, function(item)
        {   
            dojox.off.files.cache(item);
            dojox.off.sync.synchronize();
        }
        );
    
    
    // If dojo don't get you .. google gears will
    if(window.google && google.gears) // check if google gears is installed
    {
        var localServer = google.gears.factory.create('beta.localserver');
        if(!localServer){return;}
        var localStore = localServer.createStore('tile-caches');
        if(!localStore){return;}
        localStore.capture(filesToCapture, emptyFunction);
    }    
}

function emptyFunction(success) {}

function clearLocalTiles() {        
    dojo.forEach(dojox.off.files.listOfURLs, function(item){dojox.off.files.remove(item);});
    
    // Do the clear .. explicity
    var map = $find(mapId);
    if(!map){return;}
    
    var level = 0;
    var column = 0;
    var row = 0;
    var maxRows = 30;
    var maxCols = 30;
    var maxLevels = 10;     
    var layerColl = map.get_layers();
    if(!layerColl){return;} 
    var layerCount = map.get_layers().get_layerCount();
    
    for(var i=0; i < layerCount; i++)
    {
        var layer = layerColl.get_layer(i);
        var serverUrl = layer.get_serverUrl();
        var imgFormat = layer.get_imageFormat();
        if(imgFormat == 'png8' || imgFormat == 'png24' || imgFormat == 'png32') // normalize format
            imgFormat = 'png';
        for(var level=0; level < maxLevels; level++)
        {
            for(var column =0; column < maxCols; column++)
            {
                for(var row = 0; row < maxRows; row++)
                {
                    var url = getServerProxyUrl(level, column, row, imgFormat, serverUrl);
                    try
                    {
                        dojox.off.files.remove(url);
                    }
                    catch(e) {}
                    window.status = 'Layer [' + i + '], Level[' + level + '], Column[' + column + '], Row[' + row + ']';
                }
            }
        }       
    } 
    
    alert('Cleared Local Tiles');
    if($get('clearTiles'))
    { $get('clearTiles').disabled=false; }
    window.status = 'Done';
}

function removeOfflineApplicationFiles(filesToCapture) {      
    dojo.forEach(filesToCapture, function(item)
        {
            var url = location.href;
            var pos = url.lastIndexOf('/');
            if(pos > -1)
            {
                url = url.substring(0, pos);
            }
            var cachedFile = url + '/' + item;
            dojox.off.files.remove(cachedFile);
            dojox.off.files.remove(item);
        }
        );
    dojox.off.sync.synchronize();
}