/**
 * This file needs some serious cleaning when its done.
 */

function getAdsFromAB() {
	var cid = $('category').value;
	var brandBox = $('brand');
	var bName = brandBox.selectedIndex > 0 ? brandBox[brandBox.selectedIndex].innerHTML : undefined;

	new Ajax.Updater('hmm', '../modellkatalogen/ajax_annonsborsen_ads.php', {
		method: 'get',
		parameters: {categoryId: cid, brandName: bName},
		insertion: Insertion.After
	});
}

function getBrands() {
	new Ajax.Updater($('brand'), '../modellkatalogen/ajax_brands.php', {
		method: 'get',
		parameters: { category: $F('category') },
		onComplete: function(transport) {
			if( $('brand').descendants().length > 1 ) {
    			$('brand').enable();
			} else {
				$('brand').disable();
				$('model').disable();
			}
			getModels();
//			$('beds').disable();
		}
	})

}

function getModels() {
	new Ajax.Updater($('model'), '../modellkatalogen/ajax_models.php', {
		method: 'get',
		parameters: { brand: $F('brand') },
		onComplete: function(transport) {
			if( $('model').descendants().length > 1 ) {
    			$('model').enable();
			} else {
				$('model').disable();
			}
		}
	})
}


function checkBoxes() {
	// find all checkboxes that are checked
	var checked = $('searchResult').getInputs('checkbox').pluck('checked').findAll(function(s) {return s == true})
	// get all parents
//	var parents = this.getOffsetParent().ancestors().each( function(t) {return t.nodeName})
	var parents = this.ancestors()

	if(checked.length > 3) {
		$(this).checked = false;
		alert("Bara 3 åt gången!");
	} else {
		// change class on the tr element based on if element is checked or not. (table.catalogue-list tr.one | checked)
		$(this).checked ? parents[1].className="checked" : parents[1].className="one"
	}
}
// add beds and price parameters here
function updateSearchResult() {
	var sBoxes = $('modelPage') == null ? 1 : 0;
	var cid = $('category').value
	bid = $('brand').value
	mid = $('model').value
	off = $('offset').value
	bed = $('beds').value
	pri = $('price').value
	lim = 10

	lastTrWithId = $$('#searchTable tr[id]').last()

	new Ajax.Request('../modellkatalogen/ajax_update_search.php', {
		method:'get',
		parameters: {categoryId: cid, brandId: bid, modelId: mid, offset: off, limit: lim, beds: bed, price: pri, showBoxes: sBoxes},
		onSuccess: function(transport) {
			var response = transport.responseText || "nothing returned";
			lastTrWithId.insert({after : response})
			$('offset').value = Number(off) + Number(lim)
//			alert("Success! " + response);
		},
		onFailure: function() {
			alert("Error...");
		}
	});
}

function saveUserModel() {
	var checked = $('searchResult').getInputs('checkbox').findAll(function(s){ return s.checked })

	if(checked.length == 0) {
		alert("Gör en sökning först.")
		return	
	}
	var mid = Form.serializeElements(checked)
	var uid = $('userId').value;

	new Ajax.Request('../modellkatalogen/ajax_user_save.php', {
		method: 'post',
		parameters: {modelIds: mid, userId: uid},		
		onSuccess: function(transport) {
			var response = transport.responseText || "nothing returned";
			$('saveTable').show()
			$$('#saveTable tr[id]').first().insert({after:response})
			addListener()
			$('saveTitle').update("Dina sparade modeller")
//			alert("Success! " + response);
		},
		onFailure: function() {
			alert("error in save...");	
		}
	});
}

//for now
function addListener() {
 	$$('#saveResult input[type=checkbox]').each(function(s){
		s.observe('click', disableOtherCategories);
		s.observe('click', changeColor);
	});
}

