// 0000000000000000000000
// 00 General Function 00
// 0000000000000000000000

function trim(str)
{
	return str.replace(/^\s+|\s+$/g, '');
}

function get_extension(obj) {
   	str_path = obj.value;
    	return str_path.substring(str_path.lastIndexOf(".") + 1, str_path.length).toLowerCase();
}

function compareString(string, string2) {
	if (string != string2) {
		return false;
	}
	
	return true;
}

function getXMLhttpObject() {
	var xmlhttp = false;
	try {
		xmlhttp = new XMLHttpRequest();
	}
	catch(e) {
		try {
			xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch(e) {
			xmlhttp = false;
		}
	}
	
	return xmlhttp;
}

function confirm_delete(url) {
	var result;
	result = confirm("Are sure want to delete it ?");
	if (result) {
		location.replace(url);
	}
}

function show_preview(obj) {
	var allowedFiletype = new Array("jpg", "jpeg", "bmp", "png", "gif");
	if (obj.value == "") {
    		//document.getElementById("preview").src = 'images/nophoto.jpg';
    		document.getElementById("showErr").className = 'errShow';
    		document.getElementById("upload").disabled = 'disabled';
    	}
    	else if (allowedFiletype.indexOf(get_extension(obj)) == -1) {
    		//document.getElementById("preview").src = 'images/invalidphoto.jpg';
    		document.getElementById("showErr").className = 'errShow';
    		document.getElementById("upload").disabled = 'disabled';
    	}
    	else {
    		//document.getElementById("preview").src = "file://" + obj.value;
    		document.getElementById("showErr").className = 'err';
    		document.getElementById("upload").disabled = '';
    	}
}

function element_disabled(elm, type) {
	disabled_value = (type == 1) ? 'disabled' : '';
	for (i = 0; i < elm.length; i++) {
		document.getElementById(elm[i].toString()).disabled = disabled_value;
		document.getElementById(elm[i].toString()).value = (type == 1) ? '' : document.getElementById(elm[i].toString()).value;
	}
}

function userinfo_employment_av(obj) {
	var obj_value = obj.value;
	
	var obj_week = new Array("teeaw");
	var obj_date = new Array("teead", "teeam", "teeay");
	
	if (obj_value == 1) {
		element_disabled(obj_week, 1);
		element_disabled(obj_date, 1);
	}
	else if (obj_value == 2) {
		element_disabled(obj_week, 2);
		element_disabled(obj_date, 1);
	}
	else if (obj_value == 3) {
		element_disabled(obj_week, 1);
		element_disabled(obj_date, 2);
	}
}

function userinfo_place_change(val) {
	if (val == 3) {
		document.getElementById("tewd_city").className = 'errShow';
	}
	else {
		document.getElementById("tewd_city").className = 'err';
	}
}

// 000000000000000000000000000000
// 00 Array Prototype          00
// 00 for some member function 00
// 00 that not supported in IE 00
// 000000000000000000000000000000

if (!Array.prototype.indexOf) {
	Array.prototype.indexOf = function(str) {
	    	var len = this.length;

		var from = Number(arguments[1]) || 0;
		from = (from < 0) ? Math.ceil(from) : Math.floor(from);
		if (from < 0)
			from += len;

		for (; from < len; from++) {
			if (from in this && this[from] === str)
				return from;
		}
		return -1;
	};
}
    	
// 000000000000000000000
// 00 Form Validation 00
// 000000000000000000000

function isChecked(obj) {
	var checked = false;
	for (i = 0; i < obj.length; i++) {
		if (obj[i].checked) checked = true;
	}
	return checked;
}

function isEmail(string)
{
	if (!string) return false;
	
	tfld = trim(string);
	
	var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/  ;
	if (!email.test(tfld))
	{
		return false;
	}

	var email2 = /^[._a-zA-Z0-9-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,3})$/  ;
	if (!email2.test(tfld)) 
	{
		return false;
	}
	
	return true;
}

function isPhoneNumber(string) {
	if (!string) return false;
	
	tfld = trim(string);
	
	var numeric = /^[0-9\+\-]+$/;
	if (!numeric.test(tfld)) {
		return false;
	}
	
	return true;
}

function isValidDate(strDate, strMonth, strYear) {
	if ((strDate == '') || (strMonth == '') || (strYear == '') || (isNaN(strDate)) || (isNaN(strYear)) || (strDate.length > 2) || (strYear.length > 4)) {
		return false;
	}
	
	var numMonth = monthInNumber(strMonth);
	var maxDate = maxDateInMonth(numMonth, strYear);
	if (strDate > maxDate) {
		return false;
	}
	
	return true;
}

