/**********************************************************************
* Hook Up Your Dorm - JavaScript
*
* Basic usability and AJAX functionality for the Hook Up Your Dorm
* website.
*
* This file requires Prototype and Scriptaculous.
*
* This file imports the following files:
* 
* 	huyd-ajax.js -- generic ajax functions
* 	huyd-list.js -- list functions
* 	huyd-dist.js -- distribution functions
* 	huyd-give.js -- giver functions
*
**********************************************************************/


var HUYD = { addJs: function (js) {
				var newscript = new Element('script', {'src':js, 'type':'text/javascript'});
				$$('head')[0].insert({bottom: newscript});
			},
			load: function() {
				HUYD.addJs('/scripts/huyd-ajax.js');
				HUYD.addJs('/scripts/huyd-list.js');
				HUYD.addJs('/scripts/huyd-dist.js');
				HUYD.addJs('/scripts/huyd-give.js');			
			}};
HUYD.load();

// generic global functions
function generalError(msg) {
	dom_showMessage('Error!', msg);
}

function loginUser(email, password) {
	$$('#login-box .error').each(function(s) {s.remove();});
	var over_width = $('login-box').offsetWidth;
	var over_height = $('login-box').offsetHeight;
	$('login-box').insert({top: '<div id="login-overlay" class="overlay" style="height:' + over_height + 'px;width:' + over_width + 'px;margin:-10px 0px 0px -10px;"></div>'});
	$('login-overlay').fade({duration:.3, from:0, to:.5});
	ajax_req_loginUser(email, password)
}

function registerUser(name, sex, email, password, confirm, terms, university, howdidyoufind, details, newsletter) {
	$$('#registration-box .error').each(function(s) {s.remove();});
	var over_width = $('registration-box').offsetWidth;
	var over_height = $('registration-box').offsetHeight;
	$('registration-box').insert({top: '<div id="registration-overlay" class="overlay" style="height:' + over_height + 'px;width:' + over_width + 'px;margin:-10px 0px 0px -10px;"></div>'});
	$('registration-shadow').setStyle('height: ' + $('registration-box').offsetHeight + 'px;');
	$('registration-overlay').fade({duration:.3, from:0, to:.5});
	if (details.length > 0) {
		howdidyoufind += ': '+details;
	}
	ajax_req_registerUser(name, sex, email, password, confirm, terms, university, howdidyoufind, newsletter);
}

function gup(name) {
	// get url parameter by name
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if( results == null ) {
		return "";
	} else {
		return results[1];
	}
}

function focusInput(input) {
	if (!input.def) {
		input.def = input.value;
	}
	if (input.value == input.def) {
		input.value = '';
		$(input).removeClassName('empty');
	}
}

function blurInput(input) {
	if (input.value == '') {
		input.value = input.def;
		$(input).addClassName('empty');
	}
}

function reg_changeFind(sel) {
	if ($(sel.options[sel.selectedIndex]).hasClassName('detailed')) {
		sel.next('.details-input').value = '';
		sel.next('.details').innerHTML = sel.options[sel.selectedIndex].title;
		sel.next('.details-input').show();	
		sel.next('.details').show();
	} else {
		sel.next('.details-input').value = '';
		sel.next('.details-input').hide();
		sel.next('.details').hide();
	}
	$('registration-shadow').setStyle('height: ' + $('registration-box').offsetHeight + 'px;');
}

function enlargeImage(img) {
	// insert an overlay, then insert the image on top - if they click on the overlay or the image get rid of both
	
	var over_width = $$('body')[0].offsetWidth;
	var over_height = $$('body')[0].offsetHeight + 50;
	
	$$('body')[0].insert({top: '<div class="overlay" style="height:' + over_height + 'px; width:'+ over_width + 'px;" onclick="hideEnlargedImage();"></div><div class="enlarged-image" onclick="hideEnlargedImage();"><img src="'+img.src+'" alt="Enlarged Image" onclick="hideEnlargedImage();" /></div>'});
}

function hideEnlargedImage() {
	if ($$('body')[0].down('.overlay')) {
		$$('body')[0].down('.overlay').remove();
		$$('body')[0].down('.enlarged-image').remove();
	}
}

// global dom functions
function dom_showMessage(title, msg) {
	var msg_width = 470;
	var msg_top = 100;
	
	var over_width = $$('body')[0].offsetWidth;
	var over_height = $$('body')[0].offsetHeight + 50;
	
	var msg_left = ((over_width - msg_width) / 2);
	
	$$('body')[0].insert({top: '<div class="overlay" style="height:' + over_height + 'px; width:'+ over_width + 'px;"></div>'});
	$$('body')[0].insert({top: '<div id="message-shadow" class="popup-shadow" style="left:' + msg_left + 'px;top:' + msg_top + 'px;"></div>'});
	$$('body')[0].insert({top: '<div id="message-box" class="popup message"  style="left:' + msg_left + 'px;top:' + msg_top + 'px;"><h2>' + title + '</h2><p>' + msg + '</p><input type="button" onclick="dom_hideMessage();" value="Close" /></div>'});
	$('message-shadow').setStyle('height: ' + $('message-box').offsetHeight + 'px;');
}

