// New functions for validator
jQuery.tools.validator.fn("[minlength]", function(input, value) {
	var min = input.attr("minlength");
	return value.length >= min ? true : [min,(min > 1 ? "s" : "")]
});
jQuery.tools.validator.fn("[nodefault]", function(input, value) {
	var defaultText = input.attr("defaultText");
	if ( defaultText ) {
		return input.val() != defaultText;
	} else {
		return true;
	}
});
jQuery.tools.validator.fn("[nosamedate]", function(input, value) {
	
	var amd1 = jQuery("#calendarFromDate").val().split("/");
	var amd2 = value.split("/");
	
	var myDate1 = new Date();
	var myDate2 = new Date();
	
	myDate1.setFullYear(amd1[0],(amd1[1]-1),amd1[2]);
	myDate2.setFullYear(amd2[0],(amd2[1]-1),amd2[2]);
	
	if (myDate2<myDate1){
		return false;
	}
	return true;
});
jQuery.tools.validator.fn("[nosametime]", function(input, value) {
	var time1 = jQuery("#calendarStartTime").val();
	var time2 = value;
	var date1 = jQuery("#calendarFromDate").val().replace("/","").replace("/","");
	var date2 = jQuery("#calendarToDate").val().replace("/","").replace("/","");
	time1 = time1.replace(":","");
	time2 = time2.replace(":","");
	
	
	
	if( time2 <= time1 && date1==date2 ){
		//alert( time2+' - '+time1+' : '+date1+' - '+date2);
		return false; 
	}
	return true;
});

jQuery.tools.validator.fn("[descrlen]", function(input, value) {
	
	var length 		= jQuery("#calendarDescription").val().length;
	var maxlength 	= jQuery("#calendarDescription").attr("maxlength");
		
	if(length > maxlength){
		return false; 
	}
	
	return true;
});

// Used by calendarError
var calendarErrorTimeout = null;

function switchClasses( sel, c1, c2 ) {
	jQuery(sel).removeClass(c1).addClass(c2);
}

// Initializes the calendar
function CalendarInit() {
	jQuery("#calendarOk").hide();
	jQuery("#calendarErrors").hide();
	// Initializes localized info
	defaultText( "input[name=calendarLabelInput]", CalendarLocalization.DEFAULT_TEXT_LABEL );
	defaultText( "input[name=calendarSymbolInput]", CalendarLocalization.DEFAULT_TEXT_SYMBOLS );
	defaultText( "input[name=calendarKeywordInput]", CalendarLocalization.DEFAULT_TEXT_KEYWORD );
	defaultText( "input[name=calendarLocationInput]", CalendarLocalization.DEFAULT_TEXT_LOCATION );
	//defaultText( "textarea[name=calendarDescription]", CalendarLocalization.DEFAULT_TEXT_DESCRIPTION );
	/*
	jQuery("input[name=calendarLabelInput]").attr('title',CalendarLocalization.TITLE_LABEL);
	jQuery("input[name=calendarSymbolInput]").attr('title',CalendarLocalization.TITLE_SYMBOLS);
	jQuery("input[name=calendarKeywordInput]").attr('title',CalendarLocalization.TITLE_KEYWORD);
	jQuery("input[name=calendarLocationInput]").attr('title',CalendarLocalization.TITLE_LOCATION);
	jQuery("textarea[name=calendarDescription]").attr('title',CalendarLocalization.TITLE_DESCRIPTION);
	jQuery('input[name=calendarOptionPrivacy]').attr('title',CalendarLocalization.TITLE_PUBLIC_PRIVATE);
	jQuery('#calendar-cancel-btn').attr('title',CalendarLocalization.TITLE_CLOSE);
	jQuery('#calendar-close-btn').attr('title',CalendarLocalization.TITLE_CLOSE);
	jQuery('#calendar-add-btn').attr('title',CalendarLocalization.TITLE_SEND_EVENT);
	jQuery('#calendarAddPeopleList').attr('title',CalendarLocalization.TITLE_ADDPEOPLELIST);
	jQuery('#calendarAddUserList').attr('title',CalendarLocalization.TITLE_ADDUSER);
	*/
	
	jQuery("input[name=calendarStartTime]").attr('title',CalendarLocalization.TITLE_HOURFROM);
	jQuery("input[name=calendarEndTime]").attr('title',CalendarLocalization.TITLE_HOURTO);
	jQuery(".calendarUserShowBtn:first").attr('title',CalendarLocalization.TITLE_ADDEMAIL);
	jQuery(".calendarUserShowBtn:last").attr('title',CalendarLocalization.TITLE_ADDUSER);
	
	CalendarLocalization.autoshow('*[localization]');
	jQuery('.calendarSelect').hide();
	// Initializes containers for PeopleList and UserList
	jQuery('#calendarList').empty();
	jQuery('#calendarUser').empty();
	// Initializes other fields
	jQuery('input[name=calendarOptionPrivacy]:first').attr('checked','checked');
	//jQuery('#optionForm').attr('disabled','disabled');
	jQuery('.optionsmask').show();
	
	// Rebuilds events
	jQuery('#calendarAddPeopleList').unbind('click').click(function(){ CalendarAddPeopleList(); });
	jQuery('#calendarAddUserList').unbind('click').click(function(){ CalendarAddUserList(true); });
	jQuery('#calendarAddUserRefine').unbind('keyup').keyup(function(){ CalendarAddUserList(false); });
	// Rebuilds tooltip event
	jQuery("#calendar-dialog *[title]").unbind('tooltip').tooltip({
		track: true, 
		delay: 0, 
		showURL: false, 
		showBody: " - ", 
		fade: 250
	});
	// Selects first item
	//jQuery('input[name=calendarLabelInput]').focus();
}

