
  var dsGeneral = null; 
  var dsGalleries = null;
  var dsGallery = null;
  var dsPhotos = null;
  var dsLocales = null;
  var dsLocalProperties = null;
  var dsLocalPropertiesViewer = null;
  var dsLocalPropertiesAdds = null;
  var dsLocalPropertiesPriceList = null;
  var dsLocalPropertiesCheckOut = null;
  var dsLocalPropertiesAlerts = null;
  var dsLocalPropertiesActions = null;
  var dsLocalPropertiesDelivery = null;
  var dsLocalPropertiesPayment = null;
  var dsLocalPropertiesCountries = null;
  var dsLocalPropertiesOrderConfirmation = null;
  
  var dsShoppingCart = null;
  var dsCartSummary = null;
      
  var setFocusInScroll = true;
  
  var autoValue = 0;
  var sliderAutoIteration = 0;
  var sliderAutoIterationLimit = 30;
  
  var sliderControl = null;
  
  // EXTENTIONS
  
  String.prototype.trim = function() {   
    return this.replace(/(^\s*)|(\s*$)/g, "");
  };  
  
  var logo = new Image();
  logo.src="../images/logo.png";
  
  // DATASET EVENT HANDLERS
        
  var delay = 2000;
     
  function SliderControl(_categoriesCount, _scrollContent, _scrollPane) {
	  
    this.categoriesCount = _categoriesCount;
	this.scrollContent = _scrollContent;
	this.scrollPane = _scrollPane;
	this.summaryOffset = 0;
	this.stepOffset = 948;
	
	this.adjustMax = function () {
      this.adjust('0%', 0, delay/10);            
    };

    this.adjustMin = function () {      
      this.adjust('100%', -1 * this.getRemainder(), delay/10);            
    };
        
    this.adjust = function (percent, offset, actionDelay) {
      $(".ui-slider-handle").animate({'left' : percent}, actionDelay);
      this.scrollContent.animate({'left' : offset}, actionDelay);	
    };
        
    this.getRemainder = function () {
      var rem = this.scrollContent.innerWidth() - this.scrollPane.outerWidth() + 10;
      return rem;
    };	     
	      
	this.scrollMenu = function (forward) {
	  
	  var currentPercent = 0;
	  if(autoValue>=0) { 
	    autoValue=-1;
	    this.summaryOffset = 0;    		
	  }      	    	 	
	  	      	
	  var _stepOffset = this.stepOffset;
	  if(forward) {
	  	_stepOffset = -1 * _stepOffset;
	  } 	   	
	  	
	  if(this.summaryOffset>=this.getRemainder()) {
		if(!forward) {
		  // to prevent overdraw right go to start
		  this.summaryOffset = 0;
		  currentPercent = 0;    			
	    } else {
		  // one step left
		  this.summaryOffset=this.getRemainder();
		  this.summaryOffset += _stepOffset;
	  	  currentPercent = this.summaryOffset / this.getRemainder() * 100;
	    }   		
	  } else if(this.summaryOffset<=0 && forward) {
		// to prevent overdraw left go to end
		this.summaryOffset = this.getRemainder();
		currentPercent = 100;    		
	  } else if(this.getRemainder()-this.summaryOffset<_stepOffset) {    		
		this.summaryOffset = this.getRemainder();
		currentPercent = 100;
	  } else if(this.summaryOffset+_stepOffset<0 && forward) {	
		this.summaryOffset = 0;
		currentPercent = 0;
	  } else {
		this.summaryOffset += _stepOffset;
		currentPercent = this.summaryOffset / this.getRemainder() * 100;
	  }
	  this.adjust(currentPercent+'%', -1 * this.summaryOffset, delay);
	};
  }
  
  function initMenuSlider() {    
    // TOP MENU SLIDER
	var pageLoadTimeout = (logo.width > 0) ? 0 : 3000;			
	
	if(pageLoadTimeout>0) {    	
    	//setTimeout(enableScreen, pageLoadTimeout);
    	setTimeout(loadSlider, pageLoadTimeout);
    } else {
    	loadSlider();
    }    
  }
    
  function loadSlider() {
	  
	if(sliderControl==null) {  
		sliderControl = new SliderControl(dsGalleries.getData().length, $('.sliderContent'), $('div.sliderGallery'));	 
		$('.sliderGalleryNav .prev').click(function(){
		  sliderControl.scrollMenu(true);
		  return false;
		});
		
		$('.sliderGalleryNav .next').click(function(){		
		  sliderControl.scrollMenu(false);
		  return false;
		});
	}

    $('#pageContent').fadeIn(2000);
    
    /*
    var remainder = sliderControl.getRemainder();
    
    var scrollbar = $('.slider', sliderControl.scrollPane).slider({
      min: 0,
      max: remainder,
      animate: true,      
      stop: function (event, ui) {
  	  autoValue = -1;
        var offset = 150;
        var value = ui.value;
        sliderControl.scrollContent.animate({'left' : value * -1}, delay);
        if(value <= offset) {          
          sliderControl.adjustMax();
        } else if (value >= (remainder-offset)) {
          sliderControl.adjustMin();          
        }
      }
    });	              
    var handleHelper = scrollbar.find( ".ui-slider-handle" )
    .wrap( "<div class='ui-handle-helper-parent' style='width:744px;'></div>" ).parent();	      
    
    */
    hideActivity();
  }
  
  function enableScreen() {
	  fadeIn();
	  hideActivity();
  }
  
  function fadeIn() {
	  $('#pageContent').fadeIn(2000);
  }
  
  function hideActivity() {
	  $.fancybox.hideActivity();  
  }
  
  // ===== ShoppingCart on change =====
  function initOrderSelections() {
    
/*
 * $("#orderForm").validate({ messages: { selector: { required: 'Не заполнено!',
 * digits: 'Введите число!', max: 'Количество ограничено: {0}.' } } });
 */   
     
    
    var selectors = $("input.selector");    
    for(var i=0; i<selectors.length; i++) {
      var selector = selectors[i];      
      var id = selector.id.substring(3, selector.id.length);
      var shoppingCart = getShoppingCart();
      var value = shoppingCart.getCount(id);
      selector.value = value; 
      highlight(selector);
    }
    
    initDetailsPopup();
    
  }  
  function highlight (selectControl) {
    if(selectControl.value > 0) {
      selectControl.style.color = "#FFCC00";
      selectControl.style.fontWeight = 'bold';
    } else {    
      selectControl.style.color = '#B1B1BC';
      selectControl.style.fontWeight = 'normal';
    }  
  }
   
