var BasePath = 'http://' + host;

function successHandler(o){
  o.argument[0].innerHTML = o.responseText;
  InitData();
  if (o.argument[1].options.length == 0) {ClearCombo(o.argument[1]);}
}  
 
function failureHandler(o){  
  alertAjaxFailure(o, (window.AP_SIF_ERROR_GET_LOCALITY || 'Грешка при извличане на местоположението.'))   
} 

function SelectSearchResult(id) {
  YAHOO.util.Connect.asyncRequest('GET', BasePath + "/sif/data/selectLocality.asp?id=" + id, oCallbackSelect);
}

function SelectValueAddIfNotExists(c, v, t) {
  if (! isThereValueInCombo(c, v)) {
    var newOption = document.createElement('option');   
    newOption.text = t;         
    newOption.value = v;  
    AddOption(c, newOption);   
  }
  c.value = v;
}

function shSelect(o) {
  divResult = o.argument;
   
  locs = o.responseXML.getElementsByTagName("combo");
  
  if (locs.length == 3) {
    lastComboIndexChanged = -1;
    lastId = -1;
                                                                         
    if (locs[0].getAttribute("id") != '') { 
      SelectValueAddIfNotExists(combos[0][0], locs[0].getAttribute("id"), locs[0].getAttribute("name"));
      //combos[0][0].value = locs[0].getAttribute("id");
      lastComboIndexChanged = 0;
      lastId = locs[0].getAttribute("id");
    }
    
    if (locs[1].getAttribute("id") != '') {
      if (! isThereValueInCombo(combos[1][0], locs[1].getAttribute("id"))) {
        LoadComboForId(0, combos[0][0].value, locs[1].getAttribute("id"));
      } else {
        SelectValueAddIfNotExists(combos[1][0], locs[1].getAttribute("id"), locs[1].getAttribute("name"));
        //combos[1][0].value = locs[1].getAttribute("id");
      }
      lastComboIndexChanged = 1;
      lastId = locs[1].getAttribute("id");
    } else {
      ClearCombo(combos[1][0]);
    }
    
    if (locs[2].getAttribute("id") != '') {
      if (! isThereValueInCombo(combos[2][0], locs[2].getAttribute("id"))) {            
          LoadComboForId(1, locs[1].getAttribute("id"), locs[2].getAttribute("id"));
      } else {
          SelectValueAddIfNotExists(combos[2][0], locs[2].getAttribute("id"), locs[2].getAttribute("name"));
          //combos[2][0].value = locs[2].getAttribute("id");
      }
      lastComboIndexChanged = 2;
      lastId = locs[2].getAttribute("id");
    } else {
      ClearCombo(combos[2][0]);
    }
    
    
    if ((lastComboIndexChanged != -1) && (lastComboIndexChanged != 2)) {
      LoadComboForId(lastComboIndexChanged, lastId, 0);
    }
    
  } else {
    alert((window.AP_SIF_ERROR_CHOOSE || 'Грешка при избора'));
  }     
  
  HideSearch();                                                      
}


function ClearAllCombos() {
    for (var i = 1; i< combos.length; i++) {
       ClearCombo(combos[i][0]);
    }
}

function LoadComboForId(comboIndex, locId, selectedId) {

    StartLoadingCombo(combos[comboIndex+1][0]);
    selectId = combos[comboIndex+1][2] ;
	  YAHOO.util.Connect.asyncRequest('GET', BasePath + "/sif/data/getLocalities.asp?id=" + locId + "&selectId=" + selectId + "&comboIndex="+(comboIndex+1) + '&selectedId='+selectedId , combos[comboIndex][1]);  
}


function fhSelect(o) {
   alert((window.AP_SIF_ERROR_CHOOSE || 'Грешка при избора'));
}

