function setErrorField(field, message, commonField){
    if(commonField == null)
      commonField = 'common';
    if(document.getElementById(field+'_error_msg') != null){
        document.getElementById(field+'_error_msg').innerHTML = message;
        prepareErrorField(field, true);
    } else {
        document.getElementById(commonField+'_error_msg').innerHTML += message;
        prepareErrorField(commonField, true);
    }
    
}

function prepareErrorField(field, error){
    var errColor = '#f3d0d0';
    var sucColor = '#ffffff';
    
    if(error){
        if(document.getElementById(field+'_error_msg') != null){
            document.getElementById(field+'_error_msg').style.backgroundColor = errColor;
            document.getElementById(field+'_error_msg').style.padding = '5px';
            document.getElementById(field+'_error_msg').style.border = 'solid 1px #bf4500';
            document.getElementById(field+'_error_msg').style.margin = '3px 0px 3px 0px';
        }
        if(document.getElementById(field) != null){
            document.getElementById(field).style.backgroundColor = errColor;
        }
    } else {
        if(document.getElementById(field+'_error_msg') != null){
            document.getElementById(field+'_error_msg').style.backgroundColor = sucColor;
            document.getElementById(field+'_error_msg').style.padding = '0px';
            document.getElementById(field+'_error_msg').style.border = 'none';
        }
        if(document.getElementById(field) != null){
            document.getElementById(field).style.backgroundColor = sucColor;
        }
    }
    
}

function clearErrorFields(fields){
	var arr_fields = fields.split(",");
	for(var i=0; i<arr_fields.length; i++){
		clearErrorField(arr_fields[i]);
	}
	clearErrorField('common');
/*
    clearErrorField('question_title');
    clearErrorField('question');
    clearErrorField('question_subcategory_id');
    clearErrorField('tag');
    clearErrorField('tag1');
    clearErrorField('tag2');
    clearErrorField('tag3');
    clearErrorField('tag4');
    clearErrorField('tag5');
    clearErrorField('common');
*/
}
/*
function clearRegisterErrorFields(){

    clearErrorField('email');
    clearErrorField('email_repeat');
    clearErrorField('username');
    clearErrorField('password');
    clearErrorField('password_repeat');
    clearErrorField('forename');
    clearErrorField('lastname');
    clearErrorField('birthday');
    clearErrorField('agb_accepted');

}
*/
function clearErrorField(field){
    prepareErrorField(field, false);
    if(document.getElementById(field+'_error_msg') != null){
        document.getElementById(field+'_error_msg').innerHTML = '';
    }
}

function save_ok(){
    alert('Einstellung(en) gespeichert.');
}

/******************************************************************************/
function doOverlay(element, scrollTo){

        var $D = YAHOO.util.Dom;
        if(document.getElementById('overlay') != null){
	        document.getElementById('overlay').style.height=$D.getViewportHeight()+'px';
   		    document.getElementById('overlay').style.width=$D.getViewportWidth()+'px';
   		}

        showOrHideAllDropDowns('hidden');
        //var $D = YAHOO.util.Dom;
        
        var offsetTop = 0;
        if (typeof window.pageYOffset != 'undefined') {
           offsetTop = window.pageYOffset;
        }
        else if (typeof document.compatMode != 'undefined' &&
             document.compatMode != 'BackCompat') {
           offsetTop = document.documentElement.scrollTop;
        }
        else if (typeof document.body != 'undefined') {
           offsetTop = document.body.scrollTop;
        }

        height = $D.getViewportHeight();
        el = document.getElementById(element);
        
        if(el != null){
	        el.style.zIndex=1000;
	        el.style.top='50px';           
	
	        el.style.left='150px';
	        el.style.position='absolute';
	        el.style.backgroundColor='#ffffff';
	        el.style.display='block';
        }
        
        if(document.getElementById('overlay') != null){
	        document.getElementById('overlay').style.height=($D.getY('lastbottom')+60)+'px';
	        document.getElementById('overlay').style.display='block';
	    }
        top.location='#'; //+scrollTo; // ScrollToTop is ok!
        
}

