/**
* MTVN GDC
* @module MTVN_GDC
*/
var MTVN_GDC_scriptEl = document.getElementById('MTVN_GDC-core');
var MTVN_GDC_clientBase = MTVN_GDC_scriptEl.src.replace(/^(.*)\/js\/dependencies.js(.*)/, '$1');

MTVN_GDC.init = function(collectionId, containerId, dateFormat){
  try {
	if(collectionId == undefined || containerId == undefined) return;
	else{
		if(document.getElementById(containerId) == null) return;
		else{
			MTVN_GDC.collectionId = collectionId;
			MTVN_GDC.containerId = containerId;
			MTVN_GDC.formId = "gdcForm" + collectionId;
			MTVN_GDC.dateFormat = dateFormat;

			MTVN.SHR.addToRequestQueue({fn:"MTVN_GDC.loadCollection"});
			MTVN.SHR.init();
		}
	}
  } catch(e) {

  };
}

MTVN_GDC.doRequest = function(method, url, params, callback){
	if (!window.shr) window.shr = new SWFHttpRequest();
	MTVN.Util.removeCSSClass(document.getElementById("MTVN_GDC_loader"), "MTVN_hide");
	shr.open(method, url);
	shr.onreadystatechange = function(){
		MTVN.Util.addCSSClass(document.getElementById("MTVN_GDC_loader"), "MTVN_hide");
		//console.log("readyState = " + this.readyState + ", status = " + this.status)
		
		if (this.readyState!=4) return;
		if (this.status==200) {
			var fnCall = callback + '(' + JSON.stringify(this.responseText, null, 1) + ')';
			eval(fnCall);
		}
	};
	shr.send(params);
}

MTVN_GDC.loadCollection = function(){
	if(MTVN_GDC.collectionId!=undefined){
		MTVN_GDC.doRequest("GET", MTVN_GDC.webServiceHost + MTVN_GDC.getMetadataUrl, "format=json&collectionID=" + MTVN_GDC.collectionId, "MTVN_GDC.handleCollection");
	}
}
	
MTVN_GDC.handleCollection = function(responseText){
	//MTVN_GDC.collectionObj = JSON.parse(responseText);	
	MTVN_GDC.collectionObj = eval('(' + responseText + ')');
	MTVN_GDC.buildForm();
}	
	
MTVN_GDC.submitForm = function(){
	var params = "format=json&collectionID=" + MTVN_GDC.collectionId;
	var form = document.forms[MTVN_GDC.formId];
	
	for(var i=0; i<form.elements.length; i++){
		var e = form.elements[i];
		
		//console.log("form = " + e.form + ", type = " + e.type + ", name = " + e.name);	
		//console.log(e.type);
		
		if((e.type!="radio" && e.type!="checkbox" && e.type!="submit") || ((e.type=="radio" || e.type=="checkbox") && e.checked==true)){
			if(e.value!=""){
				params += "&" + e.name + "=" + e.value;
			}
		}
	}

	//console.log(params);		
	MTVN_GDC.doRequest("GET", MTVN_GDC.webServiceHost + MTVN_GDC.submitEntryUrl, params, "MTVN_GDC.handleSubmitResponse");
	return false;
}

MTVN_GDC.handleSubmitResponse = function(responseText){
	//var obj = JSON.parse(responseText);
	var obj = eval('(' + responseText + ')');
	
	if(obj.status=="error"){
		// set form error
		if(obj.errorMessage) document.getElementById("MTVN_GDC_col-error").innerHTML = MTVN.Dictionary.getPhrase(obj.errorMessage);
	
		// clear field errors	
		var tdArray = document.getElementsByTagName("td");
		for(var i=0; i < tdArray.length; i++){
			if(tdArray[i].className.indexOf("error") >= 0) tdArray[i].innerHTML = "";
		}
		
		// set field errors
		for (var prop in obj.entryErrors) {
			var el = document.getElementById(prop+"Error");
			if(el != null){
				el.innerHTML = MTVN.Dictionary.getPhrase(obj.entryErrors[prop]);
			}
		}
	}
	else if(obj.status=="ok"){
		MTVN_GDC.handleSuccess();
	}		
}

