/**
 * @author Alexander Farkas
 * v. 1.02
 */
(function($) {
	$.extend($.fx.step,{
	    backgroundPosition: function(fx) {
            if (fx.state === 0 && typeof fx.end == 'string') {
                var start = $.curCSS(fx.elem,'backgroundPosition');
                start = toArray(start);
                fx.start = [start[0],start[2]];
                var end = toArray(fx.end);
                fx.end = [end[0],end[2]];
                fx.unit = [end[1],end[3]];
			}
            var nowPosX = [];
            nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
            nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];
            fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];

           function toArray(strg){
               strg = strg.replace(/left|top/g,'0px');
               strg = strg.replace(/right|bottom/g,'100%');
               strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
               var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
               return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
           }
        }
	});
})(jQuery);

var i=0;
var fadeInTimer;
var navItems, rollOverChildren;
var homeRolloverRandomized = 0;
var homeRolloverRandomizer = [3,1,5,0,2,4];
var homeFadeOutTimer;

$(document).ready(function() {

	if ($('body#home').length != 1) {
		var navFadedInState = getCookie('navFadedInCookie');
		if (navFadedInState != 'true') {
			$('#navigation ul').children().hide();
			navItems = $('#navigation ul').children();
			fadeInTimer = setInterval("fadeInNav()", 500);
			setCookie('navFadedInCookie', 'true', '', '/');
		}
	}
	
	var rollOverChildren = $('#rollOvers').children('a');
	var curBgImageSrc, newBgImageSrc;
	$('#rollOvers a').hover(function(e) {
		for (var i=0; i<6; i++) {
			if ($(rollOverChildren[i]).attr('id') != $(e.target).attr('id')) {
				$(rollOverChildren[i]).css({backgroundPosition: "0 -570px"});
			}
			else {
				$(rollOverChildren[i]).css({backgroundPosition: "0 -285px"});
			}
		}
	}, function (e) {
		for (var i=0; i<6; i++) {
			$(rollOverChildren[i]).css({backgroundPosition: "0 0"});
		}
	});
	
	$('#rollOvers a').click(function(e) {
		e.preventDefault();
		homeFadeOutTimer = setInterval(function() {homeFadeOut(e)}, 100);
	});
	
	$('#submitButton').hover(
		function() {
			$('#submitButton img').attr("src","images/submit-button-on-png8.png");
		},
		function() {
			$('#submitButton img').attr("src","images/submit-button-png8.png");
	});
	
	$('#registerButton').hover(
		function() {
			$('#registerButton img').attr("src","images/register-button-on-png8.png");
		},
		function() {
			$('#registerButton img').attr("src","images/register-button-png8.png");
	});
	
	jQuery.validator.addMethod("noUniversitySelected", function(value, element) {
		if (element.value == "Choose one" || element.value == "-----") {
			return false;
		}
		else return true;
		},
		"Please select your University"
	);
	
	jQuery.validator.addMethod("noYearSelected", function(value, element) {
		if (element.value == "Choose one" || element.value == "-----") {
			return false;
		}
		else return true;
		},
		"Please select your Year of Study"
	);
	
	jQuery.validator.addMethod("noUniversitySelectedTM2", function(value, element) {
		if ((element.value == "Choose one" || element.value == "-----") && $('#secondTeamMemberReg').attr('checked') == true) {
			return false;
		}
		else return true;
		},
		"Please select your University"
	);
	
	jQuery.validator.addMethod("noYearSelectedTM2", function(value, element) {
		if ((element.value == "Choose one" || element.value == "-----") && $('#secondTeamMemberReg').attr('checked') == true) {
			return false;
		}
		else return true;
		},
		"Please select your Year of Study"
	);
	jQuery.validator.addMethod("uniqueEmail", function(value, element) {
		if (element.value == $('#subEmail')[0].value) {
			return false;
		}
		else return true;
		},
		"Please enter a unique email address for your second team member"
	);
	
	var updatesFormOptions = { 
		// target:			'#updatesFormResponse',			// target element(s) to be updated with server response 
		//beforeSubmit:	showValues,				// pre-submit callback 
		success:			updatesFormSuccess,		// post-submit callback 
		url:					"registerUser.php",			// override for form's 'action' attribute 
		type:					"post"					// 'get' or 'post', override for form's 'method' attribute 
		//dataType:			'xml'					// 'xml', 'script', or 'json' (expected server response type) 
	};
	
	var registerFormOptions = { 
		// target:			'#registerFormResponse',			// target element(s) to be updated with server response 
		//beforeSubmit:	showValuesRegister,				// pre-submit callback 
		success:			proposalFormSuccess,		// post-submit callback 
		url:				"submitProposal.php",				// override for form's 'action' attribute 
		type:					"post"					// 'get' or 'post', override for form's 'method' attribute 
		//dataType:			null					// 'xml', 'script', or 'json' (expected server response type) 
	};
	
	$("form#registerUpdates").validate({
		onkeyup: false,
		onfocusout: false,
		onclick: false,
		rules: {
			fname: "required",
			lname: "required",
			email: {
				required: true,
				email: true,
				remote: "validEmail.php"
			},
			school: {
				noUniversitySelected: true
			},
			yearOfStudy: {
				noYearSelected: true
			}
		},
		messages: {
			fname: "Please enter your First Name",
			lname: "Please enter your Last Name",
			email: {
				required: "Please enter an Email",
				email: "Please enter a valid Email",
				remote: "This email address has already been registered"
			}
		},
		submitHandler: function(form){ // Called on successful form validation
			//alert('Form passed validation');
			$("form#registerUpdates").ajaxSubmit(updatesFormOptions);
		}
	});
	
	$("form#submitProposal").validate({
		onkeyup: false,
		onfocusout: false,
		onclick: false,
		rules: {
			fname: "required",
			lname: "required",
			email: {
				required: true,
				email: true
			},
			school: {
				noUniversitySelected: true
			},
			yearOfStudy: {
				noYearSelected: true
			},
			fnameTeamMember2: {
				required: "#secondTeamMemberReg:checked"
			},
			lnameTeamMember2: {
				required: "#secondTeamMemberReg:checked"
			},
			emailTeamMember2: {
				required: "#secondTeamMemberReg:checked",
				email: true,
				uniqueEmail: true
			},
			schoolTeamMember2: {
				required: "#secondTeamMemberReg:checked",
				noUniversitySelectedTM2: true
			},
			yearOfStudyTeamMember2: {
				required: "#secondTeamMemberReg:checked",
				noYearSelectedTM2: true
			},
			coverPageFile: {
				required: true,
				accept: "pdf"
			},
			proposalFile: {
				required: true,
				accept: "pdf"
			}
		},
		messages: {
			fname: "Please enter your First Name",
			lname: "Please enter your Last Name",
			email: {
				required: "Please enter an Email",
				email: "Please enter a valid Email"
			},
			fnameTeamMember2: "Please enter your First Name",
			lnameTeamMember2: "Please enter your Last Name",
			emailTeamMember2: {
				required: "Please enter an Email",
				email: "Please enter a valid Email"
			},
			coverPageFile: {
				required: "Please upload your COMPLETED Official Submission Cover Page",
				accept: "Only PDFs are accepted"
			},
			proposalFile: { 
				required: "Please upload your Final Proposal",
				accept: "Only PDFs are accepted"
			}
			
		},
		submitHandler: function(form){ // Called on successful form validation
			//alert('Form passed validation');
			$("form#submitProposal").ajaxSubmit(registerFormOptions);
		}
	});
	
	$('#secondTeamMemberReg').click(function() {
		$('#secondTeamMemberTable').toggle();
	});
	
	$('#registerUpdates').submit(function(){
    	$('#registerUpdates button', this).attr('disabled', 'disabled');
	});
	
	$('#submitProposal').submit(function(){
    	$('#submitProposal button', this).attr('disabled', 'disabled');
	});
	
});
function showValues(formData, jqForm, updatesFormOptions){
	 var queryString = $.param(formData); 
     alert('About to submit: \n\n' + queryString);
     return true;

}
function showValuesRegister(formData, jqForm, registerFormOptions){
	 var queryString = $.param(formData); 
     alert('About to submit: \n\n' + queryString);
     return true;

}
function contactDialog () {
	$("body").append('<div id="dialogWrapper"><div id="closeDialog"><a>close X</a></div><div id="dialog"><h2>contact us</h2><p>The CNTAE Executive Committee is a dedicated team of McMaster commerce students. Committed to improving the experience of the participant and partner, the team spends hours securing sponsorship, visiting campuses recruiting judges and promoting the event on campuses across Canada.</p><p>Our team is here to help you with any questions or comments you may have. Please do not hesitate to contact us at <a href="mailto:info@topadexec.com">info@topadexec.com</a></p></div></div>');
	$.ui.dialog.defaults.bgiframe = true; // is this actually working? documentation says it needs a plugin...
	$("#dialogWrapper").dialog({ 
		close: function(event, ui) {
			$("#dialogWrapper").remove(); // remove dom elements upon closing the dialog
		},
		modal: true,
		width: 600
	});
	$("#dialogWrapper #closeDialog").click(function() { 
		$("#dialogWrapper").dialog('close');
	});
}

