 /*****************************************************
 * Generic validation functions
 *****************************************************/
function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) { return false; }
    }
    // All characters are numbers.
    return true;
}

function isValidEmail(value) {
	var emailFilter=/^.+@.+\..{2,}$/;
	var ret = false;
	if ((value.length > 0) && emailFilter.test(value))  {ret = true;}

	return ret;
}

function isValidFile(value, ext) {
	var fileFilter=  new RegExp("[^\.]\."+ext.toLowerCase() +"\s*$");
	var ret = false;
	if ((value.length > 0) && fileFilter.test(value.toLowerCase())) {ret = true;}

	return ret;
}


function isFieldSquareAdrress(value) {
	var illegalChars= /[^a-zA-Z0-9_-]/;
	return (value.length > 0 && value.length <=20 && !value.match(illegalChars));
}


function isFieldValid(value) {
	var tmp = trim(value);
	return (tmp.length);
}

function isComboValid(value) {
	return (value.length > 0 && parseInt('0' + value, 10) > 0);
}

function showError(control, msg) {
	var errorNode =  control.parentNode.getElementsByTagName("EM")[0];
	errorNode.className = "error";
	errorNode.innerHTML = " " + msg;
	return false;
}

function showOK(control, msg) {
	var okNode =  control.parentNode.getElementsByTagName("EM")[0];
	okNode.className = "ok";
	okNode.innerHTML = " " + msg;
}

function compareFields(field1, field2) {
	var ret = false;
	if (field1.value == field2.value) {
		ret = true;
	}
	return ret;
}

function checkSelectionList(list) {
	var ret = false;
	for (i=0;i< list.length; i++) {
		if (list[i].checked) {ret=true;}
	}
	return ret;
}

function isValidDate(year, month, day) {
	ret = isDate(month +"/" + day + "/" + year);
	return ret;
}

function validateEmailUniqueness(email) {
	var ret = false;

	var connector = new AjaxConnector();
	var s = new Service("A0-003", oEnviroment.getServicePath() + oEnviroment.getServletName(), oEnviroment.getUser().getSID());
	s.addParameter("language", oEnviroment.getLanguage().getID());
	s.addParameter("email", email);

	s = connector.syncRun(s);
	if (s !==null) {
		if (!s.getResult().hasErrors()) { ret=true; }
	}
	return ret;
}

function validateURLUniqueness(url) {
	var ret = false;

	var connector = new AjaxConnector();
	var s = new Service("A0-004", oEnviroment.getServicePath() + oEnviroment.getServletName(), oEnviroment.getUser().getSID());
	s.addParameter("language", oEnviroment.getLanguage().getID());
	s.addParameter("url", url);

	s = connector.syncRun(s);
	if (s !==null) {
		if (!s.getResult().hasErrors()) { ret=true; }
	}
	return ret;
}

function validateCAPTCHA(UUID, value) {
	var ret = false;

	if (value.length > 0) {
		var connector = new AjaxConnector();
		var s = new Service("A0-010", oEnviroment.getServicePath() + oEnviroment.getServletName(), oEnviroment.getUser().getSID());
		s.addParameter("language", oEnviroment.getLanguage().getID());
		s.addParameter("captcha", value);
		s.addParameter("internalCode", UUID);

		s = connector.syncRun(s);
		if (s !==null) {
			if (!s.getResult().hasErrors()) { ret=true; }
		}
	}
	return ret;
}

function validateInvitation(code) {
	var ret = false;

	if (code.length > 0) {
		var connector = new AjaxConnector();
		var s = new Service("A0-011", oEnviroment.getServicePath() + oEnviroment.getServletName(), '');
		s.addParameter("language", oEnviroment.getLanguage().getID());
		s.addParameter("invitation", code);

		s = connector.syncRun(s);
		if (s !==null) {
			if (!s.getResult().hasErrors()) { ret=true; }
		}
	}
	return ret;
}

