<?php
	set_time_limit(0);
	session_start();
	if(strpos($_SESSION['userdir'], "exist_building")){
	}else{
	$_SESSION['userdir'] = $_SESSION['userdir']."/exist_building";
	}
	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);
	$dname = $GUID;
	$date_e = explode(".", $_POST['Date_End']);
	$date_g = explode(".", $_POST['Date_Get']);
	$out = "<?xml version='1.0' encoding='UTF-8'?>\n";
	$out .= "<!-- Изготовлено с помощью системы tehplan-online.ru -->\n";
	$out .= "<STD_TP CodeType='024' Version='02' GUID='".$GUID."'>";//ОСНОВНОЙ КОРНЕВОЙ ЭЛЕМЕНТ
		$out .= "<Building>";//Технический план здания
			$out .= "<Package>";//Пакет информации
				$out .= "<Exist_Building>";//Постановка на государственный учет здания
					$out .= "<Register>";//Реестр
						$out .= "<Number_Register>";//Регистрационные номера
							$out .= "<CadastralNumber>";//Кадастровый номер здания
							$out .= trim($_POST['Cad_Number']);
							$out .= "</CadastralNumber>";
						$out .= "</Number_Register>";
					$out .= "</Register>";
					
					$out .= "<Sub_Buildings>";//Части здания
					$CoordFlag = 0;
					for($i = 1; $i <= $_POST['add_new_sub_part_']; $i++){
						$out .= "<Sub_Building Definition = '".$_POST['SubPartDef_'.$i]."'>";
							$out .= "<Area>".$_POST['SubPartArea_'.$i]."</Area>";
							if($_POST['Entity_'.$i] == "Plan"){
								$out .= '<Position_In_Building Description="'.$_POST['SubPartDesc_'.$i].'">';
									$out .= '<Levels>';
									for ($j = 1; $j <= $_POST['add_new_level_'.$i]; $j++) {
										$out .= '<Level Number="'.$_POST['Level_Num_'.$i.'_'.$j].'" Type="'.$_POST['Level_Type_'.$i.'_'.$j].'">';
											$out .= '<Position Number_OnPlan="'.$_POST['Number_OnPlan_'.$i.'_'.$j].'"';
											if($_POST['Description_'.$i.'_'.$j]){
												$out .= ' Description="'.$_POST['Description_'.$i.'_'.$j].'"';
											}
											$out .= '>';
												$levelFile = $_POST['Level_File_'.$i.'_'.$j];
												if ($levelFile != '') {
												$out .= '<Plans>';
													$out .= '<Plan File="./Images/'.$levelFile.'"';
													if ($_POST['Description_File_'.$i.'_'.$j] != '')
														$out .= ' Description="'.$_POST['Description_File_'.$i.'_'.$j].'"';
													$out .= '>';
													$out .= '</Plan>';
												$out .= '</Plans>';
												}
											$out .= '</Position>';
										$out .= '</Level>';
									}
									$out .= '</Levels>';
								$out .= "</Position_In_Building>";
							}
							if($_POST['Entity_'.$i] == "Coord"){
								$CoordFlag = 1;
								$out .= '<Entity_Spatial Ent_Sys="ID_01">';
									$out .= '<Spatial_Element>';
									for($j = 1; $j <= $_POST['Num_Points_'.$i]; $j++){
										$out .= "<Spelement_Unit Type_Unit='Точка' Su_Nmb='".$_POST['Number_'.$i.'_'.$j]."'>";//Часть элемента, "Элементарный"  тип для части элемента,Номер части элемента (порядок обхода)
											$out .= "<Ordinate X='".$_POST['X_'.$i.'_'.$j]."' Y='".$_POST['Y_'.$i.'_'.$j]."' Num_Geopoint='".$_POST['Number_'.$i.'_'.$j]."' Delta_Geopoint='".$_POST['Precision_'.$i]."'>";//Координата
											$out .= "</Ordinate>";
										$out .= "</Spelement_Unit>";
									}
									$out .= '</Spatial_Element>';
								$out .= '</Entity_Spatial>';
							}
							$out .= "<Encumbrance>".$_POST['EncName'.$i]."</Encumbrance>";
						$out .= "</Sub_Building>";
					}
					$out .= "</Sub_Buildings>";
					
				$out .= "</Exist_Building>";
			$out .= "</Package>";
			$out .= "<Contractor Date = '".$date_e[2]."-".$date_e[1]."-".$date_e[0]."'>";//Кадастровый инженер
				$out .= "<Cadastral_Engineer>";//Физическое лицо
					$out .= "<FIO>";//Фамилия, Имя, Отчество
					$Cad_Eng_FIO = explode(" ", trim($_POST['Cad_Eng_FIO']));
						$out .= "<Surname>";//Фамилия
						$out .= $Cad_Eng_FIO[0];
						$out .= "</Surname>";
						$out .= "<First>";//Имя
						$out .= $Cad_Eng_FIO[1];
						$out .= "</First>";
						if(isset($Cad_Eng_FIO[2])){
						$out .= "<Patronymic>";//Отчество
						$out .= $Cad_Eng_FIO[2];
						$out .= "</Patronymic>";
						}
					$out .= "</FIO>";
					$out .= "<N_Certificate>";//Номер квалификационного аттестата кадастрового инженера
					$out .= $_POST['Cad_Eng_N_Certificate'];
					$out .= "</N_Certificate>";
					$out .= "<INN>";//ИНН
					$out .= $_POST['Cad_Eng_INN'];
					$out .= "</INN>";
					$out .= "<Telephone>";//Контактный телефон
					$out .= $_POST['Cad_Eng_Telephone'];
					$out .= "</Telephone>";
					$out .= "<E_mail>";//Электронный адрес
					$out .= $_POST['Cad_Eng_E_mail'];
					$out .= "</E_mail>";
					$out .= "<Address>";//Адрес
					$out .= $_POST['Cad_Eng_Address'];
					$out .= "</Address>";
					$out .= "<Organization>";
						$out .= "<Name>";//Название организации Юр. лица
						$out .= $_POST['Cad_Org_name'];
						$out .= "</Name>";
						$out .= "<Code_OGRN>";//Код ОГРН
						$out .= $_POST['Cad_Org_OGRN'];
						$out .= "</Code_OGRN>";
						$out .= "<Telephone>";//Контактный телефон
						$out .= $_POST['Cad_Org_Telephone'];
						$out .= "</Telephone>";
						$out .= "<E_mail>";//Электронный адрес
						$out .= $_POST['Cad_Org_E_mail'];
						$out .= "</E_mail>";
						$out .= "<Address>";//Адрес
						$out .= $_POST['Cad_Org_Address'];
						$out .= "</Address>";
					$out .= "</Organization>";
				$out .= "</Cadastral_Engineer>";
			$out .= "</Contractor>";
			if($CoordFlag){
				$out .= "<Coord_Systems><Coord_System Name ='".$_POST['coord_sys']."' Cs_Id = 'ID_01'></Coord_System></Coord_Systems>";//Система координат
			}
			$out .= "<Client Date = '".$date_g[2]."-".$date_g[1]."-".$date_g[0]."'>";//Сведения о заказчике кадастровых работ
					if($_POST['Client'] == "Person")
					{
					$out .= "<Person>";//Физические лица
						$out .= "<FIO>";//Фамилия, имя, отчество для Физ. лиц
							$ClientFIO = explode(" ", trim($_POST['Clientfio']));
							$out .= "<Surname>";//Фамилия
							$out .= $ClientFIO[0];
							$out .= "</Surname>";
							$out .= "<First>";//Имя
							$out .= $ClientFIO[1];
							$out .= "</First>";
							if(isset($ClientFIO[2])){
							$out .= "<Patronymic>";//Отчество
							$out .= $ClientFIO[2];
							$out .= "</Patronymic>";
							}							
						$out .= "</FIO>";
					$out .= "</Person>";
					}
					if($_POST['Client'] == "Organization")
					{
					$out .= "<Organization>";//Юридические лица
						$out .= "<Name>";//Полное наименование
						$out .= $_POST['org_name'];
						$out .= "</Name>";
						$out .= "<Agent>";//Представитель
								$ClientFIO = explode(" ", trim($_POST['org_fio']));
								$out .= "<Surname>";//Фамилия
								$out .= $ClientFIO[0];
								$out .= "</Surname>";
								$out .= "<First>";//Имя
								$out .= $ClientFIO[1];
								$out .= "</First>";
								if(isset($ClientFIO[2])){
								$out .= "<Patronymic>";//Отчество
								$out .= $ClientFIO[2];
								$out .= "</Patronymic>";
								}	
							$out .= "<Appointment>";//Должность
							$out .= $_POST['org_app'];
							$out .= "</Appointment>";
						$out .= "</Agent>";
					$out .= "</Organization>";
					}
					if($_POST['Client'] == "Governance")
					{
					$out .= "<Governance>";//Орган государственной власти, орган местного самоуправления
						$out .= "<Name>";//Полное наименование
						$out .= $_POST['gov_name'];
						$out .= "</Name>";
						$out .= "<Agent>";//Представитель
								$ClientFIO = explode(" ", trim($_POST['gov_fio']));
								$out .= "<Surname>";//Фамилия
								$out .= $ClientFIO[0];
								$out .= "</Surname>";
								$out .= "<First>";//Имя
								$out .= $ClientFIO[1];
								$out .= "</First>";
								if(isset($ClientFIO[2])){
								$out .= "<Patronymic>";//Отчество
								$out .= $ClientFIO[2];
								$out .= "</Patronymic>";
								}	
							$out .= "<Appointment>";//Должность	
							$out .= $_POST['gov_app'];
							$out .= "</Appointment>";
						$out .= "</Agent>";
					$out .= "</Governance>";
					}
					if($_POST['Client'] == "Foreign_Organization")
					{
					$out .= "<Foreign_Organization>";
						$out .= "<Name>";//Полное наименование
						$out .= $_POST['for_name'];
						$out .= "</Name>";
						$out .= "<Country>";//Наименование страны регистрации (инкорпорации)
						$out .= $_POST['for_country'];
						$out .= "</Country>";
						$out .= "<Agent>";//Представитель
								$ClientFIO = explode(" ", trim($_POST['for_fio']));
								$out .= "<Surname>";//Фамилия
								$out .= $ClientFIO[0];
								$out .= "</Surname>";
								$out .= "<First>";//Имя
								$out .= $ClientFIO[1];
								$out .= "</First>";
								if(isset($ClientFIO[2])){
								$out .= "<Patronymic>";//Отчество
								$out .= $ClientFIO[2];
								$out .= "</Patronymic>";
								}	
							$out .= "<Appointment>";//Должность	
							$out .= $_POST['for_app'];
							$out .= "</Appointment>";
						$out .= "</Agent>";
					$out .= "</Foreign_Organization>";
					}
			$out .= "</Client>";
			$out .= "<Input_Data>";//Исходные данные
				$out .= "<Documents>";//Перечень документов, использованных при подготовке технического плана
				for($i = 1; $i <= $_POST['add_new_doc_']; $i++){
					$f = fopen("DocumentsTP.csv", "r");
					$data = fgetcsv($f, 1000, ';');
					for($j = 1;;$j++){
						if($data[0] == $_POST['select_doc_'.$i])
						{
							$docname = $data[1];
							break;
						}
						$data = fgetcsv($f, 1000, ';');
					}
					$out .= "<Document>\n"; //Реквизиты документов
						$out .= "<Code_Document>"; //Код документа
						if($_POST['select_doc_'.$i][0] == "8"){
							$_POST['select_doc_'.$i] = "00".$_POST['select_doc_'.$i];
						}
						$out .= $_POST['select_doc_'.$i];
						$out .= "</Code_Document>\n";
						$out .= "<Name>"; //Наименование документа
						$out .= $docname;
						$out .= "</Name>\n";
						if($_POST['Series'.$i] != ""){
							$out .= "<Series>";
							$out .= $_POST['Series'.$i];
							$out .= "</Series>\n";
						}
						if($_POST['Number'.$i] != ""){
							$out .= "<Number>";
							$out .= $_POST['Number'.$i];
							$out .= "</Number>\n";
						}
						if($_POST['Date'.$i] != ""){
							$docd = explode(".", $_POST['Date'.$i]);
							$out .= "<Date>";
							$out .= $docd[2]."-".$docd[1]."-".$docd[0];
							$out .= "</Date>\n";
						}
						if($_POST['IssueOrgan'.$i] != ""){
							$out .= "<IssueOrgan>";
							$out .= $_POST['IssueOrgan'.$i];
							$out .= "</IssueOrgan>\n";
						}
						if($_POST['NumberReg'.$i] != ""){
							$out .= "<NumberReg>";
							$out .= $_POST['NumberReg'.$i];
							$out .= "</NumberReg>\n";
						}
						if($_POST['DateReg'.$i] != ""){
							$docd = explode(".", $_POST['DateReg'.$i]);
							$out .= "<DateReg>";
							$out .= $docd[2]."-".$docd[1]."-".$docd[0];
							$out .= "</DateReg>\n";
						}
						if($_POST['Started'.$i] != "" || $_POST['Stopped'.$i] != ""){
							$out .= "<Duration>";
								if($_POST['Started'.$i] != ""){
									$docd = explode(".", $_POST['Started'.$i]);
									$out .= "<Started>";
									$out .= $docd[2]."-".$docd[1]."-".$docd[0];
									$out .= "</Started>";
								}
								if($_POST['Stopped'.$i] != ""){
									$docd = explode(".", $_POST['Stopped'.$i]);
									$out .= "<Stopped>";
									$out .= $docd[2]."-".$docd[1]."-".$docd[0];
									$out .= "</Stopped>";
								}
							$out .= "</Duration>\n";
						}
						if($_POST['Register'.$i] != ""){
							$out .= "<Register>";
							$out .= $_POST['Register'.$i];
							$out .= "</Register>\n";
						}
						if($_POST['Img_Name'.$i] != ""){
							if(strpos($_POST['Img_Name'.$i], "C:") !== false){
								$ImgName = explode('\\', $_POST['Img_Name'.$i]);
								$_POST['Img_Name'.$i] = $ImgName[2];
							}
							$out .= "<Images>";
								$out .= "<Image Name = './Images/".$_POST['Img_Name'.$i]."'/>";
							$out .= "</Images>\n";
						}
						if($_POST['Desc'.$i] != ""){
							$out .= "<Desc>";
							$out .= $_POST['Desc'.$i];
							$out .= "</Desc>\n";
						}
						if($_POST['IssueOrgan_Code'.$i] != ""){
							$out .= "<IssueOrgan_Code>";
							$out .= $_POST['IssueOrgan_Code'.$i];
							$out .= "</IssueOrgan_Code>\n";
						}
					$out .= "</Document>\n";
				}
				$out .= "</Documents>";
				if($CoordFlag){
					$out .= "<Geodesic_Bases>";	//Сведения о геодезической основе, использованной при подготовке технического плана
					for($i = 1; $i <= $_POST['add_new_geo_point_']; $i++){
						$out .= "<Geodesic_Base>";	//Пункт геодезической сети	
							$out .= "<PName>";	//Название пункта геодезической сети
							$out .= $_POST['geoname_'.$i];
							$out .= "</PName>";
							$out .= "<PKind>";	//Тип пункта геодезической сети
							$out .= $_POST['geotype_'.$i];
							$out .= "</PKind>";
							$out .= "<PKlass>";	//Класс геодезической сети
							$out .= $_POST['geoclass_'.$i];
							$out .= "</PKlass>";
							$out .= "<OrdX>";	//Координата Х
							$out .= $_POST['geox_'.$i];
							$out .= "</OrdX>";
							$out .= "<OrdY>";	//Координата Y	
							$out .= $_POST['geoy_'.$i];
							$out .= "</OrdY>";
						$out .= "</Geodesic_Base>";
					}
					$out .= "</Geodesic_Bases>";
				}
				$out .= "<Means_Survey>";	//Сведения о средствах измерения
					for($i = 1;; $i++){
					if(!isset($_POST['device_'.$i])){
						break;
					}
					$dev = explode("$", $_POST['device_'.$i]);
					$out .= "<Means_Survey>";	//Сведения о средствах измерения
						$out .= "<Name>";	//Название прибора (инструмента, аппаратуры)
						$out .= $dev[0];
						$out .= "</Name>";
						$out .= "<Certificate>";	//Реквизиты сертификата прибора (инструмента, аппаратуры)
						$out .= $dev[1];
						$out .= "</Certificate>";
						$out .= "<Certificate_Verification>";	//Реквизиты свидетельства о поверке прибора (инструмента, аппаратуры)
						$out .= $dev[2];
						$out .= "</Certificate_Verification>";
					$out .= "</Means_Survey>";
					}
				$out .= "</Means_Survey>";
			$out .= "</Input_Data>";
			$out .= "<Conclusion>"; //Заключение кадастрового инженера
			$out .= $_POST['conclusion'];
			$out .= "</Conclusion>";
			$out .= "<Appendix>"; //Приложения
			for($i = 1; $i <= $_POST['add_new_doc_']; $i++){
				$f = fopen("DocumentsTP.csv", "r");
				$data = fgetcsv($f, 1000, ';');
				for($j = 1;;$j++){
					if($data[0] == $_POST['select_doc_'.$i])
					{
						$docname = $data[1];
						break;
					}
					$data = fgetcsv($f, 1000, ';');
				}
				$out .= "<Document>\n"; //Реквизиты документов
					$out .= "<Code_Document>"; //Код документа
					if($_POST['select_doc_'.$i][0] == "8"){
						$_POST['select_doc_'.$i] = "00".$_POST['select_doc_'.$i];
					}
					$out .= $_POST['select_doc_'.$i];
					$out .= "</Code_Document>\n";
					$out .= "<Name>"; //Наименование документа
					$out .= $docname;
					$out .= "</Name>\n";
					if($_POST['Series'.$i] != ""){
						$out .= "<Series>";
						$out .= $_POST['Series'.$i];
						$out .= "</Series>\n";
					}
					if($_POST['Number'.$i] != ""){
						$out .= "<Number>";
						$out .= $_POST['Number'.$i];
						$out .= "</Number>\n";
					}
					if($_POST['Date'.$i] != ""){
						$docd = explode(".", $_POST['Date'.$i]);
						$out .= "<Date>";
						$out .= $docd[2]."-".$docd[1]."-".$docd[0];
						$out .= "</Date>\n";
					}
					if($_POST['IssueOrgan'.$i] != ""){
						$out .= "<IssueOrgan>";
						$out .= $_POST['IssueOrgan'.$i];
						$out .= "</IssueOrgan>\n";
					}
					if($_POST['NumberReg'.$i] != ""){
						$out .= "<NumberReg>";
						$out .= $_POST['NumberReg'.$i];
						$out .= "</NumberReg>\n";
					}
					if($_POST['DateReg'.$i] != ""){
						$docd = explode(".", $_POST['DateReg'.$i]);
						$out .= "<DateReg>";
						$out .= $docd[2]."-".$docd[1]."-".$docd[0];
						$out .= "</DateReg>\n";
					}
					if($_POST['Started'.$i] != "" || $_POST['Stopped'.$i] != ""){
						$out .= "<Duration>";
							if($_POST['Started'.$i] != ""){
								$docd = explode(".", $_POST['Started'.$i]);
								$out .= "<Started>";
								$out .= $docd[2]."-".$docd[1]."-".$docd[0];
								$out .= "</Started>";
							}
							if($_POST['Stopped'.$i] != ""){
								$docd = explode(".", $_POST['Stopped'.$i]);
								$out .= "<Stopped>";
								$out .= $docd[2]."-".$docd[1]."-".$docd[0];
								$out .= "</Stopped>";
							}
						$out .= "</Duration>\n";
					}
					if($_POST['Register'.$i] != ""){
						$out .= "<Register>";
						$out .= $_POST['Register'.$i];
						$out .= "</Register>\n";
					}
					if($_POST['Img_Name'.$i] != ""){
						if(strpos($_POST['Img_Name'.$i], "C:") !== false){
							$ImgName = explode('\\', $_POST['Img_Name'.$i]);
							$_POST['Img_Name'.$i] = $ImgName[2];
						}
						$out .= "<Images>";
							$out .= "<Image Name = './Images/".$_POST['Img_Name'.$i]."'/>";
						$out .= "</Images>\n";
					}
					if($_POST['Desc'.$i] != ""){
						$out .= "<Desc>";
						$out .= $_POST['Desc'.$i];
						$out .= "</Desc>\n";
					}
					if($_POST['IssueOrgan_Code'.$i] != ""){
						$out .= "<IssueOrgan_Code>";
						$out .= $_POST['IssueOrgan_Code'.$i];
						$out .= "</IssueOrgan_Code>\n";
					}
				$out .= "</Document>\n";
			}
			$out .= "</Appendix>";
		$out .= "</Building>";
	$out .= "</STD_TP>";
	date_default_timezone_set("Europe/Moscow");
	
	
	$output = iconv("Windows-1251", "UTF-8", $out);
	$fout = fopen($_SESSION['userdir']."/GUOKS_".$dname.".xml", "w");
	fwrite($fout, $output);
	fclose($fout);
	
	
	
	//---------------------------------------------------------------------------------------------------
	$zip = new ZipArchive(); 
	$zip->open($_SESSION['userdir']."/GUOKS_".$dname.".zip", ZIPARCHIVE::CREATE); 
	$filecontents = file_get_contents($_SESSION['userdir']."/GUOKS_".$dname.".xml");
	$zip->addFromString("GUOKS_".$dname.".xml", $filecontents); 
	
	$zip->addEmptyDir("Images");	
	
	$zip->close(); 
	
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();
}

// Enable user error handling
libxml_use_internal_errors(true);

$xml = new DOMDocument();
$xml->load($_SESSION['userdir']."/GUOKS_".$dname.".xml");

if (!$xml->schemaValidate('C:\Разработка\doc_V02_STD_TP\V02_STD_TP\STD_TP.xsd')) {
    print '<b>DOMDocument::schemaValidate() Generated Errors!</b>';
    libxml_display_errors();
}else{	
	$filename = iconv('windows-1251', 'cp866', $filename);
	$file=$_SESSION['userdir']."/GUOKS_".$dname.".zip";
	$size = filesize($file);
	header("Content-type: application/zip");
	header("Content-Length: ".$size);
	header("Content-Disposition: attachment; filename=GUOKS_".$dname.".zip");
	readfile($file); 
	}

?>