function updatesFormSuccess() {
	$("body").append('<div id="dialogWrapper"><div id="closeDialog"><a>close</a> X</div><div id="dialog"><h2>pieced-in data reply confirmed*</h2><p>*translation: thank you for registering</p></div><div id ="results">result:</div></div>');
	$.ui.dialog.defaults.bgiframe = true; // is this actually working? documentation says it needs a plugin...
	$("#dialogWrapper").dialog({ 
		close: function(event, ui) {
			$("#dialogWrapper").remove(); // remove dom elements upon closing the dialog
		},
		modal: true,
		width: 600
	});
	$("#dialogWrapper #closeDialog").click(function() { 
		$("#dialogWrapper").dialog('close');
	});
	$('form#registerUpdates')[0].reset();
}

function proposalFormSuccess() {
	$("body").append('<div id="dialogWrapper"><div id="closeDialog"><a>close</a> X</div><div id="dialog"><h2>appreciation memo congratulations*</h2><p>*translation: thank you for submitting</p></div></div>');
	$.ui.dialog.defaults.bgiframe = true; // is this actually working? documentation says it needs a plugin...
	$("#dialogWrapper").dialog({ 
		close: function(event, ui) {
			$("#dialogWrapper").remove(); // remove dom elements upon closing the dialog
		},
		modal: true,
		width: 600
	});
	$("#dialogWrapper #closeDialog").click(function() { 
		$("#dialogWrapper").dialog('close');
	});
	$('form#submitProposal')[0].reset();
}

