//--- Init common events
/**
	- pop-up close button
	- checkboxes

*/
$(document).ready(function(){
	$('.pop_up_close_btn').click(function(){
		$(this).parent().parent().addClass('hidden');
		$('.coverage').css('display','none');
		$('body').removeClass('coverage_background');
	});
	
	$('input:checkbox').live('change',function(){
		if($(this).attr('checked') == true){
			$(this).parent().addClass('checkbox_checked');
		} else {
			$(this).parent().removeClass('checkbox_checked');
		}
	});
	
	//--- upload document mask handler
	// hidden_file_input - class
	// file_name_input - class
	$('.hidden_file_input').change(function(){
		var data = $(this).val();
		
		if(data.match("fakepath")){
			data = data.split('fakepath\\');
			data = data[1];
		}
		
		$(this).siblings('.file_name_input').val(data);
	});
	
	//assign tooltips to delete|edit buttons
	new_general_tooltip(".btn_remove","btn_remove_tooltip","tooltip_single_line","Remove");
	new_general_tooltip(".btn_edit","btn_edit_tooltip","tooltip_single_line","Edit");
	new_general_tooltip(".edit_tls_en","edit_tls_en","tooltip_single_line","Enable");
	new_general_tooltip(".edit_tls_dis","edit_tls_dis","tooltip_single_line","Disable");
});


//========================================================================================================================================
/*jQuery extensions
//======================================================================================================================================*/
// -- $(selector).center() : centers the selected element relative to the window 
(function($){
     $.fn.extend({
          center: function (options) {
               var options =  $.extend({ // Default values
                    inside:window, // element, center into window
                    transition: 0, // millisecond, transition time
                    minX:-($(this).width()-$(this).parent().width())/2, // pixel, minimum left element value
                    minY:0, // pixel, minimum top element value
                    vertical:true, // booleen, center vertical
                    withScrolling:true, // booleen, take care of element inside scrollTop when minX < 0 and window is small or when window is big
                    horizontal:true // booleen, center horizontal
               }, options);
               return this.each(function() {
                    var props = {position:'absolute'};
                    if (options.vertical) {
                         var top = ($(options.inside).height() - $(this).outerHeight()) / 2;
                         if (options.withScrolling) top += $(options.inside).scrollTop() || 0;
                         top = (top > options.minY ? top : options.minY);
                         $.extend(props, {top: top+'px'});
                    }
                    if (options.horizontal) {
                          var left = ($(this).parent().width() - $(this).outerWidth()) / 2;
                          if (options.withScrolling) left += $(options.inside).scrollLeft() || 0;
                          left = (left > options.minX ? left : options.minX);
                          $.extend(props, {left: left+'px'});
                    }
                    if (options.transition > 0) $(this).animate(props, options.transition);
                    else $(this).css(props);
                    return $(this);
               });
          }
     });
})(jQuery);
/*-----------------*/

/*Show|Hide function
---------------------------------------------------------------*/
//|-|  selector    - the element to be shown|hidden
//|-|  center    - true/false [optional] {usually used for pop_ups}
//|-|  delay    - int [optional] {usually used for pop_ups}
//-------------------------------------------------------------

//---- Show|Hide function------------------------------------------------
//center - true/false
function checkIfPopUpIsOpen()
{
	var __counter = 0
	$('.pop_up_box').each(function(){
		if(!$(this).hasClass('hidden')){
			__counter++;
		}
	});
	//alert(__counter);
	//return(__counter);
	if (__counter == 0)
	{
		$('.coverage').css('display','none');
		$('body').removeClass('coverage_background');
	}
}
function checkIfDelayPopUpIsOpen()
{
	var __counter2 = 0
	$('.pop_up_box').each(function(){
		if(!$(this).hasClass('hidden')){
			__counter2++;
		}
	});
	//alert(__counter2);
	//return(__counter);
	if (__counter2 == 1)
	{
		$('.coverage').css('display','none');
		$('body').removeClass('coverage_background');
			
	}
}