function maxDateInMonth(numMonth, strYear) {
	var monthMod = ((numMonth != 7)?(numMonth % 7):numMonth);
	var maxDay = ((monthMod % 2 == 1)?31:30);
	if (numMonth == 2) maxDay = ((strYear % 4 != 0)?28:29);
	return maxDay;
}

function monthInNumber(strMonth) {
	var numMonth;
	switch(strMonth) {
		case "January" : numMonth = 1; break;
		case "February" : numMonth = 2; break;
		case "March" : numMonth = 3; break;
		case "April" : numMonth = 4; break;
		case "May" : numMonth = 5; break;
		case "June" : numMonth = 6; break;
		case "July" : numMonth = 7; break;
		case "August" : numMonth = 8; break;
		case "September" : numMonth = 9; break;
		case "October" : numMonth = 10; break;
		case "November" : numMonth = 11; break;
		case "December" : numMonth = 12; break;
	}
	
	return numMonth;
}

function contactUs_valid() {
	var frm = document.getElementById("frmContactUs");
	
	if (frm) {
		var name = frm.cnm;
		var email = frm.cem;
		var phone = frm.cph;
		var msg = frm.cmg;
		
		var name_error = "The NAME field is required. Please fill in your name.";
		var email_error = "The EMAIL field is required. Please fill in your valid email address.";
		var phone_error = "Invalid phone number ! Please fill in with your valid phone number.";
		var msg_error = "The MESSAGE / QUESTION / COMMENT field is required. Please fill in your message / question / comment.";
		
		if (trim(name.value) == "") {
			alert(name_error);
			name.focus();
			return false;
		}
		if (!isEmail(trim(email.value))) {
			alert(email_error);
			email.focus();
			return false;
		}
		if (trim(phone.value) != '' && !isPhoneNumber(phone.value)) {
			alert(phone_error);
			phone.focus();
			return false;
		}
		if (trim(msg.value) == "") {
			alert(msg_error);
			msg.focus();
			return false;
		}
		
		return true;
	}
	else {
		return false;
	}
}

function checkValidUsernameProcess(string) {
	if (parseInt(string) == 0) {
		alert("Username is already used ! Please choose another username !");
	}
	else if (parseInt(string) == 1) {
		alert("Username is available");
	}
	else {
		alert("Invalid URL Checking");
	}
}

function checkValidUsername(string, url, type) {
	tfld = trim(string);

	var xmlhttpReq = getXMLhttpObject();
	var urlCheck = "";
	if (parseInt(type) == 0) {
		urlCheck = url.substring(0, url.lastIndexOf("=") + 1) + escape(tfld);
	}
	else if (parseInt(type) == 1) {
		urlCheck = url.substring(0, url.lastIndexOf("/") + 1) + escape(tfld);
	}
	else {
		urlCheck = url;
	}
	var xmlhttpValid = false;
	
	if (xmlhttpReq) {
		xmlhttpReq.onreadystatechange = function() {
			if (xmlhttpReq.readyState == 4) {
				checkValidUsernameProcess(xmlhttpReq.responseText);
			}
		}
		
		xmlhttpReq.open("GET", urlCheck, true);
		xmlhttpReq.send(null);
	}
	else {
		window.location = urlCheck;
	}
}

function checkUsername_button() {
	var frm = document.getElementById("frmRegister");
	
	var username = trim(frm.tun.value);
	var url = trim(frm.tavurl.value);
	var type = trim(frm.tavtype.value);
	
	if (username == '') {
		alert("Please input a username !");
	}
	else {
		checkValidUsername(username, url, type);
	}
}

function cekRetypePassword_blur() {
	var frm = document.getElementById("frmRegister");
	
	var realone = trim(frm.tps.value);
	var retype = trim(frm.trp.value);
	
	if ((retype != '') && (realone != '')) {
		if (!compareString(retype, realone)) {
			alert("Password doesn't match ! Please fill in with the correct one !");
			frm.trp.value = "";
		}
	}
}