// ====================================
    
  $(document).ready(function(){
    
    $.fancybox.showActivity();
        
    $('a[rel="external"]').click(function(){
      $(this).attr('target','_blank');
    });
    
  });
  
  // ====================================
  
  window.onload = function () {    
        	  
	  // slideshow
	  dsGeneral = new Spry.Data.XMLDataSet("galleries/galleries.xml", "galleries", { useCache: false, loadInterval: 3600000 });
	  
	  try{
		  dsGalleries = new Spry.Data.XMLDataSet("galleries/galleries.xml", "galleries/gallery", { useCache: false, loadInterval: 3600000 });
	  } catch (exception) {
		  alert(exception.message);
	  }	  
	  dsGallery = new Spry.Data.XMLDataSet("galleries/{dsGalleries::@base}{dsGalleries::@file}", "gallery", { useCache: false, loadInterval: 3600000 });
	  dsPhotos = new Spry.Data.XMLDataSet("galleries/{dsGalleries::@base}{dsGalleries::@file}", "gallery/photos/photo", { useCache: false, loadInterval: 3600000 });
		
	  // Register a callback on the dsPhotos data set so we can turn
		// off the slide show before it attempts to load new data.
	
		dsPhotos.addObserver(function(nType, notifier, data) {
			if (nType == "onPreLoad")
				StopSlideShow();
		});
	  
	  dsLocales = new Spry.Data.XMLDataSet("i18n/locales.xml", "locales/locale", { useCache: false, loadInterval: 3600000 });
	  dsLocalProperties = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties", { useCache: false, loadInterval: 3600000 });
	  dsLocalPropertiesViewer = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties/image-viewer", { useCache: false, loadInterval: 3600000 });
	  dsLocalPropertiesAdds = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties/top-adds/add", { useCache: false, loadInterval: 3600000 });
	  dsLocalPropertiesPriceList = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties/price-list", { useCache: false, loadInterval: 3600000 });
	  dsLocalPropertiesCheckOut = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties/check-out", { useCache: false, loadInterval: 3600000 });
	  dsLocalPropertiesAlerts = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties/alerts", { useCache: false, loadInterval: 3600000 });
	  dsLocalPropertiesActions = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties/actions", { useCache: false, loadInterval: 3600000 });
	  dsLocalPropertiesDelivery = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties/delivery-methods/option", { useCache: false, loadInterval: 3600000 });
	  dsLocalPropertiesPayment = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties/payment-methods/option", { useCache: false, loadInterval: 3600000 });
	  dsLocalPropertiesCountries = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties/countries/option", { useCache: false, loadInterval: 3600000 });
	  dsLocalPropertiesOrderConfirmation = new Spry.Data.XMLDataSet("i18n/{dsLocales::@property-file}", "properties/order-notification", { useCache: false, loadInterval: 3600000 });
	  
	  dsShoppingCart = new Spry.Data.XMLDataSet(null, "/shoppingcart-records/record");
	  dsCartSummary = new Spry.Data.XMLDataSet(null, "/shoppingcartsum-records/record");
	        
	  
    // ===== CUSTOM COLUMNS =====
	  
    dsLocalProperties.setColumnType([ "currency/@currency-exchange" ], "string");
    function preprocessExchangeRateData(notificationType, notifier, data) {
      if (notificationType != "onPostLoad") { return; }
      var rows = dsLocalProperties.getData();
      var numRows = rows.length;       
      for (var i = 0; i < numRows; i++) {   
          var row = rows[i];
          var show = row["currency/@show-ratio"];
          var text = '';
          if(show=='true') {
            text = row["currency/@ratio-text"]+row["currency/@exchange-ratio"]+' '+row["currency/@name"];  
          }           
          row["currency/@currency-exchange"] = text;
      }
    }
    dsLocalProperties.addObserver(preprocessExchangeRateData);
 
    // ===== COOKIES =====
    
    if(testCookie()==false) {              
      document.getElementById('cookiesCheck').style.display='block';
    }
    
    getShoppingCart().refreshSpryDataset();
    
    function validateEmail(elementValue){
      if(elementValue==null || elementValue.trim().length==0) {
        return true;
      }
      var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;  
      return emailPattern.test(elementValue);  
    }
          
    initOrderForm();
    initQuestionForm();
    
    
  };
  
