
/**
 * Set "odd", "even", "first" and "last" CSS classes for table rows and cells
 */
function decorateTable(table){
    var table = $(table);
    if(table){
        var allRows = table.getElementsBySelector('tr')
        var bodyRows = table.getElementsBySelector('tbody tr');
        var headRows = table.getElementsBySelector('thead tr');
        var footRows = table.getElementsBySelector('tfoot tr');

        for(var i=0; i<bodyRows.length; i++){
            if((i+1)%2==0) {
                bodyRows[i].addClassName('row_even');
            }
            else {
                bodyRows[i].addClassName('row_odd');
            }
        }

        if(headRows.length) {
          headRows[0].addClassName('column_first');
          headRows[headRows.length-1].addClassName('column_last');
        }
        if(0 && bodyRows.length) {
          bodyRows[0].addClassName('column_first');
          bodyRows[bodyRows.length-1].addClassName('column_last');
        }
        if(0 && footRows.length) {
          footRows[0].addClassName('column_first');
          footRows[footRows.length-1].addClassName('column_last');
        }
        if(allRows.length) {
            for(var i=0;i<allRows.length;i++){
                var cols =allRows[i].getElementsByTagName('TD');
                if(cols.length) {
                    Element.addClassName(cols[cols.length-1], 'column_last');
                };
            }
        }
    }
}

///////////////////
//  Error handler /
///////////////////
    var ctrl_error_hint = {
        
        version: '0.1'
        
        //if id=null then reset all labels 'label_login[***]'
        ,reset:function( id ){

            if( !id ){
            
                var tmp = $$('label.error_label');
                //alert( tmp );
                               
                tmp.each(function(item) {
                    //alert( item.id + ':' + item.innerHTML + ':' + item.id.substring(6) );
                    $( item.id ).innerHTML = '';
                    
                    if( $( item.id.substring(6) ) ){
                        $( item.id.substring(6) ).setStyle({'border': '1px solid #A1BADE'});
                    }else if( item.id.substring(6) == 'cc'){
                        $( 'data_bill_cc1' ).setStyle({'border': '1px solid #A1BADE'});
                        $( 'data_bill_cc2' ).setStyle({'border': '1px solid #A1BADE'});
                        $( 'data_bill_cc3' ).setStyle({'border': '1px solid #A1BADE'});
                        $( 'data_bill_cc4' ).setStyle({'border': '1px solid #A1BADE'});
                    }else if( item.id.substring(6) == 'data_b_date'){
                        $( 'data_b_month' ).setStyle({'border': '1px solid #A1BADE'});
                        $( 'data_b_day' ).setStyle({'border': '1px solid #A1BADE'});
                        $( 'data_b_year' ).setStyle({'border': '1px solid #A1BADE'});
                    }
                });
                
            }else{
            
                Try.these(
                    function() { $(id).innerHTML = ''; }    
                )
                
            }

        }
        
        //[{ id: 'label_login[email]', value: 'hint1' },{ id: 'label_login[password]', value: 'hint1' }]
        ,hint:function( arr ){
            if( arr ){
                arr.each(function(item) {
                
                    try{
                    
                    
                        //if( item.value == 'undefined' ){
//                        
//                            alert(item.id);
//                        
//                        }
                        
                        //alert(item.id + "#" + item.value);
                    
                        $( item.id ).innerHTML = "<b style='color: red;'>" + item.value + "</b>\n";
                        //$( item.id.toString().substring(6)).setStyle({'border': '1px solid red'});
                        if( $( item.id.substring(6) )/*item.id.substring(6)*/ ){
                            $( item.id.substring(6) ).setStyle({'border': '1px solid red'});
                        }else if( item.id == 'label_data_bill_b_date' ){
                            $( 'data_bill_b_day' ).setStyle({'border': '1px solid red'});
                            $( 'data_bill_b_month' ).setStyle({'border': '1px solid red'});
                            $( 'data_bill_b_year' ).setStyle({'border': '1px solid red'});
                        }else if( item.id == 'label_data_b_date' ){
                            $( 'data_b_day' ).setStyle({'border': '1px solid red'});
                            $( 'data_b_month' ).setStyle({'border': '1px solid red'});
                            $( 'data_b_year' ).setStyle({'border': '1px solid red'});
                        }else if( item.id.substring(6) == 'cc'){
                            $( 'data_bill_cc1' ).setStyle({'border': '1px solid red'});
                            $( 'data_bill_cc2' ).setStyle({'border': '1px solid red'});
                            $( 'data_bill_cc3' ).setStyle({'border': '1px solid red'});
                            $( 'data_bill_cc4' ).setStyle({'border': '1px solid red'});
                        }
                    }catch(err){
                        //alert( item.id + ':' + err  );
                    }
                });
                
            }else{
        
            }
        }
    };
//ctrl_error_hint.reset();
//ctrl_error_hint.hint( '[{\'Violet\', occupation: \'character\', age: 25 }, {name: \'Violet\', occupation: \'character\', age: 25 }]' );
//ctrl_error_hint.hint( [{ id: 'label_login[email]', value: 'hint1' },{ id: 'label_login[password]', value: 'hint1' }] );
//ctrl_error_hint.hint( [{ id: 'label_login[email]', value: 'hint1' }] );