function dom_hideMessage() {
	$('message-box').remove();
	$('message-shadow').remove();
	$$('body')[0].down('.overlay').remove();
}

function dom_showLogin(returnto) {
	// first show a grey overlay, then make a login box and show that
	var over_height = $$('body')[0].offsetHeight + 50;
	var over_width = $$('body')[0].offsetWidth;
	
	var login_left = ((over_width - 470) / 2);
	var login_top = 100;
	
	login_left = login_left > 0 ? login_left : 0;
	
	var login = '<div id="login-box" class="popup" style="left:' + login_left + 'px;top:' + login_top + 'px;">' + 
				'<form action="login.php" method="post">' +
				'<input type="hidden" name="actiontype" value="login" />' + 
				'<input type="hidden" name="returnto" value="' + returnto + '" />' + 
				'<h2>Log in</h2>' + 
				'<p>Don\'t have an account? <a href="register.php" onclick="dom_hideLogin(); dom_showRegistration(); return false;">Registration</a> takes only a couple minutes!</p>' + 
				'<dl>' + 
				'<dt>Email Address:</dt>' + 
				'<dd><input type="text" id="login-email" name="email" /></dd>' + 
				'<dt>Password:</dt>' + 
				'<dd><input type="password" id="login-password" name="password" /></dd>' + 
				'<dt><input type="submit" value="Log In" onclick="loginUser($(this).up().previous(2).down().value, $(this).up().previous().down().value); return false;" /></dt><dd><input type="button" value="Cancel" onclick="dom_hideLogin()" /></dd>' + 
				'</dl>' + 
				'</form>' +
				'</div>' + 
				'<div id="login-shadow" class="popup-shadow" style="left:' + login_left + 'px;top:' + login_top + 'px;"></div>';
	$$('body')[0].insert({top: '<div class="overlay" style="height:' + over_height + 'px; width:'+ over_width + 'px;"></div>'});
	$$('body')[0].insert({top: login});
}

function dom_hideLogin() {
	$('login-box').remove();
	$('login-shadow').remove();
	$$('body')[0].down('.overlay').remove();
}

function dom_showRegistration() {
	// first show grey overlay, then make a registration box and show that over it
	var over_height = $$('body')[0].offsetHeight + 50;
	var over_width = $$('body')[0].offsetWidth;
	
	var register_left = ((over_width - 470) / 2);
	var register_top = 100;
	
	register_left = register_left > 0 ? register_left : 0;
	
	var registration = '<div id="registration-box" class="popup" style="left:' + register_left + 'px;top:' + register_top + 'px;">' + 
				'<form action="register.php" method="post">' +
				'<input type="hidden" name="actiontype" value="create_account" />' + 
				'<h2>Register</h2>' + 
				'<p>Already have an account? <a href="login.php" onclick="dom_hideRegistration(); dom_showLogin(\'list\'); return false">Login</a> to begin.</p>' + 
				'<dl>' + 
				'<dt>Name:</dt>' + 
				'<dd><input type="text" id="register-name" name="fullname" />*</dd>' +
				'<dt>Sex:</dt>' + 
				'<dd><select name="sex" id="register-sex">' + 
				'	<option value="0">Female</option>' + 
				'	<option value="1">Male</option>' + 
				'</select>*</dd>' + 
				'<dt>Email Address:</dt>' + 
				'<dd><input type="text" id="register-email" name="email" />*</dd>' + 
				'<dt>Password:</dt>' + 
				'<dd><input type="password" id="register-password" name="password" />*</dd>' + 
				'<dt>&nbsp;</dt><dd><input type="password" id="register-confirm" name="confirm_password" />*</dd>' + 
				'<dt>How did you find us?</dt><dd>' + 
				'<select name="howdidyoufind" id="register-howdidyoufind" onchange="reg_changeFind($(this));">' + 
				'	<option value="Google">Google</option>' + 
				'	<option value="Other Search Engine" class="detailed" title="Which one?">Other Search Engine</option>' + 
				'	<option value="Facebook">Facebook</option>' + 
				'	<option value="Postcard">Postcard</option>' + 
				'	<option value="Campus Flyer" class="detailed" title="Promo Code">Campus Flyer</option>' + 
				'	<option value="Word of Mouth">Word of Mouth</option>' + 
				'</select>' + 
				'<span class="details" style="display:none;"></span><input type="text" value="" name="details" class="details-input" id="register-details" style="display:none;" />' + 
				'</dd>' + 
				'<dt>University:</dt><dd><input type="text" value="" id="register-university" name="university" /></dd>' +
				'<dt>Newsletter Signup:</dt><dd><input type="checkbox" name="newsletter" id="register-newsletter" value="1" checked="checked" /></dd>' +
				'</dl>' +
				'<div id="legal_terms">' + lterms + '</div>' +
				'<dl>' + 
				'<dt>Agree to legal terms:</dt><dd><input id="register-terms" type="checkbox" name="terms" value="1" />*</dd>' +
				'<dt><input type="submit" value="Register" onclick="registerUser($(\'register-name\').value, $(\'register-sex\').options[$(\'register-sex\').selectedIndex].value, $(\'register-email\').value, $(\'register-password\').value, $(\'register-confirm\').value, ($(\'register-terms\').checked ? 1 : 0), $F(\'register-university\'), $F(\'register-howdidyoufind\'), $F(\'register-details\'), ($(\'register-newsletter\').checked ? 1 : 0)); return false;" /></dt><dd><input type="button" value="Cancel" onclick="dom_hideRegistration()" /></dd>' + 
				'</dl>' + 
				'</form>' +
				'<p>* - These items are required.</p>' +
				'</div>' + 
				'<div id="registration-shadow" class="popup-shadow" style="left:' + register_left + 'px;top:' + register_top + 'px;"></div>';
	$$('body')[0].insert({top: '<div class="overlay" style="height:' + over_height + 'px; width:'+ over_width + 'px;"></div>'});
	$$('body')[0].insert({top: registration});
	$('registration-shadow').setStyle('height: ' + $('registration-box').offsetHeight + 'px;');
}