function undoOverlay(element){
    showOrHideAllDropDowns('visible');
    if(element != null && document.getElementById(element) != null){
	    document.getElementById(element).style.display='none';
	}
	if(document.getElementById('overlay') != null){
	    document.getElementById('overlay').style.display='none';
	}
}

function showOrHideAllDropDowns(newState) {
    if (typeof ielt7showOrHideAllDropDowns=="function"){
        ielt7showOrHideAllDropDowns(newState);
    }
}

/* entfernt das overlay und verschiebt die Frage auf die rechte Seite... */
function rememberPoweredQuestion(id){
	var powered_question_remember = '';
	var powered_question_remember_current = readCookie('powered_question_remember');
	if(powered_question_remember_current != null){
		if(powered_question_remember_current.length>0){
			powered_question_remember = powered_question_remember_current+'-';
		}
	}
	powered_question_remember = powered_question_remember+id;
    document.cookie='powered_question_remember='+powered_question_remember+'; path=/; domain=askabit.de; expires=Tue, 30 Dec 2015 12:00:00 GMT';
    
    new Effect.Parallel([
	  new Effect.Move('powered_question', { sync: true, duration:5, x: 800, y: 10, mode: 'absolute' }), 
	  new Effect.Opacity('powered_question', { sync: true, from: 1, to: 0 })
	], { 
	  duration: 1.2,
	  delay: 0.1,afterFinish: rememberPoweredQuestionFinish
	});
}

function rememberPoweredQuestionFinish(){
	undoOverlay(null);
	document.getElementById('powered_question').style.display='none';
	if(document.getElementById('powered_question_small') != null && document.getElementById('question_remember') != null){
		var questionSmall = document.getElementById('powered_question_small').innerHTML;
		var questionRemember = document.getElementById('question_remember').innerHTML;
		if(questionRemember.length < 1){
			questionRemember = '<h3>Gemerkte Fragen</h3>';
		}
	    document.getElementById('question_remember').innerHTML = questionRemember+questionSmall;
	}
}

function disablePoweredQuestion(id){
	var powered_question_disabled = '';
	var powered_question_disabled_current = readCookie('powered_question_disabled');
	if(powered_question_disabled_current != null){
		if(powered_question_disabled_current.length>0){
			powered_question_disabled = powered_question_disabled_current+'-';
		}
	}
	powered_question_disabled = powered_question_disabled+id;
    document.cookie='powered_question_disabled='+powered_question_disabled+'; path=/; domain=askabit.de; expires=Tue, 30 Dec 2015 12:00:00 GMT';
    undoOverlay('powered_question');
}

function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
                var c = ca[i];
                while (c.charAt(0)==' ') c = c.substring(1,c.length);
                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
}


var geocoder = null;
var resultField = null;
var geoLonResultField;
var geoLatResultField;
var geoTypeResultField;
var regionalType;
function getGeoCoderAddress(address, myResultField, myGeoLonResultField, myGeoLatResultField, myGeoTypeResultField, myRegionalType){
    if(address.length == 0){
        if(myRegionalType == 'regional_only'){
	        document.getElementById(myResultField).innerHTML = 'Keine, bitte eingeben!';
	    } else {
	    	document.getElementById(myResultField).innerHTML = 'bundesweit';
	    }
	    document.getElementById(myGeoTypeResultField).value = 'bundesweit';
    }
	if(address.length < 3){
	    return false;
	}
	address = address+', Germany';
    resultField = myResultField;
    geoLonResultField = myGeoLonResultField;
    geoLatResultField = myGeoLatResultField;
    geoTypeResultField = myGeoTypeResultField;
    regionalType = myRegionalType;
    if(geocoder == null){
    	geocoder = new GClientGeocoder();
    }
    geocoder.getLocations(address, addAddressToField);
}