function checkEmail( email ) {
    //if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)){
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if ( filter.test(email) ){
        return (true)
        }
        //alert("Invalid E-mail Address! Please re-enter.")
    return (false)
}


///////////////////////
//  SING IN LOG IN   //
///////////////////////
    var signin = {

        version: '0.1'
        ,sel_user_status: 'new'
        ,email: ''
        ,password: ''
        
        ,process:function(){
            
            $('img_wait_btn_sign_in').show();
            $('img_wait_btn_sign_in2').show();
            $('btn_sign_in').hide();
            ctrl_error_hint.reset();
            
            this.sel_user_status = $('login_usertype_new').checked == true ? 'new' : 'exist';
            //alert( this.sel_user_status );
            
            this.email      =   this._trim( $F('login[email]') );
            this.password   =   this._trim( $F('login[password]') );
            
            if( checkEmail(this.email) == false ){
                ctrl_error_hint.hint( [{ id: 'label_login[email]', value: messages[1] }] );
                $('btn_sign_in').show();
                $('img_wait_btn_sign_in').hide();
                $('img_wait_btn_sign_in2').hide();
                return false;
            }
            
            if(  this.sel_user_status == 'exist' && $F('login[password]').empty() == true ){
                ctrl_error_hint.hint( [{ id: 'label_login[password]', value: messages[3] }] );
                $('btn_sign_in').show();
                $('img_wait_btn_sign_in').hide();
                $('img_wait_btn_sign_in2').hide();
                return false;
            }
            
            
            switch( this.sel_user_status ){
                
                case 'new':
                    
                    //alert( signin.check_exist() );
                    return true;
                    
                    break;
                
                case 'exist':

//                    alert( this.check_exist() );
//                    if( this.check_exist() ){
//                        alert('Try');
//                    }
                    new Ajax.Request('/ajax/user.php', {
                        method:'post'
                        ,parameters: { login_email: signin.email }
                        ,onSuccess: function(transport){
                            var response = transport.responseText || null;
                            
                            response = ( response == 'true' ? true : false );
                            
                            if( response == true ){
                            
                                //Login
                                signin.try_login();

                                return true;
                            
                            }else{
                            
                                //Account not exist
                                //alert('Account not exist');
                                ctrl_error_hint.hint( [{ id: 'label_login[email]', value: messages[1] }] );
                                $('btn_sign_in').show();
                                $('img_wait_btn_sign_in').hide();
                                $('img_wait_btn_sign_in2').hide();
                                return false;
                            }
                    }
                    ,onFailure: function(){ alert('Something went wrong...') }
                    });
                    break;
            
            }
            
            return false;
        }
        
        ,check_exist: function(){
        
            new Ajax.Request('/ajax/user.php', {
                method:'post'
                ,parameters: { login_email: signin.email }
                ,onSuccess: function(transport){
                    var response = transport.responseText || null;
                    
                    response = ( response == 'true' ? true : false );
                    
                    return response;
            }
            ,onFailure: function(){ alert('Something went wrong...') }
            });
            
            //return false;
        
        }
        
        ,try_login: function(){
        
                    new Ajax.Request('/ajax/user.php',
                    {
                    method:'post'
                    ,parameters: {login_email: signin.email, login_password: signin.password}
                    ,onSuccess: function(transport){
                      var response = transport.responseText || null;
                      
                      if( response != null ){ 
                            
                        window.location = 'step1.html';
                            
                      }else{
                            ctrl_error_hint.hint( [{ id: 'label_login[email]', value: '' }] );
                            ctrl_error_hint.hint( [{ id: 'label_login[password]', value: messages[0] }] );
                            $('btn_sign_in').show();
                            $('img_wait_btn_sign_in').hide();
                            $('img_wait_btn_sign_in2').hide();
                            return false;
                      }
                    }
                    ,onFailure: function(){ alert('Something went wrong...') }
                    });
        }
        
        ,fetch_data: function(){
                    new Ajax.Request('/ajax/user.php',
                    {
                    method:'post'
                    ,parameters: {login_email: signin.email, login_password: signin.password}
                    ,onSuccess: function(transport){
                      var response = transport.responseText || null;
                      
                      if( response != null ){ 
                            eval( response );
                            $H(myJSONObject).each(function(val, idx) {
                            
                                try{
                                    $(val[0]).value = val[1];
                                     
                                    if( val[0] == 'data_ship_country' )
                                        data_ship_country(null);
                                    if( val[0] == 'data_bill_country' )
                                        data_bill_country(null);
                                    if( val[0] == 'data_med_gender_m' || val[0] == 'data_med_gender_f' ){
                                        $(val[0]).checked = 'checked';
                                    }                
                                }catch(e){}
                            

                            });
                            
                      }
                    }
                    ,onFailure: function(){ alert('Something went wrong...') }
                    });
        }
        
        ,is_blank:function(){}
        ,is_mail:function(){}
        
        //trim
        ,_trim:function(str, chars) {
            return this._ltrim(this._rtrim(str, chars), chars);
        }

        ,_ltrim:function(str, chars) {
            chars = chars || "\\s";
            return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
        }

        ,_rtrim:function(str, chars) {
            chars = chars || "\\s";
            return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
        }
        
    }
    
    
    
