/*

	Copyright 2007 - Artlogic Media Limited - http://www.artlogic.net/
	All rights reserved.

*/



/*	DATA CALLS */


var data = {

	// data calls

	path: "/data",
	
	fields: {
		// fields in the 'search_alumni_form' and their default values...
		'profession_category_id': '', 
		'profession_id': '', 
		'institution_id': '', 
		'course_id': '', 
		'region_id': '', 
		'graduation_year_id': '', 
		'nameField': 'Name', 
		'keywordField': 'Skill Keywords',
		'idField': 'no id'
	},
	
	fields_to_watch: {
		// these fields will be watched by the "watch_for_changes()"
		// function, below
		'nameFieldValue': 'Name',
		'keywordFieldValue': 'Skill Keywords',
		'idFieldValue': 'no id'
	},
	
	
	// helper functions
	
	set_full_height: function(el) {
		$(el).style.height = constants.main_accordian_results_height + 'px';
	},
	
	set_smaller_height: function(el) {
		$(el).style.height = constants.main_accordian_secondary_results_height + 'px';
	},
	
	
	//	professions
	
	get_profession_categories: function() {
		var el = 'profession_list';
		this.set_full_height(el);
		var url = this.path + '/get_profession_categories';
		$(el).innerHTML = '';
		$(el).style.overflow = 'auto';
		removeClass($('profession_categories_container'), 'hidden');
		new Ajax.Updater(el, url, {
			method: 'get',
			asynchronous: true, 
			evalScripts: true
		});
	},
	
	get_professions: function(id) {
		var el = 'profession_list';
		this.set_smaller_height(el);
		var url = this.path + '/get_professions?id=' + id;
		$(el).innerHTML = '';
		removeClass($('profession_categories_container'), 'hidden');
		new Ajax.Updater(el, url, {
			method: 'get',
			asynchronous: true, 
			evalScripts: true
		});
	},
	
	
	//	regions

	get_regions: function() {
		var el = 'region_list';
		this.set_full_height(el);
		var url = this.path + '/get_regions';
		$(el).innerHTML = '';
		$(el).style.overflow = 'auto';
		removeClass($('region_categories_container'), 'hidden');
		new Ajax.Updater(el, url, {
			method: 'get',
			asynchronous: true, 
			evalScripts: true
		});
	},

    // graduation years
    get_graduation_years: function() {
		var el = 'graduation_year_list';
		this.set_full_height(el);
		var url = this.path + '/get_graduation_years';
		$(el).innerHTML = '';
		$(el).style.overflow = 'auto';
		removeClass($('graduation_year_container'), 'hidden');
		new Ajax.Updater(el, url, {
			method: 'get',
			asynchronous: true, 
			evalScripts: true
		});
    },
	
	
	//	institutions & courses

	get_institutions: function() {
		var el = 'inst_list';
		this.set_full_height(el);
		var url = this.path + '/get_institutions';
		$(el).innerHTML = '';
		$(el).style.overflow = 'auto';
		removeClass($('inst_categories_container'), 'hidden');
		new Ajax.Updater(el, url, {
			method: 'get',
			asynchronous: true, 
			evalScripts: true
		});
	},
	
	get_courses: function(id) {
		var el = 'inst_list';
		this.set_smaller_height(el);
		var url = this.path + '/get_courses?id=' + id;
		$(el).innerHTML = '';
		removeClass($('inst_categories_container'), 'hidden');
		new Ajax.Updater(el, url, {
			method: 'get',
			asynchronous: true, 
			evalScripts: true
		});
	},

	get_alumni: function() {
		// gets alumni matching current search request.
		// data is returned as <li>...</li> html objects
		// if one alumni only is found, a script is run
		// which gets the profile of the found user
		var el = 'results_list';
		var url = this.path + '/get_alumni';
		postBody = Form.serialize("search_alumni_form");
		$(el).innerHTML = '';
		new Ajax.Updater(el, url, {
			postBody: postBody,
			asynchronous: true,
			evalScripts: true
		});
	},

	get_user: function(id) {
		// gets the profile of the current user
		// data is returned as JSON data
		var url = this.path + '/get_user?id=' + id;
		profile_id = id;
		new Ajax.Request(url, {
			method: 'get',
			asynchronous: true,
			evalScripts: true,
			onComplete: function(req) {
				var response = decodeJSON(req.responseText);
				var user = response.user;
				try {
					profile.set(user);
				} catch(e) {
					debug(e);
				}
				if ($("editProfile")) {
					try {
						edit.refresh_editable_items(user);
                        window.setTimeout(function() {
                            Sortable.create('creditItems', { constraint: true, overlap: "vertical", onUpdate: edit.credit_items_update_sort })
                            },
                            100);
                        window.setTimeout(function() {
                            Sortable.create('testimonialsItems', { constraint: true,
                            overlap: "vertical", onUpdate:
                            edit.testimonial_items_update_sort });
                            },
                            100);
					} catch(e) {
						// do nothing
					}
					
				}
			}
		});
	},
			
	watch_for_changes: function() {
		// detect changes in field values and submit the search if a change has occurred...
		var nameValue = $("nameField").value;
		var keywordValue = $("keywordField").value;
		var idValue = $("idField").value;
		if (
				(this.fields_to_watch['nameFieldValue'] != nameValue && nameValue != '') || 
				(this.fields_to_watch['keywordFieldValue'] != keywordValue && keywordValue != '') ||
				(this.fields_to_watch['idFieldValue'] != idValue && idValue != '')
				) {
			this.fields_to_watch['nameFieldValue'] = nameValue;
			this.fields_to_watch['keywordFieldValue'] = keywordValue;
			this.fields_to_watch['idFieldValue'] = idValue;
			data.get_results();
		}
		$("idField").value = 'no id';
	},
	
	get_results: function() {
		
		// this is really an alias for data.get_alumni, however it checks first
		// to see if there are any values in any of the fields
		
		var has_values = false;
		
		for (var field in data.fields) {
			if ($(field).value != data.fields[field] && $(field).value != '') {
				has_values = true;
				break;
			}
		}
		
		if (!has_values) {
			
			$('results_list').innerHTML = constants.no_results_found_el;
			$('found_count').innerHTML = 'Results';
		
		} else {
		
			data.get_alumni();
		
		}
	}
	
};

