<?php
	session_start();
	require_once 'php/Classes/PHPExcel.php';
	require_once 'php/Classes/PHPExcel/IOFactory.php';
	
	if(strpos($_SESSION['userdir'], "exist_mp")){ 
	}else{
	$_SESSION['userdir'] = $_SESSION['userdir']."/exist_mp";
	}
	
	function create_guid($namespace = ''){    
		static $guid = '';
		$uid = uniqid("", true);
		$data = $namespace;
		$data .= $_SERVER['REQUEST_TIME'];
		$data .= $_SERVER['HTTP_USER_AGENT'];
		$data .= $_SERVER['LOCAL_ADDR'];
		$data .= $_SERVER['LOCAL_PORT'];
		$data .= $_SERVER['REMOTE_ADDR'];
		$data .= $_SERVER['REMOTE_PORT'];
		$hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
		$guid = '{' .  
				substr($hash,  0,  8) .
				'-' .
				substr($hash,  8,  4) .
				'-' .
				substr($hash, 12,  4) .
				'-' .
				substr($hash, 16,  4) .
				'-' .
				substr($hash, 20, 12) .
				'}';
		return $guid;
	}
	set_time_limit(0);
	$buf = create_guid();
	$GUID = substr($buf, 1, 36);
	
	$date_e = explode(".", $_POST['Date_End']);
	
	
	//Формируем XML
	$out = "<?xml version='1.0' encoding='UTF-8'?>\n";
	$out .= iconv("Windows-1251", "UTF-8", "<!-- Изготовлено с помощью системы tehplan-online.ru -->\n");
	$out .= "<STD_MP>";
		$out .= "<eDocument CodeType = '015' Version = '03' GUID = '".$GUID."'>";
			if($_POST['Contractor'] == "Cadastral_Engineer"){
				$out .= iconv("Windows-1251", "UTF-8", "<Sender Name = '".$_POST['Cad_Org_name']."' Date_Upload = '".$date_e[2]."-".$date_e[1]."-".$date_e[0]."' FIO = '".$_POST['Cad_Eng_FIO']."' E_Mail = '".$_POST['Cad_Eng_E_mail']."' Telephone = '".$_POST['Cad_Eng_Telephone']."'>");
			}
			if($_POST['Contractor'] == "Cadastral_Organization"){
				$out .= iconv("Windows-1251", "UTF-8", "<Sender Name = '".$_POST['Cad_Org_name']."' Date_Upload = '".$date_e[2]."-".$date_e[1]."-".$date_e[0]."' FIO = '".$_POST['Cad_Org_Officer']."' E_Mail = '".$_POST['Cad_Org_E_mail']."' Telephone = '".$_POST['Cad_Org_Telephone']."'>");
			}
			$out .= "</Sender>";
			$out .= "<Recipient>";
			$out .= "</Recipient>";
		$out .= "</eDocument>";
		$out .= "<Package>";
			$out .= "<SpecifyParcels>";
				
				for($i = 1; $i <= $_POST['numparcel']; $i++){
				
					$out .= iconv("Windows-1251", "UTF-8", "<ExistParcel CadastralNumber = '".trim($_POST['ParcelCadNum'.$i])."'>");
						$out .= "<CadastralBlock>";
							$out .= trim($_POST['Cad_Number']);
						$out .= "</CadastralBlock>";
						$Block = trim($_POST['Cad_Number']);
						if($_POST['buildnum'.$i] != 0){
							$out .= "<Inner_CadastralNumbers>";
							for($j = 1; $j <= $_POST['buildnum'.$i]; $j++){
								$out .= "<CadastralNumber>";
									$out .= trim(iconv("Windows-1251", "UTF-8", $_POST['buildnum'.$i.'_'.$j]));
								$out .= "</CadastralNumber>";
							}
							$out .= "</Inner_CadastralNumbers>";
						}
						
						$out .= "<Area>";
							$out .= "<Area>";
								$out .= iconv("Windows-1251", "UTF-8", $_POST['Area'.$i]);
							$out .= "</Area>";
							$out .= "<Unit>";
								$out .= iconv("Windows-1251", "UTF-8", "055");
							$out .= "</Unit>";
							$out .= "<Innccuracy>";
								$out .= iconv("Windows-1251", "UTF-8", $_POST['TArea'.$i]);
							$out .= "</Innccuracy>";
						$out .= "</Area>";
											
						
						$numcontours = 0;
						$numcuts = 0;
						for($j = 1; $j <= $_POST['numcont'.$i]; $j++){
							if($_POST['minus'.$i."_".$j] == 1){
								$cut[$j] = 1;
							}else{
								$cut[$j] = 0;
								$numcontours++;
							}
						}
						
						if($numcontours == 1){
							$borders = "";
							$pointnum = 0;
							$out .= iconv("Windows-1251", "UTF-8", "<Entity_Spatial Ent_Sys = 'ID_".$Block[0].$Block[1]."'>");
								for($j = 1; $j <= $_POST['numcont'.$i]; $j++){
								$out .= "<Spatial_Element>";
									for($k = 1; $k <= $_POST['numpoints'.$i."_".$j]; $k++){
										$pointnum++;
										if($k == 1){
											$first = $pointnum;
										}
										$out .= iconv("Windows-1251", "UTF-8", "<Spelement_Unit Type_Unit = 'Точка' Su_Nmb = '".$pointnum."'>");
										$input = $_POST['input_number'.$i.'_'.$j.'_'.$k];
										if($input[0] == "н"){
											$Num_Geopoint = "";
															
											for($m = 1; $m < strlen($_POST['input_number'.$i.'_'.$j.'_'.$k]); $m++)
												$Num_Geopoint .= $input[$m];
															
											$out .= iconv("Windows-1251", "UTF-8", "<Ordinate X = '".$_POST['input_cx'.$i.'_'.$j.'_'.$k]."' Y = '".$_POST['input_cy'.$i.'_'.$j.'_'.$k]."' Ord_Nmb = '".$pointnum."' Num_Geopoint = '".$Num_Geopoint."' Geopoint_Zacrep = '".$_POST['input_lock'.$i.'_'.$j.'_'.$k]."' Delta_Geopoint = '".$_POST['input_precisionvalue'.$i.'_'.$j]."' Point_Pref = 'н'/>");
															
										}else{
											$Num_Geopoint = $_POST['input_number'.$i.'_'.$j.'_'.$k];
											$out .= iconv("Windows-1251", "UTF-8", "<Ordinate X = '".$_POST['input_cx'.$i.'_'.$j.'_'.$k]."' Y = '".$_POST['input_cy'.$i.'_'.$j.'_'.$k]."' Ord_Nmb = '".$pointnum."' Num_Geopoint = '".$Num_Geopoint."' Geopoint_Zacrep = '".$_POST['input_lock'.$i.'_'.$j.'_'.$k]."' Delta_Geopoint = '".$_POST['input_precisionvalue'.$i.'_'.$j]."'/>");
															
										}					
										$out .= "</Spelement_Unit>";	
									}
									if(isset($_POST['Length'.$i.'_'.$j.'_1'])){
										$counter = $first;
										for($k = 1; $k <= $_POST['numpoints'.$i.'_'.$j]; $k++){	
											if($k == $_POST['numpoints'.$i.'_'.$j]){
												$next = $first;
											}else{
												$next = $counter + 1;
											}
											$borders .= "<Border Spatial = '".$j."' Point1 = '".$counter."' Point2 = '".$next."'>";
												
												$borders .= "<Edge>";
												if($_POST['EdgeCadNum'.$i.'_'.$j.'_'.$k] != ""){
													$borders .= "<Neighbours>";
														$borders .= "<CadastralNumber>";
															$borders .= trim(iconv("Windows-1251", "UTF-8", $_POST['EdgeCadNum'.$i.'_'.$j.'_'.$k]));
														$borders .= "</CadastralNumber>";
													$borders .= "</Neighbours>";
												}
													$borders .= "<Length>";
														$borders .= $_POST['Length'.$i.'_'.$j.'_'.$k];
													$borders .= "</Length>";
												if($_POST['EdgeDef'.$i.'_'.$j.'_'.$k] != ""){
													$borders .= "<Definition>";
														$borders .= iconv("Windows-1251", "UTF-8", $_POST['EdgeDef'.$i.'_'.$j.'_'.$k]);
													$borders .= "</Definition>";											
												}
												$borders .= "</Edge>";
												
											$borders .= "</Border>";
											$counter++;
										}
									}
								$out .= "</Spatial_Element>";
								}
								if($borders != ""){
								$out .= "<Borders>";
									$out .= $borders;
								$out .= "</Borders>";
								}
							$out .= "</Entity_Spatial>";
						}else{
							$out .= "<Contours>";
							$curcont = 1;
							$n = 1;
							while($n <= $numcontours){
								$flag = 0;
								$borders = "";
								$out .= iconv("Windows-1251", "UTF-8", "<Contour Definition = '".$_POST['ParcelCadNum'.$i]."(".$n.")'>");	
								for($j = $curcont; $j <= $_POST['numcont'.$i]; $j++){
									if($_POST['minus'.$i."_".$j] == 0 && $flag == 1){
										break;
									}
									if($_POST['minus'.$i."_".$j] == 0){
										$Area = $_POST['area'.$i.'_'.$j];
									}else{
										$Area -= $_POST['area'.$i.'_'.$j];
									}
									
									$flag = 1;
								}
								if($j == $_POST['numcont'.$i]){
									$limit = $j + 1;
								}else{
									$limit = $j;
								}
								$Innccuracy = sqrt($Area)*3.5*$_POST['input_precisionvalue'.$i.'_'.$curcont];
								
								$out .= "<Area>";
									$out .= "<Area>";
										$out .= round($Area, 2);
									$out .= "</Area>";
									$out .= "<Unit>";
										$out .= iconv("Windows-1251", "UTF-8", "055");
									$out .= "</Unit>";
									$out .= "<Innccuracy>";
										$out .= round($Innccuracy, 2);
									$out .= "</Innccuracy>";
								$out .= "</Area>";
								$pointnum = 0;
								$flag = 0;
								$out .= iconv("Windows-1251", "UTF-8", "<Entity_Spatial Ent_Sys = 'ID_".$Block[0].$Block[1]."'>");
								for($j = $curcont; $j <= $_POST['numcont'.$i]; $j++){
									if($_POST['minus'.$i."_".$j] == 0 && $flag == 1){
										break;
									}
									$flag = 1;
									$out .= "<Spatial_Element>";
									for($k = 1; $k <= $_POST['numpoints'.$i."_".$j]; $k++){
										$pointnum++;
										if($k == 1){
											$first = $pointnum;
										}
										$out .= iconv("Windows-1251", "UTF-8", "<Spelement_Unit Type_Unit = 'Точка' Su_Nmb = '".$pointnum."'>");
										$input = $_POST['input_number'.$i.'_'.$j.'_'.$k];
										if($input[0] == "н"){
											$Num_Geopoint = "";
															
											for($m = 1; $m < strlen($_POST['input_number'.$i.'_'.$j.'_'.$k]); $m++)
												$Num_Geopoint .= $input[$m];
															
											$out .= iconv("Windows-1251", "UTF-8", "<Ordinate X = '".$_POST['input_cx'.$i.'_'.$j.'_'.$k]."' Y = '".$_POST['input_cy'.$i.'_'.$j.'_'.$k]."' Ord_Nmb = '".$pointnum."' Num_Geopoint = '".$Num_Geopoint."' Geopoint_Zacrep = '".$_POST['input_lock'.$i.'_'.$j.'_'.$k]."' Delta_Geopoint = '".$_POST['input_precisionvalue'.$i.'_'.$j]."' Point_Pref = 'н'/>");
															
										}else{
											$Num_Geopoint = $_POST['input_number'.$i.'_'.$j.'_'.$k];
											$out .= iconv("Windows-1251", "UTF-8", "<Ordinate X = '".$_POST['input_cx'.$i.'_'.$j.'_'.$k]."' Y = '".$_POST['input_cy'.$i.'_'.$j.'_'.$k]."' Ord_Nmb = '".$pointnum."' Num_Geopoint = '".$Num_Geopoint."' Geopoint_Zacrep = '".$_POST['input_lock'.$i.'_'.$j.'_'.$k]."' Delta_Geopoint = '".$_POST['input_precisionvalue'.$i.'_'.$j]."'/>");
															
										}					
										$out .= "</Spelement_Unit>";	
									}
									if(isset($_POST['Length'.$i.'_'.$j.'_1'])){
										$counter = $first;
										for($k = 1; $k <= $_POST['numpoints'.$i.'_'.$j]; $k++){	
											if($k == $_POST['numpoints'.$i.'_'.$j]){
												$next = $first;
											}else{
												$next = $counter + 1;
											}
											$borders .= "<Border Spatial = '".$j."' Point1 = '".$counter."' Point2 = '".$next."'>";
												
												$borders .= "<Edge>";
												if($_POST['EdgeCadNum'.$i.'_'.$j.'_'.$k] != ""){
													$borders .= "<Neighbours>";
														$borders .= "<CadastralNumber>";
															$borders .= trim(iconv("Windows-1251", "UTF-8", $_POST['EdgeCadNum'.$i.'_'.$j.'_'.$k]));
														$borders .= "</CadastralNumber>";
													$borders .= "</Neighbours>";
												}
													$borders .= "<Length>";
														$borders .= $_POST['Length'.$i.'_'.$j.'_'.$k];
													$borders .= "</Length>";
												if($_POST['EdgeDef'.$i.'_'.$j.'_'.$k] != ""){
													$borders .= "<Definition>";
														$borders .= iconv("Windows-1251", "UTF-8", $_POST['EdgeDef'.$i.'_'.$j.'_'.$k]);
													$borders .= "</Definition>";											
												}
												$borders .= "</Edge>";
												
											$borders .= "</Border>";
											$counter++;
										}
									}
								$out .= "</Spatial_Element>";	
								}
								if($borders != ""){
								$out .= "<Borders>";
									$out .= $borders;
								$out .= "</Borders>";
								}
								$out .= "</Entity_Spatial>";
								
								
								$out .= "</Contour>";
								$curcont = $j;
								$n++;
							}
							$out .= "</Contours>";
						}
						
						
					$out .= "</ExistParcel>";
				
				}
				for($i = 1; $i <= $_POST['add_new_related_parcel_']; $i++){
					$out .= "<SpecifyRelatedParcel CadastralNumber = '".trim($_POST['rel_cad_num'.$i])."'>";
					
					for($j = 1; $j <= $_POST['num_rel_points'.$i]; $j++){
						$out .= "<ChangeBorder>";
						$input = $_POST['old_num'.$i.'_'.$j];
						if($input[0] == "н"){
							$Num_Geopoint = "";
											
							for($m = 1; $m < strlen($_POST['old_num'.$i.'_'.$j]); $m++)
								$Num_Geopoint .= $input[$m];
								
							$out .= iconv("Windows-1251", "UTF-8", "<OldOrdinate X = '".$_POST['old_x'.$i.'_'.$j]."' Y = '".$_POST['old_y'.$i.'_'.$j]."' Ord_Nmb = '".$_POST['old_ord'.$i.'_'.$j]."' Num_Geopoint = '".$Num_Geopoint."' Point_Pref = 'н'>");
							$out .= "</OldOrdinate>";
						}else{
							$out .= iconv("Windows-1251", "UTF-8", "<OldOrdinate X = '".$_POST['old_x'.$i.'_'.$j]."' Y = '".$_POST['old_y'.$i.'_'.$j]."' Ord_Nmb = '".$_POST['old_ord'.$i.'_'.$j]."' Num_Geopoint = '".$_POST['old_num'.$i.'_'.$j]."'>");
							$out .= "</OldOrdinate>";
						}
						$input = $_POST['new_num'.$i.'_'.$j];
						if($input[0] == "н"){
							$Num_Geopoint = "";
											
							for($m = 1; $m < strlen($_POST['old_num'.$i.'_'.$j]); $m++)
								$Num_Geopoint .= $input[$m];
								
							$out .= iconv("Windows-1251", "UTF-8", "<NewOrdinate X = '".$_POST['new_x'.$i.'_'.$j]."' Y = '".$_POST['new_y'.$i.'_'.$j]."' Ord_Nmb = '".$_POST['new_ord'.$i.'_'.$j]."' Num_Geopoint = '".$Num_Geopoint."' Point_Pref = 'н'>");
							$out .= "</NewOrdinate>";
						}else{
							$out .= iconv("Windows-1251", "UTF-8", "<NewOrdinate X = '".$_POST['new_x'.$i.'_'.$j]."' Y = '".$_POST['new_y'.$i.'_'.$j]."' Ord_Nmb = '".$_POST['new_ord'.$i.'_'.$j]."' Num_Geopoint = '".$_POST['new_num'.$i.'_'.$j]."'>");
							$out .= "</NewOrdinate>";
						}
						
						
						$out .= "</ChangeBorder>";
					}
					
					$out .= "</SpecifyRelatedParcel>";
				}
				
			$out .= "</SpecifyParcels>";
		$out .= "</Package>";
		
			$out .= "<Contractor Date = '".$date_e[2]."-".$date_e[1]."-".$date_e[0]."'>";//Кадастровый инженер
				if($_POST['Contractor'] == "Cadastral_Engineer"){
					$out .= "<Cadastral_Engineer>";//Физическое лицо
						$out .= "<FIO>";//Фамилия, Имя, Отчество
						$Cad_Eng_FIO = explode(" ", trim($_POST['Cad_Eng_FIO']));
							$out .= "<Surname>";//Фамилия
							$out .= iconv("Windows-1251", "UTF-8", $Cad_Eng_FIO[0]);
							$out .= "</Surname>";
							$out .= "<First>";//Имя
							$out .= iconv("Windows-1251", "UTF-8", $Cad_Eng_FIO[1]);
							$out .= "</First>";
							if(isset($Cad_Eng_FIO[2])){
							$out .= "<Patronymic>";//Отчество
							$out .= iconv("Windows-1251", "UTF-8", $Cad_Eng_FIO[2]);
							$out .= "</Patronymic>";
							}
						$out .= "</FIO>";
						$out .= "<N_Certificate>";//Номер квалификационного аттестата кадастрового инженера
						$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_N_Certificate']);
						$out .= "</N_Certificate>";
						$out .= "<INN>";//ИНН
						$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_INN']);
						$out .= "</INN>";
						$out .= "<Telephone>";//Контактный телефон
						$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_Telephone']);
						$out .= "</Telephone>";
						$out .= "<E_mail>";//Электронный адрес
						$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_E_mail']);
						$out .= "</E_mail>";
						$out .= "<Address>";//Адрес
						$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_Address']);
						$out .= "</Address>";
						$out .= "<Organization>";
							$out .= "<Name>";//Название организации Юр. лица
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_name']);
							$out .= "</Name>";
							$out .= "<Code_OGRN>";//Код ОГРН
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_OGRN']);
							$out .= "</Code_OGRN>";
							$out .= "<Telephone>";//Контактный телефон
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Telephone']);
							$out .= "</Telephone>";
							$out .= "<E_mail>";//Электронный адрес
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_E_mail']);
							$out .= "</E_mail>";
							$out .= "<Address>";//Адрес
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Address']);
							$out .= "</Address>";
							//$out .= "<Document>";//Реквизиты документа, подтверждающего аккредитацию
							//$out .= $_POST['Cad_Org_Document'];
							//$out .= "</Document>";
						$out .= "</Organization>";
					$out .= "</Cadastral_Engineer>";
				}
				if($_POST['Contractor'] == "Cadastral_Organization"){
					$out .= "<Cadastral_Organization>";//Юридическое лицо
						$out .= "<Name>";//Название организации Юр. лица
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_name']);
							$out .= "</Name>";
							$out .= "<Code_OGRN>";//Код ОГРН
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_OGRN']);
							$out .= "</Code_OGRN>";
							$out .= "<Officer>";//Должностное лицо
							$Cad_Org_FIO = explode(" ", trim($_POST['Cad_Org_Officer']));
								$out .= "<Surname>";//Фамилия
								$out .= iconv("Windows-1251", "UTF-8", $Cad_Org_FIO[0]);
								$out .= "</Surname>";
								$out .= "<First>";//Имя
								$out .= iconv("Windows-1251", "UTF-8", $Cad_Org_FIO[1]);
								$out .= "</First>";
								if(isset($Cad_Org_FIO[2])){
								$out .= "<Patronymic>";//Отчество
								$out .= iconv("Windows-1251", "UTF-8", $Cad_Org_FIO[2]);
								$out .= "</Patronymic>";
								}
							$out .= "</Officer>";
							$out .= "<Telephone>";//Контактный телефон
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Telephone']);
							$out .= "</Telephone>";
							$out .= "<E_mail>";//Электронный адрес
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_E_mail']);
							$out .= "</E_mail>";
							$out .= "<Address>";//Адрес
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Address']);
							$out .= "</Address>";
							$out .= "<Document>";//Реквизиты документа, подтверждающего аккредитацию
							$out .= iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Document']);
							$out .= "</Document>";
					$out .= "</Cadastral_Organization>";
				}
				
			$out .= "</Contractor>";
		
		$out .= "<Coord_Systems>";
			$out .= iconv("Windows-1251", "UTF-8", "<Coord_System Name = '".$_POST['coord_sys']."' Cs_Id = 'ID_".$Block[0].$Block[1]."'>");
			$out .= "</Coord_System>";
		$out .= "</Coord_Systems>";
		
	$out .= "</STD_MP>";
	

	$fout = fopen($_SESSION['userdir']."/GKUZU_".$GUID.".xml", "w");
	fwrite($fout, $out);
	fclose($fout);
	
	
