File "Classes.php"

Full path: /home/meharicl/www/recensement2/Classes.php
File size: 101.32 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php
        
//File Description @0-8856B122
//======================================================
//
//  This file contains the following classes:
//      class clsMenu
//      class clsSQLParameters
//      class clsSQLParameter
//      class clsControl
//      class clsField
//      class clsButton
//      class clsPanel
//      class clsFileUpload
//      class clsCaptcha
//      class clsDatePicker
//      class clsErrors
//      class clsSection
//      class clsLocaleInfo
//      class clsLocale
//      class clsLocales
//      class clsAttribute
//      class clsAttributes
//      class clsFlashChart
//
//======================================================
//End File Description

//Constant List @0-033DA0AC

// ------- Controls ---------------
define("ccsLabel",           1);
define("ccsLink",            2);
define("ccsTextBox",         3);
define("ccsTextArea",        4);
define("ccsListBox",         5);
define("ccsRadioButton",     6);
define("ccsButton",          7);
define("ccsCheckBox",        8);
define("ccsImage",           9);
define("ccsImageLink",       10);
define("ccsHidden",          11);
define("ccsCheckBoxList",    12);
define("ccsDatePicker",      13);
define("ccsReportLabel",     14);
define("ccsReportPageBreak", 15);

$ControlTypes = array(
  "", "Label","Link","TextBox","TextArea","ListBox","RadioButton",
  "Button","CheckBox","Image","ImageLink","Hidden","CheckBoxList",
  "DatePicker", "ReportLabel","ReportPageBreak"
);


// ------- Operators --------------
define("opEqual",              1);
define("opNotEqual",           2);
define("opLessThan",           3);
define("opLessThanOrEqual",    4);
define("opGreaterThan",        5);
define("opGreaterThanOrEqual", 6);
define("opBeginsWith",         7);
define("opNotBeginsWith",      8);
define("opEndsWith",           9);
define("opNotEndsWith",        10);
define("opContains",           11);
define("opNotContains",        12);
define("opIsNull",             13);
define("opNotNull",            14);
define("opIn",                 15);
define("opBetween",            16);
define("opNotIn",              17);
define("opNotBetween",         18);

// ------- Datasource types -------
define("dsTable",        1);
define("dsSQL",          2);
define("dsProcedure",    3);
define("dsListOfValues", 4);
define("dsEmpty",        5);

// ------- CheckBox states --------
define("ccsChecked", true);
define("ccsUnchecked", false);


//End Constant List

//CCCheckValue @0-962BACE6
function CCCheckValue($Value, $DataType)
{
  $result = false;
  if($DataType == ccsInteger)
    $result = is_int($Value); 
  else if($DataType == ccsFloat)
    $result = is_float($Value);
  else if($DataType == ccsDate)
    $result = (is_array($Value) || is_int($Value));
  else if($DataType == ccsBoolean)
    $result = is_bool($Value); 
  return $result;
}
//End CCCheckValue

//clsMenu Class @0-29CF1700

class clsMenu {

  // Public variables
  var $ComponentType = "Menu";
  var $ComponentName;
  var $Visible;
  var $Errors;
  var $ErrorBlock;
  var $ds;
  var $DataSource;
  var $IsEmpty;
  var $ForceIteration = false;
  var $HasRecord = false;
  var $RowNumber;
  var $controls = array();
  var $ControlsVisible = array();

  var $CCSEvents = "";
  var $CCSEventResult;

  var $RelativePath = "";
  var $Attributes;

  var $PreviousLevel = 1;
  var $ParentField;
  var $IdField;
  var $RootId;

  function clsMenu($ParentField, $IdField, $RootId) {
    $this->ParentField = $ParentField;
    $this->RootId      = $RootId;
    $this->IdField     = $IdField;
    $this->CurrentLevel = 1;
    $this->Errors      = new clsErrors();
    $this->Attributes  = new clsAttributes($this->ComponentName . ":");
  }

  function TransformToFlat($MenuArray, & $Result, $Level = 1) {
    foreach ($MenuArray as $MenuNode) {
      $MenuNode["CCS_Level"] = $Level;
      $MenuChildren = array_key_exists("CCS_Children", $MenuNode) ? $MenuNode["CCS_Children"] : null;
      unset($MenuNode["CCS_Children"]);
      $Result[] = $MenuNode;
      if (!is_null($MenuChildren)) {
        $this->TransformToFlat($MenuChildren, $Result, $Level + 1);
      }
    }
  }  

  function CompareFields($field, $value) {
    if (!strlen($value)) {
      return (!$field) ? true : false;
    }
    if ((int)$field === $value) return true;
    return ($field == $value);
  }

  function GetTreeNodes($Component) {
    global $PathToRoot;
    $MenuArray = array();
    $Tree = array();
    while($this->DataSource->next_record()) {
      if (array_key_exists($this->ParentField, $this->DataSource->Record) && $this->CompareFields($this->DataSource->Record[$this->ParentField], $this->RootId)) {
        $Tree[] = $this->DataSource->Record;
        $Tree[count($Tree) - 1]["CCS_Level"] = 1;
      } else {
        $MenuArray[] = $this->DataSource->Record;
      }
    }
    $this->CreateTree($Tree, $MenuArray, 2);
    return $Tree;
  }
  
  function CreateTree(& $tree, & $data, $lvl) {
    foreach ($tree as $id => $item) {
      if (!array_key_exists($this->IdField, $item)) continue;
      $tree[$id]["CCS_Children"] = $this->GetChildren($item[$this->IdField], $data, $lvl);
      if (count($tree[$id]["CCS_Children"])) {
         $this->CreateTree($tree[$id]["CCS_Children"], $data, $lvl + 1);
      }
    }
    return $tree;
  }
  
  function GetChildren($parent_value, & $menu_array, $lvl) {
    $result = array();
    foreach ($menu_array as $id => $item) {
      if (array_key_exists($this->ParentField, $item) && $this->CompareFields($item[$this->ParentField], $parent_value)) {
          $result[] = $item;
          $result[count($result) - 1]["CCS_Level"] = $lvl;
          unset($menu_array[$id]);
      }
    }
    return $result;
  }
  
  function HasChildren($item_id, $array) {
    foreach ($array as $part) {
      if (array_key_exists($this->ParentField, $part) && ($part[$this->ParentField] == $item_id)) {
        return true;
      }
    }
    return false;
  }
  
  function SetParamsFromDB($QueryString, $ParamsArray) {
    if (!is_array($ParamsArray)) return $QueryString;
    foreach ($ParamsArray as $k => $v) {
      $QueryString = CCAddParam($QueryString, $k, $v);
    }
    return $QueryString;
  }

  function DrawMenuItem($Component) {
    $Tpl = CCGetTemplate($this);
    $CurrentLevel = $Component->DataSource->f("CCS_Level");
    $Component->Attributes->SetValue("Item_Level", $CurrentLevel);
    $Component->Attributes->Show();
    $NextRecord = $Component->DataSource->has_next_record();
    $NextLevel = 1;
    if ($NextRecord) {
        $NextLevel = $NextRecord["CCS_Level"];
    }
    if ($Tpl->BlockExists("OpenLevel")) {
      $Tpl->setblockvar("OpenLevel", "");
      if ($CurrentLevel > $this->PreviousLevel) {
        $Tpl->parse("OpenLevel", false);
      }
    }
    if ($Tpl->BlockExists("CloseLevel")) {
      $Tpl->setblockvar("CloseLevel", "");
      if ($NextLevel < $CurrentLevel) {
        for ($i = 0; $i < ($CurrentLevel - $NextLevel); $i++) {
          $Tpl->parse("CloseLevel", true);
        }
      }
    }
    if ($Tpl->BlockExists("CloseItem")) {
      $Tpl->setblockvar("CloseItem", "");
      if ($NextLevel <= $CurrentLevel) {
        $Tpl->parse("CloseItem", false);
      }
    }
    $this->PreviousLevel = $CurrentLevel;
  }  
  
  function Initialize() {
    if(!$this->Visible) return;
    if (!isset($this->StaticItems)) {
      $this->DataSource->SetOrder("", "");
    }
  } 
  
  function Show() {
    $Tpl = CCGetTemplate($this);
    global $CCSLocales;
    if(!$this->Visible) return;

    $this->RowNumber = 0;
    if (method_exists($this, "SetParameters")) $this->SetParameters();
    $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeSelect", $this);

    $this->DataSource->Prepare();
    $this->DataSource->Open();

    $MenuArray = $this->GetTreeNodes($this->DataSource, $this, $this->IdField, $this->ParentField);
    $Result = array();
    $this->TransformToFlat($MenuArray, $Result, 1);
    $this->DataSource->SetProvider(array("DBLib" => "Array"));
    $this->DataSource->query($Result);
    
    $this->ShowAttributes();
    $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeShow", $this);

    $MenuBlock = "Menu " . $this->ComponentName;
    $ParentPath = $Tpl->block_path;
    $Tpl->block_path = $ParentPath . "/" . $MenuBlock;
    
    if (!$this->IsEmpty) {
      foreach ($this->controls as $control_name => $control_object) {
        $this->ControlsVisible[$control_name] = $control_object->Visible;
      }
      while ($this->ForceIteration || ($this->HasRecord = $this->DataSource->has_next_record())) {
        $this->RowNumber++;
        if ($this->HasRecord) {
          $this->DataSource->next_record();
          $this->DataSource->SetValues();
        }
        $Tpl->block_path = $ParentPath . "/" . $MenuBlock . "/Item";
        $this->SetControlValues();
        if ($this->HasChildren($this->DataSource->f($this->IdField), $Result)) {
          $this->Attributes->SetValue("Submenu", "submenu");
        } else {
          $this->Attributes->SetValue("Submenu", "");
        }
        if (isset($this->StaticItems)) {
          $this->Attributes->SetValue("Target", $this->DataSource->f("item_target"));
          $this->Attributes->SetValue("Title", $this->DataSource->f("item_title"));
        }
        $this->Attributes->SetValue("rowNumber", $this->RowNumber);
        $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeShowRow", $this);
        
        foreach ($this->controls as $control_name => $control_object) {
          $control_object->Show();
        }
        
        $this->DrawMenuItem($this);
        $Tpl->parse();
      }
    }
    $Tpl->block_path = $ParentPath . "/" . $MenuBlock;
    $errors = $this->GetErrors();
    if(strlen($errors))
    {
      $Tpl->replaceblock("", $errors);
      $Tpl->block_path = $ParentPath;
      return;
    }
    $Tpl->parse();
    $Tpl->block_path = $ParentPath;
    $this->DataSource->close();
  }
  
  function GetErrors()
  {
    $errors = "";
    foreach ($this->controls as $control_name => $control_object) {
      $errors = ComposeStrings($errors, $control_object->Errors->ToString());
    }
    $errors = ComposeStrings($errors, $this->Errors->ToString());
    $errors = ComposeStrings($errors, $this->DataSource->Errors->ToString());
    return $errors;
  }
    
}


//End clsMenu Class

//clsSQLParameters Class @0-DFE3AB8A

class clsSQLParameters
{
  
  public $Connection;
  public $Criterion;
  public $AssembledWhere;
  public $Errors;
  public $DataSource;
  public $AllParametersSet;
  public $ErrorBlock;

  public $Parameters1;

  function clsSQLParameters($ErrorBlock = "")
  {
    $this->ErrorBlock = $ErrorBlock;
  }

  function SetParameters($Name, $NewParameter)
  {
    $this->Parameters[$Name] = $NewParameter;
  }

  function AddParameter($ParameterID, $ParameterSource, $DataType, $Format, $DBFormat, $InitValue, $DefaultValue, $UseIsNull = false)
  {
    $this->Parameters[$ParameterID] = new clsSQLParameter($ParameterSource, $DataType, $Format, $DBFormat, $InitValue, $DefaultValue, $UseIsNull, $this->ErrorBlock);
  }

  function AllParamsSet()
  {
    $blnResult = true;

    if(isset($this->Parameters) && is_array($this->Parameters))
    {
      reset($this->Parameters);
      while ($blnResult && list ($key, $Parameter) = each ($this->Parameters)) 
      {
        if($Parameter->GetValue() === "" && $Parameter->GetValue() !== false && $Parameter->UseIsNull === false)
          $blnResult = false;
      }
    }
     return $blnResult;
  }

  function GetDBValue($ParameterID)
  {
    return $this->Parameters[$ParameterID]->GetDBValue();
  }

  function opAND($Brackets, $strLeft, $strRight)
  {
    $strResult = "";
    if (strlen($strLeft))
    {
      if (strlen($strRight)) 
      {
        $strResult = $strLeft . " AND " . $strRight;
      }
      else
      {
        $strResult = $strLeft;
      }
    }
    else
    {
      if (strlen($strRight)) 
        $strResult = $strRight;
    }
    if ($Brackets && strlen($strResult)) { 
      $strResult = " (" . $strResult . ") ";
    }
    return $strResult;
  }

  function opOR($Brackets, $strLeft, $strRight)
  {
    $strResult = "";
    if (strlen($strLeft))
    {
      if (strlen($strRight))
      {
        $strResult = $strLeft . " OR " . $strRight;
      }
      else
      {
        $strResult = $strLeft;
      }
    }
    else
    {
      if (strlen($strRight))
        $strResult = $strRight;
    }
    if ($Brackets && strlen($strResult)) { 
      $strResult = " (" . $strResult . ") ";
    }
    return $strResult;
  }