MTVN_GDC.handleSuccess = function(){
	//var container = document.getElementById(MTVN_GDC.containerId);
	//container.innerHTML = MTVN.Dictionary.getPhrase("SuccessMsg");
	//if (url.substring(url.length-1, 1) == "/") url = url.substring(0, url.length-2);
	
	var url = window.location.href;
	var pattern = /(concours|win|vind|taevla|プレゼント)/;
	
	if(pattern.test(url)){
		if(window.location.href.charAt(window.location.href.length-1) === "/") {
			window.location.href = window.location.href+"success/"
		} else {
			window.location.href = window.location.href+"/success/";
		}
	} else {
		window.location.href = window.location.href+"?status=success";
		document.getElementById("MTVN_GDC_col-error").innerHTML("Danke für deine Teilnahme!");
	}
}

MTVN_GDC.buildForm = function(){
	// build form
try {
	var form = document.createElement("form");
	form.id = MTVN_GDC.formId;
	form.name = MTVN_GDC.formId;
	form.action = "#";
	form.className = "gdcForm"; // DA
	form.onsubmit = MTVN_GDC.submitForm;
	
	var table = document.createElement("table");
	var tbody = document.createElement("tbody");
	table.appendChild(tbody)
		
	// form elements
	for(var i=0; i < MTVN_GDC.collectionObj.questions.length; i++){
		var q = MTVN_GDC.collectionObj.questions[i];
		var formElement = "";
		
		switch (q.type) {
			case "TEXT": formElement = MTVN_GDC.buildTextElement(q); break;
			case "DATE": formElement = MTVN_GDC.buildDateElement(q); break;
			case "RADIO": formElement = MTVN_GDC.buildRadioElement(q); break;
			case "CHECKBOX": formElement = MTVN_GDC.buildCheckBoxElement(q); break;
			case "YES_OR_NO": formElement = MTVN_GDC.buildYesOrNoElement(q); break;
			case "STATE": formElement = MTVN_GDC.buildStateElement(q); break;
			default: break;
		}
		
		var tr = document.createElement("tr");
		tr.id = q.tag + "_tr"; // DA - else double id -
		tr.className = "formInput";

		var labelTD = document.createElement("td");
		labelTD.className = "labelCell"; // DA
		labelTD.innerHTML = "<label for=\"" + q.tag + "\">" + q.copy + ((q.required) ? " * " : " ") + "</label>";
		
		var elementTD = document.createElement("td");
		elementTD.className = "inputCell"; // DA
		elementTD.innerHTML = formElement;
		
		var errorTD = document.createElement("td");
		errorTD.id = q.tag + "Error";
		errorTD.className = "MTVN_GDC_error";

		tr.appendChild(labelTD);
		tr.appendChild(elementTD);
		tr.appendChild(errorTD);

		tbody.appendChild(tr);
	}
	form.appendChild(table);
	
	// hidden fields
	var successURL = document.createElement("input");
	successURL.type = "hidden";
	successURL.name = "successURL";
	successURL.value = MTVN_GDC.successUrl;
	
	var submitted = document.createElement("input");
	submitted.type = "hidden";
	submitted.name = "submitted";
	submitted.value = "1";
	
	var collectionId = document.createElement("input");
	collectionId.type = "hidden";
	collectionId.name = "collectionId";
	collectionId.value = MTVN_GDC.collectionObj.collectionID;
	
	//form.appendChild(successURL);
	//form.appendChild(submitted);
	//form.appendChild(collectionId);

	// submit button
	var divSubmit = document.createElement("p");
	divSubmit.className = "submit";
	
	var inputSubmit = document.createElement("input");
	inputSubmit.type = "submit";
	inputSubmit.value = MTVN.Dictionary.getPhrase("submit");
	
	divSubmit.appendChild(inputSubmit);
	form.appendChild(divSubmit);

	var loader = document.createElement("span");
	loader.id = "MTVN_GDC_loader";
	loader.className = "MTVN_hide";
	loader.innerHTML = MTVN.Dictionary.getPhrase("Loading");
	
	form.appendChild(loader);
	
	var formContainer = document.createElement("div");
	formContainer.className = "MTVN_GDC_form";
	
	formContainer.appendChild(form);
	
	// add everything to the DOM
	var container = document.getElementById(MTVN_GDC.containerId);

	var wrapper = document.createElement("div");
	wrapper.className = "MTVN_GDC_wrap";
	
	var header = document.createElement("div");
	header.className = "MTVN_GDC_header";
	
	//var formTitle = document.createElement("h2");
	//formTitle.innerHTML = MTVN.Dictionary.getPhrase(MTVN_GDC.collectionObj.description);

	var errorContainer = document.createElement("div");
	errorContainer.id = "MTVN_GDC_col-error";
	errorContainer.className = "MTVN_GDC_error";
	
	//header.appendChild(formTitle);
	header.appendChild(errorContainer);
	wrapper.appendChild(header);
	wrapper.appendChild(formContainer);
	container.appendChild(wrapper);
	
	if(window.location.href.split("?")[1] == "status=success"){
		errorContainer.innerHTML = "Vielen Dank für deine Teilnahme!";
		window.scrollTo(0, errorContainer.offsetParent.offsetTop);
	}
}
catch(e) {
  //document.title = e.message;	
	}
}

