var dragging=false;
var draggedCarouselRadio=null;

$(document).ready(function() {
	setCookie("userId", $("#userId").val(), 24*365, "/");

	jQuery('#radiosCarousel').jcarousel({
        wrap: 'circular',
        auto: 5,
        itemVisibleInCallback: {onBeforeAnimation: radiosCarouselItemVisibleInCallback},
        itemVisibleOutCallback: {onAfterAnimation: radiosCarouselItemVisibleOutCallback},
        initCallback: radiosCarouselInitCallback
    });
});

function radiosCarouselItemVisibleInCallback(carousel, item, i, state, evt) {
    // The index() method calculates the index from a
    // given index who is out of the actual item range.
    var idx = carousel.index(i, carouselRadioIds.length);
    var itemId=carouselRadioIds[idx - 1];
    var radioHTML=radiosCarouselGetItemHTML(itemId);
    carousel.add(i, radioHTML);
    $("#carouselItem"+itemId).draggable({
    	revert: true,
    	revertDuration: 0,
    	cursorAt: {left: 30, top: 30}, 
		start: function() {
    		dragging=true;
    		draggedCarouselRadio=$(this);
			$(".jcarousel-clip").css("overflow","visible");
			$("#radiosCarousel").css("overflow","visible");
			carousel.stopAuto();
		},
		stop: function() {
			dragging=false;
			$(".jcarousel-clip").css("overflow","hidden");
			$("#radiosCarousel").css("overflow","hidden");
			carousel.startAuto();
		}
	});
};

function radiosCarouselItemVisibleOutCallback(carousel, item, i, state, evt) {
    var idx = carousel.index(i, carouselRadioIds.length);
    var itemId=carouselRadioIds[idx - 1];
	$("#carouselItem"+itemId).draggable("destroy");
    carousel.remove(i);
};

function radiosCarouselGetItemHTML(itemId) {
    return '<div id="carouselItem'+itemId+'" class="draggable" style="cursor:move"><img src="img/icons2/' + itemId + '.png" width="65" height="65"/></div>';
};

function radiosCarouselInitCallback(carousel) {
    // Pause autoscrolling if the user moves with the cursor over the clip.
    carousel.clip.hover(function() {
        carousel.stopAuto();
    }, function() {
    	if(!dragging) {
    		carousel.startAuto();
    	}
    });
};

var loginAdviceShown=false;
function sendRadiosToServer() {
	var commForm=$("#setRadiosForm");

	var radiosUpStr=null;
	for(var i=0;i<radioIconIds.length;i++) {
		if(radiosUpStr==null) {
			radiosUpStr=radioIconIds[i];
		} else {
			radiosUpStr+=","+radioIconIds[i];
		}
	}
	$("#radioIdsUp", commForm).val(radiosUpStr);

	var radiosCarouselStr=null;
	for(var i=0;i<carouselRadioIds.length;i++) {
		if(radiosCarouselStr==null) {
			radiosCarouselStr=carouselRadioIds[i];
		} else {
			radiosCarouselStr+=","+carouselRadioIds[i];
		}
	}
	$("#radioIdsCarousel",commForm).val(radiosCarouselStr);
	
	commForm.submit();
	if(!loginAdviceShown && $("#userName").val()=="") {
		loginAdviceShown=true;
		openModal('#loginOrRegisterDialog');
	}
	setTimeout(function() {
		clearCommFrame();
	},500);
}

function getRadiosFromServer() {
	$("#getRadiosUserId").val($("#userId").val());
	var commForm=$("#getRadiosForm");
	commForm.submit();
}

function radiosGottenFromServer(newRadioIconIds, newCarouselRadioIds) {
	clearCommFrame();

	for(var i=0;i<radioIconIds.length;i++) {
		var radioIconId=radioIconIds[i];
		var newRadioIconId=newRadioIconIds[i];
		var radioImg=$("#idImg_"+radioIconId);
		radioImg.attr("src","img/icons2/"+newRadioIconId+".png").attr("id","newTmpId"+newRadioIconId);
		if(!$.browser.msie) {
			radioImg.unreflect();
		}
	}
	for(var i=0;i<newRadioIconIds.length;i++) {
		var newRadioIconId=newRadioIconIds[i];
		var radioImg=$("#newTmpId"+newRadioIconId);
		radioImg.attr("id","idImg_"+newRadioIconId);
		if(!$.browser.msie) {
			radioImg.reflect();
		}
	}
	radioIconIds=newRadioIconIds;

	for(var i=0;i<carouselRadioIds.length;i++) {
		var carouselRadioId=carouselRadioIds[i];
		var newCarouselRadioId=newCarouselRadioIds[i];
		var radioImg=$("#carouselItem"+carouselRadioId);
		radioImg.attr("id","newTmpId"+newCarouselRadioId).find("img").attr("src","img/icons2/"+newCarouselRadioId+".png");
		if(!$.browser.msie) {
			radioImg.unreflect();
		}
	}
	for(var i=0;i<carouselRadioIds.length;i++) {
		var newCarouselRadioId=newCarouselRadioIds[i];
		var radioImg=$("#newTmpId"+carouselRadioId);
		radioImg.attr("id","carouselItem"+newCarouselRadioId);
		if(!$.browser.msie) {
			radioImg.reflect();
		}
	}
	carouselRadioIds=newCarouselRadioIds;
}