/*
*   data_bill_type
*/
function showPaymentForm(event) {
    
    if( current_bill_type != null ){
        $(current_bill_type).hide();
    }
  
    switch($F('data_bill_type'))
    {
    case '':
      current_bill_type = null;
      break;
    case 'wutransfer':
      $( $F('data_bill_type') ).show(); 
      current_bill_type = $F('data_bill_type');
      break;
    case 'alternative':
      $( $F('data_bill_type') ).show(); 
      current_bill_type = $F('data_bill_type');
      break;
    case 'jbanktransfer':
      $( $F('data_bill_type') ).show(); 
      current_bill_type = $F('data_bill_type');
      break;
    case 'paysafecard':
      $( $F('data_bill_type') ).show(); 
      current_bill_type = $F('data_bill_type');
      break;
    case 'aspirate':
      $( $F('data_bill_type') ).show(); 
      current_bill_type = $F('data_bill_type');
      break;
    case 'echeck':
      $( $F('data_bill_type') ).show(); 
      current_bill_type = $F('data_bill_type');
      break;
    default:
      
      $('visa').show();
      
      $('help_cvv_card').hide();  
      $('help_cvv_exp').hide();
      
      if( $F('data_bill_type') == 'exp' ){
        $('help_cvv_exp').show();
      }else{
        $('help_cvv_card').show();
      }
      
      
//$('cvv_indicated').src='/images/' + notices_cvv_image();

      

      current_bill_type = 'visa';
      break;
    }
}


function notices_cvv_image(){
    var cc_type = $F('data_bill_type');
    
    if( cc_type == 'exp' ){
        return 'amex_cvv.gif';
    }else{
        return 'card_cvv.gif';
    }
    
}


/*
*   checkbox_medical
*/
function showMedicalForm(event) {
    if( $('checkbox_medical').checked == true )
        $( 'tbody_medical' ).show(); 
    else
        $( 'tbody_medical' ).hide();     
}


/*
*   Country State
*/
/*
*   data_ship_country
*/
var data_ship_state = {
    item: null
    , SelectOptions : function(){
        
    }
    ,init: function( obj_name ){
        this.item = $(obj_name);
    }
    //clear select list
    ,clear: function(){
        this.item.length = 0;
    }
    ,appendOption: function( value, text ){
        var oOption     = document.createElement("OPTION");
        oOption.text    = text;
        oOption.value   = value;
        this.item.options.add(oOption);
    }
};

function data_ship_country(event) {
    data_ship_state.clear();
    eval( 'var e = objJSONStates.' + $F('data_ship_country') );
    if( typeof(e) == 'object' ){
        $('tr_ship_state_selection').show();
        data_ship_state.appendOption( '', messages['please_choose_a_state'] );
        $H(e).each(function(val, idx) {
            data_ship_state.appendOption( val[0], val[1] );
        });
    }else{
        data_ship_state.appendOption( '', 'Outside US/Canada' );
        $('tr_ship_state_selection').hide();
        //data_ship_state.value = 0;
    }
    
    //data_bill_country(null);
    
    //Payment By Country
    $('data_bill_type').length = 0;
    $H( payByCountry[ $F('data_ship_country') ] ).each(   function(s) {
        if( CurrentPayMethodsList[ s[0] ] != 'undefined' ){
            var oOption     = document.createElement("OPTION");
            oOption.text    = s[1];
            oOption.value   = s[0];
            
            if( s[0] == payByCountry_selected ){
            	
            	oOption.selected = true;
            	
            }
            
            $('data_bill_type').options.add(oOption);
        }
    });
    
    
    $('data_phone1_countrycode').value =  objJSONDayling[ $F('data_ship_country') ];
    showPaymentForm();
}


/*
*   data_bill_country
*/
var data_bill_state = {
    item: null
    , SelectOptions : function(){
        
    }
    ,init: function( obj_name ){
        this.item = $(obj_name);
    }
    //clear select list
    ,clear: function(){
        this.item.length = 0;
    }
    ,appendOption: function( value, text ){
        var oOption     = document.createElement("OPTION");
        oOption.text    = text;
        oOption.value   = value;
        this.item.options.add(oOption);
    }
};


function data_bill_country(event) {
    data_bill_state.clear();
    eval( 'var e = objJSONStates.' + $F('data_bill_country') );
    if( typeof(e) == 'object' ){
        $('tr_bill_state_selection').show();
        $H(e).each(function(val, idx) {
            data_bill_state.appendOption( val[0], val[1] );
        });
    }else{
        data_bill_state.appendOption( '', 'Outside US/Canada' );
        $('tr_bill_state_selection').hide();
        //data_bill_state.value = 0;
    }
}


/*
*   checkbox_billing_address
*/
function showBillingForm(event) {
    if( $('checkbox_billing_address').checked == true )
        $( 'tbody_billing_address' ).show(); 
    else
        $( 'tbody_billing_address' ).hide();
}