function removeUserModel() {
	var checked = $$('#saveTable input[type=checkbox]').findAll(function(s){ return s.checked })
	var mid = Form.serializeElements(checked)
	var uid = $('userId').value;

	// get all ids of rows we want to remove
	var ids = $$('#saveTable input[type=checkbox]').findAll(function(s){ return s.checked }).pluck('value')
	var token = 'model_'
	var allBoxes = $$('#saveTable input[type=checkbox]')

	new Ajax.Request('../modellkatalogen/ajax_user_remove.php', {
		method: 'post',
		parameters: {modelIds: mid, userId: uid},
		onSuccess: function(transport) {
			var response = transport.responseText || "nothing returned";
			ids.each(function(tt){$(token+tt).remove()})
			allBoxes.each(function(e){e.ancestors()[1].className='one'; e.enable()})

			if(allBoxes.length == ids.length) {
				$('saveTable').hide()
				$('saveTitle').update("Inga sparade modeller")
			}
//			alert("Success! " + response);
		},
		onFailure: function() {
			alert("error in save...");
		}
	});
}

function changeColor() {
	var parents = this.ancestors()
	$(this).checked ? parents[1].className="checked" : parents[1].className="one"
}

function checkLimit(formId) {
	var checked = $(formId).getInputs('checkbox').pluck('checked').findAll(function(s) {return s == true})

	if(checked.length == 0) {
		alert("Väl minst en!");
		return false;
	}
	if(checked.length > 4) {
		alert("Välj max 4 åt gången!");
		return false;
	}
	if($('modelsToCompare') != null && $('clicked').lang != 'pressed') {

		if( $$('#modelsToCompare td[id]').size() + checked.length > 4 ) {
			alert("max 4 objekt i jämförelsen!!");
			return false;	
		}
	}
}

function disableOtherCategories() {
	var allBoxes = $$('#saveTable input[type=checkbox]');
	var checked = allBoxes.findAll(function(s){ return s.checked });

	//none is selected so we set original class on all rows in table
	if(checked.length == 0) {
		allBoxes.each(function(e){
			e.ancestors()[1].className='one';
			e.enable();
		})
		return
	}
	var cName = this.className
	//find all checkboxes that doesnt have the same class name as the box klicked on.each i.e other category.
	var diffrentCategory = $$('#saveTable input[type=checkbox]:not(.'+cName+')')
	//make them stand out and disable
	diffrentCategory.each(function(e) {
		e.ancestors()[1].className = 'dis';
		e.disable();
	})
}

Event.observe(window, 'load', function() {
	$('category').observe('change', getBrands);
	$('brand').observe('change', getModels);
	
	// all checkboxes inside the element with id = searchResult
	$$('#searchResult input[type=checkbox]').each(function(s){
		s.observe('click', changeColor);
	});

	$('viewMoreButton').observe('click', updateSearchResult);
	
	$('saveModelButton').observe('click', saveUserModel);
	$('removeModelButton').observe('click', removeUserModel);
	// all checkboxes inside the element with id = saveResult
	$$('#saveResult input[type=checkbox]').each(function(s){
		s.observe('click', disableOtherCategories);
		s.observe('click', changeColor);
	});

	$('ttt').observe('click', checkLimit);

});