  function Operation($Operation, $FieldName, $DBValue, $SQLText, $UseIsNull = false)
  {
    $Result = "";

    if((is_array($DBValue) && count($DBValue)) && (!is_array($SQLText) || count($SQLText)) || (!is_array($DBValue) && (strlen($DBValue) || $DBValue === false)))
    {
      $SQLTextVal = $SQLValue = is_array($SQLText) ? $SQLText[0] : $SQLText;
      if(!is_array($DBValue) && CCSubStr($SQLValue, 0, 1) == "'")
        $SQLValue = CCSubStr($SQLValue, 1, CCStrLen($SQLValue) - 2);

      switch ($Operation)
      {
        case opEqual:
          $Result = $FieldName . " = " . $SQLTextVal;
          break;
        case opNotEqual:
          $Result = $FieldName . " <> " . $SQLTextVal;
          break;
        case opLessThan:
          $Result = $FieldName . " < " . $SQLTextVal;
          break;
        case opLessThanOrEqual:
          $Result = $FieldName . " <= " . $SQLTextVal;
          break;
        case opGreaterThan:
          $Result = $FieldName . " > " . $SQLTextVal;
          break;
        case opGreaterThanOrEqual:
          $Result = $FieldName . " >= " . $SQLTextVal;
          break;                                
        case opBeginsWith:
          $Result = $FieldName . " like '" . $SQLValue . "%'";
          break;
        case opNotBeginsWith:
          $Result = $FieldName . " not like '" . $SQLValue . "%'";
          break;
        case opEndsWith:
          $Result = $FieldName . " like '%" . $SQLValue . "'";
          break;
        case opNotEndsWith:
          $Result = $FieldName . " not like '%" . $SQLValue . "'";
          break;
        case opContains:
          $Result = $FieldName . " like '%" . $SQLValue . "%'";
          break;
        case opNotContains:
          $Result = $FieldName . " not like '%" . $SQLValue . "%'";
          break;
        case opIsNull:
          $Result = $FieldName . " IS NULL";
          break;
        case opNotNull:
          $Result = $FieldName . " IS NOT NULL";
          break;
        case opIn:
          if (is_array($SQLText)) 
            $Result = $FieldName . " IN (" .  implode(", ", $SQLText) . ")";
          else
            $Result = $FieldName . " IN (" .  $SQLText . ")";
          break;
        case opBetween:
          if (is_array($SQLText) && count($SQLText) > 1) 
            $Result = $FieldName . " BETWEEN " .  $SQLText[0] . " AND " . $SQLText[1];
          elseif (is_array($SQLText)) 
            $Result = $FieldName . " BETWEEN " .  $SQLText[0] . " AND " . $SQLText[0];
          else
            $Result = $FieldName . " BETWEEN " .  $SQLText . " AND " . $SQLText;
          break;
        case opNotIn:
          if (is_array($SQLText)) 
            $Result = $FieldName . " NOT IN (" .  implode(", ", $SQLText) . ")";
          else
            $Result = $FieldName . " NOT IN (" .  $SQLText . ")";
          break;
        case opNotBetween:
          if (is_array($SQLText) && count($SQLText) > 1) 
            $Result = $FieldName . " NOT BETWEEN " .  $SQLText[0] . " AND " . $SQLText[1];
          elseif (is_array($SQLText)) 
            $Result = $FieldName . " NOT BETWEEN " .  $SQLText[0] . " AND " . $SQLText[0];
          else
            $Result = $FieldName . " NOT BETWEEN " .  $SQLText . " AND " . $SQLText;
          break;

      }
    } 
    else if ($UseIsNull) 
    {
      switch ($Operation)
      {
        case opEqual:
        case opLessThan:
        case opLessThanOrEqual:
        case opGreaterThan:
        case opGreaterThanOrEqual:
        case opBeginsWith:
        case opEndsWith:
        case opContains:
        case opIsNull:
        case opIn:
          $Result = $FieldName . " IS NULL";
          break;
        case opNotEqual:
        case opNotEndsWith:
        case opNotBeginsWith:
        case opNotContains:
        case opNotNull:
          $Result = $FieldName . " IS NOT NULL";
          break;
      }

    }

    return $Result;
  }
}
//End clsSQLParameters Class

//clsSQLParameter Class @0-7313812C
class clsSQLParameter
{
  public $Errors;
  public $DataType;
  public $Format;
  public $DBFormat;
  public $Link;
  public $Caption;
  public $ErrorBlock;
  public $UseIsNull;

  public $Value = "";
  public $IsNull = true;
  public $DBValue;
  public $Text;
  

  function clsSQLParameter($ParameterSource, $DataType, $Format, $DBFormat, $InitValue, $DefaultValue, $UseIsNull = false, $ErrorBlock = "")
  {
    $this->Value = NULL;

    $this->Errors = new clsErrors();
    $this->ErrorBlock = $ErrorBlock;
    $this->UseIsNull = $UseIsNull;

    $this->Caption = $ParameterSource;
    $this->DataType = $DataType;
    $this->Format = $Format;
    $this->DBFormat = $DBFormat;
    if(is_array($InitValue) || strlen($InitValue))
      $this->SetText($InitValue);
    else if(!is_null($DefaultValue))
      $this->SetText($DefaultValue);
  }

  function GetParsedValue($ParsingValue, $Format, $isDbFormat = false)
  {
    $Tpl = CCGetTemplate();
    global $CCSLocales;
    $varResult = "";

    if (strlen($ParsingValue))
    {
      switch ($this->DataType)
      {
        case ccsDate:
          $DateValidation = true;
          if (CCValidateDateMask($ParsingValue, $Format)) {
            $varResult = CCParseDate($ParsingValue, $Format);
            if(!$varResult || !CCValidateDate($varResult))
            {
              $DateValidation = false;
              $varResult = "";
            }
          } else {
            $DateValidation = false;
          }
          if(!$DateValidation) {
            if (is_array($Format)) {
              $FormatString = join("", $Format);
            } else {
              $FormatString = $Format;
            }
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectFormat', array($this->Caption, $FormatString)));
          }
          break;
        case ccsBoolean:
          if (CCValidateBoolean($ParsingValue, $Format))
            $varResult = CCParseBoolean($ParsingValue, $Format);
          else
          {
            if (is_array($Format)) {
              $FormatString = CCGetBooleanFormat($Format);;
            } else {
              $FormatString = $Format;
            }
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectFormat', array($this->Caption, $FormatString)));
          }
          break;
        case ccsInteger:
          if (CCValidateNumber($ParsingValue, $Format, $isDbFormat))
            $varResult = CCParseInteger($ParsingValue, $Format, $isDbFormat);
          else
          {
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectValue', $this->Caption));
          }
          break;
        case ccsFloat:
          if (CCValidateNumber($ParsingValue, $Format, $isDbFormat) )
            $varResult = CCParseFloat($ParsingValue, $Format, $isDbFormat);
          else 
          {
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectValue', $this->Caption));
          }
          break;
        case ccsText:
        case ccsMemo:
          $varResult = strval($ParsingValue);
          break;
      }
      if($this->Errors->Count() > 0)
      {
        if(strlen($this->ErrorBlock))
          $Tpl->replaceblock($this->ErrorBlock, $this->Errors->ToString());
        else
          echo $this->Errors->ToString();
      }
    }

    return $varResult;
  }

  function GetFormattedValue($Format, $isDbFormat = false)
  {
    $strResult = "";
    switch($this->DataType)
    {
      case ccsDate:
        $strResult = CCFormatDate($this->Value, $Format);
        break;
      case ccsBoolean:
        $strResult = CCFormatBoolean($this->Value, $Format);
        break;
      case ccsInteger:
      case ccsFloat:
      case ccsSingle:
        $strResult = CCFormatNumber($this->Value, $Format, $this->DataType, $isDbFormat);
        break;
      case ccsText:
      case ccsMemo:
        $strResult = strval($this->Value);
        break;
    }
    return $strResult;
  }

  function SetValue($Value)
  {
    if (is_array($Value) && ($this->DataType != ccsDate || is_array($Value[0]))) {
      $DBValues = array();
      $Texts = array();
      foreach ($Values as $Val) {
        $this->SetValue($val);
        $DBValues[] = $this->GetDBValue(true);
        $Texts[] = $this->getText(true);
      }
      $this->Value = $Value;
      $this->Text = $Texts;
      $this->DBValue = $DBValues;
      $this->IsNull = count($Value) > 0;
      return;
    }
    if (is_null($Value)) {
      $this->Value = "";
      $this->IsNull = true;
    } else {
      $this->Value = $Value;
      $this->IsNull = false;
    }
    $this->Text = $this->GetFormattedValue($this->Format);
    $this->DBValue = $this->GetFormattedValue($this->DBFormat, true);
  }

  function SetText($Text)
  {
    if (is_array($Text) && ($this->DataType != ccsDate || !CCValidateDate($Text))) {
      $Values = array();
      $DBValues = array();
      foreach ($Text as $Txt) {
        $this->SetText($Txt);
        $Values[] = $this->GetValue(true);
        $DBValues[] = $this->GetDBValue(true);
      }
      $this->Value = $Values;
      $this->Text = $Text;
      $this->DBValue = $DBValues;          
      $this->IsNull = count($Text) > 0;
    } elseif (CCCheckValue($Text, $this->DataType)) {
      $this->SetValue($Text);
    } else {
      $this->Text = $Text;
      $this->Value = $this->GetParsedValue($this->Text, $this->Format);
      if (is_null($this->Value)) {
        $this->Value = "";
        $this->IsNull = true;
      } else {
        $this->IsNull = false;
      }
      $this->DBValue = $this->GetFormattedValue($this->DBFormat, true);
    }
  }

  function SetDBValue($DBValue)
  {
    if (is_array($DBValue)) {
      $Values = array();
      $Texts = array();
      foreach ($DBValue as $DBVal) {
        $this->SetDBValue($DBVal);
        $Values[] = $this->GetValue(true);
        $Texts[] = $this->GetText(true);
      }
      $this->DBValue = $DBValue;
      $this->Value = $Values;
      $this->Text = $Texts;
      $this->IsNull = count($DBValue) > 0;
    } else {
      $this->DBValue = $DBValue;
      $this->Value = $this->GetParsedValue($this->DBValue, $this->DBFormat, true);
      $this->Text = $this->GetFormattedValue($this->Format);
    }
  }

  function GetValue($returnNull = false)
  {
    return $returnNull && $this->IsNull ? NULL : $this->Value;
  }

  function GetText()
  {
    return $this->Text;
  }

  function GetDBValue($returnNull = false)
  {
    return $returnNull && $this->IsNull ? NULL : $this->DBValue;
  }

}

//End clsSQLParameter Class

//clsControl Class @0-FE861DA1
class clsControl
{
  public $ComponentType = "Control";
  public $Errors;
  public $DataType;
  public $DSType;
  public $Format;
  public $DBFormat;
  public $Caption;
  public $ControlType;
  public $ControlTypeName;
  public $Name;
  public $BlockName;
  public $HTML;
  public $Required;
  public $CheckedValue;
  public $UncheckedValue;
  public $State;
  public $BoundColumn;
  public $TextColumn;
  public $Multiple;
  public $Visible;

  public $Page;
  public $Parameters;

  public $CountValue;
  public $SumValue;
  public $ValueRelative;
  public $CountValueRelative;
  public $SumValueRelative;
  public $TotalFunction;
  public $IsPercent = false;
  public $IsEmptySource = false;

  public $isInternal = false;
  public $initialValue;
  public $prevItem = false;

  public $prevValue;
  public $prevCountValue;
  public $prevSumValue;
  public $prevValueRelative;
  public $prevCountValueRelative;
  public $prevSumValueRelative;


  public $Value = "";
  public $Text;
  public $EmptyText;
  public $Values;
  public $IsNull = true;

  public $CCSEvents;
  public $CCSEventResult;

  public $Parent;

  public $Attributes;


  function clsControl($ControlType, $Name, $Caption, $DataType, $Format, $InitValue = "", & $Parent)
  {
    global $ControlTypes;

    $this->Text = "";
    $this->Page = "";
    $this->Parameters = "";
    $this->CCSEvents = "";
    $this->Values = "";
    $this->BoundColumn = "";
    $this->TextColumn = "";
    $this->Visible = true;

    $this->Required = false;
    $this->HTML = false;
    $this->Multiple = false;

    $this->Errors = new clsErrors();

    $this->Name = $Name;
    $this->BlockName = $ControlTypes[$ControlType] . " " . $Name;
    $this->ControlType = $ControlType;
    $this->DataType = $DataType;
    $this->DSType = dsEmpty;
    $this->Format = $Format;
    $this->Caption = $Caption;
    if(is_array($InitValue)) {
      $this->Value = $InitValue;
      $this->IsNull = false;
    } else if(!is_null($InitValue))
      $this->SetText($InitValue);
    $this->Parent = & $Parent;
    $this->ComponentType = $ControlTypes[$ControlType];
    $this->Attributes = new clsAttributes($this->Name . ":");
  }

  function Validate()
  {
    global $CCSLocales;
    $validation = true;
    if($this->Required && ($this->Value === "" || is_null($this->Value)) && $this->Errors->Count() == 0)
    {
      $FieldName = strlen($this->Caption) ? $this->Caption : $this->Name;
      $this->Errors->addError($CCSLocales->GetText('CCS_RequiredField', $this->Caption));
    }
    $this->CCSEventResult = CCGetEvent($this->CCSEvents, "OnValidate", $this);
    return ($this->Errors->Count() == 0);
  }