/**
*   Form Check
*/
function allowchars(element_id){
    var filter = GetTestReg( element_id );
    return filter.test( $F(element_id) );
}



//    var error_items = new Array;
    
//    error_items[ error_items.length ] = '123';
//    error_items[ error_items.length ] = '1234';
//    
//    error_items.each(function(s, index) {
//      alert(index + ': ' + s);
//    });

var Checks = {
  // some stuff our 'generic' function needs
  generic: function(event) {
    // Some generic, all-purpose checking (e.g. empty required fields)

    if( !$('checkbox_billing_address').checked ){
        $('data_bill_address').value = $F('data_ship_address');
        $('data_bill_city').value = $F('data_ship_city');
        $('data_bill_zip').value = $F('data_ship_zip');
        $('data_bill_country').value = $F('data_ship_country');
        $('data_bill_state').value = $F('data_ship_state');
    }

    var error = '';
    var error_items = [];

    //Empty check
    
    //PHONE!!!
    ['data_ship_fname', 'data_ship_lname', 'data_ship_address', 'data_ship_city', 'data_ship_zip', 'data_ship_state', 'data_bill_state', 'data_b_month', 'data_b_day', 'data_b_year', 'data_bill_address', 'data_bill_city', 'data_bill_zip', 'data_bill_type', 'data_bill_fname', 'data_bill_lname', 'data_bill_type'].each(function(s, index) {
        
//        alert( s );
//        alert( $F( s ).empty() );
        if( $F( s ).empty() == true ){
            
            if( s == 'data_b_month' || s == 'data_b_day' || s == 'data_b_year' ){
                error_items[ error_items.length ] = 'label_data_b_date';
                if( !$('label_data_b_date') ){
                    new Insertion.After(s, '<label id="' + 'label_data_b_date' + '" class="error_label"></label>');
                }
            }else if( s == 'data_bill_state' ){
            
                if( $('tr_bill_state_selection').visible() == true ){
                    error_items[ error_items.length ] = 'label_' + s;
                    if( !$('label_' + s) ){
                        new Insertion.After(s, '<label id="' + 'label_' + s + '" class="error_label"></label>');
                    }
                }
                
            }else if( s == 'data_ship_state' ){
            
                if( $('tr_ship_state_selection').visible() == true ){
                    error_items[ error_items.length ] = 'label_' + s;
                    if( !$('label_' + s) ){
                        new Insertion.After(s, '<label id="' + 'label_' + s + '" class="error_label"></label>');
                    }
                }
                
            }else{
                
                error_items[ error_items.length ] = 'label_' + s;
                if( !$('label_' + s) ){
                    new Insertion.After(s, '<label id="' + 'label_' + s + '" class="error_label"></label>');
                }
            
            }
        }

    });


    //Meds
    if( CheckMed() ){
    
        if( $('prescription_submission1').checked == false &&  $('prescription_submission2').checked == false ){
        
            error_items[ error_items.length ] = 'label_prescription_submission2';

            if( !$('label_prescription_submission2') ){
                new Insertion.After('prescription_submission2', '<label id="label_prescription_submission2" class="error_label"></label>');
            }    
        
        }else if ( $('prescription_submission2').checked == true ) {
        
            ['doc_pname', 'doc_cname', 'doc_address', 'doc_country', 'doc_state', 'doc_city', 'doc_zip', 'doc_phone', 'doc_fax'].each(function(s, index) {
                
                if( $F( s ).empty() == true ){
                    error_items[ error_items.length ] = 'label_' + s;
                    if( !$('label_' + s) ){
                        new Insertion.After(s, '<label id="' + 'label_' + s + '" class="error_label"></label>');
                    }
                }

            });
        
        }
    
    
    }
    
    
    
    
//    alert('test');
//    Event.stop(event);
//    return false;   
    
//    if( $F( 'data_phone1_phone' ).empty() == true && $F( 'data_phone2_phone' ).empty() == true  ){
//        error_items[ error_items.length ] = 'label_data_phone1_phone';
//        if( !$('label_data_phone1_phone') ){
//            new Insertion.After('data_phone1_phone', '<label id="label_data_phone1_phone" class="error_label"></label>');
//        }
//        
//    }else{
    
        var check_phone;
        check_phone = checkPhoneLength();  // return 1 or 2 or false ( if all ok )
        
        if ( check_phone != false ){

            error_items[ error_items.length ] = 'label_data_phone' + check_phone + '_phone';

            if( !$('label_data_phone' + check_phone + '_phone') ){
                new Insertion.After('data_phone' + check_phone + '_phone', '<label id="label_data_phone' + check_phone + '_phone" class="error_label"></label>');
            }    
        
        }
    
//    }
    
    
    //Allow chars check
    //['data_ship_fname', 'data_ship_lname', 'data_ship_address', 'data_ship_city', 'data_ship_zip', 'data_b_month', 'data_b_day', 'data_b_year', 'data_bill_address', 'data_bill_city', 'data_bill_zip', 'data_bill_type', 'data_bill_fname', 'data_bill_lname', 'data_phone1_phone', 'data_phone2_phone'].each(function(s, index) {
    ['data_ship_fname', 'data_ship_lname', 'data_ship_address', 'data_ship_city', 'data_ship_zip', 'data_b_month', 'data_b_day', 'data_b_year', 'data_bill_address', 'data_bill_city', 'data_bill_zip', 'data_bill_type', 'data_bill_fname', 'data_bill_lname'].each(function(s, index) {
        if( !allowchars( s ) ){
            error_items[ error_items.length ] = 'label_' + s;
            if( !$('label_' + s) ){
                new Insertion.After(s, '<label id="' + 'label_' + s + '" class="error_label"></label>');
            }
        }

    });
    
    //payment
    if( !$F('data_bill_type').empty() ){

        switch($F('data_bill_type'))
        {
        case 'visa':
        case 'mcard':
        case 'diners':
        case 'jcb':
        case 'exp':

            var cc = '' + $F('data_bill_cc1') + $F('data_bill_cc2') + $F('data_bill_cc3') + $F('data_bill_cc4');
            
//            if( cc.empty() || cc.length < 14 || checkCreditCard(cc, $F('data_bill_type')) == false  ){
//                alert( 'ERROR' + ccErrorNo );
//                ['data_bill_cc1','data_bill_cc2','data_bill_cc3','data_bill_cc4'].each(
//                    function(s, index) {
//                        if( $F(s).length < 4 && s != 'data_bill_cc4' ){
//                            error_items[ error_items.length ] = 'label_cc';
//                            return;
//                        }else if( s == 'data_bill_cc4' && $F(s).length < 2){
//                            error_items[ error_items.length ] = 'label_cc';
//                            return;
//                        }
//                    }
//                );
//            }

            if( checkCreditCard(cc, $F('data_bill_type')) == false  ){
                
                error_items[ error_items.length ] = 'label_cc';
                
            }

//            else{
//                ['data_bill_cc1','data_bill_cc2','data_bill_cc3','data_bill_cc4'].each(function(s, index) {$(s).setStyle({'border': '1px solid #A1BADE'});});
//            }
            if( $F('data_bill_cvv').empty() || !allowchars('data_bill_cvv') ){
                error_items[ error_items.length ] = 'label_data_bill_cvv';
                if( !$('label_' + 'data_bill_cvv') ){
                    new Insertion.After('data_bill_cvv', '<label id="' + 'label_' + 'data_bill_cvv' + '" class="error_label"></label>');
                }
            }            

            
            
            
var currentTime = new Date()
//var month = currentTime.getMonth() + 1
//var day = currentTime.getDate()
//var year = currentTime.getFullYear()
//document.write(month + "/" + day + "/" + year)

            
            if( $F('data_bill_exp_year') == currentTime.getFullYear()  && $F('data_bill_exp_month') < currentTime.getMonth() ){
                /*['data_bill_exp_year','data_bill_exp_month'].each(function(s, index) {$(s).setStyle({'border': '2px solid red'});});*/
                error_items[ error_items.length ] = 'label_data_bill_exp_month';
                if( !$('label_' + 'data_bill_exp_month') ){
                    new Insertion.After('data_bill_exp_month', '<label id="' + 'label_' + 'data_bill_exp_month' + '" class="error_label"></label>');
                }
            }else{
                ['data_bill_exp_year','data_bill_exp_month'].each(function(s, index) {$(s).setStyle({'border': '1px solid #A1BADE'});});
            }
            
          break;
        case 'echeck':
        
        
            ['data_bill_checkroutnumber', 'data_bill_checkanumber', 'data_bill_ssn', 'data_bill_b_month', 'data_bill_b_day', 'data_bill_b_year'].each(function(s, index) {
                
                /*alert( s );*/
                if( $F( s ).empty() == true ){
                
                    if( s == 'data_bill_b_month' || s == 'data_bill_b_day' || s == 'data_bill_b_year' ){
                        error_items[ error_items.length ] = 'label_data_bill_b_date';
                        if( !$('label_data_bill_b_date') ){
                            new Insertion.After(s, '<label id="' + 'label_data_bill_b_date' + '" class="error_label"></label>');
                        }
                    }else{
                        error_items[ error_items.length ] = 'label_' + s;
                        if( !$('label_' + s) ){
                            new Insertion.After(s, '<label id="' + 'label_' + s + '" class="error_label"></label>');
                        }
                    }
                }

            });
            ['data_bill_checkroutnumber', 'data_bill_checkanumber', 'data_bill_ssn'].each(function(s, index) {
            if( !allowchars( s ) ){
                error_items[ error_items.length ] = 'label_' + s;
                if( !$('label_' + s) ){
                    new Insertion.After(s, '<label id="' + 'label_' + s + '" class="error_label"></label>');
                }
            }

            });
            
          break;
        default:
          ;
        }
        
    }

    if( $('login[password]') ){
        if( $F('login[password]').empty() == true ){
            
            if( !$('login[password_re]') ){
                error_items[ error_items.length ] = 'label_' + 'login[password]';
            }else{
                //FIX
                messages['label_login[password]_ERROR'] = messages[4];
            
                error_items[ error_items.length ] = 'label_' + 'login[password]';
            }
            
            
        }
        
        if(  $F('login[password]') != $F('login[password_re]') ){
            error_items[ error_items.length ] = 'label_' + 'login[password_re]';
        }
    }
    
    ctrl_error_hint.reset();
    
    if( error_items[ 0 ] ){
        error_items.each(function(s, index) {
            //ctrl_error_hint.hint( [{ id: s, value: messages[ s + '_ERROR' ] }] );
            
            if( $F('data_bill_type') == 'exp' && s == 'label_data_bill_cvv' ){
                ctrl_error_hint.hint( [{ id: s, value: messages[ s + '_exp' + '_ERROR' ] }] );
            }else{
                ctrl_error_hint.hint( [{ id: s, value: messages[ s + '_ERROR' ] }] );
            }
            
            
        });
        
        //alert( error_items[ 0 ].substring(6) );
        
        if( error_items[ 0 ].substring(6) == 'data_b_date' ){
        
            window.location = window.location.href.split("#")[0] + '#' + 'data_b_month';
            $( 'data_b_month' ).focus();
        
        }else if( error_items[ 0 ].substring(6) == 'cc' ){
        
            window.location = window.location.href.split("#")[0] + '#' + 'data_bill_cc1';
            $( 'data_bill_cc1' ).focus();
        
        }else if( $( error_items[ 0 ].substring(6) ) ){
            
            window.location = window.location.href.split("#")[0] + '#' + error_items[ 0 ].substring(6);
            $( error_items[ 0 ].substring(6) ).focus();
            
        }
        
        Event.stop(event);
        return false;
    }else{
        //alert('No errors');
        //Event.stop(event); 
        //return false;
        
        $('img_wait_btn_sign_in').show();
        $('img_wait_btn_sign_in2').show();
        $('btn_go_to_step2').hide();
        ctrl_error_hint.reset();
        
        return true;
    }

  }
};