/* Print specified section */
(function($) {
	var counter = 0;
	var modes = { iframe : "iframe", popup : "popup" };
	var defaults = { mode     : modes.iframe,
						popHt    : 500,
						popWd    : 400,
						popX     : 200,
						popY     : 200,
						popTitle : '',
						popClose : false };

	var settings = {};//global settings

	$.fn.printArea = function( options )
	{
		$.extend( settings, defaults, options );

		counter++;
		var idPrefix = "printArea_";
		$( "[id^=" + idPrefix + "]" ).remove();
		var ele = getFormData( $(this) );

		settings.id = idPrefix + counter;

		var writeDoc;
		var printWindow;

		switch ( settings.mode )
		{
			 case modes.iframe :
				  var f = new Iframe();
				  writeDoc = f.doc;
				  printWindow = f.contentWindow || f;
				  break;
			 case modes.popup :
				  printWindow = new Popup();
				  writeDoc = printWindow.doc;
		}

		writeDoc.open();
		writeDoc.write( docType() + "<html>" + getHead() + getBody(ele) + "</html>" );
		writeDoc.close();

		printWindow.focus();
		printWindow.print();

		if ( settings.mode == modes.popup && settings.popClose )
			 printWindow.close();
	};

	function docType()
	{
		if ( settings.mode == modes.iframe || !settings.strict ) return "";

		var standard = !settings.strict ? " Trasitional" : "";
		var dtd = !settings.strict ? "loose" : "strict";

		return '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01' + standard + '//EN" "http://www.w3.org/TR/html4/' + dtd +  '.dtd">';
	}

	function getHead()
	{
		var head = "<head><title>" + settings.popTitle + "</title>";
		$(document).find("link")
			.filter(function(){
				return $(this).attr("rel").toLowerCase() == "stylesheet";
			})
			.filter(function(){ // this filter contributed by "mindinquiring"
				var media = $(this).attr("media");
				return (media.toLowerCase() == "" || media.toLowerCase() == "print")
			})
			.each(function(){
				head += '<link type="text/css" rel="stylesheet" href="' + $(this).attr("href") + '" >';
			});
		head += "</head>";
		return head;
	}

	function getBody( printElement )
	{
		return '<body><div class="' + $(printElement).attr("class") + '">' + $(printElement).html() + '</div></body>';
	}

	function getFormData( ele )
	{
		$("input,select,textarea", ele).each(function(){
			// In cases where radio, checkboxes and select elements are selected and deselected, and the print
			// button is pressed between select/deselect, the print screen shows incorrectly selected elements.
			// To ensure that the correct inputs are selected, when eventually printed, we must inspect each dom element
			var type = $(this).attr("type");
			if ( type == "radio" || type == "checkbox" )
			{
				if ( $(this).is(":not(:checked)") ) this.removeAttribute("checked");
				else this.setAttribute( "checked", true );
			}
			else if ( type == "text" )
				this.setAttribute( "value", $(this).val() );
			else if ( type == "select-multiple" || type == "select-one" )
				$(this).find( "option" ).each( function() {
					if ( $(this).is(":not(:selected)") ) this.removeAttribute("selected");
					else this.setAttribute( "selected", true );
				});
			else if ( type == "textarea" )
			{
				var v = $(this).attr( "value" );
				if ($.browser.mozilla)
				{
					if (this.firstChild) this.firstChild.textContent = v;
					else this.textContent = v;
				}
				else this.innerHTML = v;
			}
		});
		return ele;
	}

	function Iframe()
	{
		var frameId = settings.id;
		var iframeStyle = 'border:0;position:absolute;width:0px;height:0px;left:0px;top:0px;';
		var iframe;

		try
		{
			iframe = document.createElement('iframe');
			document.body.appendChild(iframe);
			$(iframe).attr({ style: iframeStyle, id: frameId, src: "" });
			iframe.doc = null;
			iframe.doc = iframe.contentDocument ? iframe.contentDocument : ( iframe.contentWindow ? iframe.contentWindow.document : iframe.document);
		}
		catch( e ) { throw e + ". iframes may not be supported in this browser."; }

		if ( iframe.doc == null ) throw "Cannot find document.";

		return iframe;
	}

	function Popup()
	{
		var windowAttr = "location=yes,statusbar=no,directories=no,menubar=no,titlebar=no,toolbar=no,dependent=no";
		windowAttr += ",width=" + settings.popWd + ",height=" + settings.popHt;
		windowAttr += ",resizable=yes,screenX=" + settings.popX + ",screenY=" + settings.popY + ",personalbar=no,scrollbars=no";

		var newWin = window.open( "", "_blank",  windowAttr );

		newWin.doc = newWin.document;

		return newWin;
	}
})(jQuery);
