/*
 * Job Application
 * Copyright(c) 2008, EIRE Systems
 * dmortell
 */

function ensureVisible(dialog){                
    if(!dialog.viewSize){
        if(dialog.container){
            var s = dialog.container.getSize();
            dialog.viewSize = [s.width, s.height];
        }else{
            dialog.viewSize = [Ext.lib.Dom.getViewWidth(),Ext.lib.Dom.getViewHeight()];
        }
    }
    var s = Ext.get(dialog.container||document).getScroll();
    var x = dialog.xy[0], y = dialog.xy[1];
    var w = dialog.size.width, h = dialog.size.height;
    var vw = dialog.viewSize[0], vh = dialog.viewSize[1];
    var moved = false;
    if(y + 150 > vh+s.top){
        y = s.top + vh - h;    moved = true;
    }
    if(y < s.top){
        y = s.top;     moved = true;
    }
    if(x + 60 > vw+s.left){
        x = vw - w;    moved = true;
    }
    if(x + w - 60 < s.left){
        x = s.left;    moved = true;
    }
    if(moved){
        dialog.xy = [x, y];
        if(dialog.isVisible()){
            dialog.el.setLocation(x, y);
            dialog.adjustAssets();
        }
    }
}

var Comments = function(){
    var dialog, uploadForm, txtComment;
    var tabs, commentsList, postBtn, renderer;
    var wait, error, errorMsg, titleField, linkField, locField;
    var posting = false;
    var hit=[];
    var details;
    var submitFunction;
    
    return {
        init : function(){
            Ext.QuickTips.init();
            commentsList = Ext.get('comments-list');
            wait = Ext.get('post-wait');
            error = Ext.get('post-error');
            errorMsg = Ext.get('post-error-msg');
            uploadForm = Ext.get('comment-form');
            this.createDialog();
        },
        
        addLink : function(id ,tab){
			hit[id]=Ext.get(id);
			hit[id].on('click', function(e){
                details.update("scandetails.php?url=" + hit[id].dom.href); 	// todo: encode url
                e.stopEvent();
                //tabs.activate(tab);
                wait.removeClass('active-msg');
                //titleField.setValue(hit[id].dom.title);
                //linkField.setValue(hit[id].dom.href);
                //locField.setValue("in " + hit[id].dom.class);
                var loc=hit[id].dom.title.split(":",2);
                var emailto=hit[id].dom.title.split(":",2);
                //uploadForm.baseParams.title=hit[id].dom.title;
                uploadForm.baseParams.title=loc[1];
                uploadForm.baseParams.link=hit[id].dom.href;
                uploadForm.baseParams.loc=loc[0];
                uploadForm.baseParams.emailto=emailto;
                ensureVisible(dialog);
                dialog.show(hit[id]);
            });
       	},
       	
        submitFunction : function(){
            //if (1){
            if (uploadForm.isValid()){
                //postBtn.disable();
                wait.radioClass('active-msg');
                uploadForm.submit({
                    url:'upload.php'
                    ,waitMsg:''
                    //, { params: { hiddenVars }}
                });
            } else {
                error.radioClass('active-msg');
                errorMsg.update("Please correct the entries marked in red and try again.");
            }
        },

        createDialog : function(){
            dialog = new Ext.BasicDialog("comments-dlg", { 
                    //title:'Image File Upload', 
                    //autoCreate: true,
                    autoTabs:true,
                    width:500,
                    height:350,
                    shadow:true,
                    //fileUpload: true,
                    //fixedcenter:true,       // fixed center
                    constraintoviewport: false,
                    minWidth:450,
                    minHeight:300
            });
            uploadForm = new Ext.form.Form({
				baseParams:{ type:1
                    , MAX_FILE_SIZE:1000000
                    ,title:''
                    ,link:''
                    ,loc:'xxx'
                },     
				fileUpload: true,
				labelWidth:80,
				buttonAlign: 'center',
				waitMsgTarget: true,
				url: 'upload.php'
			});
			fileField = new Ext.form.TextField({
				name: 'userfile',
				fieldLabel: 'Attach resume',
				width: 300,
				defaultAutoCreate : {tag:"input", enctype:"multipart/form-data", type:"file", size: "40", autocomplete: "off"},
				allowBlank: true,
				invalidText:'File type must be: .gif, .jpg, .png',
				validator: function(value){
					value = value.toLowerCase();
					value = value.substring(value.lastIndexOf('.')+1, value.length);
					ret = value=='gif' || value=='jpg' || value=='png';
					ret=true;
					return ret;
				}				
			});
			field1 = new Ext.form.TextField({
				name: 'name',
				fieldLabel: 'Your name',
				defaultAutoCreate : {tag:"input", type:"text", size: "36", autocomplete: "off"},
				allowBlank: false,
				invalidText:'File type must be: .gif, .jpg, .png',
				validator: function(value){
					value = value.toLowerCase();
					value = value.substring(value.lastIndexOf('.')+1, value.length);
					ret = value=='gif' || value=='jpg' || value=='png';
					ret=true;
					return ret;
				}				
			});
			field2 = new Ext.form.TextField({
				name: 'email',
				fieldLabel: 'Your e-mail',
				defaultAutoCreate : {tag:"input", type:"text", size: "36", autocomplete: "off"},
				allowBlank: false,
				invalidText:'Please enter your e-mail address',
				validator: function(value){
					return (value.lastIndexOf('.') > 0);
				}				
			});
			locField = new Ext.form.TextField({
				name: 'location'
				,fieldLabel: 'Location'
				,defaultAutoCreate : {tag:"input", type:"text", size: "36", autocomplete: "off"}
			});
			txtComment= new Ext.form.TextArea({
				name: 'comment'
				,fieldLabel: 'Comment'
			});
			uploadForm.add(field1);
			uploadForm.add(field2);
			//uploadForm.add(titleField);
			//uploadForm.add(linkField);
			uploadForm.add(fileField);
			//uploadForm.add(locField);
			uploadForm.add(txtComment);
            uploadForm.on("actioncomplete", function(t,a) {
                wait.removeClass('active-msg');
				Ext.MessageBox.alert("Upload Complete", a.result.message);
                postBtn.enable();
				dialog.hide();
			});
			uploadForm.on("actionfailed", function(t,a) {
                error.radioClass('active-msg');
                errorMsg.update(a.result.message);
                Ext.MessageBox.alert('Upload Error', a.result.message);
                postBtn.enable();
			});	
			uploadForm.render('uploadFormId');
            uploadForm.el.enctype = 'multipart/form-data'; // Very very very important                			
            postBtn = dialog.addButton('Send', this.submitFunction, this);
            dialog.addButton('Close', dialog.hide, dialog);
            dialog.addKeyListener(27, dialog.hide, dialog);
            // clear any messages and indicators when the dialog is closed
            dialog.on('hide', function(){
                wait.removeClass('active-msg');
                error.removeClass('active-msg');
                //txtComment.dom.value = '';
            });
            tabs = dialog.getTabs();
            // auto fit the comment box to the dialog size
            var sizeTextBox = function(){
                txtComment.setSize(dialog.size.width-144, dialog.size.height-220);
            };
            sizeTextBox();
            dialog.on('resize', sizeTextBox);
            // hide the post button if not on Post tab
            postBtn.disable();
            //postBtn.setVisible(false);
            //postBtn.setStyle({"display":"none"});
            tabs.on('tabchange', function(panel, tab){
                //postBtn.setVisible(tab.id == 'post-tab');
                tab.id == 'post-tab' ? postBtn.enable(): postBtn.disable();
				
            });
            details = commentsList.getUpdateManager();
        }
    };
}();

Ext.EventManager.onDocumentReady(Comments.init, Comments, true);
