var g_configReturnStatus = 0;

function createYakCookie(name,value) {
   createCookie(name,value,7);
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function getYearList() {
   $.getJSON(
      _appPath + '/AjaxService/GetYears.aspx', 
      function(j) {
         var cookie = readCookie( 'yak_fit_year' );
         var options = '<option value="">Select a Year...</option>';
         var yearValue = '';
         var selectedIndex = 0;
         
         for( i = 0; i < j.length; ++i ) {
            var isSelected = false;
            if( cookie == j[i].optionValue ) {
               yearValue = j[i].optionValue;
               $( '#configCurrentYear' ).html( j[i].optionDisplay );
               selectedIndex = i + 1;
               isSelected = true;
            }
            options += '<option value="' + j[i].optionValue + '"' + (isSelected?' selected':'') + '>' + j[i].optionDisplay + '</option>';
         }
         
         $( 'select#dropdownyear' ).html(options);
         $( 'select#dropdownyear' ).next().hide();
         $( 'select#dropdownyear' ).each( function() { this.selectedIndex = selectedIndex; } );
         
         getMakeList( yearValue );
      }   
   );
}

function getMakeList( yearValue ) {
   $.getJSON(
      _appPath + '/AjaxService/GetMakes.aspx', 
      { year: yearValue },
      function(j) {
         var cookie = readCookie( 'yak_fit_make' );
         var options = '<option value="">Select a Make...</option>';
         var makeValue = '';
         var selectedIndex = 0;
         
         for( i = 0; i < j.length; ++i ) {
            var isSelected = false;
            if( cookie == j[i].optionValue ) {
               makeValue = j[i].optionValue;
               createYakCookie( 'yak_fit_make_display', j[i].optionDisplay );
               isSelected = true;
               selectedIndex = i + 1;
            }
            options += '<option value="' + j[i].optionValue + '"' + (isSelected?' selected':'') + '>' + j[i].optionDisplay + '</option>';
         }
         
         $( 'select#dropdownmake' ).html(options);
         $( 'select#dropdownmake' ).next().hide();
         $( 'select#dropdownmake' ).each( function() { this.selectedIndex = selectedIndex; } );
         
         if( makeValue.length > 0 && yearValue.length > 0 ) {
            $( 'select#dropdownmodel' ).show();
            $( 'select#dropdownmodel' ).next().show();
            $( 'select#dropdownmodel' ).html('<option value="">Retrieving values...</option>')
            getModelList( makeValue, yearValue );
         } else {
            $( 'select#dropdownmodel' ).hide();
            $( 'select#dropdownmodel' ).next().hide();
         }
      }		   
   )
}

function getModelList( makeValue, yearValue ) {
   $.getJSON(
      _appPath + '/AjaxService/GetModels.aspx', 
      { year: yearValue, makeId: makeValue },
      function(j) {
         var cookie = readCookie( 'yak_fit_model' );
         var options = '<option value="">Select a Model...</option>';
         var modelValue = '';
         var selectedIndex = 0;
         
         for( i = 0; i < j.length; ++i ) {
            var isSelected = false;
            
            if( cookie == j[i].optionValue ) {
               modelValue = j[i].optionValue;
               createYakCookie( 'yak_fit_model_display', j[i].optionDisplay );

               if( getHiddenWidgetFactoryRackValue() ) {
                  showFactoryRackQuestion();
               } else if( getHiddenWidgetHitchValue() ) {
                  showHitchQuestion();
               }
               
               selectedIndex = i + 1;               
               isSelected = true;
            }
            options += '<option value="' + j[i].optionValue + '"' + (isSelected?' selected':'') + '>' + j[i].optionDisplay + '</option>';
         }
         
         //alert( options );
         
         $( 'select#dropdownmodel' ).html(options);
         $( 'select#dropdownmodel' ).next().hide();
         $( 'select#dropdownmodel' ).each( function() { this.selectedIndex = selectedIndex; } );
         
         $( 'input#buttoncheck' ).each( function() { this.disabled = false; } );
      }
   );
}

function showFactoryRackQuestion() {
   $( '#configOptionFactoryRack' ).show();
}

function showHitchQuestion() {
   $( '#configOptionHitch' ).show();
}

function attachSelectYearChangeEvent() {
   $( 'select#dropdownyear' ).change(
      function() {
         var yearValue = this.options[this.selectedIndex].value;
         
         createYakCookie( 'yak_fit_year', yearValue );
         
         $( 'select#dropdownmake' ).html('<option value="">Retrieving values...</option>')
         $( 'select#dropdownmake' ).next().show();

         getMakeList( yearValue );
      }
   );
}

function attachSelectMakeChangeEvent() {
   $( 'select#dropdownmake' ).change(
      function() {
         var makeValue = this.options[this.selectedIndex].value;
         var makeDisplay = this.options[this.selectedIndex].text;
         var yearValue = '';
         
         createYakCookie( 'yak_fit_make', makeValue );
         createYakCookie( 'yak_fit_make_display', makeDisplay );
         $( 'select#dropdownyear' ).each(
            function() {
               yearValue = this.options[this.selectedIndex].value;
            }
         );

         if( makeValue.length > 0 && yearValue.length > 0 ) {
            $( 'select#dropdownmodel' ).show();
            $( 'select#dropdownmodel' ).next().show();
            $( 'select#dropdownmodel' ).html('<option value="">Retrieving values...</option>')
            getModelList( makeValue, yearValue );
         } else {
            $( 'select#dropdownmodel' ).hide();
            $( 'select#dropdownmodel' ).next().hide();
         }
      }
   );
}

function attachSelectModelChangeEvent() {
   $( 'select#dropdownmodel' ).change(
      function() {
         var modelValue = this.options[this.selectedIndex].value;
         var modelDisplay = this.options[this.selectedIndex].text;
         
         createYakCookie( 'yak_fit_model', modelValue );
         createYakCookie( 'yak_fit_model_display', modelDisplay );
         
         if( getHiddenWidgetFactoryRackValue() ) {
            showFactoryRackQuestion();
         } else if( getHiddenWidgetHitchValue() ) {
            showHitchQuestion();
         } else {
            checkConfigurator();
         }
      }
   );
}

function attachSelectFactoryRackEvent() {
   $( '.factoryRack' ).click(
      function() {
         createYakCookie( 'yak_fit_rack', this.value );
         checkConfigurator();
      }
   );
}

function attachSelectHitchEvent() {
   $( '.hitch' ).click(
      function() {
         createYakCookie( 'yak_fit_hitch', this.value );
         checkConfigurator();
      }
   );
}

function attachButtonResetClickEvent() {
   $( '#configReset' ).click(
      function() {
         eraseCookie( 'yak_fit_year' );
         eraseCookie( 'yak_fit_make' );
         eraseCookie( 'yak_fit_make_display' );
         eraseCookie( 'yak_fit_model' );
         eraseCookie( 'yak_fit_model_display' );
         eraseCookie( 'yak_fit_rack' );
         eraseCookie( 'yak_fit_hitch' )
         
         $( '.factoryRack' ).each( function() { this.checked = false; } );
         $( '.hitch' ).each( function() { this.checked = false; } );
         
         $( '.configUI' ).hide();
         $( '#configOptions' ).show();
         getYearList();
      }
   );
}

function attachEvents() {
   attachSelectYearChangeEvent();
   attachSelectMakeChangeEvent();
   attachSelectModelChangeEvent();
   attachSelectFactoryRackEvent();
   attachSelectHitchEvent();
   attachButtonResetClickEvent();
}

function checkConfigCallBack(data) {
	//alert(data);
	g_configReturnStatus = data;
   //alert( 'configReturnStatus: ' + g_configReturnStatus );

   $( '.configUI' ).hide();
   $( '#configLoading' ).hide();
   if( g_configReturnStatus == 0 ) {
      $( '#configNoAnswer' ).show();
   } else if( g_configReturnStatus == 1 ) {
      $( '#configYesAnswer' ).show();
   } else if( g_configReturnStatus == 2 ) {
      $( '#configMaybeAnswer' ).show();
   } else if( g_configReturnStatus == 3 ) {
      $( '#configNoAnswer' ).show();
      //$( '#configYesButNeedHitchLarge' ).show();
   } else if( g_configReturnStatus == 4 ) {
      $( '#configNoAnswer' ).show();
      //$( '#configYesButNeedHitchSmall' ).show();
   } else if( g_configReturnStatus == 5 ) {
      $( '#configNoAnswer' ).show();
      //$( '#configYesButNeedHitchBall' ).show();
   }
   
   $( '#configCurrentMake' ).text( readCookie( 'yak_fit_make_display' ) );
   $( '#configCurrentYear' ).text( readCookie( 'yak_fit_year' ) );
   $( '#configCurrentModel' ).text( readCookie( 'yak_fit_model_display' ) );
   
   if( getHiddenWidgetFactoryRackValue() ) {
      $( '#configOther' ).text( 'Factory Rack? ' + readCookie( 'yak_fit_rack' ) );
   }
   
   if( getHiddenWidgetHitchValue() ) {
      $( '#configOther' ).text( 'Hitch? ' + readCookie( 'yak_fit_hitch' ) );
   }
   
   $( '#configCurrentChoice' ).show();
}

function getHiddenWidgetFactoryRackValue() {
   return ($( '#HiddenWidgetShowFactoryRack' ).val().toLowerCase() == 'true');
}

function getHiddenWidgetHitchValue() {
   return ($( '#HiddenWidgetShowHitch' ).val().toLowerCase() == 'true');
}


function checkConfigurator() {
   if( $( '#configLoading' ).length == 0 ) return;

   var year = readCookie( 'yak_fit_year' );
   var make = readCookie( 'yak_fit_make' );
   var model = readCookie( 'yak_fit_model' );
   var rack = readCookie( 'yak_fit_rack' );
   var hitch = readCookie( 'yak_fit_hitch' );
   
   var validYear = (year && year.length > 0);
   var validMake = (make && make.length > 0);
   var validModel = (model && model.length > 0);
   var validRack = (!getHiddenWidgetFactoryRackValue() || (getHiddenWidgetFactoryRackValue() && rack && rack.length > 0));
   var validHitch = (!getHiddenWidgetHitchValue() || (getHiddenWidgetHitchValue() && hitch && hitch.length > 0));
   
   if( validYear && validMake && validModel && validRack && validHitch ) {
      $( '.configUI' ).hide();
      $( '#configLoading' ).show();
      
      var url = _appPath + '/AjaxService/CheckConfig.aspx';

		var ajaxData = {
		'year': year,
		'model': model,
		'prodNumber': $('#HiddenProductNumber').val(),
		'categoryID': $('#HiddenCategoryID').val()
		};

		if( getHiddenWidgetFactoryRackValue() && rack == 'yes' ) {
			ajaxData['factoryRack'] = 'True';
		} else if( getHiddenWidgetHitchValue() && hitch == 'small' ) {
			ajaxData['hitchSmall'] = 'True';
		} else if( getHiddenWidgetHitchValue() && hitch == 'large' ) {
			ajaxData['hitchLarge'] = 'True';
		}

		$.get(url, ajaxData, checkConfigCallBack);
   } else {
      $( '.configUI' ).hide();
      $( '#configLoading' ).hide();
      $( '#configOptions' ).show();
      getYearList();
   }
}

$(document).ready( 
	function() {
	   checkConfigurator();
		attachEvents();
	}
);
