// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
//


jQuery.extend({
	

    createUploadIframe: function(id, uri)
	{
			//create frame
            var frameId = 'jUploadFrame' + id;
            
            if(window.ActiveXObject) {
                var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
                if(typeof uri== 'boolean'){
                    io.src = 'javascript:false';
                }
                else if(typeof uri== 'string'){
                    io.src = uri;
                }
            }
            else {
                var io = document.createElement('iframe');
                io.id = frameId;
                io.name = frameId;
            }
            io.style.position = 'absolute';
            io.style.top = '-1000px';
            io.style.left = '-1000px';

            document.body.appendChild(io);

            return io;			
    },
    createUploadForm: function(id, fileElementId,hiddenFormElements)
	{
		//create form	
		var formId = 'jUploadForm' + id;
		var fileId = 'jUploadFile' + id;
		var form = $('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');	
		var oldElement = $('#' + fileElementId);
		var newElement = $(oldElement).clone();
		$(oldElement).attr('id', fileId);
		$(oldElement).before(newElement);
		$(oldElement).appendTo(form);
        hiddenFormElements.clone().appendTo(form);
		//set attributes
		$(form).css('position', 'absolute');
		$(form).css('top', '-1200px');
		$(form).css('left', '-1200px');
		$(form).appendTo('body');		
		return form;
    },

    ajaxFileUpload: function(s) {
        // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout		
        s = jQuery.extend({}, jQuery.ajaxSettings, s);
        var id = new Date().getTime()        
		var form = jQuery.createUploadForm(id, s.fileElementId,s.hiddenFormElements);
		var io = jQuery.createUploadIframe(id, s.secureuri);
		var frameId = 'jUploadFrame' + id;
		var formId = 'jUploadForm' + id;		
        storedframeid = frameId;
        // Watch for a new set of requests
        if ( s.global && ! jQuery.active++ )
		{
			jQuery.event.trigger( "ajaxStart" );
		}            
        var requestDone = false;
        // Create the request object
        var xml = {};   
        if ( s.global )
            jQuery.event.trigger("ajaxSend", [xml, s]);
        // Wait for a response to come back
        var uploadCallback = function(isTimeout)
		{			
			var io = document.getElementById(frameId);
            try 
			{				
				if(io.contentWindow)
				{
                    savedinnerbody = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:"empty";

					 xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
                	 xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
				}else if(io.contentDocument)
				{
					 xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
                	xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
				}						
            }catch(e)
			{
				jQuery.handleError(s, xml, null, e);
			}
            if ( xml || isTimeout == "timeout") 
			{				
                requestDone = true;
                var status;
                try {
                    status = isTimeout != "timeout" ? "success" : "error";
                    // Make sure that the request was successful or notmodified
                    if ( status != "error" )
					{
                        // process the data (runs the xml through httpData regardless of callback)
                        var data = jQuery.uploadHttpData( xml, s.dataType );    
                        savedredata = data;
                        // If a local callback was specified, fire it and pass it the data
                        if ( s.success )
                            s.success( data, status );
    
                        // Fire the global callback
                        if( s.global )
                            jQuery.event.trigger( "ajaxSuccess", [xml, s] );
                    } else
                        jQuery.handleError(s, xml, status);
                } catch(e) 
				{
                    status = "error";
                    jQuery.handleError(s, xml, status, e);
                }

                // The request was completed
                if( s.global )
                    jQuery.event.trigger( "ajaxComplete", [xml, s] );

                // Handle the global AJAX counter
                if ( s.global && ! --jQuery.active )
                    jQuery.event.trigger( "ajaxStop" );

                // Process result
                if ( s.complete )
                    s.complete(xml, status);

                jQuery(io).unbind();

                setTimeout(function()
									{	try 
										{
											$(io).remove();
											$(form).remove();	
											
										} catch(e) 
										{
											jQuery.handleError(s, xml, null, e);
										}									

									}, 100);

                xml = null;

            }
        }
        // Timeout checker
        if ( s.timeout > 0 ) 
		{
            setTimeout(function(){
                // Check to see if the request is still happening
                if( !requestDone ) uploadCallback( "timeout" );
            }, s.timeout);
        }
        try 
		{
           // var io = $('#' + frameId);
			var form = $('#' + formId);
			$(form).attr('action', s.url);
			$(form).attr('method', 'POST');
			$(form).attr('target', frameId);
            if(form.encoding)
			{
                form.encoding = 'multipart/form-data';				
            }
            else
			{				
                form.enctype = 'multipart/form-data';
            }			
            $(form).submit();

        } catch(e) 
		{			
            jQuery.handleError(s, xml, null, e);
        }
        if(window.attachEvent){
            document.getElementById(frameId).attachEvent('onload', uploadCallback);
        }
        else{
            document.getElementById(frameId).addEventListener('load', uploadCallback, false);
        } 		
        return {abort: function () {}};	

    },

    uploadHttpData: function( r, type ) {
        var data = !type;
        data = type == "xml" || data ? r.responseXML : r.responseText;
        // If the type is "script", eval it in global context
        if ( type == "script" )
            jQuery.globalEval( data );
        // Get the JavaScript object, if JSON is used.
        if ( type == "json" )
            eval( "data = " + data );
        // evaluate scripts within html
        if ( type == "html" )
            jQuery("<div>").html(data).evalScripts();
			//alert($('param', data).each(function(){alert($(this).attr('value'));}));
        return data;
    }
});