function addAddressToField(response) {
    if (!response || response.Status.code != 200) {
    
      if(regionalType == 'regional_only'){
	    document.getElementById(resultField).value = 'Keine, bitte eingeben!';
	  } else {
	  	document.getElementById(resultField).innerHTML = 'Bundesweit (Diese Adresse wurde nicht gefunden. Bitte ändern.)';
	  }
      document.getElementById(geoTypeResultField).value = 'bundesweit';
    } else {
      place = response.Placemark[0];
      //point = new GLatLng(place.Point.coordinates[1],
      var locality = null;
      if(place != null){
        if(place.AddressDetails != null){
          if(place.AddressDetails.Country != null){
            if(place.AddressDetails.Country.AdministrativeArea != null){
              if(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea != null){
                if(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality != null){
                  locality = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality;
                }
              } else if (place.AddressDetails.Country.AdministrativeArea.Locality != null){
                var locality = place.AddressDetails.Country.AdministrativeArea.Locality;
              }
            }
          }
        }
        var point = new GLatLng(place.Point.coordinates[1],
                        place.Point.coordinates[0]);
        document.getElementById(geoLatResultField).value = point.lat();
        document.getElementById(geoLonResultField).value = point.lng();
        document.getElementById(geoTypeResultField).value = 'adresse';
      }
        
      if(locality != null){
        var zipcode = '';
        if(locality.PostalCode != null){
          if(locality.PostalCode.PostalCodeNumber != null){
            zipcode = locality.PostalCode.PostalCodeNumber+' ';
          }
        }
        var subAdministrative = '';
        if(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea != null){
          if(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName != null){
            subAdministrative = ' ('+place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName+')';
          }
        }
        document.getElementById(resultField).innerHTML = zipcode+locality.LocalityName+subAdministrative;
      }
    }
}


