/**
 * Оплата с личного счета.
 *
 * @param type  $type
 * @param array $data (weeks, prof_id, is_spec)
 *
 * @return type
 */
function quickPaymentMasssendingAccount($type, $data)
{
    $is_error = true;
    $uid = get_uid(false);
    $objResponse =& new xajaxResponse();
    $send_id = (int) $data['send_id'];
    $promo_code = (string) @$data['promo'];
    $masssending = new masssending();
    $params = $masssending->getAccepted($send_id, $uid);
    if ($params) {
        $bill = new billing(get_uid(false));
        //Допустимо использование промокодов
        $bill->setPromoCodes('SERVICE_MASSSENDING', $promo_code);
        $option = array('amount' => $params['pre_sum'], 'masssending_id' => $params['id']);
        $complete = $bill->addServiceAndPayFromAccount(masssending::OPER_CODE, $option);
        if ($complete) {
            $is_error = false;
            $_SESSION['quickmss_ok'] = 1;
            $objResponse->script("window.location = '/bill/history/?period=3';");
        }
    }
    // Показываем предупреждение в случае ошибки
    if ($is_error) {
        $objResponse->script("\n            var qp = window.quick_payment_factory.getQuickPayment('masssending');\n            if(qp) qp.show_error('Возникла ошибка при оплате рассылки!');\n        ");
    }
    return $objResponse;
}
/**
 * Оплата с личного счета.
 *
 * @param type  $type
 * @param array $data (weeks, prof_id, is_spec)
 *
 * @return type
 */
function quickPaymentTservicebindAccount($type, $data)
{
    $is_error = true;
    $uid = get_uid(false);
    $objResponse =& new xajaxResponse();
    $kind = (int) @$data['kind'];
    $tservice_id = (int) @$data['tservice_text_db_id'];
    $prof_id = (int) @$data['prof_id'];
    $is_prolong = (bool) @$data['is_prolong'];
    $promo_code = (string) @$data['promo'];
    $tservices_binds = new tservices_binds($kind);
    $tservices = new tservices($uid);
    $allow = $tservices_binds->isAllowBind($uid, $tservice_id, $kind, $prof_id);
    $valid = $tservices->isExists($tservice_id) && ($is_prolong ? !$allow : $allow);
    if ($valid) {
        $bill = new billing($uid);
        //Допустимо использование промокодов
        $bill->setPromoCodes('SERVICE_TSERVICEBIND', $promo_code);
        $op_code = $tservices_binds->getOpCode();
        $option = array('weeks' => (int) @$data['weeks'], 'prof_id' => $prof_id, 'tservice_id' => $tservice_id, 'is_prolong' => $is_prolong);
        $ok = $bill->addServiceAndPayFromAccount($op_code, $option);
        if ($ok) {
            $is_error = false;
            $objResponse->script('window.location.reload();');
        }
    }
    // Показываем предупреждение в случае ошибки
    if ($is_error) {
        $idx = quickPaymentPopupTservicebind::getPopupId($is_prolong ? $tservice_id : 0);
        $action = $is_prolong ? 'продлении закрепления' : 'закреплении';
        $objResponse->script("\n            var qp = window.quick_payment_factory.getQuickPaymentById('tservicebind', '" . $idx . "');\n            if(qp) qp.show_error('Возникла ошибка при {$action} услуги!');\n        ");
    }
    return $objResponse;
}
/**
 * Оплата с личного счета
 * @param type $type
 * @param array $data (weeks, prof_id, is_spec)
 * @return type
 */
function quickPaymentTservicebindupAccount($type, $data)
{
    $is_error = true;
    $uid = get_uid(false);
    $objResponse =& new xajaxResponse();
    $kind = (int) @$data['kind'];
    $tservice_id = (int) @$data['tservice_text_db_id'];
    $prof_id = (int) @$data['prof_id'];
    $promo_code = (string) @$data['promo'];
    $tservices_binds = new tservices_binds($kind);
    $bind = $tservices_binds->getItem($uid, $tservice_id, $prof_id);
    if ($bind) {
        $bill = new billing($uid);
        //Допустимо использование промокодов
        $bill->setPromoCodes('SERVICE_TSERVICEBIND', $promo_code);
        $op_code = $tservices_binds->getOpCode(true);
        $option = array('bind_id' => $bind['id'], 'prof_id' => $prof_id);
        $ok = $bill->addServiceAndPayFromAccount($op_code, $option);
        if ($ok) {
            $is_error = false;
            $objResponse->script("window.location.reload();");
        }
    }
    // Показываем предупреждение в случае ошибки
    if ($is_error) {
        $idx = quickPaymentPopupTservicebindup::getPopupId($tservice_id);
        $objResponse->script("\n            var qp = window.quick_payment_factory.getQuickPaymentById('tservicebindup', '" . $idx . "');\n            if(qp) qp.show_error('Возникла ошибка при поднятии закрепления услуги!');\n        ");
    }
    return $objResponse;
}
/**
 * Оплата с личного счета
 * @param type $type
 * @param array $data (weeks, prof_id, is_spec)
 * @return type
 */