var search_panels = {
	
	// search panel functions (most of these functions are called from
	// lists generated by the database ajax calls)
	
	init: function() {
		
		//	reset all fields
		
			for (var field in data.fields) {
				$(field).value = data.fields[field];
			}

			$('results_list').innerHTML = constants.no_results_found_el;
		
		
		//	reset field text color where appropriate
		
			$('nameField').style.color = constants.input_fields_disabled_color;
			$('keywordField').style.color = constants.input_fields_disabled_color;
			
		
		//	reset all panels
		
			this.reset_professions(true);
			this.reset_institutions(true);
			this.reset_regions(true);
			this.reset_graduation_years(true);
		
		//	set/reset current accordian
		
			accordion($('visible'));
	
	},
	
	
	// Professions...
	
		select_profession_category: function(id, name) {
			data.get_professions(id);
			removeClass($('profession_selected_container'), 'hidden');
			$('profession_selected').innerHTML = name;
			$('profession_subheading').innerHTML = 'Narrow your search...';
			$('profession_category_id').value = id;
			data.get_results();
		},
		
		select_profession: function(id, name) {
			$('profession_selected').innerHTML = concat_ws(': ', $('profession_selected').innerHTML, name);
			$('profession_list').innerHTML = "";
			addClass($('profession_categories_container'), 'hidden');
			$('profession_subheading').innerHTML = '';
			$('profession_id').value = id;
			data.get_results();
		},
		
		reset_professions: function(no_submit) {
			addClass($('profession_selected_container'), 'hidden');
			$('profession_subheading').innerHTML = 'Please select a category';
			$('profession_selected').innerHTML = '';
			$('profession_list').innerHTML = '';
			$('profession_category_id').value = '';
			$('profession_id').value = '';
			data.get_profession_categories();
			if (!no_submit) {
				data.get_results();
			}
		},
	
	
	// Institutions & Courses...
	
		select_institution: function(id, name) {
			data.get_courses(id);
			removeClass($('inst_selected_container'), 'hidden');
			$('inst_selected').innerHTML = name;
			$('institution_id').value = id;
			$('inst_subheading').innerHTML = 'Select a course';
			data.get_results();
			// load institution logo
            if (id) {
                $('institution_logo_image').src = '/images/institutionlogos/institution' + id + '.gif';
            } else {
                $('institution_logo_image').src = '/images/shim.gif';
            }
		},
		
		select_course: function(id, name) {
			removeClass($('inst_selected_container'), 'hidden');
			addClass($('inst_categories_container'), 'hidden');
			$('inst_selected').innerHTML = concat_ws(': ', $('inst_selected').innerHTML, name);
			$('inst_list').innerHTML = "";
			$('course_id').value = id;
			data.get_results();
		},
		
		reset_institutions: function(no_submit) {
			addClass($('inst_selected_container'), 'hidden');
			$('inst_subheading').innerHTML = 'Please select an institution';
			$('inst_selected').innerHTML = '';
			$('inst_list').innerHTML = '';
			$('institution_id').value = '';
			$('course_id').value = '';
			data.get_institutions();
			if (!no_submit) {
				data.get_results();
			}
			$('institution_logo_image').src = '/images/shim.gif';
		},		
		
	
	
	//	Regions
	
		select_region: function(id, name) {
			removeClass($('region_selected_container'), 'hidden');
			addClass($('region_categories_container'), 'hidden');
			$('region_selected').innerHTML = name;
			$('region_list').innerHTML = "";
			$('region_id').value = id;
			data.get_results();
		},
		
		reset_regions: function(no_submit) {
			addClass($('region_selected_container'), 'hidden');
			$('region_subheading').innerHTML = 'Please select a Region';
			$('region_selected').innerHTML = '';
			$('region_list').innerHTML = '';
			$('region_id').value = '';
			data.get_regions();
			if (!no_submit) {
				data.get_results();
			}
		},		

	
	//	Graduation years
	
		select_graduation_year: function(id, name) {
			removeClass($('graduation_year_selected_container'), 'hidden');
			addClass($('graduation_year_container'), 'hidden');
			$('graduation_year_selected').innerHTML = name;
			$('graduation_year_list').innerHTML = "";
			$('graduation_year_id').value = id;
			data.get_results();
		},
		
		reset_graduation_years: function(no_submit) {
			addClass($('graduation_year_selected_container'), 'hidden');
			$('graduation_year_subheading').innerHTML = 'Please select a graduation year';
			$('graduation_year_selected').innerHTML = '';
			$('graduation_year_list').innerHTML = '';
			$('graduation_year_id').value = '';
			data.get_graduation_years();
			if (!no_submit) {
				data.get_results();
			}
		},		

	
	
	//	profile
	
		select_user: function(id) {
			data.get_user(id);
		}

};


