YUI.add('dragontape-models-user',function(Y) {
    Y.namespace('dragontape.models.user');
    
    var user=Y.dragontape.models.user;
    var data={};
    
    var passChangeSuccess=function(id,o,args) {
   		data={};
    	Y.fire('passchange:success');    	
    };
    
    var passChangeFailure=function(id,o,args) {
    	data={};
    	if(o.responseText) {
//    		Y.log('passwordchange fail:'+o.responseText);
    	}
    	Y.fire('passchange:failure');
    };
    
    var lostRegistrationSuccess=function(id,o,args) {
   		data={};
    	Y.fire('lostreg:success');    	
    };
    
    var lostRegistrationFailure=function(id,o,args) {
   		data={};
    	Y.fire('lostreg:failure');    	
    };
    
    var loginSuccess=function(id,o,args) {
    	if(o.responseText) {
        	data=Y.JSON.parse(o.responseText);
        	dragontape.user=data;
        	//console.log(data);
//        	Y.log('loginsuccess:'+o.responseText);
        	var exdate=new Date();exdate.setDate(exdate.getDate()+5);
       		document.cookie="youare=signed;expires="+exdate.toUTCString()+";path=/;";
    	} else {
    		data={};
    	}
    	Y.fire('login:success');
    	
    	
    	
    	if(Y.one('#tapeEditor')==null){
    		
    		if(Y.one('body').hasClass('home')){
    			//location.href='/yourtapes/'; redirect after login disabled
    		}
    		else {location.reload(true); // activate like buttons in the gallery
    			Y.one('#systemmsg').setStyle('display','block');
    			Y.one('#systemmsg .text').set('innerHTML','You are logged in. And now a fresh page for you...');
    		}
    		
    	};
    	
    };

    var logoutSuccess=function(id,o,args) {
   		data={};
   		dragontape.user=null;
   		//var setCookie=function(c_name,value,expiredays){var exdate=new Date();exdate.setDate(exdate.getDate()+expiredays);document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toUTCString()+";path=/;");}
   		var exdate=new Date();exdate.setDate(exdate.getDate()+1);
   		document.cookie="youare=unsigned;expires="+exdate.toUTCString()+";path=/;";
    	Y.fire('logout:success');
    	if(Y.one('body').hasClass('yourtapes'))location.href='/';
    };
    
    var loginFailure=function(id,o,args) {
    	data={};
    	error=Y.JSON.parse(o.responseText);
    	if(o.responseText) {
    		Y.log('loginfailure:'+o.responseText);
    	}
    	Y.fire('login:failure',error['error']);
    };
    
    var registerFailure=function(id,o,args) {
    	Y.log('fail');
    	data={};
    	error=Y.JSON.parse(o.responseText);
    	if(o.responseText) {
    		Y.log('registerfailure:'+error['error']);
    	}
    	Y.fire('register:failure',error['error']);
    };
    
    var stateFailure=function() {
    	data={};
    };
    
    user.isLoggedIn=function() {
    	return data.hasOwnProperty('id');
    };
    
    user.init=function() {
    	if(dragontape && dragontape.user) {
    		user.setUser(dragontape.user);
        	Y.fire('login:success');
    	}
    };
    
    user.setUser=function(user) {
    	data = user;
    }
    user.getUser=function() {
    	return data;
    };
    
    user.getUserId=function() {
    	return data.id;
    };
    
    user.getState=function() {
    	Y.io('/api/user/state',{
    		on:{
    			success:loginSuccess,
    			failure:stateFailure
    		}
    	});    	
    };
    
    user.login=function(d) {
//   	Y.log(d);
    	Y.io('/api/user/login',{
    		method: "POST",
    		on:{
    			success:loginSuccess,
    			failure:loginFailure
    		},
    		data:d
    	});
    };
    
    user.loginSuccess=loginSuccess; // external login like facebook (ui.logindialog)
    
    user.logout=function() {
    	Y.io('/api/user/logout',{
    		method: "GET",
    		on:{
    			success:logoutSuccess,
    			failure:loginFailure
    		}
    	});
    };
    
    user.register=function(d) {
//    	Y.log(d);

    	Y.io('/api/user/register',{
    		method: "POST",
    		on:{
    			success:loginSuccess,
    			failure:registerFailure
    		},
    		data:d
    	});
    };
    
    user.passchange=function(d) {
    	Y.io('/api/user/passchange',{
    		method: "POST",
    		on:{
    			success:passChangeSuccess,
    			failure:passChangeFailure
    		},
    		data:d
    	});
    }
    
    user.lostregistration=function(email) {
    	Y.io('/api/user/lostregistration',{
    		method: "POST",
    		on:{
    			success:lostRegistrationSuccess,
    			failure:lostRegistrationFailure
    		},
    		data:email
    	});
    }
    
    
},'0.1.1' /* module version */,{ requires: []});

