// Replaces all instances of the given substring.
String.prototype.replaceAll = function( 
strTarget, // The substring you want to replace
strSubString // The string you want to replace in.
){
var strText = this;
var intIndexOfMatch = strText.indexOf( strTarget );
 

// Keep looping while an instance of the target string
// still exists in the string.
while (intIndexOfMatch != -1){
// Relace out the current instance.
strText = strText.replace( strTarget, strSubString )
 

// Get the index of any next matching substring.
intIndexOfMatch = strText.indexOf( strTarget );
}
 

// Return the updated string with ALL the target strings
// replaced out with the new substring.
return( strText );
}

Rating = Class.create();
Rating.prototype = {
	initialize: function() {
		if ($('rating')) {
		  	for (i=0; i<$('rating').getElementsByTagName('a').length; i++) {
			    $('rating').getElementsByTagName('a')[i].href = '#';
			    $('rating').getElementsByTagName('a')[i].onclick = this.onClick;
			}
		}
	},
	
	onClick: function() {
		var d = new Date();
		var time = d.getTime();
		
		info = $('rating').getElementsByTagName('ul')[0].id.split("-");
		
		infoRating = 0;
		
		switch (this.id) {
			case "rating-one":
				infoRating = 1;
				break;
				
			case "rating-two":
				infoRating = 2;
				break;
				
			case "rating-three":
				infoRating = 3;
				break;
				
			case "rating-four":
				infoRating = 4;
				break;
				
			case "rating-five":
				infoRating = 5;
				break;
		}
		
		this.request = new Ajax.Request(
			'/account/rating.php?time=' + time + '&section=' + info[0] + '&item=' + info[1] + '&rating=' + infoRating + '&ajax=1',
			{
				method: 'get',
				onComplete: myRating.update.bind()
			}
		);
		
	},
	
	update: function(data) {
		responseText = data.responseText;
	  	
	  	info = responseText.split(",");
		
		ratings = info[0];
		points = info[1];
		ratingsUsers = info[2];
		ratingsGuests = info[3];
		
		if ((ratings > 0) && (points > 0))
			result = Math.round(points / ratings * 100) / 100;
		else
			result = 0;
		
		$('rating-stats-ratings').innerHTML = ratings + ((ratings == 1) ? ' rating' : ' ratings');
		$('rating-stats-who').innerHTML = ratingsUsers + (ratingsUsers == 1 ? ' user' : ' users') + ' / ' + ratingsGuests + (ratingsGuests == 1 ? ' guest' : ' guests');
		$('rating-stats-avg').innerHTML = 'Average: ' + result + '/5 stars';
		$('rating-current').innerHTML = 'Currently ' + result + '/5 stars';
		$('rating-current').style.width = Math.round(result * 20) + '%';
	}
}

Login = Class.create();
Login.prototype = {
	initialize: function() {
		
		if ($('f-login')) {
			$('f-login').onsubmit = this.validate;
			
			this.validUsername = false;
			this.validPassword = false;
		}
		
	},
	
	validate: function() {
		
		if ($F('username') == '') {
			$('username-validator').innerHTML = 'Username is required';
			$('username-validator').className = 'validator no';
			myLogin.validUsername = false;
		} else {
			$('username-validator').innerHTML = '';
			$('username-validator').className = 'validator';
			myLogin.validUsername = true;
		}
		
		if ($F('password') == '') {
			$('password-validator').innerHTML = 'Password is required';
			$('password-validator').className = 'validator no';
			myLogin.validPassword = false;
		} else {
			$('password-validator').innerHTML = '';
			$('password-validator').className = 'validator';
			myLogin.validPassword = true;
		}
		
		if (myLogin.validUsername && myLogin.validPassword)
			return true;
		else
			return false;
		
	}
}

Comment = Class.create();
Comment.prototype = {
	initialize: function() {
		
		if ($('f-comment')) {
			$('f-comment').onsubmit = this.validate;
			
			this.validComment = false;
		}
		
	},
	
	validate: function() {
		
		if ($F('comment-text') == '') {
			$('comment-validator').innerHTML = 'Comment is required';
			$('comment-validator').className = 'validator no';
			myComment.validComment = false
		} else {
			$('comment-validator').innerHTML = '';
			$('comment-validator').className = 'validator';
			myComment.validComment = true;
		}
		
		if (myComment.validComment)
			return true;
		else
			return false;
		
	}
}

