msgStrings = new Object();

msgStrings["uk"] = new Object();
msgStrings["uk"]["errPeopleNum"]    = 'You have to enter the number of people';
msgStrings["uk"]["errPeopleMax"]    = 'Sorry, only !PEOPLE! people are allowed';
msgStrings["uk"]["errDate"]         = 'Sorry, the start date needs to be before the end date';
msgStrings["uk"]["errNotAvailable"] = 'Sorry, the house is not available';
msgStrings["uk"]["errMailAddress"]  = 'Sorry, the format of your email address is not correct';
msgStrings["uk"]["errEmptyField"]   = 'Sorry, you have to fill in the field !FIELD!';
msgStrings["uk"]["errGC"]           = 'You have to agree to the letting conditions';

msgStrings["nl"] = new Object();
msgStrings["nl"]["errPeopleNum"]    = 'U moet het aantal personen invullen';
msgStrings["nl"]["errPeopleMax"]    = 'Sorry, slechts !PEOPLE! personen toegestaan';
msgStrings["nl"]["errDate"]         = 'Sorry, de aankomstdatum moet voor de vertrekdatum liggen';
msgStrings["nl"]["errNotAvailable"] = 'Sorry, de woning is niet beschikbaar';
msgStrings["nl"]["errMailAddress"]  = 'Sorry, uw emailadres is niet correct';
msgStrings["nl"]["errEmptyField"]   = 'Sorry, u moet het veld !FIELD! invullen';
msgStrings["nl"]["errGC"]           = 'U moet akkoord gaan met de verhuurvoorwaarden';
    
function getBookedWeeks (fId, dateStart, dateEnd)
{
    var weeksBooked = new Array();
    var dateCur     = dateStart;
    while (dateCur < dateEnd) {
        // Datum anhängen
        weeksBooked.push(dateCur);
        // Datum um 7 Tage erhöhen (mit DATE Objekt)
        var myYear  = Number(dateCur.substr(0, 4));
        var myMonth = Number(dateCur.substr(4, 2));
        var myDay   = Number(dateCur.substr(6, 2)); 
        var foo     = new Date(myYear, myMonth-1, myDay+7);
        // DATE-Objekt als Stamp speichern
        dateCur = (foo.getFullYear()).toString() + LZ((foo.getMonth()+1).toString()) + LZ((foo.getDate()).toString());
    }
    
    return weeksBooked;
}    

function calcMortgage (fId)
{
    priceinput = document.getElementById('sale_price_' + fId).value;
    year_term = document.getElementById('year_term_' + fId).value;	
    percent_year = document.getElementById('percent_year_' + fId).value;

    if (priceinput && year_term && percent_year) {
    	percent_year = percent_year.replace(/,/, '.');
    	priceinput = priceinput.substr(2, (priceinput.length - 4));
    	while (priceinput.indexOf('.') > -1)
    		priceinput = priceinput.replace(/\./, '');
    	rate_year = percent_year / 100;
    	rate_month = rate_year / 12;
    	financing_price = priceinput;
    	monthly_factor = getInterestFactor(year_term, rate_month);
    	result = financing_price / monthly_factor;
    	interest = (result*12*year_term) - financing_price;
    	result = convertToCurrency(Math.round(result));
    	interest = convertToCurrency(Math.round(interest));
    } else {
    	result = interest = 'Error';
    }

    //document.getElementById('mortgage_spacer_' + fId).style.display = "none";						
    //document.getElementById('mortgageInterest').innerHTML = interest;
    //document.getElementById('mortgageResult').innerHTML = result;
    //document.getElementById('contentMortgageResult_' + fId).style.display = "inline";
}

function calcRentalPrice (fId, dateStart, dateEnd) 
{
    var prefix          = 'lett_' + fId + '[periods][';
    var suffix          = '][]';
    
    // Alle Wochen im angezeigten Format ermitteln
    var weeksBooed = getBookedWeeks(fId, dateStart, dateEnd);

    // Angezeigte Perioden unter "Prices" als Stamps speichern
    var priceSum    = 0.0;
    var weeks       = new Array();
    for (i = 1; i <= 6; i++) {
        // Daten aus HTML extrahieren
        var rawLabel    = document.getElementById('lett_' + fId + '[periods][' + i + '][label]').innerHTML;
        var rawPrice    = document.getElementById('lett_' + fId + '[periods][' + i + '][price]').innerHTML;        
        // Daten konvertieren
        var weekStart   = '20' + rawLabel.substr(6, 2) + rawLabel.substr(3, 2) + rawLabel.substr(0, 2);
        var weekEnd     = '20' + rawLabel.substr(17, 2) + rawLabel.substr(14, 2) + rawLabel.substr(11, 2);     
        // Preis konvertieren
        var price = convertToStringFromCurrency(rawPrice);
        // Alle gebuchten Wochen durchgehen und schauen, ob in der Spanne enthalten
        for (j = 0; j < weeksBooked.length; j++) {
            if ((weeksBooked[j] >= weekStart) && (weeksBooked[j] < weekEnd)) {
                priceSum += Number(price);
            }
        }
    }
    
    return priceSum;
}