function registrasi_valid() {
	var frm = document.getElementById("frmRegister");
	
	var username = frm.tun;
	var password = frm.tps;
	var rpassword = frm.trp;
	var fullname = frm.tfn;
	var ppob = frm.tpb;
	var ddob = frm.tddb;
	var dmob = frm.tmdb;
	var dyob = frm.tydb;
	var email = frm.tem;
	var phone = frm.tpn;
	
	var username_error = "The USERNAME field is required. Please fill in a username.";
	var password_error = "The PASSWORD field is required. Please fill in a password.";
	var rpassword_error = "The RETYPE PASSWORD field is required. Please re-type with right password.";
	var fullname_error = "The FULLNAME field is required. Please fill in your fullname.";
	var dateofbirth_error = "Incomplete DATE of BIRTH or Invalid DATE of BIRTH format ! Please fill in DATE of BIRTH field correctly !";
	var email_error = "The EMAIL field is required. Please fill in with the valid email.";
	var phone_error = "The PHONE field is required. Please fill in with the valid phone.";
	
	if (trim(username.value) == '') {
		alert(username_error);
		username.focus();
		return false;
	}
	if (trim(password.value) == '') {
		alert(password_error);
		password.focus();
		return false;
	}
	if ((trim(rpassword.value) == '') || (!compareString(trim(password.value), trim(rpassword.value)))) {
		alert(rpassword_error);
		rpassword.focus();
		return false;
	}
	if (trim(fullname.value) == '') {
		alert(fullname_error);
		fullname.focus();
		return false;
	}
	if ((trim(ddob.value) != '' || trim(dmob.value) != '' || trim(dyob.value) != '') && (!isValidDate(trim(ddob.value), trim(dmob.value), trim(dyob.value)))) {
		alert(dateofbirth_error);
		ddob.focus();
		return false;
	}
	if (!isEmail(trim(email.value))) {
		alert(email_error);
		email.focus();
		return false;
	}
	if (!isPhoneNumber(trim(phone.value))) {
		alert(phone_error);
		phone.focus();
		return false;
	}
	
	return true;
}

function editProfile_valid() {
	var frm = document.getElementById("frmEditProfile");
	
	var fullname = frm.tfn;
	var ppob = frm.tpb;
	var ddob = frm.tddb;
	var dmob = frm.tmdb;
	var dyob = frm.tydb;
	var email = frm.tem;
	var phone = frm.tpn;
	var employ_stat = frm.teed;
	var employ_avai = frm.teea;
	var employ_avai_w = frm.teeaw;
	var employ_avai_d = frm.teead;
	var employ_avai_m = frm.teeam;
	var employ_avai_y = frm.teeay;
	var employ_place = frm.tewd;
	var employ_place_city = frm.tewdv;
	var employ_salary = frm.tesd;
	
	var fullname_error = "The FULLNAME field is required. Please fill in your fullname.";
	var dateofbirth_error = "Incomplete DATE of BIRTH or Invalid DATE of BIRTH format ! Please fill in DATE of BIRTH field correctly !";
	var email_error = "The EMAIL field is required. Please fill in with the valid email.";
	var phone_error = "The PHONE field is required. Please fill in with the valid phone.";
	var employ_availa_error = "Please specified how long you can be availabled to start working.";
	var employ_availa_error2 = "Invalid DATE in EMPLOYMENT AVAILABILITY field. Please fill in with valid DATE.";
	var employ_locate_error = "Please specified what city you wish to be worked on in Indonesia.";
	var employ_salary_error = "The DESIRED SALARY field must be filled with numeric value. Please fill in with numeric value.";
	
	if (trim(fullname.value) == '') {
		alert(fullname_error);
		fullname.focus();
		return false;
	}
	if ((trim(ddob.value) != '' || trim(dmob.value) != '' || trim(dyob.value) != '') && (!isValidDate(trim(ddob.value), trim(dmob.value), trim(dyob.value)))) {
		alert(dateofbirth_error);
		ddob.focus();
		return false;
	}
	if (!isEmail(trim(email.value))) {
		alert(email_error);
		email.focus();
		return false;
	}
	if (!isPhoneNumber(trim(phone.value))) {
		alert(phone_error);
		phone.focus();
		return false;
	}
	if (isChecked(employ_avai)) {
		if (employ_avai[1].checked && trim(employ_avai_w.value) == '') {
			alert(employ_availa_error);
			return false;
		}
		if (employ_avai[2].checked) {
			if (trim(employ_avai_d.value) == '' || trim(employ_avai_m.value) == '' || trim(employ_avai_y.value) == '') {
				alert(employ_availa_error);
				employ_avai_d.focus();
				return false;
			}
			else if (!isValidDate(trim(employ_avai_d.value), trim(employ_avai_m.value), trim(employ_avai_y.value))) {
				alert(employ_availa_error2);
				employ_avai_d.focus();
				return false;
			}
		}
	}
	if (trim(employ_place.value) == '3' && trim(employ_place_city.value) == '') {
		alert(employ_locate_error);
		employ_place_city.focus();
		return false;
	}
	if (isNaN(trim(employ_salary.value))) {
		alert(employ_salary_error);
		employ_salary.focus();
		return false;
	}

	return true;
}