function radiosSet() {
	clearCommFrame();
}

function clearCommFrame() {
	$("#commFrame").src="javascript:void()";
}

function regenerateUserId() {
	var userId=Math.floor(Math.random()*1000000000000);
	$("#userId").val(userId);
	setCookie("userId", userId, 24*365, "/");
}

function logout() {
	regenerateUserId();
	$("#loggedHeader").hide();
	$("#notLoggedHeader").show("slow");
}

function showLogin(closeFirst) {
	if(closeFirst) {
		$.modal.close();
		var delay=800;
	} else {
		var delay=0;
	}
	setTimeout(function() {
		openModal('#loginDialog');
		setTimeout(function() {
			$("#loginUserEmail").focus();
		},800);
	},delay);
}

function loginSubmit() {
	var email=$("#loginUserEmail").val();
	if(email=="") {
		$("#loginUserEmail").focus();
		alert("Sis plau, introdueix la teva adreça electrònica.");
		return false;
	}
	var password=$("#loginUserPassword").val();
	if(password=="") {
		$("#loginUserPassword").focus();
		alert("Sis plau, introdueix la teva contrasenya.");
		return false;
	}
	return true;
}

function logggedIn(userId,userName) {
	$("#userId").val(userId);
	if($("#rememberMeLogin").attr("checked")) {
		setCookie("userId", userId, 24*365, "/");
	} else {
		delCookie("userId");
	}
	$("#notLoggedHeader").hide();
	$("#headerUserName").html(userName);
	$("#loggedHeader").show("slow");
	$.modal.close();
	loginAdviceShown=true;
	getRadiosFromServer();
}

function loginFailed() {
	alert("Has oblidat la contrasenya?")
}

function registerSubmit() {
	var email=$("#registerUserEmail").val();
	if(checkEmail(email)!=null) {
		$("#registerUserEmail").focus();
		alert("La adreça electrònica introduit no sembla correct.");
		return false;
	}
	var password=$("#registerUserPassword").val();
	if(password=="" || password.length<6) {
		$("#registerUserPassword").focus();
		alert("Sis plau, introdueix una contrasenya amb al menys 6 caracters.");
		return false;
	}
	var password2=$("#registerUserPassword2").val();
	if(password!=password2) {
		$("#registerUserPassword").focus();
		alert("Les contrasenyes no coincideixen.");
		return false;
	}
	var name=$("#registerUserName").val();
	if(name=="") {
		$("#registerUserName").focus();
		alert("Sis plau, introdueix el teu nom.");
		return false;
	}
	$("#registerUserId").val($("#userId").val());
	return true;
	
}

function showRegister(closeFirst) {
	if(closeFirst) {
		$.modal.close();
		var delay=800;
	} else {
		var delay=0;
	}
	setTimeout(function() {
		openModal('#registerDialog');
		setTimeout(function() {
			$("#registerUserName").focus();
		},500);
	},delay);
}

function emailTakenAlready() {
	clearCommFrame();
	alert("Ja n'hi ha un altre usuari amb aquest correo electornic. Ets tu?");
}

function registered() {
	clearCommFrame();
	loginAdviceShown=true;
	$.modal.close();
	if($("#rememberMeRegister").attr("checked")) {
		setCookie("userId", $("#userId").val(), 24*365, "/");
	} else {
		delCookie("userId");
	}
	$("#notLoggedHeader").hide();
	$("#headerUserName").html($("#registerUserName").val());
	$("#loggedHeader").show("slow");
	setTimeout(function() {
		alert("Ja estàs regristrat.");
	},800);
}

function setCookie(name, value, hours, path, domain, secure) {
	if(hours) {
	    if(typeof hours == 'string' && Date.parse(hours)) { // already a Date string
	    	var numHours = hours;
	    } else if(typeof hours == 'number') { // calculate Date from number of hours
	    	var numHours = (new Date((new Date()).getTime() + hours*3600000)).toGMTString();
	    }
	}
	document.cookie = name + '=' + escape(value) + ((numHours)?(';expires=' + numHours):'') + ((path)?';path=' + path:'') + ((domain)?';domain=' + domain:'') + ((secure && (secure == true))?'; secure':''); // Set the cookie, adding any parameters that were specified.
}


function delCookie(name, path, domain) {
	// since there is no real way of deleting a cookie we just set its value to nothing and its
	// expiration date to way back
	document.cookie = name + '=; expires=Fri, 13-Apr-1970 00:00:00 GMT' + ((path)?';path=' + path:'') + ((domain)?';domain=' + domain:''); // set an already-expired cookie
}

