//	detect language
	var lang = 	($.cookie('__CM__LANGUAGE')) ? $.cookie('__CM__LANGUAGE') : 'ro';

$(function($){
	$.datepicker.regional['ro'] = {
		closeText: 'Închide',
		prevText: '&laquo; Luna precedentă',
		nextText: 'Luna următoare &raquo;',
		currentText: 'Azi',
		monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie','Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
		monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun','Iul', 'Aug', 'Sep', 'Oct', 'Noi', 'Dec'],
		dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
		dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
		dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
		weekHeader: 'Săpt',
		firstDay: 1,
		isRTL: false,
		showMonthAfterYear: false,
		yearSuffix: ''
	};
		$.datepicker.setDefaults({
			dateFormat: 'yy-mm-dd'
			,altFormat: 'yy-mm-dd'
			,duration: 'fast'
			,changeMonth:true
			,changeYear:true
			
		})
//	localize datepicker
	if(lang === 'ro'){	$.datepicker.setDefaults($.datepicker.regional['ro']);	}
	else {	$.datepicker.setDefaults($.datepicker.regional['']);}

});



function getAge(birthDate) {
  var now = new Date();

  function isLeap(year) {
    return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
  }

  // days since the birthdate
  var days = Math.floor((now.getTime() - birthDate.getTime())/1000/60/60/24);
  var age = 0;
  // iterate the years
  for (var y = birthDate.getFullYear(); y <= now.getFullYear(); y++){
    var daysInYear = isLeap(y) ? 366 : 365;
    if (days >= daysInYear){
      days -= daysInYear;
      age++;
      // increment the age only if there are available enough days for the year.
    }
  }
  return age;
}

var messages = {
  'ajax-loader':{
	  'en':'Please wait while data is being loaded...'
	  ,'ro':'Va rugam asteptati pana se incarca datele...'
  }
}