function appendPeopleUser( container, id, img, label ) {
	if ( jQuery('#'+container+'_'+id).length == 0 ) {
		//var v = '<div id="'+container+'_'+id+'" class="item"><div class="close"></div><a href="#" title="'+CalendarLocalization.ADDPEOPLEUSER_CLICK_TO_REMOVE+'" onclick="removePeopleUser(\''+container+'\',\''+id+'\')"><img src="'+img+'"><br>' + label + '</a></div>';
		var v = '<div id="'+container+'_'+id+'" class="item" title="'+CalendarLocalization.ADDPEOPLEUSER_CLICK_TO_REMOVE+'"><div class="close" onclick="removePeopleUser(\''+container+'\',\''+id+'\')"></div><img src="'+img+'"><br>' + label + '</div>';
		jQuery('#'+container).append( v );
	}
}
function removePeopleUser( container, id ) {
	jQuery('#'+container+'_'+id).remove();
}

function CalendarAddPeopleList() {
	if ( jQuery('#calendarSelectPeople').is(":visible") ) {
		jQuery('#calendarSelectPeople').slideUp();
		jQuery('.calendar-invited').show();
		switchClasses('#calendarAddPeopleList', 'calendarUserHideBtn', 'calendarUserShowBtn' );
		return;
	}
	switchClasses( '#calendarAddPeopleList', 'calendarUserShowBtn', 'calendarUserHideBtn' );
	switchClasses( '#calendarAddUserList', 'calendarUserHideBtn', 'calendarUserShowBtn' );
	jQuery('.calendar-invited').hide();
	jQuery('.calendarSelect').hide();
	var container = jQuery('#calendarSelectPeople');
	container.find('.item').remove();
	var ret = [];
    var url = Properties.WATCH_LIST_VIEW + '&flag=0';
    jQuery.getJSON(url, function(data){
        if (data.DATA) {
            for (var i = 0; i < data.DATA.length; i++) {
	            container.append("<div class='item'><a href='#' onclick='appendPeopleUser(\"calendarList\",\""+data.DATA[i][0]+"\",\"images/group.png\",\""+data.DATA[i][1]+"\")'><img src='images/group.png'><br>"+data.DATA[i][1]+"</a></div>");
            }
		    container.slideDown();
        }
    });
}