/*============================================================================*/

/*

Visa Number = 4007000000 027
MasterCard Number = 5424 0000 0000 0015
American Express Number = 3700 0000 0000 002
Discover/Novus Number = 6011000000000012
JCB Number = 3088000000000017
Diners/Carte Blanche Number = 38000000000006 

American Express    3400 0000 0000 009
Carte Blanche    3000 0000 0000 04
Discover    6011 0000 0000 0004
Diner's Club    3000 0000 0000 04
enRoute    2014 0000 0000 009
JCB    2131 0000 0000 0008
MasterCard    5500 0000 0000 0004
Solo    6334 0000 0000 0004
Switch    4903 0100 0000 0009
Visa    4111 1111 1111 1111

This routine checks the credit card number. The following checks are made:

1. A number has been provided
2. The number is a right length for the card
3. The number has an appropriate prefix for the card
4. The number has a valid modulus 10 number check digit if required

If the validation fails an error is reported.

The structure of credit card formats was gleaned from a variety of sources on 
the web, although the best is probably on Wikepedia ("Credit card number"):

  http://en.wikipedia.org/wiki/Credit_card_number

Parameters:
            cardnumber           number on the card
            cardname             name of card as defined in the card list below

Author:     John Gardner
Date:       1st November 2003
Updated:    26th Feb. 2005      Additional cards added by request
Updated:    27th Nov. 2006      Additional cards added from Wikipedia

*/