$(function(){
	//	tooltips
	$('form .element').each(function(i,_elem){
		$(_elem).find('label a.tooltip-link:visible').each(function(j,link){
			$(link)
			.bubbletip($(link).attr('href'))
			.bind({
				'click':function(){
					return false;
				}

			});
		});
	});
	//	end toltips







	//	mailchimp subscription
	if($('#mc_embed_signup').length || $('form#mc-embedded-subscribe-form').length){
		var body= document.getElementsByTagName("body")[0];
		var script= document.createElement("script"); script.type= "text/javascript";
			script.src= "http://downloads.mailchimp.com/js/jquery.form-n-validate.js";
			body.appendChild(script);
		var script1= document.createElement("script"); script1.type= "text/javascript";
			script1.src = "/_res/js/mailchimp.js";
			body.appendChild(script1);

		$('form#mc-embedded-subscribe-form').find('input:text').each(function(){
			var defValue = $(this).val();
			$(this).bind({
				focus:function(){
					if($(this).val() == defValue){
						$(this).val('');
					}
				}
				,blur:function(){
					if($(this).val() == ''){
						$(this).val(defValue);
					}
				}
			})
		})
	}
	//	end mailchimp subscription



//	exchange rates calendar:
if($('#exchangeRatesCalendar').size()){
	var eCal = $('#exchangeRatesCalendar');
	var $firstExRate = eCal.prev('input#exchangeRates_first').val();
	var $lastExRate = eCal.next('input#exchangeRates_last').val();
	var $minExDate = new Date($firstExRate.substr(0,4) , $firstExRate.substr(5,2)-1 , $firstExRate.substr(8,2) ,0,0,0,0);
	var $maxExDate = new Date($lastExRate.substr(0,4) , $lastExRate.substr(5,2)-1 , $lastExRate.substr(8,2) ,0,0,0,0);

	eCal.bind('submit',function(){
		$.ajax({
			url:eCal.attr('action')
			,type:'GET'
			,data:eCal.serialize()
			,beforeSend:function(xhr,settings){
				$('#exchangeRates').find('caption').addClass('loading').html(messages['ajax-loader'][lang]);
			}
			,success:function(response,status,xhr){
				$('#exchangeRates').html($(response).find('#exchangeRates').html());
			}
		});
		return false;
	})

	$('#exchange-rates-calendar').datepicker({
		altField:'#exchangeRates_created_at'
		,minDate:$minExDate
		,maxDate:$maxExDate
		,onSelect:function(){
			eCal.trigger('submit');
		}
		,beforeShowDay: $.datepicker.noWeekends
	});
}
//	end exchange rates calendar

//	banking rates calendar:
if($('#bankRatesCalendar').size()){
	var bCal = $('#bankRatesCalendar');
	var $firstBR = bCal.prev('input#bankRates_first').val();
	var $lastBR = bCal.next('input#bankRates_last').val();
	var $minBRDate = new Date($firstBR.substr(0,4) , $firstBR.substr(5,2)-1 , $firstBR.substr(8,2) ,0,0,0,0);
	var $maxBRDate = new Date($lastBR.substr(0,4) , $lastBR.substr(5,2)-1 , $lastBR.substr(8,2) ,0,0,0,0);

	bCal.bind('submit',function(){
		$.ajax({
			url:bCal.attr('action')
			,type:'GET'
			,data:bCal.serialize()
			,beforeSend:function(xhr,settings){
				$('#bankRates').find('caption').addClass('loading').html(messages['ajax-loader'][lang]);
			}
			,success:function(response,status,xhr){
				$('#bankRates').html($(response).find('#bankRates').html());
			}
		});
		return false;
	})


	$('#bank-rates-calendar').datepicker({
		altField:'#bankRates_created_at'
		,minDate:$minBRDate
		,maxDate:$maxBRDate
		,onSelect:function(){
			bCal.trigger('submit');
		}
		,beforeShowDay: $.datepicker.noWeekends
	});
}
//	end bank rates calendar



//	$('.has-datepicker input:text').datepicker();
//	$('ul.flat li input:radio').button();
	$('.buttonset input:submit,.buttonset input:reset').button();
//	$('.buttonset').buttonset();
//	$('.button').button();


	//	CALCULATOR APP
	if($('#calculatorEditForm').size()){
	var Calculator = $('#calculatorEditForm');

	$('#calculator_income,#calculator_expenses_monthly,#calculator_expenses_monthly_other,#calculator_credit_limit')
	.each(function(){
		var currentValue = $(this).val();
		$(this).bind({
			focus:function(){
				$(this).val('');
			}
			,blur:function(){
				if($(this).val() == ''){
					$(this).val(currentValue);
				}
			}
		})
	})




	var TargetFields = Calculator.find('#calculator_amount_max,#calculator_monthly_installment');
	$('input.check-integer:text').each(function(){
		$(this).inputInteger();//only allow numeric values
	})
	$('#calculator_amount').bind('focus',function(){
		$(this).parents('.element').next('.element').show('slideDown').removeClass('hidden');
	})


	var _errorMessages = {
		'mandatory':{
			'_defaults':{
				'ro':'Campul este obligatoriu'
				,'en':'The field is mandatory'
			}
			,'calculator_income':{
				'ro':'Venitul este obligatoriu'
				,'en':'Income value is mandatory'
			}
		}
		,'maxvalue':{
			'_defaults':{
				'ro':'Ati depasit valoarea maxima admisa'
				,'en':'The value you have provided exceeds the maximum available limit'
			}
			,'calculator_amount':{
				'ro':'Suma maxima pentru produsul selectat este de '+($('#calc_amount_max').val())
				,'en':'The maximum accepted amount is '+($('#calc_amount_max').val())
			}
			,'calculator_length':{
				'ro':'Durata maxima pentru produsul selectat este de '+($('#calc_length_max').val())
				,'en':'The maximum accepted length for the selected product is '+($('#calc_length_max').val())
			}
		}
		,'nonzero':{
			'_defaults':{
				'ro':'Introduceti o valoarea mai mare ca zero'
				,'en':'Please provide a non-zero value'
			}
			,'calculator_familymembers':{
				'ro':'Nu pot fi zero membri in familie'
				,'en':'There cannot be no members in your family'
			}
			,'calculator_income':{
				'ro':'Venitul nu poate fi zero'
				,'en':'Monthly income cannot be zero'
			}

		}
	}

		Calculator.find('input:text').not(':disabled').not('[readonly="readonly"]').bind('change',function(){
			$('#calculator_amount_max,#calculator_monthly_installment').val('');
		});

		Calculator.submit(function(){
			var errors = {
				'mandatory':[]
				,'maxvalue':[]
				,'nonzero':[]
			};
			var _validator = Calculator.find('input[name="calculator[valid]"]');
			Calculator.find('input:text').not(':disabled').each(function(i,item){
				var field = $(item);
				var val = field.val();
				if(field.hasClass('mandatory') && field.val() ==''){
					errors.mandatory.push(field.attr('id'));
				}
				if(field.hasClass('check-maxvalue')){
					var maxVal = field.parents('.element').find('#calc_'+field.attr('id').substr(11)+'_max').val();
					if(parseInt(val) > parseInt(maxVal)) {
						errors.maxvalue.push(field.attr('id'));
					}
				}
				if(field.hasClass('check-nonzero')){
					if(parseInt(val) === 0){
						errors.nonzero.push(field.attr('id'));
					}
				}
			});
	//console.log(errors);
			if(errors.mandatory.length || errors.maxvalue.length || errors.nonzero.length){
				//do errors
				Calculator.find('p.error').remove();
				_validator.val('');
				$.each(errors,function(errType,errorz){
					$.each(errorz,function(i,field){
						var container = $('<p/>').addClass('error');
						switch(errType){
							case 'mandatory':
							case 'maxvalue':
							case 'nonzero':
									if(_errorMessages[errType][field]){
										container.html(_errorMessages[errType][field][lang]);
									}
									else {
										container.html(_errorMessages[errType]['_defaults'][lang]);
									}
								break;
							default:
								break;
						}


						container.appendTo($('#'+field).parents('.element'));
					})
				})
			}
			else {
				_validator.val('ok');// change case
			}
			//console.log(_validator.val());
			if(_validator.val()=='ok'){

				return true;//true here when ok
			}
			else {
				return false;
			}
		})









		//submit form in order to change product configuration
		$(this).find('.radios input:radio, select#calculator_product').each(function(){
			$(this).change(function(){
				TargetFields.val('');
				Calculator.trigger('submit');
			})
		});

		$(this).find('.has-slider').each(function(s,sliderElement) {
			SE=$(sliderElement);//slider element
			SC=SE.find('div.slider-container').first();

	//		SE.bind({
	//			mouseover:function(){$(this).children('.slider-container').toggleClass('hidden');}
	//			,mouseout:function(){$(this).children('.slider-container').toggleClass('hidden');}
	//		});

			SC.find('.slider').each(function(j,slider){
				slider=$(slider);
				var _T = $(slider).parents('.element').find('input.value').first();
				var _Type=_T.attr('id').split('_'); //slider value field

				var properStep;
				switch(_Type[1]){
	//				case 'age':
					case 'amount':
						properStep = ($('#calculator_product').val() <= 2) ? 500 : 1000 ;
						break;
					case 'familymembers':
					case 'length':
						properStep = 1;
						break;
					default:
						break;
				}

				var value;
				var min = parseInt($(this).prev('input.left:text').val());
				var max = parseInt($(this).next('input.right:text').val());
				var fieldvalue = $(slider).parents('.element').find('input.value').first().val();
				slider.slider({
					min:min
					,max:max
					,value:( parseInt( $(this).prev('input:text.left').val() ) != parseInt( _T.val() ) )
							? parseInt(_T.val())
							: parseInt($(this).prevAll('input:text.left').val())

					,step: parseInt(properStep)
					,slide:function(event,ui){
						$(this).parents('.element').next('.element').show('slideDown').removeClass('hidden');
	//					console.log(ui.value);
	//					console.log('min: '+parseInt($(this).prev('input:text.left').val()));
	//					console.log('max: '+parseInt($(this).next('input:text.right').val()));
						var S = $(this);
						var T = S.parents('.element').find('input.value').first();
						var Type = T.attr('id').split('_');
						//console.log(T);

						switch(Type[1]){
							case 'length':
								if(T.attr('rel')){
								var data = $.parseJSON(T.attr('rel'));// interest rates
								$.each(data,function(idx,item){
											T.val(ui.value);
											var fIR = $('#calculator_interest_rate');//field Interest rate
											var fDTI = $('#calculator_dti');
											if(ui.value >= item.min && ui.value <= item.max){
												//if product duration is in new interval, reset interest rate
												fIR.val(item.interest_rate);
												fDTI.val(item.dti);
											}
								});
								}
								TargetFields.val('');
								break;
	//						case 'familymembers':
	//
	//							T.val(ui.value);
	//							break;
							case 'age':
							case 'amount':
								T.val(ui.value);
								TargetFields.val('');
							default:
								break;
						}



					}

				});


			});






		});


	}
	//	END CALCULATOR APP







	// WIZARD APP
	if($('#wizardEditForm').size()){
		var Wizard = $('#wizardEditForm');
		Wizard.find('#wizard_data_nasterii').datepicker({
			maxDate:'-18y'
			,yearRange:'1900:'
		});
		$('#wizard_income').inputInteger();
		var start = Wizard.find('#step-start');
		var info = Wizard.find('#step-info');
		var presentation = Wizard.find('#step-presentation');
		var contact = Wizard.find('#step-contact');
		start.find('button').removeAttr('disabled').first().bind('click',function(){
			start.hide();
			info.show();
			return false;
		});


		info.find('button').first().bind('click',function(){
			var infoErrors = {'invalid':[],'minval':[]};
			info.find('p.error').remove();
			var _errors = {
				"wizard_data_nasterii":{
					"ro":{"invalid":"Nu ati completat data nasterii"}
					,"en":{"invalid":"Please provide the date of birth"}
				}
				,"wizard_income":{
					"ro":{
						"invalid":"Nu ati specificat venitul net"
						,"minval":"Veniul minim acceptat este de 800 RON"
					}
					,"en":{
						"invalid":"You must provide a value"
						,"minval":"You need to have an income of at least 800 RON"
					}
				}
				,"wizard_occupationStatus":{
					"ro":{"invalid":"Nu ati selectat nici o optiune valida"}
					,"en":{"invalid":"You haven't selected a valid option"}
				}
				,"wizard_professionalExperience":{
					"ro":{"invalid":"Nu ati selectat nici o optiune valida"}
					,"en":{"invalid":"You haven't selected a valid option"}
				}
				,"wizard_educationLevel":{
					"ro":{"invalid":"Nu ati selectat nici o optiune valida"}
					,"en":{"invalid":"You haven't selected a valid option"}
				}
				,"wizard_scope":{
					"ro":{"invalid":"Nu ati selectat nici o optiune valida"}
					,"en":{"invalid":"You haven't selected a valid option"}
				}
			}
			info.find('input:text,select').each(function(i,el){
				if($(el).val()==''){
					infoErrors.invalid.push( $(el).attr('id') );
				}
			});
			
			if($('#wizard_income').val() !='' && $('#wizard_income').val() < 800){
				infoErrors.minval.push( 'wizard_income' );
			}
			
			
			if(infoErrors['invalid'].length != 0 || infoErrors['minval'].length != 0){
				$.each(infoErrors,function(errorType,errorFields){
					$(errorFields).each(function(j,elementID){
						$('#'+elementID).parents('.element').addClass('hasErrors').append($('<p/>').addClass('error').html(_errors[elementID][lang][errorType]));

					})
				});
				return false;
			}
			else {
				var dateSeparator = (lang === 'ro') ? '-': '/';


				var dobstr = $('#wizard_data_nasterii').val().split(dateSeparator).join('');
				var parts = parts || {};
				parts.Y = (lang === 'ro') ? dobstr.substring(0,4) : dobstr.substring(4) ;
				parts.M = (lang === 'ro') ? dobstr.substring(4,6)-1 : dobstr.substring(0,2)-1 ;
				parts.D = (lang === 'ro') ? dobstr.substring(6) : dobstr.substring(2,4) ;

				var dateObj = new Date(parts.Y, parts.M, parts.D ,0,0,0,0); // months 0-based!
				var age = getAge(dateObj);




				presentation.find('#age var').html(age);
				Wizard.find('input[name="wizard[age]"]').val(age);
				presentation.find('#income var').html($('#wizard_income').val());



				info.hide();
				presentation.show();


				$('input[name="wizard[currentStep]"]').val('step-presentation');
				//return false;
				if(infoErrors.length){return false;}
				else {Wizard.submit();}
				
			}

			return false;
		});

		$('ul a.close').bind('click',function(){
			$(this).parents('li.product').hide().next('li.product').show();
		})



	}
	//	END WIZARD APP
});


