/*
 *
 * Templates
 * 
 * All HTML-generation should happen here to facilitate maintenance
 *
 * See js/libs/jquery.tmpl.js for details
 * 
 */


/* form */
var formMarkup = '{{each(i, element) elements}}';
	formMarkup += '{{tmpl(element) "fieldsetTemplate"}}';
	formMarkup += '{{/each}}';
//	formMarkup += '<div class="form-footer"><small>*=Pflichtfelder</small><a data-action-1="{\'type\':\'infoOverlay\', \'containerId\':\'another_container\'}" class="cta-link">Datenschutzbestimmungen</a></div>';	
	$.template( "formTemplate", formMarkup );

/* fieldset */
var fieldsetMarkup = '<fieldset id="${id}">';
	fieldsetMarkup += '{{each(i, item) members}}'
	fieldsetMarkup += '{{if item.type=="group"}}';
	fieldsetMarkup += '{{tmpl(item) "groupTemplate"}}';
	fieldsetMarkup += '{{else}}';
	fieldsetMarkup += '{{tmpl(item) "itemTemplate"}}';	
	fieldsetMarkup += '{{/if}}';
	fieldsetMarkup += '{{/each}}';
	fieldsetMarkup += '</fieldset>';
$.template( "fieldsetTemplate", fieldsetMarkup );

/* element group */
var groupMarkup = '<div class="group ${classes}" name="${name}"><h2>${label}</h2>';
	groupMarkup += '{{if description}}<span class="info"><div class="hint">{{html description}}</div></span>{{/if}}';
	groupMarkup += '<div class="error-messages"></div>';
	groupMarkup += '{{each(i, item) members}}'
	groupMarkup += '{{if item.type=="group"}}';
	groupMarkup += '{{tmpl(item) "groupTemplate"}}';
	groupMarkup += '{{else}}';
	groupMarkup += '{{tmpl(item) "itemTemplate"}}';	
	groupMarkup += '{{/if}}';
	groupMarkup += '{{/each}}';
	groupMarkup += '</div>';	
$.template( "groupTemplate", groupMarkup );

/* item template */
var itemMarkup = '{{if hasClassName(this.data, "heading")}}';
	itemMarkup += '{{tmpl type +"Template"}}';
	itemMarkup += '<div class="error-messages"></div>';
	itemMarkup += '{{else}}';
	itemMarkup += '<div class="${classes} field ${type}" rel="${name}">';
	itemMarkup += '{{tmpl type +"Template"}}';
	itemMarkup += '<div class="hint">${hint}</div>';
	itemMarkup += '</div>'; 	
	itemMarkup += '{{/if}}';		
		
$.template( "itemTemplate", itemMarkup );


/* input element */
var inputMarkup = '{{if hasClassName(this.data, "inline-label")}}';
	inputMarkup += '{{if hasAttr(this.data, "defaultValue")}}';
	inputMarkup += '<input type="text" id="${id}" class="${classes}" value="${defaultValue}" name="${name}" {{if hasAttr(this.data, "readonly")}}readonly="true"{{/if}}>';
	inputMarkup += '{{else}}';
	inputMarkup += '<input type="text" id="${id}" class="${classes}" value="${value}" name="${name}" placeholder="${label}" {{if hasAttr(this.data, "readonly")}}readonly="true"{{/if}}>';
	inputMarkup += '{{/if}}';	
	inputMarkup += '{{else}}';
	inputMarkup += '<label for="${id}">${label}{{if is_array(rules)}}{{if in_rules("notEmpty",rules)}}*{{/if}}{{/if}}</label>';
	inputMarkup += '{{if hasAttr(this.data, "defaultValue")}}';
	inputMarkup += '<input type="text" id="${id}" class="${classes}" value="${defaultValue}" name="${name}" {{if hasAttr(this.data, "readonly")}}readonly="true"{{/if}}>';
	inputMarkup += '{{else}}';
	inputMarkup += '<input type="text" id="${id}" class="${classes}" value="${value}" name="${name}" {{if hasAttr(this.data, "readonly")}}readonly="true"{{/if}}>';
	inputMarkup += '{{/if}}';	
	inputMarkup += '{{/if}}';
$.template( "inputTemplate", inputMarkup );

/* select element */
var selectMarkup = '<label for="${id}">${label}{{if is_array(rules)}}{{if in_rules("notEmpty",rules)}}*{{/if}}{{/if}}</label>';
	selectMarkup += '<select id="${id}" name="${name}">';
	selectMarkup += '{{if parameters.length==0}}';
	selectMarkup += '<option value="000">keine Auswahl-Optionen</option>';
	selectMarkup += '{{else}}';
	selectMarkup += '{{each(i, opt) parameters.options.values}}<option value="${opt.id}">${opt.value}</option>{{/each}}';
	selectMarkup += '{{/if}}';
	selectMarkup += '</select>';
$.template( "selectTemplate", selectMarkup );

/* radio buttons */
var radioMarkup = '{{each(i, opt) parameters.options.values}}';
	radioMarkup += '<input type="radio" value="${opt.id}" id="${groups[0].name}_${name}_radio_${i}" name="${name}">';
	radioMarkup += '<label for="${groups[0].name}_${name}_radio_${i}">${opt.value}</label>';
	radioMarkup += '{{/each}}';
$.template( "radioTemplate", radioMarkup );

/* checkbox */
var checkboxMarkup = '{{each(i, opt) parameters.options.values}}';
	checkboxMarkup += '<input type="checkbox" value="${opt.id}" name="${name}" {{if disabled}} disabled="true"{{/if}} >';
	checkboxMarkup += '<label>${opt.value}</label>';
	checkboxMarkup += '{{/each}}';