  function GetParsedValue($ParsingValue)
  {
    global $CCSLocales;
    $varResult = "";
    if($this->Multiple && is_array($ParsingValue)) {
      $ParsingValue = $ParsingValue[0];
    }
    if(CCCheckValue($ParsingValue, $this->DataType))
      $varResult = $ParsingValue;
    else if(strlen($ParsingValue))
    {
      switch ($this->DataType)
      {
        case ccsDate:
          $DateValidation = true;
          if (CCValidateDateMask($ParsingValue, $this->Format)) {
            $varResult = CCParseDate($ParsingValue, $this->Format);
            if(!$varResult || !CCValidateDate($varResult))
            {
              $DateValidation = false;
              $varResult = "";
            }
          } else {
            $DateValidation = false;
          }
          if(!$DateValidation && $this->Errors->Count() == 0)
          {
            if (is_array($this->Format)) {
              $FormatString = join("", $this->Format);
            } else {
              $FormatString = $this->Format;
            }
            if (in_array($FormatString, array("ShortDate", "LongDate", "GeneralDate", "LongTime", "ShortTime"))) { 
            	$FormatString = $CCSLocales->GetFormatInfo($FormatString);
            	if (is_array($FormatString)) $FormatString = join("", $FormatString);
            }
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectFormat', array($this->Caption, $FormatString)));
          }
          break;
        case ccsBoolean:
          if (CCValidateBoolean($ParsingValue, $this->Format))
            $varResult = CCParseBoolean($ParsingValue, $this->Format);
          else if($this->Errors->Count() == 0) {
            if (is_array($this->Format)) {
              $FormatString = CCGetBooleanFormat($this->Format);
            } else {
              $FormatString = $this->Format;
            }
              $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectFormat', array($this->Caption, $FormatString)));          }
          break;
        case ccsInteger:
          if (CCValidateNumber($ParsingValue, $this->Format))
            $varResult = CCParseInteger($ParsingValue, $this->Format);
          else if($this->Errors->Count() == 0)
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectValue', $this->Caption));
          break;
        case ccsFloat:
          if (CCValidateNumber($ParsingValue, $this->Format))
            $varResult = CCParseFloat($ParsingValue, $this->Format);
          else if($this->Errors->Count() == 0)
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectValue', $this->Caption));
          break;
        case ccsText:
        case ccsMemo:
          $varResult = strval($ParsingValue);
          break;
      }
    }

    return $varResult;
  }

  function GetFormattedValue()
  {
    $strResult = "";
    switch($this->DataType)
    {
      case ccsDate:
        $strResult = CCFormatDate($this->Value, $this->Format);
        break;
      case ccsBoolean:
        $strResult = CCFormatBoolean($this->Value, $this->Format);
        break;
      case ccsInteger:
      case ccsFloat:
      case ccsSingle:
        $strResult = CCFormatNumber($this->Value, $this->Format, $this->DataType);
        break;
      case ccsText:
      case ccsMemo:
        $strResult = strval($this->Value);
        break;
    }
    return $strResult;
  }

  function Prepare()
  {
    if($this->DSType == dsTable || $this->DSType == dsSQL || $this->DSType == dsProcedure)
    {
      if(!isset($this->DataSource->CCSEvents)) $this->DataSource->CCSEvents = "";
      if(!strlen($this->BoundColumn)) $this->BoundColumn = 0;
      if(!strlen($this->TextColumn)) $this->TextColumn = 1;
      $this->EventResult = CCGetEvent($this->DataSource->CCSEvents, "BeforeBuildSelect", $this);
      $this->EventResult = CCGetEvent($this->DataSource->CCSEvents, "BeforeExecuteSelect", $this);
      $FieldName = strlen($this->Caption) ? $this->Caption : $this->Name;
      list($this->Values, $this->Errors) = CCGetListValues($this->DataSource, $this->DataSource->SQL, $this->DataSource->Where, $this->DataSource->Order, $this->BoundColumn, $this->TextColumn, $this->DBFormat, $this->DataType, $this->Errors, $FieldName, $this->DSType);
      $this->DataSource->close();
      $this->EventResult = CCGetEvent($this->DataSource->CCSEvents, "AfterExecuteSelect", $this);
    }
  }

  function Show($RowNumber = "")
  {
    $Tpl = CCGetTemplate($this);
    global $CCSIsXHTML;
    $this->EventResult = CCGetEvent($this->CCSEvents, "BeforeShow", $this);
    
    $BRValue       = $CCSIsXHTML ? "<br />" : "<BR>";
    $CheckedValue  = $CCSIsXHTML ? "checked=\"checked\"" : "CHECKED";
    $SelectedValue = $CCSIsXHTML ? "selected=\"selected\"" : "SELECTED";

    $ControlName = ($RowNumber === "") ? $this->Name : $this->Name . "_" . $RowNumber;
    if($this->Multiple) $ControlName = $ControlName . "[]";

    if(!$this->Visible) {
      $Tpl->SetVar($this->Name . "_Name", $ControlName);
      $Tpl->SetVar($this->Name, "");
      if($Tpl->BlockExists($this->BlockName))
        $Tpl->setblockvar($this->BlockName, "");
      return;
    }

    $this->Attributes->Show();
    
    $MasterPath = CCGetMasterPagePath($this);
    if (strlen($MasterPath)) {
      global $PathToCurrentMasterPage;
      $PathToCurrentMasterPage = $MasterPath;
      $Tpl->SetVar("CCS_PathToMasterPage", $PathToCurrentMasterPage);
    }

    $Tpl->SetVar($this->Name . "_Name", $ControlName);
    switch($this->ControlType)
    {
      case ccsLabel:
        $value=$this->GetText();
        if (!$this->HTML) {
          $value = CCToHTML($value);
          $value = str_replace("\n", $BRValue, $value);
        }
        $Tpl->SetVar($this->Name, $value);
        $Tpl->ParseSafe($this->BlockName, false);
        break;
      case ccsReportLabel:
        $value=$this->GetText();
        if (strlen($this->EmptyText) && !strlen($value))
          $value = $this->EmptyText;
        if (!$this->HTML) {
          $value = CCToHTML($value);
          $value = str_replace("\n", $BRValue, $value);
          $value = str_replace("\r", "", $value);
        }
        $Tpl->SetVar($this->Name, $value);
        $Tpl->ParseSafe($this->BlockName, false);
        break;
      case ccsTextBox:
      case ccsTextArea:
      case ccsImage:
      case ccsHidden:
        $Tpl->SetVar($this->Name, CCToHTML($this->GetText()));
        $Tpl->ParseSafe($this->BlockName, false);
        break;
      case ccsLink:
        if ($this->HTML)
          $Tpl->SetVar($this->Name, $this->GetText());
        else {
          $value = CCToHTML($this->GetText());
          $value = str_replace("\n", $BRValue, $value);
          $Tpl->SetVar($this->Name, $value);
        }
        $Tpl->SetVar($this->Name . "_Src", $this->GetLink());
        $Tpl->ParseSafe($this->BlockName, false);
        break;
      case ccsImageLink:
        $Tpl->SetVar($this->Name . "_Src", CCToHTML($this->GetText()));
        $Tpl->SetVar($this->Name, $this->GetLink());
        $Tpl->ParseSafe($this->BlockName, false);
        break;
      case ccsCheckBox:
        if($this->Value)
          $Tpl->SetVar($this->Name, $CheckedValue);
        else
          $Tpl->SetVar($this->Name, "");
        $Tpl->ParseSafe($this->BlockName, false);
        break;
      case ccsRadioButton:
        $BlockToParse = "RadioButton " . $this->Name;
        $Tpl->SetBlockVar($BlockToParse, "");
        if(is_array($this->Values))
        {
          for($i = 0; $i < sizeof($this->Values); $i++)
          {
            $Value = $this->Values[$i][0];
            $this->Attributes->SetValue("optionNumber", $i + 1);
            $this->Attributes->Objects["optionNumber"]->Show();
            $Text = $this->HTML ? $this->Values[$i][1] : CCToHTML($this->Values[$i][1]);
            $Selected = (CCCompareValues($Value,$this->Value, $this->DataType, $this->Format) == 0) ? $CheckedValue : "";
            $TextValue = CCToHTML(CCFormatValue($Value, $this->Format, $this->DataType, $this->Format));
            $Tpl->SetVar("Value", $TextValue);
            $Tpl->SetVar("Check", $Selected);
            $Tpl->SetVar("Description", $Text);
            $Tpl->Parse($BlockToParse, true);
          }
        }
        break;
      case ccsCheckBoxList:
        $BlockToParse = "CheckBoxList " . $this->Name;
        $Tpl->SetBlockVar($BlockToParse, "");
        if(is_array($this->Values))
        {
          for($i = 0; $i < sizeof($this->Values); $i++)
          {
            $Value = $this->Values[$i][0];
            $this->Attributes->SetValue("optionNumber", $i + 1);
            $this->Attributes->Objects["optionNumber"]->Show();
            $TextValue = CCToHTML(CCFormatValue($Value, $this->Format, $this->DataType));
            $Text = $this->HTML ? $this->Values[$i][1] : CCToHTML($this->Values[$i][1]);
            if ($this->Multiple && is_array($this->Value)) {
              $Selected = "";
              foreach ($this->Value as $Val) {
                if (CCCompareValues($Value,$Val, $this->DataType, $this->Format) == 0) {
                  $Selected = " " . $CheckedValue;
                  break;  
                }
              }
            } else {
              $Selected = (CCCompareValues($Value,$this->Value, $this->DataType, $this->Format) == 0) ? " " .$CheckedValue : "";
            }
            $Tpl->SetVar("Value", $TextValue);
            $Tpl->SetVar("Check", $Selected);
            $Tpl->SetVar("Description", $Text);
            $Tpl->Parse($BlockToParse, true);
          }
        }
        break;
      case ccsListBox:
        $Options = "";
        if(is_array($this->Values))
        {
          for($i = 0; $i < sizeof($this->Values); $i++)
          {
            $Value = $this->Values[$i][0];
            $TextValue = CCToHTML(CCFormatValue($Value, $this->Format, $this->DataType));
            $Text = CCToHTML($this->Values[$i][1]);
            if ($this->Multiple && is_array($this->Value)) {
              $Selected = "";
              foreach ($this->Value as $Val) {
                if (CCCompareValues($Value,$Val, $this->DataType, $this->Format) == 0) {
                  $Selected = " " . $SelectedValue;
                  break;  
                }
              }
            } else {
              $Selected = (CCCompareValues($Value,$this->Value, $this->DataType, $this->Format) == 0) ? " " . $SelectedValue : "";
            }
            $Options .= $CCSIsXHTML 
                        ? "<option value=\"" . $TextValue . "\"" . $Selected . ">" . $Text . "</option>\n"
                        : "<OPTION VALUE=\"" . $TextValue . "\"" . $Selected . ">" . $Text . "</OPTION>\n";
          }
        }
        $Tpl->SetVar($this->Name . "_Options", $Options);
        $Tpl->ParseSafe($this->BlockName, false);
        break;
      case ccsPageBreak:
          $Tpl->SetVar($this->Name, $this->Text);

    }
  }

  function SetValue($Value)
  {
    if($this->ControlType == ccsCheckBox) {
      $this->Value = CCCompareValues($Value, $this->CheckedValue, $this->DataType) == 0 || (CCCompareValues($Value, $this->UncheckedValue, $this->DataType) != 0 && (is_array($Value) || strlen($Value))) ? true : false;
      $this->IsNull = false;
    } else {
      $this->Value = $Value;
      $this->IsNull = is_null($Value);
    }
    $this->Text = $this->GetFormattedValue();
    if (!$this->isInternal) 
      $this->initialValue = $this->Value;
  }

  function SetText($Text, $RowNumber = "")
  {
    $ControlName = ($RowNumber === "") ? $this->Name : $this->Name . "_" . $RowNumber;
    if(CCCheckValue($Text, $this->DataType)) {
      $this->SetValue($Text);
    } else {
      if($this->ControlType == ccsCheckBox) {
        $RequestParameter = CCGetParam($ControlName);
        if (strlen($Text) && strlen($RequestParameter) && $Text == $RequestParameter) {
          $this->Value = true;
    $this->IsNull = false;
        } else {
          $Value = $this->GetParsedValue($Text);
          $this->SetValue($Value);
        }
      } else {
  $this->Text = is_null($Text) ? "" : $Text;
        $this->Value = $this->GetParsedValue($this->Text);
        if (is_null($Text)) {
          $this->Value = "";
          $this->IsNull = true;
        } else {
          $this->IsNull = false;
        }
        if (!$this->isInternal) 
          $this->initialValue = $this->Value;
      }
    }
  }

  function GetValue($returnNull = false)
  {
    if($this->ControlType == ccsCheckBox)
      $value = ($this->Value) ? $this->CheckedValue : $this->UncheckedValue;
    else if($this->Multiple && is_array($this->Value))
      $value = $this->Value[0];
    else
      $value = $returnNull && $this->IsNull ? NULL : $this->Value;

    return $value;
  }

  function GetText()
  {
    if(!strlen($this->Text))
      $this->Text = $this->GetFormattedValue();
    return $this->Text;
  }

  function GetLink()
  {
    global $CCSUseAmp;
    if(CCSubStr($this->Page, 0, 2) == "./") {
      return CCSubStr($this->Page, 2);
    }
    if($this->Parameters == "") {
      return $this->Page;
    } else {
      if (strpos($this->Page, "?") === false) {
        $Delimeter = "?";
      } else {
        $Delimeter = strlen(substr($this->Page, strpos($this->Page, "?") + 1)) == 0 ? "" : "&";
      }
      if ($CCSUseAmp) {
        return str_replace("&", "&amp;", $this->Page . $Delimeter . $this->Parameters);
      } else {
        return $this->Page . $Delimeter . $this->Parameters;
      }
    }
  }

  function SetLink($Link)
  {
    if(!strlen($Link))
    {
      $this->Page = "";
      $this->Parameters = "";
    }
    else
    {
      $LinkParts = explode("?", $Link);
      $this->Page = $LinkParts[0];
      $this->Parameters = (sizeof($LinkParts) == 2) ? $LinkParts[1] : "";
    }
  }

  function GetTotalValue($mode) 
  {
    if ($mode == "GetPrevValue") {
      if ($this->TotalFunction == "Count")
        $this->prevValue += 0;
      $this->Value = $this->prevValue;
      return $this->Value;      
    }
    if ($mode == "GetNextValue" && $this->TotalFunction) {
      if ($this->TotalFunction == "Count")
        $this->prevValue += 0;
      $this->Value = $this->prevValue;
      return $this->Value;      
    }

    $this->Value = $this->initialValue;

    $newVal = $this->prevValue;
    switch ($this->TotalFunction) {
      case "Sum":
        if (strval($this->Value) == "" && strval($this->prevValue) == "")
          break;
        $newVal = $this->Value + $this->prevValue;
        if ($this->IsPercent && (strval($this->Value) != "" || strval($this->prevValueRelative) != ""))
          $this->ValueRelative = $this->Value + $this->prevValueRelative;
        break;
      case "Count":
        $newVal = $this->prevValue + ($this->IsEmptySource || ($this->DataType == ccsBoolean && is_bool($this->Value)) || ($this->DataType == ccsDate  && CCValidateDate($this->Value)) || strval($this->Value) != "" ? 1 : 0);
        if ($this->IsPercent)
          $this->ValueRelative = $this->prevValueRelative + ($this->IsEmptySource || ($this->DataType == ccsBoolean && is_bool($this->Value)) || ($this->DataType == ccsDate  && CCValidateDate($this->Value)) || strval($this->Value) != "" ? 1 : 0);
        break;
      case "Min":
        if (strval($this->Value) == "") 
          break;
        $newVal = strval($this->prevValue) == "" ? $this->Value : min($this->Value,$this->prevValue);
        if ($this->IsPercent)
          $this->ValueRelative = strval($this->prevValueRelative) == "" ? $this->Value : min($this->Value,$this->prevValueRelative);
        break;
      case "Max":
        if (strval($this->Value) == "") 
          break;
        $newVal = strval($this->prevValue) == "" ? $this->Value : max($this->Value,$this->prevValue);
        if ($this->IsPercent)
          $this->ValueRelative = strval($this->prevValueRelative) == "" ? $this->Value : max($this->Value,$this->prevValueRelative);
        break;
      case "Avg":
        if (strval($this->Value) != "") { 
          $this->CountValue = $this->prevCountValue + 1;
          $this->SumValue = $this->prevSumValue + $this->Value;
        }
        if ($this->CountValue == 0) 
          $newVal = $this->prevValue;
        else
          $newVal = $this->SumValue / $this->CountValue;
        if ($this->IsPercent) { 
          if (strval($this->Value) !="") { 
            $this->CountValueRelative = $this->prevCountValueRelative + 1;
            $this->SumValueRelative = $this->prevSumValueRelative + $this->Value;
          }
          if ($this->CountValueRelative == 0)
            $this->ValueRelative = $this->prevValueRelative;
          else
            $this->ValueRelative = $this->SumValueRelative / $this->CountValueRelative;
        }
        break;
      default: 
        if ($mode == "" && $this->IsPercent && (strval($this->Value) != "" || strval($this->prevValueRelative) != "")) {
          $this->ValueRelative = $this->Value + $this->prevValueRelative;
        }
        $newVal = $this->Value;
    }
    $this->Value = $newVal;
    if ($mode == "GetNextValue") {
      return $this->Value;
    }
    $this->prevValueRelative = $this->ValueRelative;
    $this->prevValue = $newVal;
    $this->prevCountValue = $this->CountValue;
    $this->prevSumValue = $this->SumValue;
    $this->prevCountValueRelative = $this->CountValueRelative;
    $this->prevSumValueRelative = $this->SumValueRelative;
    return $this->Value;
  }

  function Reset() 
  {
    $this->Value = "";
    $this->CountValue = "";
    $this->SumValue = "";
    $this->prevValue = "";
    $this->prevCountValue = "";
    $this->prevSumValue = "";
  }

  function ResetRelativeValues() 
  {
    $this->ValueRelative = $this->initialValue;
    $this->prevValueRelative = "";
    $this->CountValueRelative = "";
    $this->SumValueRelative = "";
    $this->prevCountValueRelative = "";
    $this->prevSumValueRelative = "";
  }


}

//End clsControl Class

//clsField Class @0-3A089A0E
class clsField
{
  public $DataType;
  public $DBFormat;
  public $Name;
  public $Errors;

