$(document).ready(function() {		
    
	// ****** CODE BELOW IS FOR THE SHORTCODE HISTORY PAGE (AGGREGATOR/REGULATORS) ****** //		
    
	$("#flop_top").hide();
	$("div.rest").hide();

	$("div.expander a").click(function(){ 
	   var details = $(this).parent().siblings();
	   
	   //hide the expander link
	   $(this).parent().hide();

	   //fade in the record details 
	   details.show();
	   
	   // ensure the record details view is visible
	   var baseURL = window.location.href.split('#')[0];
	   window.location.href = baseURL + '#' + details.get(0).id;

	});
	
	//close record button - regulator
	$("a.closerecord").click(function() {
		 $(this).parent().parent().hide();
		 $(this).parent().parent().siblings().show();
	});      
	
	//close record button - aggregator
	$("a.closerecord-agg").click(function() {
		 $(this).parent().parent().parent().hide();
		 $(this).parent().parent().parent().siblings().show();
	});  

	//back to top button
	$("a.backtotop").click(function() {
		 var baseURL = window.location.href.split('#')[0];
		 window.location.href = baseURL + '#wrapper-outer';
	});

	// ****** HISTORY PAGE CODE ENDS HERE ****** //
	
	
	
	// ****** CODE BELOW IS FOR THE ADD SHORTCODE PAGE (AGGREGATOR) ****** //
	
	$('#js_calendar_startdate').datepicker({
		altField: '#servicestartdate',
		altFormat: 'dd/mm/yy',
		onSelect: function() {
			$('#js_calendar_startdate').css('display','none');
		}
	});

    $('#js_calendar_startdate').css('display','none');

	$('#js_calendar_startdate_button').click( function() {
		if ( $('#js_calendar_startdate').css('display') == 'none' ) {
			$('#js_calendar_startdate').css('display','block');
		} else {
			$('#js_calendar_startdate').css('display','none');
		}
	});

    $('#js_calendar_enddate').datepicker({
		altField: '#serviceenddate',
		altFormat: 'dd/mm/yy',
		onSelect: function() {
			$('#js_calendar_enddate').css('display','none');
		}
	});

	$('#js_calendar_enddate').css('display','none');

	$('#js_calendar_enddate_button').click( function() {
		if ( $('#js_calendar_enddate').css('display') == 'none' ) {
			$('#js_calendar_enddate').css('display','block');
		} else {
			$('#js_calendar_enddate').css('display','none');
		}
	}); 
	
	// Phone number Validation
	jQuery.validator.addMethod("phone", function(phone_number, element) {
		phone_number = phone_number.replace(/\s+/g, "");
		
 		return phone_number.length >= 8 && !isNaN(phone_number);
		
	}, "Please enter a valid phone number");

        jQuery.validator.addMethod("checkenddate", function(selected_date, element) {                
                //retrieve raw value from form
                var p_startdate = $('#servicestartdate').get(0).value.split("/");                
                var p_enddate = selected_date.split("/");
                
                //need to convert to proper date object for true comparison
                if(p_startdate.length > 1 && p_enddate.length > 1) {
                    var dat_start_date = new Date(parseInt(p_startdate[2]),parseInt(p_startdate[1])-1, parseInt(p_startdate[0]));
                    var dat_end_date = new Date(parseInt(p_enddate [2]),parseInt(p_enddate [1])-1, parseInt(p_enddate [0]));
                    return (dat_start_date < dat_end_date);
                } else {
                    return false;
                }
                                                                   
	}, "Start date needs to be before the end date");  
	
	// setting default settings for the form validator
	jQuery.validator.setDefaults({
		//Use this element type to create error messages and to look for existing error messages.
		errorElement:"span",
		
		//Wrap error labels with the specified element. 
		wrapper:"li",
		
		//Hide and show this container when validating.
		errorLabelContainer:"#form-messages ul",
		
		focusInvalid:false,
		onfocusout:false,
		
		//How to highlight invalid fields.
		highlight:function(element,errorClass){
			//retrieves div container of the current element being validated
			var errorContainer = $(element).parents("p").eq(0);
			
			if(!errorContainer.size()) {
				errorContainer = $(element).parents("div").eq(0);
			}
			
			//retrieves div container and the image icon (used to determine if the element is valid or not)			
			var div_plus_img=$("img.icon",errorContainer);
			
			//check if image icon is present or not
			//ie. more than one element is returned
			if(div_plus_img.size()){
				//replace the existing icon with the error icon
				div_plus_img.replaceWith('<img src="'+$.formVariables.errorIcon+'" alt="error" class="icon" />');
			} else{
				//icon is not present so append the error icon
				errorContainer.append('<img src="'+$.formVariables.errorIcon+'" alt="error" class="icon" />');
			}
			
			//add styling to element as well to indicate that it's in error
			$(errorContainer).addClass(errorClass);			
		},
		
		//Called to revert changes made by option highlight, same arguments as highlight.
		unhighlight:function(element,invalidClass){
			//retrieves div container of the current element being validated
			var errorContainer = $(element).parents("p").eq(0);
			
			if(!errorContainer.size()) {
				errorContainer = $(element).parents("div").eq(0);
			}
			
			//check if the current element is valid element (ie. doesn't have a css class of error)
			//replace the image icon with the valid icon
			if($(":input.error",errorContainer).size()<=1){
				$("img.icon",errorContainer).replaceWith('<img src="'+$.formVariables.validIcon+'" alt="Valid" class="icon" />')
			}
			
			//remove the invalid css class
			$(errorContainer).removeClass(invalidClass);
			
			
		},
		
		//A custom message display handler
		showErrors:function(errorMap,errorList){
		
			//return the number of invalid fields		
			var numErrors=this.numberOfInvalids();
			
			//display default errors
			this.defaultShowErrors();
			
			// Populate/update error message
			$('h3, p', errorContainer).remove();
			errorContainer.prepend('<h3></h3>');
			
			//Check how many errors was found
			if (numErrors) {
				$('h3', errorContainer).html('<strong>Sorry!</strong> Your form contains ' + numErrors + " error" + ((numErrors == 1) ? '' : 's') + ':');
				$(this.currentForm).removeClass('valid');
			}
			// Success is ours!
			else {
				$('h2', errorContainer)
					.text('All errors have been corrected')
					.after('<p>Please proceed to the next step</p>');
				$(this.currentForm).addClass('valid');
			}
			
			//no more errors remove the message dialog completely
			if(numErrors < 1) {
				errorContainer.removeClass("error-message");
			}
			
		}

	});
		
	// Add a placeholder for form messages
	var errorContainer = $('#form-messages');
	if (!$.trim(errorContainer.text()).length) {
		errorContainer.hide();
	}

	errorContainer.append('<ul></ul>');
	
	// Bind event to invalid form submission
	$("form#createnew").bind("invalid-form.validate",function(e,validator){
		errorContainer.show();
		$("html,body").animate({scrollTop:errorContainer.offset().top-20},100);
		errorContainer.focus();
	});

	
	/*
	* Initiate Validation Plugin
	*/
	$("form#createnew").validate({
		rules: {
			/* -- Section -- */
			
			/* Number details */
			
			// Shortcode
			'username' : {
				required : true,
				digits : true
			},			

			'helplinephone' : {
				required : true,				
				phone : true
			},											
			
			'helplineemail' : {
				required : true,				
				email : true
			},
			
			'servicestartdate' : {
				required : true,
				date: true		
			},
			
			'serviceenddate' : {
				required : true,
				date: true,
                                checkenddate: true	
			},
			
			/* Pricing details */
			'contentfeereceived' : {
				required : true,
				number : true		
			},
			
			'contentfeesend' : {
				required : true,
				number : true
			},
						
			/* Aggregator details */
			'aggregatorphonenumber' : {
				required : true,
				phone: true	
			}
		},
		
		messages: {
			/* Number details */
			'username' : {
				required : 'Shortcode needs to be filled in',
				digits : 'Shortcode needs to be a number'
			},
			
			'providername' : {
				required : 'Provider name needs to be filled in'				
			},
			
			'helplinephone' : {
				required : 'Helpline phone needs to be filled in',
				phone : 'Helpline phone needs to be a valid phone'
			},
			
			'helplineemail' : {
				required : 'Helpline email needs to be filled in',
				email : 'Helpline  email needs to a valid email address'
			},
			
			/* Service details */
			'servicename' : {
				required : 'Service name needs to be filled in'			
			},

			'servicetype' : {
				required : 'Service type needs to be filled in'								
			},
			
			'servicestartdate' : {
				required : 'Service start date needs to be filled in',
				date : 'Service start date needs to be a valid date'
			},
			
			'serviceenddate' : {
				required : 'Service end date needs to be filled in',
				date : 'Service end date needs to be a valid date'				
			},
			
			'campaigndescription' : {
				required : 'Campaign description needs to be filled in'				
			},
			
			'contentfeereceived' : {
				required : 'Cost to receive from needs to be filled in',
				number : 'Cost to receive needs to be a number'		
			},
			
			'contentfeesend' : {
				required : 'Cost to send to needs to be filled in',
				number : 'Cost to send needs to be a number'		
			},
			
			'aggregatorname' : {
				required : 'Aggregator name needs to be filled in'								
			},
			
			'aggregatorphonenumber' : {
				required : 'Aggregator phone number needs to be filled in',
				phone: 'Aggregator phone number needs to be a valid phone'		
			}
			
		}
	});
});