/*
   If a credit card number is invalid, an error reason is loaded into the 
   global ccErrorNo variable. This can be be used to index into the global error  
   string array to report the reason to the user if required:
   
   e.g. if (!checkCreditCard (number, name) alert (ccErrors(ccErrorNo);
*/

var ccErrorNo = 0;
var ccErrors = new Array ()

ccErrors [0] = "Unknown card type";
ccErrors [1] = "No card number provided";
ccErrors [2] = "Credit card number is in invalid format";
ccErrors [3] = "Credit card number is invalid";
ccErrors [4] = "Credit card number has an inappropriate number of digits";

function checkCreditCard (cardnumber, cardname) {

     
  // Array to hold the permitted card characteristics
  var cards = new Array();

  // Define the cards we support. You may add addtional card types.
  
  //  Name:      As in the selection box of the form - must be same as user's
  //  Length:    List of possible valid lengths of the card number for the card
  //  prefixes:  List of possible prefixes for the card
  //  checkdigit Boolean to say whether there is a check digit
  
  cards [0] = {name: "Visa", 
               length: "13,16", 
               prefixes: "4",
               checkdigit: true};
  cards [1] = {name: "MasterCard", 
               length: "16", 
               prefixes: "51,52,53,54,55",
               checkdigit: true};
  cards [2] = {name: "DinersClub", 
               length: "14,16", 
               prefixes: "300,301,302,303,304,305,36,38,55",
               checkdigit: true};
  cards [3] = {name: "CarteBlanche", 
               length: "14", 
               prefixes: "300,301,302,303,304,305,36,38",
               checkdigit: true};
  cards [4] = {name: "AmEx", 
               length: "15", 
               prefixes: "34,37",
               checkdigit: true};
  cards [5] = {name: "Discover", 
               length: "16", 
               prefixes: "6011,650",
               checkdigit: true};
  cards [6] = {name: "JCB", 
               length: "15,16", 
               prefixes: "3,1800,2131",
               checkdigit: true};
  cards [7] = {name: "enRoute", 
               length: "15", 
               prefixes: "2014,2149",
               checkdigit: true};
  cards [8] = {name: "Solo", 
               length: "16,18,19", 
               prefixes: "6334, 6767",
               checkdigit: true};
  cards [9] = {name: "Switch", 
               length: "16,18,19", 
               prefixes: "4903,4905,4911,4936,564182,633110,6333,6759",
               checkdigit: true};
  cards [10] = {name: "Maestro", 
               length: "16", 
               prefixes: "5020,6",
               checkdigit: true};
  cards [11] = {name: "VisaElectron", 
               length: "16", 
               prefixes: "417500,4917,4913",
               checkdigit: true};

  cards [12] = {name: "mcard", //Master Card
               length: "16", 
               prefixes: "51,52,53,54,55",
               checkdigit: true};
  cards [13] = {name: "diners", //Diners
               length: "14,16", 
               prefixes: "300,301,302,303,304,305,36,38,55",
               checkdigit: true};
  cards [14] = {name: "exp", //AmEx
               length: "15", 
               prefixes: "34,37",
               checkdigit: true};
               
// Establish card type
  var cardType = -1;
  for (var i=0; i<cards.length; i++) {

    // See if it is this card (ignoring the case of the string)
    if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {
      cardType = i;
      break;
    }
  }
  
  // If card type not found, report an error
  if (cardType == -1) {
     ccErrorNo = 0;
     return false; 
  }
   
  // Ensure that the user has provided a credit card number
  if (cardnumber.length == 0)  {
     ccErrorNo = 1;
     return false; 
  }
  
  // Check that the number is numeric, although we do permit a space to occur  
  // every four digits. 
  var cardNo = cardnumber
  var cardexp = /^([0-9]{4})\s?([0-9]{4})\s?([0-9]{4})\s?([0-9]{1,4})$/;
  if (!cardexp.exec(cardNo))  {
     ccErrorNo = 2;
     return false; 
  }
    
  // Now remove any spaces from the credit card number
  cardexp.exec(cardNo);
  cardNo = RegExp.$1 + RegExp.$2 + RegExp.$3 + RegExp.$4;
       
  // Now check the modulus 10 check digit - if required
  if (cards[cardType].checkdigit) {
    var checksum = 0;                                  // running checksum total
    var mychar = "";                                   // next char to process
    var j = 1;                                         // takes value of 1 or 2
  
    // Process each digit one by one starting at the right
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
    
      // Extract the next digit and multiply by 1 or 2 on alternative digits.
      calc = Number(cardNo.charAt(i)) * j;
    
      // If the result is in two digits add 1 to the checksum total
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
    
      // Add the units element to the checksum total
      checksum = checksum + calc;
    
      // Switch the value of j
      if (j ==1) {j = 2} else {j = 1};
    } 
  
    // All done - if checksum is divisible by 10, it is a valid modulus 10.
    // If not, report an error.
    if (checksum % 10 != 0)  {
     ccErrorNo = 3;
     return false; 
    }
  }  

  // The following are the card-specific checks we undertake.
  var LengthValid = false;
  var PrefixValid = false; 
  var undefined; 

  // We use these for holding the valid lengths and prefixes of a card type
  var prefix = new Array ();
  var lengths = new Array ();
    
  // Load an array with the valid prefixes for this card
  prefix = cards[cardType].prefixes.split(",");
      
  // Now see if any of them match what we have in the card number
  for (i=0; i<prefix.length; i++) {
    var exp = new RegExp ("^" + prefix[i]);
    if (exp.test (cardNo)) PrefixValid = true;
  }
      
  // If it isn't a valid prefix there's no point at looking at the length
  if (!PrefixValid) {
     ccErrorNo = 3;
     return false; 
  }
    
  // See if the length is valid for this card
  lengths = cards[cardType].length.split(",");
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }
  
  // See if all is OK by seeing if the length was valid. We only check the 
  // length if all else was hunky dory.
  if (!LengthValid) {
     ccErrorNo = 4;
     return false; 
  };   
  
  
  
  // The credit card is in the required format.
  return true;
}