  public $Value = "";
  public $IsNull = true;
  public $DBValue = "";

  function clsField($Name, $DataType, $DBFormat)
  {
    $this->Name = $Name;
    $this->DataType = $DataType;
    $this->DBFormat = $DBFormat;

    $this->Errors = new clsErrors;
  }

  function GetParsedValue()
  {
    global $CCSLocales;
    $varResult = "";

    if (strlen($this->DBValue))
    {
      switch ($this->DataType)
      {
        case ccsDate:
          $DateValidation = true;
          if (CCValidateDateMask($this->DBValue, $this->DBFormat)) {
            $varResult = CCParseDate($this->DBValue, $this->DBFormat);
            if(!$varResult || !CCValidateDate($varResult)) {
              $DateValidation = false;
              $varResult = "";
            }
          } else {
            $DateValidation = false;
          }
          if (!$DateValidation)
          {
            if (is_array($this->DBFormat)) {
              $FormatString = join("", $this->DBFormat);
            } else {
              $FormatString = $this->DBFormat;
            }
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectFieldFormat', array($this->Name, $FormatString)));
          }
          break;
        case ccsBoolean:
          if (CCValidateBoolean($this->DBValue, $this->DBFormat)) {
            $varResult = CCParseBoolean($this->DBValue, $this->DBFormat);
          } else {
            if (is_array($this->DBFormat)) {
              $FormatString = CCGetBooleanFormat($this->DBFormat);
            } else {
              $FormatString = $this->DBFormat;
            }
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectFieldFormat', array($this->Name, $FormatString)));
          }
          break;
        case ccsInteger:
          if (CCValidateNumber($this->DBValue, $this->DBFormat, true))
            $varResult = CCParseInteger($this->DBValue, $this->DBFormat, true);
          else 
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectFieldFormat', array($this->Name, $this->DBFormat)));
          break;
        case ccsFloat:
          if (CCValidateNumber($this->DBValue, $this->DBFormat, true) )
            $varResult = CCParseFloat($this->DBValue, $this->DBFormat, true);
          else 
            $this->Errors->addError($CCSLocales->GetText('CCS_IncorrectFieldFormat', array($this->Name, $this->DBFormat)));
          break;
        case ccsText:
        case ccsMemo:
          $varResult = strval($this->DBValue);
          break;
      }
    }

    return $varResult;
  }

  function GetFormattedValue()
  {
    $strResult = "";
    switch($this->DataType)
    {
      case ccsDate:
        $strResult = CCFormatDate($this->Value, $this->DBFormat);
        break;
      case ccsBoolean:
        $strResult = CCFormatBoolean($this->Value, $this->DBFormat);
        break;
      case ccsInteger:
      case ccsFloat:
      case ccsSingle:
        $strResult = CCFormatNumber($this->Value, $this->DBFormat, $this->DataType, true);
        break;
      case ccsText:
      case ccsMemo:
        $strResult = strval($this->Value);
        break;
    }
    return $strResult;
  }

  function SetDBValue($DBValue)
  {
    $this->DBValue = $DBValue;
    $this->Value = $this->GetParsedValue();
  }

  function SetValue($Value)
  {
    if (is_null($Value)) {
      $this->Value = "";
      $this->IsNull = true;
    } else {
      $this->Value = $Value;
      $this->IsNull = false;
    }
    $this->DBValue = $this->GetFormattedValue();
  }

  function GetValue($returnNull = false)
  {
    return $returnNull && $this->IsNull ? NULL : $this->Value;
  }

  function GetDBValue($returnNull = false)
  {
    return $returnNull && $this->IsNull ? NULL : $this->DBValue;
  }
}

//End clsField Class

//clsButton Class @0-69A53F7B
class clsButton
{
  public $ComponentType = "Button";
  public $Name;
  public $Visible;
  public $Pressed;

  public $CCSEvents = "";
  public $CCSEventResult;

  public $Parent;

  public $Attributes;

  function clsButton($Name, $Method, & $Parent)
  {
    $this->Name    = $Name;
    $this->Visible = true;
    $this->Parent  = & $Parent;
    $this->Pressed = CCGetRequestParam($Name, $Method) != "" || CCGetRequestParam($Name . "_x", $Method) != "";
    $this->Attributes = new clsAttributes($this->Name . ":");
  }

  function Show($RowNumber = "")
  {
    $Tpl = CCGetTemplate($this);
    $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeShow", $this);
    if($this->Visible)
    {
      $this->Attributes->Show();
      $ControlName = ($RowNumber === "") ? $this->Name : $this->Name . "_" . $RowNumber;
      $Tpl->SetVar("Button_Name", $ControlName);
      $Tpl->Parse("Button " . $this->Name, false);
    }
    else
    {
      $Tpl->setblockvar("Button " . $this->Name, "");
    }
  }

}

//End clsButton Class

//clsPanel Class @0-FE662C2F
class clsPanel
{
  public $ComponentType = "Panel";
  public $Name;
  public $Visible;
  public $Components = array();
  public $ComponentsArray = array();

  public $CCSEvents = "";
  public $CCSEventResult;
  public $PlaceholderName;
  public $MasterPage;
  public $PathToCurrentPage;
  public $TemplateSource = "";
  public $isContentPlaceholder = false;
  public $GenerateDiv = false;
  public $PanelId = "";

  function clsPanel($Name, & $Parent)
  {
    global $CCSFormFilter;
    $this->Name = $Name;
    $this->Visible = true;
    $this->BlockPrefix = "";
    $this->BlockSuffix = "";
    $this->Parent = & $Parent;
  }
  
  function AddComponent($Name, &$Component){
    $this->Components[$Name] = & $Component;
    $this->ComponentsArray[] = & $Component;
  }

  function Show($RowNumber = "")
  {
    global $CCSFormFilter, $PathToCurrentMasterPage;
    if ($this->isContentPlaceholder) return;
    $Tpl = CCGetTemplate($this);
    $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeShow", $this);
    if($this->Visible)
    {
      $ControlName = $this->Name;
      $ParentPath = $Tpl->block_path;
      $PanelPath = $ParentPath . "/Panel " . $ControlName;
      $Tpl->block_path =  $PanelPath;
      if ($this->MasterPage != null) {
        $this->MasterPage->TemplateSource = $this->TemplateSource;
        $this->MasterPage->InitializeTemplate();
      }
      for ($num = 0, $componentsCnt = count($this->ComponentsArray); $num < $componentsCnt; $num++) {
        if ($this->PathToCurrentPage) { $PathToCurrentMasterPage = $this->PathToCurrentPage; }
        if(strlen($RowNumber)) {
          $this->ComponentsArray[$num]->Show($RowNumber);
        } else {
          $this->ComponentsArray[$num]->Show();
        }
        if ($this->ComponentsArray[$num]->ComponentType == "Panel") {
          if ($this->MasterPage != null && $this->ComponentsArray[$num]->PlaceholderName) {
            $this->MasterPage->HTMLTemplate->SetVar($this->ComponentsArray[$num]->PlaceholderName, $Tpl->GetVar("Panel " . $this->ComponentsArray[$num]->Name));
          }
        }
      }
      $Tpl->block_path = $ParentPath;
      $Tpl->Parse("Panel " . $this->Name, false);
      if ($this->MasterPage) {
        $this->MasterPage->Show();
        $Tpl->setblockvar("Panel ". $this->Name, $this->MasterPage->HTML);
      }
			if ($this->GenerateDiv){
				$this->BlockPrefix = "<div id=\"" . $this->PanelId . "\">" . $this->BlockPrefix;
				$this->BlockSuffix = $this->BlockSuffix . "</div>";
			}
      $Tpl->setblockvar("Panel " . $this->Name, $this->BlockPrefix . $Tpl->getvar("Panel " . $this->Name) . $this->BlockSuffix);
    }
    else
    {
      $Tpl->setblockvar("Panel " . $this->Name, "");
    }
  }
  
  function MasterPageInitialize($Name, $Path, $TplFileName) {
    global $PathToCurrentMasterPage;
    $this->MasterPage = new clsMasterPageTemplate();
    $this->MasterPage->TemplateFileName = $TplFileName;
    $this->MasterPage->Attributes = new clsAttributes($Name . ":");
    $this->MasterPage->TemplateSource = $this->TemplateSource;
    $this->MasterPage->Initialize($Name, $Path);
    $this->PathToCurrentPage = $Path;
    $PathToCurrentMasterPage = $Path;
  }
  
}

//End clsPanel Class

//clsFileUpload Class @0-2DD8D1D6
class clsFileUpload
{
  public $ComponentType = "FileUpload";
  public $Name;
  public $Caption;
  public $Visible;
  public $Required;

  public $TemporaryFolder;
  public $FileFolder;
  public $AllowedMask; // @deprecated , use AllowedFileMasks property
  public $AllowedFileMasks;
  public $DisallowedFileMasks;
  public $FileSizeLimit;
  public $Value;
  public $Text;
  public $State;

  public $CCSEvents = "";
  public $CCSEventResult;

  public $Parent;

  public $Attributes;

  function clsFileUpload($Name, $Caption, $TemporaryFolder, $FileFolder, $AllowedFileMasks, $DisallowedFileMasks, $FileSizeLimit, & $Parent)
  {
    global $CCSLocales;

    $this->Errors = new clsErrors;

    $this->Name            = $Name;
    $this->Visible         = true;
    $this->Caption         = $Caption;
    $this->Parent          = & $Parent;

    if(CCSubStr($TemporaryFolder, 0, 1) == "%") {
      $TemporaryFolder = CCSubStr($TemporaryFolder, 1);
      $TemporaryFolder = isset($_ENV[$TemporaryFolder]) ? $_ENV[$TemporaryFolder] : getenv($TemporaryFolder);
    }
    $this->TemporaryFolder = $TemporaryFolder;
    if(CCSubStr($FileFolder, 0, 1) == "%") {
      $FileFolder = CCSubStr($FileFolder, 1);
      $FileFolder = isset($_ENV[$FileFolder]) ? $_ENV[$FileFolder] : getenv($FileFolder);
    }
    $this->FileFolder          = $FileFolder;
    $this->AllowedFileMasks    = $AllowedFileMasks;
    $this->AllowedMask         = & $this->AllowedFileMasks; 
    $this->DisallowedFileMasks = $DisallowedFileMasks;
    $this->FileSizeLimit       = $FileSizeLimit;
    $this->Value               = "";
    $this->Text                = "";
    $this->Required            = false;

    $FileName = "";
    $FieldName = $this->Caption;
    if( !is_dir($TemporaryFolder) ) {
      $this->Errors->addError($CCSLocales->GetText('CCS_TempFolderNotFound', $this->Caption));
    } else if( !is_writable($TemporaryFolder) ) {
      $this->Errors->addError($CCSLocales->GetText('CCS_TempInsufficientPermissions', $this->Caption));
    } else if( !is_dir($FileFolder) ) {
      $this->Errors->addError($CCSLocales->GetText('CCS_FilesFolderNotFound', $this->Caption));
    } else if( !is_writable($FileFolder) ) {
      $this->Errors->addError($CCSLocales->GetText('CCS_InsufficientPermissions', $this->Caption));
    } 
    $this->Attributes = new clsAttributes($this->Name . ":");

  }

