//
// Validation definitions
//

var lang = "en";
var valFrm = new Array();

// CMS

valFrm['search'] =		[['id','s']];

valFrm['newsletter'] =	[['email','e']];

valFrm['comment'] =		[['name','s'],
						['contact','s'],
						['checkcontact','s'],
						['txt','s']];

valFrm['contact'] =		[['name','s'],
						['reply','e'],
						['msg','s']];

valFrm['login'] =		[['username','s'],
						['password','s']];

valFrm['blog'] =		[['catId','d'],
						['header','s'],
						['txt','s']];

valFrm['categories'] =	[['title','s']];

valFrm['adds'] =		[['title','s']];

valFrm['pages'] =		[['title','s'],
						['txt','s']];
						
valFrm['links'] =		[['title','s'],
						['link','s']];
						
valFrm['users'] =		[['name','s'],
						['username','s'],
						['password','s']];
						
valFrm['newsletter_blocks'] = '';
									
							
//
// Validate function
//

function validateFrm(frmObj,fid) {
	var frmElm;
	var errorMsg = '';
	var valArr = valFrm[fid];	
	if (valArr==undefined) return true;

	for (var eCnt=0; eCnt<valArr.length&&errorMsg==''; eCnt++) {
		eval('frmElm = frmObj.'+valArr[eCnt][0]);
		if (frmElm==undefined) continue;
		if (frmElm.disabled) continue;
		// Check pending on type
		switch(valArr[eCnt][1]) {
		case "s": // String
			errorMsg = chkStr(frmElm.value);		
			break;	
		case "u": // Upload
			errorMsg = chkUpload(frmElm.value);		
			break;
		case "n": // Number
			errorMsg = chkNumber(frmElm.value);
			break;	
		case "e": // Email
			errorMsg = chkEmail(frmElm.value);
			break;																
		case "d": // Dropdown
			errorMsg = chkSelect(frmElm);		
			break;	
		case "l": // Listbox
			errorMsg = chkListbox(frmElm);		
			break;			
		case "r": // Radio Group
			errorMsg = chkRadio(frmElm);		
			break;		
		case "c": // Checkbox
			errorMsg = chkCheckbox(frmElm);		
			break;	
		case "y": // Date
			errorMsg = chkDate(frmElm.value);		
			break;		
		case "t": // Time
			errorMsg = chkTime(frmElm.value);		
			break;															
		}
	}

	if (errorMsg!='') {
		alert(errorMsg);
		if (frmElm.type!=undefined) frmElm.focus();
		return false;	
	}
	
	// Return if form is from the website
	if (fid=='search'||fid=='newsletter'||fid=='login'||fid=='newsletter_blocks') {
		// Enable all elements, but disable all buttons
		enableElements(frmObj);
		disableButtons(frmObj);
		return true;
	}	
	
	// Confirm update
	if (!confirmUpdate()) return false;
	
	// Enable all elements, but disable all buttons
	enableElements(frmObj);
	disableButtons(frmObj);
	
	return true;
}

//
// Element check functions
//

function chkStr(str) {
	if (str.length>0) return '';
	else return (lang=='da') ? 'Udfyld venligst dette felt.' : 'Please fill in this field.';
}

function chkUpload(str) {
	if (str.length>0) return '';
	else return (lang=='da') ? 'Upload venligst en file fra dette felt.' : 'Please upload a file from this field.';
}

function chkNumber(str) {
	if (!isNaN(str) && str != '') return '';
	else return (lang=='da') ? 'Udfyld venligst dette felt med et tal.\nBrug punktum som eventuel decimal seperator!' : 'Please fill out this field with a number.\nUse (.) as seperator!';
}

function chkEmail(str) {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,5})$/;
   if(reg.test(str)) return '';
   else return (lang=='da') ? 'Indtast venligst en gyldig email adresse.' : 'Please fill in a valid e-mail address.';
}