/* aus question.html */
    function setInitialCenter(myMap){
        myMap.setCenter(new GLatLng(51.3171621795, 9.4907965901), 6);
    }
    
    var answer_map = null;
    var answer_map_pois = null;
    function showHideMap(){
        if(document.getElementById('answer_map').style.display != 'none'){
            document.getElementById('answer_map').style.display='none';
        } else {
            document.getElementById('answer_map').style.display='block';
            // map
            if (GBrowserIsCompatible()) {
                if(answer_map == null){
                    answer_map_pois = new Array();
                    answer_map = new GMap2(document.getElementById("answer_map_canvas"));
                    setInitialCenter(answer_map);
                    answer_map.addControl(new GSmallMapControl());
                    answer_map.addControl(new GMapTypeControl());
                    answer_map.disableDoubleClickZoom();
                    answer_map.enableScrollWheelZoom();
                    GEvent.addListener(answer_map,"dblclick", function(){
                        // must be on dblclickzoom no marker!
                        if((answer_map_pois.length-1) >= 0)
                            removeElementAndReOrder((answer_map_pois.length-1));
                    });
                    
                    GEvent.addListener(answer_map,"click", function(overlay,latlng,overlaylatlng) {
                        if(answer_map_pois.length > 25){
                            alert('Sorry, mehr als 26 Marker sind nicht möglich, die Buchstaben sind alle...');
                        } else if(latlng != null){
                            add_marker(answer_map, latlng, answer_map_pois.length);
                        }
                    });
                }
            }
        }
    }
    // for adding a maker by the click
    function add_marker(myMap, latlng, index){
        var letter = String.fromCharCode("A".charCodeAt(0) + index);
        
        var baseIcon = new GIcon(G_DEFAULT_ICON);
        baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
        baseIcon.iconSize = new GSize(20, 34);
        baseIcon.shadowSize = new GSize(37, 34);
        baseIcon.iconAnchor = new GPoint(9, 34);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
        
        var letteredIcon = new GIcon(baseIcon);
        letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
        markerOptions = { icon:letteredIcon };
        var marker = new GMarker(latlng, markerOptions);

        GEvent.addListener(marker, "click", function() {
            removeElementAndReOrder(index);
        });
        answer_map_pois[index] = latlng;
        myMap.addOverlay(marker);
        updateMapForm();
    }
    
    // for adding the marker by script
    function add_marker_script(myMap, latlng, index){
        var letter = String.fromCharCode("A".charCodeAt(0) + index);
        
        var baseIcon = new GIcon(G_DEFAULT_ICON);
        baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
        baseIcon.iconSize = new GSize(20, 34);
        baseIcon.shadowSize = new GSize(37, 34);
        baseIcon.iconAnchor = new GPoint(9, 34);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
        
        var letteredIcon = new GIcon(baseIcon);
        letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
        markerOptions = { icon:letteredIcon };
        var marker = new GMarker(latlng, markerOptions);
        myMap.addOverlay(marker);
    }
    
    function removeElementAndReOrder(index){
        var newArr = new Array();
        answer_map.clearOverlays();
        var j=0;
        for(var i=0; i<answer_map_pois.length; i++){
            if(i != index){
                add_marker(answer_map, answer_map_pois[i], j);
                newArr[j] = answer_map_pois[i];
                j++;
            }
        }
        answer_map_pois = newArr;
        updateMapForm();
    }
    
    function updateMapForm(){
        var str = '';
        for(var i=0; i<answer_map_pois.length; i++){
            str += '<input type="hidden" name="geo['+i+'][lon]" value="'+answer_map_pois[i].lng()+'"/>';
            str += '<input type="hidden" name="geo['+i+'][lat]" value="'+answer_map_pois[i].lat()+'"/>';
        }
        document.getElementById('answer_map_form').innerHTML = str;
    }

    function uploadFinished(file, fuuid, hash){
        var str  = '<p>Dein hochgeladenes Bild:</p><br />';
            str += '<input type="hidden" name="fuuid" value="'+fuuid+'"/>';
            str += '<img id="file_upload_img" src="'+file+'"/><br /><br />';
            str += '<input type="button" onclick="xajax_rotate_file_upload(\''+fuuid+'\', \''+hash+'\'); return false;" name="rotate" value="Bild rotieren"/>';
            str += '&nbsp;&nbsp;<input type="button" onclick="confirm(\'Wirklich löschen?\') && xajax_delete_file_upload(\''+fuuid+'\', \''+hash+'\'); return false;" name="delete_file_upload" value="Bild löschen"/>';
        document.getElementById('file_upload_content').innerHTML = str;
    }

    function rotateFileUploadResponse(){        
        var img = document.getElementById('file_upload_img').src.toString().split('?');
        var img_new = img[0]+'?'+Math.random();
        document.getElementById('file_upload_img').src=img_new;
    }
    
    function gotoAnswer(uid, doAlert){
        if (typeof customGotoAnswer=="function"){
            customGotoAnswer(uid, doAlert);
        } else {
	        var newLocation = top.location.toString().split('?');
	        var newLocation2 = newLocation[0].split('#');
	        if(doAlert != null){
	            alert(doAlert);
	        }
	        if(doAlert != null){
	            alert(doAlert);
	        }
	        top.location=newLocation2[0]+'?t='+Math.random()+'#antwort_'+uid;
	    }
    }
    
    function save_answer(param, button_id){
        document.getElementById(button_id).disabled='disabled';
        xajax_save_answer(param);
    }
    
    var answerMapObjArr = new Array();
    
    function showAnswerMap(auid){
        if(answerMapObjArr.length==0){
            showAnswerMapInitialize();
        }
        
        var mapOpened=false;
        for(var i=0; i<answerMapObjArr.length;i++){
            if(answerMapObjArr[i].auid == auid){
              if(answerMapObjArr[i].visible == null || answerMapObjArr[i].visible == false){
                document.getElementById("answer_map_"+auid).style.display='block';
                answerMapObjArr[i].map = new GMap2(document.getElementById("answer_map_"+auid));
                answerMapObjArr[i].map.setCenter(new GLatLng(51.3171621795, 9.4907965901), 6);
                answerMapObjArr[i].map.checkResize();
                
                answerMapObjArr[i].map.addControl(new GSmallMapControl());
                answerMapObjArr[i].map.addControl(new GMapTypeControl());
                answerMapObjArr[i].map.enableScrollWheelZoom();
                
                answerMapObjArr[i].bounds = new GLatLngBounds();
                for(var j=0; j<answerMapObjArr[i].latlng.length; j++){
                    add_marker_script(answerMapObjArr[i].map, answerMapObjArr[i].latlng[j], j);
                    answerMapObjArr[i].bounds.extend(answerMapObjArr[i].latlng[j]);
                }
                answerMapObjArr[i].zoom = answerMapObjArr[i].map.getBoundsZoomLevel(answerMapObjArr[i].bounds);
                if(answerMapObjArr[i].zoom > 15){
                    answerMapObjArr[i].zoom = 15;
                }
                answerMapObjArr[i].map.setCenter(answerMapObjArr[i].bounds.getCenter(), answerMapObjArr[i].zoom);
                answerMapObjArr[i].visible = true;
              } else {
                document.getElementById("answer_map_"+auid).style.display='none';
                answerMapObjArr[i].map = null;
                answerMapObjArr[i].visible = false;
                answerMapObjArr[i].bounds = null;
                answerMapObjArr[i].zoom = null;
              }
            }
            
            if(answerMapObjArr[i].map != null){
              mapOpened=true;
            }
        }
        if(!mapOpened){
            GUnload();
        }
    }
    
    function AnswerMapObj(){}
    
    function showMapWithRadius(mapDiv, lon, lat, radius){
        if (GBrowserIsCompatible()) {
            var qMap = new GMap2(document.getElementById(mapDiv));
            //setInitialCenter(qMap);
            qMap.addControl(new GSmallMapControl());
            qMap.addControl(new GMapTypeControl());
            var latlng = new GLatLng(lat, lon);
            var zoom = 12; 
            qMap.setCenter(latlng, zoom);
            
            var marker = new GMarker(latlng);
            qMap.addOverlay(marker);
            
            if(radius > 0){
                var circle = getCirclePolygon(latlng, radius, '#000000', 2, 1, '#000000', 0.25);
                var bounds = getCirclePolygon(latlng, radius, '#000000', 2, 1, '#000000', 0.25, true);
                zoom = qMap.getBoundsZoomLevel(bounds);
                zoom = zoom-1;
                qMap.addOverlay(circle);
                qMap.setZoom(zoom);
//                GEvent.addListener(marker, "click", function() {
//                    qMap.showMapBlowup(latlng, {maxWidth:"100px"});
//                });
            }
            
            
            
        }
    }
    
    // returns the circlePolygon for adding to GMap
    function getCirclePolygon(center, radius, liColor, liWidth, liOpa, fillColor, fillOpa, givePoints)
    {
        // km/degree
        var latConv = center.distanceFrom(new GLatLng(center.lat()+0.1, center.lng()))/100;
        var lngConv = center.distanceFrom(new GLatLng(center.lat(), center.lng()+0.1))/100;
        var bounds = new GLatLngBounds();
        
        var points = [];
        for(var i=0; i<=360; i+=6)
        {
        var pint = new GLatLng(center.lat() + (radius/latConv * Math.cos(i * Math.PI/180)), center.lng() + 
        (radius/lngConv * Math.sin(i * Math.PI/180)));
            points.push(pint);
            bounds.extend(pint);
        }
        points.push(points[0]);
        liWidth = liWidth||2;
        var poly = new GPolygon(points,liColor,liWidth,liOpa,fillColor,fillOpa);
        if(givePoints != null){
            return bounds;
        }
        return poly;
    }