/**
 * Functions used when saving the company form
 */

//--- apply JS validation and submit the form
var objectValidation = {
	alias: validation_alias,
	required: 'accept',
	err_list: true,
	err_message: validation_err_message,
	text_without_spaces: /^[a-z0-9.\'-_]+$/gi,
	text_with_spaces: /^[\w\.,\'\-\040\t;:\(\)\n]+$/gi,
	regular_phone_no: /^[0-9\s\-\+\.]+$/g,
	us_phone_no: /^((\+1\s\([0-9]{3}\)|\+1\s[0-9]{3}|1\s\([0-9]{3}\)|1\([0-9]{3}\)|1\s[0-9]{3}|1[0-9]{3}|\([0-9]{3}\)|[0-9]{3})(\s[0-9]{3}[\s|-])([0-9]{4}))|([\+1\s|1\s|1][0-9]{9}|[0-9]{9})$/g,
	international_phone_no: /^((\+[0-9]{1,3}|[0-9]{1,5})([0-9\(\)\s\-]){7,16})$/g,
	email: /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/gi,
	text_only: /^[a-z]+$/gi,
	not_empty: /^.+$/
};

var url = 'http://' + location.hostname;

LoginBox = new Object();
LoginBox.oppened = false;

function hideBox() {
	if (LoginBox.oppened == true) {
		$('#login_box').jqmHide();
		LoginBox.oppened = false;
	}
}

function openBox(url) {
		if (LoginBox.oppened) {
			hideBox();
		}		
		var myOpen = function(hash) {
			LoginBox.oppened = true;
			url = 'http://' + location.hostname + '/' + url;
			$.get(url,function(data){$('#login_box .content').html(data);hash.w.show();$('#login_box').center();parseForms();},"html");
		};
		var myHide = function(hash) {
			LoginBox.oppened = false;
			hash.w.hide();
		}
		$('#login_box').jqm({overlay:0, onShow:myOpen, onHide:myHide});
		$('#login_box').jqmShow();
}

function userAuthLinkAction() { 
	$('a.user_auth_link').each(function(){
		$(this).unbind('click');
		$(this).bind('click', function(){
			openBox($(this).attr('href'));
			return false;
		});
	});
}
$(document).ready(function() {
	userAuthLinkAction();
});


/**
 * Callback function for formValidation.
 * Will also submit the form
 *
 * @return bool false
 */
function _ajaxRegisterFormSubmit(data) {
	var registerOptions = {
			url			: url,
			data		: {X_AJAX_INFO : 'users_register'},
			success		: _ajaxRegisterCheck,
			dataType	: 'json'
						};
	$('#registration').ajaxSubmit(registerOptions);
	return false;
}

function _ajaxRegisterCheck(data, status) {
	if(typeof data['error_message'] != 'undefined') {
		alert(data['error_message']);
		var form_data = {
			email: $('#email', $('#register_box')).val(),
			first_name: $('#first_name', $('#register_box')).val(),
			last_name: $('#last_name', $('#register_box')).val()
		}
		$.get(data.url, function(data){
			$('#login_box .content').html(data);
			parseForms();
			for(var key in form_data) {
				$('#'+key, $('#register_box')).val(form_data[key]);
			}
		},"html");
	} else {
		$.get(data.url,function(data){$('#login_box .content').html(data);parseForms();},"html");
	}
}

function _ajaxSuccessCheck(data, status, form) {
	if (data.status == 'fail') {
		if(data.message.toLowerCase().indexOf('deactivated') != -1) {
			if(typeof window.fbSubmitTimer != 'undefined') {
				clearTimeout(window.fbSubmitTimer);
			}
			$('#logged_in').val('');
			$('#fb_logged_in').val('');
			FB.logout(function(){
				alert(data.message);
				location.href = '/logout.html';
			});
			
		} else {
			if (typeof form == 'undefined') {
				$('#message',$('.logged_in')).html(data.message).show();
			} else {
				var children = form.children('#message');
				if (typeof children == 'undefined') {
					$('#message').html(data.message);
				} else {
					children.html(data.message);
				}
			}
		}
	} else {
		reloadPage();
	}
}

function reloadPage() {
	// alert('reload page function, pathname=' + window.location.pathname);
	if (window.location.pathname == '/logout.html') {
		window.location.href = '/index.html';
	} else {
		window.location.reload(true);
	}
}

function _ajaxFacebookSubmit(response) {
	// alert(window.getObjectAsString(response));
	if (response.authResponse) {
		var loginOptions = {X_AJAX_INFO : 'users_facebook', 'action' : 'connect_account'};
		if(response.authResponse.accessToken) {
			loginOptions.at = response.authResponse.accessToken;
		}
		$.post(url, loginOptions, _ajaxSuccessCheck, 'json');
	}
}

function _ajaxLoginBoxFormSubmit() {
	var loginOptions = {
			url			: url,
			data		: {X_AJAX_INFO : 'users_login'},
			success		: _ajaxSuccessCheck,
			dataType	: 'json'
		};
	$('#login', '#register_box').ajaxSubmit(loginOptions);
	return false;
}

function parseForms() {
	var loginBoxValidation = objectValidation;
	loginBoxValidation.callback = '_ajaxLoginBoxFormSubmit';
	$('#login', '#register_box').formValidation(
		loginBoxValidation, {
    	required: validation_required
	});
	
	var registerValidation = objectValidation;
	registerValidation.callback = '_ajaxRegisterFormSubmit';
	$('#registration').formValidation(
		registerValidation, {
    	required: validation_required
	});
	if ($('#login_box:visible').length) {
		$('#login_box').jqmAddClose('#closeButton');
	} else {
		$('#company_profile_box').jqmAddClose('#closeButton');
	}
	if ($('#closeButton').length == 1) {
		$('#companyCloseButton').hide();
	}
	userAuthLinkAction();
	PasswordRecovery.initialize();
	
	//setup enter on input to submit form;
	$('input', $('#register_box')).each(function(){
		$(this).keypress(function(e) {
			c = e.which ? e.which : e.keyCode;
			if (c == 13) {
				$('form', $('#register_box')).submit();
				e.preventDefault();
				return false;
			}
		});
	});
}

function strip_tags (str, allowed_tags) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Luke Godfrey
    // +      input by: Pul
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +      input by: Alex
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Marc Palau
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Eric Nagel
    // +      input by: Bobby Drake
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Tomasz Wesolowski
    // *     example 1: strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>');
    // *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
    // *     example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');
    // *     returns 2: '<p>Kevin van Zonneveld</p>'
    // *     example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>");
    // *     returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'
    // *     example 4: strip_tags('1 < 5 5 > 1');
    // *     returns 4: '1 < 5 5 > 1'

    var key = '', allowed = false;
    var matches = [];
    var allowed_array = [];
    var allowed_tag = '';
    var i = 0;
    var k = '';
    var html = '';

    var replacer = function (search, replace, str) {
        return str.split(search).join(replace);
    };

    // Build allowes tags associative array
    if (allowed_tags) {
        allowed_array = allowed_tags.match(/([a-zA-Z0-9]+)/gi);
    }

    str += '';

    // Match tags
    matches = str.match(/(<\/?[\S][^>]*>)/gi);

    // Go through all HTML tags
    for (key in matches) {
        if (isNaN(key)) {
            // IE7 Hack
            continue;
        }

        // Save HTML tag
        html = matches[key].toString();

        // Is tag not in allowed list? Remove from str!
        allowed = false;

        // Go through all allowed tags
        for (k in allowed_array) {
            // Init
            allowed_tag = allowed_array[k];
            i = -1;

            if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}
            if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');}
            if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag)   ;}

            // Determine
            if (i == 0) {
                allowed = true;
                break;
            }
        }

        if (!allowed) {
            str = replacer(html, "", str); // Custom replace. No regexing
        }
    }

    return str;
}