$.template( "checkboxTemplate", checkboxMarkup );

/* combobox */
/*var comboboxMarkup = '<label for="${id}">${label}{{if is_array(rules)}}{{if in_rules("notEmpty",rules)}}*{{/if}}{{/if}}</label>';
	comboboxMarkup += '<input type="text" disabled="" autocomplete="off" id="${id}" class="${classes}" value="${defaultValue}" name="${name}">';
$.template( "comboboxTemplate", comboboxMarkup ); */

var comboboxMarkup = '<label for="${id}">${label}{{if is_array(rules)}}{{if in_rules("notEmpty",rules)}}*{{/if}}{{/if}}</label>';
	comboboxMarkup += '<input type="text"  autocomplete="off" id="${id}" class="${classes}" value="${defaultValue}" name="${name}">';
$.template( "comboboxTemplate", comboboxMarkup );

/* date element */
var dateMarkup = '<label for="${id}">${label}{{if is_array(rules)}}{{if in_rules("notEmpty",rules)}}*{{/if}}{{/if}}</label>';
dateMarkup += '<input type="text" id="${id}" value="${value}" name="${name}" class="datepick" />';
$.template( "dateTemplate", dateMarkup );

/* text element */
var textMarkup = '{{if hasClassName(this.data, "heading")}}';
	textMarkup += '<h2>{{html value}}</h2>';
	textMarkup += '{{else}}';
	textMarkup += '<p>{{html value}}';
	textMarkup += '{{if description}}<span class="info"><div class="hint">{{html description}}</div></span>{{/if}}';
	textMarkup += '</p>';
	textMarkup += '{{/if}}';
$.template( "textTemplate", textMarkup );

/* text element */
var tableMarkup = '<table>';
	tableMarkup += '<caption>${label}</caption>';
	tableMarkup += '<thead>';
	tableMarkup += '<tr>';
	tableMarkup += '{{each(i, heading) parameters.header.values}}';
	tableMarkup += '<th>${heading.value}</th>';
	tableMarkup += '{{/each}}';
	tableMarkup += '</tr>';
	tableMarkup += '</thead>';
	tableMarkup += '<tbody>';	
	tableMarkup += '{{each(i, row) parameters.rows}}';
	tableMarkup += '<tr>';	
	tableMarkup += '{{each(i, entry) row.values}}';
	tableMarkup += '<td>{{html entry.value}}</td>';
	tableMarkup += '{{/each}}';
	tableMarkup += '</tr>';
	tableMarkup += '{{/each}}';	
	tableMarkup += '</tbody>';
	tableMarkup += '</table>';
$.template( "tableTemplate", tableMarkup );

/* password */
var passwordMarkup = '{{if hasClassName(this.data, "inline-label")}}';
	passwordMarkup += '{{if hasAttr(this.data, "defaultValue")}}';
	passwordMarkup += '<input type="password" id="${id}" class="${classes}" value="${defaultValue}" name="${name}">';
	passwordMarkup += '{{else}}';
	passwordMarkup += '<input type="password" id="${id}" class="${classes}" value="" name="${name}" placeholder="${label}">';
	passwordMarkup += '{{/if}}';
	passwordMarkup += '{{else}}';
	passwordMarkup += '<label for="${id}">${label}{{if is_array(rules)}}{{if in_rules("notEmpty",rules)}}*{{/if}}{{/if}}</label>';
	passwordMarkup += '<input type="password" id="${id}" class="${classes}" value="${defaultValue}" name="${name}">';
	passwordMarkup += '{{/if}}';
$.template( "passwordTemplate", passwordMarkup );

/* textarea */
var textareaMarkup = '<label for="${id}">${label}{{if is_array(rules)}}{{if in_rules("notEmpty",rules)}}*{{/if}}{{/if}}</label>';
	textareaMarkup += '<textarea name="${name}"></textarea>';
$.template( "textareaTemplate", textareaMarkup );

/* button */
var buttonMarkup = '<input type="button" value="${label}" name="${name}">';
$.template( "buttonTemplate", buttonMarkup );

function is_array(input){
    return typeof(input)=='object'&&(input instanceof Array);
}

function in_rules(item, arr) {
	for(p=0; p < arr.length; p++) {
		if(item == arr[p].name)
			return true;
	}
	return false;
}

function in_array(item, arr) {
	for(p=0; p < arr.length; p++) {
		if(item == arr[p].name)
			return true;
	}
	return false;
}

function in_fieldset(item, arr) {
	for(p=0; p < arr.length; p++) {
		//debug.log("in rules"+item+"=="+arr[p].name);
		if(item == arr[p])
			return true;
	}
	return false;
}

function key_exists(key, arr) {
	if( key in arr ) {
		return true;
	}
	return false;


}

function hasAttr(element, attributeName, attributeValue){
	var hasAttr = false;
	if(typeof element[attributeName] != 'undefined' && element[attributeName] != null && element[attributeName] != ""){
		if(typeof attributeValue !='undefined'){
			if(element[attributeName]==attributeValue){
				hasAttr = true;
			}else{
				hasAttr = false;
			}
		}else{
			hasAttr = true;
		}				
	}
	return hasAttr;
}

function hasClassName(element, className){
	var classes = element.classes;
	if(typeof classes == 'undefined' || classes == null){
		return false;		
	}else{
		var found = false;

		var classNames = classes.split(' ').length>0 ? classes.split(' ') : [classes];
		$.each(classNames, function(i, value){
			if(value==className){
				found = true;
			}
		})
		return found;			
	}	 
}

