/**
 * @author Eddie
 */


function ICar(point, info) {
    
    this.m_position;
}

ICar.prototype.setPosition = function(latlng) {

    this.m_position = latlng;
}

ICar.prototype.getPosition = function() {
    
    return this.m_position;
}

ICar.prototype.getCarInfo = function() {
    
}


ICarRealtimeData = function(id, latlng, opts/*?*/) {
    
    this.id = id;
    
    this.latlng = latlng;
    
    if(isDefined(opts)) {
        
        this.speed = opts.speed;
    }
}

function ICarInfo() {
    
    
}
        
CarFactory = {
    
    _createCarIcon : function(src, size, anchor) {
        
        var _ico = new IIcon();
        _ico.image = src;
        _ico.iconSize = size;
        _ico.iconAnchor = anchor;
        return _ico;
    },
    
    _createCarMarker : function(latlng, icon) {
        
        return new IMarker(latlng, icon);
    },
    
    createCar : function() {
        
    }
};

Qatar = new Object();


Qatar.car = {

    m_baseURL: 'http://dl.mactiontech.com/qataravl',
        
    m_realtimePattern: '#baseurl/testretailtime.aspx',
    
    _filterBaseURL: function(url) {
    
        return url.replace(/#baseurl/i, Qatar.car.m_baseURL);
    },
    
    setBaseURL: function(url) {
        
        Qatar.car.m_baseURL = url;
    },
    
    parseXML : function(xmlData) {
        
        var _data;
                
        if($('CommandID', xmlData).length  == 1) {
            
            var _cmdID = $('CommandID', xmlData).text();
            
            if(_cmdID=='CartRealTime') {
                
                $('car', xmlData).each(function(){
                    
                    var _id = $('id', this).text();                    
                    var _x = parseInt($('x', this).text()) / 1000000;                    
                    var _y = parseInt($('y', this).text()) / 1000000;
                    var _speed = parseInt($('speed', this).text());
                                     
                    _data = new ICarRealtimeData(_id, new ILatLng(_y, _x));
                    _data.speed = _speed;
                });
            }
                        
        }
        
        return _data;
    },
    
    getRealtime: function(id, callback) {
    
        var _url = Qatar.car._filterBaseURL(Qatar.car.m_realtimePattern);
            
        $.post(_url, {carid:id}, function(xmlData){
            
            var _d = Qatar.car.parseXML(xmlData);

            if(isDefined(_d)) {
                
                callback(_d);
            }
        });
    },
    
    getInfo: function(){
    
    }
};

var __currentCarID;
var __mark;
var __oldCarTimeout;
var _ico = new IIcon();
_ico.image = './img/car.png';
_ico.iconSize = new ISize(24, 24);
_ico.iconAnchor = new IPoint(12, 12);
//_ico.imageMap = [0,14,0,29,35,8,35,28,31,40,12,40,7,34,7,8];


function realtimeTracking(id, x, y, speed) {
    
    var _latlng = new ILatLng(y / 1000000, x / 1000000);
    
    if (!isDefined(__mark)) {
    
        __mark = new IMarker(_latlng, _ico);
        map.addOverlay(__mark);                
    }
    else if(!isDefined(id)) {
        
        map.removeOverlay(__mark);
        
        return false;              
    }
    

    __mark.setLatLng(_latlng);
    
    var _bounds = map.getBounds();
    
    if(!_bounds.contains(_latlng)) {
        
        map.panTo(_latlng);
    }
    
    PPG_STATUS_CONTROL.setLatitude(_latlng.lat());
    PPG_STATUS_CONTROL.setLongitude(_latlng.lng());
    if(isDefined(speed)){PPG_STATUS_CONTROL.setSpeed(speed)};
}


function showHistoryInfo(lng, lat, html){

    var pt = new ILatLng(lat, lng);
    map.openInfoWindowHtml(pt, html,{size:new ISize(130, 100)});
    map.panTo(pt);
}

function trackingHistory(latlngs) {
    
    
    var _bound = new ILatLngBound();
    
    var _latlng = null;

    for(var i = 0; i < latlngs.length; i+=2) {
        
        if(typeof latlngs[i+1] == 'number' && typeof latlngs[i] == 'number') {
            
            _latlng = new ILatLng(latlngs[i+1] / 1000000, latlngs[i] / 1000000);
            
            
            _bound.extend(_latlng);
            
            var _dot = new IDot(_latlng, '#0000FF', 8);
            
            map.addOverlay(_dot);

        }

    }
    
 //   var _zoom = map.getCurrentMapType().getBoundZoomLevel(_bound, map.getSize());
//    alert(_latlng.lat() + ',' + _latlng.lng())
    map.panTo(_latlng);
}
function CalulateDistance(x, y, x1, y1) {
    var R = 6371; // km
    var pi = Math.PI;
    var dLat = (x1 - x) * (pi / 180);
    var dLon = (y1 - y) * (pi / 180);
    var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(x * (pi / 180)) * Math.cos(x1 * (pi / 180)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    var d = R * c;
   return  d;
}
function displayDistance(latlngs) {
    
    var x = null;
    var x1 = null;
    var y = null;
    var y1 = null;
    var Total=0;

    for(var i = 0; i < latlngs.length; i+=2) {
        
        if(typeof latlngs[i+1] == 'number' && typeof latlngs[i] == 'number' && typeof latlngs[i+2] == 'number' && typeof latlngs[i+3] == 'number') {
            
            x =latlngs[i+1] / 1000000; 
            y= latlngs[i] / 1000000;
            x1 = latlngs[i+2] / 1000000;
            y1=latlngs[i+3] / 1000000;
            
            Total=Total+CalulateDistance(x,y,x1,y1);
            

        }

    }
    alert(Total/1000);
    }

//function realtimeTracking(id) {
//    
//    if(isDefined(__currentCarID)) {
//
//       if(__currentCarID == id) {
//           return;
//       } 
//    }
//
//    __currentCarID = id;   
//    
//    if(isDefined(__oldCarTimeout)) {
//        
//        clearTimeout(__oldCarTimeout);
//    }
//    
//    if(isDefined(__mark)) {
//        
//        map.removeOverlay(__mark);
//        __mark = null;
//    }
//    
//    var real = function() {
//    
//        Qatar.car.getRealtime(__currentCarID, function(car){
//        
//            if (!isDefined(__mark)) {
//            
//                __mark = new IMarker(car.latlng, _ico);
//                map.addOverlay(__mark);                
//            }
//            
//            __mark.setLatLng(car.latlng);
//            
//            var _bounds = map.getBounds();
//            
//            if(!_bounds.contains(car.latlng)) {
//                
//                map.panTo(car.latlng);
//            }
//        });
//        __oldCarTimeout = setTimeout(arguments.callee, 3000);
//    } 
//    
//    real();   
//
//}


