function str_replace(search, replace, subject, count) {
	f = [].concat(search), r = [].concat(replace), s = subject,
			ra = r instanceof Array, sa = s instanceof Array;
	s = [].concat(s);
	if (count) {
		this.window[count] = 0;
	}
	for (i = 0, sl = s.length; i < sl; i++) {
		if (s[i] === '') {
			continue;
		}
		for (j = 0, fl = f.length; j < fl; j++) {
			temp = s[i] + '';
			repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
			s[i] = (temp).split(f[j]).join(repl);
			if (count && s[i] !== temp) {
				this.window[count] += (temp.length - s[i].length) / f[j].length;
			}
		}
	}
	return sa ? s : s[0];
}
function explode(delimiter, string, limit) {
	var emptyArray = {
		0 : ''
	};
	if (arguments.length < 2 || typeof arguments[0] == 'undefined'
			|| typeof arguments[1] == 'undefined') {
		return null;
	}

	if (delimiter === '' || delimiter === false || delimiter === null) {
		return false;
	}

	if (typeof delimiter == 'function' || typeof delimiter == 'object'
			|| typeof string == 'function' || typeof string == 'object') {
		return emptyArray;
	}

	if (delimiter === true) {
		delimiter = '1';
	}

	if (!limit) {
		return string.toString().split(delimiter.toString());
	} else {
		var splitted = string.toString().split(delimiter.toString());
		var partA = splitted.splice(0, limit - 1);
		var partB = splitted.join(delimiter.toString());
		partA.push(partB);
		return partA;
	}
}

function dnaFormElementError(error,element)
{
	var id = jQuery(element).attr('id');
	if(jQuery('#form-element-errors-' + id).length > 0)
	{
		jQuery('#form-element-errors-' + id).remove();
	}
	var divClass = 'form-element-errors form-normal-element-errors';
	if(jQuery('#form-element-wrapper-' + id).hasClass('form-group-element-wrapper'))
	{
		divClass = 'form-element-errors form-group-element-errors';
	}
	
	var htmlx = '<div id="form-element-errors-' + id + '" class="' + divClass + '">' + error.html() + '</div>';
	jQuery('#form-element-input-' + id).after(htmlx);
	if(jQuery('#form-element-input-' + id).parents('.form-subform-wrapper')){
		//jQuery('#form-element-input-' + id).parents('.form-subform-wrapper').find('.form-subform-legend').css('background-color','#f9e5e6');
	}
}
function dnaFormElementSuccess(element)
{
	var id = jQuery(element).attr('id');
	if(jQuery('#form-element-input-' + id).parents('.form-subform-wrapper')){
		jQuery('#form-element-input-' + id).parents('.form-subform-wrapper').find('.form-subform-legend').css('background-color','#F9F9F9');
	}
}

function textDnaDateInputs()
{
	if(jQuery('input.dateinput').length > 0)
	{
		jQuery('input.dateinput').each(function(){
			jQuery(this).setMask({mask: '99/99/9999', type: 'fixed'});
		});
	}
}

function textDnaPhoneInputs()
{
	if(jQuery('input.phoneinput').length > 0)
	{
		jQuery('input.phoneinput').each(function(){
			jQuery(this).setMask();
		});
	}
}

/**
 * Dependent Inputs
 * e.g. when a radio/select/checkbox OTHERS / # is pressed. When a user needs to enter an information other than the given options
 * @return
 */
function dnaFormDependents()
{
	if(jQuery('.form-element-dependent').length > 0)
	{
		jQuery('.form-element-dependent').each(function(){
			var ele = jQuery(this);
			var id = str_replace('form-element-wrapper-','',ele.attr('id'));
			id = str_replace('_specify','',id);

			if(jQuery('#' + id + '-')){
				jQuery('input[name="' + id + '"]').bind('change load',function(){
					if(jQuery('input[name="' + id + '"]:checked').val() == '#'){
						ele.show();
						jQuery('#' + id + '_specify').removeAttr('disabled','disabled');
						jQuery('#' + id + '_specify').rules('add', {required: true});
					} else {
						jQuery('#' + id + '_specify').val('');jQuery('#' + id + '_specify').attr('disabled','disabled');ele.hide();
						jQuery('#' + id + '_specify').rules('remove','required');
						jQuery('#form-element-errors-' + id + '_specify').remove();
					}
				});
				jQuery('#' + id).bind('change load',function(){
					var value = jQuery('#' + id).val();
					jQuery('#' + id + '_specify').val('');jQuery('#' + id + '_specify').attr('disabled','disabled');ele.hide();
					jQuery('#' + id).rules('remove','required');
					jQuery('#form-element-errors-' + id + '_specify').remove();
					if(value == '#'){
						ele.show();
						jQuery('#' + id + '_specify').removeAttr('disabled','disabled')
						jQuery('#' + id).rules('add', {required: true});
					}
				});
			}
		});
	}
}
/**
 * Clone a SubForm
 * @return
 */