function dom_hideRegistration() {
	$('registration-box').remove();
	$('registration-shadow').remove();
	$$('body')[0].down('.overlay').remove();
}


// global ajax requests
function ajax_req_loginUser(email, password) {
	post = $H({"qc":4, "email":email, "password":password});
	ajax_req(post, ajax_resp_loginUser);
}

function ajax_req_registerUser(name, sex, email, password, confirm, terms, university, howdidyoufind, newsletter) {
	post = $H({"qc":5, "fullname":name, "sex":sex, "email":email, "password":password, "confirm_password":confirm, "terms":terms, "university":university, "howdidyoufind":howdidyoufind, "newsletter":newsletter});
	ajax_req(post, ajax_resp_registerUser);
}

// global ajax responses
function ajax_resp_loginUser() {
	switch(this.header.sc) {
		case 0:
			// worked - we can't just reload the page though, we have to do a "real" post, so we get a new cookie etc - lets post to login.php
			$('login-box').down('form').submit();
			return;
		case 4:
			// bad login info - show error, clear password, and remove fade.
			$('login-box').down('p').insert({after:'<p class="error">' + this.header.msg + '</p>'});
			$('login-password').value = '';
			$('login-overlay').fade({duration:.2, from:1, to:0, afterFinish:function() {$('login-overlay').remove();}});
			return;
		case 5:
			// user not approved yet - do something here
			$('login-box').down('p').insert({after:'<p class="error">' + this.header.msg + '</p>'});
			$('login-password').value = '';
			$('login-overlay').fade({duration:.2, from:1, to:0, afterFinish:function() {$('login-overlay').remove();}});
			return;
		default:
			// error
			generalError(this.header.msg);
			return;			
	}
}

function ajax_resp_registerUser() {
	switch(this.header.sc) {
		case 0:
			// errors! - do something here
			$('registration-box').down('p').insert({after:'<p class="error">' + this.header.msg + '</p>'});
			$('register-password').value = '';
			$('register-confirm').value = '';
			$('registration-overlay').fade({duration:.2, from:1, to:0, afterFinish:function() {$('registration-overlay').remove();}});
			return;
		case 1:
			// worked - tell them it worked and to click on the link in their email
			dom_hideRegistration();
			dom_showMessage('Success!', this.header.msg);
			break;
		case 6:
			// form problems - do something here
			$('registration-box').down('p').insert({after:'<p class="error">' + this.header.msg + '</p>'});
			if (this.body.name) {
				$('register-name').up().insert({bottom:'<p class="error">' + this.body.name + '</p>'});
			}
			if (this.body.email) {
				$('register-email').up().insert({bottom:'<p class="error">' + this.body.email + '</p>'});
			}
			if (this.body.password) {
				$('register-password').up().insert({bottom:'<p class="error">' + this.body.password + '</p>'});
			}
			if (this.body.confirm) {
				$('register-confirm').up().insert({bottom:'<p class="error">' + this.body.confirm + '</p>'});
			}
			if (this.body.terms) {
				$('register-terms').up().insert({bottom:'<p class="error">' + this.body.terms + '</p>'});
			}
			$('registration-shadow').setStyle('height: ' + $('registration-box').offsetHeight + 'px;');
			$('register-password').value = '';
			$('register-confirm').value = '';			
			$('registration-overlay').fade({duration:.2, from:1, to:0, afterFinish:function() {$('registration-overlay').remove();}});
			return;
		default:
			generalError(this.header.msg);
			return;
	}
	// user is registered, but not logged in and not approved yet - show a login form
}