//Class MyFormLink
var MyFormLink = function(aElement, JsonOptions) {
    var self = this;
    
    //MyFormLink Options
    this.options = {};
    this.options.formWidth = 400;
    this.options.formID = -1;
    this.options.elementID = -1;
    this.options.attachCursor = true;
    this.options.onSubmit = null;
    this.options.lock2ndSubmit = 1;
    this.options.lockSubmit = 0;
    this.options.cursorX = 0;
    this.options.cursorY = 0;
    this.options.titleReplace = 'Lien Hypertexte';
    
    
    //MyFormLink variables
    this.a = aElement;
       
    $.each(JsonOptions, function (i,val){
        eval("self.options."+i+" = val");
    });
    
};


//Class MyForm
var MyForm = function(JsonOptions) {
    var self = this;
    
    //MyForm Options
    this.options = {};
    this.options.overlayOpacity = 0.7;
    this.options.formTop = 100;
    this.options.paddingX = 40;
    this.options.paddingY = 40;
    this.options.formInitialHeight = '';
    this.options.formInitialWidth = 400;
    this.options.formURL = '/engine/get_form.php';
    this.options.formLinkClass = 'click_form';
    this.options.refreshAuto = 1;
    
    //MyForm variables
    this.opened = false;
    this.links = [];
       
    $.each(JsonOptions, function (i,val){
        eval("self.options."+i+" = val");
    });
    
}