function calcTotalPrice (fId, dateStart, dateEnd)
{
    var prefix  = 'lett_' + fId;
    var price   = calcRentalPrice(fId, dateStart, dateEnd);

    price  += Number(convertToStringFromCurrency(document.getElementById(prefix + '[priceCleaning]').value));
    if (document.getElementById(prefix + '[linen]').checked) {
        price  += Number(convertToStringFromCurrency(document.getElementById(prefix + '[priceLinen]').value));
    }
    if (document.getElementById(prefix + '[childbed]').checked) {
        price  += Number(convertToStringFromCurrency(document.getElementById(prefix + '[priceChildbed]').value));
    }
    if (document.getElementById(prefix + '[childchair]').checked) {
        price  += Number(convertToStringFromCurrency(document.getElementById(prefix + '[priceChildchair]').value));                    
    }
    
    return price;
}

function changeDetailContent (fId, contentToShow)
{
	fields = new Array('Data', 'Contact', 'Mortgage');
	
	for (i = 0; i < fields.length; i++) 
		document.getElementById('content' + fields[i] + '_' + fId).style.display = "none";
		
	document.getElementById('content' + contentToShow + '_' + fId).style.display = "inline";
	
	//document.getElementById('contentMortgageResult_' + fId).style.display = "none";
	document.getElementById('btnContactBack_' + fId).style.display = "none";			
	document.getElementById('btnMortgageBack_' + fId).style.display = "none";	
	//document.getElementById('mortgage_spacer_' + fId).style.display = "inline";						
	document.getElementById('btnContact_' + fId).style.display = "inline";			
	document.getElementById('btnMortgage_' + fId).style.display = "inline";		
	if (contentToShow != 'Data') {
		document.getElementById('btn' + contentToShow + '_' + fId).style.display = "none";			
		document.getElementById('btn' + contentToShow + 'Back_' + fId).style.display = "inline";			
	}
}

function changeDetailContentLett (fId, contentToShow)
{
	fields = new Array('Details', 'Prices', 'PricesYear1', 'PricesYear2', 'Availability', 'Book1', 'Book2', 'Book3', 'Book4', 'Book1Btn', 'Book2Btn', 'Book3Btn', 'Book4Btn');
	
	changeDetailContentLettAvailability(fId, 'hide');
	
	for (i = 0; i < fields.length; i++) {
		if (document.getElementById('content' + fields[i] + '_' + fId)) {
		    document.getElementById('content' + fields[i] + '_' + fId).style.display = "none";
		}
	}
		
	if (contentToShow.substr(0, 4) == 'Book') {
	    document.getElementById('content' + contentToShow + '_' + fId).style.display = "block";
	    document.getElementById('content' + contentToShow + 'Btn' + '_' + fId).style.display = "block";
	} else {
	    document.getElementById('content' + contentToShow + '_' + fId).style.display = "inline";	    
	}
	
	if (contentToShow == 'Prices') {
	    selectBox = document.getElementById('priceYear_' + fId);
	    valueYear = selectBox.options[selectBox.selectedIndex].value;
	    document.getElementById('contentPrices' + valueYear + '_' + fId).style.display = 'inline';
	}
	if (contentToShow == 'PricesYear1') {
	    document.getElementById('contentPrices' + '_' + fId).style.display = 'inline';
	    document.getElementById('contentPricesYear2' + '_' + fId).style.display = 'none';
	}
	if (contentToShow == 'PricesYear2') {
	    document.getElementById('contentPrices' + '_' + fId).style.display = 'inline';
	    document.getElementById('contentPricesYear1' + '_' + fId).style.display = 'none';
	}
	if (contentToShow == 'Availability') {
	    changeDetailContentLettAvailability(fId, 'show');
	}
}

function changeDetailContentLettAvailability (fId, contentToShow) 
{   
    boxMonth = document.getElementById('availMonth_' + fId);
    valueMonth = boxMonth.options[boxMonth.selectedIndex].value;
    boxYear = document.getElementById('availYear_' + fId);
    valueYear = boxYear.options[boxYear.selectedIndex].value;    
    
    if ((contentToShow == 'hide') || (contentToShow == 'Availability')) {
        for (i = 1; i <= 12; i++) {
            document.getElementById('contentAvailability' + '_' + i + '-Year1' + '_' + fId).style.display = 'none';
            document.getElementById('contentAvailability' + '_' + i + '-Year2' + '_' + fId).style.display = 'none';
        }
    }
    
    if ((contentToShow == 'show') || (contentToShow == 'Availability'))
        document.getElementById('contentAvailability' + '_' + valueMonth + '-' + valueYear + '_' + fId).style.display = 'inline';
}

