var ERROR_CLASS = 'ts_error';
var CHECK_EMPTY = false;

var lastFocus = '';
var setFocusFlag = false;
//var	fieldToFocus = false;

var firstFocus = 'fname';
var jsDisbaled = 'jsDiabled';
 
 function bodyLoad( )
 {
 	var toFocus = document.getElementById( firstFocus );
 	
 	try {
 		toFocus.focus( );
 	}
 	catch ( e ) { }
 }
 
 function cleanMaktoobUser( usernameField )
 {
 	usernameField.value = usernameField.value.replace( /@maktoob.com$/ , '' ) ;
 	usernameField.value = text = jQuery.trim(usernameField.value);
 }

$('body').ajaxError(ConError) ;

var username_Available = false ;
function addAnotherFriend(value) {
    tellfriends = tellfriends + 1;
    if(tellfriends < 5) {
        $('#add').before('<input type="text" class="brdrinput" name="friend[]" size="45" onfocus="highlight(this)" onblur="nohighlight(this)" value="'+value+'" /><br /><br class="half" />');
    }
    if(tellfriends >= 4) {
        var tmp = document.getElementById('add'); if(tmp) { tmp.style.display = 'none'; }
        var tmp = document.getElementById('addf'); if(tmp) { tmp.style.display = 'none'; }
    }
    return false;
}

function alertError(text) {
    window.alert(text)
}

function setFocus( field )
{
	if( setFocusFlag ) {
		if( lastFocus != field ) {
			field.focus( );
			lastFocus = field ;
		}
	}
}

function userNameAvailable(usernameField) {
	
	text = usernameField.value ;
	
	if( text.length > 0 ) {
		var username = $("input[name='username']");
		username_Available = false;
		text = jQuery.trim(text);
		username[0].value = text;
		username[0].disabled=true;
		$('#usernameError').empty().html('<font color="#E9740A">'+message[29]+'</font>').show()
		jQuery.post( myPath + '/checkAvailable.php?.rand='+Math.random(),{user:text},userNameAvaliableComplete,'text');
	}
	 
}

function userNameAvaliableComplete(data, textStatus) {
    var username = $("input[name='username']");
    username[0].disabled=false;
    if (data == "") {
        $('#usernameError').empty()
        username_Available = true;
        ConError('','','');
    }
    $('#usernameError').css( "display" , "" );
    if (1 == data) {
        $('#usernameError').empty().html('<img src="images_' + lang + '/correct.gif" alt="" /><font color="#00FF00">'+message[30]+'</font>')
        username_Available = true;
    } else if (0 == data) {
        username_Available = false;
        $('#usernameError').empty().html('<img src="images_' + lang + '/woring.gif" alt="" /><font color="#FF0000">'+message[4]+'</font>')
    } else {
        $('#usernameError').empty()
        username_Available = true;
        ConError('','','');
    }
}
function ConError(event, request, settings) {
    alertError(message[32]);
}

function PopulateCity(country) {
    $('#cityField').empty().hide() ;
    try {
    	SelectOption(document.MainForm.nationality,countries[country]['DefaultNationality'])
    	checkNationality( document.MainForm.nationality );
        if (countries[country]['hasCity']) {
            var out = '';
            for (x in countries[country]['cityList']) {
                out += '<option value="'+x+'">'+countries[country]['cityList'][x]+'</option>';
            }
            out =  city + '&nbsp;<select name="city" size="1" class="slc2" >'+out+'</select>' ;
            $('#cityField').empty().html(out).show() ;
            
        } else {
            $('#cityField').empty().hide() ;
        }
    } catch (oError) {
        $('#cityField').empty().hide() ;
    }
}

function SelectOption(inputName, value) {
    var oSelect = inputName;
    for (i=0; i < oSelect.options.length; i++) {
        if (oSelect.options[i].value == value) {
            oSelect.options[i].selected=true;
            break;
        }
    }
}

function checkUserName(text) {
	if( ( text.length > 0 ) && ( text.length < 32 ) ) { 
            
            return hasUNInvalidChars( text );
    }
    
    return false;
}

function checkEmail(text) {
    var rex = new RegExp(/^[A-Za-z0-9\-_\.]+@(([A-Za-z0-9\-]+\.)+[A-Za-z]{2,4})$/);
    return rex.test(text);
}

function hasInvalidChars(text) {
    var invalidChars = ['`','~','!','@','#','$','%','^','&','*','(',')','\'','"','`','<','>',';',',','|','\\','/','?','+','=','{','}','[',']',':']
    for (var i=0;i<text.length;i++) {
        textChar = text.charAt(i);
        for (var j=0; j<invalidChars.length; j++) {
            if(invalidChars[j] == textChar) {
                return true;
            }
        }
    }
    return false;

}