function show(selector,center,delay)
{	
	if($(selector).size()) 
		$(selector).each(function(){
			if(delay){
				if(center) setTimeout("$(\""+selector+"\").center().removeClass(\"hidden\")",delay);
				else setTimeout("$(\""+selector+"\").removeClass(\"hidden\")",delay);
			} else {
				if(center) $(this).center().removeClass("hidden");
				else $(this).removeClass("hidden");
			}
			$('.coverage').css('display','block');
			$('body').addClass('coverage_background');	
			$(this).center().removeClass("hidden");
		});
}


function hide(selector,delay)
{
			
	if($(selector).size())
	{
		$(selector).each(function(){
			$(this).addClass("hidden");
		});
		checkIfPopUpIsOpen();
	}
}
//----

/*getFieldTip -- validates form fields
----------------------------------------------*/
//|-|  inputType    - the input to be validated
//-------------------------------------------------------------
//|-|  this works for the following input types: 'input:select','input:text','textarea'
//|-|@ returns 1-for tip, 0-otherwise

function getFieldTip(inputSelector)
{
		switch($(inputSelector)[0].tagName)
		{
			case 'INPUT'	:	if(!$(inputSelector).val().length){
									$(inputSelector).addClass("input_tip");
									return 1;
								}
								else{
									$(inputSelector).removeClass("input_tip");
									return 0;
								}
								break;
			case 'SELECT'	:	var errors=['','Select','Day','Month','Year',null];
								if($.inArray($(inputSelector).val(),errors)>-1){
								$(inputSelector).addClass("input_tip");
									return 1;
								}
								else{
									$(inputSelector).removeClass("input_tip");
									return 0;
								}
								break;
			case 'TEXTAREA' :	if(!$(inputSelector).val().length){
									$(inputSelector).addClass("input_tip");
									return 1;
								}
								else{
									$(inputSelector).removeClass("input_tip");
									return 0;
								}
								break;
			default 		:	return 0;
		}	
}


/*getValidation -- validates form fields
----------------------------------------------*/
//|-|  inputType    - the input to be validated
//-------------------------------------------------------------
//|-|  this works for the following input types: 'input:select','input:text','textarea'
//|-|@ returns 1-for error, 0-otherwise

function getFieldError(inputSelector)
{
		switch($(inputSelector)[0].tagName)
		{
			case 'INPUT'	:	if(!$(inputSelector).val().length){
									$(inputSelector).addClass("input_error");
									return 1;
								}
								else{
									$(inputSelector).removeClass("input_error");
									return 0;
								}
								break;
			case 'SELECT'	:	var errors=['','Select','Day','Month','Year',null];
								if($.inArray($(inputSelector).val(),errors)>-1){
								$(inputSelector).addClass("input_error");
									return 1;
								}
								else{
									$(inputSelector).removeClass("input_error");
									return 0;
								}
								break;
			case 'TEXTAREA' :	if(!$(inputSelector).val().length){
									$(inputSelector).addClass("input_error");
									return 1;
								}
								else{
									$(inputSelector).removeClass("input_error");
									return 0;
								}
								break;
			default 		:	return 0;
		}	
}

//========================================================================================================

/*ValidEmail function -- verifies if email fits an actual email pattern
---------------------------------------------------------------*/
//|-|  inputType    - the input to be validated
//|-|  errorElement - the element which will contain the error class [optional]
//-------------------------------------------------------------
//|-|@ returns 0-for error, 1-otherwise

function getEmailValidation(inputSelector)
{
	var rule = new RegExp("^[A-Za-z0-9\.\_\-]{1,100}\@[A-Za-z0-9\.\_\-]{1,100}[\.\s]{1}([A-Za-z]{2,6})$");
	if(!($(inputSelector).val().match(rule))){
		$(inputSelector).addClass("input_error");
		return 0;
	}
	else{
		$(inputSelector).removeClass("input_error");
		return 1;
	}
}
function getMultipleEmailValidation(inputSelector)
{
	var rule = new RegExp("^(([A-Za-z0-9\.\_\-]{1,100}\@[A-Za-z0-9\.\_\-]{1,100}[\.]{1}([A-Za-z]{2,6})(|(([\,]{1})(|([\ ]{1}))))){1,20})$");
	if(!($(inputSelector).val().match(rule))){
		$(inputSelector).addClass("input_error");
		return 0;
	}
	else{
		$(inputSelector).removeClass("input_error");
		return 1;
	}
}

