// global variables for ajax tell a friend
var qString = "";
var sent = false;
var addFriend = false;
var err = false;
var ie = (navigator.userAgent.indexOf("MSIE") > 0) ? true:false;
var ie6 = (navigator.userAgent.indexOf("MSIE 6.") > 0) ? true:false;

/*
	ajax functions to tell a friend
*/
// main send a friend ajax function for both logged-in and non-logged users
function tellaFriend(productId, parentId) {
	// blur send link
	$("sendEmail").blur();
	// get parameters to send
	var toEmails = new Array();
	qString = "?formAction=sendMessage&productId=" + productId + "&parentid=" + parentId;
	// get color code from select menu
	var colorMenu = "l" + productId + "color";
	if (document.forms['frml'+productId].elements[colorMenu]) {
		var colorCode = document.forms['frml'+productId].elements[colorMenu].value;
		qString += "&colorCode=" + colorCode;
	} else if (document.forms['frml'+productId].elements['color']) {
		var colorCode = document.forms['frml'+productId].elements['color'].value;
		qString += "&colorCode=" + colorCode;
	} else {
		err = true;
	}
	// check if logged in
	if (document.forms['sendMessage'].elements['receiverName1']) {
		// not logged in
		getNotLoggedInFields();
	} else {
		// logged in
		getLoggedInFields();
	}
	// make ajax call
	var obj = $("tellafriendMsg");
	var url = "/urban/user/ajax_tellafriend.jsp" + qString;
	// check boolean and if object exists
	if ((obj) && (!sent) && (!err)) {
		obj.innerHTML = "Sending ...";
		// set boolean flag to prevent user from repeatedly submitting ajax request
		sent = true;
		// reset form
		if (qString.indexOf("loggedIn=1") > 0) {
			// reset logged in form
			resetLoggedInForm();
		} else {
			// reset non-logged in form
			resetNonLoggedInForm();
		}
		// ajax call to send a friend
		new Ajax.Request(url, {
			method: 'get',
			onSuccess: function(transport) {
				// display message
				obj.innerHTML = transport.responseText;
				sent = false;
				// fadeout ajax response message
				fadeMsg();
			},
		    onFailure: function(transport) {
		    	// do nothing
		    }
		});
		sent = false;
	}
}
// retrieves non-logged-in user data for form submission
function getNotLoggedInFields() {
	err = false;
	var total = 3;
	var formObj = document.forms['sendMessage'].elements;
	// check From values
	if ((formObj['senderName'].value.length > 0) && (formObj['emailFrom'].value.indexOf("@") > 0)) {
		qString += "&loggedIn=0";
		qString += "&senderName=" + formObj['senderName'].value;
		qString += "&emailFrom=" + formObj['emailFrom'].value;
	} else {
		alert("Please enter a From name and a valid From email address.");
		err = true;
		return false;
	}
	// get To email info
	for (var i=1; i<=total; i++) {
		var curToName = formObj["receiverName" + i];
		var curToEmail = formObj["EmailTo" + i];
		if ((curToName) && (curToEmail)) {
			// check value for first field group only; 2 and 3 are optional
			if (i == 1) {
				if ((curToName.value.length > 0) && (curToEmail.value.indexOf("@") > 0)) {
					qString += ("&receiverName" + i + "=" + curToName.value + "&EmailTo" + i + "=" + curToEmail.value);
				} else if (i == 1) {
					alert("Please enter at least one To name and a valid To email address.");
					err = true;
					return false;
				}
			} else {
				qString += ("&receiverName" + i + "=" + curToName.value + "&EmailTo" + i + "=" + curToEmail.value);
			}		
		}
	}
	// get message
	qString += "&message=";
	if (formObj['messageChkBox'].length == 3) {
		if (formObj['messageChkBox'][2].checked) {
			qString += formObj['message'].value;
		} else {
			var val = "Look what I found on UrbanOutfitters.com!";
			if (formObj['messageChkBox'][0].checked) {
				val = formObj['messageChkBox'][0].value;
			} else {
				val = formObj['messageChkBox'][1].value;
			}
			qString += val;
		}
	} else {
		qString += "Look what I found on UrbanOutfitters.com!";
	}
}
// reset non-logged in form 
function resetNonLoggedInForm() {
	var total = 3;
	var formObj = document.forms['sendMessage'].elements;
	if ((formObj['senderName']) && (formObj['emailFrom'])) {
		formObj['senderName'].value = "Name";
		formObj['emailFrom'].value = "Email Address";
	}
	for (var i=1; i<=total; i++) {
		var curToName = formObj["receiverName" + i];
		var curToEmail = formObj["EmailTo" + i];
		if ((curToName) && (curToEmail)) {
			// reset form values
			curToName.value = "Name";
			curToEmail.value = "Email Address";
		}
	}
	if ((formObj['messageChkBox']) && (formObj['message'])) {
		formObj['messageChkBox'][0].checked = "true";
		formObj['message'].value = "";	
	}
}
// retrieves logged-in user data for form submission
function getLoggedInFields() {
	err = false;
	var formObj = document.forms['sendMessage'].elements;
	var count = 0;
	// get From name and email
	var profileName = formObj['profileName'];
	var profileEmail = formObj['profileEmail'];
	if ((profileName) && (profileEmail)) {
		qString += "&senderName=" + profileName.value + "&emailFrom=" + profileEmail.value;
	}
	// get To: repository Ids only
	for (var i=0; i<formObj.length; i++) {
		var cur = formObj[i];
		if ((cur.name == "EmailTo") && (cur.checked)) {
			var index = count + 1;
			qString += "&EmailTo" + index + "=" + cur.value;
			count++;
		}
	}
	// check for errors
	if (count > 0) {
		// get message
		qString += "&total=" + count + "&loggedIn=1&message=";
		if (formObj['messageChkBox'].length == 3) {
			if (formObj['messageChkBox'][2].checked) {
				qString += formObj['message'].value;
			} else {
				var val = "Look what I found on UrbanOutfitters.com!";
				if (formObj['messageChkBox'][0].checked) {
					val = formObj['messageChkBox'][0].value;
				} else {
					val = formObj['messageChkBox'][1].value;
				}
				qString += val;
			}
		} else {
			qString += "Look what I found on UrbanOutfitters.com!";
		}
	} else {
		alert("Please select at least one e-mail recipient.");
		err = true;
		return false;
	}
}
// reset logged-in form
function resetLoggedInForm() {
	var formObj = document.forms['sendMessage'].elements;
	// reset To: checkboxes
	for (var i=0; i<formObj.length; i++) {
		var cur = formObj[i];
		if ((cur.name == "EmailTo") && (cur.checked)) { 
			cur.checked = false;
		}
	}
	// reset message
	if (formObj['messageChkBox']) {
		formObj['messageChkBox'][0].checked = "true";
	}
	if (formObj['message']) {
		formObj['message'].value = "";
	}
}	

