
////*********************************************************************/
// Author:	Michal Popiolek
// Date:    22.3.2009
// Desc.: Knihovna skriptu pro inicializaci google maps / trial verze pro EAGO Systems
// Request: pozaduje také google_maps_interaction.js
//
// Použité funkce:
//  function initialize()           inicializace Google Mapy
//  function updateStatusBar()      funkce pro aktualizaci informaci o WGS souradnicich aktualniho vyrezu okna
//  function toggleLayer(obj)       funkce pro zapnuti/vypnuti znacek v mape, pomoci kliku na checkbox
//  function toggleALLLayer(obj)    funkce pro preklopeni stavu zapnuti vsech vrstev v mape se zmenou stavu checkboxu
//  function showSelectedLayers()   zapina ty vrstvy v mape, ktere jsou oznaceny checkboxem jako viditelne
//  function createMarker(point,name,html,type)             A function to create the marker and set up the event window, pridani znacky do skupiny dle type
//  function createLine(points, color, weight, opacity)     Vytvari a vraci instanci GPolyLine
//  function createDDMenu()         vytvari drop down menu na dane pozici pomoci GControl
//  funkce createDuplButton()       vytvari tlacitko pro duplikaci okna do noveho na dane pozici pomoci GControl
//  prototype tridy GMarker         setFid(), getFid(), setType(), getType() - nastaveni vlastnosti GMerkeru pro praci s objektem
//  funkce openNewDuplicatedWindow()  sestavuje parametr pro volani noveho okna se stejnym nastavenim a obsahem, pote otevira nove okno
//*********************************************************************/

//**************************************//
//preset variables
var visible_layers = new Array(); //nastaveni viditelnych vrstev v mape pro jejich pozdejsi zobrazeni po provedeni refresh vrstev

var routeRequestUuid = null;

var useSideBar=false;       //bude-li pouzit postranni panel pro zobrazovani dalsich informaci
var useMapControl=true;     //bude-li pouzit control panel pro zobrazovani zmenu typu mapy
var useMapMoveControl=true; //bude-li pouzit control panel pro posun mapy maly vs velky dle velikosti mapy
var useScrollWheelZoom=true;//bude-li pouzito kolecko mysi pro zoomovani mapy
var useFirstZoom=true;      //bude-li pri inicializaci proveden zoom na extent objektu pri prvnim parsovani XML (ne po refresh)
var FirstZoomDone=false;    //true kdyz jiz byl proveden uvodni zoom
var debugOn=false;          //alerty na zaklade true

var side_bar_html = ""; // this variable will collect the html which will eventualkly be placed in the side_bar
var gmarkers = [];      // google znacky - arrays to hold copies of the markers
var glines= [];         //google linie - arrays to hold copies of the lines
var groute = [];        //google linie - reprezentace ROUTE, prozatim pocitano jen s jednou route v poli
var map;                //globalni promenna map
var smallMapLimit = 300;//limitujici parametr pro nastaveni velikosti vysky okna MAPy, na zaklade jehoz prekroceni se zmeni ovladaci prvky inicializace a take funkce klik na ikonu
var map_height_num = 0; //vyska mapy zjistena pri inicializaci pro porovnani s limitem pro zmeny vlastnosti mapy (ovladaci prvky, funkce klik na symbol apod...)
var initObjShow = 0;    //semafor indikujici zda byla provedena inicializace mapy nad objektem (byl-li pozadovan v requestu)
var initObjCode ="";    //globalni promenna obsahujici CODE inicializacniho objektu, code prichazi v requestu a predava se klikem na objekt 

//line - color, weight, transparency (default - red, 3, 0.75) 
var line_color = "#FF0000";
var line_weight = 3;
var line_alfa = 0.75;

//route - color, weight, transparency (default - red, 3, 0.75) 
var route_color = "#0000FF";
var route_weight = 5;
var route_alfa = 0.75;

var region_color = "#666";
var region_weight = 2;
var region_alfa = 0.5;

var request_IDs = new Array();  //globalni pole pro inicializaci pri provadeni refresh
var wrapper;                    //wrapper pro refresh dat v definovanem intervalu dle ID predaneho v URL v poli request_IDs

