function getAJAX(){
	var page_request = false;
	if (window.XMLHttpRequest){
		page_request = new XMLHttpRequest();
		return page_request;
	}
	else if (window.ActiveXObject){
		try {
			page_request = new ActiveXObject("Msxml2.XMLHTTP");
			return page_request;
		}catch (e){
			try{
				page_request = new ActiveXObject("Microsoft.XMLHTTP");
				return page_request;
			}catch (e){
				return false;
			}
		}
	}else{
		return false;
	}
}

function show(show, hide){
	var show_element = document.getElementById(show);
	var hide_element = document.getElementById(hide);
	show_element.style.display = "block";
	hide_element.style.display = "none";
}

function checkEmail(email){
	var my_email = document.getElementById(email).value;
	if(!my_email.match(/^[a-zA-Z0-9_.]+@[a-zA-Z0-9_.]+\.[a-zA-Z0-9_.]+$/g)){
		id = 0;
		
	}else{
		id = 1;
	}
	return id;
}


function validateForm(){
	var ajax = getAJAX();
	var url = site_url+"ajax/check_membership_request";
	var val = 0; 
	var email = document.getElementById('email').value;
	ajax.onreadystatechange = function() {
		if (ajax.readyState == 4 && (ajax.status == 200 || window.location.href.indexOf("http") == -1)) {
				
				if($('input[name=first_name]').val() == ''){
					$('input[name=first_name]').next('span').html($('input[name=error_first_name]').val());
					val++;
				}else{
					$('input[name=first_name]').next('span').html('');
				}
				if($('input[name=last_name]').val() == ''){
					$('input[name=last_name]').next('span').html($('input[name=error_last_name]').val());
					val++;
				}else{
					$('input[name=last_name]').next('span').html('');
				}
				if($('input[name=email]').val() == ''){
					$('input[name=email]').next('span').html($('input[name=error_email_missing]').val());
					val++;
				}else{
					email = $('input[name=email]').val();
					if(checkEmail('email') == 0){
						$('input[name=email]').next('span').html($('input[name=error_email_valid]').val());
						val++;
					}else{
						if(ajax.responseText == 0){
							$('input[name=email]').next('span').html($('input[name=error_email_exists]').val());
							val++;
						}else{
							$('input[name=email]').next('span').html('');
						}
					}
				}
				if(val == 0){
					document.join.submit();
				}else{
					
				}
				
		}
	}
	parametrii = "validateForm=" + email;
	ajax.open('POST', url, true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
	ajax.setRequestHeader("Content-length", parametrii.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(parametrii);

}


function show_membership_request() {
	$('#request_membership_btn').css('display', 'none');
	$('#request_membership_div').css('display', 'block');
}
function close_membership_request() {
	$('#request_membership_btn').css('display', 'block');
	$('#request_membership_div').css('display', 'none');
}

	function js_request_membership_check() {
		var validator = $("#request_membership").validate({
			rules: {				
				first_name:  {
					required: true,
					minlength: 2
				},
				last_name:  {
					required: true,
					minlength: 2
				},				
				email: {
					required: true,
					email: true ,
					remote: {
						url: site_url+"ajax/check_membership_request",
						type: "post",
						data: {
							email: function() {
							return $("#email").val();
							}
						}
					}				
				},
				captcha_test: {
					required: true,
					remote: {
						url: site_url+"ajax/captcha_check",
						type: "post",
						data: {
							captcha_code: function() {
								return $("#captcha_test").val();
							}
						}
					}
				}
			},
			messages: {
				email: {
					required: "Please enter a valid email address",
					minlength: "Please enter a valid email address",
					remote: jQuery.format("This email is already in use")
				},
				captcha_test: {
					required: "Please enter a valid code",
					minlength: "Please enter a valid code",
					remote: jQuery.format("This captcha code is wrong. Try again!")
				}
			},

			// the errorPlacement has to take the table layout into account
			errorPlacement: function(error, element) {
				if ( element.is(":radio") )
					error.appendTo( element.parent().next().next() );
				else if ( element.is(":checkbox") )
					error.appendTo ( element.next() );
				else
					error.appendTo( element.parent() );
			},
			// set this class to error-labels to indicate valid fields
			success: function(label) {
				// set &nbsp; as text for IE
				label.html("&nbsp;").addClass("checked");
			}
		});
		$("#request_membership_final_btn").click(function() {
			if(validator.form()) {
				$("#request_membership").submit();
			}
		});
	}
	
	
	function js_register_membership_check() {
		var d = new Date();
		var an = d.getFullYear();
		var validator = $("#register").validate({
			errorElement: 'p',
			rules: {
				username: {
					required: true,
					minlength: 2,
					remote: {
						url: site_url+"ajax/check_membership_request_username",
						type: "post",
						data: {
							username: function() {
							return $("#username").val();
							}
						}
					}
				},
				first_name:  {
					required: true,
					minlength: 1
				},
				last_name:  {
					required: true,
					minlength: 1
				},
				password: {
					required: true,
					minlength: 6
				},
				confirm_password: {
					required: true,
					minlength: 6,
					equalTo: "#password"
				},
				email: {
					required: true,
					email: true ,
					remote: {
						url: site_url+"ajax/check_membership_request",
						type: "post",
						data: {
							email: function() {
							return $("#email").val();
							}
						}
					}				
				},
				confirm_email: {
					required: true,
					minlength: 5,
					equalTo: "#email"
				},
				
				month: {
					number: true,
					range: [1, 12]
				},
				day: {
					number: true,
					range: [1, 31]
				},
				year: {
					number: true,
					range: [1900, an]
				},
				
				zip_code: {
					required: true,
					minlength: 1
				},
				agree: {
					required: true
				}
			},
			messages: {
				username: {
					remote: jQuery.format("This username is already in use")
				},
				email: {
					required: "Please enter a valid email address",
					minlength: "Please enter a valid email address",
					remote: jQuery.format("This email is already in use")
				},
				captcha_test: {
					required: "Please enter a valid code",
					minlength: "Please enter a valid code",
					remote: jQuery.format("This captcha code is wrong. Try again!")
				},
				agree: {
					required: "You must agree with I-ELLA's Terms of Service "
				}
			},

			// the errorPlacement has to take the table layout into account
			errorPlacement: function(error, element) {
				if ( element.is(":radio") )
					error.appendTo( element.next().next() );
				else if ( element.is(":checkbox") )
					error.appendTo ( element.next() );
				else
					error.appendTo( element.parent() );
			},
			// set this class to error-labels to indicate valid fields
			success: function(label) {
				// set &nbsp; as text for IE
				label.html("&nbsp;").addClass("checked");
			}
		});
		$("#register_btn").click(function() {
			month = $("#month").val();
			day = $("#day").val();
			year = $("#year").val();
			if( month == 'MM') {$("#month").val('')};
			if( day == 'DD') {$("#day").val('')};
			if( year == 'YYYY') {$("#year").val('')};
			if(validator.form()) {
				$("#register").submit();
			}
			else {
				$("#month").val('MM');
				$("#day").val('DD');
				$("#year").val('YYYY');
			}
		});
	}
	
	function js_register_membership_check_with_code() {
		var d = new Date();
		var an = d.getFullYear();
		var validator = $("#register").validate({
			errorElement: 'p',
			rules: {
				username: {
					required: true,
					minlength: 2,
					remote: {
						url: site_url+"ajax/check_membership_request_username",
						type: "post",
						data: {
							username: function() {
							return $("#username").val();
							}
						}
					}
				},
				first_name:  {
					required: true,
					minlength: 1
				},
				last_name:  {
					required: true,
					minlength: 1
				},
				password: {
					required: true,
					minlength: 6
				},
				confirm_password: {
					required: true,
					minlength: 6,
					equalTo: "#password"
				},
				email: {
					required: true,
					email: true ,
					remote: {
						url: site_url+"ajax/check_membership_request",
						type: "post",
						data: {
							email: function() {
							return $("#email").val();
							}
						}
					}				
				},
				confirm_email: {
					required: true,
					minlength: 5,
					equalTo: "#email"
				},
				
				month: {
					number: true,
					range: [1, 12]
				},
				day: {
					number: true,
					range: [1, 31]
				},
				year: {
					number: true,
					range: [1900, an]
				},
				
				zip_code: {
					required: true,
					minlength: 1
				},
				agree: {
					required: true
				},
				promo_code: {
					remote: {
						url: site_url+"ajax/check_register_promo_code",
						type: "post",
						data: {
							promo_code_val: function() {
							return $("#promo_code").val();
							}
						}
					}
				}
			},
			messages: {
				username: {
					remote: jQuery.format("This username is already in use")
				},
				email: {
					required: "Please enter a valid email address",
					minlength: "Please enter a valid email address",
					remote: jQuery.format("This email is already in use!")
				},
				captcha_test: {
					required: "Please enter a valid code",
					minlength: "Please enter a valid code",
					remote: jQuery.format("This captcha code is wrong. Try again!")
				},
				agree: {
					required: "You must agree with I-ELLA's Terms of Service "
				},
				promo_code: {
					remote: jQuery.format("This referral code doesn't exist or has expired. Please fix or remove it.")
				}
			},

			// the errorPlacement has to take the table layout into account
			errorPlacement: function(error, element) {
				if ( element.is(":radio") )
					error.appendTo( element.next().next() );
				else if ( element.is(":checkbox") )
					error.appendTo ( element.next() );
				else
					error.appendTo( element.parent() );
			},
			// set this class to error-labels to indicate valid fields
			success: function(label) {
				// set &nbsp; as text for IE
				label.html("&nbsp;").addClass("checked");
			}
		});
		$("#register_btn").click(function() {
			month = $("#month").val();
			day = $("#day").val();
			year = $("#year").val();
			if( month == 'MM') {$("#month").val('')};
			if( day == 'DD') {$("#day").val('')};
			if( year == 'YYYY') {$("#year").val('')};
			if(validator.form()) {
				$("#register").submit();
			}
			else {
				$("#month").val('MM');
				$("#day").val('DD');
				$("#year").val('YYYY');
			}
		});
	}
	
	
	function recover_password_form_check() {
		var validator_recover_pass = $("#myRecoverPassFrm").validate({
			rules: {												
				recover_email: {
					required: true,
					email: true ,
					remote: {
						url: site_url+"ajax/check_recover_password_email",
						type: "post",
						data: {
							email: function() {
							return $("#recover_email").val();
							}
						}
					}				
				}
			},
			messages: {
				recover_email: {
					required: "Please enter a valid email address",
					minlength: "Please enter a valid email address",
					remote: jQuery.format("There is no account associated with this email!")
				}
			},

			// the errorPlacement has to take the table layout into account
			errorPlacement: function(error, element) {
				if ( element.is(":radio") )
					error.appendTo( element.parent().next().next() );
				else if ( element.is(":checkbox") )
					error.appendTo ( element.next() );
				else
					error.appendTo( element.parent() );
			},
			// set this class to error-labels to indicate valid fields
			success: function(label) {
				// set &nbsp; as text for IE
				label.html("&nbsp;").addClass("checked");
			}
		});
		$("#myRecoverPassBtn").click(function() {
			if(validator_recover_pass.form()) {
				$("#myRecoverPassFrm").submit();
			}
		});
	}
	
	function change_password_form_check() {
		var validator_recover_pass = $("#myChangePassFrm").validate({
			rules: {
				username_pass: {
					required: true
				},
				old_password: {
					required: true
				},
				new_password: {
					required: true,
					minlength: 6
				},
				repeat_new_password: {
					required: true,
					minlength: 6,
					equalTo: "#new_password"
				}
			},
			messages: {
				recover_email: {
					required: "Please enter a valid email address",
					minlength: "Please enter a valid email address",
					remote: jQuery.format("There is no account associated with this email!")
				}
			},

			// the errorPlacement has to take the table layout into account
			errorPlacement: function(error, element) {
				if ( element.is(":radio") )
					error.appendTo( element.parent().next().next() );
				else if ( element.is(":checkbox") )
					error.appendTo ( element.next() );
				else
					error.appendTo( element.parent() );
			},
			// set this class to error-labels to indicate valid fields
			success: function(label) {
				// set &nbsp; as text for IE
				label.html("&nbsp;").addClass("checked");
			}
		});
		$("#myChangePassBtn").click(function() {
			if(validator_recover_pass.form()) {
				$("#myChangePassFrm").submit();
			}
		});
	}
	
	function generate_new_captche_code() {
		//Get a reference to CAPTCHA image
		img = document.getElementById('img_captcha'); 
		//Change the image
		var new_img = site_url+"ajax/generate_new_captcha/"+Math.random();
		img.src = new_img;
		$("#captcha_test").val('');
	}

jQuery.fn.onImagesLoaded = function(_cb) { 
  return this.each(function() {
 
    var $imgs = (this.tagName.toLowerCase()==='img')?$(this):$('img',this),
        _cont = this,
            i = 0,
    _done=function() {
      if( typeof _cb === 'function' ) _cb(_cont);
    };
 
    if( $imgs.length ) {
      $imgs.each(function() {
        var _img = this,
        _checki=function(e) {
          if((_img.complete) || (_img.readyState=='complete'&&e.type=='readystatechange') )
          {
            if( ++i===$imgs.length ) _done();
          }
          else if( _img.readyState === undefined ) // dont for IE
          {
            $(_img).attr('src',$(_img).attr('src')); // re-fire load event
          }
        }; // _checki \\
 
        $(_img).bind('load readystatechange', function(e){_checki(e);});
        _checki({type:'readystatechange'}); // bind to 'load' event...
      });
    } else _done();
  });
};