function hasUNInvalidChars(text) {
//    var invalidChars = ['`','~','!','@','#','$','%','^','&','*','(',')','\'','"','`','<','>',';',',','|','\\','/','?','+','=','{','}','[',']',':' , '،' , 'ٌ' , 'ٌ' , 'ُ' , 'ً' , 'َ' , 'ٍ' , 'ـ' ] ;
//    for (var i=0;i<text.length;i++) {
//        textChar = text.charAt(i);
//        for (var j=0; j<invalidChars.length; j++) {
//            if(invalidChars[j] == textChar) {
//                return true;
//            }
//        }
//    }
//    return false;
	
	var reg = new RegExp(/^[A-Za-z0-9\-_]+$/);
	return ( ! reg.test( text ) );
	
}

function hasPasswordInvalidChars(text) {
//    var invalidChars = ['`','~','!','@','#','$','%','^','&','*','(',')','\'','"','`','<','>',';',',','|','\\','/','?','+','=','{','}','[',']',':' , '،' , 'ٌ' , 'ٌ' , 'ُ' , 'ً' , 'َ' , 'ٍ' , ' '  , 'ـ' ] ;
//
//    for (var i=0;i<text.length;i++) {
//        textChar = text.charAt(i);
//        for (var j=0; j<invalidChars.length; j++) {
//            if(invalidChars[j] == textChar) {
//                return true;
//            }
//        }
//    }
//    return false;
	var reg = new RegExp(/^[A-Za-z0-9]+$/);
	
	return ( ! reg.test( text ) );
	
}


function isValidBdate(day, month, year) {
    if (day > 31 || day < 1) {
        return false;
    }
    if (month > 12 || month < 1) {
        return false;
    }
    if ((2 == month || 4 == month || 6 == month || 9 == month || 11 == month) && day > 30) {
        return false;
    }
    if (2 == month) {
        if (30 == day) {
            return false;
        }
        if (29 == day) {
            if (year % 4) {
                return false;
            }
        }
    }
    return true;
}

function IsFutureDate( day , month , year )
{
	today = new Date( );
	dob = new Date( );
	dob.setDate( day );
	dob.setMonth( month - 1 );
	dob.setFullYear( year );
	
	return ( dob > today );
}

function fixYear(obj) {
	if( obj.value.length > 0 ) {
	    if (!isNaN(obj.value) && obj.value < 100) {
	        if (curDate.getFullYear() > (obj.value + 2000)) {
	            obj.value = (obj.value/1) + 2000 ;
	        } else {
	            obj.value = (obj.value/1) + 1900 ;
	        }
	    }
	}
}

function DisplayError( field , msg )
{
	try {
		errField = document.getElementById( field.name + "Error" ) ;
		errField.style.display = '';
		if( field.tagName == 'INPUT' ) {
			field.className = ERROR_CLASS ;
		}
		errField.innerHTML = msg ;
	}
	catch( e ) { }
	
}

function undisplayError( field )
{
	try {
		errField = document.getElementById( field.name + "Error" ) ;
		errField.style.display = 'none';
		if( field.tagName == 'INPUT' ) {
			field.className = 'ts';
		}
	}
	catch( e ) { }
}

function checkFname( fnameField )
{

	if( CHECK_EMPTY ) {
		if ('' == fnameField.value) {
	        DisplayError( fnameField , message[5]);
	        setFocus( fnameField );
	        return false;
	    }
	}
    
    if (hasInvalidChars(fnameField.value)) {
        DisplayError( fnameField , message[6]);
        setFocus( fnameField );
        return false;
    }
    
    undisplayError( fnameField );
    return true;
}

function checkLname( lnameField )
{
	if( CHECK_EMPTY ) {
		if ('' == lnameField.value) {
	        DisplayError( lnameField , message[7]);
	        setFocus( lnameField );
	        return false;
	    }
	}

    if (hasInvalidChars(lnameField.value)) {
        DisplayError( lnameField , message[8]);
        setFocus( lnameField );
        return false;
    }
    
    undisplayError( lnameField );
    return true;
}

function checkCountry( countryField )
{
	if( CHECK_EMPTY ) {
		if ( ('' == countryField.value) || ('------' == countryField.value) ) {
	        DisplayError( countryField , message[20] );
	        setFocus( countryField );
	        return false;
	    }
	}
	undisplayError( countryField );
    return true;
}