function quickPaymentFrlbindAccount($type, $data)
{
    $is_error = true;
    $uid = get_uid(false);
    $objResponse =& new xajaxResponse();
    $prof_id = (int) @$data['prof_id'];
    $is_spec = (bool) @$data['is_spec'];
    $is_prolong = (bool) @$data['is_prolong'];
    $promo_code = (string) @$data['promo'];
    $freelancer_binds = new freelancer_binds();
    $valid = $is_prolong ? $freelancer_binds->isUserBinded($uid, $prof_id, $is_spec) : $freelancer_binds->isAllowBind($uid, $prof_id, $is_spec);
    if ($valid) {
        $bill = new billing($uid);
        //Допустимо использование промокодов
        $bill->setPromoCodes('SERVICE_FRLBIND', $promo_code);
        $op_code = $freelancer_binds->getOpCode($prof_id, $is_spec, $is_prolong);
        $option = array('weeks' => (int) @$data['weeks'], 'prof_id' => $prof_id);
        $ok = $bill->addServiceAndPayFromAccount($op_code, $option);
        if ($ok) {
            $is_error = false;
            $link = '/freelancers/';
            if ($prof_id) {
                if ($is_spec) {
                    $link .= professions::GetProfLink($prof_id) . '/';
                } else {
                    $group = professions::GetGroup($prof_id, $error);
                    $link .= $group['link'] . '/';
                }
            }
            $objResponse->script("window.location.href = '{$link}';");
        }
    }
    // Показываем предупреждение в случае ошибки
    if ($is_error) {
        $action = $is_prolong ? 'продлении закрепления' : 'закреплении';
        $objResponse->script("\n            var qp = window.quick_payment_factory.getQuickPayment('frlbind');\n            if(qp) qp.show_error('Возникла ошибка при {$action} в каталоге!');\n        ");
    }
    return $objResponse;
}
/**
 * Оплата с личного счета
 * 
 * @param type $type
 * @param array $data
 * @return type
 */
function quickPaymentProAccount($type, $data)
{
    $uid = get_uid(false);
    $objResponse = new xajaxResponse();
    if (!($uid > 0)) {
        return $objResponse;
    }
    $is_emp = is_emp();
    $form = new ProForm($is_emp);
    if (!$form->isValid($data)) {
        $objResponse->script("\n            var qp = window.quick_ext_payment_factory.getQuickPayment('pro');\n            if(qp) qp.show_error('К сожалению, в процессе оплаты произошла ошибка, и платеж не был завершен. Попробуйте провести оплату еще раз.');\n        ");
        return $objResponse;
    }
    $data = $form->getValues();
    $opcode = $data['type'];
    $promo_code = isset($data['promo']) ? $data['promo'] : "";
    $bill = new billing($uid);
    //Допустимо использование промокодов
    $bill->setPromoCodes('SERVICE_PRO', $promo_code);
    $complete = $bill->addServiceAndPayFromAccount($opcode);
    if ($complete) {
        $payed_sum = $bill->getOrderPayedSum();
        $_SESSION['quickbuypro_success_opcode'] = $payed_sum;
        $uri = isset($_SESSION['quickbuypro_redirect']) ? $_SESSION['quickbuypro_redirect'] : '';
        $uri .= '?quickpro_ok=1';
        //@todo: ПРОФИ пока игнорируем
        /*
        if ($opcode == 164) {
            $uri = '/profi/?quickprofi_ok=1';
        }
        */
        $objResponse->script("window.location = '{$uri}';");
    }
    return $objResponse;
}
/**
 * Оплата с личного счета
 * 
 * @param type $type
 * @param array $data
 * @return type
 */
function quickPaymentCaruselAccount($type, $data)
{
    $uid = get_uid(false);
    $objResponse =& new xajaxResponse();
    if (!$uid || is_emp()) {
        return $objResponse;
    }
    $promo = isset($data['promo']) ? $data['promo'] : "";
    $form = new CaruselForm();
    if (!$form->isValid($data)) {
        $params = addslashes(urldecode(http_build_query($form->getAllMessages('<br/>'))));
        $objResponse->script("\n            var qp = window.quick_ext_payment_factory.getQuickPayment('carusel');\n            if(qp) qp.showElementsError('{$params}');\n        ");
        return $objResponse;
    }
    $data = $form->getValues();
    $bill = new billing($uid);
    $bill->setPromoCodes('SERVICE_CARUSEL', $promo);
    $options = array('ad_header' => $data['title'], 'ad_text' => $data['description'], 'num' => $data['num']);
    if ($data['num'] > 1) {
        $options['hours'] = $data['hours'];
    }
    //Каталог
    //@todo: неиспользуется разделение платный мест в карусели
    //$tarif = 73;
    //Главная
    //@todo: сейчас общий раздел для всех
    $tarif = 65;
    $complete = $bill->addServiceAndPayFromAccount($tarif, $options);
    if ($complete) {
        $objResponse->script("window.location.reload();");
    }
    return $objResponse;
}