/* Author: 

*/

	var UserNew = false;
	var ClassNum = 1;
	var TimeOffset = 0;

	var BackgroundColorChosen = false;
	var TextColorChosen = false;
	var ColorElement = false;

	var ColorList = new Array('#66CCCC', '#33CCFF', '#6666CC', '#CC66CC','#FF9900', '#FF6666', '#993399');
	var ColorPointer = 0;

	var FacebookData = false;

	$(document).ready(function() {
		$('#EditSchedule select').selectBox();
		
		$('#ButtonSignUp').click(function() { FacebookLogin(); });
		$('#ButtonSave').click(function() { SaveSchedule(); });
		$('#ButtonAdd').click(function() { AddAnotherClass(); });		
		$('#SchoolEmail').focus(function() { $('#SchoolEmail').css('color','#000000'); if($(this).val() == 'you@school.edu') $(this).val(''); });
		$('#ButtonSaveSchool').click(function() { SchoolSave(); });
				
		InitSchedule();
		
		if(Classes.length > 0)
			LoadClasses();		
					
	});
	

	function InitSchedule() {
		TimeOffset = Date.parse('January 1, 2011 7:00am').getTime() / 1000;
		for(i = 7; i <= 21; i++) {
			var t = i;
			var am = 'am';
			if(t >= 12) {
				if(t > 12)
					t = t - 12;
				am = 'pm';
			}
			$('#ClassSchedule table tr:last').after('<tr><td class="TDFirst"><span>' + t + am + '</span></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td class="TDLast">&nbsp;</td></tr>');
		}
		$('#BackgroundColor td').hover(function() { PickAColor($(this),'hover','BackgroundColor'); });		
		$('#TextColor td').hover(function() { PickAColor($(this),'hover','TextColor'); });		
		$('#BackgroundColor td').click(function() { PickAColor($(this),'click','BackgroundColor'); });		
		$('#TextColor td').click(function() { PickAColor($(this),'click','TextColor'); });		
		$('#Class-1').change(function(){ClassChange($(this))});
		$('#Class-1 .ClassColors').click(function() { ShowPickColor($(this)); });
		$('#Class-1 .ClassColors').css('background-color',ColorList[ColorPointer]);	
		for(i = 1; i <= 5; i++)
			AddAnotherClass(true);
	}
	

	function ShowPickColor(e) {
		ColorElement = e;
		$('#PickColor').css('left',(e.offset().left-200) + 'px');
		$('#PickColor').css('top',(e.offset().top+40) + 'px');
		$('#PickColor').show();
	}
		
	function PickColor(c) { 
		ColorElement.css('background-color','#' + c);		
		$('#PickColor').hide();		
		ClassChange(ColorElement.parent().parent());
	}


	function AddAnotherClass(isinit) {
		ClassNum++;
		ColorPointer++;
		if(ColorPointer == ColorList.length)
			ColorPointer = 0;
		$('#ClassTable tr:last').after('<tr id="Class-' + ClassNum + '">' + $('#ClassTable tr:nth-child(2)').html() + '</tr>');
		$('#Class-' + ClassNum).change(function(){ClassChange($(this))});
		$('#Class-' + ClassNum + ' .ClassColors').click(function() { ShowPickColor($(this)); });
		$('#Class-' + ClassNum + ' .ClassColors').css('background-color',ColorList[ColorPointer]);			
		if(ClassNum == 2)
			$('#Class-2 select option[value="D"]').attr("selected", "selected");
		if(ClassNum == 3)
			$('#Class-3 select option[value="L"]').attr("selected", "selected");
		$('#Class-' + ClassNum + ' .Mon').attr('checked',false);
		$('#Class-' + ClassNum + ' .Tue').attr('checked',false);
		$('#Class-' + ClassNum + ' .Wed').attr('checked',false);
		$('#Class-' + ClassNum + ' .Thu').attr('checked',false);
		$('#Class-' + ClassNum + ' .Fri').attr('checked',false);
		$('#Class-' + ClassNum + ' select').removeClass('selectBox');		
		$('#Class-' + ClassNum + ' .selectBox').remove();
		$('#Class-' + ClassNum + ' select').selectBox();
	}


	function LoadClasses() {
		var semester = false;
		for(var i = 0; i < Classes.length; i++) {
			var n = i + 1;
			if(n > ClassNum)
				AddAnotherClass();
			$('#Class-' + n + ' select').val(Classes[i]['Type']);
			$('#Class-' + n + ' .CourseNum').val(Classes[i]['Course']);
			if(Classes[i]['Days'].indexOf('M') >= 0) $('#Class-' + n + ' .Mon').attr('checked','checked');
			if(Classes[i]['Days'].indexOf('T') >= 0) $('#Class-' + n + ' .Tue').attr('checked','checked');
			if(Classes[i]['Days'].indexOf('W') >= 0) $('#Class-' + n + ' .Wed').attr('checked','checked');
			if(Classes[i]['Days'].indexOf('R') >= 0) $('#Class-' + n + ' .Thu').attr('checked','checked');
			if(Classes[i]['Days'].indexOf('F') >= 0) $('#Class-' + n + ' .Fri').attr('checked','checked');
			$('#Class-' + n + ' #Semester').val(Classes[i]['Semester']);
			if(parseFloat(Classes[i]['Starts']) > TimeOffset)
				Classes[i]['Starts'] = parseFloat(Classes[i]['Starts']) - TimeOffset;
			if(parseFloat(Classes[i]['Ends']) > TimeOffset)
				Classes[i]['Ends'] = parseFloat(Classes[i]['Ends']) - TimeOffset;
			$('#Class-' + n + ' .Starts').val(TimeToString(Classes[i]['Starts']));
			$('#Class-' + n + ' .Ends').val(TimeToString(Classes[i]['Ends']));
			$('#Class-' + n + ' .ClassColors').css('background-color',Classes[i]['BackgroundColor']);
			$('#Class-' + n + ' .ClassColors').css('color',Classes[i]['TextColor']);
			ClassChange(n);			
			semester = Classes[i]['Semester'];
		}
		if(semester)
			$('#Semester').val(semester);
	}
	
	function TimeToString(t) {
		var d = new Date((parseFloat(t) + TimeOffset)*1000);
		var p = 'am';
		var h = d.getHours();
		if(h == 12)
			p = 'pm';
		else if(h > 12) {
			p = 'pm';
			h = h - 12;
		}
		else if(h == 0)
			h = 12;
		var m = d.getMinutes();
		if(m < 10)
			m = '0' + m.toString();
		else
			m = m.toString();
		return h.toString() + ':' + m + p;			
	}
	
	
	function ClassChange(n, saving) {	
		if(n > 0)
			n = '#Class-' + n;
		else if(!saving)
			n = '#' + n.attr('id');
		else
			n = '#Class-' + n;
		var course = $(n + ' .CourseNum').val().toString();
		if(course != '') {
			var letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
			var badcourse = false;
			if((letters.indexOf(course.substr(0,1).toUpperCase()) < 0) || (letters.indexOf(course.substr(1,1).toUpperCase()) < 0))
				badcourse = true;
			else {
				var numbers = false;
				for(var i = 1; i <= 9; i++)
					if(course.indexOf(i.toString()) >= 2)
						numbers = true;
				if(!numbers)
					badcourse = true;
			}
			if(badcourse) {
				$('#BadCourse').show();
				setTimeout(function(){ $('#BadCourse').hide(); },4000);
				return;
			}
		}
		var theclass = {Type: $(n + ' select').val(),
						Course: $(n + ' .CourseNum').val().toString(),
						Days: '',
						Semester:$('#Semester').val(),
						Starts: (GetTimeStamp($(n + ' .Starts').val().toString()) - TimeOffset),
						Ends: (GetTimeStamp($(n + ' .Ends').val().toString()) - TimeOffset),
						BackgroundColor: $(n + ' .ClassColors').css('background-color'),
						TextColor: $(n + ' .ClassColors').css('color') };
		if($(n + ' .Mon').is(':checked'))
			theclass.Days += 'M';
		if($(n + ' .Tue').is(':checked'))
			theclass.Days += 'T';
		if($(n + ' .Wed').is(':checked'))
			theclass.Days += 'W';
		if($(n + ' .Thu').is(':checked'))
			theclass.Days += 'R';
		if($(n + ' .Fri').is(':checked'))
			theclass.Days += 'F';
		if(theclass.Ends < theclass.Starts)
			theclass.Ends += (12*60*60);
		if(!saving)
			PlaceClass(theclass, n);
		if((theclass.Course != '') && (theclass.Starts > 0) && (theclass.Ends > 0) && (theclass.Days != ''))
			return theclass;
		else
			return false;
	}
	
	
	function SaveSchedule(isnew) {
		var schedule = new Array();
		for(var n = 1; n <= ClassNum; n++) {
			if(c = ClassChange(n,true))
				schedule.push(c)
		}
		if(schedule.length > 0) {			
			$('#ButtonSave').attr('disabled','disabled');
			$('#ButtonSave').text('Saving...');
			if(!LoggedIn) {
				$('#Dimmer').show(); 
				$('#SignUp').show();			
				$('#SignUpLoading').hide();
				$('#SignUpFacebook').show();
				$('#SignUpSchool').hide();
				DoGoal('show-facebook');
			}
			else {		
				$.ajax({
					url: '/editschedule.php',
					type: "POST", 
					data: {Action:'saveschedule', Schedule:JSON.stringify(schedule, null, 2), CourseIds:CourseIds},
					dataType: "json", 
					success:function(r) {
						if(r.Error == 'NOUSER')
							window.location = '/account';
						else if(r.Success) {
							if(isnew) {
								/*
								FB.api('/me/feed', 'post', { 
									picture:'http://www.collegeruled.com/images/newsfeed2.jpg',
									link:'http://www.collegeruled.com/editschedule?utm_source=Facebook&utm_medium=Newsfeed&utm_campaign=Facebook%2BViral',
									name:'Class Schedule for this Semester',
									caption:'Create your class schedule. See who is in your classes.',
									description:'Click the link'
									}, 
									function(r) {
										window.location = '/new';
									}
								);
								*/
								$.ajax({
									url: '/fbauth.php',
									type: "POST", 
									data: {Action:'post'},
									dataType: "json", 
									success:function(r) {
										window.location = '/new';
									}
								});
							}
							else
								window.location = '/schedule?Message=Schedule+Saved';
						}
						else {
							$('#ButtonSave').attr('disabled','false');
							$('#ButtonSave').text('Save Schedule');
							$('#Dimmer').hide(); 
							$('#SignUp').hide();			
						}
					}
				});
			}
		}
	}
	
	
	function GetTimeStamp(z) {
		if(z.length >= 1) {
			if((z.indexOf('p') < 0) && (z.indexOf('P') < 0) && (z.indexOf('a') < 0) && (z.indexOf('A') < 0)) {
				if((parseInt(z) > 6) && (parseInt(z) < 12))
					z = z + 'am';
				else
					z = z + 'pm';
			}
			var shift = false;
			if(z.indexOf('12:') >= 0) { z = z.replace("12:","1:"); shift = true; }
			if(z.indexOf('12p') >= 0) { z = z.replace("12p","1p"); shift = true; }
			if(z.indexOf('12 p') >= 0) { z = z.replace("12 p","1 p"); shift = true; }
			z = Date.parse('January 1, 2011 ' + z).getTime();
			if(shift)
				z = z - (60*60*1000);
			return z / 1000;
		}
		else
			return 0;		
	} 
	
	var LastPlacedClass = false;
	
	function PlaceClass(c, id) {
		id = id.substr(id.indexOf('-')+1);
		if((c.Course != '') && (c.Starts > 0) && (c.Ends > 0) && (c.Days != '')) {
			if(c.Course != LastPlacedClass) {
				DoGoal('add-to-schedule');
				LastPlacedClass = c.Course;
			}
			$('.Schedule-' + id).remove();
			for(i = 0; i < c.Days.length; i++) {
				var x = 0;
				if(c.Days.substr(i,1) == 'M')
					x = 0;
				if(c.Days.substr(i,1) == 'T')
					x = 1;
				if(c.Days.substr(i,1) == 'W')
					x = 2;
				if(c.Days.substr(i,1) == 'R')
					x = 3;
				if(c.Days.substr(i,1) == 'F')
					x = 4;
				x = 45 + 1 + (x * 70);
				var css = 'margin-left:' + x + 'px; ';
				css += 'margin-top:' + (28 + (Math.round((c.Starts) / (15*60))*8)) + 'px; ';
				css += 'height:' + ((Math.ceil((c.Ends-c.Starts) / (15*60))*8)-1) + 'px; ';
				css += 'background-color: ' + c.BackgroundColor + '; ';
				css += 'color: ' + c.TextColor + '; ';
				var h = ((Math.ceil((c.Ends-c.Starts) / (15*60))*8)-1-4);
				$('#ClassSchedule').append('<div class="ScheduleClass Schedule-' + id + '" style="' + css + '"><span style="height:' + h + 'px;">' + c.Course + '</span></div>');
			}
		}
	}
	
		
	function FacebookLogin() {
		$('#SignUpFacebook').hide();
		$('#SignUpLoading').show();		
		FB.init({appId:'23a9ecddb96dbec39a4bac64bcaaad4b', status:true, cookie:true, xfbml:true});	      					
		FB.login(function(r) {
			if(r.session) {
				FB.api('/me',function(rm) {	
					FB.api('/me/friends',function(rf) {
						var friends = new Array();
						if(rf['data']) {
							for(var i = 0; i < rf['data'].length; i++)
								friends.push(rf['data'][i]['id']);
							friends = friends.join(',');
							$.ajax({
								url: '/fbauth.php',
								type: "POST", 
								data: {Action:'signin', fbid:rm['id'], Friends:friends, FriendsHash:friends.substr(Math.floor(friends.length/2),5)}, 
								dataType: "json", 
								success:function(r) {	
									if(!r.IsNew)
										window.location = '/schedule';
									else if(r.Success) {
										LoggedIn = true;
										ShowSchool(rm);
									}
									else
										alert('unkown error 2');
								}
							});						
						}
					});
				});
			}
			else {
				$('#SignUpFacebook').show();
				$('#SignUpLoading').hide();
				DoGoal('facebook-error');				
				alert('There was an error contacting Facebook. Please try again.');
			}
		},{perms:'publish_stream,email,user_education_history'});
		DoGoal('facebook-login');			
	}
	
	
		
	
	function ShowSchool(fb) {
		DoGoal('show-school');
		var year = '';
		$('#SchoolSelect').remove('option');
		var added = false;
		if((fb['education']) && (fb['education'].length > 0)) {
			for(var z = fb['education'].length - 1; z >= 0; z--) {
				if(fb['education'][z]['type'] == 'College') {
					if(fb['education'][z]['school']['name'] != 'null') {
						added = true;
						$('#SchoolSelect').append('<option value="' + fb['education'][z]['school']['name'] + '">' +  fb['education'][z]['school']['name'] + '</option>');
						if((year == '') && (fb['education'][z]['year']))
							year = fb['education'][z]['year']['name'];
					}
				}
			}
		}
		if(!added)
			$('#SchoolSelect').hide();
		else
			$('#SchoolSelect').append('<option value="">Other</option>');
		$('#SchoolYear').val(year);
		if(fb['email']) {
			$('#SchoolEmail').val(fb['email']);
			$('#SchoolEmail').css('color','#000000');
		}
		else {
			$('#SchoolEmail').val('you@school.edu');
			$('#SchoolEmail').css('color','#cccccc');
		}
		$('#SignUpLoading').hide();
		$('#SignUpSchool').show();
		SchoolSave();
	}
	

	function SchoolSave() {
		if((($('#SchoolSelect').val() == '') || ($('#SchoolSelect').val() == 'null') || ($('#SchoolSelect').val() == null)) && (($('#SchoolEmail').val().indexOf('@') <= 0) || ($('#SchoolEmail').val() == 'you@school.edu')))
			$('#SchoolError').text('Enter a valid email address.');
		else if((($('#SchoolSelect').val() == '') || ($('#SchoolSelect').val() == 'null') || ($('#SchoolSelect').val() == null)) && ($('#SchoolEmail').val().toLowerCase().indexOf('.edu') <= 0))
			$('#SchoolError').text('You email address must end in ".edu"');
		else if($('#SchoolYear').val() < 1900)
			$('#SchoolError').text('Please enter your graduation year.');
		else {
			$('#SignUpLoading').show();
			$('#SignUpSchool').hide();
			$.ajax({
				url: '/account.php',
				type: "POST", 
				data: {Action:'school', Email:$('#SchoolEmail').val(), Semester:$('#Semester').val(), School:$('#SchoolSelect').val(), Year:$('#SchoolYear').val()}, 
				dataType: "json", 
				success:function(r) {
					$('#SignUpLoading').hide();
					$('#SignUpSchool').show();
					if(r.Error)
						$('#SchoolError').text(r.Error);
					else if(r.NOUSER)
						window.location='/account';
					else if(r.NOEMAIL) 
						$('#SchoolError').text('Please enter a valid school-issued email address.');						
					else if(!r.Success)
						$('#SchoolError').text('There was an unkown registration error.');						
					else {
						$('#SignUpLoading').show();
						$('#SignUpSchool').hide();										
						SaveSchedule(true);						
					}
				}, 
				error: function(a,b,c) {
					$('#SchoolError').text('There was a connection error. Please try again.');
				}
			});	
			return;														
		}		
		DoGoal('school-error');			
	}
	
	function DoGoal(g) {
		if($('#GoalFrame').length <= 0)
			$('body').append('<iframe id="GoalFrame" src="/ga_goal/' + g + '"></iframe>');
		else
			$('#GoalFrame').attr('src','/ga_goal/' + g);
		$.ajax({url: '/account.php',type: "POST", data: {Action:'log', Name:g}});
	}