/*
	ajax functions to add a friend
*/
// add a friend ajax
function addAFriend() {
	// blur the link
	$("addFriendLink").blur();
	// variables
	var formObj = document.forms['sendMessage'].elements;
	var url = "/urban/user/ajax_addafriend.jsp?formAction=addFriend";
	// get contact name and email address
	if ((formObj['emailEntryName']) && (formObj['emailEntryEmailAddress'])) {
		var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
		var namePattern = /\w/;
		if ((formObj['emailEntryName'].value.match(namePattern)) && (formObj['emailEntryEmailAddress'].value.match(emailPattern))) {
			url += "&emailEntryName=" + formObj['emailEntryName'].value + "&emailEntryEmailAddress=" + formObj['emailEntryEmailAddress'].value;
		} else {
			alert("Please enter a contact name and a valid e-mail address.");
			return false;
		}
	}
	if (!addFriend) {
		// update boolean
		addFriend = true;
		// ajax call to add a contact
		new Ajax.Request(url, {
			method: 'get',
			onSuccess: function(transport) {
				// reset boolean
				addFriend = false;
				// reload address book
				reloadAddressBook();
			},
		    onFailure: function(transport) {
		    	// do nothing
		    }
		});
		// reset form fields
		if ((formObj['emailEntryName']) && (formObj['emailEntryEmailAddress'])) {
			formObj['emailEntryName'].value = "Name";
			formObj['emailEntryEmailAddress'].value = "Email Address";
			addFriend = false;
		}
	}
}
// reloads address book to display newly added contact via ajax
function reloadAddressBook() {
	// ajax call to add a contact
	var url = "/urban/user/addafriend_addressbook.jsp";
	var obj = $("addressBook");
	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function(transport) {
			// display message
			obj.innerHTML = transport.responseText;
			obj.scrollTop = obj.scrollHeight;
		},
	    onFailure: function(transport) {
	    	// do nothing
	    }
	});		
}