//*********************************************************************
// funkce Browser()
// zjistuje parametry browseru, vyuzito zejmena kvuli odlisnosti pristupu k parsovani dat v IE a FF
//
//params:	xmlDoc - objekt typu XML dokument obsahujici odpoved serveru
//*********************************************************************
function Browser()
{
    this.isIE    = false;
    this.isNS    = false;
    this.isOP    = false;
    this.isFF    = false;
    this.name    = navigator.appName;
    this.version = null;

    ua = navigator.userAgent;
    //alert(navigator.vendor);

    // Firefox:
    // Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6

    // Explorer:
    // Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

    // Opera:
    // Mozilla/4.0 (compatibile; MSIE 6.0; Windows NT 5.1; en) Opera 8.50

    if ((navigator.userAgent).indexOf("Firefox")!=-1) {
        this.isFF = true;
    } else if ((navigator.userAgent).indexOf("Opera")!=-1) {
        this.isOP = true;
    } else if (navigator.appName=="Netscape") {
        this.isNS = true;
    //s = "Netscape6/";
    //this.version = parseFloat(ua.substr(i + s.length));
    } else if ( (navigator.appName).indexOf("Microsoft") != -1 ) {
        this.isIE = true;
    //s = "MSIE";
    //this.version = parseFloat(ua.substr(i + s.length));
    }

    return;
}
var browser = new Browser();

var nopopup = false;
var site_found = false;

var cg_line_def = {
    type_prefix: 'congestion',
    defs: {
        '1': {color: '#00FF00', weight: 3, alfa: .6, img: 'images/cong1.gif'},
        '2': {color: '#CDBA00', weight: 3, alfa: .6, img: 'images/cong2.gif'},
        '3': {color: '#FF8A00', weight: 3, alfa: .6, img: 'images/cong3.gif'},
        '4': {color: '#FF4200', weight: 3, alfa: .6, img: 'images/cong4.gif'},
        '5': {color: '#8F0071', weight: 4, alfa: .6, img: 'images/cong5.gif'}
    },
    get: function(level) {
        var def = this.defs[''+level];
        if (def) {
            return def;
        } else {
            return null;
        }
    },
    toGIcon: function(level) {
        var def = this.get(level);
        if (def) {
            def.type = this.type_prefix + level;
            var icon = new GIcon();
            icon.image = def.img;
            icon.iconSize = new GSize(8, 8);
            icon.iconAnchor = new GPoint(4, 8);
            icon.infoWindowAnchor = new GPoint(5,5);
            icon._eago_type = def.type;
            return icon;
        } else {
            return null;
        }
    }
};



//end preset variables
//**************************************//

var icons = {};
//**************************************//
//inicializace ikon DI
var icon_obj = new GIcon();
icons['obj'] = icon_obj;
icon_obj.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
icon_obj.iconSize = new GSize(30, 30);
icon_obj.iconAnchor = new GPoint(20, 20);
icon_obj.infoWindowAnchor = new GPoint(15,15);
//icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
//icon.shadowSize = new GSize(22, 20);

//inicializace ikon start - cil
var icon_ends = new GIcon();
icons['ends'] = icon_ends;
icon_ends.iconSize = new GSize(30, 30);
icon_ends.iconAnchor = new GPoint(5,25);
icon_ends.infoWindowAnchor = new GPoint(15,15);
//icon_alt.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
//icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
//icon.shadowSize = new GSize(22, 20);

// stred oblasti
var icon_center = new GIcon();
icons['center'] = icon_center;
icon_center.iconSize = new GSize(30, 25);
icon_center.iconAnchor = new GPoint(5,25);
icon_center.infoWindowAnchor = new GPoint(15,15);

// ikonka poi
var icon_poi = new GIcon();
icons['poi'] = icon_poi;
icon_poi.iconSize = new GSize(16, 20);
icon_poi.iconAnchor = new GPoint(6,10);
icon_poi.infoWindowAnchor = new GPoint(14,18);

var iconpath =[];
var gicons=[];
var zIndexMap=[];


/**
 *
 */
function _propToSizes(propValue) {
    var ssizes = propValue.split(/[\\s]*,[\\s]*/, 5);
    var x, y;
    var sizes = [];
    for (var i = 0; i < ssizes.length; i++) {
        x = ssizes[i].split(/x/, 2)[0];
        y = ssizes[i].split(/x/, 2)[1];
        sizes[sizes.length] = {
            x:parseInt(x),
            y:parseInt(y)
        };
    }
    return sizes;
}