function getValueFromList(list, multiple) {
	var value = '';
	for (i=0;i< list.length; i++) {
		if (list[i].checked) {
			if (multiple) {
				if (value.length > 0) {value += ',';}
				value += list[i].value;
			} else {
				value = list[i].value;
				i = list.length;
			}
		}
	}
	return value;
}

/*****************************************************
 * Signup form validations
 *****************************************************/

function isDate(dtStr){
	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strMonth=dtStr.substring(0,pos1);
	var strDay=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1) {strDay=strDay.substring(1);}
	if (strMonth.charAt(0)=="0" && strMonth.length>1) {strMonth=strMonth.substring(1);}
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) {strYr=strYr.substring(1);}
	}
	month=parseInt(strMonth,10);
	day=parseInt(strDay,10);
	year=parseInt(strYr,10);
	if (pos1==-1 || pos2==-1){
		//alert("The date format should be : mm/dd/yyyy")
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		//alert("Please enter a valid month")
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		//alert("Please enter a valid day")
		return false;
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		//alert("Please enter a valid date")
		return false;
	}
	return true;
}

function validate_signup(frm) {
	var ret = true;

	if (!oEnviroment.isUserLogged()) {
		// Only for sigup
		if (!isValidEmail(frm.field_signup_email.value)) ret = showError(frm.field_signup_email, 'Invalid E-mail address');
		else {
			if (!validateEmailUniqueness(frm.field_signup_email.value)) ret = showError(frm.field_signup_email, 'E-mail address already exists');
			else showOK(frm.field_signup_email, 'OK!');
		}

		if (!isValidEmail(frm.field_signup_cemail.value) || !compareFields(frm.field_signup_email, frm.field_signup_cemail)) ret = showError(frm.field_signup_cemail, 'E-mails must match');
		else showOK(frm.field_signup_cemail, 'OK!');

		if (!isFieldValid(frm.field_signup_pwd.value)) ret = showError(frm.field_signup_pwd, 'Invalid Password');
		else showOK(frm.field_signup_pwd, 'OK!');

		if (!isFieldValid(frm.field_signup_cpwd.value) || !compareFields(frm.field_signup_pwd, frm.field_signup_cpwd)) ret = showError(frm.field_signup_cpwd, 'Passwords must match');
		else showOK(frm.field_signup_cpwd, 'OK!');

		if (!isFieldValid(frm.field_signup_zip.value)) ret = showError(frm.field_signup_zip, 'You must complete the Post Code');
		else showOK(frm.field_signup_zip, 'OK!');


		if (!frm.field_signup_terms.checked) {
			ret = false;
			$('txt_signup_terms').className = 'error';
		} else $('txt_signup_terms').className = '';


		if (!validateInvitation(frm.field_signup_invitation.value)) ret = showError(frm.field_signup_invitation, 'Invalid Invitation ID');
		else showOK(frm.field_signup_invitation, 'OK!');
	}

	if (!isFieldValid(frm.field_signup_nick.value)) ret = showError(frm.field_signup_nick, 'Invalid Nickname');
	else showOK(frm.field_signup_nick, 'OK!');

	if (oEnviroment.isUserLogged()) {
		//if (!isComboValid(frm.display_lang.value)) ret = showError(frm.display_lang, 'Invalid language');
		//else showOK(frm.display_lang, 'OK!');

		if (isFieldValid(frm.field_signup_picture.value)) {
			if (!isValidFile(frm.field_signup_picture.value, 'jpg') && !isValidFile(frm.field_signup_picture.value, 'gif')  && !isValidFile(frm.field_signup_picture.value, 'png')) {
				ret = showError(frm.field_signup_picture, 'Invalid File Format');
			}
		}

		if (!isComboValid(frm.network_type.value)) ret = showError(frm.network_type, 'You must select a profile');
		else showOK(frm.network_type, 'OK!');

		if (!checkSelectionList(frm.signup_category)) ret = showError(frm.signup_category[0], 'One option must be selected');
		else showOK(frm.signup_category[0], 'OK!');

		if ($('sex_container').style.display != 'none') {
			if (!checkSelectionList(frm.signup_sex)) ret = showError(frm.signup_sex[0], 'One option must be selected');
			else showOK(frm.signup_sex[0], 'OK!');
		}


		if (frm.questions.value == 0) {
    		if (!isFieldSquareAdrress(frm.field_signup_aname.value)) ret = showError(frm.field_signup_aname, 'Invalid Address Name');
    		else {
    				if (frm.field_signup_aname.value.length > 20) ret = showError(frm.field_signup_aname, '20 charaters max');
    				else if (frm.field_signup_aname.value != frm.field_signup_aname_copy.value && !validateURLUniqueness(frm.field_signup_aname.value)) ret = showError(frm.field_signup_aname, 'Address Name already exists');
    				else showOK(frm.field_signup_aname, 'OK!');
    		}
		}
	}

	if ($('birthdate_container').style.display != 'none') {
		if (!isValidDate(frm.year.value, frm.month.value, frm.day.value)) ret = showError(frm.day, 'Invalid date');
		else showOK(frm.day, 'OK!');
	}

	if (!isComboValid(frm.country.value)) ret = showError(frm.country, 'Invalid country');
	else showOK(frm.country, 'OK!');

	if (!oEnviroment.isUserLogged() && ret) {
		if (!validateCAPTCHA(frm.field_signup_captchaCode.value, frm.field_signup_captcha.value)) ret = showError(frm.field_signup_captcha, 'Invalid code');
		else showOK(frm.field_signup_captcha, 'OK!');
	}

	return ret;

}