/*ValidURL function -- verifies if url fits an actual url pattern
---------------------------------------------------------------*/
//|-|  inputType    - the input to be validated
//|-|  errorElement - the element which will contain the error class [optional]
//-------------------------------------------------------------
//|-|@ returns 0-for error, 1-otherwise

function getUrlValidation(inputSelector)
{
	//var rule = new RegExp("^(http|https)://[A-Za-z](.*)");
	var rule = new RegExp("^((http|https)://|www|)[A-Za-z0-9\.\_\-]{2,100}[\.][A-Za-z0-9\.\_\-]{2,4}(|(\/){1}(|(.*)))$");
	if(!($(inputSelector).val().match(rule))){
		$(inputSelector).addClass("input_error");
		return 0;
	}
	else{
		$(inputSelector).removeClass("input_error");
		return 1;
	}
}

//========================================================================================================

/*nl2br function -- verifies if email fits an actual email pattern
---------------------------------------------------------------*/
//#Source : http://phpjs.org/functions/nl2br:480
//|-|  str    - string to be converted
//|-|  is_xhtml - type of conversion [optional]
//-------------------------------------------------------------
//|-|@ returns 0-for error, 1-otherwise
function nl2br (str, is_xhtml) {   
	var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';    
	return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2');
}


/*SmartDate function -- verifies if email fits an actual email pattern
---------------------------------------------------------------*/
//|-|  params - should be in order: day, month, year!
//-------------------------------------------------------------
//|-| asigns change listeners for select fields to check if the date formed is correct.
//|-| default values in the select fields are generated by a smarty tool.
SmartDate=function(day,month,year)
{
	$(day).change(function(){checkDate(day,month,year)});
	$(month).change(function(){checkDate(day,month,year)});
	$(year).change(function(){checkDate(day,month,year)});
}

checkDate = function (day,month,year)
{
	
	var d = $(day).val();
	var m = $(month).val();
	var y = $(year).val();
	var is_leap_year =false;

	// check if y is leap year
	if(!(y%400)) is_leap_year = true;
	else if (!(y% 100)) is_leap_year = false;
	else if (!(y%4)) is_leap_year = true;
	
	// reset malformed date
	if((m=="04"||m=="06"||m=="09"||m=="11")&&d=="31") 
	{
		$(day).val("");
		$(day).addClass("input_error");
	}
	else if(is_leap_year && m == "02" && d > 29) 
	{
		$(day).val("");
		$(day).addClass("input_error");
		
	}
	else if(!is_leap_year && m == "02" && d>28)
	{
		$(day).val("");
		$(day).addClass("input_error");
	} 
	else
	{
		$(day).removeClass("input_error");		
	}
}

function new_tooltip(target_items, name, over){
		//alert("");
		$(target_items).each(function(i){
			if($(this).attr("title") != "")	
			{
				$("body").append("<div class='"+name+"' id='"+name+i+"'>"+$(this).attr('title')+"</div>");
				var my_tooltip = $("#"+name+i);
				$(this).removeAttr("title").mousedown(function(){
					my_tooltip.css({opacity:2, display:"none"}).fadeIn(400);
				}).mousemove(function(kmouse){
					my_tooltip.css({left:kmouse.pageX+15, top:kmouse.pageY+15});
				}).mouseout(function(){
					my_tooltip.fadeOut(200);
				}).mouseenter(function(){
					if(over) my_tooltip.css({opacity:2, display:"none"}).fadeIn(200);
				});
			}
		});
	}
	
// target_items:a list of items, name: the id of the new element
function new_general_tooltip(target_items, name, class_name, message){
		if($(target_items).length)
		{
			if(!$(name).length) $("body").append("<span class='"+class_name+"' id='"+name+"'>"+message+"</span>");
			//alert($(target_items).length+":"+message);
			var my_tooltip = $("#"+name);
			$(target_items).each(function(i){
				$(this).mouseover(function(){
					my_tooltip.css({opacity:2, display:"none"}).fadeIn(150);
				}).mousemove(function(kmouse){
					my_tooltip.css({left:kmouse.pageX+15, top:kmouse.pageY-20});
				}).mouseout(function(){
					my_tooltip.fadeOut(150);
				});
			});
		}
	}