function checkUsernameField( usernameField )
{
	if( CHECK_EMPTY ) {
		if( usernameField.value.length == 0 ) {
			DisplayError( usernameField , message[1] );
			setFocus( usernameField );
			return false;
		}
	}
	
	if( usernameField.value.length > 32 ) {
		DisplayError( usernameField , message[2] );
		setFocus( usernameField );
		return false;
	}
	
	if( usernameField.value.length != 0 ) {
         
            if( hasUNInvalidChars( usernameField.value ) ) {
			DisplayError( usernameField , message[3] );
			setFocus( usernameField );
			return false;
			
		}
		else {
			userNameAvailable(usernameField) ;
		}
	}
	
	undisplayError( usernameField );
	return true;
}

function checkNationality( natField )
{
	if( CHECK_EMPTY ) {
		if ('' == natField.value) {
	        DisplayError( natField , message[22]);
	        setFocus( natField );
	        return false;
	    }
	}
    undisplayError( natField  );
    return true;
}

function checkEmailField( emailField )
{
	if( CHECK_EMPTY ) {
		if( '' == emailField.value ) {
			DisplayError( emailField , message[36]);
	        setFocus( emailField );
	        return false;
		}
	}
	
        if( emailField.value.length > 0 ) {
            if (!checkEmail(emailField.value)) {
                    DisplayError( emailField , message[25]);
                    setFocus( emailField );
                    return false;
            }
        }
    
    undisplayError( emailField );
    return true;
}

function checkPassword( pswdField , conpwdField , usernameField )
{
	pswdField.value = jQuery.trim(pswdField.value);
	if( CHECK_EMPTY ) {
		if ('' == pswdField.value) {
			DisplayError( pswdField , message[9]);
			setFocus( pswdField );
			return false;
		}
	}

        if( ( pswdField.value.length > 0 ) ) {
            if ( ( pswdField.value.length < 6 ) ) {
                DisplayError( pswdField ,message[10]);
                setFocus( pswdField );
                return false;
            }
    
            if (pswdField.value.length > 20) {
                DisplayError( pswdField ,message[11]);
                setFocus( pswdField );
                return false;
            }
            
            if (hasPasswordInvalidChars(pswdField.value)) {
                DisplayError( pswdField , message[12]);
                setFocus( pswdField );
                return false;
            }
        
            if (pswdField.value == usernameField.value) {
                DisplayError( pswdField ,message[34]);
                setFocus( pswdField );
                return false;
            }
        }
    undisplayError( pswdField );
    
    return true;
}

	
function checkYear( dayField , monthField , yearField )
{
	if( CHECK_EMPTY ) {
		if( yearField.value.length == 0 ) {
			DisplayError( yearField , message[15]);
			setFocus( yearField );
			return false;
		}
	}
	
	if( ! isNaN(yearField.value) ) {
			DisplayError( yearField , message[15]);
			setFocus( yearField );
	}
	
	if( ( dayField.value.length > 0 ) && ( monthField.value.length > 0 ) && ( yearField.value.length > 0 ) &&
		( ! isNaN( dayField.value ) ) && ( ! isNaN( monthField.value ) ) && ( ! isNaN( yearField.value.length  ) )
	) {
			if( ( ! isValidBdate(dayField.value, monthField.value, yearField.value) ) || ( (curDate.getFullYear() - yearField.value) < 0 ) ) {
			DisplayError( yearField , message[15]);
			setFocus( yearField );
			return false;
		}
	}
	
	undisplayError( yearField );
	return true;
	
} 


function checkDOBFilled( dayField , monthField , yearField )
{
	if( CHECK_EMPTY ) {
		if( ( dayField.value == '' ) || ( monthField.value == '' ) || ( yearField.value == '' ) ) {
			DisplayError( yearField , message[41] );
			setFocus( yearField ) ;
			return false;			
		}
	}
	
	return true;
}
function checkDOB( dayField , monthField , yearField )
{
	
	checkDOBFilled( dayField , monthField , yearField ) ;
	if( ( dayField.value != '' ) && ( monthField.value != '' ) && ( yearField.value != '' ) ) {
	
		if( ! isValidBdate( dayField.value , monthField.value , yearField.value ) ) {
			DisplayError( yearField , message[15] );
			setFocus( yearField );
			return false;
		}
		
		if( IsFutureDate( dayField.value , monthField.value , yearField.value ) ) {
			DisplayError( yearField , message[26]);
			setFocus( yearField );
			return false;
		}
		
		try {
			errField = document.getElementById( yearField.name + "Error" ) ;
			errField.style.display = 'none';
		}
		catch( e ) { }
	}
		
		return true;
}


function checkPasswordConfirm( pswdField , conpwdField , usernameField )
{

    if ( pswdField.value != conpwdField.value ) {
        DisplayError( conpwdField ,message[35]);
        setFocus( conpwdField );
        return false;
    }

    undisplayError( conpwdField );
    return true;
}