/*****************************************************
 * Uploads form validations
 *****************************************************/

function validate_video(frm) {
	var ret = true;

	if (!isFieldValid(frm.field_video_title.value)) ret = showError(frm.field_video_title, 'This field cannot be empty');
	else showOK(frm.field_video_title, 'OK!');

	if (!isValidDate(frm.year.value, frm.month.value, frm.day.value)) ret = showError(frm.day, 'Invalid date');
	else showOK(frm.day, 'OK!');

	/**
	if (!checkSelectionList(frm.video_category)) {
		if (!isFieldValid(frm.field_video_other.value))	ret = showError(frm.video_category[0], 'One option must be selected');
		else showOK(frm.video_category[0], 'OK!');
	} else showOK(frm.video_category[0], 'OK!');
	*/
	if (frm.field_video_desc.value.length == 0) ret = showError(frm.field_video_desc, 'This field cannot be empty');
	else showOK(frm.field_video_desc, 'OK!');

	var entry_id = oEnviroment.getURLVariable('entry');
	if (!entry_id) {
		if (frm.field_video_upload.value.length == 0) ret = showError(frm.field_video_upload, 'This field cannot be empty');
		else if (!isValidFile(frm.field_video_upload.value, 'mpg') && !isValidFile(frm.field_video_upload.value, 'mpeg') && !isValidFile(frm.field_video_upload.value, 'mov') && !isValidFile(frm.field_video_upload.value, 'avi')  && !isValidFile(frm.field_video_upload.value, 'mp4') && !isValidFile(frm.field_video_upload.value, 'wmv')) {
			ret = showError(frm.field_video_upload, 'Invalid format');
		} else showOK(frm.field_video_upload, 'OK!');
	} else showOK(frm.field_video_upload, 'OK!');
	if (!checkSelectionList(frm.available4others)) ret = showError(frm.available4others[0], 'One option must be selected');
	else showOK(frm.available4others[0], 'OK!');

	return ret;

}