function CalendarAddUserList( init ) {
	if ( jQuery('#calendarSelectUser').is(":visible") && init ) {
		jQuery('#calendarSelectUser').slideUp();
		jQuery('.calendar-invited').show();
		switchClasses('#calendarAddUserList', 'calendarUserHideBtn', 'calendarUserShowBtn');
		return;
	}
	
	if ( init ) {
		jQuery('.calendar-invited').hide();
		jQuery('.calendarSelect').hide();
		jQuery('#calendarAddUserRefine').val("");
		switchClasses('#calendarAddUserList', 'calendarUserShowBtn', 'calendarUserHideBtn');
		switchClasses('#calendarAddPeopleList', 'calendarUserHideBtn', 'calendarUserShowBtn');
	}
	var container = jQuery('#calendarSelectUser');
	container.find('.item').remove();
	container.find('p').remove();
	var ret = [];
	var search = jQuery('#calendarAddUserRefine').val();
	if ( search.length >= 3 ) {
	    var url = Properties.SEARCH_SUGGEST_USER + jQuery('#calendarAddUserRefine').val();
	    jQuery('#calendarAddUserRefine').attr('readonly','readonly');
	    jQuery.getJSON(url, function(data){
	        if (data.DATA) {
	            for (var i = 0; i < data.DATA.length; i++) {
		            container.append("<div class='item'><a href='#' onclick='appendPeopleUser(\"calendarUser\",\""+data.DATA[i][0]+"\",\""+data.DATA[i][2]+"\",\""+data.DATA[i][1]+"\")'><img src='"+data.DATA[i][2]+"'><br>"+data.DATA[i][1]+"</a></div>");
	            }
			    jQuery('#calendarAddUserRefine').attr('readonly','');
	        }
	    });
	} else {
		container.append("<p>Insert 3 characters to search users</p>");
	}
	container.slideDown();
}

// Called when AJAX call to add_event is successful
function CalendarAddEventSuccess( data ) {
  	jQuery('#calendar-add-btn').attr('disabled','');
	jQuery('#calendar-cancel-btn').attr('disabled','');
	if ( data.ERROR == true ) {
		jQuery("#calendarOk").hide();
		jQuery("#calendarErrors").find("p").remove();
		jQuery("#calendarErrors").append("<div>The request failed: "+data.MESSAGE+"</div>");
		jQuery("#calendarErrors").slideDown();
	} else {
		jQuery("#calendarOk").slideUp();
		// Hides calendar
		Calendar.hide();
		jQuery('#msgbox').val(data.TEXT);
		// Shows share-social dialog
		jQuery('#share-social').overlay({
			mask: {
				color: '#555555',
				loadSpeed: 200,
				opacity: 0.9
			},
			load: true
		});
	}
}

// Called when AJAX call to add_event fails
function CalendarAddEventError(XMLHttpRequest, textStatus, errorThrown) {
  	jQuery('#calendar-add-btn').attr('disabled','');
	jQuery('#calendar-cancel-btn').attr('disabled','');
	jQuery("#calendarOk").slideUp();
	jQuery("#calendarError").hide();
	Calendar.hide();
	alert("The requested call failed:\n" + ajaxCall+"\nerrorThrown: "+errorThrown+"\ntextStatus "+textStatus );
}

// Default text for INPUT, TEXTAREAS, etc.
function defaultText( selector, text ) {
	jQuery(selector).attr('defaultText',text)
		.val( text )
		.unbind('focus').focus(function(){
			if ( jQuery(this).val() == text )
				jQuery(this).val("");
		})
}

// Hides default text
function hideDefaultText( selector ) {
	jQuery(selector).each(function(){
		if ( jQuery(this).attr('defaultText') ) {
			if ( jQuery(this).val() == jQuery(this).attr('defaultText') )
				jQuery(this).val("");
		}
	})
}

