/*
* crm import js-file
* author: robert wildburger <robert.wildburger@tiscover.com>
* date: 11.05.2007
* version: 1.0
*/

/*
* extends array object with in_array-method
*/
Array.prototype.in_array = function (elem) {
  var i;
  for (i = 0; i < this.length; i++) {
    if (this[i] === elem) {
      return true;
    }
  }
  return false;
};

/*
* class CrmImportObject
*/
function CrmImportObject(){
	/*
	* private crmPremium false
	* premium mode
	*/
	var crmPremium = false;
	
	/*
	* private crmErrorMsgPath string
	* default path for js-file with error messages (with tailing /)
	*/
	var crmErrorMsgPath = 'http://homes.tiscover.com/project/components/js/crmimport/';
	
	/*
	* private crmFormName string
	* name of html form-tag (default: 'Katalogbestellung')
	*/
	var crmFormName = 'Katalogbestellung';
	
	/*
	* private classLanguage string
	* language for brochures and error messages (default: 'de')
	*/
	var classLanguage = 'de';
	
	/*
	* private classMandatoryFields string
	* all mandatory form fields, vales separated with ;
	*/
	var classMandatoryFields = '';
	
	/*
	* private crmFormError object
	* object containing error messages for invalid mandatory fields
	*/
	var crmFormError = null;
	
	/*
	* private crmSubmitCounter int
	* number of submit attempts
	*/
	var crmSubmitCounter = 0;
	
	/*
	* private crmCategories array
	* categories for crm premium product
	*/
	var crmCategories = Array('','');
	
	/*
	* private crmCategoryPattern array
	* category pattern for crm premium product
	*/
	var crmCategoryPattern = Array('','');
	
	/*
	* setCrmErrorMsgPath
	* param path string
	* sets path for js-file with error messages (with tailing /)
	*/
	this.setCrmErrorMsgPath = function(path){
		crmErrorMsgPath=path;
	}
	
	/*
	* getCrmErrorMsgPath
	* gets path for js-file with error messages
	*/
	this.getCrmErrorMsgPath = function(){
		return crmErrorMsgPath;
	}
	
	/*
	* setCrmFormName
	* param formname string
	* sets name of html form-tag
	*/
	this.setCrmFormName = function(formname){
		crmFormName=formname;
	}
	
	/*
	* getCrmFormName
	* gets name of html form-tag
	*/
	this.getCrmFormName = function(){
		return crmFormName;
	}
	
	/*
	* setCrmPremium
	* param cat1 string
	* param cat2 string
	* param pattern1 string
	* param pattern2 string
	* sets categories and pattern for crm premium product and enables crm premium product
	*/
	this.setCrmPremium = function(cat1, cat2, pattern1, pattern2){
		crmCategories[0]=cat1;
		crmCategories[1]=cat2;
		crmCategoryPattern[0]=pattern1;
		crmCategoryPattern[1]=pattern2;
		crmPremium=true;
	}
	
	/*
	* getCrmPremium
	* gets categories and pattern for crm premium product
	*/
	this.getCrmPremium = function(){
		return Array(crmCategories[0], crmCategories[1], crmCategoryPattern[0], crmCategoryPattern[1]);
	}
	
	/*
	* isCrmPremium
	* param premium boolean
	* enables and disables crm premium product
	*/
	this.isCrmPremium = function(premium){
		if(premium===true){
			crmPremium=true;
		}else{
			crmPremium=false;
		}
	}
	
	/*
	* private loadExternalFile
	* param fullUrl string
	* loads external file via XMLHttpRequest
	*/
	var loadExternalFile = function(){
		try{
			req = new XMLHttpRequest();
		}
		catch (ms){
			try{
				req = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch (nonms){
				try{
					req = new ActiveXObject("Microsoft.XMLHTTP");
				} 
				catch (failed){
					req = false;
				}
			}  
		}
 		return req;
	}
	
	/*
	* private loadCrmErrorMessages
	* handles loading of external js-file with error messages
	*/
	var loadCrmErrorMessages = function(classLanguage){
		var fullUrl = crmErrorMsgPath+'crm_errormsg_'+classLanguage+'.js';
		
		req=loadExternalFile();
		if (req!==false) {
	        req.open("GET", fullUrl, false);
	        req.send(null);
			eval(req.responseText);
			crmObject.crmFormError = crmFormError;
		} else {
			return false;
		}
	}
	
	/*
	* private checkMandatoryFields
	* param mandatoryFieldsArray array
	* checks mandatary form fields
	*/
	var checkMandatoryFields = function(mandatoryFieldsArray){
		var crmFields = new Array('Greeting','Title','LastName','FirstName','Company','Co','Street','Street2','Street3Pno','StreetPOB','PostBox','Country','ZipCode','City','Phone','Phone2','PhoneMobile','Telefax','Telefax2','EMail','EMail2','Homepage');
		var emailPattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,})+$/;

		for(var i=0; i<mandatoryFieldsArray.length; i++){
			if(crmFields.in_array(mandatoryFieldsArray[i]) && document.forms[crmFormName].elements[mandatoryFieldsArray[i]] && document.forms[crmFormName].elements[mandatoryFieldsArray[i]].value == ""){
				alert(eval('crmObject.crmFormError.'+mandatoryFieldsArray[i]));
				return false;
			}else if(crmFields.in_array(mandatoryFieldsArray[i]) && document.forms[crmFormName].elements[mandatoryFieldsArray[i]] && ((mandatoryFieldsArray[i]=='EMail' || mandatoryFieldsArray[i]=='EMail2') && !document.forms[crmFormName].elements[mandatoryFieldsArray[i]].value.match(emailPattern))){
				alert(eval('crmObject.crmFormError.'+mandatoryFieldsArray[i]+'Invalid'));
				return false;
			}
		}
		return true;
	}
	
	/*
	* private handleBrochureData
	* processes brochure orders and formats data for import
	*/
	var handleBrochureData = function(){		
		var catalogue='';
		var interestsArray=Array();
		var interests='';
		var fieldName='';
		var category1=false;
		var category2=false;
		for(var i=0;i<document.forms[crmFormName].length;i++){
			fieldName=document.forms[crmFormName].elements[i].name;
			if (fieldName == undefined) {
			  continue;
			}
			var fieldNumber=fieldName.match(/\d*$/);
			var fieldLangName='BrochureLang'+fieldNumber;
			var fieldCategoryName='BrochureCategory'+fieldNumber;
			var fieldInterestName='BrochureInterest'+fieldNumber;
			var fieldAmountName='BrochureAmount'+fieldNumber;
			if(fieldName.indexOf('BrochureName')!=-1){
				if(document.forms[crmFormName].elements[fieldName].value!=''){
					if(document.forms[crmFormName].elements[fieldName].checked==1){
						var lang='';
						if(document.forms[crmFormName].elements[fieldLangName]){
							if(document.forms[crmFormName].elements[fieldLangName].type=='select-one'){
								lang=document.forms[crmFormName].elements[fieldLangName].options[document.forms[crmFormName].elements[fieldLangName].selectedIndex].value;
							}else if(Array('text','hidden').in_array(document.forms[crmFormName].elements[fieldLangName].type)){
								lang=document.forms[crmFormName].elements[fieldLangName].value;
							}else{
								lang=classLanguage;
							}
						}else{
							lang=classLanguage;
						}						
						var amount='';
						if(document.forms[crmFormName].elements[fieldAmountName]){
							if(document.forms[crmFormName].elements[fieldAmountName].type=='select-one'){
								amount=document.forms[crmFormName].elements[fieldAmountName].options[document.forms[crmFormName].elements[fieldAmountName].selectedIndex].value;
							}else if(document.forms[crmFormName].elements[fieldAmountName].type=='hidden'){
								amount=document.forms[crmFormName].elements[fieldAmountName].value;
							}else{
								amount='1';
							}
						}else{
							amount='1';
						}						
						catalogue=' '+catalogue+document.forms[crmFormName].elements[fieldName].value+'^'+lang+'^'+amount+'°';
						
						if(document.forms[crmFormName].elements[fieldInterestName] && crmPremium===true){
							if(!interestsArray.in_array(document.forms[crmFormName].elements[fieldInterestName].value)){
								interestsArray.push(document.forms[crmFormName].elements[fieldInterestName].value);
							}
						}
						
						if(document.forms[crmFormName].elements[fieldCategoryName] && crmCategories[0]!='' && document.forms[crmFormName].elements[fieldCategoryName].value==crmCategories[0] && crmPremium===true){
							category1=true;
						}else if(document.forms[crmFormName].elements[fieldCategoryName] && crmCategories[1]!='' && document.forms[crmFormName].elements[fieldCategoryName].value==crmCategories[1] && crmPremium===true){
							category2=true;
						}
					}
				}
			}
		}
		if (catalogue != '') {
		  document.forms[crmFormName].CorrBrochure.value=catalogue.substr(0,catalogue.length-1);
		}
		
		if(interestsArray.length>0 && crmPremium===true){
			for(var j=0;j<interestsArray.length; j++){
				interests=interests+interestsArray[j]+'°';
			}
			document.forms[crmFormName].CorrInterest.value=interests.substr(0,interests.length-1);
		}
		
		if(crmCategoryPattern[0]!='' && crmCategoryPattern[1]!='' && crmPremium===true){
			if(category1===true && category2===false){
				document.forms[crmFormName].CorrPattern.value=crmCategoryPattern[0];
			}
			if(category1===false && category2===true){
				document.forms[crmFormName].CorrPattern.value=crmCategoryPattern[1];
			}
		}
	}
	
	/*
	* checkCRMForm
	* param language string
	* param mandatoryFields string (separated with ;)
	* initializes the order process
	*/
	this.checkCRMForm = function(language, mandatoryFields){
		if(mandatoryFields==null){
			classMandatoryFields='';
		}else{
			classMandatoryFields=mandatoryFields;
		}
		if(language==null){
			classLanguage='de';
		}else{
			classLanguage=language;
		}
		var mandatoryFieldsArray=classMandatoryFields.split(';');
		if(crmSubmitCounter==0){
			loadCrmErrorMessages(classLanguage);
		}
		crmSubmitCounter++;
	
		mandatoryStatus=checkMandatoryFields(mandatoryFieldsArray);
		if(mandatoryStatus===false){
			return false;
		}
		
		handleBrochureData();
		return true;
	}
}

/*
* creates new CrmImportObject named crmObject for use in website
*/
var crmObject = new CrmImportObject();