  function Validate()
  {
    global $CCSLocales;
    $validation = true;
    if($this->Required && $this->Value === "" && $this->Errors->Count() == 0)
    {
      $FieldName = $this->Caption;
      $this->Errors->addError($CCSLocales->GetText('CCS_RequiredFieldUpload', $this->Caption));
    }
    $this->CCSEventResult = CCGetEvent($this->CCSEvents, "OnValidate", $this);
    return ($this->Errors->Count() == 0);
  }


  function Upload($RowNumber = "")
  {
    global $CCSLocales;
    global $TemplateEncoding;
    global $FileEncoding;
     

    $FieldName = $this->Caption;
    if(strlen($RowNumber)) {
      $ControlName = $this->Name . "_" . $RowNumber;
      $FileControl = $this->Name . "_File_" . $RowNumber;
      $DeleteControl = $this->Name . "_Delete_" . $RowNumber;
    } else {
      $ControlName = $this->Name;
      $FileControl = $this->Name . "_File";
      $DeleteControl = $this->Name . "_Delete";
    }

    $SessionName = CCGetParam($ControlName);
    $this->State = CCGetSession($SessionName, array(null, null));

    if (strlen(CCGetParam($DeleteControl))) { 
      // delete file from folder
      $ActualFileName = $this->State[0];
      if( file_exists($this->FileFolder . $ActualFileName) ) {
        $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeDeleteFile", $this);
        unlink($this->FileFolder . $ActualFileName);
        $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterDeleteFile", $this);
      } else if ( file_exists($this->TemporaryFolder . $ActualFileName) ) {
        $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeDeleteFile", $this);
        unlink($this->TemporaryFolder . $ActualFileName);
        $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterDeleteFile", $this);
      }
      $this->Value = ""; $this->Text = "";
      $this->State[0] = "";
    } else if (isset ($_FILES[$FileControl]) 
        && $_FILES[$FileControl]["tmp_name"] != "none" 
        && strlen ($_FILES[$FileControl]["tmp_name"])) {
      $this->Value = ""; $this->Text = "";
      $FileName = CCConvertEncoding(CCStrip($_FILES[$FileControl]["name"]), $TemplateEncoding, $FileEncoding);
      $GoodFileMask = 1;
      $meta_characters = array("*" => ".+", "?" => ".", "\\" => "\\\\", "^" => "\\^", "\$" => "\\\$", "." => "\\.", "[" => "\\[", "]" => "\\]", "|" => "\\|", "(" => "\\(", ")" => "\\)", "{" => "\\{", "}" => "\\}", "+" => "\\+", "-" => "\\-");
      if ($this->AllowedFileMasks != "") {
        $GoodFileMask = 0;
        $FileMasks=explode(';', $this->AllowedFileMasks);
        foreach ($FileMasks as $FileMask) {
          $FileMask = preg_replace_callback("/(\\*|\\?|\\\\|\\^|\\\$|\\.|\\[|\\]|\\||\\(|\\)|\\{|\\}|\\+|\\-)/i", function($matches) use ($meta_characters) {
            return $meta_characters[$matches[0]];
          }, $FileMask);
          if (preg_match("/^$FileMask$/i", $FileName)) {
            $GoodFileMask = 1;
            break;
          }
        }
      }

      if ($GoodFileMask && $this->DisallowedFileMasks != "") {
        $FileMasks=explode(';', $this->DisallowedFileMasks);
        foreach ($FileMasks as $FileMask) {
          $FileMask = preg_replace_callback("/(\\*|\\?|\\\\|\\^|\\\$|\\.|\\[|\\]|\\||\\(|\\)|\\{|\\}|\\+|\\-)/i", function($matches) use ($meta_characters) {
            return $meta_characters[$matches[0]];
          }, $FileMask);
          if (preg_match("/^$FileMask$/i", $FileName)) {
            $GoodFileMask = 0;
            break;
          }
        }
      }
      if($_FILES[$FileControl]["size"] > $this->FileSizeLimit) {
        $this->Errors->addError($CCSLocales->GetText('CCS_LargeFile', $this->Caption));
      } else if (!$GoodFileMask) {
        $this->Errors->addError($CCSLocales->GetText('CCS_WrongType', $this->Caption));
      } else {
        // move uploaded file to temporary folder
        $file_exists = true;
        $index = 0;
        while($file_exists) {
          $ActualFileName = date("YmdHis") . $index . "." . $FileName;
          $file_exists = file_exists($this->FileFolder . $ActualFileName) || file_exists($this->TemporaryFolder . $ActualFileName);
          $index++;
        }
        if( move_uploaded_file($_FILES[$FileControl]["tmp_name"], $this->TemporaryFolder . $ActualFileName) ) {
          $this->Value = $ActualFileName;
          $this->Text = $ActualFileName;
          if(isset($this->State[0]) && strlen($this->State[0])) {
            if(file_exists($this->TemporaryFolder . $this->State[0])) {
              $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeDeleteFile", $this);
              unlink($this->TemporaryFolder . $this->State[0]);
              $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterDeleteFile", $this);
              $this->State[0] = $ActualFileName;
            } else {
              if(!is_dir($this->TemporaryFolder . $this->State[1]) && file_exists($this->TemporaryFolder . $this->State[1])) {
                $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeDeleteFile", $this);
                unlink($this->TemporaryFolder . $this->State[1]);
                $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterDeleteFile", $this);
              }
              $this->State[1] = $ActualFileName;
            }
          } else {
            $this->State[0] = $ActualFileName;
          }
        } else {
          $this->Errors->addError($CCSLocales->GetText('CCS_TempInsufficientPermissions', $this->Caption));
        }
      }
    } else {
      $this->SetValue(strlen($this->State[1]) ? $this->State[1] : $this->State[0]);
    }
  }

  function Move()
  {
    global $CCSLocales;
    if (strlen($this->Value) && !file_exists($this->FileFolder . $this->Value)) {
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeProcessFile", $this);
      $FileName = $this->GetFileName();
      $FieldName = $this->Caption;
      if (!file_exists($this->TemporaryFolder . $this->Value)) {
        $this->Errors->addError($CCSLocales->GetText('CCS_FileNotFound', array($this->TemporaryFolder . $this->Value, $this->Caption)));
      } else if (!@copy($this->TemporaryFolder . $this->Value, $this->FileFolder . $this->Value)) {
        $this->Errors->addError($CCSLocales->GetText('CCS_InsufficientPermissions', $this->Caption));
      } else if (strlen($this->State[1])) {
        $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeDeleteFile", $this);
        unlink($this->FileFolder . $this->State[0]);
        $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterDeleteFile", $this);
      }
      if($this->Errors->Count() == 0 && file_exists($this->TemporaryFolder . $this->Value)) {
        unlink($this->TemporaryFolder . $this->Value);
      }
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterProcessFile", $this);
    }
  }

  function Delete()
  {
    if( !is_dir($this->FileFolder . $this->State[0]) && file_exists($this->FileFolder . $this->State[0]) ) {
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeDeleteFile", $this);
      unlink($this->FileFolder . $this->State[0]);
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterDeleteFile", $this);
    } else if ( !is_dir($this->TemporaryFolder . $this->State[0]) && file_exists($this->TemporaryFolder . $this->State[0]) ) {
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeDeleteFile", $this);
      unlink($this->TemporaryFolder . $this->State[0]);
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterDeleteFile", $this);
    }
    if( !is_dir($this->FileFolder . $this->State[1]) && file_exists($this->FileFolder . $this->State[1]) ) {
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeDeleteFile", $this);
      unlink($this->FileFolder . $this->State[1]);
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterDeleteFile", $this);
    } else if ( !is_dir($this->TemporaryFolder . $this->State[1]) && file_exists($this->TemporaryFolder . $this->State[1]) ) {
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeDeleteFile", $this);
      unlink($this->TemporaryFolder . $this->State[1]);
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "AfterDeleteFile", $this);
    }
  }

  function Show($RowNumber = "")
  {
    $Tpl = CCGetTemplate($this);
    if($this->Visible)
    {
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeShow", $this);

      if(!$this->Visible) {
        $Tpl->setblockvar("FileUpload " . $this->Name, "");
        return;
      }

      $this->Attributes->Show();

      if(strlen($RowNumber)) {
        $ControlName = $this->Name . "_" . $RowNumber;
        $FileControl = $this->Name . "_File_" . $RowNumber;
        $DeleteControl = $this->Name . "_Delete_" . $RowNumber;
      } else {
        $ControlName = $this->Name;
        $FileControl = $this->Name . "_File";
        $DeleteControl = $this->Name . "_Delete";
      }

      $SessionName = CCGetParam($ControlName);
      if(!strlen($SessionName)) {
        $random_value = mt_rand(100000,9999999) . mt_rand(100000,9999999);
        $SessionName = "FileUpload" . $random_value . date("dHis");
        $this->State = array($this->Value, "");
      } 

      CCSetSession($SessionName, $this->State);

      $Tpl->SetVar("State", $SessionName);
      $Tpl->SetVar("ControlName", $ControlName);
      $Tpl->SetVar("FileControl", $FileControl);
      $Tpl->SetVar("DeleteControl", $DeleteControl);
      if (strlen($this->Value) ) {
        $Tpl->SetVar("ActualFileName", $this->Value);
        $Tpl->SetVar("FileName", $this->GetFileName());
        $Tpl->SetVar("FileSize", $this->GetFileSize());
        $Tpl->parse("FileUpload " . $this->Name . "/Info", false);
        if($this->Required) {
          $Tpl->parse("FileUpload " . $this->Name . "/Upload", false);
          $Tpl->setblockvar("FileUpload " . $this->Name . "/DeleteControl", "");
        } else {
          $Tpl->setblockvar("FileUpload " . $this->Name . "/Upload", "");
          $Tpl->parse("FileUpload " . $this->Name . "/DeleteControl", false);
        }
      } else {
        $Tpl->parse("FileUpload " . $this->Name . "/Upload", false);
        $Tpl->setblockvar("FileUpload " . $this->Name . "/Info", "");
        $Tpl->setblockvar("FileUpload " . $this->Name . "/DeleteControl", "");
      }

      $Tpl->Parse("FileUpload " . $this->Name, false);
    }
    else
    {
      $Tpl->setblockvar("FileUpload " . $this->Name, "");
    }
  }

  function SetValue($Value) {
    global $CCSLocales;
    $this->Text = $Value;
    $this->Value = $Value;
    $this->State[0] = $Value;
    if(strlen($Value) 
      && !file_exists($this->TemporaryFolder . $Value) 
      && !file_exists($this->FileFolder . $Value)) {
        $FileName = $this->GetFileName();
        $FieldName = $this->Caption;
        $this->Errors->addError($CCSLocales->GetText('CCS_FileNotFound', array($Value, $this->Caption)));
    }
  }

  function SetText($Text) {
    $this->SetValue($Text);
  }

  function GetValue() {
    return $this->Value;
  }

  function GetText() {
    return $this->Text;
  }

  function GetFileName() {
    return CCGetOriginalFileName($this->Value);
  }

  function GetFileSize() {
    $filesize = 0;
    if( file_exists($this->FileFolder . $this->Value) ) {
      $filesize = filesize($this->FileFolder . $this->Value);
    } else if ( file_exists($this->TemporaryFolder . $this->Value) ) {
      $filesize = filesize($this->TemporaryFolder . $this->Value);
    }
    return $filesize;
  }

}

//End clsFileUpload Class

//clsCaptcha Class @0-0290B765
class clsCaptcha {
    public $ComponentType = "Captcha";
    public $Name;
    public $Caption;
    public $Visible;
    public $Required;
    public $Value;
    public $Width;
    public $Height;
    public $SessionName;
    public $CaseSensitive;
    public $Parent;
    public $Attributes;
    public $Errors = array();
    public $CCSEventResult;
    public $CCSEvents;

    function clsCaptcha($Name, $Caption = "", $InitValue, $Width, $Height, $SessionName, $CaseSensitive, & $Parent) {
        $this->Name        = $Name;
        $this->Parent      = & $Parent;
        $this->Visible     = true;
        $this->Caption     = (strlen($Caption)) ? $Caption : $Name;
        $this->Value       = $InitValue;
        $this->Width       = $Width;
        $this->Height      = $Height;
        $this->SessionName = $SessionName;
        $this->Required    = true;
        $this->Errors      = new clsErrors();
        $this->Attributes  = new clsAttributes($this->Name . ":");
        $this->CaseSensitive = $CaseSensitive;
    }

    function Validate() {
        return true;
    }

    function GetValue() {
        return $this->Value;
    }

    function SetValue($Value) {
        $this->Value = $Value;
    }

    function Show() {
        $Tpl = CCGetTemplate($this);
        $ParentPath = $Tpl->block_path;
        $BlockToParse = $ParentPath . "/Captcha " . $this->Name;
        $Tpl->block_path = $BlockToParse;
        if ($this->Visible) {
            $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeShow", $this);
            if (!$this->Visible) {
                $Tpl->block_path = $ParentPath;
                return;
            }
            $Tpl->setvar($this->Name . "_Name", $this->Name);
            $Tpl->setvar("Width", $this->Width);
            $Tpl->setvar("Height", $this->Height);
            $Tpl->block_path = $ParentPath;
            $Tpl->parse("Captcha " . $this->Name, true);
        } else {
            $Tpl->block_path = $ParentPath;
        }
    }
}
//End clsCaptcha Class

//clsDatePicker Class @0-C17F69AF
class clsDatePicker
{
  public $ComponentType = "DatePicker";
  public $Name;
  public $DateFormat;
  public $Style;
  public $FormName;
  public $ControlName;
  public $Visible;
  public $Errors;

  public $Attributes;

  public $CCSEvents = "";
  public $CCSEventResult;

  public $Parent;

  function clsDatePicker($Name, $FormName, $ControlName, & $Parent)
  {
    $this->Name        = $Name;
    $this->FormName    = $FormName;
    $this->ControlName = $ControlName;
    $this->Parent      = & $Parent;
    $this->Visible     = true;

    $this->Errors = new clsErrors;
    $this->Attributes = new clsAttributes($this->Name . ":");
  }