var profile_id = -1;


var profile = {

	//	profile functions

	set: function(user) {

		//	this function expects an object called 'user' containing all the fields, e.g.
		//	{'id': 1119, 'full_name': 'xxxxx', 'user_biography': 'xxxxx, etc.}
		
		
		//	set profile_id which is available to the page, globally
		
			profile_id = user.id;

            if (user.live_on_website === 1) {
                if ($('profile_not_live_label')) {
                    $('profile_not_live_label').hide();
                }
                if ($('make_my_profile_live')) {
                    $('make_my_profile_live').hide();
                } 
            } else {
                if ($('profile_not_live_label')) {
                    $('profile_not_live_label').show();
                }
                if ($('make_my_profile_live')) {
                    $('make_my_profile_live').show();
                } 
            }
	
            if ($('remove_profile_photo_button')) {
                if (user.has_photo === 1) {
                    show('remove_profile_photo_button');
                } else {
                    hide('remove_profile_photo_button');
                }
            }

		//	automatically add all fields to the layout, if a corresponding element exists.
		//	The element must be named 'profile_' plus the fieldname, e.g. 'profile_full_name'
			
			for (var item in user) {
				if ($('profile_' + item)) {
                    $('profile_' + item).innerHTML = user[item];
                }
			}
		
		
		//	load institution logo (reload if necessary)
		
			$('institution_logo_image').src = '/images/institutionlogos/institution' + user.institution_id + '.gif';
		
		//	main website href
			
			$('profile_main_website_url').href = user.main_website_url;
		
		//	other websites
		
			//	personal websites
			
				var el = $('profile_other_websites_personal');
				var items = user.other_websites_personal;
				if (items.length > 0) {
					var t = "";
					var rows = [];
					var item;
					for (var i = 0; i < items.length; i ++) {
						item = items[i];
						t = '';
						t += '<div class="row">';
						t += '<div class="profile_website_label">' + item.label + '<\/div>';
						t += '<div class="profile_website_url"><a href="' + item.url + '">' + item.url + '</a><\/div>';
						t += '<div class="clear"><\/div>';
						t += '</div>';
						rows[rows.length] = t;
					}
					el.innerHTML = profile.subheading('Personal') + rows.join('\n');
					removeClass(el, 'hidden');
				} else {
					el.innerHTML = '';
					addClass(el, 'hidden');
				}

		
			//	project websites
			
				var el = $('profile_other_websites_projects');
				var items = user.other_websites_projects;
				if (items.length > 0) {
					var t = "";
					var rows = [];
					var item;
					for (var i = 0; i < items.length; i ++) {
						item = items[i];
						t = '';
						t += '<div class="row">';
						t += '<div class="profile_website_label">' + item.label + '<\/div>';
						t += '<div class="profile_website_url"><a href="' + item.url + '">' + item.url + '</a><\/div>';
						t += '<div class="clear"><\/div>';
						t += '</div>';
						rows[rows.length] = t;
					}
					el.innerHTML = profile.subheading('Projects') + rows.join('\n');
					removeClass(el, 'hidden');
				} else {
					el.innerHTML = '';
					addClass(el, 'hidden');
				}
			
			
			//	education and skills
			
				var el = $('profile_education');
                el.innerHTML = this.section_heading('Education and Skills');
				var items = user.educ;
				if (items.length > 0) {
					var t = '';
					for (var i = 0; i < items.length; i ++) {
						t += '<div class="row">';
						t += '<div class="right">' + items[i].item_year + '</div>';
						t += '<div class="em">' + items[i].description + '</div>';
						t += '<div class="clear"></div>';
						t += '</div>';
					}
					el.innerHTML += t;
				} else {
					el.innerHTML += '<div id="no_education">No details available</div>';
				}
			
			
			//	testimonials
			
				var el = $('profile_testimonials');
                el.innerHTML = this.section_heading('Testimonials');
				var items = user.testimonials;
				if (items.length > 0) {
					var rows = [];
					for (var i = 0; i < items.length; i ++) {
						var t = '';
						t += '<div class="row">';
						t += '<div class="right">' + items[i].item_year + '</div>';
						t += '<div class="right pr15">' + items[i].author_organisation + '</div>';
						t += '<div class="em">' + items[i].author_name + '</div>';
						t += '<div class="clear"></div>';
						t += '<div class="profile_testimonial">' + items[i].testimonial + '</div>';
						t += '</div>';
;						rows[rows.length] = t;
					}
					el.innerHTML += rows.join('<div class="rule">&nbsp;</div>\n');
				} else {
					el.innerHTML += '<div id="no_testimonials">No testimonials found</div>';
				}
			
			
			//	credits
			
				var el = $('profile_credits');
                el.innerHTML = this.section_heading('Credits');
				var credits = user.credits;
				if (credits.length > 0) {

                    var templateText = '<div class="row">' +
                                          '<div class="right">#{project_year}</div>' +
                                          '<div class="right pr15">#{roles_string}</div>' +
                                          '<div class="em">#{project_name}</div>' +
                                          '<div class="clear"></div>' +
                                          '<div class="profile_testimonial">#{short_description}</div>' +
                                       '</div>';
                    var templateObject = new Template(templateText);

					var rows = [];
					credits.each(function(credit) {
						rows.push(templateObject.evaluate(credit));
					});
					el.innerHTML += rows.join('<div class="rule">&nbsp;</div>\n');

				} else {
					el.innerHTML += '<div id="no_credits">No credits found</div>';
				}
			
			
			//	image (this is a temporary mechanism)
			
				if (user.has_photo == 1 && user.image_uid) {
                    var image_url = '/usr/images/profile_images/' + user.institution_id + '/' + user.image_uid + '/98x98.jpg?' + Math.random();
					$('profileImage').style.background = '#a4b4ca URL(' + image_url + ') no-repeat 50% 50%'; // edf1f7
                    $('profile_image').src = image_url;
				} else {
					$('profileImage').style.background = '#a4b4ca URL(' + this.no_image_url() + ') no-repeat 50% 50%';
                    $('profile_image').src = '';
				}
			
			
			//	telephone numbers
                if (user.telephone_numbers_button_visibility == "hide") {
                    $('show_telephone_numbers_button').hide();
                } else {
                    $('show_telephone_numbers_button').show();
                }

				if (user.telephone_numbers) {
					if (user.telephone_numbers.length > 0) {
						var rows = [];
						var row;
						for (var i = 0; i < user.telephone_numbers.length; i ++) {
							row = user.telephone_numbers[i];
							rows[rows.length] = '<li><strong>' + row.label + '</strong>&nbsp;&nbsp;' + row.number + '</li>';
						}
						$('telephone_numbers_list').innerHTML = rows.join('\n');
					} else {
						$('telephone_numbers_list').innerHTML = '<li class="msg">No telephone numbers available.</li>';
					}
				} else {
					$('telephone_numbers_list').innerHTML = '<li class="msg">You must log in or register to view these telephone numbers.</li>';
				}

            // Email address

                debug('email: ' + user.email);
                debug('email_visibility: ' + user.email_visibility);
                $('profile_email_button_link').href = "javascript:profile.toggle_email_popup()";
                if (user.email) {
                    /* IE6 innerHTML bug workaround, assigning the li HTML code directly
                     * to the ul innerHTML property does not work. */
                    var liElem = document.createElement('li');
                    liElem.innerHTML = new Template('<a href="mailto:#{email}">#{email}</a>').evaluate(user);
                    $('email_list').innerHTML = '';
                    $('email_list').appendChild(liElem);
                } else {
                    if (user.email_visibility == 'nobody') {
                        $('email_list').innerHTML = '<li class="msg">This user can only be contacted by registered users.</li>';
                    } else if (user.email_visibility == 'contact_form') {
                        $('profile_email_button_link').href = "javascript:edit.show_contact_form()";
                    } else {
                        $('email_list').innerHTML = '<li class="msg">This user\'s email address is only visible to registered users .</li>';
                    }
                }
			
			
			//	show/hide 'add to favorites' / 'remove from favourites' buttons
			
				this.set_favourites_btn(profile_id);
			
	
		//	show the profile
			
			addClass($('profileBoxDisabled'), 'hidden');
			removeClass($('profileBox'), 'hidden');
			
			current_user.update_page();
		
		
		//	make sure we are viewing the 'search' page (we might be on another page)
		
			pages.search();
	
	},

    section_heading: function(title) {
        return '<h3 class="print_only">' + title + '</h3>';
    },

	set_favourites_btn: function(id) {
		if (favourites.contains(id)) {
            // Show remove button
			addClass($('add_to_favourites_btn'), 'hidden');
			removeClass($('add_to_favourites_btn'), 'rollover');
			addClass($('remove_from_favourites_btn'), 'rollover');
			removeClass($('remove_from_favourites_btn'), 'hidden');
		} else {
            // Show add button
			removeClass($('add_to_favourites_btn'), 'hidden');
			addClass($('add_to_favourites_btn'), 'rollover');
			removeClass($('remove_from_favourites_btn'), 'rollover');
			addClass($('remove_from_favourites_btn'), 'hidden');
		}	
	},
	
	
	subheading: function(t) {
		return '<div class="rule"><h4 class="ruleHeading">' + t + '</h4><div class="clear"></div></div>\n';
	},
	
	
	no_image_url: function() {
		return '/images/no_photo_98x98.gif';
	},

    toggle_telephone_numbers_popup: function() {
        this.toggle_contact_info_popup('show_telephone_numbers_button', 'phoneNotification');
    },
	
    toggle_email_popup: function() {
        this.toggle_contact_info_popup('show_email_button', 'emailNotification');
    },
	
	toggle_contact_info_popup: function(button_div_id, popup_div_id) {
		if ($(popup_div_id).className.indexOf('hidden') > -1) {
			if (typeof phone_notification_timeout != 'undefined') {
				window.clearTimeout(phone_notification_timeout);
			}
			show(popup_div_id);
//            phone_notification_timeout = window.setTimeout("hide('" + popup_div_id + "')", 6000);
		} else {
			hide(popup_div_id);
		}
	}

};



var prev_rand = -1;


var zIndex = 101;

var set_found_count = function(n) {
	$('found_count').innerHTML = 'Found ' + n;
};

/* EOF */