/**
 * initVariables
 */
function initVariables(settingsXml) {
    var settings = {};
    var scripts = [];
    if (settingsXml && settingsXml.hasChildNodes()) {
        var children = getDirectChildren(settingsXml, /.*/);
        var nodeText, nodeName;
        for (var i = 0; i < children.length; i++){
            nodeText = getNodeText(children[i]);
            nodeName = children[i].nodeName;
            if (nodeName .search(/^js-/) != -1) {
                scripts[scripts.length] = nodeText;
            } else {
                settings[nodeName] = nodeText;
            }
        }
    }

    for (var n = 0; n < scripts.length; n++) {
        try {
            eval(scripts[n]);
        } catch(exception) {
            window.alert('error during initialization script (' + n + ')');
        }
    }

    for (var o in cg_line_def.defs) {
        var cgicon = cg_line_def.toGIcon(o);
        gicons[cgicon._eago_type] = cgicon;
    }

    var icName, icSizes;
    for (var propName in settings) {
        if (propName.match(/^icon-/) != -1) {
            icName = propName.split(/-/, 2)[1];
            if (icons[icName] && (icSizes = _propToSizes(settings[propName])).length >= 3) {                
                icons[icName].iconSize = new GSize(icSizes[0].x, icSizes[0].y);
                icons[icName].iconAnchor = new GPoint(icSizes[1].x, icSizes[1].y);
                icons[icName].infoWindowAnchor = new GPoint(icSizes[2].x, icSizes[2].y);
            }
        }
    //        settingName = settings[o];
    }



    //iconpath["OBJECT"] = "images/Start.gif";
    iconpath["QUEUE"] = "images/Kolona.gif";
    iconpath["ACCIDENT"] = "images/Nehoda.gif";
    iconpath["CLOSURE"] = "images/Uzavirka.gif";
    iconpath["WEATHER"] = "images/Pocasi.gif";
    iconpath["RADAR"] = "images/Radar.gif";
    iconpath["EXTRA_LOAD"] = "images/Naklad.gif";
    iconpath["TRAFFIC_DENSITY"] = "images/Hustota.gif";
    iconpath["POI"] = "images/Hustota.gif";
    iconpath["COMMON"] = "images/Ostatni.gif";
    iconpath["START"] = "images/Start_new.gif";
    iconpath["CIL"] = "images/Cil_new.gif";
    iconpath["CENTER"] = "images/bod.png";
    iconpath["PHM"] = "images/phm.gif";

    gicons["icon"] = new GIcon(icon_obj);
    //gicons["OBJECT"] = new GIcon(icon,iconpath["OBJECT"]);
    gicons["START"] = new GIcon(icon_ends,iconpath["START"]);
    gicons["CIL"] = new GIcon(icon_ends,iconpath["CIL"]);
    //type ikon dle alertc a zaroven type v TRAFFIC-INFO
    gicons["QUEUE"] = new GIcon(icon_obj,iconpath["QUEUE"]);
    gicons["ACCIDENT"] = new GIcon(icon_obj,iconpath["ACCIDENT"]);
    gicons["CLOSURE"] = new GIcon(icon_obj,iconpath["CLOSURE"]);
    gicons["WEATHER"] = new GIcon(icon_obj,iconpath["WEATHER"]);
    gicons["RADAR"] = new GIcon(icon_obj,iconpath["RADAR"]);
    gicons["EXTRA_LOAD"] = new GIcon(icon_obj,iconpath["EXTRA_LOAD"]);
    gicons["TRAFFIC_DENSITY"] = new GIcon(icon_obj,iconpath["TRAFFIC_DENSITY"]);
    gicons["POI"] = new GIcon(icon_obj,iconpath["POI"]);
    gicons["COMMON"] = new GIcon(icon_obj,iconpath["COMMON"]);
    gicons["CENTER"] = new GIcon(icon_center,iconpath["CENTER"]);
    // POI
    gicons["PHM"] = new GIcon(icon_poi,iconpath["PHM"]);

    zIndexMap["icon"] = iconTypeZIndex;
    zIndexMap["START"] = iconTypeZIndex;
    zIndexMap["CIL"] = iconTypeZIndex;
    
    zIndexMap["QUEUE"] = base2TypeZIndex;
    zIndexMap["ACCIDENT"] = base3TypeZIndex;
    zIndexMap["CLOSURE"] = base1TypeZIndex;
    zIndexMap["WEATHER"] = base1TypeZIndex;
    zIndexMap["RADAR"] = base3TypeZIndex;
    zIndexMap["EXTRA_LOAD"] = base2TypeZIndex;
    zIndexMap["TRAFFIC_DENSITY"] = base1TypeZIndex;
    zIndexMap["COMMON"] = base1TypeZIndex;

    zIndexMap["POI"] = poiTypeZIndex;
    zIndexMap["PHM"] = poiTypeZIndex;

    zIndexMap["CENTER"] = centerTypeZIndex;

    zIndexMap["congestion1"] = congestion1TypeZIndex;
    zIndexMap["congestion2"] = congestion2TypeZIndex;
    zIndexMap["congestion3"] = congestion3TypeZIndex;
    zIndexMap["congestion4"] = congestion4TypeZIndex;
    zIndexMap["congestion5"] = congestion5TypeZIndex;

//**************************************//
}

