if( typeof gAJSMAPBASECLASS == 'undefined' ){
  var gAJSMAPBASECLASS = 'defined';
// Converter for prototype 1.5 to prototype 1.6-library
  if( Prototype.Version < '1.6' ) {
    Hash.prototype = Object.extend({
      set: function( key, value ) { this[key] = value },
      get: function( key ) { return this[key] },
      unset: function( key ) { return this.remove() }
    }, Hash.prototype );
  }

  function browserCheck( aBrowserName, aVersion ){
    var Index = navigator.userAgent.indexOf(aBrowserName);
    if( Index != -1 ){
      if( typeof aVersion == 'undefined' ) return true;
      for( var i = 1; i < 2; ++i ){
        var version = parseFloat( navigator.userAgent.substring( Index + (aBrowserName).length + i ) );
        if( version != NaN )
          return (version >= aVersion);
      }
    }
    return false;
  };
  gBrowserCanvasAvailable = browserCheck( "MSIE", 6.0 ) ||
                            browserCheck( "Firefox", 1.5 ) ||
                            browserCheck( "Safari", 300 );

  var AJSMapBaseClass = Class.create();
  AJSMapBaseClass.prototype = {
    initialize: function(){
    },
    addElem: function( elemkind, elemname, elemstyle, parentelem, elemclass ){
  	  if ( document.getElementById( elemname ) ) alert( 'Element with id="' + elemname + '" already existing');
  	  else {
        var elem;
  		  if(elemkind=="inputbutton"){
          elem = document.createElement("input");
          elem.type="button";
        }else
          elem = document.createElement(elemkind);
  		  elem.id = elemname;
        if(typeof elemclass!='undefined')
          elem.className=elemclass;
        Object.extend(elem.style,elemstyle);
  		  if(elemkind=="canvas"){
          elem.width=parseInt(elemstyle.width);
          elem.height=parseInt(elemstyle.height);
          elem.appendChild(document.createTextNode("CANVAS NOT AVAILABLE"));
	  	    parentelem.appendChild(elem);
		      if( typeof G_vmlCanvasManager != 'undefined' ) G_vmlCanvasManager.initElement(elem);
        }else
          parentelem.appendChild(elem);
        return document.getElementById( elemname );
  	  }
  	},
    clone_contentparams: function( par )
    {
      var ret=Object.clone(par);
      if( typeof par.coord != 'undefined' )
        ret.coord=par.coord.clone();
      if( typeof par.hotspot != 'undefined' )
        ret.hotspot={x:par.hotspot.x,y:par.hotspot.y};
      if( typeof par.coords != 'undefined' ){
        ret.coords = new Array;
        for( var i = 0; i < par.coords.length; i++ )
          ret.coords[i]=par.coords[i].clone();
      }
      return ret;
    },
    decode: function( at ){
      var t = at.replace(/&ouml;/g, 'ö');
      t = t.replace(/&auml;/g, 'ä');
      t = t.replace(/&uuml;/g, 'ü');
      t = t.replace(/&Auml;/g, 'Ä');
      t = t.replace(/&Uuml;/g, 'Ü');
      t = t.replace(/&Ouml;/g, 'Ö');
      t = t.replace(/&#252;/g, 'ü');
      t = t.replace(/&#246;/g, 'ö');
      t = t.replace(/&#228;/g, 'ä');
      t = t.replace(/&#226;/g, 'â');
      t = t.replace(/&#223;/g, 'ß');
      t = t.replace(/&#196;/g, 'Ä');
      t = t.replace(/&#214;/g, 'Ö');
      t = t.replace(/&#220;/g, 'Ü');
      t = t.replace(/&#248;/g, 'ø');
      t = t.replace(/&#216;/g, 'Ø');
      t = t.replace(/&#229;/g, 'å');
      t = t.replace(/&#197;/g, 'Å');
      t = t.replace(/&#230;/g, 'æ');
      t = t.replace(/&#198;/g, 'Æ');
      t = t.replace(/&#233;/g, 'é');
      t = t.replace(/&#232;/g, 'è');
      t = t.replace(/&#156;/g, 'œ');
      t = t.replace(/&#140;/g, 'Œ');
      t = t.replace(/&#/g, '');
      return t;
    },
    checkParameter:function(par,defaultvalue){
      if(typeof defaultvalue!='undefined'){
        if(typeof par=='undefined'){
          return defaultvalue;
        }
      }else{
        if(typeof par=='undefined'){
          alert("Missing Parameter");
          return null;
        }
      }
      return par;
    },
    getColorSetFunction: function(content){
      if(content=="chgno"){
        return function(p){
          switch(parseInt(p.chgno)){
            case 0:return "00ff00";
            case 1:return "ffff00";
            case 2:return "ff0000";
            default:return "000000";
          }
        };
      }else if(content=="trainclass"){
        return function(p){
          switch(parseInt(p.trainclass)){
            case 1:return "ff0000";
            case 2:return "0000ff";
            case 4:return "000000";
            case 8:return "949494";  // RE
            case 16:return "50693f"; // S
            case 32:return "ffff00"; // Bus
            case 64:return "009cce"; // Schiff
            case 128:return "00528c";// U
            case 256:return "dc2b19";// STB
            case 512:return "dcdc96";// AST
            default:return "ffffff";
          }
        }
      }else{
        return function(p){return "555555";};
      }
    },
    convertCircleToPolyline: function(circleContent, numLines) {
      par = circleContent;
      var lat = par.coord.getLat();
      var lon = par.coord.getLon();
      var radfact = Math.PI/180;
      var latoff = par.radius / 60 / 1852 * 1e6;
      var lonoff = par.radius / 60 / 1852 * 1e6 / Math.cos(lat/1e6*radfact);
      var n = numLines;
      var crds = [];
      for( var i=0; i<n; i++ ) {
        var rad = 360 * i / n * radfact;
        var latfact = Math.cos(rad);
        var lonfact = Math.sin(rad);
        crds[i] = new CCoord({ lat: lat+latfact*latoff, lon: lon+lonfact*lonoff });
      }
      crds.push(crds[0]);
      return {
        type: 'polyline',
        coords: crds,
        color: par.color,
        width: par.width,
        opacity: par.opacity
      };
    }
  }
}