function chkBook1 (fId)
{
    var errorMsg        = "";
    var lang            = document.getElementById('lang_' + fId).value;
    var prefix          = 'lett_' + fId;

    var peopleMaxRaw    = document.getElementById(prefix + '[people_max]').innerHTML;
    var peopleMax       = Number(peopleMaxRaw.match(/\d./));
    var peopleNum       = Number(document.getElementById(prefix + '[people_num]').value);
    
    var dateStartBox    = document.getElementById(prefix + '[date_start]');
    var dateStart       = dateStartBox.options[dateStartBox.selectedIndex].value;
    var dateEndBox      = document.getElementById(prefix + '[date_end]');
    var dateEnd         = dateEndBox.options[dateEndBox.selectedIndex].value;    
    
    if (!peopleNum) {
        errorMsg   += "- " + msgStrings[lang]["errPeopleNum"] + "\n";
    }
    if (peopleNum > peopleMax) {
        errorMsg   += "- " + msgStrings[lang]["errPeopleMax"].replace(/!PEOPLE!/, peopleMax) + "\n";
    }
    if (dateStart >= dateEnd) {
        errorMsg   += "- " + msgStrings[lang]["errDate"] + "\n";
    } else { // Verfügbarkeit anhang der CSS-Klassenamen im Kalender überprüfen
        for (i = dateStart; i <= dateEnd; i++) {
            var key = prefix + '[' + i + ']';
            var classFoo = '';
            if (document.getElementById(key)) {
                classFoo = document.getElementById(key).className;
                if (classFoo.search(/.+Blocked/) != -1) {
                    errorMsg += "- " + msgStrings[lang]["errNotAvailable"] + "\n";
                    break;
                }
            }
        }
        
    }

    if (errorMsg.length > 0) {
        alert(errorMsg);
    } else {
        continueBooking(2, fId);
    }
}

function chkBook2 (fId)
{
    continueBooking(3, fId);
}

function chkBook3 (fId)
{
    var fields          = new Array('Name', 'Adress', 'Postcode', 'Town', 'Country', 'Mail', 'Mobile');
    var errorMsg        = "";
    var lang            = document.getElementById('lang_' + fId).value;    
    var prefix          = 'lett_' + fId;
    
    for (i = 0; i < fields.length; i++) {
        var box = document.getElementById(prefix + '[' + (fields[i]).toLowerCase()  + ']');
        if (fields[i] == 'Mail') {
            var result      = box.value.search(/(.{2,})(@)(.+)(\.)(\w){2,4}/i);
            if (result != 0) {
                errorMsg += "- " + msgStrings[lang]["errMailAddress"] + "\n";
            }
        }
        if (box.value == '') {
            errorMsg += "- " + msgStrings[lang]["errEmptyField"].replace(/!FIELD!/, fields[i]) + "\n";
        }
    }
    
    if (errorMsg.length > 0) {
        alert(errorMsg);
    } else {
        continueBooking(4, fId);
    }
}

function chkBook4 (fId)
{
    var lang            = document.getElementById('lang_' + fId).value;    

    if (document.getElementById('lett_' + fId + '[gc_confirm]').checked) {
        return true;
    } else {
        alert(msgStrings[lang]["errGC"]);
        return false;
    }
}

function chkSrcMisc (value)
{
	if (value == 4) 
		disable = false;
	else
		disable = true;
	document.getElementById('src_misc').disabled = disable;
}

function changeDetailPic (nr, id, newSrc) 
{
	srcBig = document.images['foto_' + id + '_1'].src;
	document.images['foto_' + id + '_1'].src = newSrc;
	document.images['foto_' + id + '_' + nr].src = srcBig;
}

function changeBookingObj (objId)
{
    newUrl = 'index.php?action=bookings&objId=' + objId;
    
    window.location.href = newUrl;
}

function changePropType (action, objId, type)
{
    newUrl = 'index.php?action=properties&do=' + action + '&objId=' + objId + '&type=' + type;

    window.location.href = newUrl;    
}

