var searchFormFields = new Array();
var searchFormLanguage = '';

function createFieldFromElement(element) {
	var field = new Object();
	['id', 'name-pl', 'name-en', 'type', 'operator', 'value'].each(function(name) {
		field[name.camelize()] = getDOMChildText(element, name);
	});
	
	if(field.type == 'D'){	
		var valueOptionsElement = getDOMChildElements(element, 'value-options')[0];
		var valueOptions = new Array();
	
		getDOMChildElements(valueOptionsElement, "value-option").each(function(voElem, i){
			var valueOption = new Object();
			['id', 'value', 'label-pl', 'label-en'].each(function(name) {
				valueOption[name.camelize()] = getDOMChildText(voElem, name);
				valueOptions[i] = valueOption;
			});
		});
		
		field.valueOptions = valueOptions;
	}

	searchFormFields.length = searchFormFields.length + 1;
	searchFormFields[searchFormFields.length-1] = field;
	
	return field;
}

function createGroupFromElement(element) {
	var group = new Object();
	['id', 'name-pl', 'name-en'].each(function(name) {
		group[name.camelize()] = getDOMChildText(element, name);
	});

	var fields = new Array();
	getDOMChildElements(element, 'field').each(function(fElem, i){
		var field = createFieldFromElement(fElem);
		fields[i] = field;
	});

	group.fields = fields;
	return group;
}

function validateSearchForm(){
	function isNumeric(varNumber){
		var numericExpression = /^((\d+((\.|,)\d*)?)|((\d*(\.|,))?\d+))$/;
		if(varNumber.match(numericExpression)){
			return true;
		}else{
			return false;
		}
	}

	var valid = true;
	var errorsMsg = "";
	for(i = 0; i < searchFormFields.length; i++){
		if(searchFormFields[i].type == 'N'){
			var numVal = document.getElementById(searchFormFields[i].id).value;
			numVal = numVal.replace(/^\s+|\s+$/g, '');
			if(numVal && !isNumeric(numVal)) {

				var currField = document.getElementById(searchFormFields[i].id);

				if (searchFormLanguage == 'pl' || searchFormLanguage == '') {
					errorsMsg += "Wprowadź poprawną wartość liczbową w polu " + searchFormFields[i].namePl;
					errorsMsg += "\n";
				} else {
					errorsMsg += "Please insert appropriate numeric value into " + + searchFormFields[i].nameEn;
					errorsMsg += "\n";
				}
				currField.className="miniErr";
				valid = false;
			}
		}
	}
	if(!valid){
		alert(errorsMsg);
	}
	return valid;
}

function clearPhoneSearchForm(){
	for(i = 0; i < searchFormFields.length; i++){
		if(searchFormFields[i].type == 'B' || searchFormFields[i].type == 'MANUFACTURER'){
			var currField = document.getElementById(searchFormFields[i].id);
			currField.checked=false;
		}
	}
/* <label for='clearAll'> usuniete z kodu strony
	if(document.getElementById("clearAll")){
		document.getElementById("clearAll").checked=false;
	}
*/
}


function renderDictField(field, language, formBody){
	var txt = "";

	if(field.valueOptions){
		for(j = 0; j < field.valueOptions.length; j++){
			if(field.valueOptions[j].value != -1){
				txt += "<label for=\"" + field.id + "\">";
				
				txt += "<input type='checkbox' name='" + field.id + "." + field.valueOptions[j].value + "' value='" + field.valueOptions[j].value +"'/>";
	
				if (language == 'pl') {
					txt += field.namePl + ":" + field.valueOptions[j].labelPl;
				} else {
					txt += field.nameEn + ":" + field.valueOptions[j].labelEn;
				}
			
				txt += "</label>\n";
			}
		}
	}

	formBody += txt;
	return formBody;
}

