if ( typeof( NicoTyres ) == 'undefined' ) {
    NicoTyres = new Object();
}
NicoTyres.cautareAnvelope = new Object();
NicoTyres.cautareAnvelope.typo = {
    corect: null,
    gresit: null
}

NicoTyres.cautareAnvelope.ajaxRequest = {
    dimensiuni  : null,
    sezon       : null,
    marca       : null,
    tipAnvelope : null,
	pagina 		: 0
};

NicoTyres.cautareAnvelope.regExp = {
    sezoane: /iarna|vara|mixt|mixte|all\ seasons|all\ season/i,
    dimensiuni: new RegExp( "([0-9]+)[^0-9]+([0-9]+)[^0-9]*([0-9]*)", 'i' ),
    tipuriDeAnvelope: /camion|camioane|4\ {0}x\ {0}4|van|cargo|comerciale|comercial|turisme|autoturism|/i
};

NicoTyres.cautareAnvelope.reseteazaValori = function() {
    for ( index in NicoTyres.cautareAnvelope.ajaxRequest ) {
        NicoTyres.cautareAnvelope.ajaxRequest[index] = null;
    }
}

NicoTyres.cautareAnvelope.cauta = function() {
    verificaMarca = !( typeof( arguments[0] ) != 'undefined' && arguments[0] );
    NicoTyres.cautareAnvelope.reseteazaValori();
    if ( NicoTyres.xmlDocument == null ) {
        NicoTyres.loadXMLFromFile( NicoTyres.baseUrl + 'anvelope.xml' );
    }
    var cautare = $( 'cautare' );
    if ( cautare.value.length == 0 ) {
        NicoTyres.cautareAnvelope.eroare( 'Nu există anvelope care să corespundă criteriilor de căutare' );
        return;
    }

	new Ajax.Request(
		NicoTyres.baseUrl + '/anvelope/salveazaCautare/',
		{
			asynchronous 	: true,
			parameters 		: 'cautare=' + encodeURIComponent(cautare.value),
			method 			: 'post'
		}
	);

	var sirPrelucrat = cautare.value.toLowerCase();
	sirPrelucrat = sirPrelucrat.replace( /^\ +/i, '' );
	sirPrelucrat = sirPrelucrat.replace( /\ +$/i, '' );
	if ( sirPrelucrat.length == 0 ) {
		NicoTyres.cautareAnvelope.eroare( 'Nu există anvelope care să corespundă criteriilor de căutare' );
		return;
	}
	
	var sezon = sirPrelucrat.match( NicoTyres.cautareAnvelope.regExp.sezoane );
	if ( sezon != null ) {
		var sezoane = NicoTyres.xmlDocument.getElementsByTagName( 'sezon' );
		for ( var index = 0; index < sezoane.length; index++ ) {
			if ( sezon[0] == sezoane[index].firstChild.nodeValue ) {
				NicoTyres.cautareAnvelope.ajaxRequest.sezon = sezoane[index].getAttribute( 'cod' );
				break;
			}
		}
		sirPrelucrat = sirPrelucrat.replace( NicoTyres.cautareAnvelope.regExp.sezoane, '' );
	}
	var tip = sirPrelucrat.match( NicoTyres.cautareAnvelope.regExp.tipuriDeAnvelope );
	if ( tip != null ) {
		var tipuriDeAnvelope = NicoTyres.xmlDocument.getElementsByTagName( 'tip' );
		for ( var index = 0; index < tipuriDeAnvelope.length; index++ ) {
			if ( tip[0] == tipuriDeAnvelope[index].firstChild.nodeValue ) {
				NicoTyres.cautareAnvelope.ajaxRequest.tip = tipuriDeAnvelope[index].getAttribute( 'cod' );
				break;
			}
		}
		sirPrelucrat = sirPrelucrat.replace( NicoTyres.cautareAnvelope.regExp.tipuriDeAnvelope, '' );
	}

	var dimensiuni = sirPrelucrat.match( NicoTyres.cautareAnvelope.regExp.dimensiuni );
	if ( dimensiuni != null && typeof( dimensiuni[0] ) != 'undefined' ) {
		NicoTyres.cautareAnvelope.ajaxRequest.dimensiuni = dimensiuni[0];
	}

	if ( verificaMarca ) {
		var siruri = sirPrelucrat.split( ' ' );
		var marcaIntrodusa;
		if ( siruri.length == 0 ) {
			NicoTyres.cautareAnvelope.cautareAjax();
			return;
		}
		var lungimeaMaximaAMarcii = NicoTyres.xmlDocument.getElementsByTagName( 'lungimeaMaximaAMarcii' )[0].firstChild.nodeValue;
		for( var index = 0; index < siruri.length; index++ ) {
			marcaIntrodusa = siruri[index].toLowerCase();
			var marca = marcaIntrodusa;
			var numeMarci = NicoTyres.xmlDocument.getElementsByTagName( 'marca' );
			var distanta = 0;
			var distantaMaxima = lungimeaMaximaAMarcii;
			for ( var i = 0; i < numeMarci.length; i++ ) {
				if ( marcaIntrodusa == numeMarci[i].firstChild.nodeValue ) {
					NicoTyres.cautareAnvelope.ajaxRequest.marca = numeMarci[i].getAttribute( 'cheiePrimara' );
					break;
				}
				distanta = Levenshtein.distance( numeMarci[i].firstChild.nodeValue, marcaIntrodusa );
				if ( distanta < distantaMaxima && distanta > 0 ) {
					distantaMaxima = distanta;
					marca = numeMarci[i].firstChild.nodeValue;
				}
			}
			if ( distantaMaxima * 100 / marcaIntrodusa.length < 30 ) {
				NicoTyres.cautareAnvelope.typo.corect = marca;
				NicoTyres.cautareAnvelope.typo.gresit = marcaIntrodusa;
				NicoTyres.cautareAnvelope.confirmaMarca();
				return;
			}
		}
	}
    jBookmarker.set( 'q', cautare.value );
    NicoTyres.cautareAnvelope.cautareAjax();
}