jQuery(document).ready(function($){
	$('#event-btn').bind('click',function(){
		CalendarInit();
	});
	
	// Localizazion of calendar
	$.tools.validator.localize("en", {
		'*'			: CalendarLocalization.VALIDATION_ERROR_GENERIC,
		':email'	: CalendarLocalization.VALIDATION_ERROR_EMAIL,
		':numeric'	: CalendarLocalization.VALIDATION_ERROR_NUMERIC,
		':url'		: CalendarLocalization.VALIDATION_ERROR_URL,
		'[max]'	 	: CalendarLocalization.VALIDATION_ERROR_MAX,
		'[min]'	 	: CalendarLocalization.VALIDATION_ERROR_MIN,
		'[required]': CalendarLocalization.VALIDATION_ERROR_REQUIRED,
		'[minlength]': CalendarLocalization.VALIDATION_ERROR_MINLENGTH,
		'[nodefault]': CalendarLocalization.VALIDATION_ERROR_NODEFAULT,
		'[nosamedate]': CalendarLocalization.VALIDATION_ERROR_NOSAMEDATE,
		'[nosametime]': CalendarLocalization.VALIDATION_ERROR_NOSAMETIME,
		'[descrlen]': CalendarLocalization.VALIDATION_ERROR_DESCRLEN
	});
	
	// Effect for calendar: container for all errors
	$.tools.validator.addEffect("wall", function(errors, event) {
		if ( calendarErrorTimeout ) {
			clearTimeout( calendarErrorTimeout );
		}
		var wall = $(this.getConf().container).slideDown();
		wall.find("p").remove();
		$.each(errors, function(index, error) {
			wall.append( "<p><strong>" +error.input.attr("label")+ "</strong>: " +error.messages[0]+ "</p>" );		
		});
		calendarErrorTimeout = setTimeout(function(){wall.slideUp()},8000);
		}, function(inputs) {}
	);
	
	// Calendar dialog error container
	$("#calendarErrors").click(function(){
		if ( calendarErrorTimeout ) {
			clearTimeout( calendarErrorTimeout );
		}
		$("#calendarErrors").slideUp();
	});
	
	// Calendar dialog validator
	$("#calendarForm").validator({
		effect: 'wall',
		container: '#calendarErrors',
		errorInputEvent: null,
		onBeforeValidate: function() {
	   	  $('.calendar-tooltip').hide();
		},
		lang: "en"
	});

	$("#calendarForm").submit(function(e){
		  		
		jQuery("#calendar_edit_message").hide();
		
	   if (!e.isDefaultPrevented()) {
		  
		  // Hides tooltips
	   	  $('.calendar-tooltip').hide();
	   	
	   	  // Remove default text
	   	  hideDefaultText($('#calendarForm input[type=text]'));
	   	  hideDefaultText($('#calendarForm textarea'));
	   	
	   	  // Error container is emptied and wait div is shown
	      $("#calendarErrors").find("p").remove();
		  $("#calendarErrors").slideUp();
	      $("#calendarOk").slideDown();

		  // Submit and cancel buttons are disabled	      
	      $('#calendar-add-btn').attr('disabled','disabled');
	      //$('#calendar-cancel-btn').attr('disabled','disabled');

		  // Builds data for AJAX call, using form fields plus selected people/user	      
	      var data = $('#calendarForm').serialize();
		  
	      // AJAX call by JSONP
	      $.ajax({
			type: 'POST',
			url: Properties.ADD_EVENT_URL,
			data: data,
			dataType: 'jsonp',
			error: CalendarAddEventError,
			success: function(dataJSON){						
				
				if(dataJSON.MESSAGE=='OK'){

					if(typeof MessageBox !='undefined'){
						
						MessageBox.dataJsonText = '';
						
						MessageBox.dataJsonText = dataJSON.TEXT;
						
					}
					
					resetAjaxPhoto();
					
					SearchUser.clearAll();
										
					SearchGrid.lastIdInsert=parseInt(dataJSON.IDEVENT);
					
					jQuery("#calendarForm").hide();
					
					jQuery("#calendarOk").remove();
					
					jQuery("#calendar_upphoto").show();
					
					jQuery("#id_event_to_photo").val(SearchGrid.lastIdInsert);
					
					$('#calendar-add-btn').removeAttr('disabled');
					
					if( $("#calendarForm input[name='twitter_me']:checked").attr("rel") == 'yes' ){
						
						if(jQuery("#msg-click-box").length>0){
						
							jQuery("#msg-click-box").click();
							jQuery("#msgbox").val(MessageBox.dataJsonText);
							MessageBox.setValue(MessageBox.dataJsonText);
													
						}
					} else {
						
						jQuery(".calendar-tab a:first").click();
						
					}						
					
				}
			}
		  });

	      e.preventDefault();

	   } else {
			//
	   }
	   return false;
	});
	
})

jQuery(document).ready(function(){
	jQuery.datepicker.setDefaults( calendarOptions);
});