/*============================================================================*/

function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

    function getXmlHttpRequestObject() {
        if (window.XMLHttpRequest) {
            return new XMLHttpRequest(); //Not IE
        } else if(window.ActiveXObject) {
            return new ActiveXObject("Microsoft.XMLHTTP"); //IE
        } else {
            alert("Your browser doesn't support the XmlHttpRequest object.  Better upgrade to Firefox.");
        }
    }

    var receiveReq = getXmlHttpRequestObject();
    var innerhtml;
    
    function SendMePassword() {
        var mail;
        if(!innerhtml){
            innerhtml=document.getElementById('forgot').innerHTML;    
        }
        
        mail = trim( document.getElementById('forgotemail').value );
        
        if( mail == '' )
            return false;
        
        document.getElementById('forgotinner').innerHTML = "<div style='background: #fff;'><center><img src='/images/wait.gif'></center></div>";
        
        if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
            receiveReq.open("GET", '/ajax/forgot.php?mail=' + mail, true);
            receiveReq.onreadystatechange = handleSayHello; 
            receiveReq.send(null);
        }            
    }

    function handleSayHello() {
        if (receiveReq.readyState == 4) {
            document.getElementById('forgotinner').innerHTML = receiveReq.responseText;
            
//            setTimeout ( "HideWindow()", 4000 );
            
//            document.getElementById('forgot').innerHTML = innerhtml;
            
        }
    }

    function PositionOfForgotForm(){
        document.getElementById('forgot').style.visibility='';
        document.getElementById('forgot').style.left = document.getElementById('tdforgot').style.left;
        document.getElementById('forgot').style.top  = document.getElementById('tdforgot').style.top;
    }
    
    function HideWindow(){
        document.getElementById('forgot').style.visibility='hidden';
        if(innerhtml){
            document.getElementById('forgot').innerHTML = innerhtml;
        }
    }

