jQuery.url=function()
{var segments={};var parsed={};var options={url:window.location,strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};var parseUri=function()
{str=decodeURI(options.url);var m=options.parser[options.strictMode?"strict":"loose"].exec(str);var uri={};var i=14;while(i--){uri[options.key[i]]=m[i]||"";}
uri[options.q.name]={};uri[options.key[12]].replace(options.q.parser,function($0,$1,$2){if($1){uri[options.q.name][$1]=$2;}});return uri;};var key=function(key)
{if(!parsed.length)
{setUp();}
if(key=="base")
{if(parsed.port!==null&&parsed.port!=="")
{return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/";}
else
{return parsed.protocol+"://"+parsed.host+"/";}}
return(parsed[key]==="")?null:parsed[key];};var param=function(item)
{if(!parsed.length)
{setUp();}
return(parsed.queryKey[item]===null)?null:parsed.queryKey[item];};var setUp=function()
{parsed=parseUri();getSegments();};var getSegments=function()
{var p=parsed.path;segments=[];segments=parsed.path.length==1?{}:(p.charAt(p.length-1)=="/"?p.substring(1,p.length-1):path=p.substring(1)).split("/");};return{setMode:function(mode)
{strictMode=mode=="strict"?true:false;return this;},setUrl:function(newUri)
{options.url=newUri===undefined?window.location:newUri;setUp();return this;},segment:function(pos)
{if(!parsed.length)
{setUp();}
if(pos===undefined)
{return segments.length;}
return(segments[pos]===""||segments[pos]===undefined)?null:segments[pos];},attr:key,param:param};}();

jQuery(document).ready(function(){
	var calcForm = jQuery('#calc_form');
	if (calcForm.length == 1) {
		/* create datepicker for calc form */
		jQuery('form .datepicker').datetime({
			userLang: lang['datepicker_lang'],
			americanMode: false
		});
		/* form check by submit */
		jQuery('#submit_form').click(function(){
			var msg = "";
			if(jQuery('#select_car').val() == 0) msg += lang['err_car']+".\n";
			if(jQuery('#place_start').val() == 0) msg += lang['err_place1']+".\n";
			if(jQuery('#place_end').val() == 0) msg += lang['err_place2']+".\n";
			var str = jQuery.trim(jQuery('#client_name').val());
			if(str.length == 0) msg += lang['err_name']+".\n";
			str = jQuery.trim(jQuery('#client_phone').val());
			var str1 = jQuery.trim(jQuery('#client_email').val());
			if(str.length == 0 && str1.length == 0) msg += lang['err_phone']+".\n";
			if(str1.length > 0 && !checkEmail(str1)) msg += lang['err_email']+".\n";
			if(!jQuery('#acceptrules').attr('checked')) msg += lang['err_rules']+".\n";
			if(msg.length>0) {alert(msg);return false;}
			// send form by ajax to php script for mail
			sendMail();
			return true;
		});

		// callback for change event
		jQuery('#calc_form div.recalc input , #calc_form div.recalc select, #time_start').bind('change', checkTime);
		/* select car on load then choose car from catalog */ 
		var carId = parseInt(jQuery.url.param('car'));
		if (carId != null) {
			jQuery('#select_car option[value='+carId+']').attr('selected', true);
			recalcForm(false,'');
		}
	}
});

function recalcForm(timeErr,timeStr) {
	// drop errors
	var errCont = jQuery('#error_cont');
	var resCont = jQuery('#right .content');
	errCont.empty();
	resCont.empty();
	
	var errors = checkCarPlace();
	// show errors
	if(errors.length>0 || timeErr != false) {
		if (timeErr) errors += timeStr;
		errCont.html('<p class="error">'+errors+'</p>')
		return;
	}
	// no errors
	var resPrice = 0;
	var resPriceMsg = '';
	var rentPeriod = timeStr.split(';');
	var rentPrice = carsArr[jQuery('#select_car').val()][4];
	var renAddServicesMsg = '';
	
	// calculate rent price only (from 1-3, from 4-7, over 7)
	rentPrice = rentPeriod[0] > 7 ? rentPrice : (rentPeriod[0] <= 7 && rentPeriod[0] > 3 ? carsArr[jQuery('#select_car').val()][3] : carsArr[jQuery('#select_car').val()][2]);
	// rentprice * days
	rentPrice = rentPrice * rentPeriod[0];
	// rent price + unlimited tahometr (up to 150%)
	rentPrice = jQuery('#add_unlim').attr('checked') ? rentPrice * 1.50 : rentPrice;
	resPriceMsg += '<span class="result_item">'+lang['msg_common_rent']+rentPrice+'&nbsp;'+lang['msg_rur']+'</span>';
	resPrice += rentPrice;
	
	// count: is working time
	// start
	var placeStartPrice = 0;
	var placeEndPrice = 0;
	var timeIndex = 0;
	var placeStartMsg = '';
	var placesMsg = '';
	// select option value - place item in places array
	var placeStartIndex = jQuery('#place_start').val();

//	if (places[placeStartIndex][1] != 0) {
		// if in range 8-20 ? 0 : 1 index on place placePrice array
		timeIndex = Number(rentPeriod[1])>=8 && Number(rentPeriod[1])<=20 ? 0 : 1;
		// get price from placePrice array
		placeStartPrice = placePrice[places[placeStartIndex][1]][timeIndex];
		// get message to worked/off worked period
		if (placeStartPrice != 0) {
			placeStartMsg = timeIndex == 0 ? lang['msg_place_start_worked']+": " : lang['msg_place_start_offworked']+": ";
			placesMsg += '<span class="result_item">'+placeStartMsg+placeStartPrice+'&nbsp;'+lang['msg_rur']+'</span>';
		}
//	}
	// select option value - place item in places array
	var placeEndIndex = jQuery('#place_end').val();

//	if (places[placeEndIndex][1] != 0) {
		timeIndex = Number(rentPeriod[2]) >=8 && Number(rentPeriod[2]) <=20 ? 0 : 1;
		placeEndPrice = placePrice[places[placeEndIndex][1]][timeIndex];
		if (placeEndPrice != 0) {
			placeStartMsg = timeIndex == 0 ? lang['msg_place_end_worked']+": " : lang['msg_place_end_offworked']+": ";
			placesMsg += '<span class="result_item">'+placeStartMsg+placeEndPrice+'&nbsp;'+lang['msg_rur']+'</span>';
		}
//	}
	// concat messages
	resPriceMsg += placesMsg;
	// count common price with time period
	resPrice = resPrice + placeStartPrice + placeEndPrice;
	
	// additional services
	jQuery('#add_services input:checked').each(function(){
		// addServices[1] * days > addServices[2] ? addServices[2] : addServices[1] * days;
		var asIndex = parseInt(jQuery(this).attr('name').substr(4));
		addServicePrice = addServices[asIndex][1]*rentPeriod[0];
		if (addServicePrice > addServices[asIndex][2]) addServicePrice = addServices[asIndex][2];
		// msg += label: price rur
		renAddServicesMsg += '<span class="result_item">'+jQuery(this).parent('div').children('label').text()+': '+addServicePrice+'&nbsp;'+lang['msg_rur']+'</span>';
		// count on main price
		resPrice += addServicePrice;
	});
	if (renAddServicesMsg != '') resPriceMsg += '<span class="result_item">'+lang['msg_rent_add_service']+':</span>' + renAddServicesMsg;

	// common price
	resPriceMsg += '<div class="order_sum">'+lang['msg_common_cost']+':<span class="common_price">'+resPrice+'&nbsp;'+lang['msg_rur']+'</span></div>';
	resCont.html('<h2>'+lang['msg_cost']+'</h2><div id="result">'+resPriceMsg+'</div>');
	
}

/* check only [car, place1, place2] fields also for onload page check with car id as arg */
function checkCarPlace() {
	var msg = "";
	if(jQuery('#select_car').val() == 0) msg += lang['err_car']+".<br />";
	if(jQuery('#place_start').val() == 0) msg += lang['err_place1']+".<br />";
	if(jQuery('#place_end').val() == 0) msg += lang['err_place2']+".<br />";
	return msg;
}

/* check time with ajax */
function checkTime() {
	var tmStart = jQuery('#time_start').val();
	var tmEnd = jQuery('#time_end').val();
	
	jQuery.ajax({
		type: "POST",
		url: "http://" + document.domain + "/custom_time.php",
		data: "tmstart="+tmStart+"&tmend="+tmEnd,
		timeout: 15000,
		error: function(){
			recalcForm(true, lang['err_time0']);
			return;
		},
		success: function(xml){
			var timeresult = '';
			var isTimeError = true;
			// success
			var result = jQuery(xml).find('t');
			if (result.length > 0) {
				timeresult = result.text();
				isTimeError = false;
			}
			// error
			if (isTimeError) {			
				result = jQuery(xml).find('e').each(function(){
					var code = parseInt(jQuery(this).text());
					switch (code) {
						case 0:
							timeresult += lang['err_time0']+".<br />";
							break;
						case 1:
							timeresult += lang['err_time1']+".<br />";
							break;
						case 2:
							timeresult += lang['err_time2']+".<br />";
							break;
						case 3:
							timeresult += lang['err_time3']+".<br />";
							break;
						case 4:
							timeresult += lang['err_time4']+".<br />";
							break;
						case 5:
							timeresult += lang['err_time5']+".<br />";
							break;
					}
				});
			}
			recalcForm(isTimeError,timeresult);
		}
	});
}

function sendMail() {
	// disable submit button
	jQuery('#submit_form').attr('disabled', true);
	//var addr = jQuery('#calc_form').serialize();
	var checked = false;
	var addr = "recipient="+jQuery('#recipient').val();
	addr += "&select_car="+carsArr[jQuery('#select_car').val()][0];
	addr += "&place_start="+places[jQuery('#place_start').val()][0];
	addr += "&place_end="+places[jQuery('#place_end').val()][0];
	addr += "&time_start="+jQuery('#time_start').val();
	addr += "&time_end="+jQuery('#time_end').val();
	addr += "&client_name="+jQuery('#client_name').val();
	addr += "&client_org="+jQuery('#client_org').val();
	addr += "&client_phone="+jQuery('#client_phone').val();
	addr += "&client_email="+jQuery('#client_email').val();
	addr += "&client_comments="+jQuery('#client_comments').val();
	checked = jQuery('#calc_form #add_1').is(':checked') ? 'да' : '-';
	addr += "&add_1="+checked;
	checked = jQuery('#calc_form #add_2').is(':checked') ? 'да' : '-';
	addr += "&add_2="+checked;
	checked = jQuery('#calc_form #add_3').is(':checked') ? 'да' : '-';
	addr += "&add_3="+checked;
	checked = jQuery('#calc_form #add_unlim').is(':checked') ? 'да' : '-';
	addr += "&add_unlim="+checked;
	
	jQuery.ajax({
		type: "POST",
		url: "http://" + document.domain + "/custom_cmd.php",
		data: addr,
		timeout: 15000,
		error: function(){
			alert(lang['sendmail_err']);
			jQuery('#submit_form').attr('disabled', false);
			return;
		},
		success: function(xml){
			jQuery('#submit_form').attr('disabled', false);
			jQuery('#right .content').empty();
			jQuery('#calc_form').replaceWith('<p>'+lang['sendmail_ok']+'</p>');
			return;
		}
	});
}

function checkEmail(str) {
	var i,len,ch,cl,pp,pe;
	
	str = jQuery.trim(str);
	len = str.length;
	pp = len;
	pe=-1;
	cl = ' ';
	
	for(i=0;i<len;i++)
	{
		ch=str.charAt(i);
		if(ch=='@' && pe==-1)pe=i;
		else
			if(!((ch>='0' && ch<='9') || (ch>='a' && ch<='z') || (ch>='A' && ch<='Z') || ch=='.' || ch=='-' || ch=='_')) return false;
		if(ch=='.')pp=i;
		if(cl=='.' && ch=='.') return false;
		cl=ch;
	}
	if(pe<1 || pe>len-5) return false;
	if(str.charAt(0)=='.' || str.charAt(pe-1)=='.' || str.charAt(pe+1)=='.') return false;
	if(pp>len-3) return false; 
	return true;
}

function saveFormData(form){if(!form){return false;}
if(!form.id){alert("You should set id attribute in form tag to save or restore it.");return false;}
var cookieData=new Array;for(var i=0;i<form.elements.length;i++){var input=form.elements[i];if(input.name){var inputName=input.name.replace(/([)\\])/g,"\\$1");switch(input.type){case"file":{if(input.value=='')input.parentNode.removeChild(input);break;}
case"password":case"text":case"textarea":{cookieData.push({type:'T',name:inputName,value:input.value});break;}
case"checkbox":case"radio":{cookieData.push({type:'C',name:inputName,value:(input.checked?1:0)});break;}
case"select-multiple":case"select-one":{cookieData.push({type:'S',name:inputName,value:input.selectedIndex});break;}}}}
var str="";for(var i=0;i<cookieData.length;i++){var elementData=cookieData[i];var value=new String(elementData.value);var inputName=new String(elementData.name);if(!inputName||!value){continue;}
str+=elementData.type+","+inputName.length+","+inputName+","+value.length+","+value;}
document.cookie="frm"+form.id+"="+escape(str.replace(/([|\\])/g,"\\$1"));return true;}
function restoreFormData(form){if(!form){return false;}
if(!form.id){alert("You should set id attribute in form tag to save or restore it.");return false;}
var cookieName="frm"+form.id+"=";var cookie=new String(unescape(document.cookie));var posStart,posEnd;if((posStart=cookie.indexOf(cookieName))==-1){return false;}
if((posEnd=cookie.indexOf(";",posStart))==-1){posEnd=cookie.length;}
var data=cookie.substring(posStart+cookieName.length,posEnd);var pos=0,cookieData=new Array;while(pos<data.length){var inputName;var type=data.substring(pos,pos+1);pos+=2;var length=parseInt(data.substring(pos,data.indexOf(",",pos)));pos=data.indexOf(",",pos)+1;var inputName=data.substring(pos,pos+length);pos+=length+1;var length=parseInt(data.substring(pos,data.indexOf(",",pos)));if(length==0){pos+=2;continue;}else{pos=data.indexOf(",",pos)+1;}
var value=data.substring(pos,pos+length);pos+=length;cookieData.push({type:type,name:inputName,value:value});}
for(var i=0;i<cookieData.length;i++){var elementData=cookieData[i];if(elementData.type&&elementData.name){switch(elementData.type){case"T":{form.elements[elementData.name].value=elementData.value;break;}
case"C":{form.elements[elementData.name].checked=elementData.value==1?true:false;break;}
case"S":{form.elements[elementData.name].selectedIndex=elementData.value;break;}}}}}