function centerTypeZIndex() {
    return 920;
}
function poiTypeZIndex() {
    return 980;
}
function iconTypeZIndex() {
    return 1050;
}
function base1TypeZIndex() {
    return 1001;
}
function base2TypeZIndex() {
    return 1002;
}
function base3TypeZIndex() {
    return 1003;
}
function congestion1TypeZIndex() {
    return 951;
}
function congestion2TypeZIndex() {
    return 952;
}
function congestion3TypeZIndex() {
    return 953;
}
function congestion4TypeZIndex() {
    return 954;
}
function congestion5TypeZIndex() {
    return 955;
}

//*********************************************************************
// funkce initialize()
// zakladni nastaveni Google maps
//
//params:
//*********************************************************************

function initialize(){
          
    if (GBrowserIsCompatible()) {
          
        //**************************************//
        // create the map
        map = new GMap2(document.getElementById("map"));
          
        var velikost = new GSize(map.getSize());  //zjisteni velikosti mapoveho okna
        var map_height = velikost.toString();     //prevod velikosti na string
        map_height_num = parseInt(map_height.substr(map_height.indexOf(",")+1)); //parsovani Height ze stringu

        if (useMapMoveControl)
        {
            if (map_height_num>smallMapLimit) //hodnota v pointech
                map.addControl(new GLargeMapControl()); //velky posuvnik meritka
            else
                map.addControl(new GSmallMapControl()); //maly posuvnik meritka
        }
              
        if (useScrollWheelZoom) map.enableScrollWheelZoom();  //povoleni skroolovani mysi
        // map.enableGoogleBar();
        if (useMapControl) map.addControl(new GMapTypeControl()); //dostupnost typu map
          
        //extent pro Ceskou republiku
        var bounds = new GLatLngBounds(new GLatLng(48.531157, 12.068481),new GLatLng(51.065565, 18.880005));
        map.setCenter(bounds.getCenter(),map.getBoundsZoomLevel(bounds));

        //**************************************//
        //overeni parametru v URL a jejich provedeni
        //**************************************//
        parseLocation();

        //po dokonceni mapy vytvori objekt menu s dostupnymi vrstvami
        if (map.isLoaded())
        {
            createDDMenu();     //vytvori dropdown menu
            createDuplButton(); //vytvori duplikacni tlacitko stranky
        }
    } else {
        window.alert("Sorry, the Google Maps API is not compatible with this browser");
    }
}


//funkce pro zapnuti/vypnuti znacek v mape
function toggleLayer(obj)
{
    var id = obj.id;
    var checked = obj.checked;
    var type = obj.value;
    visibleLayer(type,checked);
}

//zapnuti vsech vrtev ktere jsou v inputu; id="vr_.."
function toggleAllLayers() {
    var n = 1;
    var obj = document.getElementById('vr_' + n);
    while (obj) {
        n++;
        if (obj.checked) obj.checked=false;
        else obj.checked=true;
        toggleLayer(obj);

        obj = document.getElementById('vr_' + n);
    }
}

// This function picks up the click and opens the corresponding info window
function myclick(i) {
    GEvent.trigger(gmarkers[i], "click");
}