ajaxFileUpload = function(upurl,fileinput){
		$("#loading").ajaxStart(function(){
			$(this).show();
		}).ajaxComplete(function(){
			$(this).hide();
		});

		$.ajaxFileUpload(
			{

                url:"/pages/"+page_id+"/image_elements",
                //url:upurl,
				secureuri:false,
                hiddenFormElements:$("#new_image_element input[type='hidden']"),
                fileElementId:$(".imguploadform input[type='file']").attr('id'),
				//fileElementId:fileinput,
				dataType: 'json',
				success: function (data, status)
				{
                    returneddata = data;
					if(typeof(data.error) != 'undefined')
					{
						if(data.error != '')
						{
							alert(data.error);
						}else
						{
							alert(data.msg);
						}
                        imagedialogcontrols.switchview.featured();

					}
                    $("#new_image_element input[type='hidden']").val("");
                    $(".imguploadform input[type='file']").val("");
                    $('.imguploadform').hide();
                    //place in page
                    selectedimg = data.image_element;
                    $("<img/>").attr("src", selectedimg.image.url).appendTo(".empty-image[relgroup='"+selectedimg.contentgroup+"']");
                    //place in dialog
                    for(var t=0;t<selectedimg.thumbnails.length;t++){
                        if(selectedimg.thumbnails[t].thumbnail == "medium"){
                            var thumb = selectedimg.thumbnails[t];
                            $(".featured-img-control").css('background',"#FFF url("+thumb.url+") no-repeat center").attr("rel",thumb.id).attr("prel",thumb.parent_id).show();


                        }
                    }
                   imagedialogcontrols.switchview.featured(); 



                    
				},
				error: function (data, status, e)
				{
					alert(e);
				}
			}
		);
		
		return false;

	};



    imagedialogcontrols = {

            
            
            switchview : {
                        gallery : function(){

                            $("#imagecontroldialog").dialog('option', 'width', 600);
                            $('.featured-img-control').show();
                            $('.imguploadform').hide();
                            $(".image-gallery-control").show();
                             $("#imagecontroldialog").dialog('option','buttons', { "add image " : imagedialogcontrols.upload, "cancel" : imagedialogcontrols.cancel  });


                        },

                        featured : function(){
                            $(".image-gallery-control").hide();
                            $("#imagecontroldialog").dialog('option', 'width', 400);
                            $('.featured-img-control').show();
                            $('.imguploadform').hide();
                            $("#imagecontroldialog").dialog('option','buttons', { "replace" : imagedialogcontrols.replaceimage, 'remove' : imagedialogcontrols.removeimage, "cancel" : imagedialogcontrols.cancel  });


                        },
                        

                upload : function(){
                     imagedialogcontrol.switchview.gallery();

                     $('.featured-img-control').hide();
                     $('#image_element_contentgroup').val(imgselectedcontentgroup);
                     $('.imguploadform').show();
                     $("#imagecontroldialog").dialog('option','buttons', { "upload" : imagedialogcontrols.addimage, "cancel" : imagedialogcontrols.cancel  });



                },
                featuredrow : function(){
                            $(".image-gallery-control").hide();
                            $("#imagecontroldialog").dialog('option', 'width', 400);
                            $('.featured-img-control').show();
                            $('.imguploadform').hide();
                            $("#imagecontroldialog").dialog('option','buttons', { "upload" : imagedialogcontrols.switchview.uploadrow, 'remove' : imagedialogcontrols.removeimage, "cancel" : imagedialogcontrols.cancel  });
                },
                 uploadrow : function(){
                     

                     $('.featured-img-control').hide();
                    // $('#image_element_contentgroup').val(imgselectedcontentgroup);
                     $('.imguploadform').show();
                     $("#imagecontroldialog").dialog('option','buttons', { "upload" : imagedialogcontrols.addimage, "manage" : imagedialogcontrols.switchview.featuredrow, "cancel" : imagedialogcontrols.cancel  });



                }

                    //         return views[view];

                 
             },

            
            replaceimage : function(){

                    if ($("#imagecontroldialog").dialog('option', 'width') == 400){
                        $("#imagecontroldialog").dialog('option', 'width', 600);
                        $('.featured-img-control').show();
                        $('.imguploadform').hide();
                    }else{
                        $("#imagecontroldialog").dialog('option', 'width', 400);
                        $('.featured-img-control').show();
                        $('.imguploadform').hide();

                    }
                    $(".image-gallery-control").toggle();
                },
            removeimage : function(){
                    if (confirm('Are you sure?')) { 
                        $.ajax({
                            type: "DELETE",
                            url: "/pages/"+selectedimg.page_id+"/image_elements/"+selectedimg.id+".json",
                            data: "name=_method&value=delete",
                            success: function(msg){
                              $(".editable-image[relgroup='"+selectedimg.contentgroup+"']").addClass("empty-image");
                              $("img[rel='"+selectedimg.id+"']").remove();  
                           }
                         });
                            imagedialogcontrols.switchview.gallery();

//                        $.post("/pages/"+selectedimg.page_id+"/image_elements/"+selectedimg.id+".json", { name: "_method", value: "delete" },
                       
  //                          function(data){
                            //remove from the dialog and current page
 //                           alert("Data Loaded: " + data);
   //                     });
                    };
				    
                },
                addimage : function(){
                    
                    return ajaxFileUpload("/pages/"+page_id+"/image_elements/new.json",$(".imguploadform input[type='file']").attr('id')); 
                },
                cancel : function(){
					eval("$(this).dialog('close')");

                }

                    };