function dnaSubFormClone()
{
	if(jQuery('a.form-subform-clone-link').length > 0)
	{
		var counter = 0;
		jQuery('a.form-subform-clone-link').each(function(){
			jQuery(this).click(function(){
				counter++;
				var tid = str_replace('form-subform-clone-link','',jQuery(this).attr('id'));
				var id = tid;
				var cloneContent = jQuery(this).siblings().first().clone();
				deleteContentLink = '<a href="#" title="" id="form-subform-clone-link-delete' + id + counter + '" class="form-subform-clone-link-delete form-subform-clone-link-delete'+ id +'">[ - ] Remove</a>';
				cloneContent.attr('id','form-subform-wrapper-' + id + counter);
				cloneContentId = cloneContent.attr('id');
				jQuery(this).before(cloneContent);
				if(jQuery('#' + cloneContentId + ' .form-subform-clone-link-delete').length < 1)
				{
					jQuery(deleteContentLink).appendTo('#' + cloneContentId);
				} else {
					jQuery('#' + cloneContentId + ' #form-subform-clone-link-delete' + id).remove();
					jQuery(deleteContentLink).appendTo('#' + cloneContentId);
				}
				jQuery('#' + cloneContentId + ' input,#' + cloneContentId + ' select,#' + cloneContentId + ' textarea').val('');
				
				jQuery('#form-subform-clone-link-delete' + id + counter).click(function(){
					var hrefId = str_replace('form-subform-clone-link-delete','',jQuery(this).attr('id'));
					jQuery('#form-subform-wrapper-' + hrefId).remove();
					return false;
				});
				return false;
			});
		});
	}
}
/**
 * REmove a given SubForm
 * @return
 */
function dnaSubFormCloneDelete(){
	if(jQuery('a.form-subform-clone-link-delete').length > 0)
	{
		jQuery('a.form-subform-clone-link-delete').each(function(){
			jQuery(this).click(function(){
				var hrefId = str_replace('form-subform-clone-link-delete','',jQuery(this).attr('id'));
				jQuery('#form-subform-wrapper-' + hrefId).remove();
				return false;
			});
		});
	}
}

/**
 * Clone a Group of Elements
 * @return
 */
function dnaFormGroupClone()
{
	if(jQuery('a.form-group-clone-link').length > 0)
	{
		var counter = 0;
		jQuery('a.form-group-clone-link').each(function(){
			jQuery(this).click(function(){
				counter++;
				var tid = str_replace('form-group-clone-link','',jQuery(this).attr('id'));
				id = tid;
				var cloneContent = jQuery(this).siblings().first().clone();
				
				deleteContentLink = '<a href="#" title="Remove" id="form-group-clone-link-delete' + id + counter + '" class="form-group-clone-link-delete">[ - ] Remove</a><div class="clearfloat">&nbsp;</div>';
				cloneContent.attr('id','form-group-wrapper-' + id + counter);
				cloneContentId = cloneContent.attr('id');
				jQuery(this).before(cloneContent);
				
				if(jQuery('#' + cloneContentId + ' .form-group-clone-link-delete').length < 1)
				{
					jQuery(deleteContentLink).appendTo('#' + cloneContentId);
				} else {
					jQuery('#' + cloneContentId + ' #form-group-clone-link-delete' + id).remove();
					jQuery(deleteContentLink).appendTo('#' + cloneContentId);
				}
				jQuery('#' + cloneContentId + ' input,#' + cloneContentId + ' select,#' + cloneContentId + ' textarea').val('');
				jQuery('#form-group-clone-link-delete' + id + counter).click(function(){
					jQuery(this).parent().remove();
					return false;
				});
				return false;
			});
		});
	}
}
/**
 * Remove/Destroy a Group of Elements
 * @return
 */
function dnaFormGroupCloneDelete(){
	if(jQuery('a.form-group-clone-link-delete').length > 0)
	{
		jQuery('a.form-group-clone-link-delete').each(function(){
			jQuery(this).click(function(){
				jQuery(this).parent().remove();
				return false;
			});
		});
	}
}

/**
 * Element clone Delete
 * @return
 */
function dnaFormElementCloneDelete()
{
	if(jQuery('a.form-element-clone-link-delete').length > 0)
	{
		jQuery('a.form-element-clone-link-delete').each(function(){
			jQuery(this).click(function(){
				var id = str_replace('form-element-clone-link-delete','',jQuery(this).attr('id'));
				jQuery('#form-element-wrapper-' + id).remove();
				return false;
			});
		});
	}
}

/**
 * Clone an Element
 * @return
 */
function dnaFormElementClone()
{
	if(jQuery('a.form-element-clone-link').length > 0)
	{
		var counter = 0;
		jQuery('a.form-element-clone-link').click(function(){
			counter++;
			var ele = jQuery(this);
			var tid = str_replace('form-element-clone-link','',ele.attr('id'));
			id = tid;
			totalCount = jQuery('#form-element-wrapper-' + id + ' .form-element-input').length;
			deleteContentLink = '<a href="' + id + counter + '" title="Remove" id="form-element-clone-link-delete' + id + counter + '" class="form-element-clone-link-delete">[ - ] Remove</a>';
			var cloneContentId = 'form-element-input-' + id + counter;
			var cloneContent = jQuery('#form-element-input-' + id).clone().attr('id',cloneContentId).css('margin-top','10px');
			jQuery('#form-element-wrapper-' + id + ' .form-element-input').last().after(cloneContent);
			jQuery('#' + cloneContentId + ' input,#' + cloneContentId + ' select,#' + cloneContentId + ' textarea').val('');
			
			if(jQuery('#' + cloneContentId + ' .form-element-clone-link-delete').length < 1)
			{
				jQuery(deleteContentLink).appendTo('#' + cloneContentId);
			} else {
				jQuery('#' + cloneContentId + ' #form-element-clone-link-delete' + id).remove();
				jQuery(deleteContentLink).appendTo('#' + cloneContentId);
			}
			jQuery('#form-element-clone-link-delete' + id + counter).click(function(){
				jQuery(this).parent().remove();
				return false;
			});
			return false;
		});
	}
 return false;	
}