function validate_slide(frm) {
	var ret = true;

	if (!isFieldValid(frm.field_slide_title.value)) ret = showError(frm.field_slide_title, 'This field cannot be empty');
	else showOK(frm.field_slide_title, 'OK!');

	if (!isValidDate(frm.year.value, frm.month.value, frm.day.value)) ret = showError(frm.day, 'Invalid date');
	else showOK(frm.day, 'OK!');

	/**
	if (!checkSelectionList(frm.slide_category)) {
		if (!isFieldValid(frm.field_slide_other.value))	ret = showError(frm.slide_category[0], 'One option must be selected');
		else showOK(frm.slide_category[0], 'OK!');
	} else showOK(frm.slide_category[0], 'OK!');
	*/

	if (frm.field_slide_desc.value.length == 0) ret = showError(frm.field_slide_desc, 'This field cannot be empty');
	else showOK(frm.field_slide_desc, 'OK!');

	if (!checkSelectionList(frm.available4others)) ret = showError(frm.available4others[0], 'One option must be selected');
	else showOK(frm.available4others[0], 'OK!');

	if (!checkSelectionList(frm.available4others)) ret = showError(frm.available4others[0], 'One option must be selected');
	else showOK(frm.available4others[0], 'OK!');

	if (!checkSelectionList(frm.displaysubtitles)) ret = showError(frm.displaysubtitles[0], 'One option must be selected');
	else showOK(frm.displaysubtitles[0], 'OK!');

	if (!checkSelectionList(frm.displayspeed)) ret = showError(frm.displayspeed[0], 'One option must be selected');
	else showOK(frm.displayspeed[0], 'OK!');

	return ret;
}

function validate_slide_upload(frm) {
	var ret = true;

	for (index=1;index<=10; index++) {
		var item = $('field_slide_file' + index);

		if (index == 1) {
			if (item.value.length == 0) ret = showError(item, 'This field cannot be empty');
			else if (!isValidFile(item.value, 'jpg') && !isValidFile(item.value, 'gif')  ) {
				showError(item, 'Invalid format');
				ret = false;
			} else showOK(item, 'OK!');

		} else {
			if (item.value.length > 0) {
				if (!isValidFile(item.value, 'jpg') && !isValidFile(item.value, 'gif')  ) {
					showError(item, 'Invalid format');
					ret = false;
				} else showOK(item, 'OK!');
			}
		}
	}

	return ret;
}

function validate_soundbed_upload(frm) {
	var ret = true;

	if (!isValidFile(frm.field_slide_file1.value, 'mp3') ) {
		ret = showError(frm.field_slide_file1, 'Invalid format');
	}

	return ret;
}

/*****************************************************
 * Invite form validations
 *****************************************************/
function validate_invite(frm, msnMode) {
	var ret = true;
	var used = oEnviroment.getUsedInvitations();
	var total = oEnviroment.getMaxInvitations();

	if (!msnMode) {

		var emailArr = frm.field_address.value.split(',');

		if (emailArr.length <= (total - used)) {
			for (index=0; index < emailArr.length; index++) {
				if (!isValidEmail(trim(emailArr[index]))) ret = showError(frm.field_address, 'Invalid E-mail address');
				else showOK(frm.field_address, 'OK!');
			}
		} else {
			ret = showError(frm.field_address, 'You only have ' + (total - used) + ' invitations left!');
		}

	} else {

		if (!isFieldValid(frm.field_user.value)) ret = showError(frm.field_user, 'Invalid field value');
		else showOK(frm.field_user, 'OK!');

		if (!isFieldValid(frm.field_password.value)) ret = showError(frm.field_password, 'Invalid field value');
		else showOK(frm.field_password, 'OK!');

		if (!checkSelectionList(frm.selectcontact)) ret = showError(frm.serviceError, 'One Service must be selected');
		else showOK(frm.serviceError, 'OK!');
	}

	return ret;

}

/*****************************************************
 * Write to SQUARE form validations
 *****************************************************/
function validate_write(frm) {
	var ret = true;

	if (!isValidEmail(frm.field_mail.value)) ret = showError(frm.field_mail, 'Invalid E-mail address');
	else showOK(frm.field_mail, 'OK!');


	if (!isFieldValid(frm.field_name.value)) ret = showError(frm.field_name, 'Invalid field value');
	else showOK(frm.field_name, 'OK!');

	if (!isFieldValid(frm.field_subject.value)) ret = showError(frm.field_subject, 'Invalid field value');
	else showOK(frm.field_subject, 'OK!');

	if (!isFieldValid(frm.field_msg.value)) ret = showError(frm.field_msg, 'Invalid field value');
	else showOK(frm.field_msg, 'OK!');

	return ret;
}

