// JavaScript Document

dbAjax = {
	relativeRoot:null,
	logged:false,
	mouseX:0,
	mouseY:0,
	emptyAddress:null,
	currentAddress:'/',
	currentLanguage:false,
	callback:false,
	init:function(emptyAddress,currentLanguage,opts) {
		dbAjax.emptyAddress=emptyAddress;
		dbAjax.relativeRoot=opts.relativeRoot;
		if (window.history.pushState) {
			dbAjax.emptyAddress='it/homepage';
			dbAjax.currentAddress=emptyAddress;
		} else {
			dbAjax.emptyAddress=emptyAddress;
			dbAjax.currentAddress=emptyAddress;
		}
		dbAjax.logged=opts.logged;
		dbAjax.currentLanguage=currentLanguage;
		dbAjax.callback=opts.callback;
		dbAjax.onReplace=(opts.onReplace)?opts.onReplace:function() {};
		jQuery.ajaxSetup({
			cache: false,
			type:"POST",
			dataType:"json",
			error:function(jqXHR, textStatus, errorThrown) {
				alert("Errore server. Si prega di riprovare più tardi."+textStatus+errorThrown);
				dbAjax.loading=false;
				//SWFAddress.back();
			}
		}); 
		$(document).mousemove(function(e){
		   	dbAjax.mouseX = e.pageX;
		 	dbAjax.mouseY = e.pageY;
		});
		$(window).scroll(function() {
			if (dbAjax.onScroll) dbAjax.onScroll();
		});
		if (window.history.pushState)
			$(window).bind("popstate", function(e) {
			var address=location.pathname.replace(dbAjax.relativeRoot,"")+location.search;
			if (address=="") address=dbAjax.emptyAddress;
			if (dbAjax.currentAddress!=address && !dbAjax.loading) {
				dbAjax.postData={__REFERER:dbAjax.currentAddress}
				dbAjax.currentAddress=address;
				address='/'+location.pathname.replace(dbAjax.relativeRoot,"")+'.ajax'+location.search;
				dbAjax.onAddressChange((address!="/")?address:dbAjax.emptyAddress);
			}
		});
		else
		SWFAddress.addEventListener(SWFAddressEvent.CHANGE, function(event) {
			var address=event.value;
			if (address=="/") address=dbAjax.emptyAddress;
			if (dbAjax.currentAddress!=address && !dbAjax.loading) {
				dbAjax.loading=true;
				if (!dbAjax.postData) dbAjax.postData=new Object();
				dbAjax.postData.__REFERER=dbAjax.currentAddress;
				dbAjax.currentAddress=address;
				address=address.split("?");
				address=address.shift()+'.ajax'+((address.length>0 && address[0]!='')?'?'+address.join('?'):'');
				dbAjax.onAddressChange(address);
			}
		});
	},
	onAddressChange:function(address) {
		for (var i in dbAjax.intervals) {
			$.doTimeout(dbAjax.intervals[i]);
		}
		dbAjax.intervals=new Array();
		if (dbAjax.currentLanguage) {
			var lang=address.split('/')[1];
			if (lang!=dbAjax.currentLanguage) {
				dbAjax.postData=(dbAjax.postData)?dbAjax.postData:{};
				dbAjax.postData.translate=1;
				dbAjax.currentLanguage=lang;
			}
		}
		var callUrl=dbAjax.relativeRoot.substr(0,dbAjax.relativeRoot.length-1)+address;
		if (callUrl.indexOf(".ajax")==-1) callUrl+=".ajax";
		dbAjax.call(callUrl,dbAjax.postData);
		dbAjax.postData=new Object();
	},
	postData:new Object(),
	toAddress:function(address, data) {
		if (dbAjax.currentAddress!=address && !dbAjax.loading) {
			dbAjax.currentAddress=address;
			dbAjax.postData=data;
			if (window.history.pushState) {
				window.history.pushState((dbAjax.relativeRoot+address).replace("//","/"),null,(dbAjax.relativeRoot+address).replace("//","/"));
				var ad=address.split("?");
				var ad0=ad.shift();
				var qs=(ad.length>0)?'?'+ad.join("?"):'';
				var address='/'+ad0+'.ajax'+qs;
				dbAjax.onAddressChange((address!="/")?address:dbAjax.emptyAddress);
			} else
			SWFAddress.setValue(address);
		}
	},
	intervals:new Array(),
	clearInterval:function(intervalId) {
		$.doTimeout(intervalId);
		dbAjax.intervals.splice(dbAjax.intervals.indexOf(intervalId),1);
	},
	setInterval:function(intervalId, timer, callback) {
		$.doTimeout(intervalId, timer, function() {
			//dbAjax.clearInterval(intervalId);
			if (!callback()) {
				dbAjax.intervals.splice(dbAjax.intervals.indexOf(intervalId),1);
				return false;
			} else return true;
		});
		dbAjax.intervals.push(intervalId);
	},
	onScroll:null,
	onResize:null,
	loading:false,
	pageData:null,
	call:function(action,dataToPost) {
        $("*").css("cursor","wait");
		$("a").css("cursor","wait");
		
		for (var i in dataToPost)
				dataToPost[i]=dataToPost[i];
		
        
		dbAjax.loading=true;
		jQuery.ajax({
			url:action,
			success: dbAjax.callBack,
			data:dataToPost
		});	
	},
	postback:function(action,dataToPost) {
		dataToPost=(dataToPost)?dataToPost:{};
		dataToPost["__ACTION"]=action;
		dbAjax.call((dbAjax.relativeRoot+dbAjax.currentAddress).replace('//','/'),dataToPost);
	},
	callBack:function(data) {
		$("*").css("cursor","auto");
		$("a").css("cursor","pointer");
		$("a *").css("cursor","pointer");
		dbAjax.onScroll=null;
		var opts=data['options'];
		dbAjax.pageData=data;
		dbAjax.replaceElements();
	},
	replaceElements: function () {
		var data=dbAjax.pageData;
		var i=0;
   		for (var mod in data.render) {
			var replaced=$("#"+mod);
			var replacer=$(data.render[mod].render);
			if (replaced.attr("class")!=replacer.attr("class"))
				dbTransitions[(data.render[mod].replace)?data.render[mod].replace:'directReplace'](replaced,replacer);
		}
		if (dbAjax.callback && data.options) dbAjax.callback(data.options);
		if (data["callback"])
			eval(data["callback"]);
		dbAjax.loading=false;
	},
	login:function(fieldUid,fieldPwd) {
		dbAjax.postback('membership/login',{
			username:$('#'+fieldUid).val(),
			password:$('#'+fieldPwd).val(),
			ln:dbAjax.currentLanguage
		});
	},
	logout:function() {
		dbAjax.postback('membership/logout',{
			ln:dbAjax.currentLanguage
		});
	},
	focusField:function(field,label) {
		var method="val";//(field.is("textarea"))?"text":"val";
		field.data("label",label);
		if (field[method]()=='')
			field[method](label);
		field.blur(function() {
			if (field[method]()=='')
				field[method](label);
		});
		field.focus(function() {
			if (field[method]()==label)
				field[method]('');
		});
	},
	focusFields:function(fields) {
		for (var i in fields) {
			dbAjax.focusField($("#"+i),fields[i]);
		}
	},
	radio:function(name) {
		$("#mainContents").append($("<input type='hidden' id='"+name+"' />"));
		var elms=$("input[name='"+name+"']");
		var labels=elms.parent();
		labels.addClass("__"+name);
		labels.css({
			"position":"relative",
			"padding-right":"10px"
		});
		elms.each(function() {
			var shape=$("<span><span></span></span>");
			var elm=$(this);
			label=elm.parent();
			label.data("value",elm.attr("value"));
			label.prepend(shape);
			shape.css({
				"display":"inline-block",
				"width":elm.width()+"px",
				"height":elm.height()+"px",
				background:"#fefefd",
				"margin-right":"10px",
				"cursor":"pointer"
			});
			shape.find("span").css({
				"display":"block",
				"margin":"6px",
				"background":"#000000",
				"width":(elm.width()-12)+"px",
				"height":(elm.height()-12)+"px",
				"opacity":0			
			});
		});
		labels.click(function() {
			var value=$(this).data("value");
			$("#"+name).val(value);
			labels.each(function() {
				$(this).find("span > span").animate({
					"opacity":($(this).data("value")==value)?1:0
				},500);
			});
			/*var input=$(this).find("input")
			var name=input.attr("name");
			$(this).find("span > span").css();*/
		});
		
		elms.remove();
		
	},
	checkbox:function(name,_class) {
		var elms=$("input."+_class);
		var labels=elms.parent();
		labels.addClass("__"+name);
		labels.css({
			"position":"relative",
			"padding-right":"5px"
		});
		elms.each(function() {
			var shape=$("<span><span></span></span>");
			var elm=$(this);
			label=elm.parent();
			label.data("value",elm.attr("value"));
			label.data("checked",false);
			label.prepend(shape);
			label.css("cursor","pointer");
			shape.css({
				"display":"inline-block",
				"width":elm.width()+"px",
				"height":elm.height()+"px",
				background:"#fefefd",
				"margin-right":"7px",
				"position":"relative",
				"top":"2px",
				"left":"2px",
				"cursor":"pointer"
			});
			shape.find("span").css({
				"display":"block",
				"margin":"2px",
				"background":"#000000",
				"width":(elm.width()-4)+"px",
				"height":(elm.height()-4)+"px",
				"opacity":0			
			}).addClass("bgcolor");
			label.click(function() {
				var value=$(this).data("value");
				$(this).data("checked",!$(this).data("checked"));
				$(this).find("span > span").animate({
					"opacity":($(this).data("checked"))?1:0
				},500);
				var data=new Array();
				$("input[name='"+name+"']").remove();
				labels.each(function() {
					if ($(this).data("checked")) {
						$("#membershipBlock").append("<input type='hidden' name='"+name+"' value='"+$(this).data("value")+"' />");
					}
				});
			});	
		});

		
		elms.remove();
		
	}, 
    checkCheck:function(fname,data) {
		var field=$('input[name="'+fname+'"]');
        var val=field.val();
		if (val!=undefined) {
            data[fname]='1';
			//field.parent().removeClass("error");
			return true;
		} else {
            //field.parent().addClass("error");
			return false;
		}
	},
	checkField:function(fname,data) {
		var field=$("#"+fname);
		var val=field.val();
		if (val==field.data("label")) {
			field.addClass("borderColor");
			return false;
		} else {
			data[fname]=val;
			field.removeClass("borderColor");
			return true;
		}
	},
	checkMail:function(fname,data) {
		var field=$("#"+fname);
		var val=field.val();
		if (val==field.data("label") || val.indexOf("@")==-1) {
			field.addClass("borderColor");
			return false;
		} else {
			data[fname]=val;
			field.removeClass("borderColor");
			return true;
		}
	},
	checkIdentity:function(elma, elmb) {
		if (elma.val()!=elmb.val()) {
			elma.addClass("borderColor");
			elmb.addClass("borderColor");
			return false;
		} else {
			elma.removeClass("borderColor");
			elmb.removeClass("borderColor");
			return true;
		}
	},
	register:function() {
        var data={};
		if (
			(dbAjax.checkField("nome",data)) &
			(dbAjax.checkField("cognome",data)) &
			(dbAjax.checkMail("emailr",data)) &
            (dbAjax.checkIdentity($("#passwordr"),$("#passwordr2"))) &
            
			//(dbAjax.checkIdentity($("#passwordr"),$("#password2"))) &
			(dbAjax.checkField("passwordr",data))
		) {
			if ((dbAjax.checkCheck("privacy",data))) {
				data.datanascita=$('#datanascita').val();
				data.newsletter=($('input[name="newsletter"]').val()=='on')?1:0;
				data.ln=dbAjax.currentLanguage;
				dbAjax.call(dbAjax.relativeRoot+"membership/register",data)
			} else {
				$("#mRegResponse").text("Autorizzare il trattamento dei dati");
			}
		} else {
			$("#mRegResponse").text("Verificare i campi segnalati");
		}
	},
	registerConcorso:function() {
		var data={};
            if (
				(dbAjax.checkCheck("privacy",data)) &
                (dbAjax.checkField("nome",data)) &
                (dbAjax.checkField("cognome",data)) &
                (dbAjax.checkMail("emailr",data)) &
                (dbAjax.checkIdentity($("#emailr"),$("#confemailr"))) &
                (dbAjax.checkCheck("privacy",data)) &
                //(dbAjax.checkIdentity($("#passwordr"),$("#password2"))) &
                (dbAjax.checkField("passwordr",data))
            ) {


                var interessi=new Array();
                $("input[name='interessi[]']").each(function() {
                    interessi.push($(this).val());
                });		
                data['interessi[]']=interessi;
                data.sez=$("#sez").val();
                data.mese=$("#mese").val();
                data.giorno=$("#giorno").val();
                data.anno=$("#anno").val();
                data.provincia=$('#provincia :selected').val();
                data.picture=$("#picture").val();
                //data.newsletter=($('input[name="newsletter"]').val()=='on')?1:0;
                data.newsletter=1;

                dbAjax.call(dbAjax.relativeRoot+"membership/registerConcorso",data)
                
            }
            else
                alert("Errore nella compilazione della form per il concorso.");
	    
	},
    recuperaPassword:function(field) {
        var data={};
		data[field]=$("#"+field).val();
		/*if (dbAjax.checkMail(field,data)) 
		{*/
            dbAjax.call(dbAjax.relativeRoot+"membership/passrecovery",data)
		/*} else {
			alert("Email non corretta.");
		}*/
	}
}
