// JavaScript Document
//global variables that can be used by ALL the function son this page.
var inputs;
var imgFalseChk = '/resources/images/unchecked.png';
var imgTrueChk = '/resources/images/checked.png';
var imgFalseRad = '/resources/images/unchecked_rad.png';
var imgTrueRad = '/resources/images/checked_rad.png';
var actRadBut='';

//this function runs when the page is loaded, put all your other onload stuff in here too.
function init() {
    replaceChecks();
}

function replaceChecks() {
    
    //get all the input fields on the page
    inputs = document.getElementsByTagName('input');

    //cycle trough the input fields
    for(var i = 0; i < inputs.length; i++) {

        //check if the input is a checkbox
        if(inputs[i].getAttribute('type') == 'checkbox' ) {
            
            //create a new image
            var img = document.createElement('img');
            
            //check if the checkbox is checked
            if(inputs[i].checked) {
                img.src = imgTrueChk;
            } else {
                img.src = imgFalseChk;
            }

            //set image ID and onclick action
            img.id = 'checkImage'+i;
            //set image
            img.onclick = new Function('checkChangeChk('+i+')');
            //place image in front of the checkbox
            inputs[i].parentNode.insertBefore(img, inputs[i]);
            
            //hide the checkbox
            inputs[i].style.display='none';
			
        }else if(inputs[i].getAttribute('type') == 'radio' ){
			//create a new image
            var img = document.createElement('img');
            
            //check if the checkbox is checked
            if(inputs[i].checked) {
                img.src = imgTrueRad;
            } else {
                img.src = imgFalseRad;
            }

            //set image ID and onclick action
            img.id = 'checkImage'+i;
            //set image
            img.onclick = new Function('checkChangeRad('+i+')');
            //place image in front of the checkbox
            inputs[i].parentNode.insertBefore(img, inputs[i]);
            
            //hide the checkbox
            inputs[i].style.display='none';
		}
    }
}

function removeCheckImages() {
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].getAttribute('type') == 'checkbox' || inputs[i].getAttribute('type') == 'radio') {
			$("#checkImage" + i).remove();
		}
	}
}

//change the checkbox status and the replacement image
function checkChangeChk(i) {

    if (inputs[i].checked) {
        inputs[i].checked = '';
        document.getElementById('checkImage'+i).src=imgFalseChk;
    } else {
        inputs[i].checked = 'checked';
        document.getElementById('checkImage'+i).src=imgTrueChk;
    }
}

function checkChangeRad(i) {

	/*
	if(actRadBut != ''){
		inputs[actRadBut].checked = '';
		document.getElementById('checkImage'+actRadBut).src=imgFalseRad;
	}
	*/
	
	if(!inputs[i].checked) {
		$(inputs[i].parentNode).find("img").attr("src", imgFalseRad);
        	inputs[i].checked = 'checked';
	/*
	var optionList = document.forms['mailForm'][inputs[i].name];
		if (optionList != null && optionList[0]) {
			for (var j = 0; j < optionList.length; j++) {
				alert(optionList[j].checked);
			}
		} else {
			alert(optionList.checked);
		}
	*/

        document.getElementById('checkImage'+i).src=imgTrueRad;
		//actRadBut = i;
	}
	
}

var subformCounter = 0;
	
$(document).ready(function() {
	Date.format = 'yyyy-mm-dd';
	initDatepickers($("div[@class='bobcat_form']"));
	$("input[@id='multiplier']").change(onMultiplier);
	$("input[@id='multiplier']").attr("value", "1");
	onMultiplier(false); // no remove needed since assigning images happens after this already (inside init)
	init();
});

// remove boolean checks wether radio and checkboxe images need to be reassigned
function onMultiplier(remove) {
	if (remove) {
		removeCheckImages();
	}
	var newMultiplier = $("input[@id='multiplier']").attr("value");
	if (subformCounter > newMultiplier) {
		for (var i = parseInt(newMultiplier) + 1; i <= subformCounter; i++) {
			$("div[@id='subform" + i + "']").remove();
			$("div[@id='clearline" + i + "']").remove();
		}
	} else if (subformCounter < newMultiplier) {
		for (var i = parseInt(subformCounter) + 1; i <= newMultiplier; i++) {
			var baseform = $("#subform");
			var subform = baseform.clone(true);
			transform(subform, i);
			subform.appendTo("div[@id='subforms']");
			initDatepickers(subform);
			var clearline = document.createElement("div");
			$(clearline).attr("class", "form_clearline");
			$(clearline).attr("id", "clearline" + i);
			$(clearline).appendTo("div[@id='subforms']");
		}
	}
	subformCounter = newMultiplier;
	if (remove) {
		replaceChecks();
	}
	resizeBackground();
}

