/*
#---------------------------------------------------------------------------
# Copyright   : rexx systems GmbH, 20097 Hamburg, Heidenkampsweg 101
#               Veränderung oder Nutzung der Scripte/Anwendung ist nur mit
#               schriftlicher Genehmigung der rexx systems GmbH gestattet.
#---------------------------------------------------------------------------
*/

recommendPage = (function () {
    
	var stringsLoaded = false;
	
    var fields     = new Array();
    var fieldHTMId = new Array();
    var nameDivIds = new Array();

    var stringids  = new Array();
	var strings    = new Array();
    
    fieldHTMId[1]  = 'fromNameField';
    nameDivIds[1]  = 'fromName';

    fieldHTMId[2]  = 'toMailField';
    nameDivIds[2]  = 'toMail';

    fieldHTMId[3]  = 'mailMsgField';
    nameDivIds[3]  = 'mailMsg';

    fieldHTMId[4]  = 'recommendPageUrl';
    nameDivIds[4]  = null;

    fieldHTMId[5]  = 'hncaptcha_private_key';
    nameDivIds[5]  = 'capchaRequest';
    
    fieldHTMId[6]  = 'hncaptcha';
    nameDivIds[6]  = null;

    fieldHTMId[7]  = 'hncaptcha_public_key';
    nameDivIds[7]  = null;

    return {
        
        /*
         * initialisiert die seite-empfehlen funktion
         */
        init: function() {
    	
    		recommendPage.viewButton();
    		$('a.recommendPageTrigger').click(function () { recommendPage.loadForm(); });
    		
        },
        
        showWindow: function() {
        	
        	$('#rexxJqmClose').show();
        	
            j$('.jqmWindow').jqm({overlay: 0}).jqDrag('.jqmDrag').jqmShow();
        	j$('.jqmWindow').css('opacity', 1);

    		$('#rexxJqmClose').click( function (){ j$('.jqmWindow').jqmHide(); } );
        },
        
        loadForm: function(hash) {
        	
        	if($.browser.version < 7 && $.browser.msie) {
        		alert('DOES NOT RUN IN IE6 OR LOWER. PLEASE LOAD SOME NEWER BROWSER LIKE FIREFOX.');
        	}
        	
        	$('.jqmWindow').css('width', '600px');
            
            recommendPage.getStrings();
            
            $.ajax({
                type: 'GET',
                url : '../inc/functions/xml_http_requests.php',
                data: {
                    f  : 'get_recommend_page_form',
                    url: $('a.recommendPageTrigger').attr('href'),
                    sid: mySession
                },
                error: function( xhr, status ) {
                    alert('INTERNAL ERROR');
                },
                success: function(formHTML) {
                	
                	recommendPage.showWindow();
                	
                    $('.jqmWindowContent').html(formHTML);
                    $('#recommendSubmit').click(recommendPage.submit);
                    $('#hncaptcha_refresh').click(function (){ recommendPage.refreshCaptcha(hash); });
                    $('#recommendExit').click(function (){ j$('.jqmWindow').jqmHide(); });
                    $('#rexxJqmClose').hide();
                }
            });
        },
    
        /*
         * reaktionen auf das absenden des formulars 
         */
        submit: function () {
            
        	// fehleranzeige zurück setzen
        	$('#recommendError').hide();
        	for (id in nameDivIds) {
                if(nameDivIds[id] && nameDivIds[id] != null)
                    $('#'+nameDivIds[id]).css('color', '#000000');
        	}
        	
            recommendPage.readFields();
            recommendPage.sendPost();

        },
        
        // felder einlesen
        readFields: function() {
            
            for (field in fieldHTMId)
                fields[field] = $('#'+fieldHTMId[field]).val();
            
        },
        
        displayErrors: function(errors) {

            var emptyError = false;
            var errorString = '';

            for (error in errors) {

            	// error-string sammeln
                if(errors[error][0] == 'EMPTY')
                    emptyError = recommendPage.getString('RECOMMEND_EMPTY_ERROR');
                    
                if(errors[error][0] == 'FALSE_MAIL')
                    errorString += recommendPage.getString('RECOMMEND_FIELD_ERROR') + " " + errors[error][1] + "<br />\n";
                
                if(errors[error][0] == 'FALSE_CAPTCHA')
                	errorString += recommendPage.getString('RECOMMEND_FIELD_ERROR') + " " + errors[error][1] + "<br />\n";

                if(errors[error][0] == 'CAPTCHA_MAX_TRY') {
                	errorString += recommendPage.getString('RECOMMEND_FIELD_ERROR') + " " + errors[error][1] + "<br />\n";
                	recommendPage.refreshCaptcha();
                }
                
                // bezeichnung der fehlerhaften felder rot färben
                if(nameDivIds[error] && nameDivIds[error] != null)
                    $('#'+nameDivIds[error]).css('color', '#ff0000');
            }
            delete error;
             
            if(emptyError != false)
                errorString = emptyError + "<br />\n" + errorString;

            $('#recommendError').show();
            $('#recommendError').html(errorString);

        },
        
        sendPost: function() {

            // daten für die übertragen vorbereiten
            for (field in fields) {
                fields[field] = j$.base64Encode(fields[field]);
            }

            $.ajax({
                type: 'POST',
                url : '../inc/functions/xml_http_requests.php',
                data: {
                    f : 'get_recommend_page_result',
                    formData: ''+fields,
                    hncaptcha_public_key: $('#hncaptcha_public_key').val(),
            		hncaptcha_private_key: $('#hncaptcha_private_key').val(),
            		hncaptcha: $('#hncaptcha').val(),
                    sid: mySession
                },
                dataType: "text/xml",
                error: function(xhr, status) {
                    alert("INTERNAL ERROR\n type: " + status);
                },
                success: recommendPage.handleResult
            });
        },
        
        handleResult: function(resultXml, status) {

        	// IE BugFix
        	if($.browser.msie) {
        		xml = new ActiveXObject('Microsoft.XMLDOM');
                xml.async = false;
                xml.loadXML(resultXml); 
        	} else {
        		xml = resultXml;
        	}

        	flagHasError = false;

        	// fehler anzeigen
            if($(xml).find("error")){

                errors = new Array();

                $(xml).find("error").each(function (){
                	flagHasError = true;

                    index = $(this).find("index").text();
                    type = $(this).find("type").text();
                    fieldName = j$.base64Decode($(this).find("name").text());

                    errors[index] = new Array(type, fieldName);
                });

                // fehler auswerten und anzeigen
                if(errors.length > 0)
                    recommendPage.displayErrors(errors);
                
                // validierte values eintragen
                $(xml).find("field").each(function (){
                	index = $(this).find("index").text();
                    value = j$.base64Decode($(this).find("value").text());

                    $('#'+fieldHTMId[index]).val(value);
                });
            }

            // erfolgsmeldung anzeigen
            if($(xml).find("valide") && flagHasError === false){

            	successMsg = j$.base64Decode($(xml).find("valide").find("msg").text());

            	// msg anzeigen
            	$('.jqmWindowContent').html(successMsg);
            	$('#rexxJqmClose').show();
            }
        },
        
        refreshCaptcha: function() {
        	
        	$.ajax({
                type: 'POST',
                url : '../inc/functions/xml_http_requests.php',
                data: {
                    f : 'get_recommend_captcha_request',
                    sid: mySession
                },
                dataType: "text",
                error: function(xhr, status) {
                    alert("INTERNAL ERROR\n type: " + status);
                },
                success: function (resultXml) {
                	
                	// IE BugFix
                	if($.browser.msie) {
                		xml = new ActiveXObject('Microsoft.XMLDOM');
                        xml.async = false;
                        xml.loadXML(resultXml);

                        if(xml.selectSingleNode('result').selectSingleNode('key'))
                        	publicKey = xml.selectSingleNode('result').selectSingleNode('key').text;
                        if(xml.selectSingleNode('result').selectSingleNode('try'))
                        	currentTry = xml.selectSingleNode('result').selectSingleNode('try').text;
                		
                	} else{

                		if($(resultXml).find('key'))
                			publicKey = $(resultXml).find('key').text();
                		if($(resultXml).find('try'))
                			currentTry = $(resultXml).find('try').text();
                	}
                	
                	$('img#recommendCaptcha').attr('src', 'inc/functions/captchaImage.php?public='+publicKey+'&sid='+mySession);
                	$('input#hncaptcha_public_key').val(publicKey);
                	$('input#hncaptcha').val(currentTry);
                	$('input#hncaptcha_private_key').val('');
                }
        	});
        },
        
        getStrings: function() {
        	
        	$.ajax({
                type: 'POST',
                url : '../inc/functions/xml_http_requests.php',
                data: {
                    f : 'get_recommend_js_strings',
                    sid: mySession
                },
                dataType: "text/xml",
                error: function(xhr, status) {
                    alert("INTERNAL ERROR\n type: " + status);
                },
                success: function (resultXml) {

                	// IE BugFix
                	if($.browser.msie) {
                		xml = new ActiveXObject('Microsoft.XMLDOM');
                        xml.async = false;
                        xml.loadXML(resultXml);
                        
                        i=0;
                        
                        if(xml) {
                            while(i < xml.selectSingleNode('strings').childNodes.length){

                        	    stringids[i] = j$.base64Decode(xml.selectSingleNode('strings').childNodes[i].firstChild.text);
                        	    strings[i]   = j$.base64Decode(xml.selectSingleNode('strings').childNodes[i].lastChild.text);
                        	
                        	    i++;
                            }
                        }
                        
                        delete i;
                	} else {
                		xml = resultXml;
                		
                    	if($(resultXml).find('strings').find('string')) {
                    		
                    		i=0;
                    		
                    		$(resultXml).find('string').each(function (){

                    			if($(this).find('id')) {

                    				stringids[i] = j$.base64Decode($(this).find('id').text());
                    				strings[i]   = j$.base64Decode($(this).find('value').text());
                    				i++;
                    			}
                    		});
                    		
                    		delete i;

                    	}
                	}

                }
        	});
        },
        
        getString: function (searchKey){
        	
        	for(key in stringids) {
        		
        		if(stringids[key] == searchKey)
        			return strings[key];
        	}
        },
        
        viewButton: function (){

        	if($.browser.version >= 7 || !$.browser.msie)	
        		$('#recommendLinkBox').show();
        }
        
    };
})();