function continueBooking (step, fId)
{
    var prefix          = 'lett_' + fId;
    var dateStartBox    = document.getElementById(prefix + '[date_start]');
    var dateStart       = dateStartBox.options[dateStartBox.selectedIndex].value;
    var dateStartText   = dateStartBox.options[dateStartBox.selectedIndex].text;    
    var dateEndBox      = document.getElementById(prefix + '[date_end]');
    var dateEnd         = dateEndBox.options[dateEndBox.selectedIndex].value;
    var dateEndText     = dateEndBox.options[dateEndBox.selectedIndex].text;    
    
    switch (step) {
        case 2:
            weeksBooked     = getBookedWeeks(fId, dateStart, dateEnd);
            weeksCnt        = weeksBooked.length;
            priceLinen      = convertToStringFromCurrency(document.getElementById(prefix + '[priceLinenBase]').value) * document.getElementById(prefix + '[people_num]').value;
            priceChildbed   = convertToStringFromCurrency(document.getElementById(prefix + '[priceChildbedBase]').value) * weeksCnt;
            priceChildchair = convertToStringFromCurrency(document.getElementById(prefix + '[priceChildchairBase]').value) * weeksCnt;            
            document.getElementById(prefix + '[priceLinen]').value      = convertToCurrency(priceLinen);
            document.getElementById(prefix + '[priceChildbed]').value   = convertToCurrency(priceChildbed);
            document.getElementById(prefix + '[priceChildchair]').value = convertToCurrency(priceChildchair);
            document.getElementById(prefix + '[priceRental]').value     = convertToCurrency(calcRentalPrice(fId, dateStart, dateEnd));
            document.getElementById(prefix + '[priceTotal]').value      = convertToCurrency(calcTotalPrice(fId, dateStart, dateEnd));                
            break;
        case 4:
            document.getElementById(prefix + '[fullname]').innerHTML = document.getElementById(prefix + '[name]').value;
            document.getElementById(prefix + '[date_start_confirm]').innerHTML  = dateStartText;
            document.getElementById(prefix + '[date_end_confirm]').innerHTML    = dateEndText;            
            document.getElementById(prefix + '[people_num_confirm]').innerHTML  = document.getElementById(prefix + '[people_num]').value;
            document.getElementById(prefix + '[priceTotal_confirm]').innerHTML  = document.getElementById(prefix + '[priceTotal]').value;            
            break;
    }

    if (document.getElementById('contentBook' + step + '_' + fId).style.display == 'none')
        changeDetailContentLett(fId, 'Book' + step);
}

function convertToCurrency (num)
{
	var newNum = new Array(num.length);
	var num = num.toString();
	
	num = num.replace(/\./, ',');  
	
	for (i = num.length - 1, j = 1; i >= 0; i--, j++) {
		newNum.push(num.charAt(i));
		if (!(j % 3) && i && num.charAt(i) != ',')
			newNum.push('.');
		if (num.charAt(i) == ',')
		    j = 0;		
	}
	
	newNum.reverse();
	
	if (num.indexOf(',') == -1) 
	    return '€ ' + newNum.join('') + ',-';
	else 
	    return '€ ' + newNum.join('');
}

function convertToStringFromCurrency (currency) 
{
    if (currency.indexOf('-') == -1) {
        var myString = currency.substr(2, (currency.length - 2));
    } else {
        var myString = currency.substr(2, (currency.length - 4));
    }

    myString = myString.replace(/\./, '');
    myString = myString.replace(/,/, '.');    
    //alert('!'+myString+'!');
    return myString;
}

function getInterestFactor (year_term, monthly_rate)
{
    factor      = 0;
    base_rate   = 1 + monthly_rate;
    denominator = base_rate;
    for (i = 0; i < (year_term * 12); i++) {
        factor += (1 / denominator);
        denominator *= base_rate;
    }
    return factor;
}

function LZ (foo) 
{
    if (foo.length == 1)
        return '0'+foo;
    else
        return foo;
}

function reloadObjects (key, value, reset)
{
	curUrl = window.location.href;
	
	parts = curUrl.split(key);
	
	if (reset) {
		newUrl = 'index.php?action=realestate&sub=properties&' + key + '=' + value;
	} else if (parts.length == 1)
		newUrl = curUrl + '&' + key + '=' + value;
	else {
		if (parts[1].indexOf('&') == -1) {
			newUrl = parts[0] + key + '=' + value;
		} else {
			endOfPart1 = parts[1].indexOf('&');
			newPart1 = parts[1].substr(endOfPart1, (parts[1].length - endOfPart1));
			newUrl = parts[0] + key + '=' + value + newPart1;
		}
	}
	
	window.location.href = newUrl;
}

function toggleDiv (prefix, field, cnt)
{
    if (field) {
	    for (i = 1; i <= cnt; i++) {
		    if (i != field)
			    document.getElementById(prefix + i).style.display = "none";
	      }   
		
	      curStatus = document.getElementById(prefix + field).style.display;
	
	    if (curStatus == "inline")
	        document.getElementById(prefix + field).style.display = "none";
	    else
	        document.getElementById(prefix + field).style.display = "inline";
    }
}