//*********************************************************************
// funkce createMarker(point,label,html,type)
// vytvari symbol s predanych parametru, vcetne InfoWindow
// A function to create the marker and set up the event window
//
//params:	point - instance GLatLng()
//        label - TXT pro tooltip
//        html  - zdroj pro zobrazeni v InfoWindow
//        fid   - featureId objektu ktery linii vytvari
//        type  - typ objektu, definijici zarazeni do vrstvy
//        code  - CODE objektu jako jedinecne ID z requestu
//*********************************************************************


function createMarker(point,label,html,fid,type,code,marker_props) {
    var params = {
        icon:gicons[type],
        title:label
    };
    if (zIndexMap[type]) {
        params.zIndexProcess = zIndexMap[type];
    }
    if (marker_props) {
        for(var o in marker_props) {
            params[o] = marker_props[o];
        }
    }
    var marker = new GMarker(point, params);
    marker.setFid(fid);
    marker.setType(type);
    marker.setCode(code);
    GEvent.addListener(marker, "click", function() 
    {
        //pokud je male okno
        if (map_height_num<smallMapLimit) openNewDuplicatedWindow(marker.getCode());
        else 
        {
            if (html !="") marker.openInfoWindowHtml(html);
        }
    });
    //kazdy bod uklada do pole, muze se na nej poydeji odkazovat
    // add a line to the side_bar html
    //if (useSideBar) side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a><br>';
    return marker;
}

//*********************************************************************
// funkce createLine()
// vytvari symbol linie z predanych parametru, vcetne InfoWindow
// A function to create the marker and set up the event window
//
//params:	points  - pole instanci points[GLatLng()]
//        color   - barva
//        weight  - tloustka
//        opacity - pruhlednost
//        fid     - featureId objektu ktery linii vytvari
//        type    - typ objektu, definijici zarazeni do vrstvy
//*********************************************************************

function createLine(points, color, weight, opacity, fid, type)
{
    var line = new GPolyline(points, color, weight, opacity, {geodesic:true});
    line.setFid(fid);
    line.setType(type);
    return line;
}


//*********************************************************************
// funkce createDDMenu()
//  vytvari drop down menu na dane pozici pomoci GControl
//
//params:
//*********************************************************************
function createDDMenu(){
    // ============================
    var pos;
    if ( browser.isIE ){
        pos = new GControlPosition(G_ANCHOR_TOP_RIGHT , new GSize(220,7));
    }else{
        pos = new GControlPosition(G_ANCHOR_TOP_RIGHT , new GSize(220,-4));
    }
    pos.apply(document.getElementById("nav"));
    map.getContainer().appendChild(document.getElementById("nav"));
// ============================
}

//*********************************************************************
// funkce createDuplButton()
//  vytvari tlacitko pro duplikaci okna do noveho na dane pozici pomoci GControl
//
//params:
//*********************************************************************
function createDuplButton(){
    // ============================
    var duplBtn = document.getElementById("DuplButton");
    if (duplBtn) {
        var pos;
        if ( browser.isIE ){
            pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT , new GSize(70,5));
        }else{
            pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT , new GSize(70,7));
        }
        pos.apply(duplBtn);
        map.getContainer().appendChild(duplBtn);
    }
// ============================
}

//*********************************************************************
// funkce setFid()
// rozsireni tridy GMarker o vlastnost fid, ktera nabyva hodnoty featureId,
// sluzi pro nalezeni GMarkeru v poli
//
// funkce setType()
// urcuje typ objektu, zavadi se pro typ vrstvy
//
// funkce setCode()
// urcuje jedinecny CODE objektu, zavadi se identifikaci kazdeho objektu
//*********************************************************************
GMarker.prototype.setFid = setFid;
GMarker.prototype.setType = setType;
GMarker.prototype.setCode = setCode;
function setFid(fid)
{
    this.fid = fid;
}

function setType(type)
{
    this.type = type;
}

function setCode(code)
{
    this.code = code;
}
//*********************************************************************
// funkce getFid()
// rozsireni tridy GMarker o vlastnost fid, ktera nabyva hodnoty featureId, sluzi pro nalezeni GMarkeru v poli
// vraci fis objektu
//
// funkce setType()
// vraci typ objektu, zavadi se pro typ vrstvy
//
// funkce setCode()
// vraci CODE objektu, zavadi se identifikaci kazdeho objektu
//*********************************************************************
GMarker.prototype.getFid = getFid;
GMarker.prototype.getType = getType;
GMarker.prototype.getCode = getCode;

