var constants           = new ConstantControl();


var LoginControl = Class.create();


LoginControl.prototype = {
 
	initialize : function() {

		try 
	    {
             LoginControl.prototype.Store           = new CookieJar({expires:30000, path: '/'});
             LoginControl.prototype.XmlRequest      = null;
             LoginControl.prototype.AccessCode      = "";
             LoginControl.prototype.LogOutUrl       = constants.LOG_OUT_URL;
             LoginControl.prototype.UserName        = "";
            
        }
    	catch(e) 
        {
            handleException(e);
        }  				
	},
	save : function(){
	    
	    
	    try 
	    {
	        LoginControl.prototype.Store.put("accesscode",LoginControl.prototype.AccessCode);
	        LoginControl.prototype.Store.put("userName",LoginControl.prototype.UserName);
        }
        catch(e) 
        {
            handleException(e);
        } 
	},
	
	loadData : function(request){
	    try 
	    {
            LoginControl.prototype.XmlRequest 		= 	removeTextNode(request.responseXML.documentElement);
            LoginControl.prototype.AccessCode       =   LoginControl.prototype.XmlRequest.getElementsByTagName("result")[0].childNodes[0].nodeValue;
            LoginControl.prototype.save();
           
           switch(LoginControl.prototype.AccessCode)
	       {
	            case "-1":
	                LoginControl.prototype.info("Error","There has been an error whilst creating your account. The email address or username are already in use. Please choose an alternative one and try again.");
	                break;
	            case "-1":
	                LoginControl.prototype.info("Error","There has been an error whilst creating your account. The email address or username are already in use. Please choose an alternative one and try again.");
	                break;
	            default:
	                document.location.href = "/profile/view.aspx"
	                break;
	       } 
        }
        catch(e) 
        {
            handleException(e);
        } 
	},
	validateLogin : function(request){
	    try 
	    {
            LoginControl.prototype.XmlRequest 		= 	removeTextNode(request.responseXML.documentElement);
            LoginControl.prototype.AccessCode       =   LoginControl.prototype.XmlRequest.getElementsByTagName("result")[0].childNodes[0].nodeValue;
            LoginControl.prototype.save();
           
           switch(LoginControl.prototype.AccessCode)
	       {
	            case "-1":
	                LoginControl.prototype.info("Error","Username or password is incorrect");
	                break;
	            case "-1":
	                LoginControl.prototype.info("Error","Username or password is incorrect");
	                break;
	            default:
	                document.location.href = "/profile/view.aspx"
	                break;
	       } 
        }
        catch(e) 
        {
            handleException(e);
        } 
	},
	getUserName : function(){
	
	    
	},
	get : function(){
	    
	    var returnValue     = "";
	    
	    try 
	    { 
	        if(LoginControl.prototype.Store.get("accesscode") != null)
	        {
	            switch(LoginControl.prototype.Store.get("accesscode"))
	            {
	                case "-1":
	                        $("LOGIN_LINK").show();
	                        $("LOGOUT_LINK").hide();
	                        $("PROFILE_LINK").hide();
	                        $("REGISTER_LINK").show();
	                        $("SPAN_USERNAME").hide();
	                        returnValue = "-1";
	                    break;
	                case "":
	                        $("LOGIN_LINK").show();
	                        $("LOGOUT_LINK").hide();
	                        $("PROFILE_LINK").hide();
	                        $("REGISTER_LINK").show();
	                         $("SPAN_USERNAME").hide();
	                        returnValue = "-1";
	                    break;
	                default:
	                        $("LOGIN_LINK").hide();
	                        $("LOGOUT_LINK").show();
	                        $("PROFILE_LINK").show();
	                        $("REGISTER_LINK").hide();
    	                     $("SPAN_USERNAME").show();
	                        returnValue = LoginControl.prototype.Store.get("accesscode");
	                        
	                        if(LoginControl.prototype.Store.get("userName") != null)
	                        {
	                           $("SPAN_USERNAME").update("<b>" + "Welcome " + LoginControl.prototype.Store.get("userName") + " " + "</b>");
	                        }
	                    break;
	            }
	    
	        }
	        else
	        {
	                $("LOGIN_LINK").show();
                    $("LOGOUT_LINK").hide();
                    $("PROFILE_LINK").hide();
                    $("REGISTER_LINK").show();
                    returnValue = "-1";
	        }
	        
	        $("TOP_MENU").show();
           
           return returnValue;
        }
        catch(e) 
        {
           handleException(e);
        } 
	},
	
	doLogin : function(){


	    var url             = constants.DO_LOGIN_URL;
	    var myAjax          = "";
	    var xmlString       = "";
        var xmlNode         = "";
        var xmlHead         = "<User>";
        var xmlFoot         = "</User>";
        
        var u               = $("txtUsername").value;
        var p               = $("txtPassword").value;
        
	    try
	    {
	    
	        LoginControl.prototype.UserName     = u;
            xmlNode += '<userName>'   + u +  '</userName>'; 
            xmlNode += '<password>'   + p +  '</password>'; 
            
            xmlString = xmlHead + xmlNode + xmlFoot;
    
            myAjax  = new Ajax.Request(url,{method:'POST',parameters:xmlString,contentType:'text/xml',requestHeaders:'text/xml',onSuccess:LoginControl.prototype.validateLogin,onFailure:handleException});
            
		} 
	    catch(e) 
	    {
	       handleException(e);
	    } 
	
	},
	doLogout : function(){
	
	    try
	    {
	        LoginControl.prototype.AccessCode = "";
	        LoginControl.prototype.UserName = "";
	        LoginControl.prototype.save();  
	       
	        document.location.href = LoginControl.prototype.LogOutUrl;  
	    
	    } 
	    catch(e) 
	    {
	        handleException(e);
	    }
	    
	},
	checkUserName : function(){

	    var url             = constants.CHECK_USERNAME_URL;
	    var myAjax          = "";
	    var xmlString       = "";
        var xmlNode         = "";
        var xmlHead         = "<User>";
        var xmlFoot         = "</User>";
        
        
        try
	    {
	        var userName    = $("txtRegUsername").value;
	        var resultMsg   = "";
	        if(userName != "")
	        {
	    	    function returnResponse(request){
	    	    
                    var req               =  removeTextNode(request.responseXML.documentElement);
                    var result            =  req.getElementsByTagName("result")[0].childNodes[0].nodeValue;
                    var title             =  req.getElementsByTagName("method")[0].childNodes[0].nodeValue;

                    switch(result)
                    {
                        case "-1":
                                resultMsg ="Username available";
                            break;
                        case "1":
                                resultMsg ="Username not available";
                            break;
                    }
                    
                    LoginControl.prototype.info(title,resultMsg)

                }

                xmlNode += '<userName>'   + userName +  '</userName>'; 
                xmlString = xmlHead + xmlNode + xmlFoot;
                
                myAjax  = new Ajax.Request(url,{method:'POST',parameters:xmlString,contentType:'text/xml',requestHeaders:'text/xml',onSuccess:returnResponse,onFailure:handleException,asynchronous:false});
           } 
		} 
	    catch(e) 
	    {
	        handleException(e);
	    } 
	
	},
	registration : function(){

	    var url             = constants.REGISTRATIN_URL;
	    var myAjax          = "";
	    var xmlString       = "";
        var xmlNode         = "";
        var xmlHead         = "<User>" ;
        var xmlFoot         = "</User>";
        
        
        try
	    {
	        var userName    = $("txtRegUsername").value;
	        var password    = $("txtRegPassword").value;
	        var email       = $("txtRegEmail").value;
	        
	        var gender      = $("selGender").value;
	        var age         = $("selAge").value;
	        var ethnicity   = $("selEthnicity").value;
	        var university  = $("selUniversity").value;
	        var industry    = $("selIndustry").value;
	        var grade       = $("selGrade").value;
	        var terms       = $("chkTerms").checked;
	        
	        if(terms == true)
	        {
	            if((userName != "") && (password != "") && (email != ""))
	            {
	                function showResponse(t,m)
	                {
	                    if(t != "Error")
	                    {
	                        $("txtRegUsername").value       = "";
	                        $("txtRegPassword").value       = "";
	                        $("txtRegEmail").value          = "";
	                        $("selGender").value            = "";
	                        $("selAge").value               = "";
	                        $("selEthnicity").value         = "";
	                        $("selUniversity").value        = "";
	                        $("selIndustry").value          = "";
	                        $("selGrade").value             = "";
	                        $("chkTerms").checked           = false;
	                        
	                        new Effect.Morph('STRENGTH_METER', {style:'width:0px', duration:'0.4'}); 
	                    }
	                    
	                    m = "<p>" + m + "</p>"
	                    Modalbox.show(m, {title: t, width: 600});
	                }
	                
	    	        function returnResponse(request)
	    	        {
	    	        
                      var req               =  	removeTextNode(request.responseXML.documentElement);
                      var result            =   req.getElementsByTagName("result")[0].childNodes[0].nodeValue;
                      var title             =   req.getElementsByTagName("method")[0].childNodes[0].nodeValue;
                      
                      showResponse(title,result);
                    }
                    
                    xmlNode += '<userName>'     + userName      +  '</userName>'; 
                    xmlNode += '<password>'     + password      +  '</password>';
                    xmlNode += '<email>'        + email         +  '</email>';
                    xmlNode += '<gender>'       + gender        +  '</gender>';
                    xmlNode += '<age>'          + age           +  '</age>';
                    xmlNode += '<ethnicity>'    + ethnicity     +  '</ethnicity>';
                    xmlNode += '<university>'   + university    +  '</university>';
                    xmlNode += '<industry>'     + industry      +  '</industry>';
                    xmlNode += '<grade>'        + industry      +  '</grade>';
                    
                    xmlString = xmlHead + xmlNode + xmlFoot;
                    
                    myAjax  = new Ajax.Request(url,{method:'POST',parameters:xmlString,contentType:'text/xml',requestHeaders:'text/xml',onSuccess:returnResponse,onFailure:handleException,asynchronous:false});
               }
           } 
           else
           {
                alert("Please agree to the terms and conditions");
           }
		} 
	    catch(e) 
	    {
	        handleException(e);
	    } 
	
	},
	getPasswordStrength : function(pw){
	    
	    try
	    {
	            var strength    = LoginControl.prototype.getPasswordScore(pw);
				var width       = (100/32) * strength;
				new Effect.Morph('STRENGTH_METER', {style:'width:'+width+'px', duration:'0.4'}); 
	    }
	    catch(e) 
	    {
	        handleException(e);
	    }
	
	},
	getPasswordScore : function(passwd){

	    try
	    {
	            intScore = 0;
				if (passwd.match(/[a-z]/)) // [verified] at least one lower case letter
						{
						intScore = (intScore+1)
						} if (passwd.match(/[A-Z]/)) // [verified] at least one upper case letter
						{
						intScore = (intScore+5)
						} // NUMBERS
						if (passwd.match(/\d+/)) // [verified] at least one number
						{
						intScore = (intScore+5)
						} if (passwd.match(/(\d.*\d.*\d)/)) // [verified] at least three numbers
						{
						intScore = (intScore+5)
						} // SPECIAL CHAR
						if (passwd.match(/[!,@#$%^&*?_~]/)) // [verified] at least one special character
						{
						intScore = (intScore+5)
						} if (passwd.match(/([!,@#$%^&*?_~].*[!,@#$%^&*?_~])/)) // [verified] at least two special characters
						{
						intScore = (intScore+5)
						} // COMBOS
						if (passwd.match(/[a-z]/) && passwd.match(/[A-Z]/)) // [verified] both upper and lower case
						{
						intScore = (intScore+2)
						} if (passwd.match(/\d/) && passwd.match(/\D/)) // [verified] both letters and numbers
						{
						intScore = (intScore+2)
						} // [Verified] Upper Letters, Lower Letters, numbers and special characters
						if (passwd.match(/[a-z]/) && passwd.match(/[A-Z]/) && passwd.match(/\d/) && passwd.match(/[!,@#$%^&*?_~]/))
						{
						intScore = (intScore+2)
						}
						return intScore;
	    
	    }
	    catch(e) 
	    {
	        handleException(e);
	    }
	},
	info : function(t, m){
	
	        m = "<p>" + m + "</p>";
	        
	        Modalbox.show(m, {title: t, width: 600});
	        
	}
}