/* *
 * our CommentsFormCtl
 */
CommentsFormCtl = function() {

	/* * 
	 * register events, if any
	 */
	this.register = function() {
		//nothing to do...
	}
		
	/* * 
	 * things to do after document loads, if anything
	 */
	this.onload = function() {
		if(this.getCookie('atco_session')) {
			BFInstance.init('CommentsCtl');
			$('comment_form').show();
			var atco_cookie = this.getCookie('atco_session');
			var session_data = atco_cookie.split(/\//);
			$('li_username').innerHTML = '<a href="' + this.c.xsshost + '/User/' + session_data[0] + '">' + session_data[0] + '</a>';
			$('edit_profile_link').href = this.c.xsshost + '/User/' + session_data[0];
		} else {
			$('login_form').show();
			if(this.c.register_users == 'optional') {
				$('regiter_optional').show();
			}
		}
		//alert(this.getCookie('atco_session'));
	}
	
	this.showRegForm = function() {
		var parms = this.c;
		$('registration_form_header').innerHTML = this.c.site_name;
    // $('reg_submit').value = 'Register For ' +  this.c.site_name + ' Comments';
		$('register_form').show();
		$('login_form').hide();
		
	}

	this.hideRegForm = function() {
		$('register_form').hide();
		$('login_form').show();	
	}
		
	this.registerUser = function(reg_form) {
		var iserr = false;
		$('rusername').removeClassName('highlight');		
		$('remail').removeClassName('highlight');				
		$('rscreenname').removeClassName('highlight');
		$('rpassword').removeClassName('highlight');		
		$('password2').removeClassName('highlight');		
		$('reg_error').hide();
		$('dup_error').hide();
		$('password_match').hide();
		$('username_alphanumeric').hide();
								
		if(! $('rusername').value ) {
			iserr = true;
			$('rusername').addClassName('highlight');
		}
		if( $('rusername').value.match(/\W/) ) {
			$('username_alphanumeric').show();
			$('rusername').addClassName('highlight');
			iserr = true;
		}		
				
		if(! $('remail').value) {
			iserr = true;
			$('remail').addClassName('highlight');
		}
		
		if(! $('rpassword').value) {
			iserr = true;
			$('rpassword').addClassName('highlight');
		}
		if(! $('password2').value) {
			iserr = true;
			$('password2').addClassName('highlight');
		}		
				
		
		if($('rpassword').value && $('password2').value && ( $('rpassword').value != $('password2').value ) ) {
			$('rpassword').addClassName('highlight');
			$('password2').addClassName('highlight');
			$('password_match').show();			
			iserr = true;							
		}			
		if(iserr) {
			$('reg_error').show();
		} else {
			var uri = this.c.root_url;
			$("reg_submit").disabled = true;
			$("reg_submit").value = "Registering...";
			var rr = function(res) {
				var me = BFInstance.getController('CommentsFormCtl');
				me.regResults(res);
			}			
			//var params = {username:$('username').value,email:$('email').value,password:$('password').value,regurl:$('regurl').value};
			var params = 'proxy_uri=/Register&username=' + escape($('rusername').value);
			params += '&password=' + escape($('rpassword').value);
			params += '&email=' + escape($('remail').value);
			params += '&regurl=' + escape( document.location.href );			
			params += '&site_name=' + escape( this.c.sitename );
			params += '&screenname=' + escape( $('rscreenname').value );
			//DP_Debug.dump(params);									

			var rform = $('registerUser');

			// Get policy/terms checkbox
			var Eacceptterms = rform['acceptterms'];
			var termsanswer = 'no';
			if(Eacceptterms) {
				var acceptterms = $F(Eacceptterms);
				if(acceptterms !== undefined) termsanswer = 'yes';
			}
			params += '&acceptterms=' + termsanswer;
			
			// Get email signup prefs
			var Eatemail = rform['atemail'];
			var Ekitchnemail = rform['kitchnemail'];
			if(Eatemail && Ekitchnemail) {
				var atemail = $F(Eatemail);
				var kitchnemail = $F(Ekitchnemail);
				if(atemail !== undefined) params += '&atemail=yes';
				if(kitchnemail !== undefined) params += '&kitchnemail=yes';
			}
			new Ajax.Request(uri, {method:'post', parameters:params, onSuccess:rr, onFailure:this.regErr});			
		}
	}
	
	this.regResults = function(resp) {
		var resp_ob = eval('(' + resp.responseText + ')');
		$("reg_submit").value = "Register For Comments";
		$("reg_submit").disabled = false;
		if(resp_ob['dup_username']) {
			//alert('wa');
			$('rusername').addClassName('highlight');
			$('dup_error').innerHTML = 'An account with that <b>username</b> is already registered for comments. Please choose another username.';
			$('dup_error').show();
		} else if (resp_ob['dup_email']) {
			$('remail').addClassName('highlight');
			//alert('wa');
			$('dup_error').innerHTML = 'An account with that <b>email address</b> is already registered for comments.';
			$('dup_error').show();	
		} else if (resp_ob['dup_screenname']) {
			$('remail').addClassName('highlight');
			//alert('wa');
			$('dup_error').innerHTML = 'An account with that <b>Screen Name</b> is already registered for comments. please select another Screen Name';
			$('dup_error').show();
		} else if (resp_ob['must_agree']) {
			$('acceptterms').addClassName('highlight');
			$('dup_error').innerHTML = 'Please read and agree to our terms and policies to register.';
			$('dup_error').show();
		} else {
			$('register_complete').show();
			$('register_form').hide();			
		}
		//alert(resp.responseText);
	}
	
	this.login = function() {
		$('login_submit').disabled = true;
		$('login_submit').value = "Logging In...";
		$('login_message').innerHTML = '';
		$('login_message').hide();
		$('login_message').className = 'message';
		if(! $('lusername').value || ! $('lpassword').value) {	
			$('login_message').innerHTML = "Please enter a username and a password";
			$('login_submit').disabled = false;
			$('login_submit').value = "Log In";						
			$('login_message').addClassName('error');				
			$('login_message').show();	
		} else {
			var params = 'proxy_uri=/Login&username=' + escape($('lusername').value);			
			params += '&password='	+ escape($('lpassword').value);
			var uri = this.c.root_url;
			var lr = function(res) {
				var me = BFInstance.getController('CommentsFormCtl');
				me.logginRes(res);
			}				
			new Ajax.Request(uri, {method:'get', parameters:params, onSuccess:lr, onFailure:this.regErr});			
		}
	}
	
	this.logginRes = function(resp) {
		var resp_ob = eval('(' + resp.responseText + ')');
		$('login_submit').disabled = false;
		$('login_submit').value = "Log In";
		var loggedin_username = $('lusername').value;
		$('lusername').value  = '';
		$('lpassword').value	= '';
		if(resp_ob['login'] == "unverified") {
			$('login_message').innerHTML = "You have not verified your account. Please follow the instructions in the validation email or <a href='http://community.apartmenttherapy.com/com/RegisterEmail'>request a new email be sent</a> to complete this process.";
			$('login_message').addClassName('error');
			$('login_message').show();
		} else if(resp_ob['login'] == "true" || resp_ob['login'] == true) {
			$('login_form').hide();
			var atco_session = resp_ob['atco_session'];
			this.setCookie('atco_session', atco_session, this.c.domain);
			BFInstance.init('CommentsCtl');		
			BFInstance.getController('CommentsCtl').c.anonymouse = false;
			$('li_username').innerHTML = '<a href="' + this.c.xsshost + '/User/' + loggedin_username + '">' + loggedin_username + '</a>';
			$('edit_profile_link').href = this.c.xsshost + '/User/' + loggedin_username;
			$('comment_form').show();
			Element.scrollTo('comment');
		} else {
			$('login_message').innerHTML = "Login incorrect. Please verify your username and password and try again.";
			$('login_message').addClassName('error');
			$('login_message').show();
		}
		$('comment_message').hide();
	}
	
	this.anonComment = function(cancel) {
		$('comment_message').hide();
		if(this.c.register_users == 'optional') {
			if(cancel) {
				$('anon_cancel').hide();
				$('comment_logout').show();	
				$('comment_form').hide();
				$('login_form').show();			
				BFInstance.getController('CommentsCtl').c.anonymouse = false;
			} else {
				BFInstance.init('CommentsCtl');
				$('comment_form').show();
				$('login_form').hide();
				$('anon_comment').show();
				$('anon_cancel').show();
				$('comment_logout').hide();	
				BFInstance.getController('CommentsCtl').c.anonymouse = true;
			}
		}	
	}
	this.logout = function() {
		$('login_form').show();			
		$('comment_form').hide();
		$('comment').value = '';
		if(this.c.register_users == 'optional') {
			$('regiter_optional').show();
		}		
		this.deleteCookie('atco_session', this.c.domain);
	}
	
	this.preview = function(ta) {
		var text = ta.value.replace(/^\s+|\s+$/g,'');		
		text = text.replace(/<a.*javascript:.*?>/ig, '');
		text = text.replace(/<a.*class=.*?>/ig, '');
		text = text.replace(/<a.*style=.*?>/ig, '');
		text = text.replace(/<a.*on\w+=.*?>/ig, '');
		text = text.replace(/<i.*class=.*?>/ig, '');
		text = text.replace(/<i.*style=.*?>/ig, '');
		text = text.replace(/<i.*on\w+=.*?>/ig, '');
		text = text.replace(/<b.*class=.*?>/ig, '');
		text = text.replace(/<b.*style=.*?>/ig, '');
		text = text.replace(/<b.*on\w+=.*?>/ig, '');
		text = text.replace(/<img.*?>/g, '');
		text = text.replace(/<(?!a.*?|\/a|b|\/b|i|\/i).*?>/ig, '');
			
    	text = text.replace( /(^|\s+)(http:\/\/\S+)/igm, '$1<a href="$2">$2</a>');
    	/*
    	var amatches = text.match(/>(.*?)<\/a>/g);
    	if(amatches) {
        	for(i = 0; i < amatches.length; i++) {
            	var href = amatches[i];
            	if(href.length > 50) {
                	var nhref = href.substr(0, 49);
                	var index = text.indexOf(href);
                	var stext = text.substr(0, index);
                	var etext = text.substr(index + href.length, text.length);
                	text = stext + nhref + "...</a>" + etext;
            	}
        	}
    	}
    	*/
		text = text.replace(/\r/g, '');
		var newtext = text.replace(/\n/g, '<br />\n');
		
    	// clean smart chars and such...
    	// 8216, 8217, 8220, 8221, 8212, 8211
    	var chars = newtext.split("");
    	var newtext = '';
    	for(i = 0; i < chars.length; i++) {
        	var chr = chars[i].charCodeAt(0);
        	switch( chr ) {
            	case 8216: newtext += "'"; break;
            	case 8217: newtext += "'"; break;
            	case 8220: newtext += '"'; break;
            	case 8221: newtext += '"'; break;
            	case 8211: newtext += "-"; break;
            	case 8212: newtext += "-"; break;
            	default: newtext += chars[i];
        	}
    	}
		var parms = this.c;
		var comments = new Array();		
		comments[0] = {comment: newtext};
		if( $('comment_preview') ) {
			$('comments').removeChild( $('comment_preview') );
		}		
		parms['comments_response'] = {comments:comments};
		parms['preview'] = true;
		var out = this.parseTemplate('comments_template', parms);
		$('comments').innerHTML += out;
		$('comment_preview').className = 'comment_preview';
	}
	
	this.regErr = function (resp) {
		alert('error: ' + resp.responseText);
	}
}