/*****************************************************
 * Account settings form validations
 *****************************************************/
function validate_account(frm) {
	var ret = true;

	// Only for sigup
	if (!isValidEmail(frm.field_signup_email.value)) ret = showError(frm.field_signup_email, 'Invalid E-mail address');
	else {
		if (frm.field_signup_email.value != frm.field_old_email.value) {
			if (!validateEmailUniqueness(frm.field_signup_email.value)) ret = showError(frm.field_signup_email, 'E-mail address already exists');
			else showOK(frm.field_signup_email, 'OK!');
		}
	}

	if (!isValidEmail(frm.field_signup_cemail.value) || !compareFields(frm.field_signup_email, frm.field_signup_cemail)) ret = showError(frm.field_signup_cemail, 'E-mails must match');
	else showOK(frm.field_signup_cemail, 'OK!');

	if (frm.field_signup_pwd.value.length > 0 || frm.field_signup_cpwd.value.lenght > 0) {
		if (!isFieldValid(frm.field_signup_pwd.value)) ret = showError(frm.field_signup_pwd, 'Invalid Password');
		else showOK(frm.field_signup_pwd, 'OK!');

		if (!isFieldValid(frm.field_signup_cpwd.value) || !compareFields(frm.field_signup_pwd, frm.field_signup_cpwd)) ret = showError(frm.field_signup_cpwd, 'Passwords must match');
		else showOK(frm.field_signup_cpwd, 'OK!');
	}

	if (!isComboValid(frm.display_lang.value)) ret = showError(frm.display_lang, 'Invalid language');
	else showOK(frm.display_lang, 'OK!');

	return ret;
}

/*****************************************************
 * Report entry form validations
 *****************************************************/
function validate_report(frm) {
	var ret = true;

	if (!frm.field_report_msg.value.length) ret = showError(frm.errorMessage, 'You must complete reason field to continue!');
	else showOK(frm.field_report_msg, '');

	return ret;
}

/*****************************************************
 * send message form validations
 *****************************************************/
function validate_msg(frm) {
	var ret = true;

	if (!frm.field_member_msg.value.length) ret = showError(frm.errorMessage, 'You must complete both fields to continue!');
	else showOK(frm.errorMessage, '');

	return ret;
}

/*****************************************************
 * send link form validations
 *****************************************************/
function validate_send_link(frm) {
	var ret = true;

	//if (!isValidEmail(frm.field_share_yourmail.value)) ret = showError(frm.errorMessage, 'Invalid source E-mail address');

	var emailArr = frm.field_share_emails.value.split(',');

	for (index=0; index < emailArr.length; index++) {
		if (!isValidEmail(trim(emailArr[index]))) ret = showError(frm.errorMessage, 'Invalid destination E-mail addresses');
	}

	return ret;
}

/*****************************************************
 * newsletter
 *****************************************************/
function validate_newsletter_register(frm) {
	var ret = true;

	if (!frm.field_name.value.length) ret = showError(frm.field_name, 'You must complete this field!');
	if (!isValidEmail(frm.field_email.value)) ret = showError(frm.field_email, 'Invalid E-mail address');

    return ret;
}

/*****************************************************
 * Password Request form validations
 *****************************************************/
function validate_password(frm) {
	var ret = true;

	if (!isValidEmail(frm.field_password_email.value)) ret = showError(frm.field_password_email, 'Invalid E-mail address');
	else showOK(frm.field_password_email, '');

	return ret;
}

/*****************************************************
 * Soundbed validation
 *****************************************************/
function validate_soundbed(fieldElement) {
	var ret = true;

	if (!isValidFile(fieldElement.value, 'mp3')) {
		ret = showError(fieldElement, 'Invalid Soundbed Format!');
	}
	return ret;
}