function checkOccupation( occField )
{
    if( CHECK_EMPTY ) {
	if (0 == occField.selectedIndex) {
            DisplayError( occField , message[16]);
            setFocus( occField );
            return false;
        }
    }
    
    undisplayError( occField );
    return true;
}

function checkIndustry( industryField )
{
    if( CHECK_EMPTY ) {
	if (0 == industryField.selectedIndex) {
	       DisplayError( industryField , message[18]);
	       setFocus( industryField );
	       return false;
	 }
    }

	undisplayError( industryField );
	return true;
}

function checkSecretAnswer( saField )
{
    if( CHECK_EMPTY ) {
        if( 0 == saField.value.length ) {
            DisplayError( saField , message[40]);
            setFocus( saField );
            return false;
        }
    }
    
    undisplayError( saField );
    return true;
}

function checkGender( genderField )
{
	if( CHECK_EMPTY ) {
        if( 0 == genderField.value.length ) {
            DisplayError( genderField , message[14] );
            setFocus( genderField );
            return false;
        }
    }
    
	undisplayError( genderField );
	return true;
    
}

function normalizaFromValue( form )
{
    form.fname.value = jQuery.trim(form.fname.value);
    form.lname.value = jQuery.trim(form.lname.value);
    form.username.value = jQuery.trim(form.username.value);
    form.othermail.value = jQuery.trim(form.othermail.value);
    form.passwd.value = jQuery.trim(form.passwd.value);
    form.confirmPasswd.value = jQuery.trim(form.confirmPasswd.value);
    form.byear.value = jQuery.trim(form.byear.value);
    form.bday.value = jQuery.trim(form.bday.value);
    form.secretAnswer.value = jQuery.trim(form.secretAnswer.value);
}


function ValidateForm(form) {

	setFocusFlag = false;
	fieldToFocus = false;
	CHECK_EMPTY = true ;
	
	normalizaFromValue( form );    

    //fname
    if( ! checkFname( form.fname ) ) {
    	if( ! fieldToFocus ) {
    		fieldToFocus = form.fname ;
    	}
    }
    

    //lname
    if( ! checkLname( form.lname ) ) {
    	if( ! fieldToFocus ) {
    		fieldToFocus = form.lname ;
    	}
    }
    
    //gender
    if( ! checkGender( form.gender ) ) {
    	if( ! fieldToFocus ) {
    		fieldToFocus = form.gender ;
    	}
    }

	//coutnry
	if( ! checkCountry( form.country ) ) {
		if( ! fieldToFocus ) {
			fieldToFocus = form.country ;
		}
	}
	
	//nationality
	if( ! checkNationality( form.nationality ) ) {
		if( ! fieldToFocus ) {
			fieldToFocus = form.nationality;
		}
	}
	
	if( ! username_Available ) {
		if( ! checkUsernameField( form.username ) ) {
			if( ! fieldToFocus ) {
				fieldToFocus = form.username ;
			}
		}
		else {
			userNameAvailable(form.username) ;
		}
	}
	
	if( ! checkPassword( form.passwd , form.confirmPasswd , form.username ) ) {
		if( ! fieldToFocus ) {
			fieldToFocus = form.passwd ;
		}
	}
	
	if( ! checkPasswordConfirm( form.passwd , form.confirmPasswd , form.username ) ) {
		if( ! fieldToFocus ) {
			fieldToFocus = form.confirmPasswd ;
		}
	}
	
	if( ! checkSecretAnswer( form.secretAnswer ) ) {
		if( ! fieldToFocus ) {
			fieldToFocus = form.secretAnswer ;
		}
	}
	
	if( ! checkEmailField( form.othermail ) ) {
		if( ! fieldToFocus ) {
			fieldToFocus = form.othermail ;
		}
	}
	
	
	if( ! checkDOBFilled(form.bday, form.bmon , form.byear ) ) {
		if( ! fieldToFocus ) {
			fieldToFocus = form.byear ;
		}
	}
	
	if( ! checkDOB(form.bday, form.bmon , form.byear ) ) {
		if( ! fieldToFocus ) {
			fieldToFocus = form.byear ;
		}
	}
	
	if( ! checkOccupation( form.occupation ) ) {
		if( ! fieldToFocus ) {
			fieldToFocus = form.occupation ;
		}
	}
	
	if( ! checkIndustry( form.industry ) ) {
		if( ! fieldToFocus ) {
			fieldToFocus = form.industry ;
		}
	}
	
	setFocusFlag = true;
	
	CHECK_EMPTY = false ;
	
	
    return 1;
}