function getFid()
{
    return this.fid;
}

function getType()
{
    return this.type;
}

function getCode()
{
    return this.code;
}

//*********************************************************************
// funkce setFid()
// rozsireni tridy GPolyline o vlastnost fid, ktera nabyva hodnoty featureId,
// sluzi pro nalezeni GPolyline v poli
//*********************************************************************
GPolyline.prototype.setFid = setFid;
GPolyline.prototype.setType = setType;
//*********************************************************************
// funkce getFid()
// rozsireni tridy GPolyline o vlastnost fid, ktera nabyva hodnoty featureId,
// sluzi pro nalezeni GPolyline v poli
//*********************************************************************
GPolyline.prototype.getFid = getFid;
GPolyline.prototype.getType = getType;

//*********************************************************************
// funkce openNewDuplicatedWindow()
// sestavuje parametr pro volani noveho okna se stejnym nastavenim a obsahem
// pote otevira nove okno
//
// params:
// objCode - code objektu (vyuzito pro predani CODE objektu pri kliku v male mape a pro otevreni nove mapy se stredem v obj a s infowindow)
//*********************************************************************
function openNewDuplicatedWindow(objCode)
{
    var url= "/map/";
   
    var center_point = new GLatLng();
    if (request_IDs.length)
    {
        url += "?command=request&value=";
        for (var i=0; i<request_IDs.length; i++)
        {
            url += request_IDs[i] + ";";
        }
        url = url.substr(0,url.length - 1); //odstrani posledni strednik
        url += "&";
    }else
    {
        url += "?";
    }
  
    center_point = map.getCenter();
    url += "command_sec=zoom&option_sec=level&value_sec=" + center_point.lat() + ";" + center_point.lng() + ";" + map.getZoom();
    url += "&is_top=1";
    if (objCode != "") url += "&initobjcode="+objCode;
    // window.open(url, "_map", "width="+screen.availWidth+",height="+screen.availHeight+"");
    // if (top!=self) {
    // var par = window;
    // var wnds = [];
    // while (par && par!=top) {
    // if (par.GB_hide && par.GB_CURRENT) {
    // wnds[wnds.length] = par;
    // }
    // par = par.parent;
    // }
    // for (var i=wnds.length-1; i>=0; i--) {
    // try {
    // wnds[i].GB_hide();
    // } catch (ex) {
    // window.alert('chyba '+ex);
    // }
    // }
    // new top.GB_Window({caption: 'Mapa',center_win:true,fullscreen:true,show_loading:false}).show(url);
    //if (par) {
    //    try {
    //      //par.GB_hide();
    //    } catch (ex) {
    //      window.alert('chyba '+ex);
    //    }
    //    
    //} else {
    window.open(url, "_map", "width="+screen.availWidth+",height="+screen.availHeight+"");
//}
// } else {
// window.alert('Výběr je již v hlavním okně, akci nelze provést.');
// }
}

/**
 * formatDate
 */
function formatDate(date,hideTime) {
    var d = new Date();
    if (!hideTime) {
        if (date.getYear()==d.getYear() && date.getDate()==d.getDate() && date.getMonth()==d.getMonth()) {
            return date.getHours()+":"+(date.getMinutes()<10?'0':'')+date.getMinutes();
        } else {
            return date.getDate() + "."+(date.getMonth()+1)+"."+date.getFullYear()+" "+date.getHours()+":"+(date.getMinutes()<10?'0':'')+date.getMinutes();
        }
    } else {
        return date.getDate() + "."+(date.getMonth()+1)+"."+date.getFullYear();
    }
}
function formatTime(date) {
    return date.getHours()+":"+(date.getMinutes()<10?'0':'')+date.getMinutes();
}
/**
 * parseXmlDate
 */
function parseXmlDate(dateStr) {
    if (browser.isIE) {
        var f = dateStr.match(/([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):/);
        if (f) {
            return new Date(f[2]+'/'+f[3]+'/'+f[1]+' '+f[4]+':'+f[5]+':00 Z');
        } else {
            return null;
        }
    } else {
        return new Date(dateStr);
    }
}