function libxml_display_error($error){
    $return = "<br/>\n";
    switch ($error->level) {
        case LIBXML_ERR_WARNING:
            $return .= "<b>ПРЕДУПРЕЖДЕНИЕ $error->code</b>: ";
            break;
        case LIBXML_ERR_ERROR:
            $return .= "<b>ОШИБКА $error->code</b>: ";
            break;
        case LIBXML_ERR_FATAL:
            $return .= "<b>ФАТАЛЬНАЯ ОШИБКА $error->code</b>: ";
            break;
    }
	$flag = 0;
	if($error->code == "1874"){
		$return .= "Элемент <b>'";
		$errmes = trim($error->message);
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> содержит атрибут <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>, имеющий значение <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= ",</b> которое не совпадает с фиксированным значением <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	
	if($error->code == "1871"){
		$errmes = trim($error->message);
		$pos = strpos($errmes, "Missing child element(s).");
		if($pos){
			$return .= "В элементе <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> не хватает дочернего(их) элемента(ов), ожидается(ются) элемент(ы) <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "(" && $errmes[$i + 1] == " ")
					break;
			}
			for($i = $i + 2;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i + 1] == " " && $errmes[$i + 2] == ")")
					break;
			}
			$return .= "'</b>.";
		}
		$pos = strpos($errmes, "This element is not expected.");
		if($pos){
			$pos = strpos($errmes, "This element is not expected. Expected");
			if($pos){
				$return .= "Элемент <b>'";
				for($i = 9;;$i++){
					$return .= $errmes[$i];
					if($errmes[$i] == "'")
						break;
				}
				$return .= "</b> находится в недопустимом месте, ожидается(ются) элемент(ы) <b>'";
				for($i = $i + 1;;$i++){
					if($errmes[$i] == "(" && $errmes[$i + 1] == " ")
						break;
				}
				for($i = $i + 2;;$i++){
					$return .= $errmes[$i];
					if($errmes[$i + 1] == " " && $errmes[$i + 2] == ")")
						break;
				}
				$return .= "'</b>.";
			}else{
				$return .= "Элемент <b>'";
				for($i = 9;;$i++){
					$return .= $errmes[$i];
					if($errmes[$i] == "'")
						break;
				}
				$return .= "</b> находится в недопустимом месте.";
			}
		}
		$flag = 1;
	}
	
	if($error->code == "1824"){
		$errmes = trim($error->message);
		$pos = strpos($errmes, ", attribute");
		if($pos){
			$return .= "В элементе <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> атрибут <b>'";
			for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет значение <b>'";
			for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b>, которое не соответствует его типу.";
		}else{
			$return .= "Элемент <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет значение <b>'";
			for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b>, которое не соответствует его типу.";
		}
		$flag = 1;
	}
	
	if($error->code == "1828"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> должен содержать внутри себя его значение, а найден другой элемент.";
		$flag = 1;
	}
	
	if($error->code == "1840"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> содержит значение, которое не входит в список допустимых, например: <b>";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "{")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i + 1] == "}")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	if($error->code == "1831"){
		$errmes = trim($error->message);
		if(strpos($errmes, ", attribute")){
			$return .= "Элемент <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет атрибут <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> со значением <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> длинной <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов), поэтому не достигает необходимый минимум в <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов).";
		}else{
			$return .= "Элемент <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет длинну значения <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов), поэтому не достигает необходимый минимум в <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов).";
		}
		$flag = 1;
	}
	
	if($error->code == "1832"){
		$errmes = trim($error->message);
		if(strpos($errmes, ", attribute")){
			$return .= "Элемент <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет атрибут <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> со значением <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> длинной <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов), поэтому превышает обязательный максимум в <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов).";
		}else{
			$return .= "Элемент <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет длинну значения <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов), поэтому превышает обязательный максимум в <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов).";
		}
		$flag = 1;
	}
	if($error->code == "1839"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> содержит атрибут <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>, имеющий значение <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>, которое не соответствует шаблону <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	if($error->code == "1833"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> имеет значение <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>, которое является меньшим, чем минимально допустимое: <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	
	if($error->code == "1834"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> имеет значение <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>, которое является большим, чем максимально допустимое: <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	
	if($error->code == "1843"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> имеет внутри себя символы, выходящие за пределы контейнеров <b><></b>.";
		$flag = 1;
	}
	
	if($error->code == "1845"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> не найден в XML-схеме.";
		$flag = 1;
	}
	
	if($error->code == "1868"){
		$errmes = trim($error->message);
		$return .= "В элементе <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> не хватает обязательного атрибута <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	if($flag == 0)
		$return .= trim($error->message);
    return $return;
}

function libxml_display_errors() {
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
        print libxml_display_error($error);
    }
    libxml_clear_errors();
}

//Титульный лист
	$objPHPExcel = PHPExcel_IOFactory::load("excel/templates/1 Титульный лист.xls");
	$objPHPExcel->setActiveSheetIndex(0);
	$listnum += 2;
	for($i = 1;; $i++){
		if(!isset($_POST['pages'.$i])){
			break;
		}
		if($_POST['pages'.$i] != ""){
			$listnum += $_POST['pages'.$i];
		}
	}
	$objPHPExcel->getActiveSheet()->setCellValue('CU7', $listnum);
	$objPHPExcel->getActiveSheet()->setCellValue('F17', "V");
	
	if($_POST['Client'] == "Person"){
		$objPHPExcel->getActiveSheet()->setCellValue('B29', iconv("Windows-1251", "UTF-8", $_POST['Clientfio']));
		$fio = explode(" ", $_POST['Clientfio']);
		$name = $fio[1];
		$patr = $fio[2];
		if($patr != ""){
			$tmp = "/ ".$fio[0]." ".$name[0].". ".$patr[0].". /";
		}else{
			$tmp = "/ ".$fio[0]." ".$name[0].". /";
		}
		$objPHPExcel->getActiveSheet()->setCellValue('B32', iconv("Windows-1251", "UTF-8", $tmp));
	}
	if($_POST['Client'] == "Organization"){
		$objPHPExcel->getActiveSheet()->setCellValue('B29', iconv("Windows-1251", "UTF-8", $_POST['org_name']));
		$fio = explode(" ", $_POST['org_fio']);
		$name = $fio[1];
		$patr = $fio[2];
		if($patr != ""){
			$tmp = "/ ".$fio[0]." ".$name[0].". ".$patr[0].". /";
		}else{
			$tmp = "/ ".$fio[0]." ".$name[0].". /";
		}
		$objPHPExcel->getActiveSheet()->setCellValue('L31', iconv("Windows-1251", "UTF-8", $tmp));
		$objPHPExcel->getActiveSheet()->setCellValue('B32', iconv("Windows-1251", "UTF-8", $_POST['org_app']));
	}
	if($_POST['Client'] == "Governance"){
		$objPHPExcel->getActiveSheet()->setCellValue('B29', iconv("Windows-1251", "UTF-8", $_POST['gov_name']));
		$fio = explode(" ", $_POST['gov_fio']);
		$name = $fio[1];
		$patr = $fio[2];
		if($patr != ""){
			$tmp = "/ ".$fio[0]." ".$name[0].". ".$patr[0].". /";
		}else{
			$tmp = "/ ".$fio[0]." ".$name[0].". /";
		}
		$objPHPExcel->getActiveSheet()->setCellValue('L31', iconv("Windows-1251", "UTF-8", $tmp));
		$objPHPExcel->getActiveSheet()->setCellValue('B32', iconv("Windows-1251", "UTF-8", $_POST['gov_app']));
	}
	if($_POST['Client'] == "Foreign_Organization"){
		$objPHPExcel->getActiveSheet()->setCellValue('B29', iconv("Windows-1251", "UTF-8", $_POST['for_name'].", Страна регистрации: ".$_POST['for_country']));
	}
	if($_POST['Contractor'] == "Cadastral_Engineer"){
		$objPHPExcel->getActiveSheet()->setCellValue('AW38', iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_FIO']));
		$objPHPExcel->getActiveSheet()->setCellValue('BF40', iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_N_Certificate']));
		$objPHPExcel->getActiveSheet()->setCellValue('X42', iconv("Windows-1251", "UTF-8", $_POST['Cad_Eng_Telephone']));
		$objPHPExcel->getActiveSheet()->setCellValue('B45', iconv("Windows-1251", "UTF-8", "Адрес: ".$_POST['Cad_Eng_Address']));
		$objPHPExcel->getActiveSheet()->setCellValue('B46', iconv("Windows-1251", "UTF-8", "E-Mail: ".$_POST['Cad_Eng_E_mail']));
		$objPHPExcel->getActiveSheet()->setCellValue('W48', iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_name']));
		$fio = explode(" ", $_POST['Cad_Eng_FIO']);
		$name = $fio[1];
		$patr = $fio[2];
		if($patr != ""){
			$tmp = "/ ".$fio[0]." ".$name[0].". ".$patr[0].". /";
		}else{
			$tmp = "/ ".$fio[0]." ".$name[0].". /";
		}
		$objPHPExcel->getActiveSheet()->setCellValue('L50', iconv("Windows-1251", "UTF-8", $tmp));
	}
	
	if($_POST['Contractor'] == "Cadastral_Organization"){
		$objPHPExcel->getActiveSheet()->setCellValue('AW38', iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Officer']));
		$objPHPExcel->getActiveSheet()->setCellValue('BF40', iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Document']));
		$objPHPExcel->getActiveSheet()->setCellValue('X42', iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_Telephone']));
		$objPHPExcel->getActiveSheet()->setCellValue('B45', iconv("Windows-1251", "UTF-8", "Адрес: ".$_POST['Cad_Org_Address']));
		$objPHPExcel->getActiveSheet()->setCellValue('B46', iconv("Windows-1251", "UTF-8", "E-Mail: ".$_POST['Cad_Org_E_mail']));
		$objPHPExcel->getActiveSheet()->setCellValue('W48', iconv("Windows-1251", "UTF-8", $_POST['Cad_Org_name']));
	}
	
	$month['01'] = 'января';
	$month['02'] = 'февраля';
	$month['03'] = 'марта';
	$month['04'] = 'апреля';
	$month['05'] = 'мая';
	$month['06'] = 'июня';
	$month['07'] = 'июля';
	$month['08'] = 'августа';
	$month['09'] = 'сентября';
	$month['10'] = 'октября';
	$month['11'] = 'ноября';
	$month['12'] = 'декабря';
	
	$date_e = explode(".", $_POST['Date_End']);
	$date_g = explode(".", $_POST['Date_Get']);
	/*
	$objPHPExcel->getActiveSheet()->setCellValue('BW33', iconv("Windows-1251", "UTF-8", $date_g[0]));
	$objPHPExcel->getActiveSheet()->setCellValue('CD33', iconv("Windows-1251", "UTF-8", $month[$date_g[1]]));
	$objPHPExcel->getActiveSheet()->setCellValue('CT33', iconv("Windows-1251", "UTF-8", $date_g[2]));
	
	$objPHPExcel->getActiveSheet()->setCellValue('BW50', iconv("Windows-1251", "UTF-8", $date_e[0]));
	$objPHPExcel->getActiveSheet()->setCellValue('CD50', iconv("Windows-1251", "UTF-8", $month[$date_e[1]]));
	$objPHPExcel->getActiveSheet()->setCellValue('CT50', iconv("Windows-1251", "UTF-8", $date_e[2]));
	
	
	$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
	echo $_SESSION['userdir'];
	//Следующая строка с ошибкой
	//$objWriter->save($_SESSION['userdir']."/GUOKS_".$dname."/1 Титульный лист.xlsx");
	*/
// Enable user error handling
libxml_use_internal_errors(true);

$xml = new DOMDocument();
$xml->load($_SESSION['userdir']."/GKUZU_".$GUID.".xml");

if (!$xml->schemaValidate('C:\Разработка\doc_V03_STD_MP\V03_STD_МP\STD_MP.xsd')) {
    print '<b>При проверке документа возникли ошибки:</b>';
    libxml_display_errors();
}else{
	$file=$_SESSION['userdir']."/GKUZU_".$GUID.".xml";
	header("Content-type: application/zip");
	header("Content-Disposition: attachment; filename=GKUZU_".$GUID.".xml");
	readfile($file);
}
?>