/*
 * All rights reserved (c) 2007, GoNow
 * http://www.planos.cl
 * 
 * @author: Renato Albano / GoNow 2007 
 * Alterações: Elisangela Menezes / Gonow 2008
 */

Email = function() { 
	var _self = this;
	var _randomId = '';
	var _activeEditor = false;
	var _initHandler = function() {
		$D.setStyle('mapSkinEmail', 'width', ($D.getViewportWidth() + 'px'));
		$D.setStyle('mapSkinEmail', 'height', ($D.getViewportHeight() + 'px'));	
		_addEvents();	
		_self.show();
	};

	var _addEvents = function() {		
		$E.on('emailSubmit', 'click', _verifyCode);
		$E.on('captchaEmailCancel', 'click', _closeVerifyPanel);
		$E.on('captchaEmailSend', 'click', _sendEmail);
		$E.on('captchaChangeImgEmail', 'click', _changeImgCaptcha);
		$E.on('emailSecurityCode','keypress', _keypress);			
		$E.on('mapSkinEmailBt','click', _mapSkinEmail);
		$E.on('mapSkinEmailClose','click', _closeEmail);
		$E.on('emailCancel','click', _closeEmail);	
		$E.on(document.getElementsByTagName('input'),'focus',inputFocus);
		$E.on(document.getElementsByTagName('input'),'blur',inputBlur);	
	};
	
	var _closeEmail = function() {
		$D.get('emailInputFrom').value = '';
		$D.get('emailInputTo').value = '';
		$D.get('emailCheckCopy').checked = false;					
		$D.get('emailInputSubject').value = '';
		$D.get('emailSecurityCode').value = '';
		$D.addClass('mapSkinEmail','off');		
	};	

	this.closeEmail = _closeEmail;

	var _mapSkinEmail = function(e,o) {
		$D.removeClass('mapSkinEmail','off');
	};

	this.show = function() {
		$D.get('emailInputFrom').focus();
	};

	var _verifyCode = function() {
		if(!_validateFields()){
			alert('Verificar los datos llenados');
			return false;
		}				
        _changeImgCaptcha();
	};
	
	var _changeImgCaptcha = function(imgPath) {	
        var objImg = $D.get('captchaImgEmail');
        var capImg = 'servlet/showSecurityImage?randomId=';   
        _randomId = (''+Math.random());
        _randomId = _randomId.substring(_randomId.indexOf('.')+1);
        capImg += _randomId;
        objImg.src = capImg;
        _openVerifyPanel();          		
	};
	
	var _keypress = function (e) {
		var c = $E.getCharCode(e);
		if (c == 13) {
			_sendEmail();
		}
	};
	
	var _openVerifyPanel = function() {		
		$D.replaceClass('captchaEmail','off','on');
		$D.addClass('mapSkinEmailBg','mapSkinEmailBg');
		$D.get('emailSecurityCode').value = '';
		$D.get('emailSecurityCode').focus();
	};

	var _closeVerifyPanel = function() {	
		$D.replaceClass('captchaEmail','on','off');
		$D.removeClass('mapSkinEmailBg','mapSkinEmailBg');
		$D.replaceClass('captchaEmailErroMsg','on','off');		
	};
	
	this.closeVerifyPanel = _closeVerifyPanel;

	var _verifyCodeFail = function() {
		$D.replaceClass('captchaEmailErroMsg','off','on');
		_changeImgCaptcha();		
		$D.get('emailSecurityCode').value = '';
		$D.get('emailSecurityCode').focus();
	};

	var _clearEditor = function() {
		var editorIframe = $D.get('emailEditor');
		if(typeof(editorIframe.src) != 'undefined') {
			editorIframe.src = 'about:blank';
		}
	};

	var _checkEditorIframeLoaded = function(doc, callBack) {
		var _editorInterval = setInterval(function() {
			try {
				if(typeof(doc.body) != 'undefined') {
					callBack.call();
					clearInterval(_editorInterval);
				}
			} catch(e) {
					clearInterval(_editorInterval);
					_clearEditor();
					setTimeout(_loadEditor, 300);
			}
		},100);
	};

	var _iframeGetDocument = function(idIframe) {
        var frameContents = document.getElementById(idIframe);
        var cWindow;
        var cDocument;
        
        if(window.frames && window.frames[idIframe]){ //IE5, Konq, Safari
          cWindow = window.frames[idIframe];
        }else if(frameContents.contentWindow){ //IE5.5+, Moz 1.0+, Opera
          cWindow = frameContents.contentWindow;
        }else{ //Moz < 0.9 (Netscape 6.0)
          cWindow = frameContents;
        }

        if(cWindow.document){ //Moz 0.9+, Konq, Safari, IE, Opera
          cDocument = cWindow.document;
        }else{//Moz < 0.9 (Netscape 6.0)
          cDocument = cWindow.contentDocument;
        }
        return cDocument;
	};

	var _getEditorBody = function() {
		var doc =  _iframeGetDocument('emailEditor');
		return (typeof(doc.body) != 'undefined') ? doc.body.innerHTML : "";
	};

	var _setEditorBody = function(content) {
		var doc =  _iframeGetDocument('emailEditor');
		if(typeof(doc.body) != 'undefined') {
			doc.body.innerHTML = content;
		}
	};

	var _loadEditor = function() {
			var path = 'http://' + window.location.host + '/' + window.location.pathname.split('/')[1] + '/';
			var doc =  _iframeGetDocument('emailEditor');
			var htm = [];
			htm.push('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">');
			htm.push('<html><head>');
			htm.push('<style type="text/css">#linkMapa{text-decoration:none !important;color:#000 !important;}body{border:0px;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;color:#4d4d4d;background-color:transparent;}</style>');
			htm.push('</head><body>');
			htm.push('<p>&iexcl;Hola!, me gustar&iacute;a compartir contigo el siguiente plano:</p>');
			htm.push('<p style="text-align: center;"><a href="'+Stage.permLink()+'&email=true'+'"><img src="'+path+'imgMap.do?'+Stage.permLinkParams()+'&w=320&h=265" alt="" border="0" /></a></p>');
			var _callBackCheckIframe = function() {
				if(!_activeEditor) {
					 doc.designMode = 'On';
					_activeEditor = true;
					abba = doc;
				}
				try {
					doc.open();
					doc.write(htm.join(''));
					doc.close();

				} catch(e) {
				}
			};
			_checkEditorIframeLoaded(doc, _callBackCheckIframe);
	};

	this.verifyCodeFail = _verifyCodeFail;

	var _addressFail = function(from, to, myCc) {
		_closeVerifyPanel();
		msg = [];
		msg.push('<p>Los siguientes correos electr&oacute;nicos no son v&aacute;lidos:</p>');
		msgAlert = [];
		msgAlert.push('Los siguientes correos electrónicos no son válidos:');

		if(from) {
			msg.push('<br /><p><strong>De</strong>: ' + from + '</p>');
			msgAlert.push(' Campo "De": '+ from);
			if((to && to.length>0) || (myCc && myCc.length>0)){
				msgAlert.push(',');
			}	
		}
		if(to && to.length>0) {
			msg.push('<br /><p><strong>Para</strong>: </p>');
			msgAlert.push(' Campo "Para": ');
			for(var i = 0,  l = to.length; i < l; i++) {
				msg.push('<p>' + to[i] + '</p>');
				msgAlert.push(to[i]);
			}
			if(myCc && myCc.length>0){
				msgAlert.push(',');
			}
		}
		if(myCc && myCc.length>0) {
			msg.push('<br /><p><strong>Cc</strong>: </p>');
			msgAlert.push(' Campo "Cc": ');
			for(var i = 0,  l = myCc.length; i < l; i++) {
				msg.push('<p>' + myCc[i] + '</p>');
				msgAlert.push(myCc[i]);
			}
		}
		alert((msgAlert.join('')));
	};

	this.addressFail = _addressFail;

	var _validateFields = function() {
		var from = $D.get('emailInputFrom');
		var to = $D.get('emailInputTo');		
		var subject = $D.get('emailInputSubject');
		var myCc = '';
		var valid = true;				
		if(from.value == ''){
			valid = false;
			from.focus();
		}else if(to.value == '') {
			valid = false;
			to.focus();
		}else if(myCc.value = ''){
			if($D.get('emailCheckCopy').checked){
				valid = false;
			}			
		}
		return valid;
	};

	var _sendEmail = function() {		
		var from = escape($D.get('emailInputFrom').value);
		var to = escape($D.get('emailInputTo').value);
		var myCc = '';
		if($D.get('emailCheckCopy').checked){
			myCc = escape($D.get('emailInputFrom'));			
		}		
		var subject = ($D.get('emailInputSubject').value);
		var securityCode = escape($D.get('emailSecurityCode').value);
		var editorBody = _getEditorBody();
		
		//editorBody = editorBody.replace(" ", "%20");
		
		var uri = '/planos/sendEmail.do';
		
		 
		if(!IE){
			//editorBody = editorBody.replace("\n", "LEANDRO");
			
			editorBody = escape(editorBody);
			editorBody = editorBody.replace(" ", "%20");
			
			var params = 'mailFrom='+from;
			params += '&mailTo=' + to;
			params += '&mailMyCc=' + myCc;
			params += '&mailSubject=' + subject;
			params += '&securityCode=' + securityCode;
			params += '&randomId=' + _randomId;
			params += '&mailBody=' + editorBody;
			params += '&ajaxId=' +Math.random();
		
			var request = new Request();	
		   	request.getAsync(uri+'?'+params, 'emailSend', null);
		   	request = null;
		   	
		
		}else{
			//Envia e-mails do ie por form para contornar as limitações com grandes strings;
			var c = document.createElement;
			var fieldValue = [from, to, myCc, subject, securityCode, _randomId, editorBody, Math.random()];
			var fieldName = ["mailFrom", "mailTo", "mailMyCc", "mailSubject", "securityCode", "randomId", "mailBody", "ajaxId"];
			var inputs = [];
			var doc = document.body;
			
			var form = c("FORM");
			form.action = uri;
			form.method = "post";
			form.target = "fakeRequest";
			
			for (var y = 0; y < fieldName.length; y++){
				inputs[fieldName[y]] = c('INPUT');
				inputs[fieldName[y]].id = fieldName[y];
				inputs[fieldName[y]].name = fieldName[y];
				inputs[fieldName[y]].type = 'hidden';
				inputs[fieldName[y]].value = fieldValue[y];
				form.appendChild(inputs[fieldName[y]]);
			}
			
			doc.appendChild(form);
			form.submit();
			
			$D.replaceClass('captchaEmail','on','off');
			$D.replaceClass('mapSkinEmailOk','off','on');
		}
	};
	
	this.updateEmailFields = function(from, to, myCc, subject, body){				
		$D.get('emailInputFrom').value = from;			
		$D.get('emailInputTo').value = to;
		if(myCc!=null && myCc!=''){
			$D.get('emailCheckCopy').checked = true;
		}
		$D.get('emailInputSubject').value = subject;	
		setTimeout(function() {_setEditorBody(_getEditorBody());}, 300);
	};		
	_initHandler.call();
};