function renderField(field, language, formBody){
	
	var txt = "<label for=\"" + field.id + "\">";

	if(field.type == 'B'  || field.type == 'MANUFACTURER'){
		txt += "<input type='checkbox' id='" + field.id + "' name='" + field.id + "' value='true'";
		if(field.value == 'true')
			txt += " checked";
		txt += "/>";

		if (language == 'pl') {
			txt += field.namePl;
		} else { 
			txt += field.nameEn;
		}
	}

	
	if(field.type == 'N'){
		/* Male zmiany w zwiazku z ------ 31.07.2009 WYSZUKIWARKA TELEFONOW ------- stary kod:

		if(Prototype.Browser.IE){
			txt += "<span class=\"txtLabelIE\">";
		}else{
			txt += "<span class=\"txtLabel\">";
		}		
		
		if (language == 'pl') {
			txt += field.namePl;
		} else { 
			txt += field.nameEn;
		}

		if((field.operator == '>=' || field.operator == '>') && language == 'pl'){
			txt += " od"
		}else if((field.operator == '<=' || field.operator == '<') && language == 'pl'){
			txt += " do"
		}

		txt += "</span><span class=\"txtField\"><input class='mini' type='text' id='" + field.id + "' name='" + field.id + "'/></span>";
		*/

		/* nowy kod: */
		if (language == 'pl') {
			txt += field.namePl;
		} else { 
			txt += field.nameEn;
		}

		if((field.operator == '>=' || field.operator == '>') && language == 'pl'){
			txt += " od"
		}else if((field.operator == '<=' || field.operator == '<') && language == 'pl'){
			txt += " do"
		}
		txt += "<input class='mini' type='text' id='karta_pamieci' name='" + field.id + "'/>";		
	}


	txt += "</label>\n";





	formBody += txt;
	return formBody;	
}

function renderManufacturer(field, language, formBody){
	var txt = "";
	
	var manufacturer = field.id.replace("crit.", "").toLowerCase();

	txt += "<input type='checkbox' id='" + field.id + "' name='" + field.id + "' value='true'";
	if(field.value == 'true')
		txt += " checked";
	txt += "/>";
	txt += "<label class=\"" + manufacturer + "\" for=\"rad_" + manufacturer + "\"><span>";
	if (language == 'pl') {
		txt += field.namePl;
	} else { 
		txt += field.nameEn;
	}

	txt += "</span></label>\n";
	
	formBody += txt;
	return formBody;
}


function renderGroup(group, language, formBody){
	var txt = "";
	if(group.id == 'MANUFACTURER'){
		txt = "<div class=\"row bg\">";
	}else{
		txt = "<div class=\"row\">";
	}

	txt += "<h3>";

	if (language == 'pl') {
		txt += group.namePl;
	} else { 
		txt += group.nameEn;
	}
	txt += "</h3>\n";

	var maxCol = 5;
	if(group.fields.length < maxCol){
		maxCol = group.fields.length;
	}
	var averageRows = Math.floor(group.fields.length / maxCol);
	var theRest = group.fields.length % maxCol;

	var idx = 0;
	for(i = 0; i < maxCol; i++){
		if(group.id == 'MANUFACTURER'){
			txt += "<div class=\"colTwo\">"; //poczatek
		}
		else{
			txt += "<div class=\"col\">"; //poczatek
		}
		var maxJ = averageRows;
		if(theRest > 0){
			maxJ++;
			theRest--;
		}
		for(j = 0; j < maxJ; j++){			
			if(group.fields[idx].type == 'D'){
				txt = renderDictField(group.fields[idx], language, txt);
			}else if(group.fields[idx].type == 'MANUFACTURER'){
				txt = renderManufacturer(group.fields[idx], language, txt);
				if(j+1<maxJ){
					txt += "<br />";
				}
			}else{
				txt = renderField(group.fields[idx], language, txt);
			}


			idx++;
		}
		txt += "</div>";
	}


	txt += "<div class=\"clear\"></div></div>\n";

	return formBody + txt;
}

function getFormFields(){
	new Ajax.Request("/p4webportal/phmSearcher", {
		method: "get",
		parameters: {action: "GET_CRITERIA"},

		onSuccess: function(transport){
			var resp = transport.responseXML;
			if (resp.getElementsByTagName("script")[0]){
				eval(resp.getElementsByTagName("script")[0].childNodes[0].nodeValue);
			}else if (resp.getElementsByTagName("form-fields")[0]){
			
				var language = getDOMChildText(resp.getElementsByTagName("form-fields")[0], "language");
				searchFormLanguage = language;


				var formBody = "<div>";

				var groups = getDOMChildElements(resp.getElementsByTagName("form-fields")[0], "property-group");
				groups.each(function(elem, i){
					var group = createGroupFromElement(elem);
					formBody = renderGroup(group, language, formBody);
				});

				formBody += "</div>";
									
				document.getElementById("searchFormBox").innerHTML += formBody;

			}		
		},

		onException: function(request, e) {
			throw e;
		}
	});
	
}

