/*
	Author: andreas.gruenwald@sms.at
	Description: handling form fields and ajax request for subscription in websms.
		     this js-code is based on prototype.js and form.js

	Sample call:
		      <input type="button"
                 onclick="websms( {
                                        websmsForm: document.forms[0],
                                        onsubmitUrl: 'subscribe_ok.xhtml',
                                   },
                                {
                                        origin_id:      2,
                                        channel_id:     1,
                                        email_address:  document.getElementById('email').value,
                                        mobile_number:  document.getElementById('msisdn').value,
                                        postal_code:    document.getElementById('zip').value,
                                        age:            8,
                                        family_name:    'Mustermann',
                                        given_name:     'Max'
                            }
                                                )"
             name="websms_submit" id="websms_submit" value="Senden" />
*/	

	CONFIG_MISSING_TEXT_DEFAULT	= 'Eingabe Pflicht!'; //form.js - Eingabe Pflicht
	CONFIG_MISSING_NUM_TEXT_DEFAULT = 'Die Eingabe muss numerisch sein!' //form.js - Eingabe numerisch Pflicht;

	var text = {
				'mandatory'		   : 'Eingabe Pflicht: '
			};
			
	function websms(action,params) {
		if (action.onsubmitUrl == null) {
			alert('You MUST define an onsubmitUrl - action in Parameter 1!\ne.g.: onsubmitUrl: \'submit.html\' or leave blank if not in use');
		}
		if (action.websmsForm == null) {
			alert('You MUST define your websmsForm in Parameter 1!\ne.g.: websmsForm: document.websms_form');
		}
		
		var requestURL = 'http://www.websms.com/websms/OptIn';
		                 //  test url "http://websms.andi.dev.sms.at/cgi-bin/ger/extern/subscribers.fcgi";
		if (action.requestURL != null) {
			requestURL = action.requestURL;
		}

		
		if (params.customer_id == null) {
			alert('Customer id is missing!');
		}		
		if (params.account_id == null && params.account_email == null) {
			alert('Account id is missing!');
		}
		
		if (params.msisdn == null) {
			alert('Parameter "email_address" or "mobile_number" MUST be given!');
		}
		
		var existingParams = [
							  'customer_id',
							  'account_id',
							  'groups',
							  'title',
							  'nickname',
							  'last_name',
							  'first_name',
							  'msisdn',
							  'zip',
							  'city',
							  'country',
							  'msisdn_fix',
							  'msisdn_fax',
							  'email',
							  'confirmation_pin',
							  'overwrite',
							  'action',
							  'lang',
							  'confirmation_mode'							  
							  ];
		var res = checkParams(params,existingParams);					  
		if (res.length > 0) {
			alert(res);
			return;
		}
		
		/* TO THE AJAX REQUEST */
		var ret = true;
		ret = formSubmitted(action.websmsForm,requestURL,false, params, true);
		/* END OF THE AJAX REQUEST */
		if (!ret) {
			if (action.submitFunction == null) {
				window.location.href = action.onsubmitUrl;
			}
			else {
				eval(action.submitFunction+'()');
			}
		}
	}
	
	function checkParams(params,existingParams) {
		var result = '';
		for (var p in params) {
			var isExisting = false;
			for (var j = 0; j < existingParams.length; j++) {
				if (existingParams[j] == p) {
					isExisting = true;
					break;
				}
			}
			if (!isExisting) {
				result += 'You defined an invalid parameter "' + p + '".\n';
			}
		}
		return result;
	}

       /*
        read url parameter - this function may be used to read parameters from the url
      */
	function gup(name)
	{
  		name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regexS = "[\\?&]"+name+"=([^&#]*)";
  		var regex = new RegExp( regexS );
  		var results = regex.exec( window.location.href );
  		if( results == null )
    			return "";
  		else
    			return decodeURI(results[1]);
	}

	/*
		returns all url parameters in an array (key=param,value=content)
	*/
        function getUrlParams() {
                var params = {};
                var search = new String(window.location.search);
                search = search.substr(1,search.length-1);
                var values = search.split("&");
                for (var i=0;i<values.length;i++) {
                        var value = values[i].split("=");
                        if (value[0] != null && value[0] != '') {
                                if (value[1] == null) {
                                  params[value[0]] = "";
                                }
                                else {
                                  params[value[0]] = decodeURI(value[1]);
                                }
                        }
                 }
                return params;
        }
        
     
    /* basic - version - submit */   
    function websms_submit_basic (myForm,customer_id,account_id,groups,submit_url
 					   ,request_url,overwrite,user_action,lang) {
	    
	    $('form_general_errors').update('');
	    
	    var mandatoryFields = new Array('websms_msisdn','websms_first_name','websms_last_name');
	    var ret = checkMandatory(mandatoryFields,user_action);	    
		if (!ret) {
		   return ret;
		}
		
		var action = 
			{
    				websmsForm:  myForm,
    				onsubmitUrl: submit_url,
    				requestURL: request_url,
					submitFunction: 'websms_default_doOk'
    		};
		
		var nickname = '';
		if (user_action != 'stop') {
			nickname = getDefaultValue($('websms_nickname')) || $('websms_first_name').value;
		}
					    		
    	var params = 
			{
            	customer_id:    customer_id,
                account_id:		account_id,                
                msisdn:			getDefaultValue($('websms_msisdn')),
                email:			getDefaultValue($('websms_email')),
                first_name:		getDefaultValue($('websms_first_name')),
                last_name:		getDefaultValue($('websms_last_name')), 
                nickname:		nickname,                               
                title:			getDefaultValue($('websms_title')),
                zip:			getDefaultValue($('websms_zip')),
                groups:			groups,
                confirmation_pin:getDefaultValue($('websms_pin')),
                overwrite:		overwrite,
                action:			user_action,
                lang:			lang,
                confirmation_mode: confirmation_mode()
            };    
    	
    	return websms(action,params);
    }

    /* business - version - submit */   
    function websms_submit_business (myForm,customer_id,account_id,groups,submit_url
 					   ,request_url,overwrite,user_action,lang) {
	    
	    $('form_general_errors').update('');
	    
	    var mandatoryFields = new Array('websms_first_name','websms_last_name','websms_msisdn','websms_email');
	    var ret = checkMandatory(mandatoryFields,user_action);	    
		if (!ret) {
		   return ret;
		}
		
		var action = 
			{
    				websmsForm:  myForm,
    				onsubmitUrl: submit_url,
    				requestURL: request_url,
					submitFunction: 'websms_default_doOk'
    		};
		
		var nickname = '';
		if (user_action != 'stop') {
			nickname = getDefaultValue($('websms_nickname')) || $('websms_first_name').value;
		}
					    		
    	var params = 
			{
            	customer_id:    customer_id,
                account_id:		account_id,                
                msisdn:			getDefaultValue($('websms_msisdn')),
                email:			getDefaultValue($('websms_email')),
                first_name:		getDefaultValue($('websms_first_name')),
                last_name:		getDefaultValue($('websms_last_name')), 
                nickname:		nickname,                               
                title:			getDefaultValue($('websms_title')),
                zip:			getDefaultValue($('websms_zip')),
                groups:			groups,
                confirmation_pin:getDefaultValue($('websms_pin')),
                overwrite:		overwrite,
                action:			user_action,
                lang:			lang,
                confirmation_mode: confirmation_mode()
            };    
    	
    	return websms(action,params);
    }
    
    /* extended - version - submit */   
    function websms_submit_extended (myForm,customer_id,account_id,groups,submit_url
 					   ,request_url,overwrite,user_action,lang) {
	    
	    $('form_general_errors').update('');
	    
	    var mandatoryFields = new Array('websms_first_name','websms_last_name','websms_msisdn','websms_email');
	    var ret = checkMandatory(mandatoryFields,user_action);	    
		if (!ret) {
		   return ret;
		}
		
		var action = 
			{
    				websmsForm:  myForm,
    				onsubmitUrl: submit_url,
    				requestURL: request_url,
					submitFunction: 'websms_default_doOk'
    		};
		
		var nickname = '';
		if (user_action != 'stop') {
			nickname = getDefaultValue($('websms_nickname')) || $('websms_first_name').value;
		}
					    		
    	var params = 
			{
            	customer_id:    customer_id,
                account_id:		account_id,                
                msisdn:			getDefaultValue($('websms_msisdn')),
                email:			getDefaultValue($('websms_email')),
                first_name:		getDefaultValue($('websms_first_name')),
                last_name:		getDefaultValue($('websms_last_name')), 
                nickname:		nickname,                               
                title:			getDefaultValue($('websms_title')),
                zip:			getDefaultValue($('websms_zip')),
                city:			getDefaultValue($('websms_city')),
                country:		getDefaultValue($('websms_country')),
                msisdn_fix:		getDefaultValue($('websms_msisdn_fix')),
                groups:			groups,
                confirmation_pin:getDefaultValue($('websms_pin')),
                overwrite:		overwrite,
                action:			user_action,
                lang:			lang,
                confirmation_mode: confirmation_mode()
            };    
    	
    	return websms(action,params);
    }        
    
    function checkMandatory(mandatoryFields,action) {
    	var ret = true;
    	var msg = '';
    	
    	for (var i = 0; i < mandatoryFields.length; i++) {
    		if ((action == 'stop') && (mandatoryFields[i] != 'websms_msisdn')) {
    			continue;
    		}
    		if ($(mandatoryFields[i]).value == '') {
    			msg += '<li>' + text['mandatory'] + ' ' + $(mandatoryFields[i]+'_text').innerHTML + '</li>'; 
    		}
    	}

		if (msg != '') {
			ret = false;
			msg = '<ul>' + msg + '</ul>';
			$('form_general_errors').update(msg);
			$('form_general_errors').show();
		}
		return ret;    
    }

    function websms_default_doOk() {
    	if (!$('websms_pin_confirmation').visible()) {
    		$('websms_pin_confirmation').show();
    		$('websms_confirmation_text').show();
    	}
    	else {    	
			$('websms_submit_div').hide();
			$('websms_pin_confirmation').hide();
			$('websms_confirmation_text').hide();
			$('websms_pin').value = ''; //reset pin    	
    		$('websms_submit_info').show();			
		}
    }
    
    
    function getDefaultValue(formfield) {
    	if (formfield == null || formfield == 'undefined') {
    		return '';
    	}
    	else {
    		return formfield.value;
    	}
    }

	/*
		function for prefilling input-fields from windows-url
	*/
        function prefillForm(form,elementname,value) {

                if (form.elements[elementname] == null) {
                }
                else if (form.elements[elementname].type == 'text' || form.elements[elementname].type == 'textarea') {
                        form.elements[elementname].value = value;
                }
                else if (form.elements[elementname].length > 0 && form.elements[elementname][0].type == 'radio') {
                        for (var j = 0; j < form.elements[elementname].length; j++) {
                                if (form.elements[elementname][j].value == value) {
                                        form.elements[elementname][j].checked = true;
                                }
                                else {
                                        form.elements[elementname][j].checked = false;
                                }
                        }
                }
                else if (form.elements[elementname].type.match('select')) {
                        for (var j = 0; j < form.elements[elementname].length; j++) {
                                if (form.elements[elementname][j].value == value) {
                                        form.elements[elementname][j].selected = true;
                                }
                                else {
                                        form.elements[elementname][j].selected = false;
                                }
                        }
                }
                else {
                        alert('Form type ' + form.elements[elementname].type + ' not supported yet!');
                }
        }
        
        
        function prefillFromUrl() {
	         var params = getUrlParams();
	         for (var p in params) {
	                //alert('parameter ' + p + ' is ' + params[p] + '.');
	                //alert('document.forms.length: ' + document.forms.length);
	                if (document.forms.length > 0) {
	                        for (var i = 0; i < document.forms.length; i++) {
	                                //if document.forms[i].
	                                prefillForm(document.forms[i],p,params[p]);
	                        }
	                }
	        }
	    }  
	    
	    function confirmation_mode () {
	        var wp = $('websms_pin_confirmation');	        
	    	if (wp.visible()) {
	    		return true;
	    	}
	    	else {
	    		return false;
	    	}
	    }      


/* you must put this part into your page 
Event.observe(window, 'load', function() {
		prefillFromUrl();
);
*/

