/* 
uservalidation.js

This script:
	1.authenticates the user/pass on www
	2.sends response data to na
	3.updates html without refresh

Variables set in secureLogin.jsp:
	isUserLoggedIn
	displayName
	username

----------------------------------------------------------------------------*/

//xhr processor for na
function getXmlHttp(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}

function getUrl(url, cb) {
  var xmlhttp = getXmlHttp();
  xmlhttp.open("GET", url);
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
      cb(xmlhttp.status, 
         xmlhttp.getAllResponseHeaders(), 
         xmlhttp.responseText);
      }
  }
  xmlhttp.send(null);
}

//after login, data is back from na, now update the page
function gotAuth(status, headers, response){
	if(response == "pending"){
		//clear the error
		$('error').style.display = 'none';
        document.location.href = 'https://bdsc.webapps.blackberry.com/bdsc/login.pg?lang=' + devZoneLang + '#change-password';
		isUserLoggedIn = true;
	} else if(response == "Success"){
		//clear the error
		$('error').style.display = 'none';
        document.location.href = 'https://bdsc.webapps.blackberry.com/bdsc/landing.pg?iid=bdsc_DevZoneLogin&lang=' + devZoneLang;
		isUserLoggedIn = true;
	} else if(response == "Account not found" || response == "104"){
		//clear the error
		$('error').style.display = 'none';
        document.location.href = 'https://bdsc.webapps.blackberry.com/bdsc/login.pg?lang=' + devZoneLang;
		isUserLoggedIn = false;
	} else {
		//update HTML
		var prefix = '';
		if (document.location.href.indexOf('/eng/') > -1) {
			prefix = '/eng';
		}
		document.getElementById('id_submitbtn').src = prefix + '/assets/images/devzone_login_btn.gif';
		document.getElementById('id_submitbtn').disabled = false;
		$('error').innerHTML = response;
		//show the error
		$('error').style.display ='block';
	}
}

//after logout, update the page
function resetLogin(status, headers, response){
	try{$('devlogintxt').remove();}catch(e){}
	$('devloginform').style.display = 'block';
	if(username != null)$('id_user').value = username;
	isUserLoggedIn = false;
}

function getNodeValueByName(rootNode, name) {
    var nodeValue = null;
    var nodeList = rootNode.getElementsByTagName(name);
    if (nodeList.length == 1) {
    	nodeValue = nodeList[0].firstChild.nodeValue; 
    }
    return nodeValue;
}

var cidmlite = {};

cidmlite.login = function(userName, password) {
	var prefix = '';
	if (document.location.href.indexOf('/eng/') > -1) {
		prefix = '/eng';
	}
	
	var xmlHttp = getXmlHttp();
	xmlHttp.open("POST", prefix + "/wsp/cidmlite/login.do", true);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
            cidmlite.loginResponse(xmlHttp);
        }
    };
	xmlHttp.send("userName=" + userName + "&password=" + escape(password));
}

cidmlite.loginResponse = function(xmlHttp) {
	var response = " ";
	var headers = xmlHttp.getAllResponseHeaders();
	var status = xmlHttp.status;
    if (status == 200) { 
        var rootNode = xmlHttp.responseXML.documentElement;
        if (rootNode.nodeName == "pending") {
        	response = "pending"; 
        } else if (rootNode.nodeName == "error") {
        	response = getNodeValueByName(rootNode, "message"); 
        } else if (rootNode.nodeName == "return") {
        	response = "Success";
        	displayName = getNodeValueByName(rootNode, "userAlias"); 
        } 
    }
	gotAuth(status, headers, response);
}

cidmlite.logout = function() {
	var prefix = '';
	if (document.location.href.indexOf('/eng/') > -1) {
		prefix = '/eng';
	}
	
	var xmlHttp = getXmlHttp();
	// Synchronous request to make sure that the cookies are cleared before the remainder
	// of the logout button onclick handler sets the document location.
	xmlHttp.open("POST", prefix + "/wsp/cidmlite/logout.do", false);
	xmlHttp.send(null);
}

//user validation (xhr+java) method on www
function authenticateUser() {
	var prefix = '';
	if (document.location.href.indexOf('/eng/') > -1) {
		prefix = '/eng';
	}
	document.getElementById('id_submitbtn').src = prefix + '/assets/images/devzone_login_spin.gif';
	document.getElementById('id_submitbtn').disabled = true;
	var userName = document.forms.cdzForm.id_user.value;
	var password = document.forms.cdzForm.id_pass.value;
	if (userName != null && userName.length > 0 && password != null && password.length > 0 && checkEmail(userName)) {
		cidmlite.login(document.forms.cdzForm.id_user.value, document.forms.cdzForm.id_pass.value);
	} else {
		document.getElementById('id_submitbtn').src = prefix + '/assets/images/devzone_login_btn.gif';
		document.getElementById('id_submitbtn').disabled = false;
		if (userName == null || userName.length < 1 || !checkEmail(userName)) {
			$('error').innerHTML = 'Please enter a valid email address';
		} else if (password == null || password.length < 1) {
			$('error').innerHTML = 'Please enter a password';
		} else {
			$('error').innerHTML = 'Please enter a valid email address and/or password';
		}
	
		$('error').style.display ='block';
	}
	//cdzHandler.authenticateUser(document.forms.cdzForm.id_user.value, document.forms.cdzForm.id_pass.value, document.forms.cdzForm.id_zone.value, null, makeRequest);
}

