/*
 * Polymorph CMS
 * Copyright (c) 2008 Mario Smeritschnig, Ingo Smeritschnig, Polymorph OG
 *
 * * * BEGIN LICENCE * * *
 *
 * This file is part of Polymorph CMS. Polymorph CMS is a proprietary Software.
 * 
 * The software publisher (Polymorph OG) grants a license to use one copy of the
 * software to each customer who purchased a Website based on Polymorph CMS, but 
 * the ownership of this copy remains with the software publisher.
 * It is strongly prohibited to copy, modify, publish, redistribute or reverse
 * engineer any parts of the source code. It is also prohibited to use any 
 * portions (functions, classes, methods, includes) of the source code for any
 * purpose.
 * 
 * Polymorph CMS is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
 *
 * * * END LICENCE * * *
 *
 */
 
function trim(txt) {
	txt = txt.replace(/^\s+/, "");
	txt = txt.replace(/\s+$/, "");			
	return txt;
}


var hlang = new Array();
hlang["de"] = new Array();
hlang["en"] = new Array();

hlang["de"][0] = "Bitte fuellen Sie das Feld '$1' aus.";
hlang["en"][0] = "Please fill in the field '$1'.";
hlang["de"][1] = "Im Feld '$1' sind nur Zahlen erlaubt.";
hlang["en"][1] = "You have to input a number in field '$1'.";
hlang["de"][2] = "Im Feld '$1' muss ein Datum\nder Form TT.MM.JJJJ eingegeben werden.";
hlang["en"][2] = "The field '$1' must contain a date of the format dd.mm.yyyy.";
hlang["de"][3] = "Im Feld '$1' muss ein Geldbetrag mit\nhoechstens 2 Kommastellen eingegeben werden.";
hlang["en"][3] = "The field '$1' must contain a money amount with no more than 2 decimal places.";
hlang["de"][4] = "Im Feld '$1' muss eine gültige E-Mail Adresse eingegeben werden.";
hlang["en"][4] = "The field '$1' must contain a valid E-mail address.";
hlang["de"][5] = "Im Feld '$1' muss eine Uhrzeit\nder Form HH:MM eingegeben werden.";
hlang["en"][5] = "The field '$1' must contain a time of the format hh:mm";
hlang["de"][6] = "Im Feld '$1' muss eine Uhrzeit\nder Form HH:MM eingegeben werden.\nEs kann optional ein Vorzeichen (+ oder -) vorangestellt werden.";
hlang["en"][6] = "The field '$1' must contain a time of the format hh:mm.\nYou can optionally use a preceding sing (+ or -).";
hlang["de"][7] = "Im Feld '$1' muss eine gültige URL eingegeben werden.";
hlang["en"][7] = "The field '$1' must contain a valid URL.";

var actlang = "de";
if(typeof lang != "undefined") actlang = lang;


function gettext(nr, field) {
	if(field == null) return hlang[actlang][nr];
	else return hlang[actlang][nr].replace("$1", field);
}

var TEXT = 0;
var ZAHL = 1;
var DATUM = 2;
var GELD = 3;
var EMAIL = 4;
var ZEIT = 5;
var ZEIT_SIGNED = 6;
var URL = 7;

function checkText(txtID, beschriftung, darfLeerSein, type) {
	var preis;
	var zeit;
	var textFeld = document.getElementById(txtID);
			
	var txt = trim(textFeld.value);
	var number = parseInt(txt);

	if(!darfLeerSein && txt.length == 0) {
		alert(gettext(0, beschriftung));
		textFeld.focus();
		return false;
	}
	if(type==ZAHL  && txt != "" && isNaN(number)) {
		alert(gettext(1, beschriftung));
		textFeld.focus();
		textFeld.select();				
		return false;
	}
	if(type==DATUM  && txt != "" && checkDate(txt) == false) {
		alert(gettext(2, beschriftung));
		textFeld.focus();
		textFeld.select();				
		return false;
	}	
	if(type==GELD && txt != "" && (preis = checkPreis(txt)) == false) {
		alert(gettext(3, beschriftung));
		textFeld.focus();
		textFeld.select();				
		return false;
	}
	if(type==EMAIL && txt != "" && checkEMail(txt) == false) {
		alert(gettext(4, beschriftung));
		textFeld.focus();
		textFeld.select();				
		return false;
	}
	if(type==ZEIT  && txt != "" && checkTime(txt) == false) {
		alert(gettext(5, beschriftung));
		textFeld.focus();
		textFeld.select();				
		return false;
	}
	
	if(type==ZEIT_SIGNED  && txt != "" && (zeit = checkTimeSigned(txt)) == false) {
		alert(gettext(6, beschriftung));
		textFeld.focus();
		textFeld.select();				
		return false;
	}
	
	if(type==URL  && txt != "" && isUrl(txt) == false) {
		alert(gettext(7, beschriftung));
		textFeld.focus();
		textFeld.select();				
		return false;
	}
			
	if(type == ZAHL && txt != "") textFeld.value = number;
	else if(type == GELD && txt != "") textFeld.value = preis;
	else if(type == ZEIT_SIGNED && txt != "") textFeld.value = zeit;
	else textFeld.value = txt;
	return true;
}