$.extend(MyForm.prototype, {
    display: function(){
        console.log(this);
    },
    
    initMyForm: function() {
        this.resetExisting();
	this.prepareLink();
	this.prepareLayout();
	this.prepareEvents();
	this.initEvents();
       
    },
    
    resetExisting: function() {
        if($('#myFormDiv'))
            $('#myFormDiv').empty;
    },
    
    prepareLink: function(){
        
	var self = this;
        var links_a = [];
	self.links = [];
        $("a."+this.options.formLinkClass).each(function() {
            if($(this).attr('title'))
                links_a.push($(this));
        });
        $.each(links_a, function(){
            var yourLink = new MyFormLink($(this) , eval('('+$(this).attr('title')+')'));
            self.links.push(yourLink);
	    $(this).removeClass(self.options.formLinkClass);
            $(this).attr('title', yourLink.options.titleReplace);
        });
	
    },
    
    prepareLayout: function() {

        if($('#myFormOverlay').is('div')) {
            this.overlay = $('#myFormOverlay');
        } else {
            this.overlay = $('<div id="myFormOverlay"></div>').css({'opacity':'0','visibility':'visible'}).prependTo('body');
        }
        if($('#myFormDiv').is('div')) {
            this.formDiv = $('#myFormDiv');
        } else {
            this.formDiv = $('<div id="myFormDiv"></div>').css({'width': this.options.formInitialWidth,'height':this.options.formInitialHeight, 'margin-left':-(this.options.formInitialWidth/2)}).appendTo('body').hide();
	}
    },
    
    prepareEvents: function(){
        var self = this;
        this.overlay.unbind("click").click(function(e){
	    e.stopPropagation();
            self.closeMyForm();
        });
    },
    
    initEvents: function(){
        var self = this;
        $.each(this.links, function(index, elt){
            $(this.a).unbind("click").click(function (e){
                e.stopPropagation();
                if(elt.options.attachCursor) {
                    var scrollY = $(window).scrollTop();
                    var scrollX = $(window).scrollLeft();
    
                    elt.options.cursorX = e.pageX;
                    elt.options.cursorY = e.pageY;
                }
                self.openForm(elt);
            });
        });
    },
    
    OverlayEffectComplete: function() {
        if(this.overlay.css('opacity') == this.options.overlayOpacity) {
	    this.formDiv.show();
	} else if(this.overlay.css('opacity') == 0) {
	    this.formDiv.empty();
	    this.formDiv.hide();
            this.overlay.css({'display': 'none'});
	};
    },
    
    openForm: function(link){
        var self = this;
        this.formDiv.empty().addClass('loading');
        this.overlay.css({'display': 'block'});
        this.overlay.animate({'opacity': this.options.overlayOpacity}, 'fast', function () {self.OverlayEffectComplete();});
        if(link.options.attachCursor) {
            var sizeY = $(window).height();
            var sizeX = $(window).width();
            var scrollY = $(window).scrollTop();
            var scrollX = $(window).scrollLeft();
 
            if(link.options.cursorX > (sizeX / 2)) {
                this.formDiv.css({'margin-left':'','left': '', 'right': link.options.cursorX + this.options.paddingX});
            } else {
                this.formDiv.css({'margin-left':'','left': link.options.cursorX + this.options.paddingX});
            }
            if(link.options.cursorY > (sizeY / 2)) {
                this.formDiv.css({'top': '','bottom': sizeY - link.options.cursorY});
            } else {
                this.formDiv.css({'top': link.options.cursorY + this.options.paddingY});
            }
        } else {
	    this.formDiv.css({'top': this.options.formTop + $(window).scrollTop()});
	}
	
        this.formDiv.css({'width': link.options.formWidth, 'display': 'block'});
        this.getHTML(link);
    },
    
    getHTML: function(l){
        var self = this;
        var dataString = 'form_id='+l.options.formID+'&id='+l.options.elementID;

        $.ajax({  
            type: "POST",  
            url: self.options.formURL,  
            data: dataString,
            dataType: "json",
            error: function (errorLog, status) {
                self.formDiv.removeClass('loading');
                self.formDiv.html('<div class="notify notify-ko"><p><b>Erreur syst&egrave;me</b><br/>Contactez le support Synoptic Productions.</p></div>');
            },
            success: function(data) {
                self.formDiv.removeClass('loading');
                self.formDiv.html(data.output);
                if($('#handle'))
                    self.formDiv.draggable({'handle': '#handle'});
		//$("input:checkbox:not(span > input), input:radio:not(span > input), select:not(span + select)").uniform();
		self.formEvents(l);
		if(data.callBack){
		    eval(data.callBack);
		}
            }  
        });  
    },
    
    formEvents: function(link){
	var self = this;
	var log = $('#log_form');
	
        $('.close').unbind("click").click(function (e){
	    self.closeMyForm();	
        });
	$('#myFormDiv input').keypress(function(e){
	    if(e.keyCode == '13'){
		e.preventDefault();
	    }
	});
	
	$('#f_pwd').keypress(function(e){
	    if(e.keyCode == '13'){
		e.preventDefault();
		if(link.options.lockSubmit == 0){
		    $('label').removeClass('error');
		    log.empty().addClass('loading');
		    if(link.options.onSubmit)
			eval(link.options.onSubmit);
		    $("#f_form").ajaxSubmit(optionsForm);
		}else{
		    self.closeMyForm(link);
		}
	    }
	})
	
	var optionsForm = {
	    dataType:  'json',
	    success: function(data){
		log.removeClass('loading');
		log.html(data.log);
		if(data.status == 'ok') {
		    if(data.callBack){
		        eval(data.callBack);
		    }
		    if(link.options.lock2ndSubmit == 1){
			link.options.lockSubmit = 1;
			setTimeout(function(e){self.closeMyForm(link, self);}, 2000, link, self);
		    }
		}
		if(data.status == 'ko') {
		    if($('#captcha_0').length != 0){
			reload_captcha();
		    }
		    $.each(data.label_errors, function (i,val){
			$('label[for='+val+']').addClass('error');
		    });
		}
	    }
	}
	$('#f_submit_99').click(function (){
	    if(link.options.lockSubmit == 0){
		$('label').removeClass('error');
		log.empty().addClass('loading');
		if(link.options.onSubmit)
		    eval(link.options.onSubmit);
		$("#f_form").ajaxSubmit(optionsForm);
	    }else{
		self.closeMyForm(link);
	    }
	    
	});
    },
    
    closeMyForm: function(link, ob){
	var self = this;
	if(typeof(ob) != "undefined")
	    self = ob;
	self.formDiv.hide();
        self.overlay.animate({'opacity': 0}, 'fast', function () { self.OverlayEffectComplete();});
	if(typeof(link) != "undefined")
	    link.options.lockSubmit = 0;
        self.opened = false;
    }

});




