pgLatest={
    baseURL:"http://www.pg.in.th",
    json:[],
    map:null,
    markers:{},
    element:null,
    type:"showPic",
    picSize:"100x100",
    mapItemIconSize:"140x105",
    mapZoom:13,
    panTimer:null,
    autoPan:true,
    panDelay:10,
    labeltype:"",
    totalitems:6,
    latlngList:{},
    labelOptsList:{},
    isAddAllMarkersToMap:false,
    load:function(userid,total){
        var elementid = "pgLatestScript";
        var element = document.getElementById(elementid);
        if(!element){
            element = document.createElement('script');
            element.id = elementid
        }
        element.src = pgLatest.baseURL+"/oapi/pglatest/"+(userid?userid:0)+"/"+(total?total:pgLatest.totalitems+"?random="+Math.random());
        document.getElementsByTagName('head')[0].appendChild(element);
    },
    loadTag:function(tagname,total){
        var elementid = "pgLatestScript";
        var element = document.getElementById(elementid);
        if(!element){
            element = document.createElement('script');
            element.id = elementid
        }
        element.src = pgLatest.baseURL+"/oapi/pglatest/0/"+(total?total:pgLatest.totalitems)+"?tag="+encodeURIComponent(tagname)+"&random="+Math.random();
        document.getElementsByTagName('head')[0].appendChild(element);
    },
    loadMap:function(userid,total){
        pgLatest.type = "showMap";
        var elementid = "pgLatestScript";
        var element = document.getElementById(elementid);
        if(!element){
            element = document.createElement('script');
            element.id = elementid
        }
        element.src = pgLatest.baseURL+"/oapi/pglatest/"+(userid?userid:0)+"/"+(total?total:pgLatest.totalitems)+"?map=&random="+Math.random();
        document.getElementsByTagName('head')[0].appendChild(element);
    },
    showPic:function(element, size){
        if(size){
            pgLatest.setPicSize(size);
        }
        if(pgLatest.json.length == 0){
            pgLatest.element = element;
            return;
        }
        var pghtml = "";
        for(var i = 0; i < pgLatest.json.length; i++){
            var img = '<img class="pglatest-img" src="'+pgLatest.json[i].src+'" alt="'+pgLatest.json[i].title+'"/>';
            var a = '<a target="_blank" class="pglatest-link" href="'+pgLatest.baseURL+pgLatest.json[i].link+'" title="'+pgLatest.json[i].title+'">'+img+'</a>';
            var p = '<p class="pglatest-title">'+pgLatest.json[i].title+'</p>';
			var t = '<p class="pglatest-time">'+pgLatest.json[i].uploadtime+'</p>';
            pghtml +='<div class="pglatest-item">'+a+p+t+'</div>';
        }
        pghtml += '<div class="pglatest-clear"></div>'
        document.getElementById(element).innerHTML = pghtml;
    },
    randomPan:function(id,delay){
        if(pgLatest.autoPan && pgLatest.json.length > 0){
            pgLatest.clearPanTimer();
            if(id == undefined){
                var randomid = Math.ceil(Math.random()*pgLatest.json.length)-1;
                id = pgLatest.json[randomid].id+":"+pgLatest.json[randomid].type;
            }
            if(delay == undefined){
                delay = pgLatest.panDelay*1000;
            }
            if(pgLatest.labeltype == "2flags"){
                pgLatest.panTimer = setTimeout(function(){pgLatest.panTo(id,'big')},delay);
            }else{
                pgLatest.panTimer = setTimeout(function(){pgLatest.panTo(id)},delay);
            }
        }
    },
    clearPanTimer:function(){
        if(pgLatest.panTimer){
            clearTimeout(pgLatest.panTimer);
            pgLatest.panTimer = null;
        }
    },
    panTo:function(id, type){
        if(pgLatest.map){
            pgLatest.clearPanTimer();

            pgLatest.addMarker(id, type);

            var latlng = pgLatest.latlngList[id];
            if (pgLatest.labeltype == "flag" || pgLatest.labeltype == "2flags") {
                var p0 = pgLatest.map.fromDivPixelToLatLng(new GPoint(0,0));
                var pBig = pgLatest.map.fromDivPixelToLatLng(new GPoint(215,246));
                var latBig = Math.abs((p0.lat()-pBig.lat()));
                var lngBig = Math.abs((p0.lng()-pBig.lng()));
                latlng = new GLatLng(latlng.lat()+latBig/2,latlng.lng()+lngBig/2);
            }

            pgLatest.map.panTo(latlng);

            pgLatest.randomPan();
        }
    },
    addMarker:function(id, type){
        var latlng = pgLatest.latlngList[id];
        var opts = pgLatest.labelOptsList[id][0];
        if(type == 'big'){
            opts = pgLatest.labelOptsList[id][1];
        }

        if(pgLatest.markers[0]){
            pgLatest.map.removeOverlay(pgLatest.markers[0]);
        }
        if(pgLatest.isAddAllMarkersToMap){
            for(var i in pgLatest.markers){
                if(pgLatest.markers[i].isHidden()){
                    pgLatest.markers[i].show();
                }
            }
            if(pgLatest.markers[id] == undefined){
                pgLatest.markers[id] = new LabeledMarker(latlng, opts);
                pgLatest.map.addOverlay(pgLatest.markers[id]);
            }else{
                pgLatest.map.removeOverlay(pgLatest.markers[id]);
                pgLatest.map.addOverlay(pgLatest.markers[id]);
            }
            if(type == 'big'){
                pgLatest.markers[id].hide();
                pgLatest.markers[0] = new LabeledMarker(latlng, opts);
                pgLatest.map.addOverlay(pgLatest.markers[0]);
            }
        }else{
            pgLatest.markers[0] = new LabeledMarker(latlng, opts);
            pgLatest.map.addOverlay(pgLatest.markers[0]);
        }
    },
    showMap:function(map, element, opts){
        if(opts){
            pgLatest.mapItemIconSize = opts.mapItemIconSize!=undefined? opts.mapItemIconSize : pgLatest.mapItemIconSize;
            pgLatest.mapZoom = opts.mapZoom!=undefined? opts.mapZoom : pgLatest.mapZoom;
            pgLatest.isAddAllMarkersToMap = opts.isAddAllMarkersToMap!=undefined? opts.isAddAllMarkersToMap : pgLatest.isAddAllMarkersToMap;
            pgLatest.picSize = opts.picSize!=undefined? opts.picSize : pgLatest.picSize;
            pgLatest.autoPan = opts.autoPan!=undefined? opts.autoPan : pgLatest.autoPan;
            pgLatest.panDelay = opts.panDelay!=undefined? opts.panDelay : pgLatest.panDelay;
            pgLatest.labeltype = opts.labeltype!=undefined? opts.labeltype : pgLatest.labeltype;
        }
        if(pgLatest.json.length == 0){
            pgLatest.map = map;
            pgLatest.element = element;
            return;
        }
        
        var center = new GLatLng(13.744617, 100.533786);
        pgLatest.map = new GMap2(document.getElementById(map));
		pgLatest.map.setCenter(center, pgLatest.mapZoom);
        GEvent.addListener(pgLatest.map, "mouseover", function(latlng) {pgLatest.clearPanTimer()});
        GEvent.addListener(pgLatest.map, "mouseout", function(latlng) {pgLatest.randomPan()});

        var pghtml = "";
        for(var i = 0; i < pgLatest.json.length; i++){
            var id = pgLatest.json[i].id+":"+pgLatest.json[i].type;

            var icon = new GIcon(G_DEFAULT_ICON);
            icon.image = "";
            icon.shadow = "";
            icon.iconSize = new GSize(0,0);

            var iconSize = pgLatest.mapItemIconSize.split("x");

            var latlng = new GLatLng(Number(pgLatest.json[i].lat),Number(pgLatest.json[i].lng));
            var labelOffset = null;
            var labelText = '<a href="'+pgLatest.baseURL+'/'+pgLatest.json[i].type+'/view/'+pgLatest.json[i].id+'" target="_blank"><img src="'+pgLatest.json[i].src.replace(pgLatest.picSize,pgLatest.mapItemIconSize)+'"/></a>';
            if (pgLatest.labeltype == "flag") {
                labelText += '<div class="iteminfo"><h3>'+pgLatest.json[i].title+'</h3>' +
                             '<p>วันที่: '+pgLatest.json[i].uploadtime+'<br />' +
                             'สถานที่: '+pgLatest.json[i].place+'</p></div>';
                labelOffset = new GSize(-9,-269);
            }else if (pgLatest.labeltype == "2flags") {
                var labelTextSmall = '<a href="javascript:void(0)" onclick="pgLatest.panTo(&quot;'+id+'&quot;,&quot;big&quot;)"><img src="'+pgLatest.json[i].src.replace(pgLatest.picSize,"37x28")+'"/></a>';
                labelText += '<div class="iteminfo"><h3>'+pgLatest.json[i].title+'</h3>' +
                             '<p>วันที่: '+pgLatest.json[i].uploadtime+'<br />' +
                             'สถานที่: '+pgLatest.json[i].place+'</p></div>';
                var labelOffsetSmall = new GSize(0,-52);
                labelOffset = new GSize(-9,-269);
            } else {
                labelOffset = new GSize(-iconSize[0]/2-10,-iconSize[1]/2-20);
            }

            var labelOpts = {
                icon: icon,
                clickable: false,
                labelText: labelText,
                labelClass: "pglatest-mapitem",
                labelOffset: labelOffset
            };
            pgLatest.latlngList[id] = latlng;
            if (pgLatest.labeltype == "flag") {
                pgLatest.labelOptsList[id] = [labelOpts];
            }else if (pgLatest.labeltype == "2flags") {
                var labelOptsSmall = {
                    icon: icon,
                    clickable: false,
                    labelText: labelTextSmall,
                    labelClass: "pglatest-mapitem-small",
                    labelOffset: labelOffsetSmall
                };
                pgLatest.labelOptsList[id] = [labelOptsSmall,labelOpts];
            } else {
                pgLatest.labelOptsList[id] = [labelOpts];
            }
            if(pgLatest.isAddAllMarkersToMap){
                pgLatest.addMarker(id);
            }

            var img = '<img class="pglatest-img" src="'+pgLatest.json[i].src+'" alt="'+pgLatest.json[i].title+'"/>';
            var a = '<a href="javascript:void(0)" onclick="pgLatest.panTo(&quot;'+id+'&quot;)" title="'+pgLatest.json[i].title+'">'+img+'</a>';
            var p = '<p class="pglatest-title">'+pgLatest.json[i].title+'</p>';
            pghtml +='<div class="pglatest-item">'+a+p+'</div>';
        }
        if(pgLatest.json.length > 0){
            pgLatest.randomPan(pgLatest.json[0].id+":"+pgLatest.json[0].type,0);
        }
        pghtml += '<div class="pglatest-clear"></div>';
        
        if(pgLatest.element != null){
            pgLatest.element = document.getElementById(pgLatest.element);
            pgLatest.element.onmouseover = function(){pgLatest.clearPanTimer()};
            pgLatest.element.onmouseout = function(){pgLatest.randomPan()};
            pgLatest.element.innerHTML = pghtml;
        }
    },
    setPicSize:function(size){
        pgLatest.picSize = size;
    },
    addEvent: function(elm, evType, fn, useCapture){
        if (elm.addEventListener){
            elm.addEventListener(evType, fn, useCapture);
            return true;
        } else if (elm.attachEvent) {
            var r = elm.attachEvent('on' + evType, fn);
            return r;
        } else {
            elm['on' + evType] = fn;
        }
    }
}
function jsonPGFeed(feed){
	
    var x = feed.Photos;
    if(x){
        for(var i = 0; i < x.length; i++){
            pgLatest.json[i] = {
                "link":"/photo/view/"+x[i].PhotoId,
                "src":x[i].Src.replace("48x48",pgLatest.picSize),
                "title":x[i].Title,
				"uploadtime":x[i].UploadTime
                }
        }
    }else{
        x = feed.Items;
        if(pgLatest.type == "showMap"){
            for(var i = 0; i < x.length; i++){
                pgLatest.json[i] = {
                    "id":x[i].MediaId,
                    "type":x[i].Type.toLowerCase(),
                    "src":x[i].Src.replace("48x48",pgLatest.picSize),
                    "title":x[i].Title,
                    "uploadtime":x[i].UploadTime,
                    "place":x[i].Place,
                    "lat":x[i].Latitude,
                    "lng":x[i].Longitude
                    }
            }
        } else {
            for(var i = 0; i < x.length; i++){
                pgLatest.json[i] = {
                    "link":"/photo/view/"+x[i].MediaId,
                    "src":x[i].Src.replace("30x30",pgLatest.picSize),
                    "title":x[i].Title,
					"uploadtime":x[i].UploadTime
                    }
            }
        }
    }
    if(pgLatest.type == "showMap") {
        pgLatest.showMap(pgLatest.map,pgLatest.element);
    }else if(pgLatest.element){
        pgLatest.showPic(pgLatest.element);
    }
}