function checkPreis(preis) {
	var parts;
	
	parts = preis.split(',');
	if(parts.length < 2) parts = preis.split('.');
	if(parts.length > 2) return false;
	if(parts.length == 1 && istZahl(preis)) {
		return parseInt(preis)+",00";
	} else if(istZahl(parts[0]) && istZahl(parts[1])) {
		var fp = parseInt(parts[1]);
		var fps;
		if(fp > 99) return false;
		if(parts[1].length == 1) fps = fp + "0";
		else fps = parts[1];
		return parseInt(parts[0]) + "," + fps;
	}
	return false; 
}

function isChecked(checkBoxId) {
	var cb = document.getElementById(checkBoxId);
	return cb.checked;
}


function istZahl(z) {
	var num = parseInt(z,10);
	return !isNaN(num);
}
/*
function checkDate(d) {
	var parts = d.split(".");
	if(parts.length != 3) return false;
	else if(parts[0].length != 2 || parts[1].length != 2 || parts[2].length != 4) return false;
	else if(isNaN(parseInt(parts[0])) || isNaN(parseInt(parts[1])) || isNaN(parseInt(parts[2]))) return false;
	else if(parseInt(parts[0]) > 31 || parseInt(parts[1]) > 12 || parseInt(parts[2]) > 2100) return false;
	return true;
}
*/

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function DaysArray(year) {
	for (var i = 1; i <= 12; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = daysInFebruary(year)}
   	} 
   	return this
}

function checkDate(dtStr){
	var parts = dtStr.split(".");
	if(parts.length != 3) return false;
	
	var strDay=parts[0];
	var strMonth=parts[1];
	var strYear=parts[2];

	if(!istZahl(strDay) || !istZahl(strMonth) || !istZahl(strYear)) return false;

	day=parseInt(strDay,10)
	month=parseInt(strMonth,10)
	year=parseInt(strYear,10)

	var daysInMonth = DaysArray(year)
	
	if(year<1000 || year>9999) {
		//alert("Please enter a valid year")
		return false;
	}
	if (month<1 || month>12){
		//alert("Please enter a valid month")
		return false
	}
	if (day<1 || day > daysInMonth[month]){
		//alert("Please enter a valid day: "+day+" - "+dtStr)
		return false
	}
	
	return true
}

function checkTime(tStr) {
	var parts = tStr.split(":");
	if(parts.length < 2) return false;
	
	var strH=parts[0];
	var strM=parts[1];
	
	if(!istZahl(strH) || !istZahl(strM)) return false;

	var hours=parseInt(strH,10)
	var minutes=parseInt(strM,10)

	if(hours<0 || hours>24) return false;
	if (minutes<0 || minutes>59) return false

	return tStr;

}

function checkTimeSigned(tStr) {
	var vz = tStr.substr(0,1);
	if(vz=="+") return checkTime(trim(tStr.substr(1)));
	else if(vz=="-") {
		var t = checkTime(trim(tStr.substr(1)));
		if(t!=false) return "-"+t;
		else return false;
	} else return checkTime(tStr);
}

function checkEMail(email)  {
	var eParts = email.split("@");
	var eParts1;
	if(eParts.length == 2) {
		eParts1 = eParts[1].split(".");
		if(eParts[0].length == 0 || eParts1.length < 2 || eParts1[0].length == 0 || eParts1[1].length == 0) return false;
	} else return false;
	return true;
}

function selectCombo(comboID, value) {
	var i = 0;
	var combo = document.getElementById(comboID);
	var anz = combo.options.length;
	while(i < anz && combo.options[i].value != value) i++;
	if(i < anz) combo.selectedIndex = i;
}
		
function isAOptionChecked(optionName, msg) {
	var o = document.getElementsByName(optionName);
	var anz = o.length;
	var i = 0;
	while(i < anz && o[i].checked == false) i++;
	if(i == anz) {
		alert(msg);
		return false;
	}
	return true;
}

function isUrl(s) {
	var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
	return regexp.test(s);
}


function checkmce(name) {
	 var c = tinyMCE.get(name).getContent();
	 c = c.replace(/<[^>]+>/g, '');
	 c = trim(c);
	 return c.length>0;
}