//construct a query to send off to na to set the session variables and cookie
function makeRequest(data){
//if cdzHandler.authenticateUser is working
if (data){
	var baseUrl = 'http://'+document.location.hostname+'/secure/processResponse.do';
	var url;
	var devLoginCode = data["responseCode"];
	
	function fullString(){
		var devLoginMail = $('id_user').value;
		var devLoginRemember = $('id_remember').checked;
		//rim knows the other values available in the data array, we just need name
		var devLoginName = data["responseName"];
		//we just need the first name
		var devName = devLoginName.split(",");
		displayName = devName[0];
		if (devName.length > 1 && devName[1] != 'undefined') {
			displayName = displayName + " " + devName[1];
		}
		//query contruct
		url = baseUrl + "?status=" + devLoginCode + "&displayName=" + displayName + "&rememberMe=" + devLoginRemember + "&username=" + devLoginMail;
		//this makes an xhr call on na
		//syntax: getUrl(url to post to, function to run after response)
		getUrl(url, gotAuth);
		}
	
	function minString(){
		//query contruct
		url = baseUrl + "?status=" + devLoginCode;
		//this makes an xhr call on na
		//syntax: getUrl(url to post to, function to run after response)
		getUrl(url, gotAuth);
		}
	
	//depending on the response we get from 
	//cdzHandler.authenticateUser, construct the appropriate string
	switch (devLoginCode) {
		case "1": fullString(); break;
		case "2": minString(); break;
		case "3": minString(); break;
		case "4": minString(); break;
		case "5": loadProfileLink(); break;
		default: alert('Error, please reload the page');
		}
	}
	
	//cdzHandler.authenticateUser is NOT working
	//else{ 
	//	alert('Error, please reload the page');
	//	}
} // /makeRequest()

function loadProfileLink() {
	if (document.location.href.indexOf("http://com-") > -1 && 
			document.location.href.indexOf("5p") < 0) {
		document.location.href = "https://www.blackberry.com/CorpDevZoneQA/edit.jsp";
	} else {
		document.location.href = "https://www.blackberry.com/CorpDevZone/edit.jsp";
	}
}

//builds the html for the logged-in state
function devLoginLoggedIn(){
	//fix for the flickering if logged in and refreshing the page
	$('devloginform').style.display = 'none';
	$('devlogin').style.height = '135px';
	$('devlogin').style.backgroundPosition = '0 -135px';
	
	//build the tags, sets attributes etc
	var d = document.createElement('div');
	d.setAttribute('id','devlogintxt');
	$('devlogin').appendChild(d);
	var h = document.createElement('h3');
	h.innerHTML = welcomeMsgStart;
	if (displayName != null && displayName != "null") {
		h.innerHTML = h.innerHTML + " " + displayName;
	}
	
	if (document.location.href.indexOf('us.blackberry') < 0 &&
			document.location.href.indexOf('na.blackberry') < 0 &&
			document.location.href.indexOf('-us-') < 0) {
		h.innerHTML = h.innerHTML + welcomeMsgEnd;
	} else {
	    h.innerHTML = "<div id='dev_welcome'>" + h.innerHTML + "</div>" + welcomeMsgEnd;	  
	    }

	$('devlogintxt').appendChild(h);
	var p = document.createElement('p');
	p.className = 'loggedInP';
	var a = document.createElement('a');
	a.setAttribute('href','#');
	a.setAttribute('id', 'logoutButton');
	
	var a2 = document.createElement('a');
	a2.setAttribute("href", "https://bdsc.webapps.blackberry.com/bdsc/landing.pg?lang=" + devZoneLang + "#account");
	a2.className = "editProfile";
	
	//trigger for the logout routine
	a.onclick = function(event) {
		devLoginLogOut();
		document.location.href = "/developers/?logout=true";
		if (event && event.preventDefault) event.preventDefault(); return false;
	};
	a.innerHTML = "Log out";
	p.appendChild(a);
	
	if (document.location.href.indexOf('us.blackberry') < 0 &&
			document.location.href.indexOf('na.blackberry') < 0 &&
			document.location.href.indexOf('-us-') < 0) {
		p.appendChild(a2);
	}
	
	
	
	//inject the code
	$('devlogintxt').appendChild(p);
}

//logout routine
function devLoginLogOut(){
	cidmlite.logout();
	//var url = "http://"+document.location.hostname+"/secure/logout.do";
	//this makes an xhr call on na
	//syntax: getUrl(url to post to, function to run after response)
	//getUrl(url, resetLogin);
}

//checks for logged/not-logged in, auto populates, etc...
function devLoginInit(){
	if(isUserLoggedIn){
		devLoginLoggedIn();
	}else if(username != null){
		//auto-populate the username field
		$('id_user').value = username;
	}
}

function checkEmail(email) {
    var isValid = false;
    //var pattern = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|asia|cat|coop|edu|int|pro|tel|travel)\b/
    var pattern = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[a-z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|asia|cat|coop|edu|int|pro|tel|travel)\b/                                                      
    isValid = pattern.test(email.toLowerCase());
    return isValid;
}


Event.onDOMReady(function(){
	devLoginInit();
});