function shSearch(o) {
  divResult = o.argument;
  var root = o.responseXML.documentElement;
  locs = root.getElementsByTagName("locality");
  divResult.innerHTML = "";
  cap = document.getElementById('divResultsCaption');
  cap.style.display = 'block';
       
  normalizeHeight(locs.length, divResult)     
                         
  if (locs.length > 0) { 
    newList = document.createElement('ul'); 
    divResult.appendChild( newList );  
             
    for (var i = 0; i < locs.length; i++) {
        newItem = document.createElement('li'); 
        newA = document.createElement('a');   
        caption = locs[i].getAttribute("type") + ' ' + locs[i].getAttribute("name") + ', ' + locs[i].getAttribute("parent_type") + ' ' + locs[i].getAttribute("parent_name")+ ', ' + locs[i].getAttribute("grandparent_type") + ' ' + locs[i].getAttribute("grandparent_name");
     
        newA.setAttribute( 'href', 'javascript:SelectSearchResult('+locs[i].getAttribute("id")+');' );
        newA.appendChild( document.createTextNode( caption ) );
        newItem.appendChild( newA );
        newList.appendChild( newItem );
    }                     
  } else {
    divResult.innerHTML = '<div class="lblNoResult">' + (window.AP_SIF_NO_LOCALITIES_FOUND || "Няма намерени местоположения") + '</div>';
  }   
}

function fhSearch(o) {
   alertAjaxFailure(o, (window.AP_SIF_ERROR_SEARCH || 'Грешка при търсенето'))   
}


var cmbCity = document.getElementById('city');
var cmbRegion = document.getElementById('region');
var cmbStreet = document.getElementById('street');

var divCity = document.getElementById('divCity');
var divRegion = document.getElementById('divRegion');
var divStreet = document.getElementById('divStreet');

 
var oCallback1 = { success: successHandler, failure: failureHandler,  argument:[divRegion,cmbRegion], timeout:300000   }  
var oCallback2 = { success: successHandler, failure: failureHandler,  argument:[divStreet,cmbStreet], timeout:30000   }  
var oCallbackSearch = { success: shSearch, failure: fhSearch, timeout: 30000 }
var oCallbackSelect = { success: shSelect, failure: fhSelect, timeout: 30000 }

var combos = [[cmbCity, oCallback1, 'city'], [cmbRegion,oCallback2, 'region'], [cmbStreet, null, 'street']];  



function InitData()
{
  cmbCity = document.getElementById('city');
  cmbRegion = document.getElementById('region');
  cmbStreet = document.getElementById('street');
  
  divCity = document.getElementById('divCity');
  divRegion = document.getElementById('divRegion');
  divStreet = document.getElementById('divStreet');  
  
  oCallback1.argument[0] = divRegion;
  oCallback1.argument[1] = cmbRegion;
  
  oCallback2.argument[0] = divStreet;
  oCallback2.argument[1] = cmbStreet;
  
  combos[0][0] = cmbCity;
  combos[1][0] = cmbRegion;
  combos[2][0] = cmbStreet;
  
}  


function LoadCombo(comboIndex, selectedValue){
  if (combos[comboIndex][0].value != 0 && combos[comboIndex][0].value > -100)  {
    for (var i = comboIndex+2; i< combos.length; i++) {
       ClearCombo(combos[i][0]);   
    }
    StartLoadingCombo(combos[comboIndex+1][0]);  
    selectId = combos[comboIndex+1][2] ;
    YAHOO.util.Connect.asyncRequest('GET', BasePath + "/sif/data/getLocalities.asp?id=" + combos[comboIndex][0].value + "&selectId=" + selectId + "&comboIndex="+(comboIndex+1) , combos[comboIndex][1]);
    
  }   
}


function SearchLocality(str) {
   if (checkMinSearchTextLength(str)) {
     YAHOO.util.Connect.asyncRequest('GET', BasePath + "/sif/data/searchLocalities.asp?query=" + escape(str), oCallbackSearch);
   } 
}

//---- Product Search ----------------------------


function shSearchProduct(o) {
  divResult = document.getElementById('divProductResult'); //o.argument;
  var root = o.responseXML.documentElement;
  types = root.getElementsByTagName("type");
  divResult.innerHTML = "";
  cap = document.getElementById('divProductResultsCaption');
  cap.style.display = 'block';
    
  normalizeHeight(types.length, divResult)
                         
  if (types.length > 0) { 
    newList = document.createElement('ul'); 
    divResult.appendChild( newList );  
             
    for (var i = 0; i < types.length; i++) {
        newItem = document.createElement('li'); 
        newItem.setAttribute( 'id', 'liSearchProduct'+types[i].getAttribute("id"));
        newA = document.createElement('a');   
        caption = types[i].getAttribute("name");
     
        newA.setAttribute( 'href', 'javascript:SelectProductSearchResult('+types[i].getAttribute("id")+',"'+types[i].getAttribute("name")+'", this);' );
        newA.appendChild( document.createTextNode( caption ) );
        newItem.appendChild( newA );
        newList.appendChild( newItem );
    }                     
  } else {
    divResult.innerHTML = '<div class="lblNoResult">' + (window.AP_SIF_NO_PRODUCTS_FOUND || 'Няма намерени продукти') + '</div>';
  }  
}


