$(document).ready(function(){
	
	// Terms of use modal box
	if ($('#link_terms_of_use').length) {
		// Take over the click event on the link
		$('a#link_terms_of_use').click(function(e){
			e.preventDefault();
			// Asynchronously load the terms_of_use.html file
			$.ajax({
				type		:	"GET",
				url			:	"terms_of_use.html",
				dataType	:	"html",
				success		:	function(data){
					// the "data" variable now contains all the HTML of terms_of_use.html.
					// Append a closing link at the end of the document
					data = data + '<a href="#" class="simplemodal-close">Κλείσιμο παραθύρου</a>';
					// Load and show the whole thing into a modalbox:
					$.modal(data,{
						minWidth		:	640,
						minHeight		:	420,
						maxWidth		:	640,
						maxHeight		:	420,
						overlayClose	:	true,
						dataCss			:	{ padding:'20px' },
						// Optional: Just some flashy slides + fades when opening						
						onOpen			:	
							function (dialog) {
								dialog.overlay.fadeIn('normal', function () {
									dialog.data.hide();
									dialog.container.slideDown('normal', function () {
										dialog.data.show();
									});
								});
							},
						// Optional:Just some flashy slides + fades when closing
						onClose			:
							function (dialog) {
								dialog.data.hide();
								dialog.container.slideUp('normal',function(){
									dialog.overlay.fadeOut('normal',function(){
										$.modal.close();
									});										 
								});
							}
					});
				}
			});
		});
	}
	
	// Video instruction modal box : My Ads page
	if ($('#video_instruction').length) {
		// Take over the click event on the link
		$('#video_instruction a').click(function(e){
			e.preventDefault();
			videoTutorialModal('video/my_ads/TutorialNew.html');
		});
	}
	
	// Video instruction modal box: New ad page
	if ($('#video_instruction_new_ad').length) {
		$('#video_instruction_new_ad a').click(function(e){
			e.preventDefault();
			videoTutorialModal('video/new_ad/new_ad.html');
		});	
	}
	
	// Video instruction modal box: Index / registration
	if ($('#video_instruction_register').length) {
		$('#video_instruction_register a').click(function(e){
			e.preventDefault();
			videoTutorialModal('video/Tutorial-Eggrafi/Tutorial-Eggrafi.html');
		});	
	}
	
	// Video links on the help section
	if ($('#video_links').length) {
		$('#video_1').click(function(e){
			e.preventDefault();
			videoTutorialModal('video/Tutorial-Eggrafi/Tutorial-Eggrafi.html');
		});
		$('#video_2').click(function(e){
			e.preventDefault();
			videoTutorialModal('video/new_ad/new_ad.html');
		});
		$('#video_3').click(function(e){
			e.preventDefault();
			videoTutorialModal('video/my_ads/TutorialNew.html');
		});
	}
	
	// Form functionality: Clear form error from forms that get focus
	$('.form_field').focus(function(){
		$(this).removeClass('form_error')
		//$(this).prev('div.form_error').remove();
	});
	
	// Form tooltip functionality : ONFOCUS
	$('.form_field[tooltip]').focus(function(){
		// If we don't have a tooltip, create one
		if ($('#tooltip_new').length == 0) {
			$('<div id="tooltip_new"><div id="tooltip_new_top"></div><div id="tooltip_new_bottom"><!----></div></div>').appendTo('body');
		}		
		// Set the contents of the tooltip and show if hidden
		$('#tooltip_new_top').html($(this).attr('tooltip').toString().replace(/#/g,"<br/>")).parent().show();
		// Set the position of the tooltip
		var field_pos = $(this).offset();
		var ttop = field_pos.top - 12;
		var tleft = (field_pos.left - 1) + $(this).outerWidth();
		$('#tooltip_new').css({
			left:tleft,
			top:ttop
		});
	});
	
	// Form tooltip functionality : ONBLUR
	$('.form_field[tooltip]').blur(function(){
		$('#tooltip_new').hide();
	});
	
	// Form tooltip functionality: Reposition on window resize
	$(window).bind("resize",function(){
		$('#tooltip_new').hide();	
	});
	
	// Event hijack: Form submit() on forms that need validation
	$('form[validate=true]').bind('submit',function(e){
		//e.preventDefault();
		return validateForm(this);												
	});
	
	// Event hijack: buttonlinks with the .form_submit class should submit the form :)
	$('.form_submit').click(function(e){
		e.preventDefault();
		$(this).parents('form').trigger('submit');						 
	});
	
	// Custom functionality for the manage0 form
	if ($('#manage0form').length) {
	
		// On field blur, capitalise all input[type=text] fields
		$('#manage0form input[type=text]').blur(function(){
			// Uppercase everything except the email
			if ($(this).attr('id') != "email") {
				var c = capitalize($(this).val());
				$(this).val(c);
			}
		});
		
	}
	
	// Custom functionality for the manage0 form: add a telephone number
	if ($('a.telephone_add_action').length) {
		$('a.telephone_add_action').click(function(){
			if ($('div.telephone').length < 3) {
				// Create a new telephone row
				var html = '';
				html += '<div class="telephone mb10" style="display:none;">';
				html += '<a class="telephone_remove_action" href="#" onclick="return removePhone(this);">Διαγραφή</a>';
				html += '<div class="form_label">Έξτρα τηλέφωνο: <span class="obligatory">*</span></div>';
				html += '<input type="text" class="form_field" name="telephones[]" validate="telephone" />';
				html += '</div>'
				$(html).insertAfter('div.telephone:last').slideDown('fast');
			} else {
				$.modal("Μπορείτε να προσθέσετε μόνο μεχρι 3 τηλεφωνικούς αριθμούς στο σύστημα<br/><br/><a href='#' class='simplemodal-close'>Κλείσιμο</a>",{containerId:"simplemodal-dialog",minHeight:140});
				//alert ("Μπορείτε να προσθέσετε μόνο μεχρι 3 τηλεφωνικούς αριθμούς στο σύστημα");
			}
			return false;
		});		
	}
	
	if ($('#modal_trigger_no_sms_received').length) {
		$('#modal_trigger_no_sms_received').click(function(){
			var html = '<p>Σε περίπτωση που δεν λαμβάνετε sms με τον κωδικό πιστοποίησης, καλέστε από το κινητό σας τηλέφωνο στο τηλεφωνικό κέντρο 210/9091333 για να σας γνωστοποιήσουμε τον κωδικό πιστοποίησης.</p>';
			html += '<p>Ωράριο λειτουργίας τηλεφωνικού κέντρου:</br>';
			html += 'Δευ-Παρ: 7:00-24:00, Σάβ: 7:00-21:00, Κυρ: 9:00-24:00</p>';
			html += '<a href="#" class="simplemodal-close">Κλείσιμο</a>';
			$.modal(html,{containerId:"simplemodal-dialog",minHeight:290});												   
		});
	}
	
	
	
	// Οταν ο χρήστης κάνει κλίκ στο link "κατάσταση λογαριασμού", είτε waiting είτε active
	$('a.status_waiting').click(function(){
			accountStatusModal('waiting');
	});
	$('a.status_active').click(function(){
			accountStatusModal('active');
	});
	
	// Οταν δείχνουμε ενα error message η success message, πρόσθέτουμε το "απόκρυψη ειδοποίησης" link αυτόματα
	if ($('div.message_success,div.message_error').length){
		$('<a href="#" class="message_hide">απόκρυψη μηνύματος</a>').bind('click',function(){
			$(this).parent('div').slideUp();																				   
		}).prependTo('div.message_success,div.message_error');
	}
	
});

// Βοηθητική μέθοδος: Τα δυό modal dialog boxes που εμφανίζονται γαι την κατάσταση λογαριασμού
function accountStatusModal(status) {
	// Κείμενο για οταν αναμένεται επιβεβαίωση λογαριασμού
	var status_text = [];
	status_text['waiting']  = '<h1>Αναμένεται επιβεβαίωση στοιχείων εταιρείας</h1>';
	status_text['waiting'] += '<p>Για την διατήρηση του υψηλού επιπέδου ασφάλειας των αγγελιών σας, πρέπει να επιβεβαιώσουμε τα στοιχεία που καταχωρίσατε για την εταιρεία σας.</p>';
	status_text['waiting'] += '<p><strong>Η διαδικασία αυτή αναμένεται να διαρκέσει περίπου 1 εργάσιμη ημέρα και δεν χρειάζεται καμία ενέργεια απο μέρους σας.</strong></p>';
	status_text['waiting'] += '<p>Μέχρι να ολοκληρωθεί η διαδικασία αυτή, μπορείτε να χρησιμοποιήσετε το σύστημα και να καταχωρίσετε αγγελίες οι οποίες όμως θα μπορούν να δημοσιευθούν μόνο μετά την επιβεβαίωση των στοιχείων σας.</p>';
	status_text['waiting'] += '<p>Ζητούμε συγγνώμη για την καθυστέρηση</p>';
	status_text['waiting'] += '<p><a href="#" class="simplemodal-close">Κλείσιμο</a></p>';
	// Κείμενο για οταν ο λογαριασμός έχει επιβεβαιωθεί κανονικά
	status_text['active']  = '<h1>Ενεργός λογαριασμός</h1>';
	status_text['active'] += '<p><strong>Τα στοιχεία που καταχωρίσατε για την εταιρεία σας εχουν επιβεβαιωθεί.</strong></p>';
	status_text['active'] += '<p>Μπορείτε να χρησιμοποιήσετε όλες τις δυνατότητες του συστήματος.</p>';
	status_text['active'] += '<p><a href="#" class="simplemodal-close">Κλείσιμο</a></p>';
	$.modal(status_text[status],{
		minWidth		:	530,
		minHeight		:	328,
		maxWidth		:	530,
		maxHeight		:	328,
		overlayClose	:	true,
		dataId			:	"status_" + status + "_canvas"
	});	
}

// Βοηθητική μέθοδος: Ανοίγει το modal box για τα εκπαιδευτικά videos
function videoTutorialModal(url) {
	// Load the video tutorial url on an IFRAME
	$.modal('<iframe src="' + url + '" height="498" width="640" frameborder="0" scrolling="no" style="border:0;">', {
		closeHTML:"",
		containerCss:{
			backgroundColor:"#000",
			height:498,
			padding:0,
			width:640
		},
		overlayClose:true,
		onOpen			:	
			function (dialog) {
				dialog.overlay.fadeIn('normal', function () {
					dialog.data.hide();
					dialog.container.slideDown('normal', function () {
						dialog.data.show();
					});
				});
			},
		onClose			:
			function (dialog) {
				dialog.data.hide();
				dialog.container.slideUp('normal',function(){
					dialog.overlay.fadeOut('normal',function(){
						$.modal.close();
					});										 
				});
			}
	});
}

// Βοηθητική μέθοδος: Αφαιρεί το <div class="telephone"> απο την σελίδα manage0 καί manage
function removePhone(obj) {
	$(obj).parent('div.telephone').slideUp('fast',function(){$(this).remove()});
	return false;
}

// Capitalises all greek & english characters, strips greek accents
function capitalize(string) {
	// Trim the string from spaces and lowercase for the regexp to work
	var s = $.trim(string);
	// If empty, return empty
	if (!s) { return ""; }	
	// Vowel replacement
	s = s.replace(new RegExp(/ά/g),"α");
	s = s.replace(new RegExp(/[ίϊΐ]/g),"ι");
	s = s.replace(new RegExp(/ή/g),"η");
	s = s.replace(new RegExp(/έ/g),"ε");
	s = s.replace(new RegExp(/ό/g),"ο");
	s = s.replace(new RegExp(/[ύϋΰ]/g),"υ");
	s = s.replace(new RegExp(/ώ/g),"ω");
	s = s.replace(new RegExp(/ς/g),"σ"); // In order for the default toUpperCase to work
	return s.toUpperCase();
}

// Γενική μέθος για validation των διαφόρων φορμών
function validateForm(form) {
	// Clear all validation errors
	$('span.obligatory').html('*');
	// Remove the "form_error" class from all elements that have it
	$('.form_error').removeClass('form_error');
	// Hide the tooltip (incase it's hovering above a form element
	$('#tooltip_new').hide();
	// Initially we assume that validation is successful
	var result = true;
	// Iterate through all form elements INSIDE that have the "validate" attribute
	// and perform the necessary validation for each.
	$('*[validate]',form).each(function(){
	    var validation_type = $(this).attr('validate');
		var value = $.trim($(this).val());
		var email_regexp = /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i;
		switch(validation_type) {
	        case "afm":
				var test = validateAFM(value);
				switch(test) {
					case -1:
						$(this).addClass('form_error');
						$(this).prev().find('span').html('*<br/>Εισάγετε έναν έγκυρο ΑΦΜ (9 αριθμητικά ψηφία μόνο)');
						result = false;
						break;
					case -2:
						$(this).addClass('form_error');
						$(this).prev().find('span').html('*<br/>Ο ΑΦΜ που εισάγατε ΔΕΝ ειναι έγκυρος. Παρακαλώ ξαναπροσπαθήστε.');
						result = false;
						break;
				}
	            break;
	        case "nonempty":
            	if (!value) {
					$(this).addClass('form_error');	
					result = false;
				}
        	    break;
			case "digits_5":
				if (!/^\d{5}$/.test(value)) {
					$(this).addClass('form_error');
					$(this).prev().find('span').html('*<br/>Εισάγετε εναν έγκυρο ΤΚ (5 αριθμητικά ψηφία μόνο)');
					result = false;
				}
				break;
			case "email":
				if (!email_regexp.test(value)) {
					$(this).addClass('form_error');
					$(this).prev().find('span').html('*<br/>Εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου (email)');
					result = false;
				}
				break;
			case "telephone":
				// remove all non-number characters from the string
				value = value.replace(/[^0-9]/g,'');
				$(this).val(value);
				if (!/^\d{10}$/.test(value)) {
					$(this).addClass('form_error');
					$(this).prev().find('span').html('*<br/>Μονο αριθμοί, μόνο 10 ψηφία');
					result = false;
				}
				break;
			case "password":
				// Get a pointer to the form label of this field
				var $label = $(this).prev();				
				// Usually the "confirm password" field comes after the "enter password" field. Compare the two
				var password_1 = $(this).val();
				var password_2 = $(this).nextAll('input[type=password]').val();
				if (password_1 != password_2) {
					$(this).addClass('form_error');
					// Store the existing text
					$label.data('existing_html',$.trim($label.html()));
					$label.html('<div class="obligatory">Οι κωδικοί πρέπει να είναι όμοιοι. Παρακαλώ ξαναπροσπαθήστε.</div>');
					result = false;
				} else {
					if ($label.data('existing_html')) {
						$label.html($label.data('existing_html'));	
					}
				}
				break;
    	}
	});
	document.body.focus();
	return result;
}


// Αλγόριθμος που τσεκάρει το validity αριθμού φορολογικού μητρώου
function validateAFM(afm) {
	if (!afm.match(/^\d{9}$/) || afm == '000000000') {
		return -1;
	}
	var m = 1, sum = 0;
	for (var i = 7; i >= 0; i--) {
		m *= 2;
		sum += afm.charAt(i) * m;
	}
	if (sum % 11 % 10 == afm.charAt(8)) {
		return 1;	
	} else {
		return -2;
	}
}