ShareEmail = Class.create();
ShareEmail.prototype = {
	initialize: function() {
		
		if ($('f-share-email')) {
			
			$('f-share-email').onsubmit = this.validate;
			
			this.valid = true;
			
		}
		
	},
	
	validate: function() {
		
		myShareEmail.valid = true;
		$('validator').className = 'validator';
		$('validator').innerHTML = '';
		
		if ($F('your_name') == '') {
			myShareEmail.valid = false;
			$('validator').className = 'validator no';
			$('validator').innerHTML = 'All fields are required';
		}
		
		if ($F('emails') == '') {
			myShareEmail.valid = false;
			$('validator').className = 'validator no';
			$('validator').innerHTML = 'All fields are required';
		}
		
		if (myShareEmail.valid)
			return true;
		else
			return false;
		
	}
}

Signup = Class.create();
Signup.prototype = {
	initialize: function() {
		
		if ($('f-signup')) {
			
			$('username').onblur = this.checkUsername;
			$('password').onblur = $('password-confirm').onblur = this.checkPassword;
			$('email').onblur = this.checkEmail;
			$('gender-male').onblur = $('gender-female').onblur = this.checkGender;
			$('day').onblur = $('month').onblur = $('year').onblur = this.checkDate;
			$('verification').onblur = this.checkVerification;
			$('f-signup').onsubmit = this.validate;
			
			this.validUsername = false;
			this.validPassword = false;
			this.validEmail = false;
			this.validGender = false;
			this.validDate = false;
			this.validVerification = false;
			
		}
		
	},
	
	validate: function() {
		
		if ($F('username') == '') {
			$('username-validator').className = 'validator no';
			$('username-validator').innerHTML = 'Username is required';
			mySignup.validUsername = false;
		} else {
			if (!$('username-validator').innerHTML == 'Not available')
				mySignup.validUsername = true;
		}
		
		if ($F('password') == '' || $F('password-confirm') == '') {
			$('password-validator').className = 'validator no';
			$('password-validator').innerHTML = 'Password is requred';
			mySignup.validPassword = false;
		}
		
		if ($F('email') == '') {
			$('email-validator').className = 'validator no';
			$('email-validator').innerHTML = 'Email is required';
			mySignup.validEmail = false;
		} else {
			if (!$F('email').match(/^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9\.-]+$/i)) {
				$('email-validator').className = 'validator no';
				$('email-validator').innerHTML = 'Email is not valid';
				mySignup.validEmail = false;
			} else {
				if (!$('email-validator').innerHTML == 'Already in use')
					mySignup.validEmail = true;
			}
		}
		
		if ($F('month') == '0' || $F('day') == '0' || $F('year') == '0') {
			$('date-validator').className = 'validator no';
			$('date-validator').innerHTML = 'Birthdate is required';
			mySignup.validDate = false;
		} else {
			if (!$('date-validator').innerHTML == 'Birthdate not valid')
				mySignup.validDate = true;
		}
		
		mySignup.checkPassword();
		mySignup.checkGender();
		mySignup.checkVerification();
		
		if (mySignup.validUsername && mySignup.validPassword && mySignup.validEmail && mySignup.validGender && mySignup.validDate && mySignup.validVerification)
			return true;
		else
			return false;
		
	},
	
	checkPassword: function() {
		
		if ($F('password') != '' && $F('password-confirm') != '') {
			if ($F('password') != $F('password-confirm')) {
				$('password-validator').className = 'validator no';
				$('password-validator').innerHTML = 'Passwords don\'t match';
				mySignup.validPassword = false;
			} else {
				$('password-validator').innerHTML = '';
				mySignup.validPassword = true;
			}
		} else {
			$('password-validator').innerHTML = 'Password is required';
			$('password-validator').className = 'validator no';
			mySignup.validPassword = false;
		}
		
	},
	
	checkGender: function() {
		
		if (!$('gender-male').checked && !$('gender-female').checked) {
			$('gender-validator').innerHTML = 'Gender is required';
			$('gender-validator').className = 'validator no';
			mySignup.validGender = false;
		} else {
			$('gender-validator').innerHTML = '';
			mySignup.validGender = true;
		}
		
	},
	
	checkVerification: function() {
		
		if ($F('verification').length != 5) {
			$('verification-validator').innerHTML = 'Verication is required';
			$('verification-validator').className = 'validator no';
			mySignup.validVerification = false;
		} else {
			$('verification-validator').innerHTML = '';
			mySignup.validVerification = true;
		}
		
	},
	
	checkUsername: function() {
		
		$('username-validator').className = 'validator go';
		$('username-validator').innerHTML = 'Checking availability';
		mySignup.validUsername = false;
		
		var d = new Date();
		var time = d.getTime();
		
		info = $F('username');
		
		if (info != '') {
			this.request = new Ajax.Request(
				'/ajax/username.php?time=' + time + '&username=' + info,
				{
					method: 'get',
					onComplete: mySignup.updateUsername.bind()
				}
			);
		} else {
			$('username-validator').innerHTML = 'Username is required';
			$('username-validator').className = 'validator no';
			mySignup.validUsername = false;
		}
		
	},
	
	updateUsername: function(data) {
		
		responseText = data.responseText;
		
		if (responseText == 'available') {
			$('username-validator').innerHTML = 'Available';
			$('username-validator').className = 'validator yes';
			mySignup.validUsername = true;
		} else {
			$('username-validator').innerHTML = 'Not available';
			$('username-validator').className = 'validator no';
			mySignup.validUsername = false;
		}
		
	},
	
	checkEmail: function() {
		
		if ($F('email') != '') {
			if (!$F('email').match(/^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9\.-]+$/i)) {
				
				$('email-validator').className = 'validator no';
				$('email-validator').innerHTML = 'Email is not valid';
				mySignup.validEmail = false;
				
			} else {
				
				$('email-validator').className = 'validator go';
				$('email-validator').innerHTML = 'Checking availability';
				mySignup.validEmail = false;
				
				var d = new Date();
				var time = d.getTime();
				
				info = $F('email');
				
				this.request = new Ajax.Request(
					'/ajax/email.php?time=' + time + '&email=' + info,
					{
						method: 'get',
						onComplete: mySignup.updateEmail.bind()
					}
				);
				
			}
		} else {
			$('email-validator').innerHTML = 'Email is required';
			$('email-validator').className = 'validator no';
			mySignup.validEmail = false;
		}
		
	},
	
	updateEmail: function(data) {
		
		responseText = data.responseText;
		
		if (responseText == 'available') {
			$('email-validator').innerHTML = 'Available';
			$('email-validator').className = 'validator yes';
			mySignup.validEmail = true;
		} else {
			$('email-validator').innerHTML = 'Already in use';
			$('email-validator').className = 'validator no';
			mySignup.validEmail = false;
		}
		
	},
	
	checkDate: function() {
		
		if ($F('month') != '0' && $F('day') != '0' && $F('year') != '0') {
			mySignup.validDate = false;
			
			var d = new Date();
			var time = d.getTime();
			
			info = $F('month') + '-' + $F('day') + '-' + $F('year');
			
			this.request = new Ajax.Request(
				'/ajax/date.php?time=' + time + '&date=' + info,
				{
					method: 'get',
					onComplete: mySignup.updateDate.bind()
				}
			);
		} else {
			$('date-validator').innerHTML = 'Birthdate is required';
			$('date-validator').className = 'validator no';
			mySignup.validDate = false;
		}
		
	},
	
	updateDate: function(data) {
		
		responseText = data.responseText;
		
		if (responseText != 'valid') {
			$('date-validator').innerHTML = 'Birthdate not valid';
			$('date-validator').className = 'validator no';
			mySignup.validDate = false;
		} else {
			$('date-validator').innerHTML = '';
			mySignup.validDate = true;
		}
		
	}
}

window.onload = function() {
	myRating = new Rating;
	mySignup = new Signup;
	myLogin = new Login;
	myComment = new Comment;
	myShareEmail = new ShareEmail;
}

function doIFrameSize(name,height) {
  var iframeElement = parent.document.getElementById(name);
  iframeElement.style.height = height; 
}

function setIFrameSize(name,height) {
  var rand_no = Math.random();
  rand_no = Math.ceil((rand_no * 3000)+500);
  var t=setTimeout('doIFrameSize("'+name+'","'+height+'")',rand_no);
} 