function fadeInNav() {
	$(navItems[i]).fadeIn();
	i++;
	if(i == 6) {
		clearInterval(fadeInTimer);
	}
}

function homeFadeOut(e) {
	rollOverChildren = $('#rollOvers').children('a');
	
	if ($(e.target).attr('id') != $(rollOverChildren[homeRolloverRandomizer[homeRolloverRandomized]]).attr('id')) {
		$(rollOverChildren[homeRolloverRandomizer[homeRolloverRandomized]]).fadeTo('fast',0);
	}
	homeRolloverRandomized++;
	
	if (homeRolloverRandomized == 6) {
		window.setTimeout(function() { $(e.target).fadeTo('fast',0) }, 150);
		clearInterval(homeFadeOutTimer);
		window.setTimeout(function() { window.location = $(e.target).attr('href'); }, 200);
	}
}

function setCookie(name, value, expires, path, domain, secure) {
	var curCookie = name + '=' + escape(value) + ((expires) ? '; expires=' + expires.toGMTString() : '') + ((path) ? '; path=' + path : '') + ((domain) ? '; domain=' + domain : '') + ((secure) ? '; secure' : '');
	document.cookie = curCookie;
}

function getCookie(name) {
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	if (begin == -1) {
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	}
	else begin += 2;
	var end = document.cookie.indexOf(";", begin);
	if (end == -1) end = dc.length;
	return unescape(dc.substring(begin + prefix.length, end));
}