/* form elements */
MTVN_GDC.buildTextElement = function(q){
	var input = "<textarea name=\"" + q.tag + "\" id=\"" + q.tag + "\" class=\"textarea\"></textarea>";
	return input;
}

MTVN_GDC.buildDateElement = function(q){
	// month
	var month = "";
	month += "<select name=\"" + q.tag + ":month\">";
	for(var i=0; i < MTVN_GDC.Constants.months.length; i++){
		month += "<option value=\"" + MTVN_GDC.Constants.months[i].value + "\">" + MTVN_GDC.Constants.months[i].label + "</option>";
	}
	month += "</select>";
	
	// day
	var day = "";
	day += "<select name=\"" + q.tag + ":day\">";
	day += "<option value=\"\">" + MTVN.Dictionary.getPhrase("Day") + "</option>";
	for(var i=1; i<=31; i++){
		day += "<option value=\"" + i + "\">" + i + "</option>";
	}
	day += "</select>";

	// year
	var year = "";
	year += "<input type=\"text\" name=\"" + q.tag + ":year\" maxlength=\"4\" />";
	
	var input = "";	
	if(MTVN_GDC.dateFormat=="dmy") input += day + month + year;
	else input += month + day + year;
	
	return input;
}

MTVN_GDC.buildRadioElement = function(q){
	return MTVN_GDC.buildOptionElement(q, "radio");
}

MTVN_GDC.buildCheckBoxElement = function(q){
	return MTVN_GDC.buildOptionElement(q, "checkbox");
}

MTVN_GDC.buildOptionElement = function(q, type){
	var input = "";
	input += "<ul>";
	for(var i=0; i<q.options.length; i++){
	  if (q.options[i]) { // Minh fix - 07/21/2010 - IE fails when too many radio buttons w extra comma in JSon - filter it out.
		input += "<li>";
		input += "<input type=\"" + type + "\" name=\"" + q.tag + "\" value=\"" + q.options[i].value + "\">";
		input += q.options[i].name;
		input += "</input>";
		input += "</li>";
	  }
	  else {
		 // alert(i);
	  }
	}

	input += "</ul>";
	return input;
}

MTVN_GDC.buildYesOrNoElement = function(q){
	var input = "<input type=\"checkbox\" name=\"" + q.tag + "\" value=\"1\"/>";
	return input;
}

