var PTY = document.PTY || {};

/**
 * Object Demo
 *
 * @copyright Portunity GmbH <www.portunity.de>
 * @author Emanuel Heymann <dev@portunity.de>
 * @date 2008-09-10
 */
PTY.Demo = function () {
    
    var CheckButtonID   = 'fCheck';
    
    var BankNameID      = 'sBankName';
    var BankCodeID      = 'sBankCode';
    var AccountNumberID = 'sAccountNumber';
    var IBANID          = 'sIBAN';
    var SecurityCodeID  = 'sSecurityCode';
    
    var url             = 'http://www.bankdatencheck.de/php/ajax-response.php';
    
    
    var Detail = function () {
        var DetailID = 'details';
        var DetailWindow = null;
        var LastBankDataResult = null;

        var set = function (BankDataResult) {
            LastBankDataResult = BankDataResult;
        };

        var open = function () {
            // DetailWindow = window.open('', '', 'dependent=yes, width=400, height=500, location=no, menubar=no, resizable=no, scrollbars=no, toolbar=no, screenX=' + (screen.width/2) + ', screenY=' + (screen.height/2 - 200));
            // DetailWindow.document.write('<html><head></head><body style="background-color: #414141; color: #FFFFFF; font-family: Courier;">');
            $(DetailID).innerHTML = '<a onclick="PTY.Demo.Detail.close();">Fenster schließen</a><br/><br/>';
            for(var i in LastBankDataResult){
                if(i != 'SecurityCode'){
                    $(DetailID).innerHTML+= i + ':&nbsp;&nbsp;' + LastBankDataResult[i] + '<br/>';
                    // DetailWindow.document.write('' + i + ': ' + LastBankDataResult[i] + '<br/>');
                }
            }
            $(DetailID).innerHTML+= '<br/><a onclick="PTY.Demo.Detail.close();">Fenster schließen</a>';
            $(DetailID).style.display = 'block';
            // DetailWindow.document.write('</body></html>');
            // DetailWindow.focus();
        };

        var close = function () {
            // if(DetailWindow) {
            //    DetailWindow.close();
            // }
            $(DetailID).style.display = 'none';    
        };

        var active = function () {
            if(LastBankDataResult) {
                
            }    
        };

        return {set:set, open:open, close:close};
    } ();

    var Messages = function () { 
        var ResultID        = 'result';
        
        var BankCode        = function () {var NotValid = 'Die Bankleitzahl ist nicht gültig';      var Valid = 'Die Bankleitzahl ist gültig!';         var Error = 'Die Bankleitzahl muss 8 Stellen lang sein!';                       return {NotValid:NotValid, Valid:Valid, Error:Error};} ();
        var AccountNumber   = function () {var NotValid = 'Die Kontonummer ist nicht gültig';       var Valid = 'Die Kontonummer ist gültig!';          var Error = 'Die Kontonummer muss 2 Stellen lang sein!';                        return {NotValid:NotValid, Valid:Valid, Error:Error};} ();
        var AccountData     = function () {var NotValid = 'Die Bankdaten sind nicht gültig';        var Valid = 'Die Bankdaten sind plausibel!';        var Error = '';                                                                 return {NotValid:NotValid, Valid:Valid, Error:Error};} ();
        var IBAN            = function () {var NotValid = 'Die IBAN scheint nicht korrekt zu sein'; var Valid = 'Die IBAN scheint korrekt zu sein!';    var Error = 'Die IBAN muss 22 Stellen lang sein!';                              return {NotValid:NotValid, Valid:Valid, Error:Error};} ();
        var SecurityCode    = function () {var NotValid = 'Der Sicherheitscode ist nicht gültig';   var Valid = 'Der Sicherheitscode ist plausibel!';   var Error = 'Der Sicherheitscode muss zwischen 4 und 5 Stellen lang sein!';     return {NotValid:NotValid, Valid:Valid, Error:Error};} ();
        
        var print = function (Message){
            $(ResultID).innerHTML+= Message;
        }
        
        var clear = function (){
            $(ResultID).innerHTML = '';
        }
        
        return {BankCode:BankCode,
                AccountNumber:AccountNumber,
                AccountData:AccountData,
                IBAN:IBAN,
                SecurityCode:SecurityCode,
                print:print,
                clear:clear};
    } ();


    var BankCode = function () {
        var onSuccess = function (Result) {
            var BankDataResult = Result.responseText.evalJSON();    
            Detail.set(BankDataResult);
            
            Messages.clear();
            if(BankDataResult.ErgebnisBLZ == 1){
                Messages.print('<p>Bank: <b>' + BankDataResult.ErgebnisBankName + '</b><br/><br/></p>');         
            }
            else{
                if(BankDataResult.SecurityCode == 0)  Messages.print('<p class="negativeCheck">' + Messages.SecurityCode.NotValid + '</p>');    
            }
        };
        
        var check = function () {
            if($F(BankCodeID).match(/^[0-9]{8}$/) && $F(SecurityCodeID).match(/^[0-9a-zA-Z]{4,5}$/)){
                var param = {sBankCode:$F(BankCodeID), SecurityCodeID:$F(SecurityCodeID)};
                var AjaxRequest = new Ajax.Request(url, {method:'post', parameters:param, onSuccess:onSuccess});            
            }        
        };
        return {check:check};
    } ();


    var AccountData = function () {
        var onSuccess = function (Result) {
            var BankDataResult = Result.responseText.evalJSON();  
            Detail.set(BankDataResult);
            
            Messages.clear();
            if(BankDataResult.ErgebnisBLZ == 1 && (BankDataResult.ErgebnisKontoNummer == 1 || BankDataResult.ErgebnisKontoNummer == 2)){
                if(BankDataResult.ErgebnisIBAN == 1) $(IBANID).value = BankDataResult.ErgebnisKontoIBAN; 
                Messages.print('<p class="positiveCheck">' + Messages.AccountData.Valid + '<br><br></p>');
                Messages.print('<p>Bank: <b>' + BankDataResult.ErgebnisBankName + '</b><br/><br/></p>');         
                Messages.print('<p>Vollständige Antwort vom Bankdatencheck-Webservice <a onclick="PTY.Demo.Detail.open()">Anzeigen</a>.</p>');      
            }
            else{
                if(BankDataResult.SecurityCode == 0)  Messages.print('<p class="negativeCheck">' + Messages.SecurityCode.NotValid + '</p>');    
                else{      
                    if(BankDataResult.ErgebnisBLZ == 0) Messages.print('<p class="negativeCheck">' + Messages.BankCode.NotValid + '</p>'); 
                    if(BankDataResult.ErgebnisKontoNummer == 0) Messages.print('<p class="negativeCheck">' + Messages.AccountNumber.NotValid + '</p>');                         
                }
            }     
        };
        var check = function () {
						// ### PTY DFE 01.04.09 if($F(BankCodeID).match(/^[0-9]{8}$/) && $F(AccountNumberID).match(/^[0-9]{6,10}$/) && $F(SecurityCodeID).match(/^[0-9a-zA-Z]{4,5}$/)){
            if($F(BankCodeID).match(/^[0-9]{8}$/) && $F(AccountNumberID).match(/^[0-9]{2,10}$/) && $F(SecurityCodeID).match(/^[0-9a-zA-Z]{4,5}$/)){
                var param = {sBankCode:$F(BankCodeID), SecurityCodeID:$F(SecurityCodeID), sAccountNumber:$F(AccountNumberID)};
                var AjaxRequest = new Ajax.Request(url, {method:'post', parameters:param, onSuccess:onSuccess});                        
            }
            else{
                Messages.clear();
                if(!$F(SecurityCodeID).match(/^[0-9a-zA-Z]{4,5}$/)) Messages.print('<p class="negativeCheck">' + Messages.SecurityCode.Error + '</p>');  
                if(!$F(BankCodeID).match(/^[0-9]{8}$/)) Messages.print('<p class="negativeCheck">' + Messages.BankCode.Error + '</p>'); 
                // ### PTY DFE 01.04.09 if(!$F(AccountNumberID).match(/^[0-9]{2,8}$/)) Messages.print('<p class="negativeCheck">' + Messages.AccountNumber.Error + '</p>'); 
                if(!$F(AccountNumberID).match(/^[0-9]{2,8}$/)) Messages.print('<p class="negativeCheck">' + Messages.AccountNumber.Error + '</p>'); 
            }            
        };
        return {check:check};
    } ();
    
    
    var IBAN = function () {
        var onSuccess = function (Result) {
            var BankDataResult = Result.responseText.evalJSON();  
            Detail.set(BankDataResult);
            
            Messages.clear();
            if(BankDataResult.ErgebnisBLZ == 1) $(BankCodeID).value = BankDataResult.ErgebnisBerechneteBLZ; 
            if(BankDataResult.ErgebnisKontoNummer == 1 || BankDataResult.ErgebnisKontoNummer == 2) $(AccountNumberID).value = BankDataResult.ErgebnisBerechneteKontoNummer.replace(/0000/g, '');
            
            if(BankDataResult.ErgebnisBLZ == 1 && (BankDataResult.ErgebnisKontoNummer == 1 || BankDataResult.ErgebnisKontoNummer == 2)){ 
                Messages.print('<p class="positiveCheck">' + Messages.AccountData.Valid + '<br/><br/></p>'); 
                Messages.print('<p>Bank: <b>' + BankDataResult.ErgebnisBankName + '</b><br/><br/></p>');         
                Messages.print('<p>Vollständige Antwort vom Bankdatencheck-Webservice <a onclick="PTY.Demo.Detail.open()">Anzeigen</a>.</p>');  
            }
            else if(BankDataResult.ErgebnisIBAN == 1){
            	$(BankCodeID).value = BankDataResult.ErgebnisBerechneteBLZ;
            	$(AccountNumberID).value = BankDataResult.ErgebnisBerechneteKontoNummer;
            	
            	Messages.print('<p class="positiveCheck">' + Messages.IBAN.Valid + '<br><br></p>');
            	Messages.print('<p style="color: orange;">Die Bankdaten wurden nicht auf Plausibilität geprüft! Aktuell können wir nur Konten aus Deutschland überprüfen.<br><br></p>');
                Messages.print('<p>Vollständige Antwort vom Bankdatencheck-Webservice <a onclick="PTY.Demo.Detail.open()">Anzeigen</a>.</p>');
            }
            else if(BankDataResult.SecurityCode == 0)  Messages.print('<p class="negativeCheck">' + Messages.SecurityCode.NotValid + '</p>');
            else if(BankDataResult.ErgebnisIBAN == 0)  Messages.print('<p class="negativeCheck">' + Messages.IBAN.NotValid + '</p>');
        };
        var check = function () {
            if($F(IBANID).match(/^[A-Za-z]{2}[0-9]*$/) && $F(SecurityCodeID).match(/^[0-9a-zA-Z]{4,5}$/)){
                var param = {sIBAN:$F(IBANID), SecurityCodeID:$F(SecurityCodeID)};
                var AjaxRequest = new Ajax.Request(url, {method:'post', parameters:param, onSuccess:onSuccess});
            }
            else{
                Messages.clear();
                
                if(!$F(SecurityCodeID).match(/^[0-9a-zA-Z]{4,5}$/)) Messages.print('<p class="negativeCheck">' + Messages.SecurityCode.Error + '</p>');  
                if(!$F(IBANID).match(/^[A-Za-z]{2}[0-9]*$/)) Messages.print('<p>' + Messages.IBAN.Error + '</p>');     
            }
        };
        return {check:check};        
    } ();
    
    
    var Check = function () {
        
        var check = function () { if($F(IBANID)){ IBAN.check();    } else{ 
        AccountData.check();    } }; return {check:check}; } ();
    
    var initialize = function () {
        Messages.print('<p>Geben Sie in unsere DEMO entweder eine Kontonummer und eine Bankleitzahl ein, um die Plausibilität zu überprüfen oder ...<br/><br/></p>');
        Messages.print('<p>...nur eine IBAN, um die dazugehörigen Bankdaten zu ermitteln!</p>');
        Event.observe(CheckButtonID, 'click', Check.check);     
        Event.observe(BankCodeID, 'keyup', BankCode.check);
    };
    
    return {initialize:initialize, 
            Detail:Detail};
} ();


document.observe("dom:loaded", function () {
	PTY.Demo.initialize();
});