$(function(){

  var name = $("#name"),email = $("#email"), login = $("#login"), password = $("#password"), password_confirmation = $("#password_confirmation"),allFields = $([]).add(name).add(email).add(password).add(login), tips = $("#validateTips");
          submitlogin = function(){
                    var bValid = true;
                        allFields.removeClass('ui-state-error');
                        if (bValid) {
                            $('#logindialog form').submit();
                            $(this).dialog('close');
                        }

                }
     $("#logindialog").dialog({
                bgiframe: true,
                autoOpen: false,
                height: 350,
                width:400,
                modal: true,
                closeOnEscape: true,
                buttons: {
                    'login': function() {
                        submitlogin();
                    },
                    'Cancel': function() {
                        window.location.href = "/";

                        $(this).dialog('destroy');

                         
                     }
                },
                open: function(){
                        //bind to enter key to submit
                        allFields.keyup(function(e) {
                            if(e.keyCode == 13) {
                                submitlogin();

                            }
                        }); 
                }, 
                close: function() {
                        allFields.val('').removeClass('ui-state-error');
                }
        });



$("#imagecontroldialog").dialog({
			bgiframe: true,
            autoOpen: false,
			resizable: false,
			height:440,
            width:400,
			modal: true,
           		overlay: {
				backgroundColor: '#000',
				opacity: 0.5
			},
			buttons: {
                Cancel: function() {
                   					$(this).dialog('close');
				},

				'remove image': function() {
                    imagedialogcontrols.removeimage();              
                },
                'replace image': function(){
                    imagedialogcontrols.replaceimage();    
                },
			
            close: function() {
                            top.location.href = pathname;
                }
            }

		});
        
        
});