window.fbAsyncInit = function() {
	FB.init({
		appId: FACEBOOK_API, 
		status: true, 
		cookie: true, 
		xfbml: true,
		oauth: true,
		channelURL: 'http://'+location.hostname+'/channel.html' 
	});
	FB.Event.subscribe('auth.authResponseChange', handleSessionResponse);
	function handleSessionResponse(response) {
		// alert(window.getObjectAsString(response));
		if (response.authResponse) {
			if (response.authResponse.accessToken) {
				if (!$('#logged_in').val() && !$('#fb_logged_in').val()) {
					window.fbSubmitTimer = setTimeout(function(){_ajaxFacebookSubmit(response);}, 3000);
				}
			}
		} else {
			if ($('#logged_in').val() == true && $('#fb_logged_in').val() == true) {
				// alert('redirect to logout page - auth response change');
				redirectToLogoutPage();
			}
		}
  	};
};
(function() {
	var e = document.createElement('script'); e.async = true;
	e.src = document.location.protocol +
	  '//connect.facebook.net/en_US/all.js';
	document.getElementById('fb-root').appendChild(e);
}());

// not used / called anymore ..
function fbReloadPage() {
	if($('#logged_in').val() == false) {
		reloadPage();
	}
}

$('#login-facebook').bind('click', function(event) {
	event.preventDefault();
	FB.login(_ajaxFacebookSubmit, {
		scope:'publish_stream,email,user_about_me,user_activities,user_birthday,user_location,user_website'});
	return false;
});
$('#logout_link').bind('click', function(){
	FB.logout(
		function(response) {
			// alert('Logout response:\n\n'+window.getObjectAsString(response));
			redirectToLogoutPage();
		}
	);
	return false;
});

window.getObjectAsString = function(o, is_recursion) {
	var s = '';
	var c = is_recursion ? "\t" : '';
	var nl = "\n" + c;
	for(var p in o) {
		if(typeof o[p] == 'object') {
			s += c + p + ' = ' + "\n\t" + AddBusiness.renderObj(o[p], true);
		} else {
			s += c + p + ' = ' + o[p];
		}
		c = nl;
	}
	return s;
}

window.redirectToLogoutPage = function() {
	//alert('redirect to logout page');
	window.location.href = $('a#logout_link').attr('href');
}