function transform(subform, i) {
	subform.attr("id", subform.attr("id") + i);
	subform.attr("style", "display:block");
	var titel = subform.find("h1:first");
	titel.html(titel.html() + i);
	var inputs = subform.find("input");
	for (var j = 0; j < inputs.length; j++) {
		if (inputs[j].name != 'mandatoryText' && inputs[j].name != 'mandatoryRadio' && inputs[j].name != 'validationText'
				 && inputs[j].name != 'validationType'  && inputs[j].name != 'validationMin'  && inputs[j].name != 'validationMax' && inputs[j].name != 'radioName') {
			inputs[j].disabled = false;
			if (inputs[j].id != '') {
				inputs[j].id = inputs[j].id + i;
			}
			inputs[j].name = inputs[j].name + i;
			$(inputs[j]).attr("ignore", "false");
		} else if (inputs[j].name != 'validationType'  && inputs[j].name != 'validationMin'  && inputs[j].name != 'validationMax' && inputs[j].name != 'radioName') {
			inputs[j].value = inputs[j].value + i;
			$(inputs[j]).attr("ignore", "false");
		}
	}
	var selects = subform.find("select");
	for (var k = 0; k < selects.length; k++) {
		selects[k].disabled = false;
		selects[k].name = selects[k].name + i;
		selects[k].id = selects[k].id + i;
	}
	// create radio buttons with createElement
	// dynamically created radiobuttons in IE don't allow their name to be changed
	if (jQuery.browser.msie) {
		var divs = subform.find("div[@class='form_radio']");
		for (var l = 0; l < divs.length; l++) {
			var radios = $(divs[l]).find("input");
			for (var r = 0; r < radios.length; r++) {
				var newname = radios[r].name;
				var radiohtml = "<input type=\"radio\" name=\"" + newname + "\" value=\"" + radios[r].value + "\">";
				var newradio = document.createElement(radiohtml);
				$(radios[r]).replaceWith(newradio);
			}
		}
	}
}

function initDatepickers(jElement) {
	var validations = jElement.find("input[name='validationText']");
	for (var r = 0; r < validations.length; r++) {
		if ($(validations[r]).attr("ignore") != "true") {
			var type = $(validations[r]).next();
			if (type.attr("value") == "date") {
				var min = type.next();
				var max = min.next();
				var datefield = $(document.forms['mailForm'][validations[r].value]);
				datefield.datePicker();
				datefield.dpSetStartDate(min.attr("value"));
				datefield.dpSetEndDate(max.attr("value"));
			}
		}
	}
}

function validateForm() {
	var validations = $("input[@name='validationText']");
	var notValid = false;
	for (var i = 0; i < validations.length; i++) {
		if ($(validations[i]).attr("ignore") != "true") {
			var type = $(validations[i]).next();
			var min = type.next();
			var max = min.next();
			if (type.attr("value") == "number") {
				var valValue = document.forms['mailForm'][validations[i].value].value;
				var valInteger = /^(0|[1-9][0-9]*)$/;
				if (jQuery.trim(valValue) != '') {
					if (!valInteger.test(valValue)) {
						notValid = true;
						break;
					}
				}
				var intValue = parseInt(valValue);
				if (intValue < parseInt(min.attr("value")) || intValue > parseInt(max.attr("value"))) {
					notValid = true;
					break;
				}
			}
		}
	}	
	var uploads = $("input[@type='file']");
	for (var j = 0; j < uploads.length; j++) {
		if (jQuery.trim(uploads[j].value) != '') {
			if (!validateUpload(uploads[j].value)) {
				notValid = true;
				break;
			}
		}
	}
	if (notValid) {
		alert(document.forms['mailForm']['validationMsg'].value);
		return false;
	} else {
		var mandatories = $("input[@name='mandatoryText']");
		var empty = false;
		for (var i = 0; i < mandatories.length; i++) {
			if ($(mandatories[i]).attr("ignore") != "true") {
				var thefield = document.forms['mailForm'][mandatories[i].value];
				if (typeof thefield.value != "undefined" && jQuery.trim(thefield.value) == '') {
					empty = true;
					break;
				}
			}
		}
		if (!empty) {
			var mandatories = $("input[@name='mandatoryRadio']");
			for (var i = 0; i < mandatories.length; i++) {
				if ($(mandatories[i]).attr("ignore") != "true") {
					var optionList = document.forms['mailForm'].elements[mandatories[i].value];
					var oneChecked = false;
					if (optionList[0]) {
						var oneChecked = false;
						for (var j = 0; j < optionList.length; j++) {
							if (optionList[j].checked) {
								oneChecked = true;
								break;
							}
						}
						if (!oneChecked) {
							empty = true;
							break
						}
					} else if (!optionList.checked) {
						empty = true;
						break
					}
				}
			}
		}
		if (!empty) {
			var mandatories = $("input[@name='mandatoryCheckbox']");
			for (var i = 0; i < mandatories.length; i++) {
				if ($(mandatories[i]).attr("ignore") != "true") {
					var checkboxName = mandatories[i].value + '1';
					var checkbox = document.forms['mailForm'][checkboxName];
					var c = 2
					var oneChecked = false;
					while (checkbox != null) {
						if (checkbox.checked) {
							oneChecked = true;
							break;
						}
						checkboxName = mandatories[i].value + c;
						checkbox = document.forms['mailForm'][checkboxName];
						c++;
					}
					if (!oneChecked) {
						empty = true;
						break;
					}
				}
			}
		}
		if (empty) {
			alert(document.forms['mailForm']['mandatoryMsg'].value);
			return false;
		} else {
			return true;
		}
	}
}

var validExt = new Array(".jpg", ".gif", ".png", ".txt", ".pdf", ".zip", ".rar", ".doc", ".JPG", ".jpeg");

function validateUpload(fileName) {
	for (var i = 0; i < validExt.length; i++) {
		if (fileName.lastIndexOf(validExt[i]) > -1) {
			return true;
		}
	}
	return false;
}