function chkSelect(elm) {
	var selIndex = elm.selectedIndex;
	var val = (selIndex>0) ? elm.options[selIndex].value : '';
	if (val.length>0) return '';
	else return (lang=='da') ? 'Vælg venligst en mulighed fra denne dropdown.' : 'Please choose an option from this dropdown.';
}

function chkListbox(elm) {
	if (elm.options.length>0) return '';
	else return (lang=='da') ? 'Tilføj venligst en mulighed til denne listbox.' : 'Please add an option from this listbox.';
}

function chkRadio(radioGrp) {
	var selRadio = false;
	for (var rgCnt=0; rgCnt<radioGrp.length; rgCnt++) {
		if (radioGrp[rgCnt].checked) 
			selRadio = true;
	}
	if (selRadio) return '';
	else return (lang=='da') ? 'Vælg venligst en mulighed fra radio knapperne.' : 'Please choose an option from this group.';
}

function chkCheckbox(elm) {
	if (elm.checked) return '';
	else return (lang=='da') ? 'Sæt flueben i boxen.' : 'Please check this box.';	
}

function chkDate(str) {
	var error = '';
	var dateArr = str.split('-');
	if (str.length<10) error = 'forkert format';
	else if (str.charAt(2)!='-'||str.charAt(5)!='-') error = 'dash (-) is missing';
	else if (isNaN(dateArr[0])) error = 'bogstav fundet i dagen';	
	else if (isNaN(dateArr[1])) error = 'bogstav fundet i måneden';
	else if (isNaN(dateArr[2])) error = 'bogstav fundet i året';
	if (error) return 'Brug venligst følgende format: dd-mm-yyyy (' + error + ')';
	else return '';
}

function chkTime(str) {
	var error = '';
	var timeArr = str.split(':');
	if (str.length==0) return '';
	else if (str.length<5) error = 'forkert format';
	else if (str.charAt(2)!=':') error = 'kolon (:) mangler';
	else if (isNaN(timeArr[0])) error = 'bogstav fundet i timen';
	else if (isNaN(timeArr[1])) error = 'bogstav fundet i minutterne';	
	if (error) return 'Brug venligst følgende format: hh:mm (' + error + ')';	
	else return '';
}

//
// Set date format (helper)
//

function setDateFormat(elmObj) {
	var dateStr = elmObj.value;
	if (chkDate(dateStr)!='') {
		dateStr = dateStr.split('-').join('');
		var d = new Date();
		var day = dateStr.substr(0,2);
		var month = dateStr.substr(2,2);		 
		var year = d.getFullYear();		
		if (dateStr.substr(4,2).length == 2) year = '20' + dateStr.substr(4,2);
		if (dateStr.substr(4,4).length == 4) year = dateStr.substr(4,4);
		if (day.length>0&&month.length>0) elmObj.value = day + '-' + month + '-' + year;
	}
}

//
// Confirm update
//

function confirmUpdate() {
	var urlStr = window.location.href;
	if (urlStr.indexOf('com=new') == -1) {
		var msg = (lang=='da') ? 'Bekræft?' : 'Confirm?';
		if (confirm(msg)) return true
		else return false;
	}
	return true;
}

//
// Enable elements
//

function enableElements(frmObj) {
	for (var i=0;i<frmObj.length;i++) {
		var frmElm = frmObj.elements[i];
		frmElm.disabled = false;
	}		
}

//
// Disable buttons
//

function disableButtons(frmObj) {
	for (var i=0;i<frmObj.length;i++) {
		var frmElm = frmObj.elements[i];
		if (frmElm.type == 'submit' || frmElm.type == 'button') {
			var label = (lang=='da') ? 'Vent...' : 'Wait...';
			frmElm.value = label;
			frmElm.disabled = true;
		}
	}	
}

//
// Server error checking
//

function catchMsg() {
	var queryStr = window.location.search.substring(1);
	var msgPos = queryStr.indexOf('msg');
	if (msgPos != -1) {
		var msgStr = queryStr.substr(msgPos+4);
		alert(decodeURIComponent(msgStr));
	}
}