NicoTyres.cautareAnvelope.pagina = function( index ) {
	jBookmarker.set('pagina', index);
	NicoTyres.cautareAnvelope.cauta();
}

NicoTyres.cautareAnvelope.confirmaMarca = function() {
    NicoTyres.cautareAnvelope.loading( false );
    var cautare = $( 'cautare' );
    new Effect.Appear( 'confirmare' );
    $( 'intrebare' ).innerHTML = 'Ai vrut să spui <span>"' + NicoTyres.cautareAnvelope.typo.corect + '"</span>?';
}

NicoTyres.cautareAnvelope.corecteaza = function() {
    $( 'confirmare' ).hide();
    var cautare = $( 'cautare' );
    var valoare = cautare.value;
    var regex = new RegExp( NicoTyres.cautareAnvelope.typo.gresit, 'i' );
    cautare.value = valoare.replace( regex, NicoTyres.cautareAnvelope.typo.corect );
    NicoTyres.cautareAnvelope.cauta();
}

NicoTyres.cautareAnvelope.cicaArFiCorect = function() {
    $( 'confirmare' ).hide();
    NicoTyres.cautareAnvelope.cautareAjax();
}

NicoTyres.cautareAnvelope.cautareAjax = function() {
    NicoTyres.cautareAnvelope.loading( true );
    var cautareValida = true;
    var params = '';
	NicoTyres.cautareAnvelope.ajaxRequest.pagina = jBookmarker.get('pagina');
    for( var index in NicoTyres.cautareAnvelope.ajaxRequest ) {
        params += index + '=' + NicoTyres.cautareAnvelope.ajaxRequest[index] + '&';
    }
    if ( params.length > 0 ) {
        params = params.substring( 0, params.length - 1 );
    }
    else {
        cautareValida = false;
    }
    if ( !cautareValida && typeof( arguments[0] ) == 'undefined' ) {
        NicoTyres.cautareAnvelope.eroare( 'Nu există anvelope care să corespundă criteriilor de căutare' );
        return;
    }
    new Ajax.Request( NicoTyres.baseUrl + 'cauta/',
                      { asynchronous:   true,
                        method:         'post',
                        parameters:     params,
                        onSuccess:      function( t ) {
                                            NicoTyres.cautareAnvelope.loading( false );
                                            if ( t.responseText.indexOf( '<!--nu exista rezultate-->' ) != -1 ) {
                                                NicoTyres.cautareAnvelope.eroare( 'Nu există anvelope care să corespundă criteriilor de căutare' );
                                            }
                                            else {
                                                $( 'lista_anvelope' ).innerHTML = t.responseText;
                                                NicoTyres.cautareAnvelope.loading( false );
                                            }
                                        } } );
}

NicoTyres.cautareAnvelope.eroare = function( mesaj ) {
    NicoTyres.cautareAnvelope.loading( false );
    var windowSize = window.getSize();
    $( 'wrapper_cos' ).style.top = ( windowSize.vScroll + 200 ) + 'px';
    $( 'raspuns_cos' ).innerHTML = mesaj;
    $( 'wrapper_cos' ).show();
}

NicoTyres.cautareAnvelope.loading = function( afiseaza ) {
    if ( !afiseaza ) {
        $( 'loader' ).hide();
    }
    else {
        $( 'loader' ).show();
    }
}

NicoTyres.init = function() {
    NicoTyres.loadXMLFromFile( 
		NicoTyres.baseUrl + 'anvelope.xml', 
		function() {
			var q = jBookmarker.get( 'q' );
			if ( q ) {
				$( 'cautare' ).value = q;
			}
			else {
				$( 'cautare' ).value = 'ex: Michelin 205/65/15 de vara';
			}

			var pagina = jBookmarker.get('pagina');
			if(pagina) {
				NicoTyres.cautareAnvelope.ajaxRequest.pagina = pagina;
			}
			NicoTyres.cautareAnvelope.cauta();
		}
	);
}

Event.observe( window, 'load', NicoTyres.init, false );

NicoTyres.detaliiAnvelopa = function( id ) {
    new Ajax.Updater( 'detalii_anvelopa',
                      NicoTyres.baseUrl + '/anvelope/detalii/',
                      { asynchronous:   true,
                        method:         'post',
                        parameters:     'id=' + id + '&mod=' + mod,
                        onSuccess:      function() {
                                            var windowSize = window.getSize();
                                            $( 'detalii_anvelopa' ).style.top = ( windowSize.vScroll + 50 ) + 'px';
                                            $( 'detalii_anvelopa' ).show();
                                        } } );
}