// ===== SHOPPING =====
  
function onCountryClick (idx){    
  dsLocales.setCurrentRowNumber(idx);
  setTimeout(function() {
    $( "#lang_"+idx ).hide().fadeIn();
  }, 100 );  
}

function onMenuClick (idx){   
  autoValue=-1; 
  dsGalleries.setCurrentRowNumber(idx);
  getShoppingCart().refreshSpryDataset(); 
  if (gSlideShowOn) StopSlideShow();        
}
 
function addToCart(businessId, count, name, quality, quantity, origin, price, tmbPath) {       
  $("#shoppingForm").validate();
  $("#orderForm").validate();
  
  var record = new ShoppingCartRecord(businessId, count, name, quality, quantity, origin, price, tmbPath);
  var shoppingCart = getShoppingCart();
  shoppingCart.setRecord(record);
  setShoppingCart(shoppingCart);    
  getShoppingCart().refreshSpryDataset();
}
  
function getCookieVal (offset) {
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1) { endstr = document.cookie.length; }
  return unescape(document.cookie.substring(offset, endstr));
}

function getCookie (name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg) {
      return getCookieVal (j);
    }
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break; 
  }
  return null;
}

function deleteCookie (name,path,domain) {
  if (getCookie(name)) {
    document.cookie = name + "=" +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

function setCookie (name,value,expires,path,domain,secure) {
  document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
}

// ===== shopping cart functions =====

function testCookie(){  
  setCookie('shoppingCartCookie', 'test');  
  var testValue = getCookie('shoppingCartCookie');
  if(!testValue) {    
    return false;
  } else {
    deleteCookie ('shoppingCartCookie');    
    return true;
  }  
}

function ShoppingCartRecord (_id, _count, _name, _quality, _quantity, _origin, _price, _tmbPath) {
  this.id=_id;
  this.count=replaceIfNaN( replaceIfEmpty(_count, 1), 1 ); 
  this.name=_name; 
  this.quality=_quality; 
  this.quantity=_quantity;
  this.origin=_origin; 
  this.price=_price;
  this.tmbPath=_tmbPath;
}

function replaceIfEmpty (value, defaultValue) {
  return (value==null || (''+value).trim()=='') ? defaultValue : value;
} 

function replaceIfNaN (value, defaultValue) {  
  if(value==null) {
    return defaultValue;
  }
  var digitPattern = /^[0-9]+$/;  
  var isNumber = digitPattern.test(value);
  return (!isNumber) ? defaultValue : value;
}

function ShoppingCartSummary (_count, _amount) {
  this.count=replaceIfNaN( replaceIfEmpty(_count, 1), 1 );
  this.amount=_amount;
}

function ShoppingCart () {
  this.recordKeys = new Array();
  this.map = new Object();  
  
  this.setRecord = function (record) {
    if(record.count!=null && !isNaN(parseInt(record.count))) {
      if(record.count>record.quantity) {
        record.count = record.quantity;
      } else {
        record.count = parseInt(record.count);
      }
    } else {
      record.count = 0;
    }
    var value = this.map[record.id];
    if(value==null) {
      this.recordKeys[this.recordKeys.length] = record.id;
    }
    this.map[record.id] = record;    
  };
  
  this.getCount = function (id) {
    var value = this.map[id];
    return (value==null) ? 0 : value.count;
  };
  
  this.getRecord = function (id) {
    var value = this.map[id];
    return value;
  };
  
  this.getSummary = function () {
    var count=0;
    var amount=0;
    for(var i=0; i<this.recordKeys.length; i++) {
      var id = this.recordKeys[i];      
      var _count = this.map[id].count;
      _count=replaceIfNaN( replaceIfEmpty(_count, 1), 1 );      
      var _price = this.map[id].price;
      eval("count+="+_count); 
      eval("amount+=("+_price+"*"+_count+")");
    }   
    return new ShoppingCartSummary(count, amount);
  };
  
  this.getOrderDataTableI18n = function () {
    var curRow = dsLocalPropertiesPriceList.getCurrentRow();    
    var tHead = '<thead><tr><th>ID</th><th>'
      + curRow['table-columns/@in-cart']
      + '</th><th>' 
      + curRow['table-columns/@name']
      + '</th><th>' 
      + curRow['table-columns/@quality']               
      + '</th><th>' 
      + curRow['table-columns/@origin'] 
      + '</th><th>' 
      + curRow['table-columns/@price'] 
      + '</th></thead>';
    return this.getOrderDataTableByHead(tHead);
  };
  
  this.getOrderDataTable = function () {
    return this.getOrderDataTableByHead('<thead><tr><th>ID</th><th>Количество</th><th>Название</th><th>Состояние</th><th>Происхождение материала</th><th>Цена(у.е.)</th></thead>');
  };
  
  this.getOrderDataTableByHead = function (tableTHead) { 
    var csvStr = '<table border="1">'+tableTHead+'\n';
    csvStr += '<tbody>';
    for(var i=0; i<this.recordKeys.length; i++) {
      var id = this.recordKeys[i];      
      var record = this.map[id];      
      if(parseInt(record.count)<=0) {
        continue;
      }      
      csvStr += '<tr><td>'+id+'</td><td>'+record.count+'</td><td>'+record.name+'</td><td>'+record.quality+'</td><td>'+record.origin+'</td><td>'+record.price+'</td><tr>\n';
    }
    csvStr += '</tbody></table>';
    return csvStr;    
  };
  
  this.getOrderMainXml = function () {
    var xmlStr ='<?xml version=\"1.0\" encoding=\"utf-8\"?>'
      +'<shoppingcart-records xmlns=\"http://www.global-insects.com/shoppingcart-records\">';
    for(var i=0; i<this.recordKeys.length; i++) {
      var id = this.recordKeys[i];      
      var record = this.map[id];      
      if(parseInt(record.count)<=0) {
        continue;
      }      
      xmlStr += '<record id=\"'+ id+ '\"' 
      + ' count=\"'+record.count+'\"' 
      + ' name=\"'+record.name+'\"'
      + ' quality=\"'+record.quality+'\"'
      + ' quantity=\"'+record.quantity+'\"'
      + ' origin=\"'+record.origin+'\"'
      + ' price=\"'+record.price+'\"'
      + ' tmbPath=\"'+record.tmbPath+'\"/>';
    }
    xmlStr+='</shoppingcart-records>';
    return xmlStr;
  };
  
  this.getOrderSummaryXml = function () {
    var summary = this.getSummary();
    var count = summary.count;
    var amount = summary.amount;
    var xmlStrSummary ='<?xml version=\"1.0\" encoding=\"utf-8\"?>'
      +'<shoppingcartsum-records xmlns=\"http://www.global-insects.com/shoppingcartsum-records\">' 
      +'\n<record count=\"'+count+'\" amount=\"'+amount+'\"/>'
      +'\n</shoppingcartsum-records>';
    return xmlStrSummary;
  };
  
  this.refreshSpryDataset = function () {	
	var xmlStr = this.getOrderMainXml();   
    var xmlDOMDocument = Spry.Utils.stringToXMLDoc(xmlStr);
    dsShoppingCart.setDataFromDoc(xmlDOMDocument);
    var xmlStrSummary = this.getOrderSummaryXml(); 
    var xmlDOMDocumentSummary = Spry.Utils.stringToXMLDoc(xmlStrSummary);    
    dsCartSummary.setDataFromDoc(xmlDOMDocumentSummary);    
  };  
  this.removeRecord = function (record) {
    record.count = 0;
    this.setRecord(record);    
  }; 
  this.serialize = function () {
    var result = "";
    for(var i=0; i<this.recordKeys.length; i++) {
      var id = this.recordKeys[i];      
      var record = this.map[id];
      result += id+"|"+record.count+"|"+record.name+"|"+record.quality+"|"+record.quantity+"|"+record.origin+"|"+record.price+"|"+record.tmbPath+"@";
    }
    return result;
  };
  this.deserialize = function (value) {
    var arr = value.split(/\@/);
    for(var i=0; i<arr.length; i++) { 
      var recordVal = arr[i];
      if(recordVal.length==0) {
        continue;
      }
      var recordArr = recordVal.split(/\|/);
      var record = new ShoppingCartRecord(recordArr[0], recordArr[1], recordArr[2], recordArr[3], recordArr[4], recordArr[5], recordArr[6], recordArr[7]);
      this.setRecord(record);
    }
  };
  this.clear = function () {
    this.recordKeys = new Array();
    this.map = new Object();
    setShoppingCartData('');
    this.refreshSpryDataset();
  };  
}

function getShoppingCart () {
  var value = getCookie('shoppingCartCookie');
  if(value==null) {
    value = $('#cart_value').val();
    if(value!=null) {
      setCookie('shoppingCartCookie', value);
    }
  }
  if(value==null) {
    return new ShoppingCart ();    
  } else {
    var cart = new ShoppingCart ();
    cart.deserialize(value);
    return cart;    
  }
}

function setShoppingCart (cart) { 
  var value = cart.serialize();
  setShoppingCartData (value);  
}

function setShoppingCartData (value) {
  setCookie('shoppingCartCookie', value);
  document.getElementById('cart_value').value = value;
}

function getQuestionBody() {
  var orderBody = '<html><body>'
    + '<h3>Сообщение</h3>\n'    
    + '\n<p>E-mail: '+ document.getElementById('questionEmail').value
    + '</p>\n<p>Сообщение: ' + document.getElementById('questionMessage').value
    + '</p></body></html>';
  return orderBody;  
}

function getPersonal() {
  var text =     
      '    \n<p>E-mail: '+ document.getElementById('email').value
    + '</p>\n<p>Способ оплаты: ' + document.getElementById('payment').value
    + '</p>\n<p>Доставка: ' + document.getElementById('delivery').value    
    + '</p>\n<p>Страна: ' + document.getElementById('country').value
    + '</p>\n<p>Населенный пункт: ' + document.getElementById('city').value    
    + '</p>\n<p>Почтовый индекс: ' + document.getElementById('postcode').value    
    + '</p>\n<p>Адрес: ' + document.getElementById('address').value        
    + '</p>\n<p>Фамилия: ' + document.getElementById('lastName').value
    + '</p>\n<p>Имя: ' + document.getElementById('firstName').value 
    + '</p>\n<p>Отчество: ' + document.getElementById('middleName').value
    + '</p>\n<p>Комментарий к заказу: ' + document.getElementById('comment').value
    + '</p><br/>\n\n';
  return text;  
}

function getPersonalI18n() {  
  var curRow = dsLocalPropertiesCheckOut.getCurrentRow();  
  var text =     
      '    \n<p>'+curRow['personal-data/@email']+": " + document.getElementById('email').value
    + '</p>\n<p>'+curRow['personal-data/@payment-method']+": " + document.getElementById('payment').value
    + '</p>\n<p>'+curRow['personal-data/@delivery-method']+": " + document.getElementById('delivery').value    
    + '</p>\n<p>'+curRow['personal-data/@country']+": " + document.getElementById('country').value
    + '</p>\n<p>'+curRow['personal-data/@city']+": " + document.getElementById('city').value    
    + '</p>\n<p>'+curRow['personal-data/@zip']+": " + document.getElementById('postcode').value    
    + '</p>\n<p>'+curRow['personal-data/@address']+": " + document.getElementById('address').value        
    + '</p>\n<p>'+curRow['personal-data/@last-name']+": " + document.getElementById('lastName').value
    + '</p>\n<p>'+curRow['personal-data/@first-name']+": " + document.getElementById('firstName').value 
    + '</p>\n<p>'+curRow['personal-data/@middle-name']+": " + document.getElementById('middleName').value
    + '</p>\n<p>'+curRow['personal-data/@comment']+": " + document.getElementById('comment').value
    + '</p><br/>\n\n';
  return text;  
}

function getOrderNotificationEmail() {
  var amount =  getShoppingCart().getSummary().amount;
  var curRow = dsLocalProperties.getCurrentRow();
  var curRowConfirm = dsLocalPropertiesOrderConfirmation.getCurrentRow();
  var exchangeRatio = parseFloat(curRow['currency/@exchange-ratio']);
  var rubAmount = amount * exchangeRatio;
  var showRatio = ('true'==curRow['currency/@show-ratio']);
  var ratioText = showRatio ? '<p>'+curRow['currency/@currency-exchange']+'</p>' : '';
  var amountText = showRatio ? amount+ ' ' + curRow['currency/@pseudo-name'] + ' ('+rubAmount+' '+curRow['currency/@name']+')' : rubAmount+' '+curRow['currency/@name']; 
  var orderBody = '<html><head></head><body>' 
    + curRowConfirm['part1']    
    +$('#orderNumber').val()+'</p>' 
    + getPersonalI18n() 
    + ratioText
    + getShoppingCart().getOrderDataTableI18n() 
    + '<p>' + curRowConfirm['part2'] + ': '+ amountText + '</p>'
    +'\n<p>'+curRowConfirm['part3']+'</p></body></html>';
  return orderBody;
}

function getOrderEmail() {
  var amount =  getShoppingCart().getSummary().amount;
  var curRow = dsLocalProperties.getCurrentRow();
  var curRowConfirm = dsLocalPropertiesOrderConfirmation.getCurrentRow();
  var exchangeRatio = parseFloat(curRow['currency/@exchange-ratio']);
  var rubAmount = amount * exchangeRatio;
  var showRatio = ('true'==curRow['currency/@show-ratio']);
  var ratioText = showRatio ? '<p>'+curRow['currency/@currency-exchange']+'</p>' : '';
  var amountText = showRatio ? amount+ ' ' + curRow['currency/@pseudo-name'] + ' ('+rubAmount+' '+curRow['currency/@name']+')' : rubAmount+' '+curRow['currency/@name']; 
  var orderBody = '<html><head></head><body>' 
    + '\n<h3>Уведомление о получении заказа</h3>\n'
    +'\n<p style="font-weight:bold;">Детали заказа</p>'
    +'\n<p>Номер заказа: '+$('#orderNumber').val()+'</p>'
    + getPersonalI18n()  
    + ratioText
    + getShoppingCart().getOrderDataTableI18n() 
    + '<p>' + curRowConfirm['part2'] + ': '+ amountText + '</p>'
    +'\n<p>'+curRowConfirm['part3']+'</p></body></html>';
  return orderBody;
}

function initDetailsPopup(){
  /*
	 * $("a.inlineBox").fancybox({ 'scrolling' : 'no', 'titleShow' : false,
	 * 'onClosed' : function() { setFocusInScroll = true; }, 'onStart' :
	 * function() { setFocusInScroll = false; } });
	 */
}

function initOrderForm() {
  // ORDER FORM
  $("a.cartTotalBtn").fancybox({
      'scrolling'     : 'no',
      'titleShow'     : false,
      'onClosed'      : function() {
        setFocusInScroll = true;
        var v = $('#personalForm').validate();
        v.resetForm();
      },
      'onStart'     : function() {
        setFocusInScroll = false;
        getShoppingCart().refreshSpryDataset();
        if(dsShoppingCart.getData().length==0) {           
           $('#orderContainer').hide();
           $('#noDataError').show();          
        } else {           
           $('#orderContainer').show();    
           $('#noDataError').hide();
        }         
      }
  });
  
  $("#personalForm").bind("submit", function() {      
    var requiredFieldsOk = true;
    var emailFormatOk = true;      
    var row = dsLocalPropertiesAlerts.getCurrentRow(); 
    
    if(!$("#orderForm").valid()) {
      return false;
    }
    if(!$("#personalForm").valid()) {
      return false;
    }
    
    $('#orderNumber').val(new Date().getTime());
    
    $.fancybox.showActivity();
    $.ajax({
      type    : "POST",
      cache   : false,
      url     : "sendmail.php",
      data    : {    response_text : row['order-sent'],
                             email : 'orders@global-insects.com',
                notification_email : document.getElementById('email').value,
                            subject: 'Order Form',
               notification_subject: 'Order Fotification',            
                            message: getOrderEmail(),
               notification_message: getOrderNotificationEmail()
                },
      success: function(data) {
        setFocusInScroll = true;          
        // TODO check result before cleaning up
        getShoppingCart().clear();          
        $.fancybox(data);
      }
    });
    return false;
  });
}

function intitLanguage() {  
  var row = dsLocalProperties.getCurrentRow();  
  jQuery.extend(jQuery.validator.messages, {
      required: row['validation/@required'],
      digits: row['validation/@digits'],
      max: row['validation/@max'],
      email: row['validation/@email']
  });  
}

function initQuestionForm() {
  $("a.navigationContacts").fancybox({
    'autoScale'     : true,            
    'scrolling'     : 'no',
    'titleShow'     : false,
    'onClosed'      : function() {
      setFocusInScroll = true;      
      $('#questionFormContent').hide();
      var v = $('#questionForm').validate();
      v.resetForm();     
    },
    'onStart'     : function() {      
      setFocusInScroll = false;
      $('#questionFormContent').show();
    }      
  });   
  
  $("#questionForm").bind("submit", function() { 
    var requiredFieldsOk = true;
    var formToValidate = $('#questionForm #questionFormContent');
    var row = dsLocalPropertiesAlerts.getCurrentRow();    
    
    if(!$("#questionForm").valid()) {
      return false;
    }
   
    $.fancybox.showActivity();
    $.ajax({
      type    : "POST",
      cache   : false,
      url     : "sendmail.php",
      data    : { response_text : row['message-sent'], email : 'info@global-insects.com', subject: 'Question', message: getQuestionBody() },
      success: function(data) {
        // TODO check result before cleaning up
        getShoppingCart().clear();          
        $.fancybox(data);
      }
    });
    return false;    
  });  
}

Spry.Data.Region.addObserver("countAmount1", function(nType, notifier, data) {
  if (nType == "onPostUpdate") {    
    intitLanguage();
  }
});

Spry.Data.Region.addObserver("contactsContainer", function(nType, notifier, data) {
  if (nType == "onPostUpdate") {
    initQuestionForm();
  }
});

Spry.Data.Region.addObserver("copyrightContainer", function(nType, notifier, data) {
  if (nType == "onPostUpdate") {
    initQuestionForm();
  }
});