  function Show($RowNumber = "")
  {
    $Tpl = CCGetTemplate($this);
    if($this->Visible)
    {
      $this->Attributes->Show();
      $ControlName = ($RowNumber === "") ? $this->ControlName : $this->ControlName . "_" . $RowNumber;
      $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeShow", $this);
      $Tpl->SetVar("Name",        $this->FormName . "_" . $this->Name);
      $Tpl->SetVar("FormName",    $this->FormName);
      $Tpl->SetVar("DateControl", $ControlName);

      $Tpl->Parse("DatePicker " . $this->Name, false);
    }
    else
    {
      $Tpl->setblockvar("DatePicker " . $this->Name, "");
    }
  }

}

//End clsDatePicker Class

//clsErrors Class @0-D11BE15C
class clsErrors
{
  public $Errors;
  public $ErrorsCount;
  public $ErrorDelimiter;

  function clsErrors()
  {
    global $CCSIsXHTML;
    $this->Errors = array();
    $this->ErrorsCount = 0;
    $this->ErrorDelimiter = $CCSIsXHTML ? "<br />" : "<BR>";
  }

  function addError($Description)
  {
    if (strlen($Description))
    {
      $this->Errors[$this->ErrorsCount] = $Description; 
      $this->ErrorsCount++;
    }
  }

  function AddErrors($Errors)
  {
    for($i = 0; $i < $Errors->Count(); $i++)
      $this->addError($Errors->Errors[$i]);
  }

  function Clear()
  {
    $this->Errors = array();
    $this->ErrorsCount = 0;
  }

  function Count()
  {
    return $this->ErrorsCount;
  }

  function ToString()
  {

    if(sizeof($this->Errors) > 0)
      return join($this->ErrorDelimiter, $this->Errors);
    else
      return "";
  }

}
//End clsErrors Class

//clsSection Class @0-AB10EA0E
class clsSection
{
  public $ComponentType = "Section";
  public $Visible = true;
  public $Height = 0;
  public $CCSEvents = array();
  public $CCSEventResult;
  public $Parent;
  public $Attributes;
  function clsSection(& $Parent) {
    $this->Parent = & $Parent;
  }

}
//End clsSection Class

//clsLocaleInfo @0-2B050E1A
class clsLocaleInfo {
  public $FormatInfo;
  public $Name;
  public $Language;
  public $Country;
  public $BooleanFormat;
  public $DecimalDigits;
  public $DecimalSeparator;
  public $GroupSeparator;
  public $MonthNames;
  public $MonthShortNames;
  public $WeekdayNames;
  public $WeekdayShortNames;
  public $WeekdayNarrowNames;
  public $ShortDate;
  public $LongDate;
  public $ShortTime;
  public $LongTime;
  public $GeneralDate;
  public $FirstWeekDay;
  public $OverrideNumberFormats;
  public $AMDesignator;
  public $PMDesignator;
  public $Encoding;
  public $PHPEncoding;
  public $PHPLocale;
  public $Weekend;

  function clsLocaleInfo($name, $LocaleInfoArray) {
    $this->Name = $name;
    $this->Language = $LocaleInfoArray[0];
    $this->Country = $LocaleInfoArray[1];

    $this->BooleanFormat = $LocaleInfoArray[2];

    $this->DecimalDigits = $LocaleInfoArray[3];
    $this->DecimalSeparator = $LocaleInfoArray[4];
    $this->GroupSeparator = $LocaleInfoArray[5];

    $this->MonthNames = $LocaleInfoArray[6];
    $this->MonthShortNames = $LocaleInfoArray[7];

    $this->WeekdayNames = $LocaleInfoArray[8];
    $this->WeekdayShortNames = $LocaleInfoArray[9];
    $this->WeekdayNarrowNames = $LocaleInfoArray[10];

    $this->ShortDate = $LocaleInfoArray[11];
    $this->LongDate = $LocaleInfoArray[12];

    $this->ShortTime = $LocaleInfoArray[13];
    $this->LongTime = $LocaleInfoArray[14];
    $this->AMDesignator = $LocaleInfoArray[15];
    $this->PMDesignator = $LocaleInfoArray[16];

    $this->GeneralDate = array();
    foreach ($this->ShortDate as $val) {
     array_push($this->GeneralDate, $val);
    }
     array_push($this->GeneralDate, ", ");
    foreach ($this->LongTime as $val) {
     array_push($this->GeneralDate, $val);
    }
    $this->FirstWeekDay = $LocaleInfoArray[17];
    $this->OverrideNumberFormats = $LocaleInfoArray[18];
    $this->PHPLocale = $LocaleInfoArray[19];
    $this->Encoding = $LocaleInfoArray[20];
    $this->PHPEncoding = $LocaleInfoArray[21];
    $this->Weekend = isset($LocaleInfoArray[22]) ? $LocaleInfoArray[22] : "";
  }

  function GetInfo($name) {
    return $this->$name;
  }
  
  function GetCCSFormatInfo() {
    if (!$this->FormatInfo)
      $this->FormatInfo = join("|" , Array($this->Name, $this->Language, $this->Country,  join(";", $this->BooleanFormat),
        $this->DecimalDigits, $this->DecimalSeparator, $this->GroupSeparator,
        join(";", $this->MonthNames) ,  join(";", $this->MonthShortNames),
        join(";", $this->WeekdayNames), join(";", $this->WeekdayShortNames),
        join("", $this->ShortDate), join("", $this->LongDate),
        join("", $this->ShortTime), join("", $this->LongTime),       
        $this->FirstWeekDay, $this->AMDesignator, $this->PMDesignator));
    return $this->FormatInfo;
  }
}

//End clsLocaleInfo

//clsLocale Class @0-D751AA84
class clsLocale {
  public $Name;
  public $Dir;
  public $Ext = ".txt";
  public $ParentLocale;
  public $ParentLocaleName = "";
  public $IsLoaded = false;
  public $LocaleInfo;
  public $Messages;
  public $InternalEncoding = "ISO-8859-1";

  function clsLocale($name, $LocaleInfoArray, $dir = "") {
    $this->Name = $name;
    $this->Dir = $dir;
    $this->Translations = array();
    $this->LocaleInfo = new clsLocaleInfo($name, $LocaleInfoArray);
    $arr = explode("-", $name, 2);
    if (count($arr) == 2)
      $this->ParentLocaleName = $arr[0];
  }

  function LoadTranslation($filename = "") {
    $this->Messages = array();
    $this->Messages["ccs_advsearchallwords"] = " Tous les mots";
    $this->Messages["ccs_advsearchanyofwords"] = " N'importe lequel des mots";
    $this->Messages["ccs_advsearchconditionscaption"] = " Recherche pour ";
    $this->Messages["ccs_advsearchexactphrase"] = " Phrase exacte ";
    $this->Messages["ccs_asc"] = "Croissant";
    $this->Messages["ccs_bytes"] = "octets";
    $this->Messages["ccs_cancel"] = "Annuler";
    $this->Messages["ccs_cannotseek"] = "Impossible de trouver l'enregistrement sp�cifi�.";
    $this->Messages["ccs_charset"] = "windows-1252";
    $this->Messages["ccs_clear"] = "Effacer";
    $this->Messages["ccs_customlinkfield"] = "D�tail";
    $this->Messages["ccs_customoperationerror_missingparameters"] = "Un ou plusieurs param�tres manquent pour effectuer la Mise � jour/Suppression. L'application est mal configur�e.";
    $this->Messages["ccs_databasecommanderror"] = "Erreur de Commande de la Base de donn�es.";
    $this->Messages["ccs_datepickernav61"] = "Le composant S�lecteur de Date n'est pas compatible avec Netscape 6.1.";
    $this->Messages["ccs_delete"] = "Supprimer";
    $this->Messages["ccs_deleteconfirmation"] = "Supprimer les enregistrements ?";
    $this->Messages["ccs_desc"] = "D�croissant";
    $this->Messages["ccs_directoryformprefix"] = "R�pertoire";
    $this->Messages["ccs_directoryformsuffix"] = "";
    $this->Messages["ccs_filenotfound"] = "Le fichier {0} sp�cifi� dans {1} est introuvable.";
    $this->Messages["ccs_filesfoldernotfound"] = "Impossible de t�l�charger le fichier sp�cifi� dans {0} vers le serveur - Le dossier de t�l�chargement n'existe pas.";
    $this->Messages["ccs_fileupload"] = " T�l�chargement de fichier vers le serveur";
    $this->Messages["ccs_filter"] = "Mot-cl�";
    $this->Messages["ccs_first"] = "Premier";
    $this->Messages["ccs_gridformprefix"] = "Liste de";
    $this->Messages["ccs_gridformsuffix"] = "";
    $this->Messages["ccs_gridpagenumbererror"] = "Num�ro de page incorrect.";
    $this->Messages["ccs_gridpagesizeerror"] = "(CCS06) Taille de page incorrecte.";
    $this->Messages["ccs_incorrectemailformat"] = "Format d'email incorrect dans le champ {0}.";
    $this->Messages["ccs_incorrectformat"] = "La valeur du champ {0} n'est pas valide. Veuillez utiliser le format : {1}";
    $this->Messages["ccs_incorrectphoneformat"] = "Format de n� de t�l. incorrect dans le champ {0}.";
    $this->Messages["ccs_incorrectvalue"] = "La valeur du champ {0} n'est pas valide.";
    $this->Messages["ccs_incorrectzipformat"] = "Format de code postal incorrect dans le champ {0}.";
    $this->Messages["ccs_insert"] = "Ins�rer";
    $this->Messages["ccs_insertlink"] = "Ajouter Nouveau";
    $this->Messages["ccs_insufficientpermissions"] = "Droits insuffisants sur les fichiers syst�mes pour t�l�charger le fichier sp�cifi� dans {0} vers le serveur.";
    $this->Messages["ccs_languageid"] = "fr";
    $this->Messages["ccs_largefile"] = "La taille du fichier dans le champ {0} est trop grande.";
    $this->Messages["ccs_last"] = "Dernier";
    $this->Messages["ccs_localeid"] = "fr";
    $this->Messages["ccs_login"] = "Login";
    $this->Messages["ccs_login_form_caption"] = "Login";
    $this->Messages["ccs_loginbtn"] = "Connexion";
    $this->Messages["ccs_loginerror"] = "Nom d'utilisateur ou mot de passe incorrect.";
    $this->Messages["ccs_logoutbtn"] = "D�connexion";
    $this->Messages["ccs_main"] = "Principal";
    $this->Messages["ccs_maskvalidation"] = "Echec de la validation du masque pour le champ {0}.";
    $this->Messages["ccs_maximumlength"] = "Le nombre de caract�res dans le champ {0} ne peut pas �tre sup�rieur � {1}.";
    $this->Messages["ccs_maximumvalue"] = "La valeur du champ {0} ne peut pas �tre sup�rieure � {1}.";
    $this->Messages["ccs_minimumlength"] = "Le nombre de caract�res dans le champ {0} ne peut pas �tre inf�rieur � {1}.";
    $this->Messages["ccs_minimumvalue"] = "La valeur du champ {0} ne peut pas �tre inf�rieure � {1}.";
    $this->Messages["ccs_more"] = "Plus...";
    $this->Messages["ccs_next"] = "Suivant";
    $this->Messages["ccs_nocategories"] = "Aucune cat�gorie trouv�e";
    $this->Messages["ccs_norecords"] = "Aucun enregistrement";
    $this->Messages["ccs_now"] = "Maintenant";
    $this->Messages["ccs_of"] = "de";
    $this->Messages["ccs_operationerror"] = "Impossible d'effectuer l'op�ration {0}. Un ou plusieurs param�tres ne sont pas sp�cifi�s.";
    $this->Messages["ccs_password"] = "Mot de passe";
    $this->Messages["ccs_previous"] = "Pr�c.";
    $this->Messages["ccs_recordformprefix"] = "Ajouter/Editer";
    $this->Messages["ccs_recordformprefix2"] = "Visualiser";
    $this->Messages["ccs_recordformsuffix"] = "";
    $this->Messages["ccs_recperpage"] = "Enregistrements par page";
    $this->Messages["ccs_rememberlogin"] = "M�moriser mon nom d'utilisateur et mot de passe";
    $this->Messages["ccs_reportformprefix"] = "";
    $this->Messages["ccs_reportformsuffix"] = "";
    $this->Messages["ccs_reportpagenumber1"] = "Page";
    $this->Messages["ccs_reportpagenumber2"] = "de";
    $this->Messages["ccs_reportprintlink"] = "Version imprimable";
    $this->Messages["ccs_reportsubtotal"] = "Sub Total";
    $this->Messages["ccs_reporttotal"] = "Total";
    $this->Messages["ccs_requiredfield"] = "La valeur du champ {0} est obligatoire.";
    $this->Messages["ccs_requiredfieldupload"] = "L'attachement de fichier dans le champ {0} est obligatoire.";
    $this->Messages["ccs_requiredsmtpserver_or_dir"] = "Merci de sp�cifier le serveur SMTP ou le r�pertoire Pickup pour le composant email CDO.Message.";
    $this->Messages["ccs_search"] = "Rechercher";
    $this->Messages["ccs_searchformprefix"] = "Recherche";
    $this->Messages["ccs_searchformsuffix"] = "";
    $this->Messages["ccs_selectfield"] = "S�lectionner le Champ";
    $this->Messages["ccs_selectorder"] = "S�lectionner l'Ordre";
    $this->Messages["ccs_selectvalue"] = "S�lectionner la Valeur";
    $this->Messages["ccs_sortby"] = "Trier par";
    $this->Messages["ccs_sortdir"] = "Orientation du Tri";
    $this->Messages["ccs_submitconfirmation"] = "Confirmer les enregistrements ?";
    $this->Messages["ccs_tempfoldernotfound"] = "Impossible de t�l�charger le fichier sp�cifi� dans {0} vers le serveur - Le dossier temporaire de t�l�chargement n'existe pas.";
    $this->Messages["ccs_tempinsufficientpermissions"] = "Droits insuffisants sur les fichiers syst�mes pour t�l�charger le fichier sp�cifi� dans {0} vers le dossier temporaire du serveur.";
    $this->Messages["ccs_today"] = "Aujourd'hui";
    $this->Messages["ccs_totalrecords"] = "Nombre d'enregistrements :";
    $this->Messages["ccs_uniquevalue"] = "La valeur du champ {0} est d�j� en base de donn�es.";
    $this->Messages["ccs_update"] = "Mettre � Jour";
    $this->Messages["ccs_uploadcomponenterror"] = "Erreur lors de l'initialisation du composant de t�l�chargement vers le serveur.";
    $this->Messages["ccs_uploadcomponentnotfound"] = "Le composant de t�l�chargement vers le serveur {0} {1} est introuvable. Merci d'installer le composant ou d'en s�lectionner un autre.";
    $this->Messages["ccs_uploadingerror"] = "Erreur lors du t�l�chargement du fichier sp�cifi� dans {0} vers le serveur. Description de l'erreur: {1}.";
    $this->Messages["ccs_uploadingtempfoldererror"] = "Erreur lors du t�l�chargement du fichier sp�cifi� dans {0} vers le dossier temporaire du serveur. Description de l'erreur: {1}.";
    $this->Messages["ccs_wrongtype"] = "Le type de fichier sp�cifi� dans le champ {0} n'est pas autoris�.";
    $this->IsLoaded = true;
  }