function showSearchPhoneResultsPage(page) {
	var browserContainer = $('telefonyMultimedialne');
	browserContainer.innerHTML = '';
	var i1, i2;
	if (page != undefined) {
		i1 = (page-1) * allPhonesBrowserItemsPerPage;
		i2 = Math.min(i1 + allPhonesBrowserItemsPerPage, allPhoneModels.length);
		allPhonesBrowserLastViewedPage = page;
	} else {
		i1 = 0;
		i2 = allPhoneModels.length;
	}

	if(allPhoneModels.length > 0){
		currentlyBrowsedPhoneBoxes = new Array(allPhonesBrowserItemsPerPage);
		phoneBrowserBoxesCount = 0;
		allPhoneModels.slice(i1, i2).each(function(model, i) {
			new Ajax.Request(phoneResFolderUri + model.cmsId + "/small/box.html", {
				method: 'get',
				onSuccess: function(transport) {
					currentlyBrowsedPhoneBoxes[i] = transport.responseText;
					if (++phoneBrowserBoxesCount == i2-i1) {
						// Zakonczono pobieranie, wypluj wyniki
						browserContainer.innerHTML = currentlyBrowsedPhoneBoxes.join('');
						document.getElementsByClassName("phone",
							browserContainer).each(function(box, j) {
//							var header = document.getElementsByClassName(
//								"headBlack", box)[0];
//							header.appendChild(document.createTextNode(
//								allPhoneModels[j+i1].name));
//							if (j%3 == 2)
//								box.classNames().add("last");
							if(j == phoneBrowserBoxesCount-1){
								box.classNames().add("no_border");
							}
						});

						sIFR.replaceElement(".headBlack", 	named({sFlashSrc: sIFRFlashURL, sColor: "#000000", sWmode: "transparent"}));
						sIFR.replaceElement(".headGray", 	named({sFlashSrc: sIFRFlashURL, sColor: "#8f8d8f", sWmode: "transparent"}));	
						sIFR.replaceElement(".headPurple", 	named({sFlashSrc: sIFRFlashURL, sColor: "#541184", sWmode: "transparent"}));									
					}
				},
				onException: function(request, e) {
					throw e;
				}
			});
		});
	}else{
		var url = document.location.href;
		url = url.replace("/index.html", "");
		url = url.replace("/wyniki", "");
		
		if (searchFormLanguage == 'pl' || searchFormLanguage == '') {
			browserContainer.innerHTML = '<div class="notFound"><strong>Brak telefonów spełniających wybrane kryteria.</strong><br/><a href="' + url + '">Powrót</a></div>';
		} else {
			browserContainer.innerHTML = '<div class="notFound"><strong>No matching results found. No data avaliable for the selected criteria.</strong><br/><a href="' + url + '">Back</a></div>';
		}	
	}

}

function getSearchPhoneResultsList(callback) {
	new Ajax.Request('/p4webportal/phmSearcher', {
		method: 'get',
		parameters: {action: "GET_RESULTS"},
		onSuccess: function(transport) {
			var scriptNode = transport.responseXML.getElementsByTagName("script")[0];
			if (scriptNode) {
				eval(scriptNode.childNodes[0].nodeValue);
				return;
			}

			var phoneElements = $A(transport.responseXML.getElementsByTagName('phone-model'));
			var phones = new Array();
			phoneElements.each(function(elem) {
				phones.push({
					cmsId: elem.getElementsByTagName('cms-name')[0].childNodes[0].nodeValue,
					name: elem.getElementsByTagName('name')[0].childNodes[0].nodeValue
				});
			});

			callback(phones);
		},

		onException: function(request, e) {
			throw e;
		}
	});
}

function showSearchPhoneResults(searchResultUri){
	phoneResFolderUri = searchResultUri;
	getSearchPhoneResultsList(function(models) {

		allPhoneModels = models;
		showSearchPhoneResultsPage();
	});
}