MTVN_GDC.buildStateElement = function(q){
	var input = "<select name=\"" + q.tag + "\">";
	for(var i=0; i < MTVN_GDC.Constants.usStates.length; i++){
		input += "<option value=\"" + MTVN_GDC.Constants.usStates[i].value + "\">" + MTVN_GDC.Constants.usStates[i].label + "</option>";
	}
	input += "</select>";
	
	return input;
}
/* ---------- */

MTVN_GDC.Constants = {
	months : [{value:"", label: MTVN.Dictionary.getPhrase("Month")},
		{value:"1", label: MTVN.Dictionary.getPhrase("January")},
		{value:"2", label: MTVN.Dictionary.getPhrase("February")},
		{value:"3", label: MTVN.Dictionary.getPhrase("March")},
		{value:"4", label: MTVN.Dictionary.getPhrase("April")},
		{value:"5", label: MTVN.Dictionary.getPhrase("May")},
		{value:"6", label: MTVN.Dictionary.getPhrase("June")},
		{value:"7", label: MTVN.Dictionary.getPhrase("July")},
		{value:"8", label: MTVN.Dictionary.getPhrase("August")},
		{value:"9", label: MTVN.Dictionary.getPhrase("September")},
		{value:"10", label: MTVN.Dictionary.getPhrase("October")},
		{value:"11", label: MTVN.Dictionary.getPhrase("November")},
		{value:"12", label: MTVN.Dictionary.getPhrase("December")}],
		
	usStates : [{value:"", label:"Select a State"},
		{value:"AL", label:"Alabama"},
		{value:"AK", label:"Alaska"},
		{value:"AS", label:"American Samoa"},
		{value:"AZ", label:"Arizona"},
		{value:"AR", label:"Arkansas"},
		{value:"CA", label:"California"},
		{value:"CO", label:"Colorado"},
		{value:"CT", label:"Connecticut"},
		{value:"DE", label:"Delaware"},
		{value:"DC", label:"D.C."},
		{value:"FL", label:"Florida"},
		{value:"GA", label:"Georgia"},
		{value:"HI", label:"Hawaii"},
		{value:"ID", label:"Idaho"},
		{value:"IL", label:"Illinois"},
		{value:"IN", label:"Indiana"},
		{value:"IA", label:"Iowa"},
		{value:"KS", label:"Kansas"},
		{value:"KY", label:"Kentucky"},
		{value:"LA", label:"Louisiana"},
		{value:"ME", label:"Maine"},
		{value:"MH", label:"Marshall Isl."},
		{value:"MD", label:"Maryland"},
		{value:"MA", label:"Massachusetts"},
		{value:"MI", label:"Michigan"},
		{value:"MN", label:"Minnesota"},
		{value:"MS", label:"Mississippi"},
		{value:"MO", label:"Missouri"},
		{value:"MT", label:"Montana"},
		{value:"NE", label:"Nebraska"},
		{value:"NV", label:"Nevada"},
		{value:"NH", label:"New Hampshire"},
		{value:"NJ", label:"New Jersey"},
		{value:"NM", label:"New Mexico"},
		{value:"NY", label:"New York"},
		{value:"NC", label:"N. Carolina"},
		{value:"ND", label:"N. Dakota"},
		{value:"OH", label:"Ohio"},
		{value:"OK", label:"Oklahoma"},
		{value:"OR", label:"Oregon"},
		{value:"PA", label:"Pennsylvania"},
		{value:"PR", label:"Puerto Rico"},
		{value:"RI", label:"Rhode Isl."},
		{value:"SC", label:"S. Carolina"},
		{value:"SD", label:"S. Dakota"},
		{value:"TN", label:"Tennessee"},
		{value:"TX", label:"Texas"},
		{value:"UT", label:"Utah"},
		{value:"VT", label:"Vermont"},
		{value:"VA", label:"Virginia"},
		{value:"WA", label:"Washington"},
		{value:"WV", label:"W. Virginia"},
		{value:"WI", label:"Wisconsin"},
		{value:"WY", label:"Wyoming"},
		{value:"xx", label:"--Other--"}]
}