  function GetMessage($originalId, $parent = "") {
    global $CCSLocales;
    global $FileEncoding;
    $id = strtolower($originalId);
    if ($id == "ccs_localeid") return $this->Name;
    if ($id == "ccs_languageid") return $this->LocaleInfo->GetInfo("Language");
    if ($id == "ccs_formatinfo") return $this->LocaleInfo->GetCCSFormatInfo();
    
    if (!$this->IsLoaded)
      $this->LoadTranslation();
    if (array_key_exists($id,  $this->Messages)) {
      return $FileEncoding != $this->InternalEncoding && $id != "ccs_formatinfo" ? CCConvertEncoding($this->Messages[$id], $this->InternalEncoding, $FileEncoding) : $this->Messages[$id];
    } else if (strtolower($parent) == strtolower($CCSLocales->DefaultLocale)) {
      return $originalId;
    } else if ($this->ParentLocale) {
      return $this->ParentLocale->GetMessage($id, $this->Name);
    } elseif ($this->ParentLocaleName && array_key_exists($this->ParentLocaleName, $CCSLocales->Locales)) {
      $this->ParentLocale = & $CCSLocales->Locales[$this->ParentLocaleName];
      return $this->ParentLocale->GetMessage($id, $this->Name);
    } elseif (strtolower($CCSLocales->DefaultLocale) != strtolower($this->Name)) {
      $DefaultLocale = $CCSLocales->Locales[$CCSLocales->DefaultLocale];
      return $DefaultLocale->GetMessage($id, $this->Name);
    } else {
      return $originalId;
    }

  }
}

//End clsLocale Class

//clsLocales Class @0-755429AA
class clsLocales {
  public $Locale;
  public $DefaultLocale;
  public $Locales;
  public $Dir;

  function clsLocales($dir, $locale = "")  {
    $this->Dir = $dir;
    $this->Locale = $locale;
    $this->DefaultLocale = "";
    $this->Locales = array();
  }

  function Init() {
  }

  function AddLocale($name, $LocaleInfoArray) {
    $lname = strtolower($name);
    if (array_key_exists($lname, $this->Locales))
      return;
    $this->Locales[$lname] = new clsLocale($name, $LocaleInfoArray, $this->Dir);
  }

  function GetText($id, $params = Null, $locale = "") {
    if ($locale == "")  
      $locale = $this->Locale;
    if ($locale == "")  
      $locale = $this->DefaultLocale;
    if (!array_key_exists($locale, $this->Locales))
      return "";
    $Result = $this->Locales[$locale]->GetMessage($id);
    if ($Result != "") {
      $Result = preg_replace("/\\\\n/", "\n", $Result);
      $Result = preg_replace("/\\\\/", "\\", $Result);
      if (is_array($params)) {
        for ($i = 0; $i < count($params); $i++)
          $Result = preg_replace("/\{$i\}/", $params[$i], $Result);
      } elseif (!is_null($params)) {
          $Result = preg_replace("/\{0}/", $params, $Result);
      }
    }
    return $Result;
  }

  function GetFormatInfo($name, $locale = "") {
    if ($locale == "")  
      $locale = $this->Locale;
    if ($locale == "")  
      $locale = $this->DefaultLocale;
    return $this->Locales[$locale]->LocaleInfo->GetInfo($name);
  }

  function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a > $b) ? -1 : 1;
  }

  function FindLocale($locale) {
    $locale = strtolower($locale);
    if (!$this->Locale && $locale) {
      $arr = explode("-", $locale, 2);        
      $lang = $arr[0];
      $country = isset($arr[1]) ? $arr[1] : "";
      $defaultCountry = array_key_exists($lang, $this->Locales) ? strtolower($this->Locales[$lang]->LocaleInfo->GetInfo("Country")) : "";
      if (!$country && $defaultCountry && array_key_exists($lang . "-" . $defaultCountry, $this->Locales)) 
        return $lang . "-" . $defaultCountry;
      elseif ($country && !array_key_exists($locale, $this->Locales) && array_key_exists($lang . "-" . $defaultCountry, $this->Locales)) 
        return $lang . "-" . $defaultCountry;
      elseif (array_key_exists($locale, $this->Locales))
        return $locale;
      elseif (array_key_exists($lang, $this->Locales))
        return $lang;
    }
    return false;
  }

  function SetLocale($locale) {
    if (!$this->Locale && $locale) {
      $this->Locale = $this->FindLocale($locale);
      if (!$this->Locale) 
        $this->Locale = $this->DefaultLocale;
    }
  }

  function  SetLocaleFromHttpHeader($Name = "HTTP_ACCEPT_LANGUAGE") {
    if ($this->Locale)
      return false;
    $Locales = array();
    $locale = "";
    $q = "";
    if (!isset($_SERVER[$Name])) return;
    $arr = explode(",", strtolower($_SERVER[$Name]));
    foreach ($arr as $L) {
      if(preg_match("/(.+);q=(\\d+(\\.\\d+)?)/", $L, $matches)) {
        $locale = $matches[1];
        $q = doubleval($matches[2]);
      } else {
        $locale = $L;
        $q = 1;
      }
      if (!array_key_exists(strval($q), $this->Locales))
        $Locales[strval($q)] = array();
      array_push($Locales[strval($q)], $locale);
    }
    uksort($Locales, array($this, "cmp"));

    foreach ($Locales as $q) {
      foreach ($q as $locale) {
        if ($result = $this->FindLocale($locale)) {
          $this->Locale = $result;
          return;
        }
      }
    }
  }

}


//End clsLocales Class

//clsMainPage Class @0-90640A0C
class clsMainPage
{
  public $ComponentType = "Page";
  public $Parent = false;
  public $Connections = array();
  public $Attributes = array();
}
//End clsMainPage Class

//clsAttribute class @0-738BF458
class clsAttribute {
  public  $ComponentType = "Attribute";
  public  $DataType = ccsText;
  public  $Format = "";
  public  $Name = "";
  public  $Prefix = "";

  public  $Value;
  public  $Text;

  function clsAttribute($Name, $Prefix, $DataType="", $Format = "") {
    $this->Name = $Name;
    $this->Prefix = $Prefix;
    if ($this->DataType)
      $this->DataType = $DataType;
    $this->Format = $Format;
  }

  function GetParsedValue($ParsingValue, $MaskFormat) {
    return CCParseValue($ParsingValue, $MaskFormat, $this->DataType, "", "");
  }


  function GetFormattedValue($MaskFormat) {
      return CCFormatValue($this->Value, $MaskFormat, $this->DataType);
  }  

  function Show() {
    $Tpl = CCGetTemplate();
    $Tpl->SetVar($this->Prefix . $this->Name, $this->GetText());
  }

  function SetValue($NewValue) {
    $this->Text = null;
    $this->Value = $NewValue;
  }

  function GetValue() {
    return $this->Value;
  }

  function SetText($NewText) {
    $this->Text = $NewText;
    $this->Value = $this->GetParsedValue($NewText, $this->Format);
  }

  function GetText() {
    if (is_null($this->Text))
      $this->Text = $this->GetFormattedValue($this->Format);
    return $this->Text;
  }

}
//End clsAttribute class

//clsAttributes class @0-8EA3CF6D
class clsAttributes {
  public  $ComponentType = "Attributes";
  public $Objects = array();
  public $Block = "";
  public $Accumulate = "";
  public $Prefix = "";

  function clsAttributes($Prefix) {
    $this->Prefix = $Prefix;
  }

  function Add(& $Attr) {
    $this->Objects[$Attr->Name] = & $Attr;
  }

  function AddAttribute($Name, $DataType = "", $Format = "") {
    $this->Objects[$Name] = new clsAttribute($Name, $this->Prefix, $DataType, $Format);
  }

  function GetValue($Name) {
    return array_key_exists($Name, $this->Objects) ? $this->Objects[$Name]->GetValue() : "";
  }

  function GetText($Name) {
    return array_key_exists($Name, $this->Objects) ? $this->Objects[$Name]->GetText() : "";
  }

  function SetValue($Name, $NewValue, $DataType = "", $Format = "") {
    if (!array_key_exists($Name, $this->Objects))
      $this->AddAttribute($Name, $DataType, $Format);
    $this->Objects[$Name]->SetValue($NewValue);
  }

  function SetText($Name, $NewText) {
    if (!array_key_exists($Name, $this->Objects))
      $this->AddAttribute($Name);
    $this->Objects[$Name]->SetText($NewText);
  }

  function Show() {
    foreach ($this->Objects as $Name => $Attribute) 
        $this->Objects[$Name]->Show();
  }

  function Clear() {
    $this->Objects = array();
  }

  function GetAsArray() {
    $arr = array();
    foreach ($this->Objects as $Name => $Value) {
      $arr[$Name] = array($this->Objects[$Name]->GetValue(), $this->Objects[$Name]->GetText(), $this->Objects[$Name]->DataType, $this->Objects[$Name]->Format);
    }
    $arr["."] = $this->Prefix;
    return $arr;
  }

  function RestoreFromArray($Arr) {
    $this->Objects = array();
    $this->Prefix = $Arr["."];
    $this->AddFromArray($Arr);
  }

  function AddFromArray($Arr) {
    foreach ($Arr as $Name => $Value) {
      if ($Name != ".") {
        $this->Objects[$Name] = new clsAttribute($Name, $this->Prefix, $Value[2], $Value[3]);
        $this->Objects[$Name]->Value = $Value[0];
        $this->Objects[$Name]->Text = $Value[1];
      }
    }
  }

}
//End clsAttributes class

//clsFlashChart class @0-B549D5FA
class clsFlashChart {
  public $Name;
  public $Title = "";
  public $Width = 640;
  public $Height = 480;
  
  public $CCSEvents = "";
  public $CCSEventResult;

  public $CallbackParameter;

  function clsFlashChart($ComponentName, & $Parent){
    $this->Name = $ComponentName;
    $this->ComponentType = "FlashChart";
    $this->Visible = true;
    $this->CCSEvents = array();
    $this->Parent = & $Parent;
    $this->Attributes = new clsAttributes($this->Name . ":");
  }

  function Show() {
    $Tpl = CCGetTemplate($this);
    if (!$this->Visible) return;
    $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeShow", $this);
    if ($this->Visible) {
      $BlockPath = $Tpl->block_path;
      $Tpl->block_path = $Tpl->block_path . "/FlashChart " . $this->Name;
      $Tpl->SetVar("Src", RelativePath . "/FlashChart.swf?XMLDataFile=" . urlencode(FileName . "?" . CCAddParam(CCGetQueryString("All", ""), "callbackControl", $this->CallbackParameter)));
      $Tpl->SetVar("Title", $this->Title);
      $Tpl->SetVar("Width", $this->Width);
      $Tpl->SetVar("Height", $this->Height);
      $Tpl->block_path = $BlockPath;
      $Tpl->Parse("FlashChart " . $this->Name);
    }
  }
}
//End clsFlashChart class

//clsQuadraticPath class @0-E8808214
class clsQuadraticPath {
  public $x1;
  public $y1;
  public $x2;
  public $y2;
  public $x3;
  public $y3;
  
  function clsQuadraticPath($nx1, $ny1, $nx2, $ny2, $nx3, $ny3) {
    $this->x1 = $nx1;
    $this->y1 = $ny1;
    $this->x2 = $nx2;
    $this->y2 = $ny2;
    $this->x3 = $nx3;
    $this->y3 = $ny3;
  }
  
  function ToString() {
    return $this->x1 . "," . $this->y1 . "," . $this->x2 . "," . $this->y2 . "," . $this->x3 . "," . $this->y3;
  }
}
//End clsQuadraticPath class

//clsQuadraticPaths class @0-9ED170E7
class clsQuadraticPaths {
  public $paths;
  public $MaxX;
  public $MaxY;
  public $MinX;
  public $MinY;
  
  function clsQuadraticPaths() {
    $this->paths = array();
  }
  
  function LoadFromArray($arr) {
    $this->MaxX = $arr[1][0];
    $this->MaxY = $arr[1][1];
    $this->MinX = $arr[1][0];
    $this->MinY = $arr[1][1];
    for ($i = 1; $i < count($arr); $i++) {
      $this->paths[$i - 1] = new clsQuadraticPath($arr[$i][0], $arr[$i][1], $arr[$i][2], $arr[$i][3], $arr[$i][4], $arr[$i][5]);
      $this->MaxX = max($this->MaxX, $this->paths[$i - 1]->x1, $this->paths[$i - 1]->x3);
      $this->MaxY = max($this->MaxY, $this->paths[$i - 1]->y1, $this->paths[$i - 1]->y3);
      $this->MinX = min($this->MinX, $this->paths[$i - 1]->x1, $this->paths[$i - 1]->x3);
      $this->MinY = min($this->MinY, $this->paths[$i - 1]->y1, $this->paths[$i - 1]->y3);
    }
  }
  