/*
	ajax response functions to display messaging
*/

// global vars for message faders
var opac = 100;
var fadetimer = null;
var msgtimer = null;
var timer = 3000;

// wait x number of secs before fading out message
function fadeMsg() {
	// fade message out
	msgtimer = setTimeout("fadeAway()",timer);
}

// decrements opacity by 1 until reaches 0
function fadeAway() {
	var ie = (document.all) ? true : false;
	if (msgtimer != null) {
		clearTimeout(msgtimer);
		msgtimer = null;
	}
	if (opac > 0) {
		// decrement var
		opac--;
		// update styles
		if (ie) {
			$('tellafriendMsg').style.filter = "alpha(opacity=" + opac + ")";
		} else {
			$('tellafriendMsg').style.opacity = opac/100;
		}
		// set timer
		fadetimer = setTimeout("fadeAway()",10);	
	} else {
		// reset timer
		resetTimer();
	}	
}

// resets msg styles + fade timers + global var
function resetTimer() {
	clearTimeout(fadetimer);
	fadetimer = null;
	// reset display
	$('tellafriendMsg').innerHTML = "";
	// reset opacity
	if (ie) {
		$('tellafriendMsg').style.filter = "alpha(opacity=100)";
	} else {
		$('tellafriendMsg').style.opacity = 1.0;
	}
	// reset opac var
	opac = 100;
}

/*
	wishlist tell a friend ajax functions
*/
function sendWishlist() {
	// blur send link
	$("sendEmail").blur();
	// get parameters to send
	var toEmails = new Array();
	qString = "?formAction=sendWishlist";
	// logged in
	getWishlistFields();
	// make ajax call
	var obj = $("tellafriendMsg");
	var url = "/urban/user/ajax_sendwishlist.jsp" + qString;
	// check boolean and if object exists
	if ((obj) && (!sent) && (!err)) {
		obj.innerHTML = "Sending ...";
		// set boolean flag to prevent user from repeatedly submitting ajax request
		sent = true;
		// reset form
		resetLoggedInForm();
		// ajax call to send a friend
		new Ajax.Request(url, {
			method: 'get',
			onSuccess: function(transport) {
				// display message
				obj.innerHTML = transport.responseText;
				sent = false;
				// fadeout ajax response message
				fadeMsg();
			},
		    onFailure: function(transport) {
		    	// do nothing
		    }
		});
		sent = false;
	}
}
// get wishlist tell a friend specific fields
function getWishlistFields() {
	err = false;
	var formObj = document.forms['sendMessage'].elements;
	var count = 0;
	// get boolean hidden input values
	if ((formObj['isShippingAddressEmpty']) && (formObj['isWishlistEmpty'])) {
		qString += "&isShippingAddressEmpty=" + formObj['isShippingAddressEmpty'].value;
		qString += "&isWishlistEmpty=" + formObj['isWishlistEmpty'].value;
	} else {
		err = true;
	}
	// get giftlistId
	if (formObj['giftlistId']) {
		qString += "&giftlistId=" + formObj['giftlistId'].value;
	} else {
		err = true;
	}
	// get login email
	if (formObj['login']) {
		qString += "&login=" + formObj['login'].value;
	} else {
		err = true;
	}
	// get message
	qString += "&message=";
	if (formObj['message']) {
		if (formObj['message'].value.length > 0) {
			qString += formObj['message'].value;
		}
	} else {
		err = true;
	}
	// get To: repository Ids only
	for (var i=0; i<formObj.length; i++) {
		var cur = formObj[i];
		if ((cur.name == "EmailTo") && (cur.checked)) {
			var index = count + 1;
			qString += "&EmailTo" + index + "=" + cur.value;
			count++;
		}
	}
	// check for errors
	if (count == 0) {
		alert("Please select at least one e-mail recipient.");
		err = true;
		return false;
	} else {
		qString += "&total=" + count;
	}
}