/******************************************************************************
title: tile Request for KML tiles
version: 1.0
Author: Isaac Yong
Description: Request for required KML tiles base on map showing boundary.
Updated: 20080826

******************************************************************************/
//function to generate kml tiles boundaries
function objKMLTiles(arrOriBounds,XIncremental,YIncremental,strURL){
    var kmlTiles = new Array(), kmlFileNames = new Array();
    var intXLeft, intYBottom, intXRight, intYTop, i;
    var boolXend = false, boolYend = false;
        
    for(i=0, intXLeft=arrOriBounds[0],intYBottom=arrOriBounds[1];
        !(boolXend && boolYend);i++){
        kmlFileNames[i] = strURL + i + ".kml";
        if(i==0){
            intXRight =intXLeft+XIncremental;
            intYTop   =intYBottom+YIncremental;
            }
        else{
            if(boolXend){
                intXLeft  =arrOriBounds[0];
                intYBottom+=YIncremental;
                boolXend  =false;
                }
            else
                intXLeft  =kmlTiles[i-1][2];
            /*
            if(boolYend){
                intYBottom=kmlTiles[i-1][3];
                boolYend = false;
                }
            else
                intYBottom=kmlTiles[i-1][1];
            */                
            intXRight =intXLeft+XIncremental;
            intYTop   =intYBottom+YIncremental;
        }
            
        if(intXRight>=arrOriBounds[2]){
            intXRight=arrOriBounds[2];
            boolXend = true;
            }
        if(intYTop>=arrOriBounds[3]){
            intYTop=arrOriBounds[3];
            boolYend = true;
            }
        kmlTiles[i] = new Array(intXLeft, intYBottom, intXRight, intYTop);
        //alert(kmlTiles[i]);        
    }
    
    this.kmlTiles = kmlTiles;
                
        //to find the 4 point of current bound to load
        this.findKMLTiles = function (arrCurrBounds) {
            var lowLeft = new Array(arrCurrBounds[0],arrCurrBounds[1]);
            var highLeft = new Array(arrCurrBounds[0],arrCurrBounds[3]);
            var lowRight = new Array(arrCurrBounds[2],arrCurrBounds[1]);
            var highRight = new Array(arrCurrBounds[2],arrCurrBounds[3]);
            
            var findBoundaries = new Array(lowLeft,highLeft,lowRight,highRight);
            //alert(findBoundaries);
            //alert(kmlTiles.length); 
            var returnFileNames = new Array();                
            for(var j=0; j<findBoundaries.length; j++){
                var findBoundary = findBoundaries[j];            
                for(var i=0;i<kmlTiles.length;i++){
                    var kmlBoundaries = kmlTiles[i];                
                    if ( kmlBoundaries[0]<=findBoundaries[j][0] && kmlBoundaries[1]<=findBoundaries[j][1] 
                    && kmlBoundaries[2]>=findBoundaries[j][0] && kmlBoundaries[3]>=findBoundaries[j][1] ){
                        //alert(kmlBoundaries[0] + "," + findBoundaries[j][0] + "," + kmlBoundaries[1] + "," + findBoundaries[j][1] 
                        //+ "," + kmlBoundaries[2] + "," + findBoundaries[j][0] + "," + kmlBoundaries[3] + "," + findBoundaries[j][1] + "\n" + kmlFileNames[i]);
                        var boolDuplicate = false;
                        for(var k=0;k<returnFileNames.length;k++){
                            if(kmlFileNames[i] == returnFileNames[k])
                                boolDuplicate = true;
                        }
                        if(!boolDuplicate)
                            returnFileNames[returnFileNames.length] = kmlFileNames[i];
                        break;
                    }
                }
            }
        return(returnFileNames);
    }
}