/*============================================================================*/

function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft
        curtop = obj.offsetTop
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft
            curtop += obj.offsetTop
        }
    }
    //return [curleft,curtop];
    return curtop;
}

function notices_position( element_id ){
    var notice_id = null;
    switch (element_id)
    {
    case 'data_bill_cvv':
      notice_id = 'help_cc'; 
      break;
    }
    
    
    if( notice_id != null )
    {
        if( findPos( $( element_id ) ) ){
            $( notice_id ).setStyle({'top': findPos( $( element_id ) ) - 100 + 'px'});
            //$('help_cc').show(); 
        }else{
            $( notice_id ).hide();
        }
    }
}
/*============================================================================*/
/*============================================================================*/
function prepareInputsForHints() {

    var inputs = $A(document.getElementsByTagName('input'));
    inputs.each(function(s) {
        // test to see if the hint span exists first
        if( s.parentNode.getElementsByTagName("span")[0] ){
                // the span exists!  on focus, show the hint
                s.onfocus = function () {
                    var test = this.parentNode.getElementsByTagName("span")[0].innerHTML.split('<');
                    if( !test[0].blank() ){
                        this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
                        //?!?!
                        //alert( $('left').offsetWidth );
                        //alert( $('left').offsetHeight );
                        //alert( $('left').offsetParent );
                        //alert( $('left').offsetTop );
                        //this.parentNode.getElementsByTagName("span")[0].style.left = ( $('left').getWidth() + 230 ) + "px";
                    }
                }
                // when the cursor moves away from the field, hide the hint
                s.onblur = function () {
                    this.parentNode.getElementsByTagName("span")[0].style.display = "none";
                }
        }
    });

//    var selects = $A(document.getElementsByTagName('select'));
//    inputs.each(function(s) {
//    if( s.parentNode.getElementsByTagName("span")[0] ){
//            s.onfocus = function () {
//                var test = this.parentNode.getElementsByTagName("span")[0].innerHTML.split('<');
//                if( !test[0].blank() ){
//                    this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
//                }
//            }
//            s.onblur = function () {
//                this.parentNode.getElementsByTagName("span")[0].style.display = "none";
//            }
//    }
//    });
}
/*============================================================================*/
/*============================================================================*/
function stratActionLog(){

//left
$('left').select(['textarea', 'select', '.text', '.text_small', '.text_medium', '.data_bill_type', '.select_payment_type', '[type="radio"]', '[type="password"]', '[type="text"]', '[type="submit"]', '[type="checkbox"]']).each(
    function(s, index) {
        $(s).observe('blur', function(event){
            //alert( 'id:' + this.id + '\nname:' + this.name + '\nvalue:' + this.value );
            //alert( actionlog_session );
            if( this.value != 'udefined' && actionlog_session != 'udefined' && actionlog_session.blank() == false && this.value.blank() == false ){

                new Ajax.Request('/ajax/actionlog.php',
                                            {
                                                method:'post'
                                                ,parameters: {session: actionlog_session, id: '' + this.id + '', name: '' + this.name + '', value: '' + this.value + ''}
                                                /*,onSuccess: function(transport){
                                                    //var response = transport.responseText || "no response text";
                                                    //alert("Success! \n\n" + response);
                                                }*/
                                                /*,onFailure: function(){ 
                                                    //alert('Something went wrong...') 
                                                 }*/
                                            }
            );}
        }); 
    }
);

$('wrapper').select(['a', 'button', 'submit']).each(
    function(s, index) {
        $(s).observe('click', function(event){
            //alert( 'id:' + this.id + '\nname:' + this.name + '\nvalue:' + this.value );
            //alert( actionlog_session );
            if( actionlog_session != 'udefined' && actionlog_session.blank() == false ){

                new Ajax.Request('/ajax/actionlog.php',
                                            {
                                                method:'post'
                                                ,parameters: {session: actionlog_session, id: '' + this.id + '', name: '' + this.id + '', value: 'click'}
                                                /*,onSuccess: function(transport){
                                                    //var response = transport.responseText || "no response text";
                                                    //alert("Success! \n\n" + response);
                                                }*/
                                                /*,onFailure: function(){ 
                                                    //alert('Something went wrong...') 
                                                 }*/
                                            }
            );}
        }); 
    }
);
}
/*============================================================================*/