var oCallbackSearchProduct = { success: shSearchProduct, failure: fhSearch, timeout: 30000 }

function SearchProduct(str, params) {
   if (checkMinSearchTextLength(str)) {
     YAHOO.util.Connect.asyncRequest('GET', BasePath + "/sif/data/searchProduct.asp?query=" + escape(str) + (params ? '&' + params: ''), oCallbackSearchProduct);
   } 
}

function SelectProductSearchResult(id, text) {
   combo = document.getElementById('types');
   if (combo.value != id) {
     var index = IndexOfValueInCombo(combo, id);
     if (index > -1) {
        combo.value = id;
     } else {
        EnableCombo(combo);
        var newOption = document.createElement('option');   
        newOption.text = text;         
        newOption.value = id;  
        AddOption(combo, newOption); 
        combo.value = id;
     }
     
     if (window.ProductChange) {ProductChange();}
   }
   HideElement("divProductSearch")
}

function normalizeHeight(elementsCount, div) {
  if (elementsCount > 7) {
    div.style.overflow = 'auto';
    div.style.height = '100px';
  } else {
    div.style.overflow = '';  
    div.style.height = 'auto';
  }
}


//---- Trademark Search ----------------------------
function shSearchTrademark(o) {
  divResult = document.getElementById('divTrademarkResult'); //o.argument;
  var root = o.responseXML.documentElement;
  types = root.getElementsByTagName("tm");
  divResult.innerHTML = "";
  cap = document.getElementById('divTrademarkResultsCaption');
  cap.style.display = 'block';
    
  normalizeHeight(types.length, divResult)
                          
  if (types.length > 0) { 
    newList = document.createElement('ul'); 
    divResult.appendChild( newList );  
             
    for (var i = 0; i < types.length; i++) {
        newItem = document.createElement('li'); 
        newA = document.createElement('a');   
        caption = types[i].getAttribute("name");
     
        newA.setAttribute( 'href', 'javascript:SelectTrademarkSearchResult('+types[i].getAttribute("id")+',"'+types[i].getAttribute("name")+'");' );
        newA.appendChild( document.createTextNode( caption ) );
        newItem.appendChild( newA );
        newList.appendChild( newItem );
    }                     
  } else {
    divResult.innerHTML = '<div class="lblNoResult">' + (window.AP_SIF_NO_TRADEMARKS_FOUND || 'Няма намерени марки') + '</div>';
  }  
}


var oCallbackSearchTrademark = { success: shSearchTrademark, failure: fhSearch, timeout:30000 }

function checkMinSearchTextLength(str) {
  Result = isSearchTextLengthValid(str);
  if (!Result) {
    alert((window.AP_SIF_MIN_SYMBOLS || 'Въведете минимум 3 символа!'));
  }
  return Result;
}

function isSearchTextLengthValid(str) {  
   return str.length > 2;
}

function SearchTrademark(str) {
   if (checkMinSearchTextLength(str)) {
     YAHOO.util.Connect.asyncRequest('GET', BasePath + "/sif/data/searchTrademark.asp?query=" + escape(str), oCallbackSearchTrademark);
   } 
}

function SelectTrademarkSearchResult(id, text) {
   combo = document.getElementById('trademark');
   if (combo.value != id) {
     var index = IndexOfValueInCombo(combo, id);
     if (index > -1) {
        combo.value = id;
     } else {
        EnableCombo(combo);
        var newOption = document.createElement('option');   
        newOption.text = text;         
        newOption.value = id;  
        AddOption(combo, newOption); 
        combo.value = id;
     }
     
     if (window.TrademarkChange) {TrademarkChange();}
   }
   HideElement("divTrademarkSearch")
}
