var formObjectArray = {};
var defaultSuffix = '_default';
var rg = {};

function getRequiredObject(idStr) {
    for (var key in formObjectArray) {
        if (key === idStr) {
            return formObjectArray[key];
        }
    }
}

function forceCloseSelects(ee){
	var s = document.getElementsByTagName('ul');
	for(var i = 0; i < s.length; ++i){
		var e = s[i];
		if(e.className === 'dropdownvisible' && e !== ee){
			e.className = 'dropdownhidden';
		}
	}
}

function triggerCheck(e) {
    var idStr = e.getAttribute('id');
    var tmp = getRequiredObject(idStr);
    tmp.toggleCheck();
    validateForm();
}

function triggerSelect(e) {
    var n = e.getAttribute('name');
    n = n.substr(0, n.indexOf('{'));
    var tmp = getRequiredObject(n);
    tmp.selectMe(e);
    
    validateForm();
}

function selectedOption(e, option, trigger) {
    var idStr = e.getAttribute('id');
    var tmp = getRequiredObject(idStr);
    if(!tmp){
    	return false;
    }else{
    	return tmp.validate(option, trigger);
    }
    validateForm();
}

function triggerBlur(e) {
    var idStr = e.getAttribute('id');
    var tmp = getRequiredObject(idStr);
    tmp.blurred();
    validateForm();
}

function triggerFocused(e) {
	forceCloseSelects();
    var idStr = e.getAttribute('id');
    var tmp = getRequiredObject(idStr);
    tmp.focused();
    validateForm();
}

function triggerChanged(e) {
    var idStr = e.getAttribute('id');
    var tmp = getRequiredObject(idStr);
	if (tmp != null){
	    tmp.valueChanged();
    }
}

function disableSubmitButton() {
    var tmpSubmit = document.getElementById("CCK_SUBMIT");
  	if (tmpSubmit != null){
	    tmpSubmit.disabled = 'disabled';
	    tmpSubmit.className = 'longFormButton disabled';
	}
}

function enableSubmitButton() {
    var tmpSubmit = document.getElementById("CCK_SUBMIT");
  	if (tmpSubmit != null){
	    tmpSubmit.disabled = '';
	    tmpSubmit.className = 'longFormButton enabled';
    }
}

function validateForm() {
    var tc = 0;
    var vc = 0;
    for (var key in formObjectArray) {
        ++tc;
    }
    for (var vk in formObjectArray) {
        if (formObjectArray[vk].isValid()) {
            ++vc;
        }
    }

	if(vc === tc){
		enableSubmitButton();
	}else{
		disableSubmitButton();
	}
}

function containsKey(a, b) {
    for (var k in a) {
        if (k === b) {
            return true;
        }
    }
    return false;
}

function isTextExtract(str){
	
	switch(str){
		case "text":
			return true;
			break;
		case "email":
			return true;
			break;
		case "mobilenum":
			return true;
			break;
		case "phone":
			return true;
			break;
		case "phonenum":
			return true;	
			break;
	}
	
	return false;
}

function createCustomInput(e) {

    var tmpDefault;
    var reqEL;
    var t = e.type;
	
    if(isTextExtract(t)){
    	t = 'text';
    }
    
    if(e[0] === 'radios'){
    	t = 'radio';
    }

	switch (t) {
    case "text":
        tmpDefault = document.getElementById(e.getAttribute('id')+defaultSuffix).value;
        reqEL = new CustomTextInput(e, tmpDefault);
        formObjectArray[e.getAttribute('id')] = reqEL;
        break;
    case "textarea":
        tmpDefault = document.getElementById(e.getAttribute('id')+defaultSuffix).value;
        reqEL = new CustomTextAreaInput(e, tmpDefault);
        formObjectArray[e.getAttribute('id')] = reqEL;
        break;
	case "checkbox":
		tmpDefault = document.getElementById(e.getAttribute('id')+defaultSuffix).value;
		reqEL = new CustomCheckBoxInput(e,tmpDefault);
		formObjectArray[e.getAttribute('id')] = reqEL;
		break;
    case "select-one":

    	tmpDefault = e.options[0].value;
        
        reqEL = new CustomSelectInput(e, tmpDefault);
        formObjectArray[e.getAttribute('id')] = reqEL;
        break;
    case "radio":
        if (e[0] === 'radios') {
            for (var k in e[1]) {
                var t = e[1][k][0].getAttribute('name');
                if (!containsKey(formObjectArray, t)) {
                    var tc = e[1][k][0].parentNode.parentNode;
                    reqEL = new CustomRadioInput(e[1][k], k, tc);
                    formObjectArray[k] = reqEL;
                }
            }
        }
        break;
    }

}

function createCustomInputs(elements) {
    for (var i = 0; i < elements.length; ++i) {
        createCustomInput(elements[i]);
    }

}

