(function($){	
signon = window.signon || {};
signon.folder = (!!(location.protocol.match(/https/))?"services":"about");
signon.originHost = carnival.configuration('originHost') || location.protocol+'//'+carnival.configuration('currentDomain');

	signon.injectFormProfile = function(){
		if($('#signon-form,#signon-profile').length) {
			var formid = $('#signon-form,#signon-profile')[0].id;
			var f = new carnival.forms.form(formid);
			carnival.captcha.initCaptcha('#carnival_cap');
			carnival.captcha.attachCaptcha(function(data){
				var subHash = window.location.hash.substring(1);
				if (subHash == "thenlpane_e") {
					var jUns = $("#subscription-form").find("input[name=subscriptions]:unchecked");
					var uns = [];
					for(var i = jUns.length;i--;){
						uns.push(jUns[i].value);
					}
					carnival.subscription.submitNewsletters(
						{subs:($("#subscription-form").serializeFormToJson().subscriptions || []),unsubs:uns},
						function(){
							carnival.utils.listener.fire('_carnival_after_login');
						},
						function(){
							carnival.forms.errorplacement("An error occurred. Please try again.",$("#signon-heading h1"));
						}
					);
				} else {
					f.addValue('apiKey',data.validationToken);
					carnival.user.submitConsumerProfile(f.serializeForm('*[name!=subscriptions]'),
					function(){
						carnival.utils.listener.fire('_carnival_after_login');
					},
					function(data){f.populateErrors.call(f,data);}
			);//subCP
			}//if news
			});//attach
		}//if
	}

//FORM WRITE
	$(function() {
		if($('#signon-profile').length) {
			var f = new carnival.forms.form('profile-content');
			carnival.user.getConsumerProfile(function(){
				
				//special case for email address array
				carnival.user.profile('emailArray',carnival.user.getEmailAddresses());
				f.populateData(carnival.user.profile())
			});
		}
	});


	$(function(){
		var a = new memberNav('#memberLoginInfo'
		,null,
		function(){
			var navLocation = $('#memberLoginInfo'),
			link = signon.originHost+'/'+signon.folder+'/site/registration/modal.signon';
			navLocation.html('');
			navLocation.append('<a href="'+link+'" onclick="return carnival.modal.popit(this)" >Sign In</a> <a href="'+link+'"  target="_carnival_popup" onclick="return carnival.modal.popit(this)" > <img src="/hive/images/icons/facebook.png" /> <img src="/hive/images/icons/google.png" /> <img src="/hive/images/icons/yahoo.png" /> <img src="/hive/images/icons/twitter.png" /></a>');}
			).writeNav();
	});

	//listeners on carnival events
	var cul = carnival.utils.listener;

	cul.listen('_carnival_email_taken',function(copy){
		var c = copy && copy.usrMsgs ? copy.usrMsgs : '';	carnival.modal.popit(signon.originHost+'/'+signon.folder+'/site/registration/address-taken.signon',function(){ 
			if( c && c.length)$('#email_address_taken').html(c);
		},
		carnival.user.carnivalLogout);
	});

	cul.listen('_carnival_activate_done',function(){
		if(carnival.configuration('activateMessages') == 'true'){ 
			carnival.modal.popit(
				signon.originHost+'/'+
				signon.folder+'/site/registration/activate-done.signon'
			);
		}
	});

	cul.listen('_carnival_activate_error',function(){
		if(carnival.configuration('activateMessages') == 'true'){
			carnival.modal.popit(
				signon.originHost+'/'+
				signon.folder+'/site/registration/activate-error.signon'
			);
		}
	});
	
	cul.listen('_carnival_pass_change',function(data){
		carnival.modal.popit(
			signon.originHost+'/'+
			signon.folder+'/site/registration/reset-password-form.signon',
			function(){
				$('#carnivalModalWrapper').width(700);
				var f = new carnival.forms.form('pass-create-form');
				$('#carnivalModalWrapper').find('#email').parent('li').after(
					'<li><label for="oldPassword" class="label">Old Password</label><input id="oldPassword" name="oldPassword" type="password" class="email input"></li>'
				);
				$('#pass-create-form').submit(function(){
					carnival.utils.listener.fire('send_pass_change');
					return false;
				});
			}
		);
	});
	
	cul.listen('send_pass_change',function(){
		var f = new carnival.forms.form('pass-create-form');
		var data = $('#pass-create-form').serializeFormToJson();
		carnival.user.submitUserChange(data,
			function(transport){
				carnival.modal.dropit();
				carnival.utils.listener.fire('handshake',{data:[transport.errMsgs]});
			},	
			function(transport){f.populateErrors.call(f,transport);}
		);
	});
	
	cul.listen('_carnival_newsletters',function(){
		var nextStep = signon.originHost+'/'+signon.folder+'/site/registration/subscription-regform.signon';
		if(window.top!=window){
			carnival.utils.listener.fire('_carnival_after_newsletters');
		}else{
			carnival.modal.popit(nextStep,null,function(){
				//carnival.utils.listener.fire('_carnival_after_newsletters');
			});
		}
	});
	
// controllers
carnival.site = window.carnival.site || {};

carnival.site.profile_form = function(){
		carnival.configuration('captchaType','securityFilter');
		try{$(function(){carnival.utils.birthyear();});}catch(e){}
		carnival.captcha.initCaptcha('#carnival_cap');
		carnival.captcha.getCaptcha(function(data){
			$('#carnival_cap').append(data.htmlText);
		});
	
		var f = new carnival.forms.form('signon-profile');
		carnival.user.getConfigRules(f.formatForm,f);
		carnival.user.getConsumerProfile(function(){
			carnival.user.profile('emailArray',carnival.user.getEmailAddresses());
			f.populateData(carnival.user.profile());
			f.addValue('facebookMessage','');
			f.addValue('sendNewRegistrationEmail','');
			f.addValue('twitterMessage','');
		});
	
		$('#signon-profile').validate({
			errorPlacement: function(er, element) {
				var el = element.parents('li').children('span.signon-error');
				if(!el.length) {
					el = $('<span class="signon-error"><span>').appendTo(element.parents('li'));
				}
				el.html('').append(er);
			},
			submitHandler : carnival.captcha.verify
		});
		try{
			if($('input[name=userName]').val().length)$('input[name=userName]').change();
		}catch(e){}
	
	signon.injectFormProfile();
}

//UNLINK
carnival.site.unlink = function(selector){
		carnival.user.getConsumerProfile(function(){
			var p = carnival.user.provider();
			for( var i in p){
				if(!i.match(/isoprovider/))
					$(selector || "#signon-linked-accounts").append("<div class='providerOption'><div class='signon-logo' id='"+i.toLowerCase().split(/\s+|\.|!/)[0]+"'><span>"+i.toLowerCase()+"</span></div></div>");
			}
		});
}

carnival.site.link_options = function(url){

	$(function(){
		if(url) {
			if( !url.match('loginHost=')){
				url = url+'&r='+(new Date()).getTime()+'&loginHost='+url.match((new RegExp('^((?:f|ht)tp(?:s)?\://(?:[^/]+))','im')))[1].toString();
			}
			$.ajax({
				url:url,
				success:function(e){
				$("#signon-linked-accounts").append(e)
				},
				error:carnival.site.unlink
			});
		} else {
			carnival.site.unlink();
		}
		$('#email').parent('li').append('<div id="link-additions" > \
		<div id="link-additions-choices" style="display:none"> \
		<iframe src="'+carnival.configuration('hostname')+'/registration/link.jsp?callbackUrl='+ document.location.protocol+'//'+document.location.hostname+'/services/site/registration/popupclose.signon" width="510" scrolling="no" height="200" frameborder="0" style="border:0;margin-bottom:10px;"></iframe> \
		</div> \
		</div>');
		var linkEl = $('<a href="#" class="add_acct_link">Link Additional Accounts</a>').insertBefore('#link-additions');
		linkEl.click(function(){
			$('#link-additions-choices').show(); return false;
		});
	});
}

carnival.site.link_options_profile = function(url){

	$(function(){
		if(url) {
			if( !url.match('loginHost=')){
				url = url+'&r='+(new Date()).getTime()+'&loginHost='+url.match((new RegExp('^((?:f|ht)tp(?:s)?\://(?:[^/]+))','im')))[1].toString();
			}
			$.ajax({
				url:url,
				success:function(e){
				if(e.match(/NASCAR/)){
					carnival.site.unlink("#signon-linked-accounts");
				}else{
					$("#signon-linked-accounts").append(e);
				}
				},
				error:function(){carnival.site.unlink("#signon-linked-accounts")}
			});	
		} else {
			carnival.site.unlink("#signon-linked-accounts");
		}
	});
}

carnival.site.link_options_profform = function(url){

	$(function(){
		if(url) {
			if( !url.match('loginHost=')){
				url = url+'&r='+(new Date()).getTime()+'&loginHost='+url.match((new RegExp('^((?:f|ht)tp(?:s)?\://(?:[^/]+))','im')))[1].toString();
			}
			$.ajax({
				url:url,
				success:function(e){
				if(e.match(/NASCAR/)){
					carnival.site.unlink("#signon-linked-accounts-form");
				}else{
					$("#signon-linked-accounts-form").append(e);
				}
				},
				error:function(){carnival.site.unlink("#signon-linked-accounts-form")}
			});	
		} else {
			carnival.site.unlink("#signon-linked-accounts-form");
		}
		$('#acct-links-form').append('<div id="link-additions-form" > \
		<div id="link-additions-choices-form" style="display:none; margin-left:4px;"> \
		<iframe src="'+carnival.configuration('hostname')+'/registration/link.jsp?callbackUrl='+ document.location.protocol+'//'+document.location.hostname+'/services/site/registration/popupclose.signon" width="320" scrolling="no" height="212" frameborder="0" style="border:0;margin-bottom:10px;"></iframe> \
		</div> \
		</div>');
		var linkEl = $('<a href="#" class="add_acct_link">Link Additional Accounts</a>').insertBefore('#link-additions-form');
		linkEl.click(function(){
			$('#link-additions-choices-form').show();
			return false;
		});
	});
}

carnival.site.thanks_page = function(){
	$('#view-profile-link').click(function(){
		if(!carnival.user.isLoggedIn()){
		
			var link = signon.originHost+'/'+signon.folder+'/site/registration/modal.signon';
			var elem = $('<a href="'+link+'" >a</a>')
			carnival.modal.popit(elem[0]);
			
			carnival.user.afterLogin(function(){
				window.location.href = $('#view-profile-link')[0].href;
			});
			return false;
		}
	});
	carnival.utils.listener.listen('_carnival_after_newsletters',function(){
		$('#subscription-form').html('<div class="left" ><h2>Thank you for subscribing to our online newsletters.</h2></div>');
	});
};

carnival.site.subscription_form = function(){
	carnival.subscription.fired = carnival.subscription.fired || 0 ;
	if(!carnival.subscription.fired){
		carnival.subscription.fired++;
		carnival.subscription.getNewsletters(function(data){
			var listName = '';
			var listHolder = $('#subscription-form-field');
			for(var o in data) {
				if(listName != o) {
					listName = (o!='undefined')?o:'';
					listHolder.append('<div class="form-list-title bold clear">'+listName+'</div><ul class="form-list" id="newsletters-list-'+o.replace(/\s+/g,'')+'"></ul>');
				}
				carnival.forms.createFormFields("#newsletters-list-"+o.replace(/\s+/g,''),data[o],'#subscription-form-field');
			}
			var newform = new carnival.forms.form("subscription-form");
			carnival.subscription.getNewsletterSubscriptions(newform.populateData,newform);
			
			$('.newsletter_description').css("clear","left");
			//	carnival.utils.sameHeight($('#subscription-form-field ul.form-list li'),3);
			
			//every third after one, add a clear
			$('#subscription-form-field ul.form-list li:nth-child(3n+1)').css("clear","left");
			
			$('.newsletter_description').hide();
			
			$('#show_nl_desc').click(function(){
				this.blur();
				this.innerHTML == 'Show Descriptions' ? this.innerHTML = 'Hide Descriptions' : this.innerHTML = 'Show Descriptions';
				$('.newsletter_description').toggle('hide',function(){
					//carnival.utils.sameHeight($('#subscription-form-field ul.form-list li'),3);
					//every third after one, add a clear
					$('#subscription-form-field ul.form-list li:nth-child(3n+1)').addClass("clearfix");
				});
        return false;
			});
		});
	} //if
	
	$("#subscription-form").validate({
		errorPlacement: carnival.forms.errorplacement,
		submitHandler : function(){
			var jUns = $("#subscription-form").find("input[name=subscriptions]:unchecked");
			var uns = [];
			for(var i = jUns.length;i--;){
				uns.push(jUns[i].value);
			}
			
				if(carnival.user.isLoggedIn()){
					carnival.user.getConsumerProfile(function(){	
						carnival.subscription.submitNewsletters(
							{subs:($("#subscription-form").serializeFormToJson().subscriptions || []),unsubs:uns},
							function(){
								if(carnival.utils.listener.listening('_carnival_after_newsletters')){
									carnival.utils.listener.fire('_carnival_after_newsletters');
								}else {
									window.location = carnival.utils.cleanLocation();
								}
							},
							function(){
								carnival.forms.errorplacement("An error occurred. Please try again.",$("#signon-heading h1"));
							}
						);
					});
				}else{
					var link = signon.originHost+'/'+signon.folder+'/site/registration/modal.signon';
					var elem = $('<a href="'+link+'" >a</a>')
					carnival.modal.popit(elem[0]);
					carnival.user.afterLogin(function(){
						$("#subscription-form").submit();
					});
				}
			return false;
		}
	});
};

carnival.site.subscription_links = function() {
	$('.subscription_links').click(function(){
		carnival.subscription.fired =  0 ;
		carnival.modal.popit(this);return false;
	});
	carnival.subscription.getNewsletters(function(data){if(!data)$('#newsletter-signup').hide();});
	carnival.subscription.getNewsletterSubscriptions(function(data){
		var values = [];
		for(var i in data){
			values.push(data[i]);
		}
		if(!values.length){
			$('#newsletter-list').html('<p>You are currently not subscribed to any newsletters.</p>');
		}else{
			$('#newsletter-list').html('<ul><li>' + values.join('</li><li>') + '</li></ul>');
		}
	});
}

carnival.site.subscription_links_profile = function() {
	
	carnival.subscription.fired = 0;
	
	carnival.subscription.getNewsletters(function(data){if(!data)$('#newsletter-signup').hide();});
	carnival.subscription.getNewsletterSubscriptions(function(data){
		var values = [];
		for(var i in data){
			values.push(data[i]);
		}
		if(!values.length){
			$('#newsletter-list').html('<p>You are currently not subscribed to any newsletters.</p>');
		}else{
			$('#newsletter-list').html('<ul class=\"prof-subs\"><li>' + values.join('</li><li>') + '</li></ul>');
		}
	});
}

// PROFILE functions

setup_profile = function() {
	
	$('.pw').hide();

	if (window.location.hash) {
		var sendhash = window.location.hash.substring(1);
		var showedit = sendhash.substring(sendhash.length-2);
		var valhash = sendhash.substring(3);
		if ( $('.profile-tab-nav > ul > li').is('[rel='+valhash+']') ) {
			// a - ok
		} else if (showedit == "_e") { 
			var tabrel = "";
			make_edit();
			$('.edit-link').html("View Profile");
		} else {
			sendhash = "theacpane";
		}
		setuppane(sendhash);
	} else {
		setuppane("theacpane");
	}
	
}//end setup_profile

$(function() {

	var cxFlag = 0;  //1=warning
	
	//newsletter form fix
	$('.unlinksso').click(function(event) {
		event.preventDefault();
		carnival.site.unlinkprof();
	});
	
	$('.profile-tab-nav > ul > li').click(function(event) {
		if (cxFlag == 0) {
			var whichpane = "the" + $(this).attr("rel");
			var forposthash = whichpane.substring(whichpane.length-2);
			if (forposthash == "_e") {
				postHash = "#the" + $(this).attr("rel");
				postHash = postHash.substring(0,postHash.length-2);
				newCallback = oldCallback + postHash;
			}
			
			setuppane(whichpane);
			
			if ((whichpane == "thenlpane") || (whichpane == "thenlpane_e")) {
				$('#subscription-form').find(':input').change(function() {
						cxFlag = 1;
				});
			}
		}
	});
	
	
	//subscription add/modify link
	$('.subscription_links').click(function(event) { 
		event.preventDefault();
		var tabrel = "";
		postHash = "#thenlpane";
		newCallback = oldCallback + postHash;
		make_edit();
		$('.edit-link').html("View Profile");
		setuppane("thenlpane_e");
	});
	
	$('a#signon-cancel').click(function(event) {
		if (cxFlag == 0) {
			event.preventDefault();
			var newhash = window.location.hash.substring(1);
			var tabrel = "";
			make_view();
			$('.edit-link').html("Edit Profile");
			newhash = newhash.substring(0,(newhash.length-2));
			setuppane(newhash);
		}
	});
	
	$('a#au-cancel').click(function(event) {
		event.preventDefault();
		window.location = oldCallback;
	});
		
	$('.edit-link').click(function(event) {
			var newhash = window.location.hash.substring(1);
			var tabrel = "";
			if ($(this).html() == "Edit Profile") {
				$(this).html("View Profile");
				make_edit();
				postHash = "#" + newhash;
				newCallback = oldCallback + postHash;
				newhash += "_e";
			} else {
				if (cxFlag == 0) {
					$(this).html("Edit Profile");
					make_view();
					newhash = newhash.substring(0,(newhash.length-2));
				}
			}
			setuppane(newhash);
			event.preventDefault();
	});
	
	$('#pwtoggle').click(function() {
		if ($(this).is(':checked')) {
			$('.pw').show();
		} else {
			$('.pw').hide();
		}
	});
	
	
	// leave page on edit warning functions
	$('#signon-profile').find(':input').focus(function() {
		$(this).change(function() {
			cxFlag = 1;
		});
	});
	
	
	$('.edit-link,.profile-tab-nav > ul > li').click(function(event) {
		if (cxFlag == 1) {
			carnival.modal.popit($('#panewarning').val(),function(){
					
					$('button#panewarning-no').click(function() {
						window.location.reload();
					});
					$('button#panewarning-cancel').click(function() {
						carnival.modal.dropit();
					});
					$('button#panewarning-yes').click(function() {
						carnival.modal.dropit();
						$('form#signon-profile').submit();
					});
					
				});
			event.preventDefault();
		}//if
		
	});
	
	$('.pwchange').click(function(event) {
		event.preventDefault();
		carnival.utils.listener.fire('_carnival_pass_change')
	});
		
}); //be in jquery

function setuppane(thepane) {
	var tab = $('.profile-tab-nav > ul > li');
	var relpane = thepane.substring(3);
	var edbool = relpane.substring(relpane.length-2);
	if (edbool == "_e") {
		if (relpane != "avpane_e") {
			$('#termsbox').show();
			$('#submitbox').show();
		} else { 
		 	$('#termsbox').hide();
			$('#submitbox').hide();
		}
	} else {
		$('#termsbox').hide();
		$('#submitbox').hide();
	}
	if (tab.hasClass("tab")) {
		$('div#profile-content > div').hide();
		$('div#profile-content > div#'+ relpane).show();
		$('.current_tab').removeClass("current_tab").addClass("tab");
		$('.profile-tab-nav > ul > li[rel='+relpane+']').removeClass("tab").addClass("current_tab");
	}
	if (relpane == "avpane") {
		$('#avatar-display img').attr('src',$('#avatar-display img').attr('src').replace(/\?+.*$|$/,'?'+(new Date()).getTime()));
	}
	window.location.hash = thepane;
	$('a.edit-link').attr("href","show-profile.signon#" + thepane);
}//setuppane

function make_edit() {
	$('.profile-tab-nav > ul > li').each(function(index) {
		tabrel = $(this).attr("rel");
		tabrel += "_e";
		$(this).attr("rel",tabrel);
		(carnival.user.is3rdPartyLogin()) ?	$('.pw').hide() : $('.pw').show();
	});
}//

function make_view() {
	$('.profile-tab-nav > ul > li').each(function(index) {
		tabrel = $(this).attr("rel");
		tabrel = tabrel.substring(0,(tabrel.length-2));
		$(this).attr("rel",tabrel);	
	});
}
})(jQuery);