  function ToString() {
    $res = array();
    for ($i = 0; $i < count($this->paths); $i++) {
      $res[] = $this->paths[$i]->ToString();
    }
    return implode(",", $res);
  }
  
  function ClearMetrics() {
    $this->MaxX = 0;
    $this->MaxY = 0;
    $this->MinX = 0;
    $this->MinY = 0;
  }
  
  function Rotate($gr) {
    $ang = ($gr/180) * pi();
    $cosAng = cos($ang);
    $sinAng = sin($ang);
    $tx = 0; $ty = 0;
    $this->ClearMetrics();
    for ($i = 0; $i < count($this->paths); $i++) {
      $tx = intval($this->paths[$i]->x1 * $cosAng - $this->paths[$i]->y1 * $sinAng);
      $ty = intval($this->paths[$i]->x1 * $sinAng + $this->paths[$i]->y1 * $cosAng);
      $this->paths[$i]->x1 = $tx;
      $this->paths[$i]->y1 = $ty;
      $tx = intval($this->paths[$i]->x2 * $cosAng - $this->paths[$i]->y2 * $sinAng);
      $ty = intval($this->paths[$i]->x2 * $sinAng + $this->paths[$i]->y2 * $cosAng);
      $this->paths[$i]->x2 = $tx;
      $this->paths[$i]->y2 = $ty;
      $tx = intval($this->paths[$i]->x3 * $cosAng - $this->paths[$i]->y3 * $sinAng);
      $ty = intval($this->paths[$i]->x3 * $sinAng + $this->paths[$i]->y3 * $cosAng);
      $this->paths[$i]->x3 = $tx;
      $this->paths[$i]->y3 = $ty;
      $this->MaxX = max($this->MaxX, $this->paths[$i]->x1, $this->paths[$i]->x3);
      $this->MaxY = max($this->MaxY, $this->paths[$i]->y1, $this->paths[$i]->y3);
      $this->MinX = min($this->MinX, $this->paths[$i]->x1, $this->paths[$i]->x3);
      $this->MinY = min($this->MinY, $this->paths[$i]->y1, $this->paths[$i]->y3);
    }
  }

  function Wave($w) {
    $dx = ($this->MaxX - $this->MinX) * $w;
    $dy = $this->MaxY - $this->MinY;
    $omega = $this->MinX;
    $this->ClearMetrics();
    for ($i = 0; $i < count($this->paths); $i++) {
      $this->paths[$i]->x1 = intval($this->paths[$i]->x1 + $dx * cos(pi() * ($this->paths[$i]->y1 - $omega) / $dy));
      $this->paths[$i]->y1 = intval($this->paths[$i]->y1);
      $this->paths[$i]->x2 = intval($this->paths[$i]->x2 + $dx * cos(pi() * ($this->paths[$i]->y2 - $omega) / $dy));
      $this->paths[$i]->y2 = intval($this->paths[$i]->y2);
      $this->paths[$i]->x3 = intval($this->paths[$i]->x3 + $dx * cos(pi() * ($this->paths[$i]->y3 - $omega) / $dy));
      $this->paths[$i]->y3 = intval($this->paths[$i]->y3);
      $this->MaxX = max($this->MaxX, $this->paths[$i]->x1, $this->paths[$i]->x3);
      $this->MaxY = max($this->MaxY, $this->paths[$i]->y1, $this->paths[$i]->y3);
      $this->MinX = min($this->MinX, $this->paths[$i]->x1, $this->paths[$i]->x3);
      $this->MinY = min($this->MinY, $this->paths[$i]->y1, $this->paths[$i]->y3);
    }
  }

  function Broke($dx, $dy) {
    $rx = 0; $ry = 0;
    $this->ClearMetrics();
    for ($i = 0; $i < count($this->paths); $i++) {
      $rx = 2 * $dx * (mt_rand(0, 99)/100) - $dx;
      $ry = 2 * $dy * (mt_rand(0, 99)/100) - $dy;
      $this->paths[$i]->x1 = intval($this->paths[$i]->x1 + $rx);
      $this->paths[$i]->y1 = intval($this->paths[$i]->y1 + $ry);
      $rx = 2 * $dx * (mt_rand(0, 99)/100) - $dx;
      $ry = 2 * $dy * (mt_rand(0, 99)/100) - $dy;
      $this->paths[$i]->x3 = intval($this->paths[$i]->x3 + $rx);
      $this->paths[$i]->y3 = intval($this->paths[$i]->y3 + $ry);
      $this->MaxX = max($this->MaxX, $this->paths[$i]->x1, $this->paths[$i]->x3);
      $this->MaxY = max($this->MaxY, $this->paths[$i]->y1, $this->paths[$i]->y3);
      $this->MinX = min($this->MinX, $this->paths[$i]->x1, $this->paths[$i]->x3);
      $this->MinY = min($this->MinY, $this->paths[$i]->y1, $this->paths[$i]->y3);
    }
  }
  
  function Normalize($mx, $my) {
    $kx = $mx / ($this->MaxX - $this->MinX);
    $ky = $my / ($this->MaxY - $this->MinY);
    if ($kx == 0) $kx = $ky;
    if ($ky == 0) $ky = $kx;
    $dx = $this->MinX;
    $dy = $this->MinY;
    $this->ClearMetrics();
    for ($i = 0; $i < count($this->paths); $i++) {
      $this->paths[$i]->x1 = intval(($this->paths[$i]->x1 - $dx) * $kx);
      $this->paths[$i]->y1 = intval(($this->paths[$i]->y1 - $dy) * $ky);
      $this->paths[$i]->x2 = intval(($this->paths[$i]->x2 - $dx) * $kx);
      $this->paths[$i]->y2 = intval(($this->paths[$i]->y2 - $dy) * $ky);
      $this->paths[$i]->x3 = intval(($this->paths[$i]->x3 - $dx) * $kx);
      $this->paths[$i]->y3 = intval(($this->paths[$i]->y3 - $dy) * $ky);
      $this->MaxX = max($this->MaxX, $this->paths[$i]->x1, $this->paths[$i]->x3);
      $this->MaxY = max($this->MaxY, $this->paths[$i]->y1, $this->paths[$i]->y3);
      $this->MinX = min($this->MinX, $this->paths[$i]->x1, $this->paths[$i]->x3);
      $this->MinY = min($this->MinY, $this->paths[$i]->y1, $this->paths[$i]->y3);
    }
  }
  
  function Addition($cx, $cy) {
    for ($i = 0; $i < count($this->paths); $i++) {
      $this->paths[$i]->x1 = intval($this->paths[$i]->x1 + $cx);
      $this->paths[$i]->y1 = intval($this->paths[$i]->y1 + $cy);
      $this->paths[$i]->x2 = intval($this->paths[$i]->x2 + $cx);
      $this->paths[$i]->y2 = intval($this->paths[$i]->y2 + $cy);
      $this->paths[$i]->x3 = intval($this->paths[$i]->x3 + $cx);
      $this->paths[$i]->y3 = intval($this->paths[$i]->y3 + $cy);
    }
    $this->MaxX = $this->MaxX + $cx;
    $this->MaxY = $this->MaxY + $cy;
    $this->MinX = $this->MinX + $cx;
    $this->MinY = $this->MinY + $cy;
  }

  function Mul($cx, $cy) {
    for ($i = 0; $i < count($this->paths); $i++) {
      $this->paths[$i]->x1 = intval($this->paths[$i]->x1 * $cx);
      $this->paths[$i]->y1 = intval($this->paths[$i]->y1 * $cy);
      $this->paths[$i]->x2 = intval($this->paths[$i]->x2 * $cx);
      $this->paths[$i]->y2 = intval($this->paths[$i]->y2 * $cy);
      $this->paths[$i]->x3 = intval($this->paths[$i]->x3 * $cx);
      $this->paths[$i]->y3 = intval($this->paths[$i]->y3 * $cy);
    }
    $this->MaxX = $this->MaxX * $cx;
    $this->MaxY = $this->MaxY * $cy;
    $this->MinX = $this->MinX * $cx;
    $this->MinY = $this->MinY * $cy;
    if ($this->MaxX < $this->MinX) {
      $t = $this->MaxX;
      $this->MaxX = $this->MinX;
      $this->MinX = $t;
    }
    if ($this->MaxY < $this->MinY) {
      $t = $this->MaxY;
      $this->MaxY = $this->MinY;
      $this->MinY = $t;
    }
  }
  
  function Mix() {
    $r = 0; $t = 0;
    for ($i = 0; $i < count($this->paths); $i++) {
      $r = intval((mt_rand(0, 99)/100)*(count($this->paths)));
      $t = $this->paths[$i]->x1;
      $this->paths[$i]->x1 = $this->paths[$r]->x1;
      $this->paths[$r]->x1 = $t;
      $t = $this->paths[$i]->y1;
      $this->paths[$i]->y1 = $this->paths[$r]->y1;
      $this->paths[$r]->y1 = $t;
      $t = $this->paths[$i]->x2;
      $this->paths[$i]->x2 = $this->paths[$r]->x2;
      $this->paths[$r]->x2 = $t;
      $t = $this->paths[$i]->y2;
      $this->paths[$i]->y2 = $this->paths[$r]->y2;
      $this->paths[$r]->y2 = $t;
      $t = $this->paths[$i]->x3;
      $this->paths[$i]->x3 = $this->paths[$r]->x3;
      $this->paths[$r]->x3 = $t;
      $t = $this->paths[$i]->y3;
      $this->paths[$i]->y3 = $this->paths[$r]->y3;
      $this->paths[$r]->y3 = $t;
    }
  }
  
  function Noise() {
    $this->paths[] = new clsQuadraticPath(0, 0, 0, 0, 0, 0);
    $last = count($this->paths) - 1;
    $this->paths[$last]->x1 = $this->MinX + intval((mt_rand(0, 99)/100)*($this->MaxX - $this->MinX));
    $this->paths[$last]->y1 = $this->MinY + intval((mt_rand(0, 99)/100)*($this->MaxY - $this->MinY));
    $this->paths[$last]->x3 = $this->MinX + intval((mt_rand(0, 99)/100)*($this->MaxX - $this->MinX));
    $this->paths[$last]->y3 = $this->MinY + intval((mt_rand(0, 99)/100)*($this->MaxY - $this->MinY));
    $this->paths[$last]->x2 = min($this->paths[$last]->x3, $this->paths[$last]->x1) + intval((mt_rand(0, 99)/100) * abs($this->paths[$last]->x1 - $this->paths[$last]->x3));
    $this->paths[$last]->y2 = min($this->paths[$last]->y3, $this->paths[$last]->y1) + intval((mt_rand(0, 99)/100) * abs($this->paths[$last]->y1 - $this->paths[$last]->y3));
  }
    
  function Noises($n) {
    for ($i = 0; $i < $n; $i++) {
      $this->Noise();
    }
  }
  
  function AddPaths($p) {
    for ($i = 0; $i < count($p->paths); $i++) {
      $this->paths[] = new clsQuadraticPath($p->paths[$i]->x1, $p->paths[$i]->y1, $p->paths[$i]->x2, $p->paths[$i]->y2, $p->paths[$i]->x3, $p->paths[$i]->y3);
      $last = count($this->paths) - 1;
      $this->MaxX = max($this->MaxX, $this->paths[$last]->x1, $this->paths[$last]->x3);
      $this->MaxY = max($this->MaxY, $this->paths[$last]->y1, $this->paths[$last]->y3);
      $this->MinX = min($this->MinX, $this->paths[$last]->x1, $this->paths[$last]->x3);
      $this->MinY = min($this->MinY, $this->paths[$last]->y1, $this->paths[$last]->y3);
    }
  }
    
}
//End clsQuadraticPaths class

//clsMasterPageTemplate class @0-CFFF2CB7
class clsMasterPageTemplate {

  public $Redirect;
  public $Tpl;
  public $HTMLTemplate;
  public $TemplateFileName;
  public $ComponentName;
  public $Attributes;
  public $HTML;
  
  public $CCSEvents;
  public $CCSEventResult;
  
  public $Visible;
  public $Page;
  public $Name;
  public $CacheAction;
  public $TemplateSource = "";
  public $TemplatePathValue;
  
  function clsMasterPageTemplate() {
    $this->Visible = true;
    $this->Redirect = "";
  }
  
  function Operation() {
    if (!$this->Visible) return;
  }
  
  function Initialize($Name, $Path) {
    $this->Name = $Name;
    $this->TemplatePathValue = $Path;
    if (!$this->Visible) return;
  }
  
  function InitializeTemplate() {
    global $PathToRoot, $Tpl, $TemplateEncoding;
    $this->HTMLTemplate = new clsTemplate();
    if (!strlen($this->TemplateSource)) {
      $this->HTMLTemplate->LoadTemplate($this->TemplatePathValue . $this->TemplateFileName, "main", $TemplateEncoding);
    } else {
      $this->HTMLTemplate->LoadTemplateFromStr($this->TemplateSource, "main", $TemplateEncoding);
    }
    $this->HTMLTemplate->SetVar("CCS_PathToRoot", $PathToRoot);
    $this->HTMLTemplate->block_path = "/main";
    $this->CCSEventResult = CCGetEvent($this->CCSEvents, "OnInitializeView", $this);
  }
  
  function Show() {
    $this->CCSEventResult = CCGetEvent($this->CCSEvents, "BeforeShow", $this);
    if (!$this->Visible) return;
    $this->HTMLTemplate->SetVar("CCS_PathToCurrentPage", RelativePath . $this->TemplatePathValue);
    $this->HTMLTemplate->SetVar("page:pathToCurrentPage", RelativePath . $this->TemplatePathValue);
    $this->Attributes->SetValue("PathToCurrentPage", RelativePath . $this->TemplatePathValue);
    $this->Attributes->Show();
    $this->HTMLTemplate->block_path = "";
    $this->HTMLTemplate->parse("main", false);
    $this->HTML = $this->HTMLTemplate->GetVar("main");
  }
  
}
//End clsMasterPageTemplate class


?>